make test succeed again
authorchrislovsund@netbeans.org
Wed, 15 May 2013 23:04:20 +0200
changeset 399f98530851dd0
parent 398 fbaa0d9aa3af
child 400 183a12deacb1
make test succeed again
test framework is similar to that of the code generation suite, in the regard that tests can be recorded by temporarily setting a boolean to true.
PLSQL/Lexer/nbproject/project.xml
PLSQL/Lexer/test/unit/data/080617_75132_fndbas.cdb
PLSQL/Lexer/test/unit/data/081114_78488_VMOSFA.cdb
PLSQL/Lexer/test/unit/data/Dictionary.apy
PLSQL/Lexer/test/unit/data/FavoriteSchedules.apy
PLSQL/Lexer/test/unit/data/FndEvent.api
PLSQL/Lexer/test/unit/data/FndEvent.apy
PLSQL/Lexer/test/unit/data/IdentityPayInfo.apy
PLSQL/Lexer/test/unit/data/InstallationSite.apy
PLSQL/Lexer/test/unit/data/OpPersDiaryCalculation.apy
PLSQL/Lexer/test/unit/data/ScorecardInputValue.apy
PLSQL/Lexer/test/unit/data/Trainer.apy
PLSQL/Lexer/test/unit/data/expected/080617_75132_fndbas.cdb.structure
PLSQL/Lexer/test/unit/data/expected/081114_78488_VMOSFA.cdb.structure
PLSQL/Lexer/test/unit/data/expected/Dictionary.apy.structure
PLSQL/Lexer/test/unit/data/expected/FavoriteSchedules.apy.structure
PLSQL/Lexer/test/unit/data/expected/FndEvent.api.structure
PLSQL/Lexer/test/unit/data/expected/FndEvent.apy.structure
PLSQL/Lexer/test/unit/data/expected/IdentityPayInfo.apy.structure
PLSQL/Lexer/test/unit/data/expected/InstallationSite.apy.structure
PLSQL/Lexer/test/unit/data/expected/OpPersDiaryCalculation.apy.structure
PLSQL/Lexer/test/unit/data/expected/ScorecardInputValue.apy.structure
PLSQL/Lexer/test/unit/data/expected/Trainer.apy.structure
PLSQL/Lexer/test/unit/data/expected/fndbas_ora.cre.structure
PLSQL/Lexer/test/unit/data/expected/person.ins.structure
PLSQL/Lexer/test/unit/data/expected/sys_IalObjectSlave.api.structure
PLSQL/Lexer/test/unit/data/expected/sys_IalObjectSlave.apy.structure
PLSQL/Lexer/test/unit/data/expected/test.api.structure
PLSQL/Lexer/test/unit/data/expected/test.apy.structure
PLSQL/Lexer/test/unit/data/expected/test.upg.structure
PLSQL/Lexer/test/unit/data/expected/test1.apy.structure
PLSQL/Lexer/test/unit/data/expected/test2.apy.structure
PLSQL/Lexer/test/unit/data/expected/txtser.ins.structure
PLSQL/Lexer/test/unit/data/fndbas_ora.cre
PLSQL/Lexer/test/unit/data/person.ins
PLSQL/Lexer/test/unit/data/sys_IalObjectSlave.api
PLSQL/Lexer/test/unit/data/sys_IalObjectSlave.apy
PLSQL/Lexer/test/unit/data/test.api
PLSQL/Lexer/test/unit/data/test.apy
PLSQL/Lexer/test/unit/data/test.upg
PLSQL/Lexer/test/unit/data/test1.apy
PLSQL/Lexer/test/unit/data/test2.apy
PLSQL/Lexer/test/unit/data/txtser.ins
PLSQL/Lexer/test/unit/src/org/netbeans/modules/plsql/lexer/080617_75132_fndbas.cdb
PLSQL/Lexer/test/unit/src/org/netbeans/modules/plsql/lexer/081114_78488_VMOSFA.cdb
PLSQL/Lexer/test/unit/src/org/netbeans/modules/plsql/lexer/Dictionary.apy
PLSQL/Lexer/test/unit/src/org/netbeans/modules/plsql/lexer/FavoriteSchedules.apy
PLSQL/Lexer/test/unit/src/org/netbeans/modules/plsql/lexer/FndEvent.api
PLSQL/Lexer/test/unit/src/org/netbeans/modules/plsql/lexer/FndEvent.apy
PLSQL/Lexer/test/unit/src/org/netbeans/modules/plsql/lexer/IdentityPayInfo.apy
PLSQL/Lexer/test/unit/src/org/netbeans/modules/plsql/lexer/InstallationSite.apy
PLSQL/Lexer/test/unit/src/org/netbeans/modules/plsql/lexer/OpPersDiaryCalculation.apy
PLSQL/Lexer/test/unit/src/org/netbeans/modules/plsql/lexer/PlsqlBlockFactoryTest.java
PLSQL/Lexer/test/unit/src/org/netbeans/modules/plsql/lexer/ScorecardInputValue.apy
PLSQL/Lexer/test/unit/src/org/netbeans/modules/plsql/lexer/TestRecordPlayer.java
PLSQL/Lexer/test/unit/src/org/netbeans/modules/plsql/lexer/Trainer.apy
PLSQL/Lexer/test/unit/src/org/netbeans/modules/plsql/lexer/fndbas_ora.cre
PLSQL/Lexer/test/unit/src/org/netbeans/modules/plsql/lexer/person.ins
PLSQL/Lexer/test/unit/src/org/netbeans/modules/plsql/lexer/sys_IalObjectSlave.api
PLSQL/Lexer/test/unit/src/org/netbeans/modules/plsql/lexer/sys_IalObjectSlave.apy
PLSQL/Lexer/test/unit/src/org/netbeans/modules/plsql/lexer/test.api
PLSQL/Lexer/test/unit/src/org/netbeans/modules/plsql/lexer/test.apy
PLSQL/Lexer/test/unit/src/org/netbeans/modules/plsql/lexer/test.upg
PLSQL/Lexer/test/unit/src/org/netbeans/modules/plsql/lexer/test1.apy
PLSQL/Lexer/test/unit/src/org/netbeans/modules/plsql/lexer/test2.apy
PLSQL/Lexer/test/unit/src/org/netbeans/modules/plsql/lexer/txtser.ins
     1.1 --- a/PLSQL/Lexer/nbproject/project.xml	Wed May 15 16:07:35 2013 +0200
     1.2 +++ b/PLSQL/Lexer/nbproject/project.xml	Wed May 15 23:04:20 2013 +0200
     1.3 @@ -36,11 +36,24 @@
     1.4                  <test-type>
     1.5                      <name>unit</name>
     1.6                      <test-dependency>
     1.7 -                        <code-name-base>org.netbeans.modules.plsqlsupport.db</code-name-base>
     1.8 +                        <code-name-base>org.apache.commons.io</code-name-base>
     1.9                          <compile-dependency/>
    1.10                      </test-dependency>
    1.11                      <test-dependency>
    1.12 -                        <code-name-base>org.netbeans.modules.plsqlsupport.options</code-name-base>
    1.13 +                        <code-name-base>org.netbeans.libs.junit4</code-name-base>
    1.14 +                        <compile-dependency/>
    1.15 +                    </test-dependency>
    1.16 +                    <test-dependency>
    1.17 +                        <code-name-base>org.netbeans.modules.db</code-name-base>
    1.18 +                        <compile-dependency/>
    1.19 +                    </test-dependency>
    1.20 +                    <test-dependency>
    1.21 +                        <code-name-base>org.netbeans.modules.editor.mimelookup</code-name-base>
    1.22 +                        <compile-dependency/>
    1.23 +                    </test-dependency>
    1.24 +                    <test-dependency>
    1.25 +                        <code-name-base>org.netbeans.modules.nbjunit</code-name-base>
    1.26 +                        <recursive/>
    1.27                          <compile-dependency/>
    1.28                      </test-dependency>
    1.29                      <test-dependency>
    1.30 @@ -56,15 +69,11 @@
    1.31                          <compile-dependency/>
    1.32                      </test-dependency>
    1.33                      <test-dependency>
    1.34 -                        <code-name-base>org.netbeans.libs.junit4</code-name-base>
    1.35 +                        <code-name-base>org.netbeans.modules.plsqlsupport.db</code-name-base>
    1.36                          <compile-dependency/>
    1.37                      </test-dependency>
    1.38                      <test-dependency>
    1.39 -                        <code-name-base>org.netbeans.modules.db</code-name-base>
    1.40 -                        <compile-dependency/>
    1.41 -                    </test-dependency>
    1.42 -                    <test-dependency>
    1.43 -                        <code-name-base>org.netbeans.modules.editor.mimelookup</code-name-base>
    1.44 +                        <code-name-base>org.netbeans.modules.plsqlsupport.options</code-name-base>
    1.45                          <compile-dependency/>
    1.46                      </test-dependency>
    1.47                      <test-dependency>
     2.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     2.2 +++ b/PLSQL/Lexer/test/unit/data/080617_75132_fndbas.cdb	Wed May 15 23:04:20 2013 +0200
     2.3 @@ -0,0 +1,70 @@
     2.4 +--  --------------------------------------------------------------------------
     2.5 +--  File    :  080617_75132_Fndbas.cdb
     2.6 +--
     2.7 +--  Function: Adds performance indexes to tables related to BI services templates.
     2.8 +--            Old temporary template data is also removed.
     2.9 +--
    2.10 +--  NOTE    : Due to the fact the the customers might have sone or all these
    2.11 +--            indexes but with other names, the creation is done is separate blocks
    2.12 +--            and not in single one.
    2.13 +--
    2.14 +--  --------------------------------------------------------------------------
    2.15 +--  DATE     BY      NOTES
    2.16 +--  ------   -----   ---------------------------------------------------------
    2.17 +--  080617   LALISE  Created.
    2.18 +--  --------------------------------------------------------------------------
    2.19 +
    2.20 +SET SERVEROUTPUT ON SIZE 32000;
    2.21 +
    2.22 +BEGIN
    2.23 +   &AO..Installation_SYS.Log_Detail_Time_Stamp('FNDBAS','080617_75132_FNDBAS.cdb','Timestamp_1');
    2.24 +END;
    2.25 +/
    2.26 +
    2.27 +
    2.28 +PROMPT Add index on column template_id in table Dsod_Tab
    2.29 +DECLARE
    2.30 +   columns_       &AO..Installation_SYS.ColumnTabType ;
    2.31 +   table_name_    VARCHAR2(30) := 'DSOD_TAB';
    2.32 +   index_name_    VARCHAR2(30) := 'DSOD_IX1';
    2.33 +BEGIN
    2.34 +   IF NOT &AO..Installation_SYS.Is_Db_Patch_Registered('FNDBAS', 75132) THEN
    2.35 +      &AO..Installation_SYS.Set_Table_Column (columns_ , 'TEMPLATE_ID');
    2.36 +      &AO..Installation_SYS.Create_Index ( table_name_,
    2.37 +                                      index_name_,
    2.38 +                                      columns_,
    2.39 +                                      'N',
    2.40 +                                      '&FND_INDEX');
    2.41 +      &AO..Installation_SYS.Reset_Column_Table(columns_);
    2.42 +   END IF;
    2.43 +END;
    2.44 +/
    2.45 +
    2.46 +PROMPT Add index on column template_id in table Dsod_Set_Tab
    2.47 +DECLARE
    2.48 +   columns_       &AO..Installation_SYS.ColumnTabType ;
    2.49 +   table_name_    VARCHAR2(30) := 'DSOD_SET_TAB';
    2.50 +   index_name_    VARCHAR2(30) := 'DSOD_SET_IX1';
    2.51 +BEGIN
    2.52 +   IF NOT &AO..Installation_SYS.Is_Db_Patch_Registered('FNDBAS', 75132) THEN
    2.53 +      &AO..Installation_SYS.Set_Table_Column (columns_ , 'TEMPLATE_ID');
    2.54 +      &AO..Installation_SYS.Create_Index ( table_name_,
    2.55 +                                      index_name_,
    2.56 +                                      columns_,
    2.57 +                                      'N',
    2.58 +                                      '&FND_INDEX');
    2.59 +      &AO..Installation_SYS.Reset_Column_Table(columns_);
    2.60 +   END IF;
    2.61 +END;
    2.62 +/
    2.63 +
    2.64 +
    2.65 +BEGIN
    2.66 +   &AO..Installation_SYS.Log_Detail_Time_Stamp('FNDBAS','080617_75132_FNDBAS.cdb','Done');
    2.67 +END;
    2.68 +/
    2.69 +
    2.70 +PROMPT SCRIPT 080617_75132_FNDBAS.cdb COMPLETED
    2.71 +
    2.72 +
    2.73 +SET SERVEROUTPUT OFF
     3.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     3.2 +++ b/PLSQL/Lexer/test/unit/data/081114_78488_VMOSFA.cdb	Wed May 15 23:04:20 2013 +0200
     3.3 @@ -0,0 +1,22 @@
     3.4 +------------------------------------------------------------------------------------
     3.5 +--
     3.6 +--  Module  : VMOSFA
     3.7 +--
     3.8 +--  File    : 081114_78488_VMOSFA.cdb
     3.9 +--
    3.10 +--  Date    Sign     History
    3.11 +--  ------  ------   ---------------------------------------------------------------
    3.12 +--  081114  maabse   Bug 78488: Comment is missing on the views VMO_BASE_SYNC_PACKAGE_VIEW and VMO_BASE_SYNC_TRIGGER_VIEW
    3.13 +------------------------------------------------------------------------------------
    3.14 +
    3.15 +PROMPT Starting 081114_78488_VMOSFA.cdb
    3.16 +
    3.17 +----------------------------------------------------------------------------------------------------------------------
    3.18 +
    3.19 +COMMENT ON TABLE VMO_BASE_SYNC_PACKAGE_VIEW IS 'LU=vmobaseview^PROMPT=Internal base view in Sales and Marketing^MODULE=VMOSFA^'
    3.20 +/
    3.21 +COMMENT ON TABLE VMO_BASE_SYNC_TRIGGER_VIEW IS 'LU=vmobaseview^PROMPT=Internal base view in Sales and Marketing^MODULE=VMOSFA^'
    3.22 +/
    3.23 +
    3.24 +PROMPT Finished with 081114_78488_VMOSFA.cdb
    3.25 +
     4.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     4.2 +++ b/PLSQL/Lexer/test/unit/data/Dictionary.apy	Wed May 15 23:04:20 2013 +0200
     4.3 @@ -0,0 +1,3130 @@
     4.4 +-----------------------------------------------------------------------------
     4.5 +--
     4.6 +--  Package: Dictionary_SYS
     4.7 +--
     4.8 +--  Purpose: This package creates system services for logical unit dictionary.
     4.9 +--           The services includes dictionary searches of various kinds and
    4.10 +--           decoding routines for comment strings.
    4.11 +--
    4.12 +--  IFS/Design Template Version 2.3
    4.13 +--
    4.14 +--  Date    Sign  History
    4.15 +--  ------  ----  -----------------------------------------------------------
    4.16 +--  950823  STLA  Created.
    4.17 +--  950901  STLA  Corrected fetch of enumerated lu list.
    4.18 +--  950901  STLA  Searches methods from user_source instead of sys.argument$.
    4.19 +--  950904  ERFO  Separator fetched from Client_SYS and standard changes.
    4.20 +--  950905  ERFO  Rearrangements in method orders, change headings...
    4.21 +--  950905  ERFO  Changed separator character in Enumerate_Logical_Units_
    4.22 +--                and Enumerate_Data_Items_.
    4.23 +--  950911  STLA  Removed last call to sys.argument$
    4.24 +--  950912  STLA  Added funtion to get item prompt
    4.25 +--  950912  STLA  Modified fetch of views and packages belonging to a LU
    4.26 +--  950915  STLA  Added funtion to get lu view for list of values
    4.27 +--  950926  STLA  Removed picture option from DATATYPE comments
    4.28 +--  950927  STLA  Added method to fetch list of system services
    4.29 +--  950928  STLA  Added method to fetch description for logical unit
    4.30 +--  950928  STLA  Added method to fetch list of domains (eg IIDs)
    4.31 +--  951005  STLA  Added backwards compatibility for Get_Lu_View_
    4.32 +--                Added method Get_Logical_Unit_Ref_Methods_
    4.33 +--  951005  BOIS  Corrected into variable length in Get_View_Logical_Unit_
    4.34 +--  951006  ERFO  Removed method Get_View_Logical_Unit_
    4.35 +--  951006  STLA  Made Generate_<_Comment_ generate dummy comment if
    4.36 +--                database column is not found.
    4.37 +--  951006  STLA  Added foreign key methods to Enumerate_Data_Items_
    4.38 +--                Removed reference to Client_SYS.field_separator_
    4.39 +--  951030  STLA  Corrected Get_Logical_Unit_Ref_Methods_ returning
    4.40 +--                incorrect enumerate syntax.
    4.41 +--  951030  STLA  Added pragma restict_references for att methods
    4.42 +--  951030  STLA  Corrected Enumerate_Domains_ uninitialized variable
    4.43 +--  951030  STLA  Added method Get_Logical_Unit_Method_
    4.44 +--  951030  DAJO  Added method Get_System_Service_Properties_ for
    4.45 +--                system service translation support.
    4.46 +--  951101  ERFO  Added work-around BIGCHAR2 for Enumerate_Data_Items_
    4.47 +--                and Enumerate_Logical_Units_.
    4.48 +--  951208  STLA  Corrected method Get_Data_Item_Properties_ (Bug #283).
    4.49 +--  960110  STLA  Added overloaded version of Get_Logical_Unit_Properties_
    4.50 +--                so that grant/revoke tool can operate efficiently.
    4.51 +--  960111  STLA  Use of 32730 as max length for long VARCHAR2 (Bug #325).
    4.52 +--  960111  ERFO  Added method Activate_Language_Refresh_ to support
    4.53 +--                language setting changes on the fly (Idea #326).
    4.54 +--  960225  ERFO  Added new module property methods to support the module
    4.55 +--                concept within the LU-dictionary (Idea #409).
    4.56 +--  960319  ERFO  Added extra method for logical unit properties to support
    4.57 +--                new features within system service Document_SYS (Idea #463).
    4.58 +--  960325  ERFO  Added methods for internal dictionary storage to support
    4.59 +--                performance needs from IFS/Security (Idea #452).
    4.60 +--  960326  ERFO  Added new parent/child property methods to support relations
    4.61 +--                between parent and children for logical units (Idea #410).
    4.62 +--  960326  ERFO  Add cache techniques in LU-dictionary by sending an extra
    4.63 +--                in parameter which tells if the cached value, stored in a
    4.64 +--                package global may be used or not (Idea #466).
    4.65 +--  960401  ERFO  Split this package into two for deployment reasons.
    4.66 +--  960402  ERFO  Changed cursor in method Get_Logical_Unit_Parent_ as a
    4.67 +--                work-around due to a PL/SQL bug in Oracle 7.1.
    4.68 +--  960404  ERFO  Two new facilities in method Comment_Value_ to support NULL-
    4.69 +--                values in a comment string and to support ambigous key names
    4.70 +--                in a comment sting to support IFS/Info Services.
    4.71 +--  960404  ERFO  Changes to be ORACLE 7.3 compliant (Bug #473).
    4.72 +--  960415  ERFO  Changes in method Enumerate_Data_Items to retrieve package
    4.73 +--                name information by using name conventions instead of using
    4.74 +--                the LU-dictionary for optimal performance in the dialog for
    4.75 +--                Foundation Properties (Idea #491).
    4.76 +--  960429  ERFO  Changes in old method Enumerate_System_Services_ and added
    4.77 +--                PRAGMA-option WNPS where possible.
    4.78 +--  960503  STLA  Make Get_Data_Item_Properties_ do exception when column
    4.79 +--                not found.
    4.80 +--  960506  ERFO  Added dummy parameter to method Rebuild_Dictionary_Storage.
    4.81 +--                Removed use of field separator in beginning of the package
    4.82 +--                and view list columns in Rebuild_Dictionary_Storage and
    4.83 +--                added a special filter for company styled global keys.
    4.84 +--                Added parent child relationship by name convention for
    4.85 +--                IID-domains and ordinary logical units.
    4.86 +--  960508  ERFO  Added implementation method Method_Security_Enabled__ to
    4.87 +--                ensure correct security handle of package methods.
    4.88 +--  960517  ERFO  Fixed BIGCHAR2 problem by changing to VARCHAR2 (Bug #607).
    4.89 +--                Changed representation and logic in dictionary help table
    4.90 +--                to support very big logical units (Bug #611).
    4.91 +--                Added method Init to the list of non-security methods.
    4.92 +--  960528  ERFO  Changed order of close cursor in help method.
    4.93 +--  960610  ERFO  Changes in method Enum_Modules_ not to be case-sensitive
    4.94 +--                in the short name of the module identity (Bug #663).
    4.95 +--  960612  ERFO  Rearrangements and performance improvements in method
    4.96 +--                Rebuild_Dictionary_Storage_ to support all kinds of PL/SQL
    4.97 +--                without depending on too much name conventions in the way of
    4.98 +--                using the language (Bug #664).
    4.99 +--  960819  ERFO  Changes in Activate_Language_Refresh_ to improve performance
   4.100 +--                when searching for translation candidates (Idea #746).
   4.101 +--  960826  ERFO  Increased size of method variable in the implementation
   4.102 +--                of Rebuild_Dictionary_Storage_ (Bug #768).
   4.103 +--  960827  MANY  Changes in Enumerate_System_Services_, now performs a distinct
   4.104 +--                list of services (Bug #769).
   4.105 +--                Changes in Get_System_Service_Properties_, now returns a list
   4.106 +--                of packages (Bug #769).
   4.107 +--  960911  ERFO  Added error handling for occasions when using illegal module
   4.108 +--                name in logical unit source code package header (Idea #790).
   4.109 +--  960916  ERFO  Decreased result set for all cursor against package globals
   4.110 +--                in the view USER_SOURCE for optimal performance (Idea #798).
   4.111 +--  960919  ERFO  Rearrangements in Rebuild_Dictionary_Storage concerning
   4.112 +--                methods without any parameters.
   4.113 +--  961028  MANY  Changes in several locations, including Rebuild_Dictionary_Storage
   4.114 +--                and Get_Logical_Unit_Properties to ensure that reports are treated
   4.115 +--                correctly within the dictionary.
   4.116 +--  961029  ERFO  Added method Get_Logical_Unit_Keys_ to retrieve key names and/or
   4.117 +--                values for a specific logical unit instance (Idea #845).
   4.118 +--  961029  ERFO  Even more performance improvements in LU-dictionary (Idea #798)
   4.119 +--                and adjustments in Rebuild_Dictionary_Storage_.
   4.120 +--  961116  ERFO  Ensure that the conversion methods between db and client
   4.121 +--                names does not result in any exception (Bug #859).
   4.122 +--  961117  ERFO  Removed method Lock__ from being security aware.
   4.123 +--  961118  ERFO  Solve problem with naming conflicts in IFS/Accounting Rules.
   4.124 +--  961125  ERFO  Language change on the fly for client state values and added
   4.125 +--                state methods in function Method_Security_Enabled___.
   4.126 +--  961128  ERFO  Add filter to remove Foundation1 modules from IFS/Security
   4.127 +--                and corrected view problem in Get_Logical_Unit_Ref_Methods.
   4.128 +--  970122  ERFO  Solved problem with timestamp on the security cache after
   4.129 +--                that the Foundation1-modules being removed (Bug #944).
   4.130 +--  970127  ERFO  Illegal OR-statement in Get_Lov_View_ corrected to avoid
   4.131 +--                returning view connected to IFS/Info Services (Bug #957).
   4.132 +--  970212  ERFO  Correction in Get_Lu_Prompt_ to choose the first view
   4.133 +--                found instead of choosing the last one (Bug #977).
   4.134 +--  970213  ERFO  Add refresh of document dictionary info (Bug #985).
   4.135 +--  970403  ERFO  Removed third parameter in method Comment_Value_.
   4.136 +--  970424  ERFO  Changes in method Enumerate_Data_Items_ to include
   4.137 +--                more functions in the pseudo column list (Bug #1035).
   4.138 +--  970507  ERFO  Removed unused methods from the package (ToDo #1107).
   4.139 +--  970725  DOZE  Added method Get_Logical_Unit_Tables_ for history (ToDo #1109).
   4.140 +--  970825  ERFO  Re-installed Foundation1 modules in dictionary cache.
   4.141 +--  970826  ERFO  Solved problem in Rebuild_Dictionary_Storage_ when having
   4.142 +--                LU reference definitions longer than 100 bytes (Bug #1610).
   4.143 +--  971022  ERFO  Refresh only be run as application owner (ToDo #1286).
   4.144 +--                Removed additional refresh of Document_SYS cache.
   4.145 +--  971124  ERFO  Changes in Generate_Function_Comment___ to get correct
   4.146 +--                function data type to Foundation1 Properties (Bug #718).
   4.147 +--  971218  ERFO  String length is changed from 20 to 200 in method
   4.148 +--                Generate_Default_Comment to solve IID limits.
   4.149 +--  971218  ERFO  Added method Get_Data_Source_Properties__ and method
   4.150 +--                Get_Data_Item_Properties__ supporting the new SORT-flag
   4.151 +--                for view order-by clauses (ToDo #1633).
   4.152 +--  980211  DOZE  Added method Enum_Table_Columns_ for IFS/Design (ToDo #1867).
   4.153 +--  980418  ERFO  Correction in Activate_Language_Refresh_ (Bug #2365).
   4.154 +--  980504  ERFO  Oracle8-compliance in exception handle (Bug #2412).
   4.155 +--  980505  MANY  Correction in Activate_Language_Refresh_ (Bug #2365), continue
   4.156 +--                looping when error in specific package until all are finished.
   4.157 +--  980211  DOZE  Changed Enum_Table_Columns_ (Bug #2569).
   4.158 +--  980909  MANY  Changed Activate_Language_Refresh_ to only refresh packages
   4.159 +--                that are actually initiated within the active session (Bug #2685)
   4.160 +--  980915  ERFO  Reinstalled old version of Activate_Language_Refresh (Bug #2685).
   4.161 +--  981013  ERFO  Added method Enumerate_Logical_Units__ and reorganization
   4.162 +--                in Rose-model and model properties (ToDo #2774).
   4.163 +--  981207  DOZE  Removed part of Enumerate_Data_Items_ (Bug #2918)
   4.164 +--  990216  ERFO  Correction in Method_Security_Enabled___ to ensure that no
   4.165 +--                methods will be removed from the security tool (Bug #3141).
   4.166 +--  990222  ERFO  Yoshimura: Changes in Rebuild_Dictionary_Storage_ (ToDo #3160).
   4.167 +--  990428  ERFO  Rebuild performance and logical bug fixes (Bug #3333).
   4.168 +--  990605  ERFO  Change cursor in Activate_Language_Refresh_ (Bug #3411).
   4.169 +--  990805  ERFO  Added column METHOD_LIST2 to include large LU:s (ToDo #3365).
   4.170 +--  990922  ERFO  Added method Exist_Db in cursor in Rebuild (Bug #3590).
   4.171 +--  991005  DOZE  Translation between "Ifs Currency" and "IFS Currency" (Bug #3575)
   4.172 +--  000301  ERFO  Added cursor for pragma-methods in Rebuild-logic (Todo #3846).
   4.173 +--  000405  ERFO  Added resolve-operation for Security 2001 (ToDo #3846).
   4.174 +--  000522  ROOD  Performance improvements in Rebuild_Dictionary_Storage_.  (ToDo #3894).
   4.175 +--  000823  ROOD  Added condition for appowner in Get_Logical_Unit_Tables_ (ToDo #3919).
   4.176 +--  001211  ERFO  Added view FND_TAB_COMMENTS and use it in this package (Bug #18619).
   4.177 +--  001214  ERFO  Removed ACCRUL-specific code in Rebuild-procedure (ToDo #3973).
   4.178 +--  010926  ROOD  Added check not null on inparameters in most get-methods (Bug#22111).
   4.179 +--  011014  ROOD  Made Rebuild_Dictionary_Storage_ ignore case and comments (Bug#25453).
   4.180 +--  011122  ROOD  Added view FND_COL_COMMENTS and used it in this package (Bug #26328).
   4.181 +--  020115  ROOD  Moved views to api-file to avoid installation dependencies (Bug #26328).
   4.182 +--  020527  ROOD  Added group by statements to work around Oracle bug in
   4.183 +--                Rebuild_Dictionary_Storage_ (Bug#29242).
   4.184 +--  020628  ROOD  Corrected usage of General_SYS.Init_Method (ToDo#4087).
   4.185 +--  030212  ROOD  Changed module to FNDBAS (ToDo#4149).
   4.186 +--  030317  ROOD  Replaced General_SYS.Get_Database_Properties with
   4.187 +--                Database_SYS.Get_Database_Properties (ToDo#4143).
   4.188 +--  030502  ROOD  Enabled dictionary information for system services (ToD0#4259).
   4.189 +--  030613  ROOD  Rebuilt the Get_Logical_Unit_Properties_xx methods (ToDo#4162).
   4.190 +--  030623  ROOD  Added public methods for runtime dictionary information support.
   4.191 +--                These methods replace equivalents in Transaction_SYS (ToDo#4162)
   4.192 +--  030819  ROOD  Trimmed whitespaces to the right for methods with pragma
   4.193 +--                in method Rebuild_Dictionary_Storage_ (ToDo#4160).
   4.194 +--  030931  HAAR  Obsoleted method Activate_Language_Refresh_ (ToDo#4305).
   4.195 +--  040407  HAAR  Unicode bulk changes,
   4.196 +--                extended define variable length in Get_Logical_Unit_Keys_ (F1PR408B).
   4.197 +--  040507  HAAR  Added Get_Logical_Unit and Get_Logical_Unit_ (F1PR419).
   4.198 +--  040607  ROOD  Added views for dictionary information (F1PR413).
   4.199 +--  040609  HAAR  Changes in Rebuild_Dictionary_Storage_ due to changed behavior in Oracle10g (Bug#44668).
   4.200 +--  040617  ROOD  Removed obsolete interfaces and restructured the implementation.
   4.201 +--                Moved all methods needed in Design-time to new system service
   4.202 +--                Design_SYS (F1PR413).
   4.203 +--  040907  ROOD  Increased the amount of information stored in the dictionary cache, regarding
   4.204 +--                view comments etc. Used new information in implementation.
   4.205 +--                Changed interface Get_Item_Prompt_, renamed Get_Main_View to Get_Base_View,
   4.206 +--                removed Get_Lov_View_ (F1PR413).
   4.207 +--  040908  ROOD  Increased the length for column_reference and added exception handling
   4.208 +--                for extraction of view column comments (F1PR413).
   4.209 +--  040910  ROOD  Changed default values for when column prompts couldn't be evaluated (F1PR413).
   4.210 +--  040916  ROOD  Avoided partial delete of column values if not necessary and other
   4.211 +--                performance improvements (F1PR413).
   4.212 +--  040923  ROOD  Added refresh mode. Made Get_Base_View_ public (F1PR413).
   4.213 +--  041025  ROOD  Modified date comparison in Rebuild_Dictionary_Storage_ and
   4.214 +--                Check_Dictionary_Storage_ to workaround date problems with Unicode (Call#119047).
   4.215 +--  041221  ROOD  Rewrote major parts of Rebuild_Dictionary_Storage_ to add more information
   4.216 +--                into LU dictionary and to improve performance (F1PR413).
   4.217 +--  041228	ROOD  Moved all views to api-file to indicate that they are public (F1PR413).
   4.218 +--  050105  ROOD  Changed values for view type in dictionary_sys_view_tab (F1PR413).
   4.219 +--  050111  JORA  Added view (dictionary_sys_state_event) for states  (F1PR413).
   4.220 +--  050117  JORA  Added view (dictionary_sys_state_trans) for states transitions (F1PR413).
   4.221 +--  050128  JORA  Moved lu_sub_type from  dictionary_sys_tab
   4.222 +--                to dictionary_sys_package_tab (F1PR413).
   4.223 +--  050310  HAAR  Added printout for LU names longer than 25 characters (F1PR480).
   4.224 +--  050408  JORA  Added assertion for dynamic SQL.  (F1PR481)
   4.225 +--  050513  JORA  Added Rebuild_State_Machine___. (F1PR413D)
   4.226 +--  050520  JORA  Added Get_No_Overloads, Get_No_Arguments, Get_Min_No_Arguments,
   4.227 +--                Get_Max_No_Arguments, Get_Argument_Type  (ESCHND-F1).
   4.228 +--  050706  HAAR  Removed depricated functions moved to Design_SYS (Bug#52284).
   4.229 +--                Enum_Modules_, Get_Logical_Unit_Properties_, Get_Data_Source_Properties_
   4.230 +--                Get_Data_Item_Properties_, Get_Logical_Unit_Method_ and Enum_Table_Columns_.
   4.231 +--  050818  JORA  Improved error msg for Rebuild_State_Machine___.
   4.232 +--  050830  JORA  Improved performace of Rebuild_Dictionary_Storage.
   4.233 +--  051003  HAAR  Changed Enum_Module_Logical_Units_ to include system services (F1PR843).
   4.234 +--  051110  HAAR  Added new argument to Enumerate_Logical_Units__.
   4.235 +--  051110  HAAR  Enum_Module_All_Logical_Units_ and Get_Logical_Unit_Properties2__ added (F1PR843).
   4.236 +--  051111  HAAR  Changed so that the follwoing methods are treated as PRAGMA methods:
   4.237 +--                LOCK__, LANGUAGE_REFRESHED, INIT, FINITE_STATE_DECODE__, ENUMERATE_STATES__,
   4.238 +--                FINITE_STATE_EVENTS__, ENUMERATE_EVENTS__, 'ENUMERATE', 'EXIST', 'EXIST_DB' (F1PR483).
   4.239 +--  051128  HAAR  Removed duplicate state values.
   4.240 +--  060105  UTGULK Annotated Sql injection.
   4.241 +--  060130  HAAR  Value error in Rebuild_Dictionary_Storage_ (Call 131508).
   4.242 +--  060426  HAAR  Added support for query against ROWSTATE instead of STATE when possible (Bug#57581).
   4.243 +--  060428  HAAR  Fixed problem in Rebuild_Dictionary_Storage_ when using Oracle 10.2.0.2 (Bug#57648).
   4.244 +--  070111  HAAR  Reroute xxx_Is_Installed methods to Database_SYS methods during Installation.
   4.245 +--                Added method Set_Installation_Mode (Bug#61829).
   4.246 +--  080208  HAAR  Added update of Cache Management when refreshing the cache (Bug#71136).
   4.247 +--  080304  HAAR  Some changes in refresh of cache (Bug#72156):
   4.248 +--                - Packages with errors or used for test can cause our tools to refresh all the time.
   4.249 +--                - Only consider packages with extension _API, _RPI and _SYS.
   4.250 +--                - Make error texts available in out parameter.
   4.251 +--                - Search Domain packages are not considered during the refresh of the Dictionary cache.
   4.252 +--                - Return errors in CLOB out variable.
   4.253 +--  080901  HASPLK Correcetd method Clientnametodbname to work with 30 characters long View names.
   4.254 +--  090309  HASPLK Added method Get_Installation_Mode (Bug#81092).
   4.255 +--  090312  HAAR  Changed so that Check_Method_From_View___ loops over all packages. (Bug#81246).
   4.256 +--                Changed so that ordering of packages in dictionary_sys_package_tab always is sorted in _API , _RPI, _SYS.
   4.257 +--  100324  UsRa  Changed Rebuild_Dictionary_Storage___ to include a new way to locate the base view of an LU (Bug#89730).
   4.258 +--  100531  ChMu  Changed Refresh_Domain_State_Info___ and Tokenize_Lists___.(Bug#90304-Correction not to Patched into Next Core)  
   4.259 +--  100531  GeGu  Modified Rebuild_Dictionary_Storage___ clear the middle tire cache as well
   4.260 +--  100603  ChMu  Modified Tokenize_Lists___ to remove '||' from domain/state information
   4.261 +-----------------------------------------------------------------------------
   4.262 +--
   4.263 +--  Contents:  Property fetching routines for run-time use (private)
   4.264 +--             Naming conversions for client versus database object names
   4.265 +--             Comment decoding routines for LU-dictionary
   4.266 +--             Prompt fetching routines, mainly used for localization
   4.267 +--             Property fetching routines for run-time use (protected)
   4.268 +--             Runtime performance refreshment routines
   4.269 +--             Property fetching routines for design-time use (Depreciated)
   4.270 +--             Public runtime methods for dictionary information support
   4.271 +--
   4.272 +-----------------------------------------------------------------------------
   4.273 +
   4.274 +DEFINE MODULE        = FNDBAS
   4.275 +DEFINE SERVICE       = Dictionary
   4.276 +DEFINE PKG           = DICTIONARY_SYS
   4.277 +
   4.278 +-----------------------------------------------------------------------------
   4.279 +-------------------- PACKAGES FOR METHODS -----------------------------------
   4.280 +-----------------------------------------------------------------------------
   4.281 +
   4.282 +PROMPT Creating &PKG implementation
   4.283 +
   4.284 +CREATE OR REPLACE PACKAGE BODY &PKG IS
   4.285 +
   4.286 +TYPE lu_struct_type IS TABLE OF VARCHAR2(32000) INDEX BY BINARY_INTEGER;
   4.287 +TYPE object_array IS TABLE OF VARCHAR2(30) INDEX BY BINARY_INTEGER;
   4.288 +
   4.289 +field_separator_ CONSTANT VARCHAR2(1)     := Client_SYS.field_separator_;
   4.290 +record_separator_ CONSTANT VARCHAR2(1)    := Client_SYS.record_separator_;
   4.291 +text_separator_  CONSTANT VARCHAR2(1)     := Client_SYS.text_separator_;
   4.292 +
   4.293 +installation_     BOOLEAN                 := FALSE;
   4.294 +
   4.295 +-----------------------------------------------------------------------------
   4.296 +-------------------- SERVICE SPECIFIC IMPLEMENTATION METHOD DECLARATIONS ----
   4.297 +-----------------------------------------------------------------------------
   4.298 +
   4.299 +FUNCTION Check_Method_From_View___ (
   4.300 +   view_name_      IN  VARCHAR2,
   4.301 +   method_name_    IN  VARCHAR2 ) RETURN VARCHAR2;
   4.302 +
   4.303 +-----------------------------------------------------------------------------
   4.304 +-------------------- SERVICE SPECIFIC IMPLEMENTATION METHODS ----------------
   4.305 +-----------------------------------------------------------------------------
   4.306 +
   4.307 +FUNCTION Check_Method_From_View___ (
   4.308 +   view_name_      IN  VARCHAR2,
   4.309 +   method_name_    IN  VARCHAR2 ) RETURN VARCHAR2
   4.310 +IS
   4.311 +   lu_name_               VARCHAR2(30);
   4.312 +   package_list_          VARCHAR2(2000);
   4.313 +   package_name_          VARCHAR2(30);
   4.314 +   index_                 NUMBER;
   4.315 +BEGIN
   4.316 +   lu_name_      := Get_Logical_Unit(view_name_, 'VIEW');
   4.317 +   package_list_ := Get_Logical_Unit_Packages__(lu_name_);
   4.318 +   index_        := instr(package_list_, field_separator_);
   4.319 +   WHILE (index_ > 0) LOOP
   4.320 +      package_name_ := Substr(package_list_, 1, index_ - 1);
   4.321 +      package_list_ := Substr(package_list_, index_ + 1);
   4.322 +      IF (Method_Is_Installed(package_name_, method_name_)) THEN
   4.323 +         RETURN(package_name_||'.'||method_name_);
   4.324 +      END IF;
   4.325 +      index_ := instr(package_list_, field_separator_);
   4.326 +   END LOOP;
   4.327 +   RETURN(NULL);
   4.328 +END Check_Method_From_View___;
   4.329 +
   4.330 +FUNCTION Rebuild_Dictionary_Storage___ (
   4.331 +   dummy_        IN NUMBER,
   4.332 +   refresh_mode_ IN VARCHAR2 DEFAULT 'PARTIAL',
   4.333 +   write_clob_   IN BOOLEAN  DEFAULT FALSE ) RETURN CLOB
   4.334 +IS
   4.335 +   refresh_all_      BOOLEAN := refresh_mode_ = 'FULL';
   4.336 +   refresh_views_    BOOLEAN := refresh_mode_ IN ('VIEWS', 'PARTIAL', 'LIGHT');
   4.337 +   refresh_pkgs_     BOOLEAN := refresh_mode_ IN ('PACKAGES', 'PARTIAL', 'LIGHT');
   4.338 +   rebuild_needed_   NUMBER;
   4.339 +   last_update_      DATE;
   4.340 +   start_time_       DATE;
   4.341 +   packages_         object_array;
   4.342 +   methods_          object_array;
   4.343 +   views_            object_array;
   4.344 +
   4.345 +   pkg_lu_name_      VARCHAR2(30);
   4.346 +   pkg_module_       VARCHAR2(6);
   4.347 +   pkg_lu_type_      VARCHAR2(1);
   4.348 +   pkg_lu_sub_type_  VARCHAR2(1);
   4.349 +   pkg_index_        NUMBER;
   4.350 +
   4.351 +   method_           VARCHAR2(100);
   4.352 +
   4.353 +   view_lu_name_     VARCHAR2(30);
   4.354 +   view_module_      VARCHAR2(6);
   4.355 +   view_prompt_      VARCHAR2(200);
   4.356 +   view_comment_     VARCHAR2(2000);
   4.357 +   view_index_       NUMBER;
   4.358 +   base_view_        BOOLEAN;
   4.359 +
   4.360 +   error_text_       CLOB;
   4.361 +
   4.362 +   TYPE domain_states_array IS TABLE OF VARCHAR2(120) INDEX BY BINARY_INTEGER;
   4.363 +   db_values_        domain_states_array;
   4.364 +   client_values_    domain_states_array;
   4.365 +
   4.366 +   TYPE complete_value_array IS TABLE OF dictionary_sys_domain_tab%ROWTYPE INDEX BY BINARY_INTEGER; -- same as dictionary_sys_state_tab...
   4.367 +   complete_values_  complete_value_array;
   4.368 +
   4.369 +   TYPE state_event_array IS TABLE OF dictionary_sys_state_event_tab%ROWTYPE INDEX BY BINARY_INTEGER;
   4.370 +   state_event_values_  state_event_array;
   4.371 +
   4.372 +   CURSOR get_last_update IS
   4.373 +      SELECT MAX(rowversion)
   4.374 +      FROM dictionary_sys_tab;
   4.375 +
   4.376 +   --
   4.377 +   -- LAST_DDL_TIME:
   4.378 +   --    The timestamp for the last DDL change (including GRANT and REVOKE) to the object.
   4.379 +   --    Format is VARCHAR2(19)...
   4.380 +   --
   4.381 +   -- TIMESTAMP
   4.382 +   --    The timestamp for the specification of the object.
   4.383 +   --    Format is DATE.
   4.384 +   --
   4.385 +   -- VIEWS:
   4.386 +   --    TIMESTAMP for a view is not updated unless the code of the view is modified.
   4.387 +   --
   4.388 +   -- PACKAGES:
   4.389 +   --    TIMESTAMP for a packages is updated as soon as the package code is recompiled.
   4.390 +   --
   4.391 +   -- This is the reason why different criteria is used for views and for packages.
   4.392 +   -- It is necessary that views are refreshed after they have been recompiled,
   4.393 +   -- even if the code has not been modified, since the information is in the comments.
   4.394 +   --
   4.395 +
   4.396 +   -- Packages to update (timestamp has changed since last update)
   4.397 +   CURSOR get_pkgs_to_update(last_cache_update_ IN DATE) IS
   4.398 +      SELECT object_name
   4.399 +      FROM user_objects
   4.400 +      WHERE object_type = 'PACKAGE BODY'
   4.401 +      AND substr(object_name, -4) IN ('_API', '_RPI', '_SYS')
   4.402 +      AND timestamp > to_char(last_cache_update_, 'YYYY-MM-DD:HH24:MI:SS')
   4.403 +      ORDER BY substr(object_name, -3); -- The ordering should be API, RPI, SYS
   4.404 +
   4.405 +   -- Views to update (last_ddl_time has changed since last update)
   4.406 +   CURSOR get_views_to_update(last_cache_update_ IN DATE) IS
   4.407 +      SELECT object_name
   4.408 +      FROM user_objects
   4.409 +      WHERE object_type = 'VIEW'
   4.410 +      AND last_ddl_time > last_cache_update_
   4.411 +      ORDER BY created;
   4.412 +
   4.413 +   -- All packages (used when doing a full refresh for performance reasons)
   4.414 +   CURSOR get_all_pkgs IS
   4.415 +      SELECT object_name
   4.416 +      FROM user_objects
   4.417 +      WHERE object_type = 'PACKAGE'
   4.418 +      AND substr(object_name, -4) IN ('_API', '_RPI', '_SYS')
   4.419 +      ORDER BY substr(object_name, -3); -- The ordering should be API, RPI, SYS
   4.420 +
   4.421 +   -- All view (used when doing a full refresh for performance reasons)
   4.422 +   CURSOR get_all_views IS
   4.423 +      SELECT object_name
   4.424 +      FROM user_objects
   4.425 +      WHERE object_type = 'VIEW'
   4.426 +      ORDER BY created;
   4.427 +
   4.428 +   -- Package information
   4.429 +   CURSOR get_package_info(package_name_ IN VARCHAR2) IS
   4.430 +      SELECT substr(text,
   4.431 +                    instr(text,'''')+1,
   4.432 +                    instr(text,'''',instr(text,'''')+1)-instr(text,'''')-1) global,
   4.433 +             upper(substr(ltrim(text), 1, 1)) gtype
   4.434 +      FROM   user_source
   4.435 +      WHERE  type = 'PACKAGE'
   4.436 +      AND    name = package_name_
   4.437 +      AND    (text LIKE '%lu_name_%:=%''%''%' OR text LIKE '%module_%:=%''%''%' OR text LIKE '%service_%:=%''%''%' OR text LIKE '%domain_%:=%''%''%')
   4.438 +      AND    text NOT LIKE '--%'
   4.439 +      AND    text NOT LIKE '%/%*%'
   4.440 +      AND    text NOT LIKE '%*%/'
   4.441 +      AND    line BETWEEN 2 AND 6
   4.442 +      ORDER BY line;
   4.443 +
   4.444 +   -- View information
   4.445 +   CURSOR get_view_comments(view_name_ IN VARCHAR2) IS
   4.446 +      SELECT comments
   4.447 +      FROM   fnd_tab_comments
   4.448 +      WHERE  table_type = 'VIEW'
   4.449 +      AND    table_name = view_name_;
   4.450 +
   4.451 +   PROCEDURE Write_Error_Text___ (
   4.452 +      clob_     IN OUT NOCOPY CLOB,
   4.453 +      text_     IN            VARCHAR2,
   4.454 +      new_line_ IN            BOOLEAN DEFAULT TRUE )
   4.455 +   IS
   4.456 +   BEGIN
   4.457 +      IF write_clob_ THEN
   4.458 +         IF new_line_ THEN
   4.459 +            clob_ := clob_ || chr(10) || text_;
   4.460 +         ELSE
   4.461 +            clob_ := clob_ || text_;
   4.462 +         END IF;
   4.463 +      ELSE
   4.464 +         IF new_line_ THEN
   4.465 +            dbms_output.put_line(text_);
   4.466 +         ELSE
   4.467 +            dbms_output.put(text_);
   4.468 +         END IF;
   4.469 +      END IF;
   4.470 +   END Write_Error_Text___;
   4.471 +
   4.472 +
   4.473 +   PROCEDURE Get_Next_Pkg_Index___ (
   4.474 +      lu_name_        IN VARCHAR2,
   4.475 +      next_pkg_index_ OUT NUMBER )
   4.476 +   IS
   4.477 +      CURSOR next_index IS
   4.478 +         SELECT nvl(MAX(package_index), 0) + 1
   4.479 +         FROM dictionary_sys_package_tab
   4.480 +         WHERE lu_name = lu_name_;
   4.481 +   BEGIN
   4.482 +      OPEN next_index;
   4.483 +      FETCH next_index INTO next_pkg_index_;
   4.484 +      CLOSE next_index;
   4.485 +   END Get_Next_Pkg_Index___;
   4.486 +
   4.487 +   PROCEDURE Get_Next_View_Index___ (
   4.488 +      lu_name_         IN VARCHAR2,
   4.489 +      next_view_index_ OUT NUMBER )
   4.490 +   IS
   4.491 +      CURSOR next_index IS
   4.492 +         SELECT nvl(MAX(view_index), 0) + 1
   4.493 +         FROM dictionary_sys_view_tab
   4.494 +         WHERE lu_name = lu_name_;
   4.495 +   BEGIN
   4.496 +      OPEN next_index;
   4.497 +      FETCH next_index INTO next_view_index_;
   4.498 +      CLOSE next_index;
   4.499 +   END Get_Next_View_Index___;
   4.500 +
   4.501 +   PROCEDURE Handle_Possible_State_Pkg___(
   4.502 +      lu_name_     IN VARCHAR2,
   4.503 +      method_name_ IN VARCHAR2 )
   4.504 +   IS
   4.505 +   BEGIN
   4.506 +      IF method_name_ = 'Finite_State_Events__' THEN
   4.507 +         -- Set global variable
   4.508 +         pkg_lu_sub_type_ := 'S';
   4.509 +         -- Update main dictionary information
   4.510 +         UPDATE dictionary_sys_package_tab
   4.511 +            SET package_type = pkg_lu_sub_type_
   4.512 +            WHERE lu_name = lu_name_;
   4.513 +      END IF;
   4.514 +   END Handle_Possible_State_Pkg___;
   4.515 +
   4.516 +   PROCEDURE Fill_List_Array___ (
   4.517 +      info_type_       IN VARCHAR2,
   4.518 +      lu_name_         IN VARCHAR2,
   4.519 +      package_name_    IN VARCHAR2,
   4.520 +      db_values_       IN OUT domain_states_array,
   4.521 +      client_values_   IN OUT domain_states_array,
   4.522 +      complete_values_ OUT complete_value_array )
   4.523 +   IS
   4.524 +      stmt_   VARCHAR2(200);
   4.525 +      error_  BOOLEAN := FALSE;
   4.526 +      domain_ BOOLEAN := info_type_ = 'domain';
   4.527 +      client_count_ NUMBER;
   4.528 +      db_count_     NUMBER;
   4.529 +   BEGIN
   4.530 +      -- Check for incorrectness in number of values and remove redundant information if it occurs
   4.531 +      IF db_values_.COUNT != client_values_.COUNT THEN
   4.532 +         client_count_ := client_values_.COUNT;
   4.533 +         db_count_ := db_values_.COUNT;
   4.534 +         IF db_count_ > client_count_ THEN
   4.535 +            -- Missing client values
   4.536 +            Assert_SYS.Assert_Is_Package(package_name_);
   4.537 +            stmt_ := 'BEGIN :client_value_ := '||package_name_||'.Decode(:db_value_); END;';
   4.538 +            FOR i IN Nvl(db_values_.FIRST, 0)..Nvl(db_values_.LAST, -1) LOOP
   4.539 +               -- Try to find more values by calling standard interfaces for domains,
   4.540 +               -- else fill out the array if it is still incomplete...
   4.541 +               IF domain_ THEN
   4.542 +                  BEGIN
   4.543 +                     -- ifs_assert_safe utgulk 20060105
   4.544 +                     EXECUTE IMMEDIATE stmt_ USING OUT client_values_(i), IN db_values_(i);
   4.545 +                  EXCEPTION
   4.546 +                     WHEN OTHERS THEN
   4.547 +                        client_values_(i) := 'Value not defined!';
   4.548 +                        error_ := TRUE;
   4.549 +                  END;
   4.550 +               ELSE
   4.551 +                  -- Can't find the values for other types than domains...
   4.552 +                  client_values_(i) := 'Value not defined!';
   4.553 +                  error_ := TRUE;
   4.554 +               END IF;
   4.555 +
   4.556 +            END LOOP;
   4.557 +         ELSE
   4.558 +            -- Missing db values
   4.559 +            Assert_SYS.Assert_Is_Package(package_name_);
   4.560 +            stmt_ := 'BEGIN :db_value_ := '||package_name_||'.Encode(:client_value_); END;';
   4.561 +            FOR i IN Nvl(client_values_.FIRST,0)..Nvl(client_values_.LAST,-1) LOOP
   4.562 +               -- Try to find more values by calling standard interfaces for domains,
   4.563 +               -- else fill out the array if it is still incomplete...
   4.564 +               IF domain_ THEN
   4.565 +                  BEGIN
   4.566 +                     -- ifs_assert_safe utgulk 20060105
   4.567 +                     EXECUTE IMMEDIATE stmt_ USING OUT db_values_(i), IN client_values_(i);
   4.568 +                  EXCEPTION
   4.569 +                     WHEN OTHERS THEN
   4.570 +                        db_values_(i) := 'VALUE NOT DEFINED!';
   4.571 +                        error_ := TRUE;
   4.572 +                  END;
   4.573 +               ELSE
   4.574 +                  -- Can't find the values for other types than domains...
   4.575 +                  db_values_(i) := 'VALUE NOT DEFINED!';
   4.576 +                  error_ := TRUE;
   4.577 +               END IF;
   4.578 +            END LOOP;
   4.579 +         END IF;
   4.580 +         -- Log information if values could not be determined...
   4.581 +         IF error_ THEN
   4.582 +            Write_Error_Text___ (error_text_, '   '||Rpad(Get_Logical_Unit_Module(lu_name_),6)||':Inconsistency between client values and db values for '||info_type_||' package '||package_name_||'!', FALSE);
   4.583 +            Write_Error_Text___ (error_text_, '          '||to_char(db_count_)||' db values and '||to_char(client_count_)||' client values was found!');
   4.584 +         END IF;
   4.585 +      END IF;
   4.586 +      FOR i IN Nvl(db_values_.FIRST,0)..Nvl(db_values_.LAST,-1) LOOP
   4.587 +         complete_values_(i).lu_name      := lu_name_;
   4.588 +         complete_values_(i).package_name := package_name_;
   4.589 +         complete_values_(i).db_value     := db_values_(i);
   4.590 +         complete_values_(i).client_value := client_values_(i);
   4.591 +         complete_values_(i).rowversion   := SYSDATE;
   4.592 +      END LOOP;
   4.593 +   END Fill_List_Array___;
   4.594 +
   4.595 +   PROCEDURE Rebuild_State_Machine___(full_mode_ BOOLEAN DEFAULT TRUE) IS
   4.596 +
   4.597 +      last_update_ DATE DEFAULT NULL;
   4.598 +
   4.599 +      CURSOR state_mach IS
   4.600 +         SELECT decode(upper(regexp_substr(a.text,'[[:alpha:]]+_')) ,
   4.601 +                   'STATE_','START',
   4.602 +                   'EVENT_','EVENT',
   4.603 +                   'FINITE_','END',
   4.604 +                   NULL) TYPE,
   4.605 +               regexp_substr(a.text,'''[[:alpha:]|[:space:]]+''') WHAT,
   4.606 +               a.NAME PACKAGE
   4.607 +         FROM USER_SOURCE A, USER_OBJECTS O
   4.608 +         WHERE EXISTS (SELECT 1 FROM DICTIONARY_SYS_STATE_TAB D WHERE D.PACKAGE_NAME = O.OBJECT_NAME)
   4.609 +           AND A.NAME = O.OBJECT_NAME
   4.610 +           AND A.TYPE = 'PACKAGE BODY'
   4.611 +           AND O.OBJECT_TYPE   = 'PACKAGE'
   4.612 +           AND TO_DATE(timestamp,'RRRR-MM-DD:HH24:MI:SS') > last_update_
   4.613 +           AND regexp_like(a.text,'(state_[[:space:]]*(=|(IS)))|(event_[[:space:]]*(=|(IS)))|(Finite_State_Set___\(rec_,)','i')
   4.614 +         ORDER BY a.name, a.line ASC;
   4.615 +
   4.616 +      TYPE state_machine_type IS TABLE OF state_mach%ROWTYPE INDEX BY PLS_INTEGER;
   4.617 +      TYPE dic_state_mach_type IS TABLE OF dictionary_sys_state_mach_tab%ROWTYPE INDEX BY BINARY_INTEGER;
   4.618 +
   4.619 +      bulk_errors   EXCEPTION;
   4.620 +      PRAGMA EXCEPTION_INIT(bulk_errors, -24381);
   4.621 +
   4.622 +      state_machine     state_machine_type;
   4.623 +      model             dic_state_mach_type;
   4.624 +      start_mode        VARCHAR2(30);
   4.625 +      in_state_transistion  BOOLEAN := FALSE;
   4.626 +      error_count_          NUMBER;
   4.627 +      j                 PLS_INTEGER;
   4.628 +      i                 PLS_INTEGER;
   4.629 +      position_      NUMBER;
   4.630 +
   4.631 +      FUNCTION Get_Lu_Name_(
   4.632 +            package_name_ VARCHAR2) RETURN VARCHAR2
   4.633 +         IS
   4.634 +            tmp_ VARCHAR2(60) DEFAULT NULL;
   4.635 +         BEGIN
   4.636 +            SELECT lu_name INTO tmp_
   4.637 +               FROM dictionary_sys_package_tab
   4.638 +               WHERE package_name= package_name_;
   4.639 +            RETURN tmp_;
   4.640 +         EXCEPTION
   4.641 +            WHEN OTHERS THEN
   4.642 +               Write_Error_Text___ (error_text_, '          Failed to find LU name for package '||package_name_);
   4.643 +               RETURN NULL;
   4.644 +         END get_lu_name_;
   4.645 +
   4.646 +         FUNCTION trim_str(str_ VARCHAR2) RETURN VARCHAR2
   4.647 +         IS
   4.648 +         BEGIN
   4.649 +              RETURN SUBSTR(str_,2, length(str_)-2);
   4.650 +         END;
   4.651 +
   4.652 +
   4.653 +   BEGIN
   4.654 +      IF full_mode_ THEN
   4.655 +         last_update_:= SYSDATE-1000;
   4.656 +      ELSE
   4.657 +         SELECT NVL(MAX(updated),SYSDATE-1000) INTO last_update_ FROM dictionary_sys_state_mach_tab;
   4.658 +      END IF;
   4.659 +      OPEN state_mach;
   4.660 +      FETCH state_mach BULK COLLECT INTO state_machine;
   4.661 +      CLOSE state_mach;
   4.662 +      j := 1;
   4.663 +      i:=2;
   4.664 +      WHILE i < state_machine.LAST  LOOP
   4.665 +         IF state_machine(i-1).type ='START' AND state_machine(i).type = 'EVENT' THEN
   4.666 +            in_state_transistion:= TRUE;
   4.667 +            start_mode:=trim_str(state_machine(i-1).what);
   4.668 +             WHILE  in_state_transistion AND i+1 <= state_machine.LAST LOOP
   4.669 +               IF state_machine(i).type='EVENT' AND
   4.670 +                  state_machine(i+1).type='END' AND
   4.671 +                  trim_str(state_machine(i).what) IS NOT NULL THEN
   4.672 +                  model(j).start_state:=start_mode;
   4.673 +                  model(j).event:=trim_str(state_machine(i).what);
   4.674 +                  model(j).end_state:=trim_str(state_machine(i+1).what);
   4.675 +                  model(j).package_name:=state_machine(i).PACKAGE;
   4.676 +                  model(j).lu_name:= get_lu_name_(state_machine(i).PACKAGE);
   4.677 +                  model(j).updated:=SYSDATE;
   4.678 +                  model(j).rowversion:=SYSDATE;
   4.679 +                  i:=i+2;
   4.680 +                  j:=j+1;
   4.681 +               ELSIF state_machine(i).type!='START' AND i < state_machine.LAST THEN
   4.682 +                  i:=i+1;
   4.683 +               ELSE
   4.684 +                  in_state_transistion:=FALSE;
   4.685 +                  i:=i+1;
   4.686 +               END IF;
   4.687 +            END LOOP;
   4.688 +         ELSE
   4.689 +            i:=i+1;
   4.690 +         END IF;
   4.691 +      END LOOP;
   4.692 +--  This line only used when debugging
   4.693 +--      FOR k IN model.FIRST..model.LAST LOOP
   4.694 +--          Write_Error_Text___ (error_text_, model(k).package_name||':'||model(k).start_state||'->'||model(k).event||'->'||model(k).end_state);
   4.695 +--      END LOOP;
   4.696 +       BEGIN
   4.697 +            -- ifs_assert_safe pemase 20060215
   4.698 +            EXECUTE IMMEDIATE 'truncate table dictionary_sys_state_mach_tab';
   4.699 +            Write_Error_Text___ (error_text_, '   -------------------------------------------------------------');
   4.700 +            Write_Error_Text___ (error_text_, '   Dictionary Cache is being updated with '||model.count ||' state machine entrie(s).');
   4.701 +            Write_Error_Text___ (error_text_, '   -------------------------------------------------------------');
   4.702 +            FORALL k IN NVL(model.FIRST,0)..NVL(model.LAST,-1) SAVE EXCEPTIONS
   4.703 +               INSERT INTO dictionary_sys_state_mach_tab VALUES model(k);
   4.704 +         EXCEPTION
   4.705 +            WHEN bulk_errors THEN
   4.706 +               error_count_ := SQL%BULK_EXCEPTIONS.COUNT;
   4.707 +               Write_Error_Text___ (error_text_, '   '||to_char(error_count_)||' problem(s) when inserting dictionary state machine information.');
   4.708 +               FOR i IN 1..error_count_ LOOP
   4.709 +                  position_ := SQL%BULK_EXCEPTIONS(i).ERROR_INDEX;
   4.710 +--                  Write_Error_Text___ (error_text_, '   Position number '||to_char(position_));
   4.711 +                  Write_Error_Text___ (error_text_, '   '||Rpad(Get_Logical_Unit_Module(model(position_).lu_name),6)||':Error ' || SQLERRM(-SQL%BULK_EXCEPTIONS(i).ERROR_CODE)||', ', FALSE);
   4.712 +                  Write_Error_Text___ (error_text_, 'lu_name='||model(position_).lu_name||', ', FALSE);
   4.713 +                  Write_Error_Text___ (error_text_, 'package_name='||model(position_).package_name||', ', FALSE);
   4.714 +                  Write_Error_Text___ (error_text_, 'start_state='||model(position_).start_state||', ', FALSE);
   4.715 +                  Write_Error_Text___ (error_text_, 'event='||model(position_).event||', ', FALSE);
   4.716 +                  Write_Error_Text___ (error_text_, 'end_state='||model(position_).end_state);
   4.717 +               END LOOP;
   4.718 +         END;
   4.719 +   EXCEPTION
   4.720 +      WHEN OTHERS THEN
   4.721 +           Write_Error_Text___ (error_text_, '   '||dbms_utility.format_error_backtrace);
   4.722 +   END  Rebuild_State_Machine___;
   4.723 +
   4.724 +
   4.725 +   PROCEDURE Rebuild_All_State_Event___(full_mode_ BOOLEAN DEFAULT TRUE) IS
   4.726 +
   4.727 +      last_update_ DATE DEFAULT NULL;
   4.728 +
   4.729 +      CURSOR  get_events IS
   4.730 +         SELECT regexp_substr(text,'([[:alpha:]]+\^){1,}') event, name
   4.731 +         FROM USER_SOURCE A, USER_OBJECTS O
   4.732 +         WHERE EXISTS (SELECT 1 FROM DICTIONARY_SYS_STATE_TAB D WHERE D.PACKAGE_NAME = O.OBJECT_NAME)
   4.733 +           AND A.NAME = O.OBJECT_NAME
   4.734 +           AND A.TYPE = 'PACKAGE BODY'
   4.735 +           AND O.OBJECT_TYPE   = 'PACKAGE'
   4.736 +           AND TO_DATE(timestamp,'RRRR-MM-DD:HH24:MI:SS') > last_update_
   4.737 +           AND regexp_like(text, '^[[:space:]]{0,}db_events_[[:space:]]{0,}:=');
   4.738 +
   4.739 +      TYPE state_array IS TABLE OF get_events%ROWTYPE INDEX BY BINARY_INTEGER;
   4.740 +      TYPE event_array IS TABLE OF VARCHAR(40) INDEX BY PLS_INTEGER;
   4.741 +      state_events_        state_array ;
   4.742 +      state_event_values_  state_event_array;
   4.743 +      event_array_         event_array;
   4.744 +
   4.745 +      stmt_          VARCHAR2(100);
   4.746 +      match_         INTEGER;
   4.747 +      counter_       INTEGER;
   4.748 +      event_idx_     INTEGER;
   4.749 +      event_         VARCHAR2(32);
   4.750 +      error_count_   NUMBER;
   4.751 +      position_      NUMBER;
   4.752 +      dup_event_val_ BOOLEAN;
   4.753 +
   4.754 +
   4.755 +      bulk_errors   EXCEPTION;
   4.756 +      PRAGMA EXCEPTION_INIT(bulk_errors, -24381);
   4.757 +
   4.758 +      FUNCTION Get_Lu_Name_(
   4.759 +         package_name_ VARCHAR2) RETURN VARCHAR2
   4.760 +      IS
   4.761 +         tmp_ VARCHAR2(60) DEFAULT NULL;
   4.762 +      BEGIN
   4.763 +         SELECT lu_name INTO tmp_
   4.764 +            FROM dictionary_sys_package_tab
   4.765 +            WHERE package_name= package_name_;
   4.766 +         RETURN tmp_;
   4.767 +      EXCEPTION
   4.768 +         WHEN OTHERS THEN
   4.769 +            Write_Error_Text___ (error_text_, '          Failed to find LU name for package '||package_name_);
   4.770 +            RETURN NULL;
   4.771 +      END get_lu_name_;
   4.772 +
   4.773 +   BEGIN
   4.774 +
   4.775 +      IF full_mode_ THEN
   4.776 +         last_update_:= SYSDATE-1000;
   4.777 +      ELSE
   4.778 +         SELECT NVL(MAX(updated),SYSDATE-1000) INTO last_update_ FROM dictionary_sys_state_mach_tab;
   4.779 +      END IF;
   4.780 +
   4.781 +      OPEN get_events;
   4.782 +      FETCH get_events BULK COLLECT INTO state_events_;
   4.783 +      IF SQL%NOTFOUND THEN
   4.784 +         Write_Error_Text___ (error_text_, '   No state events found.');
   4.785 +         CLOSE get_events;
   4.786 +         RETURN;
   4.787 +      ELSE
   4.788 +         BEGIN
   4.789 +            -- ifs_assert_safe pemase 20060215
   4.790 +            EXECUTE IMMEDIATE 'TRUNCATE TABLE dictionary_sys_state_event_tab';
   4.791 +         EXCEPTION
   4.792 +            WHEN OTHERS THEN
   4.793 +               Write_Error_Text___ (error_text_, '   Failed to truncate dictionary_sys_state_event_tab.');
   4.794 +               Write_Error_Text___ (error_text_, '   '||dbms_utility.format_error_backtrace);
   4.795 +               RETURN;
   4.796 +         END;
   4.797 +      END IF;
   4.798 +      CLOSE get_events;
   4.799 +      Write_Error_Text___ (error_text_, '   -------------------------------------------------------------');
   4.800 +      Write_Error_Text___ (error_text_, '   Dictionary Cache is fetching State Events');
   4.801 +      Write_Error_Text___ (error_text_, '   -------------------------------------------------------------');
   4.802 +      counter_:=1;
   4.803 +      FOR i IN Nvl(state_events_.FIRST,0)..Nvl(state_events_.LAST,-1) LOOP
   4.804 +         match_:=1;
   4.805 +         event_idx_:=1;
   4.806 +         event_array_.DELETE;
   4.807 +         LOOP
   4.808 +            dup_event_val_:= FALSE;
   4.809 +            event_:=REGEXP_SUBSTR(state_events_(i).event,'([[:alpha:]|[:digit:]|[:blank:]]+\^)', 1, match_);
   4.810 +            EXIT WHEN event_ IS NULL;
   4.811 +            IF event_idx_!=1 THEN
   4.812 +               dup_event_val_:= FALSE;
   4.813 +               FOR j IN Nvl(event_array_.FIRST,0)..Nvl(event_array_.LAST,-1) LOOP
   4.814 +                  IF event_array_(j)=event_ THEN
   4.815 +                     dup_event_val_:= TRUE;
   4.816 +                     EXIT;
   4.817 +                  END IF;
   4.818 +               END LOOP;
   4.819 +            END IF;
   4.820 +            IF NOT dup_event_val_ THEN
   4.821 +               event_array_(event_idx_):=event_;
   4.822 +               state_event_values_(counter_).lu_name:=get_lu_name_(state_events_(i).name);
   4.823 +               state_event_values_(counter_).package_name:=state_events_(i).name;
   4.824 +               state_event_values_(counter_).event:=substr(event_,1,length(event_)-1);
   4.825 +               state_event_values_(counter_).rowversion:=SYSDATE;
   4.826 +               counter_:=counter_+1;
   4.827 +               event_idx_:=event_idx_+1;
   4.828 +--            ELSE
   4.829 +--               Write_Error_Text___ (error_text_, '   '||Rpad(Get_Logical_Unit_Module(get_lu_name_(state_events_(i).name)),6)||':Skipping duplicate event ('||substr(event_,1,length(event_)-1)||') for LU:'||get_lu_name_(state_events_(i).name));
   4.830 +            END IF;
   4.831 +            match_:=match_+1;
   4.832 +         END LOOP;
   4.833 +      END LOOP;
   4.834 +
   4.835 +      BEGIN
   4.836 +         Write_Error_Text___ (error_text_, '   -------------------------------------------------------------');
   4.837 +         Write_Error_Text___ (error_text_, '   Dictionary Cache is being updated with '||state_event_values_.count ||' State Events');
   4.838 +         Write_Error_Text___ (error_text_, '   -------------------------------------------------------------');
   4.839 +         FORALL j IN Nvl(state_event_values_.FIRST, 0)..Nvl(state_event_values_.LAST, -1) SAVE EXCEPTIONS
   4.840 +            INSERT INTO dictionary_sys_state_event_tab VALUES state_event_values_(j);
   4.841 +      EXCEPTION
   4.842 +         WHEN bulk_errors THEN
   4.843 +            error_count_ := SQL%BULK_EXCEPTIONS.COUNT;
   4.844 +            Write_Error_Text___ (error_text_, '   '||to_char(error_count_)||' problem(s) when inserting dictionary state event information.');
   4.845 +            FOR i IN 1..error_count_ LOOP
   4.846 +               position_ := SQL%BULK_EXCEPTIONS(i).ERROR_INDEX;
   4.847 +--               Write_Error_Text___ (error_text_, '   Position number '||to_char(position_));
   4.848 +               Write_Error_Text___ (error_text_, '   '||Rpad(Get_Logical_Unit_Module(state_event_values_(position_).lu_name),6)||':Error ' || SQLERRM(-SQL%BULK_EXCEPTIONS(i).ERROR_CODE)||', ', FALSE);
   4.849 +               Write_Error_Text___ (error_text_, 'lu_name='||nvl(state_event_values_(position_).lu_name, 'NULL')||', ', FALSE);
   4.850 +               Write_Error_Text___ (error_text_, 'package_name='||nvl(state_event_values_(position_).package_name, 'NULL')||', ', FALSE);
   4.851 +               Write_Error_Text___ (error_text_, 'event='||nvl(state_event_values_(position_).event, 'NULL'));
   4.852 +            END LOOP;
   4.853 +         WHEN OTHERS THEN
   4.854 +            Write_Error_Text___ (error_text_, '   Failed to truncate dictionary_sys_state_event_tab.');
   4.855 +            Write_Error_Text___ (error_text_, '   '||dbms_utility.format_error_backtrace);
   4.856 +      END;
   4.857 +
   4.858 +   EXCEPTION
   4.859 +      WHEN OTHERS THEN
   4.860 +         Write_Error_Text___ (error_text_, '   Failed to rebuild dictionary_sys_state_event_tab.');
   4.861 +         Write_Error_Text___ (error_text_, '   '||dbms_utility.format_error_backtrace);
   4.862 +   END Rebuild_All_State_Event___;
   4.863 +
   4.864 +
   4.865 +
   4.866 +   PROCEDURE Rebuild_State_Transitions___(full_mode_ BOOLEAN DEFAULT TRUE) IS
   4.867 +
   4.868 +      last_update_ DATE DEFAULT NULL;
   4.869 +
   4.870 +      match_         INTEGER;
   4.871 +      counter_       INTEGER;
   4.872 +      allowed_event_ VARCHAR2(32);
   4.873 +      state_trans_   VARCHAR2(130);
   4.874 +      error_count_   NUMBER;
   4.875 +      position_      NUMBER;
   4.876 +
   4.877 +      bulk_errors   EXCEPTION;
   4.878 +      PRAGMA EXCEPTION_INIT(bulk_errors, -24381);
   4.879 +
   4.880 +      CURSOR get_state_events_
   4.881 +      IS
   4.882 +      SELECT lu_name, package_name, db_state
   4.883 +         FROM dictionary_sys_state_tab d, user_objects o
   4.884 +         WHERE d.package_name = o.object_name
   4.885 +         AND   o.object_type = 'PACKAGE BODY'
   4.886 +           AND TO_DATE(o.timestamp,'RRRR-MM-DD:HH24:MI:SS') > last_update_;
   4.887 +
   4.888 +      TYPE state_array IS TABLE OF get_state_events_%ROWTYPE INDEX BY BINARY_INTEGER;
   4.889 +      state_list_      state_array;
   4.890 +
   4.891 +      TYPE state_trans_array IS TABLE OF dictionary_sys_state_trans_tab%ROWTYPE INDEX BY BINARY_INTEGER;
   4.892 +      state_trans_values_  state_trans_array;
   4.893 +
   4.894 +      FUNCTION Get_Allowed_State_Trans (
   4.895 +                                         pkg_name_ VARCHAR2,
   4.896 +                                         state_ VARCHAR2)
   4.897 +         RETURN VARCHAR2
   4.898 +         IS
   4.899 +         stmt_    VARCHAR2(200);
   4.900 +         events_  VARCHAR2(200);
   4.901 +      BEGIN
   4.902 +         Assert_SYS.Assert_Is_Package(pkg_name_);
   4.903 +         stmt_:='BEGIN :events:='||pkg_name_||'.Finite_State_Events__(:state); END;';
   4.904 +         -- ifs_assert_safe utgulk 20060105
   4.905 +         EXECUTE IMMEDIATE stmt_ USING IN OUT   events_, state_ ;
   4.906 +         RETURN events_;
   4.907 +      EXCEPTION
   4.908 +         WHEN OTHERS THEN
   4.909 +            Write_Error_Text___ (error_text_, '   '||Rpad(Get_Logical_Unit_Module(Get_Logical_Unit(pkg_name_, 'PACKAGE')),6)||':Failed to fetch events for package '||pkg_name_||' and state '||state_);
   4.910 +            RETURN NULL;
   4.911 +      END Get_Allowed_State_Trans;
   4.912 +
   4.913 +   BEGIN
   4.914 +
   4.915 +      IF full_mode_ THEN
   4.916 +         last_update_:= SYSDATE-1000;
   4.917 +      ELSE
   4.918 +         SELECT NVL(MAX(to_date(timestamp, 'RRRR-MM-DD:HH24:MI:SS')),SYSDATE-1000) INTO last_update_
   4.919 +            FROM dictionary_sys_state_tab d, user_objects o
   4.920 +            WHERE d.package_name = o.object_name
   4.921 +            AND o.object_type = 'PACKAGE BODY';
   4.922 +      END IF;
   4.923 +
   4.924 +      OPEN get_state_events_;
   4.925 +      FETCH get_state_events_ BULK COLLECT INTO state_list_;
   4.926 +      IF SQL%NOTFOUND THEN
   4.927 +         Write_Error_Text___ (error_text_, '   No state transitions found.');
   4.928 +         CLOSE get_state_events_;
   4.929 +         RETURN;
   4.930 +      ELSE
   4.931 +         BEGIN
   4.932 +            -- ifs_assert_safe pemase 20060215
   4.933 +            EXECUTE IMMEDIATE 'TRUNCATE TABLE dictionary_sys_state_trans_tab';
   4.934 +         EXCEPTION
   4.935 +            WHEN OTHERS THEN
   4.936 +               Write_Error_Text___ (error_text_, '   Failed to truncate dictionary_sys_state_trans_tab.');
   4.937 +               Write_Error_Text___ (error_text_, '   '||dbms_utility.format_error_backtrace);
   4.938 +               RETURN;
   4.939 +         END;
   4.940 +      END IF;
   4.941 +      CLOSE get_state_events_;
   4.942 +      counter_:=1;
   4.943 +      FOR i IN Nvl(state_list_.FIRST,0)..Nvl(state_list_.LAST,-1) LOOP
   4.944 +         state_trans_:=Get_Allowed_State_Trans(state_list_(i).package_name, state_list_(i).db_state);
   4.945 +         match_:=1;
   4.946 +         LOOP
   4.947 +            allowed_event_:=REGEXP_SUBSTR(state_trans_,'([[:alpha:]|[:digit:]|[:blank:]]+\^)', 1, match_);
   4.948 +            EXIT WHEN allowed_event_ IS NULL;
   4.949 +            state_trans_values_(counter_).lu_name:=state_list_(i).lu_name;
   4.950 +            state_trans_values_(counter_).package_name:=state_list_(i).package_name;
   4.951 +            state_trans_values_(counter_).state:=state_list_(i).db_state;
   4.952 +            state_trans_values_(counter_).allowed_event:=substr(allowed_event_,1,length(allowed_event_)-1);
   4.953 +            state_trans_values_(counter_).rowversion:=SYSDATE;
   4.954 +            match_:=match_+1;
   4.955 +            counter_:=counter_+1;
   4.956 +         END LOOP;
   4.957 +      END LOOP;
   4.958 +
   4.959 +      BEGIN
   4.960 +         Write_Error_Text___ (error_text_, '   -------------------------------------------------------------');
   4.961 +         Write_Error_Text___ (error_text_, '   Dictionary Cache is being updated with '||state_trans_values_.count ||' State Transitions');
   4.962 +         Write_Error_Text___ (error_text_, '   -------------------------------------------------------------');
   4.963 +         FORALL j IN Nvl(state_trans_values_.FIRST,0)..Nvl(state_trans_values_.LAST,-1) SAVE EXCEPTIONS
   4.964 +            INSERT INTO dictionary_sys_state_trans_tab VALUES state_trans_values_(j);
   4.965 +      EXCEPTION
   4.966 +         WHEN bulk_errors THEN
   4.967 +            error_count_ := SQL%BULK_EXCEPTIONS.COUNT;
   4.968 +            Write_Error_Text___ (error_text_, '   '||to_char(error_count_)||' problem(s) when inserting dictionary state transition information.');
   4.969 +            FOR i IN 1..error_count_ LOOP
   4.970 +               position_ := SQL%BULK_EXCEPTIONS(i).ERROR_INDEX;
   4.971 +--               Write_Error_Text___ (error_text_, '   Position number '||to_char(position_));
   4.972 +               Write_Error_Text___ (error_text_, '   '||Rpad(Get_Logical_Unit_Module(state_trans_values_(position_).lu_name),6)||':Error ' || SQLERRM(-SQL%BULK_EXCEPTIONS(i).ERROR_CODE)||', ', FALSE);
   4.973 +               Write_Error_Text___ (error_text_, 'lu_name='||nvl(state_trans_values_(position_).lu_name, 'NULL')||', ', FALSE);
   4.974 +               Write_Error_Text___ (error_text_, 'package_name='||nvl(state_trans_values_(position_).package_name, 'NULL')||', ', FALSE);
   4.975 +               Write_Error_Text___ (error_text_, 'state='||nvl(state_trans_values_(position_).state, 'NULL')||', ', FALSE);
   4.976 +               Write_Error_Text___ (error_text_, 'allowed_event='||nvl(state_trans_values_(position_).allowed_event, 'NULL'));
   4.977 +            END LOOP;
   4.978 +      END;
   4.979 +
   4.980 +   EXCEPTION
   4.981 +      WHEN OTHERS THEN
   4.982 +         Write_Error_Text___ (error_text_, '   Failed to rebuild dictionary_sys_state_trans_tab.');
   4.983 +         Write_Error_Text___ (error_text_, '   '||dbms_utility.format_error_backtrace);
   4.984 +   END Rebuild_State_Transitions___;
   4.985 +
   4.986 +   PROCEDURE Tokenize_Lists___ (
   4.987 +      value_list_ IN VARCHAR2,
   4.988 +      values_     IN OUT domain_states_array )
   4.989 +   IS
   4.990 +      i_        NUMBER      := 0;
   4.991 +      pos_      NUMBER      := 1;
   4.992 +      end_pos_  NUMBER      := 1;
   4.993 +      sep_      VARCHAR2(1) := Client_SYS.text_separator_;
   4.994 +      len_      NUMBER      := length(value_list_);
   4.995 +      ind_      NUMBER      := Nvl(values_.LAST+1,0);
   4.996 +      temp_     VARCHAR2(120);
   4.997 +   BEGIN
   4.998 +      end_pos_ := instr(value_list_, sep_, 1, i_ + 1);
   4.999 +      WHILE end_pos_ < len_ AND end_pos_ != 0 LOOP
  4.1000 +         BEGIN
  4.1001 +            temp_ := REPLACE(substr(value_list_, pos_, end_pos_ - pos_),'''||''','');
  4.1002 +            values_(ind_) := REPLACE(temp_,''' || ''',''); 
  4.1003 +         EXCEPTION
  4.1004 +            WHEN value_error THEN
  4.1005 +               values_(ind_) := 'ERROR!!!';
  4.1006 +         END;
  4.1007 +         pos_ := end_pos_ + 1;
  4.1008 +         i_ := i_ + 1;
  4.1009 +         ind_:=ind_+1;
  4.1010 +         end_pos_ := instr(value_list_, sep_, 1, i_ + 1);
  4.1011 +      END LOOP;
  4.1012 +   END Tokenize_Lists___;
  4.1013 +
  4.1014 +   PROCEDURE Insert_Package_Information___ (
  4.1015 +      lu_name_      IN VARCHAR2,
  4.1016 +      module_       IN VARCHAR2,
  4.1017 +      package_name_ IN VARCHAR2,
  4.1018 +      lu_type_      IN VARCHAR2,
  4.1019 +      lu_sub_type_  IN VARCHAR2 )
  4.1020 +   IS
  4.1021 +      package_index_ NUMBER;
  4.1022 +   BEGIN
  4.1023 +      BEGIN
  4.1024 +         INSERT INTO dictionary_sys_tab
  4.1025 +            (lu_name, module, lu_type, rowversion)
  4.1026 +         VALUES
  4.1027 +            (lu_name_, module_, lu_type_, SYSDATE);
  4.1028 +         IF length(lu_name_) > 25 THEN
  4.1029 +            Write_Error_Text___ (error_text_, '   '||rpad(module_,6)||':LU Name '||nvl(lu_name_, 'NULL')||' is longer than 25 characters, this is not allowed.');
  4.1030 +         END IF;
  4.1031 +      EXCEPTION
  4.1032 +         WHEN dup_val_on_index THEN
  4.1033 +            UPDATE dictionary_sys_tab
  4.1034 +               SET rowversion = SYSDATE,
  4.1035 +                   module = module_,
  4.1036 +                   lu_type = lu_type_
  4.1037 +               WHERE lu_name = lu_name_;
  4.1038 +         WHEN OTHERS THEN
  4.1039 +            Write_Error_Text___ (error_text_, '   '||rpad(module_,6)||':Undefined problem when inserting LU dictionary information for package '||package_name_||', ', FALSE);
  4.1040 +            Write_Error_Text___ (error_text_, 'LU Name='||nvl(lu_name_, 'NULL')||', ', FALSE);
  4.1041 +            Write_Error_Text___ (error_text_, 'LU Type='||nvl(lu_type_, 'NULL'));
  4.1042 +      END;
  4.1043 +      -- Insert and if already existing then update.
  4.1044 +      -- This is more efficient when performing a full refresh!
  4.1045 +      BEGIN
  4.1046 +         Get_Next_Pkg_Index___(lu_name_, package_index_);
  4.1047 +         INSERT INTO dictionary_sys_package_tab
  4.1048 +            (lu_name, package_name, package_index, package_type, rowversion)
  4.1049 +         VALUES
  4.1050 +            (lu_name_, package_name_, package_index_, lu_sub_type_, SYSDATE);
  4.1051 +         --
  4.1052 +         --  Fix problems with LU that has more than one _API package (e.g. for state handling).
  4.1053 +         --
  4.1054 +         UPDATE Dictionary_Sys_Package_Tab
  4.1055 +            SET package_index = 0
  4.1056 +          WHERE lu_name IN (SELECT lu_name
  4.1057 +                              FROM Dictionary_Sys_Package_Tab
  4.1058 +                             WHERE package_name LIKE '%_API'
  4.1059 +                          GROUP BY lu_name
  4.1060 +                            HAVING count(*) > 1)
  4.1061 +            AND package_name = Upper(Regexp_Replace(lu_name,
  4.1062 +                                           '([a-z])([A-Z])',
  4.1063 +                                           '\1_\2',
  4.1064 +                                           1,
  4.1065 +                                           0,
  4.1066 +                                           'c') || '_API')
  4.1067 +            AND package_index != 1;
  4.1068 +          --
  4.1069 +      EXCEPTION
  4.1070 +         WHEN dup_val_on_index THEN
  4.1071 +            UPDATE dictionary_sys_package_tab
  4.1072 +               SET rowversion = SYSDATE
  4.1073 +               WHERE lu_name = lu_name_
  4.1074 +               AND   package_name = package_name_;
  4.1075 +         WHEN OTHERS THEN
  4.1076 +            Write_Error_Text___ (error_text_, '   '||Rpad(Get_Logical_Unit_Module(lu_name_),6)||':Undefined problem when inserting dictionary information for package '||package_name_||', ', FALSE);
  4.1077 +            Write_Error_Text___ (error_text_, 'LU Name='||nvl(lu_name_, 'NULL')||', ', FALSE);
  4.1078 +            Write_Error_Text___ (error_text_, 'Package Name='||nvl(package_name_, 'NULL')||', ', FALSE);
  4.1079 +            Write_Error_Text___ (error_text_, 'Package Index='||nvl(to_char(pkg_index_), 'NULL')||', ', FALSE);
  4.1080 +            Write_Error_Text___ (error_text_, 'Package Type='||nvl(lu_sub_type_, 'NULL'));
  4.1081 +      END;
  4.1082 +   END Insert_Package_Information___;
  4.1083 +
  4.1084 +   PROCEDURE Insert_View_Information___(
  4.1085 +      lu_name_      IN VARCHAR2,
  4.1086 +      module_       IN VARCHAR2,
  4.1087 +      view_name_    IN VARCHAR2,
  4.1088 +      view_prompt_  IN VARCHAR2 )
  4.1089 +   IS
  4.1090 +      base_view_  BOOLEAN;
  4.1091 +      view_index_ NUMBER;
  4.1092 +      view_type_  VARCHAR2(1);
  4.1093 +      lu_prompt_  VARCHAR2(200);
  4.1094 +   BEGIN
  4.1095 +      -- Find the base view according to naming conventions...
  4.1096 +      -- (Other possible base views are handled at the end of the process)
  4.1097 +      IF view_name_ =  Clientnametodbname_(lu_name_) THEN
  4.1098 +         lu_prompt_ := view_prompt_;
  4.1099 +         base_view_ := TRUE;
  4.1100 +      ELSE
  4.1101 +         lu_prompt_ := NULL;
  4.1102 +         base_view_ := FALSE;
  4.1103 +      END IF;
  4.1104 +      -- Insert into dictionary_sys_tab. It is likely this entry already exist (from package information),
  4.1105 +      -- then only updating the prompt and rowversion is more efficent.
  4.1106 +      IF base_view_ THEN
  4.1107 +         UPDATE dictionary_sys_tab
  4.1108 +            SET rowversion = SYSDATE,
  4.1109 +                lu_prompt = lu_prompt_
  4.1110 +            WHERE lu_name = lu_name_;
  4.1111 +         IF SQL%NOTFOUND THEN
  4.1112 +            INSERT INTO dictionary_sys_tab
  4.1113 +               (lu_name, module, lu_prompt, rowversion)
  4.1114 +            VALUES
  4.1115 +               (lu_name_, module_, lu_prompt_, SYSDATE);
  4.1116 +         END IF;
  4.1117 +      ELSE
  4.1118 +         UPDATE dictionary_sys_tab
  4.1119 +            SET rowversion = SYSDATE
  4.1120 +            WHERE lu_name = lu_name_;
  4.1121 +         IF SQL%NOTFOUND THEN
  4.1122 +            INSERT INTO dictionary_sys_tab
  4.1123 +               (lu_name, module, rowversion)
  4.1124 +            VALUES
  4.1125 +               (lu_name_, module_, SYSDATE);
  4.1126 +         END IF;
  4.1127 +      END IF;
  4.1128 +      -- Insert into dictionary_sys_view_tab
  4.1129 +      -- Insert and if already existing then update.
  4.1130 +      -- This is more efficient when performing a full refresh!
  4.1131 +      BEGIN
  4.1132 +         Get_Next_View_Index___(lu_name_, view_index_);
  4.1133 +         IF base_view_ THEN
  4.1134 +            view_type_ := 'B';
  4.1135 +         ELSIF substr(view_name_, -4) = '_REP' THEN
  4.1136 +            view_type_ := 'R';
  4.1137 +         ELSE
  4.1138 +            view_type_ := 'A';
  4.1139 +         END IF;
  4.1140 +         INSERT INTO dictionary_sys_view_tab
  4.1141 +            (lu_name, view_name, view_type, view_prompt, view_index, rowversion)
  4.1142 +         VALUES
  4.1143 +            (lu_name_, view_name_, view_type_, view_prompt_, view_index_, SYSDATE);
  4.1144 +      EXCEPTION
  4.1145 +         WHEN dup_val_on_index THEN
  4.1146 +            UPDATE dictionary_sys_view_tab
  4.1147 +               SET view_type = view_type_,
  4.1148 +                   view_prompt = view_prompt_,
  4.1149 +                   rowversion = SYSDATE
  4.1150 +               WHERE lu_name = lu_name_
  4.1151 +               AND view_name = view_name_;
  4.1152 +         WHEN OTHERS THEN
  4.1153 +            Write_Error_Text___ (error_text_, '   '||Rpad(module_,6)||':Undefined problem when inserting dictionary information for view '||view_name_||', ', FALSE);
  4.1154 +            Write_Error_Text___ (error_text_, 'LU Name='||nvl(lu_name_, 'NULL')||', ', FALSE);
  4.1155 +            Write_Error_Text___ (error_text_, 'View Name='||nvl(view_name_, 'NULL')||', ', FALSE);
  4.1156 +            Write_Error_Text___ (error_text_, 'View Prompt='||nvl(view_prompt_, 'NULL')||', ', FALSE);
  4.1157 +            Write_Error_Text___ (error_text_, 'View Index='||nvl(to_char(view_index_), 'NULL')||', ');
  4.1158 +      END;
  4.1159 +   END Insert_View_Information___;
  4.1160 +
  4.1161 +   PROCEDURE Refresh_View_Columns___ (
  4.1162 +      all_views_  IN BOOLEAN,
  4.1163 +      start_time_ IN DATE )
  4.1164 +   IS
  4.1165 +      CURSOR get_view_columns IS
  4.1166 +         SELECT u.table_name view_name, u.column_name column_name, c.comments comments, u.column_id column_id
  4.1167 +         FROM   user_tab_columns u, fnd_col_comments c
  4.1168 +         WHERE  u.table_name = c.table_name
  4.1169 +         AND    u.column_name = c.column_name
  4.1170 +         ORDER BY u.table_name, u.column_name;
  4.1171 +
  4.1172 +      CURSOR get_new_view_columns IS
  4.1173 +         SELECT u.table_name view_name, u.column_name column_name, c.comments comments, u.column_id column_id
  4.1174 +         FROM   user_tab_columns u, fnd_col_comments c, dictionary_sys_view_tab v
  4.1175 +         WHERE  u.table_name = c.table_name
  4.1176 +         AND    u.table_name = v.view_name
  4.1177 +         AND    u.column_name = c.column_name
  4.1178 +         AND    v.rowversion >= start_time_
  4.1179 +         ORDER BY u.table_name, u.column_name;
  4.1180 +
  4.1181 +      column_flags_ VARCHAR2(5);
  4.1182 +      lu_name_      VARCHAR2(30);
  4.1183 +      prev_view_    VARCHAR2(30) := 'NIL';
  4.1184 +      n_            NUMBER := 0;
  4.1185 +      position_     NUMBER;
  4.1186 +      error_count_  NUMBER;
  4.1187 +      bulk_errors   EXCEPTION;
  4.1188 +      PRAGMA EXCEPTION_INIT(bulk_errors, -24381);
  4.1189 +
  4.1190 +      TYPE view_column_array IS TABLE OF get_view_columns%ROWTYPE INDEX BY BINARY_INTEGER;
  4.1191 +      view_columns_ view_column_array;
  4.1192 +
  4.1193 +      TYPE complete_array IS TABLE OF dictionary_sys_view_column_tab%ROWTYPE INDEX BY BINARY_INTEGER;
  4.1194 +      complete_columns_ complete_array;
  4.1195 +   BEGIN
  4.1196 +      --
  4.1197 +      -- Fetch view column information and delete old information
  4.1198 +      --
  4.1199 +      IF all_views_ THEN
  4.1200 +         OPEN get_view_columns;
  4.1201 +         FETCH get_view_columns BULK COLLECT INTO view_columns_;
  4.1202 +         CLOSE get_view_columns;
  4.1203 +         -- Remove all old information
  4.1204 +         -- ifs_assert_safe pemase 20060215
  4.1205 +         EXECUTE IMMEDIATE 'TRUNCATE TABLE dictionary_sys_view_column_tab';
  4.1206 +      ELSE
  4.1207 +         OPEN get_new_view_columns;
  4.1208 +         FETCH get_new_view_columns BULK COLLECT INTO view_columns_;
  4.1209 +         CLOSE get_new_view_columns;
  4.1210 +         -- Remove old information for all of the methods that is being updated
  4.1211 +         DELETE FROM dictionary_sys_view_column_tab c
  4.1212 +            WHERE EXISTS (SELECT 1
  4.1213 +                          FROM dictionary_sys_view_tab v
  4.1214 +                          WHERE v.view_name = c.view_name
  4.1215 +                          AND v.rowversion >= start_time_);
  4.1216 +      END IF;
  4.1217 +
  4.1218 +      -- Process all of the view column information
  4.1219 +      IF view_columns_.COUNT > 0 THEN
  4.1220 +         FOR i IN Nvl(view_columns_.FIRST,0)..Nvl(view_columns_.LAST,-1) LOOP
  4.1221 +            -- Find the lu name for the view if view has changed
  4.1222 +            IF (prev_view_ <> view_columns_(i).view_name) THEN
  4.1223 +               lu_name_ := Get_Logical_Unit(view_columns_(i).view_name, 'VIEW');
  4.1224 +               prev_view_ := view_columns_(i).view_name;
  4.1225 +            END IF;
  4.1226 +            IF lu_name_ IS NOT NULL THEN
  4.1227 +               BEGIN
  4.1228 +                  complete_columns_(n_).lu_name          := lu_name_;
  4.1229 +                  complete_columns_(n_).view_name        := view_columns_(i).view_name;
  4.1230 +                  complete_columns_(n_).column_name      := view_columns_(i).column_name;
  4.1231 +                  complete_columns_(n_).column_index     := view_columns_(i).column_id;
  4.1232 +                  complete_columns_(n_).rowversion       := SYSDATE;
  4.1233 +                  complete_columns_(n_).column_datatype  := Comment_Value_('DATATYPE',view_columns_(i).comments);
  4.1234 +                  complete_columns_(n_).column_prompt    := Comment_Value_('PROMPT',view_columns_(i).comments);
  4.1235 +                  complete_columns_(n_).column_reference := Comment_Value_('REF',view_columns_(i).comments);
  4.1236 +                  column_flags_                          := Comment_Value_('FLAGS',view_columns_(i).comments);
  4.1237 +                  complete_columns_(n_).type_flag        := substr(column_flags_,1,1);
  4.1238 +                  complete_columns_(n_).required_flag    := substr(column_flags_,2,1);
  4.1239 +                  complete_columns_(n_).insert_flag      := substr(column_flags_,3,1);
  4.1240 +                  complete_columns_(n_).update_flag      := substr(column_flags_,4,1);
  4.1241 +                  complete_columns_(n_).lov_flag         := substr(column_flags_,5,1);
  4.1242 +               EXCEPTION
  4.1243 +                  WHEN OTHERS THEN
  4.1244 +                     Write_Error_Text___ (error_text_, '   ??????:Incorrect comments for view column '||view_columns_(i).view_name||'.'||view_columns_(i).column_name);
  4.1245 +                     complete_columns_(n_).column_datatype  := NULL;
  4.1246 +                     complete_columns_(n_).column_prompt    := NULL;
  4.1247 +                     complete_columns_(n_).column_reference := NULL;
  4.1248 +                     complete_columns_(n_).type_flag        := NULL;
  4.1249 +                     complete_columns_(n_).required_flag    := NULL;
  4.1250 +                     complete_columns_(n_).insert_flag      := NULL;
  4.1251 +                     complete_columns_(n_).update_flag      := NULL;
  4.1252 +                     complete_columns_(n_).lov_flag         := NULL;
  4.1253 +               END;
  4.1254 +               n_ := n_ + 1;
  4.1255 +            END IF;
  4.1256 +         END LOOP;
  4.1257 +
  4.1258 +         -- Insert all the values into dictionary_sys_view_column_tab
  4.1259 +         BEGIN
  4.1260 +            FORALL j IN Nvl(complete_columns_.FIRST,0)..Nvl(complete_columns_.LAST,-1) SAVE EXCEPTIONS
  4.1261 +               INSERT INTO dictionary_sys_view_column_tab VALUES complete_columns_(j);
  4.1262 +         EXCEPTION
  4.1263 +            WHEN bulk_errors THEN
  4.1264 +               error_count_ := SQL%BULK_EXCEPTIONS.COUNT;
  4.1265 +               Write_Error_Text___ (error_text_, '   '||to_char(error_count_)||' problem(s) when inserting dictionary view column information!');
  4.1266 +               FOR i IN 1..error_count_ LOOP
  4.1267 +                  position_ := SQL%BULK_EXCEPTIONS(i).ERROR_INDEX;
  4.1268 +                  Write_Error_Text___ (error_text_, '   '||Rpad(Get_Logical_Unit_Module(complete_columns_(position_).lu_name),6)||':Error ' || SQLERRM(-SQL%BULK_EXCEPTIONS(i).ERROR_CODE)||', ', FALSE);
  4.1269 +                  Write_Error_Text___ (error_text_, 'Lu Name='||nvl(complete_columns_(position_).lu_name, 'NULL')||', ', FALSE);
  4.1270 +                  Write_Error_Text___ (error_text_, 'View Name='||nvl(complete_columns_(position_).view_name, 'NULL')||', ', FALSE);
  4.1271 +                  Write_Error_Text___ (error_text_, 'Column Name='||nvl(complete_columns_(position_).column_name, 'NULL'));
  4.1272 +               END LOOP;
  4.1273 +         END;
  4.1274 +      END IF;
  4.1275 +   END Refresh_View_Columns___;
  4.1276 +
  4.1277 +   -- Handles both domain and state information, behaves different depending on info_type
  4.1278 +   PROCEDURE Refresh_Domain_State_Info___ (
  4.1279 +      info_type_    IN VARCHAR2,
  4.1280 +      lu_name_      IN VARCHAR2,
  4.1281 +      package_name_ IN VARCHAR2 )
  4.1282 +   IS
  4.1283 +      -- Domain information
  4.1284 +      CURSOR get_domain_info(package_name_ IN VARCHAR2,list_type_ VARCHAR2) IS
  4.1285 +         SELECT ltrim(rtrim(substr(text, instr(text, '''')+ 1) )) list_values,line
  4.1286 +         FROM   user_source t
  4.1287 +         WHERE  type = 'PACKAGE BODY'
  4.1288 +         AND    name = package_name_
  4.1289 +         AND    text NOT LIKE '--%'
  4.1290 +         AND    text NOT LIKE '%/%*%'
  4.1291 +         AND    text NOT LIKE '%*%/'
  4.1292 +         AND line BETWEEN (SELECT MIN(line) 
  4.1293 +                           FROM   user_source x
  4.1294 +                           WHERE  type = 'PACKAGE BODY'
  4.1295 +                           AND    name = package_name_
  4.1296 +                           AND    x.text LIKE '%'||list_type_||'%:=%''%''%') 
  4.1297 +                     AND 
  4.1298 +                          (SELECT MIN(line) 
  4.1299 +                           FROM user_source y 
  4.1300 +                           WHERE  type = 'PACKAGE BODY'
  4.1301 +                           AND    y.name = package_name_
  4.1302 +                           AND y.text LIKE '%;%'
  4.1303 +                           AND y.line >= (SELECT min(line) 
  4.1304 +                                          FROM   user_source
  4.1305 +                                          WHERE  type = 'PACKAGE BODY'
  4.1306 +                                          AND    name = package_name_
  4.1307 +                                          AND    text LIKE '%'||list_type_||'%:=%''%''%'));   
  4.1308 +
  4.1309 +  
  4.1310 +      -- State information
  4.1311 +      CURSOR get_state_info(package_name_ IN VARCHAR2) IS
  4.1312 +         SELECT ltrim(rtrim(substr(text, 1, instr(text, 'CONSTANT') - 1))) list_type, ltrim(rtrim(substr(text, instr(text, '''')+ 1) )) list_values
  4.1313 +         FROM   user_source
  4.1314 +         WHERE  type = 'PACKAGE BODY'
  4.1315 +         AND    name = package_name_
  4.1316 +         AND    (text LIKE '%db_state_list_%:=%''%''%' OR text LIKE '%client_state_list_%:=%''%''%')
  4.1317 +         AND    text NOT LIKE '--%'
  4.1318 +         AND    text NOT LIKE '%/%*%'
  4.1319 +         AND    text NOT LIKE '%*%/';
  4.1320 +--         AND    line BETWEEN 2 AND 11;
  4.1321 +
  4.1322 +      refresh_domain_ BOOLEAN := info_type_ = 'domain';
  4.1323 +      position_       NUMBER;
  4.1324 +      error_count_    NUMBER;
  4.1325 +      bulk_errors     EXCEPTION;
  4.1326 +      PRAGMA EXCEPTION_INIT(bulk_errors, -24381);        
  4.1327 +      list_type_    VARCHAR2(100);
  4.1328 +
  4.1329 +      TYPE domain_array IS TABLE OF get_domain_info%ROWTYPE INDEX BY BINARY_INTEGER;
  4.1330 +      list_ domain_array;
  4.1331 +   BEGIN
  4.1332 +      -- Delete old values (they can only exist if this is not a full refresh)
  4.1333 +      IF NOT refresh_all_ THEN
  4.1334 +         IF refresh_domain_ THEN
  4.1335 +            DELETE FROM dictionary_sys_domain_tab
  4.1336 +               WHERE lu_name = lu_name_
  4.1337 +               AND package_name = package_name_;
  4.1338 +         ELSE
  4.1339 +            DELETE FROM dictionary_sys_state_tab
  4.1340 +               WHERE lu_name = lu_name_
  4.1341 +               AND package_name = package_name_;
  4.1342 +         END IF;
  4.1343 +      END IF;
  4.1344 +
  4.1345 +      -- Clear variables
  4.1346 +      db_values_.DELETE;
  4.1347 +      client_values_.DELETE;
  4.1348 +      complete_values_.DELETE;
  4.1349 +
  4.1350 +      IF refresh_domain_ THEN
  4.1351 +
  4.1352 +         OPEN get_domain_info(package_name_,'db_value_list_');
  4.1353 +         FETCH get_domain_info BULK COLLECT INTO list_;
  4.1354 +         CLOSE get_domain_info;
  4.1355 +
  4.1356 +         FOR j_ IN Nvl(list_.FIRST,0)..Nvl(list_.LAST,-1) LOOP
  4.1357 +            Tokenize_Lists___(list_(j_).list_values, db_values_);
  4.1358 +         END LOOP;
  4.1359 +
  4.1360 +         list_.DELETE;
  4.1361 +         OPEN get_domain_info(package_name_,'client_value_list_');
  4.1362 +         FETCH get_domain_info BULK COLLECT INTO list_;
  4.1363 +         CLOSE get_domain_info;
  4.1364 +
  4.1365 +         FOR j_ IN Nvl(list_.FIRST,0)..Nvl(list_.LAST,-1) LOOP
  4.1366 +            Tokenize_Lists___(list_(j_).list_values, client_values_);
  4.1367 +         END LOOP;
  4.1368 +      ELSE
  4.1369 +         FOR list IN get_state_info(package_name_) LOOP
  4.1370 +            -- Break down the list into single values in an array
  4.1371 +            IF list.list_type = 'db_state_list_' THEN
  4.1372 +               Tokenize_Lists___(list.list_values, db_values_);
  4.1373 +            ELSIF list.list_type = 'client_state_list_' THEN
  4.1374 +               Tokenize_Lists___(list.list_values, client_values_);
  4.1375 +            END IF;
  4.1376 +         END LOOP;
  4.1377 +         -- Get state events
  4.1378 +         -- translate db values to an PL/SQL collection
  4.1379 +
  4.1380 +      END IF;
  4.1381 +
  4.1382 +      IF db_values_.count > 0 THEN
  4.1383 +         -- Fill the result array with the rest of the necessary information
  4.1384 +         Fill_List_Array___(info_type_, lu_name_, package_name_, db_values_, client_values_, complete_values_);
  4.1385 +
  4.1386 +         -- Insert all of the values into dictionary_sys_domain_tab
  4.1387 +         BEGIN
  4.1388 +            IF refresh_domain_ THEN
  4.1389 +               FORALL j IN Nvl(complete_values_.FIRST,0)..Nvl(complete_values_.LAST,-1) SAVE EXCEPTIONS
  4.1390 +                  INSERT INTO dictionary_sys_domain_tab VALUES complete_values_(j);
  4.1391 +            ELSE
  4.1392 +               FORALL j IN Nvl(complete_values_.FIRST,0)..Nvl(complete_values_.LAST,-1) SAVE EXCEPTIONS
  4.1393 +                  INSERT INTO dictionary_sys_state_tab VALUES complete_values_(j);
  4.1394 +            END IF;
  4.1395 +         EXCEPTION
  4.1396 +            WHEN bulk_errors THEN
  4.1397 +               error_count_ := SQL%BULK_EXCEPTIONS.COUNT;
  4.1398 +               Write_Error_Text___ (error_text_, '   '||to_char(error_count_)||' problem(s) when inserting dictionary information for '||info_type_||' package '||package_name_||'!');
  4.1399 +               FOR i IN 1..error_count_ LOOP
  4.1400 +                  position_ := SQL%BULK_EXCEPTIONS(i).ERROR_INDEX - 1;
  4.1401 +--                  Write_Error_Text___ (error_text_, '   Position number '||to_char(position_));
  4.1402 +                  Write_Error_Text___ (error_text_, '   '||Rpad(Get_Logical_Unit_Module(lu_name_),6)||':Error ' || SQLERRM(-SQL%BULK_EXCEPTIONS(i).ERROR_CODE)||', ', FALSE);
  4.1403 +                  Write_Error_Text___ (error_text_, 'Db Value='||nvl(complete_values_(position_).db_value, 'NULL')||', ', FALSE);
  4.1404 +                  Write_Error_Text___ (error_text_, 'Client Value='||nvl(complete_values_(position_).client_value, 'NULL'));
  4.1405 +               END LOOP;
  4.1406 +         END;
  4.1407 +      END IF;
  4.1408 +   END Refresh_Domain_State_Info___;
  4.1409 +
  4.1410 +   PROCEDURE Refresh_Method_Arguments___ (
  4.1411 +      all_methods_  IN BOOLEAN,
  4.1412 +      start_time_   IN DATE )
  4.1413 +   IS
  4.1414 +      CURSOR get_met_arguments IS
  4.1415 +         SELECT package_name, object_name method_name, argument_name, position, data_type, in_out, nvl(to_number(overload), 0) overload
  4.1416 +         FROM user_arguments
  4.1417 +         WHERE package_name IS NOT NULL
  4.1418 +         AND argument_name IS NOT NULL
  4.1419 +         AND data_type IS NOT NULL
  4.1420 +         AND data_level = 0
  4.1421 +         ORDER BY package_name, object_name;
  4.1422 +
  4.1423 +      CURSOR get_new_met_arguments IS
  4.1424 +         SELECT ua.package_name, ua.object_name method_name, ua.argument_name, ua.position, ua.data_type, ua.in_out, nvl(to_number(ua.overload), 0) overload
  4.1425 +         FROM user_arguments ua, dictionary_sys_package_tab p
  4.1426 +         WHERE ua.package_name IS NOT NULL
  4.1427 +         AND ua.argument_name IS NOT NULL
  4.1428 +         AND ua.data_type IS NOT NULL
  4.1429 +         AND ua.data_level = 0
  4.1430 +         AND ua.package_name = p.package_name
  4.1431 +         AND p.rowversion >= start_time_
  4.1432 +         ORDER BY ua.package_name, ua.object_name;
  4.1433 +
  4.1434 +      lu_name_     VARCHAR2(30);
  4.1435 +      prev_pkg_    VARCHAR2(30) := 'NIL';
  4.1436 +      n_           NUMBER := 0;
  4.1437 +      position_    NUMBER;
  4.1438 +      error_count_ NUMBER;
  4.1439 +      bulk_errors  EXCEPTION;
  4.1440 +      PRAGMA EXCEPTION_INIT(bulk_errors, -24381);
  4.1441 +
  4.1442 +      TYPE met_argument_array IS TABLE OF get_met_arguments%ROWTYPE INDEX BY BINARY_INTEGER;
  4.1443 +      met_arguments met_argument_array;
  4.1444 +
  4.1445 +      TYPE complete_array IS TABLE OF dictionary_sys_argument_tab%ROWTYPE INDEX BY BINARY_INTEGER;
  4.1446 +      all_arguments_ complete_array;
  4.1447 +   BEGIN
  4.1448 +      --
  4.1449 +      -- Fetch method argument information and delete old information
  4.1450 +      --
  4.1451 +      IF all_methods_ THEN
  4.1452 +         OPEN get_met_arguments;
  4.1453 +         FETCH get_met_arguments BULK COLLECT INTO met_arguments;
  4.1454 +         CLOSE get_met_arguments;
  4.1455 +         -- Remove all old information
  4.1456 +         -- ifs_assert_safe pemase 20060215
  4.1457 +         EXECUTE IMMEDIATE 'TRUNCATE TABLE dictionary_sys_argument_tab';
  4.1458 +      ELSE
  4.1459 +         OPEN get_new_met_arguments;
  4.1460 +         FETCH get_new_met_arguments BULK COLLECT INTO met_arguments;
  4.1461 +         CLOSE get_new_met_arguments;
  4.1462 +         -- Remove old information for all of the methods that is being updated
  4.1463 +         DELETE FROM dictionary_sys_argument_tab a
  4.1464 +            WHERE EXISTS (SELECT 1
  4.1465 +                          FROM dictionary_sys_package_tab p
  4.1466 +                          WHERE a.package_name = p.package_name
  4.1467 +                          AND p.rowversion >= start_time_);
  4.1468 +      END IF;
  4.1469 +      --
  4.1470 +      -- Process method argument information
  4.1471 +      --
  4.1472 +      IF met_arguments.COUNT > 0 THEN
  4.1473 +         FOR i IN Nvl(met_arguments.FIRST,0)..Nvl(met_arguments.LAST,-1) LOOP
  4.1474 +            -- Find the lu name for the package if package has changed
  4.1475 +            IF (prev_pkg_ <> met_arguments(i).package_name) THEN
  4.1476 +               lu_name_ := Get_Logical_Unit(met_arguments(i).package_name, 'PACKAGE');
  4.1477 +               prev_pkg_ := met_arguments(i).package_name;
  4.1478 +            END IF;
  4.1479 +            IF lu_name_ IS NOT NULL THEN
  4.1480 +               -- Insert the values into the complete array
  4.1481 +               all_arguments_(n_).lu_name           := lu_name_;
  4.1482 +               all_arguments_(n_).package_name      := met_arguments(i).package_name;
  4.1483 +               all_arguments_(n_).method_name       := met_arguments(i).method_name;
  4.1484 +               all_arguments_(n_).argument_name     := met_arguments(i).argument_name;
  4.1485 +               all_arguments_(n_).argument_index    := met_arguments(i).position;
  4.1486 +               all_arguments_(n_).argument_datatype := met_arguments(i).data_type;
  4.1487 +               all_arguments_(n_).argument_type     := met_arguments(i).in_out;
  4.1488 +               all_arguments_(n_).overload          := met_arguments(i).overload;
  4.1489 +               all_arguments_(n_).rowversion        := SYSDATE;
  4.1490 +               n_ := n_ + 1;
  4.1491 +            END IF;
  4.1492 +         END LOOP;
  4.1493 +
  4.1494 +         -- Insert all the values into dictionary_sys_argument_tab
  4.1495 +         BEGIN
  4.1496 +            FORALL j IN Nvl(all_arguments_.FIRST,0)..Nvl(all_arguments_.LAST,-1) SAVE EXCEPTIONS
  4.1497 +               INSERT INTO dictionary_sys_argument_tab VALUES all_arguments_(j);
  4.1498 +         EXCEPTION
  4.1499 +            WHEN bulk_errors THEN
  4.1500 +               error_count_ := SQL%BULK_EXCEPTIONS.COUNT;
  4.1501 +               Write_Error_Text___ (error_text_, '   '||to_char(error_count_)||' problem(s) when inserting dictionary method argument information!');
  4.1502 +               FOR i IN 1..error_count_ LOOP
  4.1503 +                  position_ := SQL%BULK_EXCEPTIONS(i).ERROR_INDEX;
  4.1504 +                  Write_Error_Text___ (error_text_, '   '||Rpad(Get_Logical_Unit_Module(all_arguments_(position_).lu_name),6)||':Error ' || SQLERRM(-SQL%BULK_EXCEPTIONS(i).ERROR_CODE)||', ', FALSE);
  4.1505 +                  Write_Error_Text___ (error_text_, 'Lu Name='||nvl(all_arguments_(position_).lu_name, 'NULL')||', ', FALSE);
  4.1506 +                  Write_Error_Text___ (error_text_, 'Package Name='||nvl(all_arguments_(position_).package_name, 'NULL')||', ', FALSE);
  4.1507 +                  Write_Error_Text___ (error_text_, 'Method Name='||nvl(all_arguments_(position_).method_name, 'NULL')||', ', FALSE);
  4.1508 +                  Write_Error_Text___ (error_text_, 'Argument Name='||nvl(all_arguments_(position_).argument_name, 'NULL'));
  4.1509 +               END LOOP;
  4.1510 +         END;
  4.1511 +
  4.1512 +      END IF;
  4.1513 +   END Refresh_Method_Arguments___;
  4.1514 +
  4.1515 +   PROCEDURE Refresh_Methods___ (
  4.1516 +      all_methods_  IN BOOLEAN,
  4.1517 +      start_time_   IN DATE )
  4.1518 +   IS
  4.1519 +      CURSOR get_methods IS
  4.1520 +         SELECT p.object_name pkg, procedure_name met
  4.1521 +         FROM  user_procedures p
  4.1522 +         WHERE substr(object_name, -4) IN ('_API', '_RPI', '_SYS')
  4.1523 +         AND   procedure_name IS NOT NULL
  4.1524 +         GROUP BY procedure_name, object_name
  4.1525 +         ORDER BY object_name;
  4.1526 +
  4.1527 +      CURSOR get_pragma_methods IS
  4.1528 +         SELECT name pkg,
  4.1529 +                rtrim(ltrim(replace(replace(replace(
  4.1530 +                   upper(substr(text,1,instr(text,',') - 1 ))
  4.1531 +                   ,'(',''),'PRAGMA',''),'RESTRICT_REFERENCES',''))) met
  4.1532 +         FROM  user_source
  4.1533 +         WHERE type = 'PACKAGE'
  4.1534 +         AND   upper(text) LIKE '%PRAGMA%(%,%WNDS%'
  4.1535 +         AND   text NOT LIKE '--%'
  4.1536 +         ORDER BY name;
  4.1537 +
  4.1538 +      CURSOR get_new_methods IS
  4.1539 +         SELECT ua.object_name pkg, ua.procedure_name met
  4.1540 +         FROM  user_procedures ua, dictionary_sys_package_tab p
  4.1541 +         WHERE substr(object_name, -4) IN ('_API', '_RPI', '_SYS')
  4.1542 +         AND   p.package_name = ua.object_name
  4.1543 +         AND   procedure_name IS NOT NULL
  4.1544 +         AND   p.rowversion >= start_time_
  4.1545 +         GROUP BY ua.object_name, ua.procedure_name
  4.1546 +         ORDER BY ua.object_name;
  4.1547 +
  4.1548 +      CURSOR get_new_pragma_methods IS
  4.1549 +         SELECT u.name pkg,
  4.1550 +                rtrim(ltrim(replace(replace(replace(
  4.1551 +                   upper(substr(u.text,1,instr(u.text,',') - 1 ))
  4.1552 +                   ,'(',''),'PRAGMA',''),'RESTRICT_REFERENCES',''))) met
  4.1553 +         FROM  user_source u, dictionary_sys_package_tab p
  4.1554 +         WHERE u.type = 'PACKAGE'
  4.1555 +         AND   upper(u.text) LIKE '%PRAGMA%(%,%WNDS%'
  4.1556 +         AND   u.text NOT LIKE '--%'
  4.1557 +         AND   u.name = p.package_name
  4.1558 +         AND   p.rowversion >= start_time_
  4.1559 +         ORDER BY name;
  4.1560 +
  4.1561 +      lu_name_     VARCHAR2(30);
  4.1562 +      prev_pkg_    VARCHAR2(30) := 'NIL';
  4.1563 +      n_           NUMBER := 0;
  4.1564 +      position_    NUMBER;
  4.1565 +      error_count_ NUMBER;
  4.1566 +      bulk_errors  EXCEPTION;
  4.1567 +      PRAGMA EXCEPTION_INIT(bulk_errors, -24381);
  4.1568 +
  4.1569 +      TYPE method_array IS TABLE OF get_methods%ROWTYPE INDEX BY BINARY_INTEGER;
  4.1570 +      methods_ method_array;
  4.1571 +
  4.1572 +      TYPE complete_array IS TABLE OF dictionary_sys_method_tab%ROWTYPE INDEX BY BINARY_INTEGER;
  4.1573 +      complete_methods_ complete_array;
  4.1574 +   BEGIN
  4.1575 +      --
  4.1576 +      -- Fetch method information and delete old information
  4.1577 +      --
  4.1578 +      IF all_methods_ THEN
  4.1579 +         OPEN get_methods;
  4.1580 +         FETCH get_methods BULK COLLECT INTO methods_;
  4.1581 +         CLOSE get_methods;
  4.1582 +         -- Remove all old information for methods
  4.1583 +         -- ifs_assert_safe pemase 20060215
  4.1584 +         EXECUTE IMMEDIATE 'TRUNCATE TABLE dictionary_sys_method_tab';
  4.1585 +      ELSE
  4.1586 +         OPEN get_new_methods;
  4.1587 +         FETCH get_new_methods BULK COLLECT INTO methods_;
  4.1588 +         CLOSE get_new_methods;
  4.1589 +         -- Remove old information for all of the methods that is being updated
  4.1590 +         DELETE FROM dictionary_sys_method_tab m
  4.1591 +            WHERE EXISTS (SELECT 1
  4.1592 +                          FROM dictionary_sys_package_tab p
  4.1593 +                          WHERE p.package_name = m.package_name
  4.1594 +                          AND p.rowversion >= start_time_);
  4.1595 +      END IF;
  4.1596 +      --
  4.1597 +      -- Process method information
  4.1598 +      --
  4.1599 +      IF methods_.COUNT > 0 THEN
  4.1600 +         FOR i IN Nvl(methods_.FIRST,0)..Nvl(methods_.LAST,-1) LOOP
  4.1601 +            IF (prev_pkg_ <> methods_(i).pkg) THEN
  4.1602 +               lu_name_ := Get_Logical_Unit(methods_(i).pkg, 'PACKAGE');
  4.1603 +               prev_pkg_ := methods_(i).pkg;
  4.1604 +            END IF;
  4.1605 +            IF lu_name_ IS NOT NULL THEN
  4.1606 +               method_ := replace(initcap(replace(methods_(i).met,'_',' ')),' ','_');
  4.1607 +               -- Insert the values into the complete array
  4.1608 +               complete_methods_(n_).lu_name      := lu_name_;
  4.1609 +               complete_methods_(n_).package_name := methods_(i).pkg;
  4.1610 +               complete_methods_(n_).method_name  := method_;
  4.1611 +               complete_methods_(n_).method_type  := 'N';
  4.1612 +               complete_methods_(n_).rowversion   := SYSDATE;
  4.1613 +               n_ := n_ + 1;
  4.1614 +            END IF;
  4.1615 +         END LOOP;
  4.1616 +
  4.1617 +         -- Insert all the values into dictionary_sys_method_tab
  4.1618 +         BEGIN
  4.1619 +            FORALL j IN Nvl(complete_methods_.FIRST,0)..Nvl(complete_methods_.LAST,-1) SAVE EXCEPTIONS
  4.1620 +               INSERT INTO dictionary_sys_method_tab VALUES complete_methods_(j);
  4.1621 +         EXCEPTION
  4.1622 +            WHEN bulk_errors THEN
  4.1623 +               error_count_ := SQL%BULK_EXCEPTIONS.COUNT;
  4.1624 +               Write_Error_Text___ (error_text_, '   '||to_char(error_count_)||' problem(s) when inserting dictionary method information!');
  4.1625 +               FOR i IN 1..error_count_ LOOP
  4.1626 +                  position_ := SQL%BULK_EXCEPTIONS(i).ERROR_INDEX;
  4.1627 +                  Write_Error_Text___ (error_text_, '   '||Rpad(Get_Logical_Unit_Module(complete_methods_(position_).lu_name),6)||':Error ' || SQLERRM(-SQL%BULK_EXCEPTIONS(i).ERROR_CODE)||', ', FALSE);
  4.1628 +                  Write_Error_Text___ (error_text_, 'Lu Name='||nvl(complete_methods_(position_).lu_name, 'NULL')||', ', FALSE);
  4.1629 +                  Write_Error_Text___ (error_text_, 'Package Name='||nvl(complete_methods_(position_).package_name, 'NULL')||', ', FALSE);
  4.1630 +                  Write_Error_Text___ (error_text_, 'Method Name='||nvl(complete_methods_(position_).method_name, 'NULL'));
  4.1631 +               END LOOP;
  4.1632 +         END;
  4.1633 +      END IF;
  4.1634 +
  4.1635 +      -- Clear arrays
  4.1636 +      methods_.DELETE;
  4.1637 +      complete_methods_.DELETE;
  4.1638 +
  4.1639 +      --
  4.1640 +      -- Fetch pragma method information
  4.1641 +      --
  4.1642 +      IF all_methods_ THEN
  4.1643 +         OPEN get_pragma_methods;
  4.1644 +         FETCH get_pragma_methods BULK COLLECT INTO methods_;
  4.1645 +         CLOSE get_pragma_methods;
  4.1646 +      ELSE
  4.1647 +         OPEN get_new_pragma_methods;
  4.1648 +         FETCH get_new_pragma_methods BULK COLLECT INTO methods_;
  4.1649 +         CLOSE get_new_pragma_methods;
  4.1650 +      END IF;
  4.1651 +      --
  4.1652 +      -- Process pragma method information
  4.1653 +      --
  4.1654 +      IF methods_.COUNT > 0 THEN
  4.1655 +         -- Initiate sub type
  4.1656 +         pkg_lu_sub_type_ := 'N';
  4.1657 +         FOR i IN Nvl(methods_.FIRST,0)..Nvl(methods_.LAST,-1) LOOP
  4.1658 +            -- Find the name of the LU for every new package
  4.1659 +            IF (prev_pkg_ <> methods_(i).pkg) THEN
  4.1660 +               lu_name_ := Get_Logical_Unit(methods_(i).pkg, 'PACKAGE');
  4.1661 +               prev_pkg_ := methods_(i).pkg;
  4.1662 +            END IF;
  4.1663 +            IF lu_name_ IS NOT NULL THEN
  4.1664 +               method_ := replace(initcap(replace(methods_(i).met,'_',' ')),' ','_');
  4.1665 +               -- Update the record in dictionary_sys_method_tab
  4.1666 +               BEGIN
  4.1667 +                  UPDATE dictionary_sys_method_tab
  4.1668 +                     SET method_type = 'P',
  4.1669 +                         rowversion = SYSDATE
  4.1670 +                     WHERE lu_name = lu_name_
  4.1671 +                     AND   package_name = methods_(i).pkg
  4.1672 +                     AND   method_name = method_;
  4.1673 +                  IF SQL%NOTFOUND THEN
  4.1674 +                     INSERT INTO dictionary_sys_method_tab
  4.1675 +                        (lu_name, package_name, method_name, method_type, rowversion)
  4.1676 +                     VALUES
  4.1677 +                        (lu_name_, methods_(i).pkg, method_, 'P', SYSDATE);
  4.1678 +                  END IF;
  4.1679 +               EXCEPTION
  4.1680 +                  WHEN OTHERS THEN
  4.1681 +                     Write_Error_Text___ (error_text_, '   '||Rpad(Get_Logical_Unit_Module(lu_name_),6)||':Undefined problem when inserting dictionary information for PRAGMA-method '||method_||' in package '||methods_(i).pkg||', ', FALSE);
  4.1682 +                     Write_Error_Text___ (error_text_, 'Lu Name='||nvl(lu_name_, 'NULL')||', ', FALSE);
  4.1683 +                     Write_Error_Text___ (error_text_, 'Package Name='||nvl(methods_(i).pkg, 'NULL')||', ', FALSE);
  4.1684 +                     Write_Error_Text___ (error_text_, 'Method Name='||nvl(method_, 'NULL'));
  4.1685 +               END;
  4.1686 +               -- Handle if current package contains a state machine (identified by a specific PRAGMA method)
  4.1687 +               -- This call set the global variable pkg_lu_sub_type
  4.1688 +               Handle_Possible_State_Pkg___(lu_name_, method_);
  4.1689 +               -- Fetch and insert state information if current package contains a state machine
  4.1690 +               IF pkg_lu_sub_type_ = 'S' THEN
  4.1691 +                  IF (refresh_mode_ != 'LIGHT') THEN
  4.1692 +                     Refresh_Domain_State_Info___('state', lu_name_, methods_(i).pkg);
  4.1693 +                  END IF;
  4.1694 +                  -- Reset the sub_type to avoid multiple unnecessary searches
  4.1695 +                  pkg_lu_sub_type_ := 'N';
  4.1696 +               END IF;
  4.1697 +            END IF;
  4.1698 +         END LOOP;
  4.1699 +      END IF;
  4.1700 +      --
  4.1701 +      -- Update special handled methods to PRAGMA (Read-only) methods
  4.1702 +      --
  4.1703 +      UPDATE dictionary_sys_method_tab t
  4.1704 +         SET method_type = 'P'
  4.1705 +       WHERE upper(t.method_name)
  4.1706 +          IN ('ENUMERATE',
  4.1707 +              'EXIST',
  4.1708 +              'EXIST_DB',
  4.1709 +              'LOCK__',
  4.1710 +              'LANGUAGE_REFRESHED',
  4.1711 +              'INIT',
  4.1712 +              'FINITE_STATE_DECODE__',
  4.1713 +              'FINITE_STATE_ENCODE__',
  4.1714 +              'ENUMERATE_STATES__',
  4.1715 +              'FINITE_STATE_EVENTS__',
  4.1716 +              'ENUMERATE_EVENTS__');
  4.1717 +   END Refresh_Methods___;
  4.1718 +
  4.1719 +BEGIN
  4.1720 +   General_SYS.Init_Method(service_, '&PKG', 'Rebuild_Dictionary_Storage_');
  4.1721 +   Write_Error_Text___ (error_text_, '-------------------------------------------------------------');
  4.1722 +   Write_Error_Text___ (error_text_, 'Dictionary Cache started');
  4.1723 +   Write_Error_Text___ (error_text_, '-------------------------------------------------------------');
  4.1724 +   --
  4.1725 +   -- Validate refresh mode before proceeding
  4.1726 +   --
  4.1727 +   IF refresh_mode_ IS NULL OR refresh_mode_ NOT IN ('FULL', 'PARTIAL', 'VIEWS', 'PACKAGES', 'LIGHT') THEN
  4.1728 +      Error_SYS.Appl_General(service_, 'INVALIDMODE: Invalid Refresh Mode! Mode should be one of the values [:P1]', 'FULL, PARTIAL, VIEWS, PACKAGES');
  4.1729 +   END IF;
  4.1730 +   --
  4.1731 +   -- If a refresh is not necessary and a full refresh is not ordered, abort immediately...
  4.1732 +   -- This is more effecient than doing a complete search for packages and views.
  4.1733 +   --
  4.1734 +   -- In this procedure Dbms_Output should be used instead of Trace_SYS to enable
  4.1735 +   -- traces during installation time.
  4.1736 +   --
  4.1737 +   IF NOT refresh_all_ THEN
  4.1738 +      Check_Dictionary_Storage_(rebuild_needed_);
  4.1739 +      IF rebuild_needed_ = 0 THEN
  4.1740 +         Write_Error_Text___ (error_text_, 'Dictionary Cache is already up-to-date.');
  4.1741 +         RETURN(error_text_);
  4.1742 +      END IF;
  4.1743 +
  4.1744 +      -- Find last update time
  4.1745 +      OPEN get_last_update;
  4.1746 +      FETCH get_last_update INTO last_update_;
  4.1747 +      CLOSE get_last_update;
  4.1748 +
  4.1749 +      -- Set full refresh mode if no dictionary data exist
  4.1750 +      IF last_update_ IS NULL THEN
  4.1751 +         refresh_all_ := TRUE;
  4.1752 +      END IF;
  4.1753 +   END IF;
  4.1754 +
  4.1755 +   IF refresh_all_ THEN
  4.1756 +      Write_Error_Text___ (error_text_, 'Full Refresh of Dictionary Cache!');
  4.1757 +
  4.1758 +      -- Fetch the objects to update
  4.1759 +      OPEN get_all_pkgs;
  4.1760 +      FETCH get_all_pkgs BULK COLLECT INTO packages_;
  4.1761 +      CLOSE get_all_pkgs;
  4.1762 +
  4.1763 +      OPEN get_all_views;
  4.1764 +      FETCH get_all_views BULK COLLECT INTO views_;
  4.1765 +      CLOSE get_all_views;
  4.1766 +   ELSE
  4.1767 +      -- Spool information about what "mode" is used
  4.1768 +      IF refresh_views_ AND refresh_pkgs_ THEN
  4.1769 +         Write_Error_Text___ (error_text_, 'Partial Refresh of Dictionary Cache!');
  4.1770 +      ELSIF refresh_pkgs_ THEN
  4.1771 +         Write_Error_Text___ (error_text_, 'Partial Refresh of Dictionary Cache only for packages!');
  4.1772 +      ELSIF refresh_views_ THEN
  4.1773 +         Write_Error_Text___ (error_text_, 'Partial Refresh of Dictionary Cache only for views!');
  4.1774 +      END IF;
  4.1775 +      Write_Error_Text___ (error_text_, 'Last Update of Dictionary Cache occured at '||to_char(last_update_, 'YYYY-MM-DD HH24:MI:SS'));
  4.1776 +
  4.1777 +      -- Fetch the objects to update
  4.1778 +      IF refresh_pkgs_ THEN
  4.1779 +         OPEN get_pkgs_to_update(last_update_);
  4.1780 +         FETCH get_pkgs_to_update BULK COLLECT INTO packages_;
  4.1781 +         CLOSE get_pkgs_to_update;
  4.1782 +      END IF;
  4.1783 +
  4.1784 +      IF refresh_views_ THEN
  4.1785 +         OPEN get_views_to_update(last_update_);
  4.1786 +         FETCH get_views_to_update BULK COLLECT INTO views_;
  4.1787 +         CLOSE get_views_to_update;
  4.1788 +      END IF;
  4.1789 +   END IF;
  4.1790 +   --
  4.1791 +   -- Refresh package and method information
  4.1792 +   --
  4.1793 +   Write_Error_Text___ (error_text_, '   -------------------------------------------------------------');
  4.1794 +   Write_Error_Text___ (error_text_, '   Dictionary Cache is being updated for '||to_char(packages_.count)||' Packages');
  4.1795 +   Write_Error_Text___ (error_text_, '   -------------------------------------------------------------');
  4.1796 +   IF packages_.COUNT > 0 THEN
  4.1797 +      -- Save start date for package refresh
  4.1798 +      start_time_ := SYSDATE;
  4.1799 +      -- Remove old information if full refresh
  4.1800 +      IF refresh_all_ THEN
  4.1801 +         -- ifs_assert_safe pemase 20060215
  4.1802 +         EXECUTE IMMEDIATE 'TRUNCATE TABLE dictionary_sys_tab';
  4.1803 +         -- ifs_assert_safe pemase 20060215
  4.1804 +         EXECUTE IMMEDIATE 'TRUNCATE TABLE dictionary_sys_package_tab';
  4.1805 +         -- ifs_assert_safe pemase 20060215
  4.1806 +         EXECUTE IMMEDIATE 'TRUNCATE TABLE dictionary_sys_domain_tab';
  4.1807 +         -- ifs_assert_safe pemase 20060215
  4.1808 +         EXECUTE IMMEDIATE 'TRUNCATE TABLE dictionary_sys_state_tab';
  4.1809 +         -- ifs_assert_safe pemase 20060215
  4.1810 +         EXECUTE IMMEDIATE 'TRUNCATE TABLE dictionary_sys_state_event_tab';
  4.1811 +      END IF;
  4.1812 +
  4.1813 +      FOR i IN Nvl(packages_.FIRST,0)..Nvl(packages_.LAST,-1) LOOP
  4.1814 +         pkg_module_      := NULL;
  4.1815 +         pkg_lu_name_     := NULL;
  4.1816 +         pkg_lu_type_     := NULL;
  4.1817 +         pkg_lu_sub_type_ := 'N';
  4.1818 +         FOR pkg_info IN get_package_info(packages_(i)) LOOP
  4.1819 +            -- Investigate module, lu name and sub type of the lu
  4.1820 +            IF (pkg_info.gtype = 'M') THEN
  4.1821 +               pkg_module_ := substr(pkg_info.global, 1, 6);
  4.1822 +            ELSIF pkg_info.gtype IN ('L', 'S') THEN
  4.1823 +               pkg_lu_name_ := pkg_info.global;
  4.1824 +               pkg_lu_type_ := pkg_info.gtype;
  4.1825 +            ELSIF pkg_info.gtype = 'D' THEN
  4.1826 +               pkg_lu_sub_type_ := pkg_info.gtype;
  4.1827 +            END IF;
  4.1828 +         END LOOP;
  4.1829 +         IF pkg_lu_name_ IS NOT NULL AND pkg_module_ IS NOT NULL THEN
  4.1830 +            -- Insert the information into the dictionary
  4.1831 +            Insert_Package_Information___(pkg_lu_name_,
  4.1832 +                                          pkg_module_,
  4.1833 +                                          packages_(i),
  4.1834 +                                          pkg_lu_type_,
  4.1835 +                                          pkg_lu_sub_type_);
  4.1836 +
  4.1837 +            -- Refresh domain or state information depending on sub type of the LU (stored in global variable)
  4.1838 +            IF pkg_lu_sub_type_ = 'D' THEN
  4.1839 +               -- Refresh domain information if this is identified as an IID package
  4.1840 +               IF (refresh_mode_ != 'LIGHT') THEN
  4.1841 +                  Refresh_Domain_State_Info___('domain', pkg_lu_name_, packages_(i));
  4.1842 +               END IF;
  4.1843 +            END IF;
  4.1844 +         ELSE
  4.1845 +            Write_Error_Text___ (error_text_, '   ??????:Missing Module- or LU-information for package '||packages_(i)||'! Make sure that correct package globals exist for '||packages_(i));
  4.1846 +         END IF;
  4.1847 +      END LOOP;
  4.1848 +      --
  4.1849 +      -- Refresh methods once all packages are updated
  4.1850 +      --
  4.1851 +      Refresh_Methods___(refresh_all_, start_time_);
  4.1852 +      --
  4.1853 +      -- Refresh arguments for methods once all methods are updated
  4.1854 +      --
  4.1855 +      Refresh_Method_Arguments___(refresh_all_, start_time_);
  4.1856 +
  4.1857 +/* Commented for now, since the code has several bugs. Maybe corrected in future Service Pack
  4.1858 +      IF (refresh_mode_ != 'LIGHT') THEN
  4.1859 +         IF refresh_all_ THEN
  4.1860 +            Rebuild_All_State_Event___(TRUE);
  4.1861 +            Rebuild_State_Transitions___(TRUE);
  4.1862 +            Rebuild_State_Machine___(TRUE);
  4.1863 +         ELSE
  4.1864 +            Rebuild_All_State_Event___(FALSE);
  4.1865 +            Rebuild_State_Transitions___(FALSE);
  4.1866 +            Rebuild_State_Machine___(FALSE);
  4.1867 +         END IF;
  4.1868 +      END IF;
  4.1869 +*/
  4.1870 +   END IF;
  4.1871 +   --
  4.1872 +   -- Refresh view information
  4.1873 +   --
  4.1874 +   Write_Error_Text___ (error_text_, '   -------------------------------------------------------------');
  4.1875 +   Write_Error_Text___ (error_text_, '   Dictionary Cache is being updated for '||to_char(views_.count)||' Views');
  4.1876 +   Write_Error_Text___ (error_text_, '   -------------------------------------------------------------');
  4.1877 +   IF views_.COUNT > 0 THEN
  4.1878 +      -- Save start date for view refresh
  4.1879 +      start_time_ := SYSDATE;
  4.1880 +      -- Remove old information if full refresh
  4.1881 +      IF refresh_all_ THEN
  4.1882 +         -- ifs_assert_safe pemase 20060215
  4.1883 +         EXECUTE IMMEDIATE 'TRUNCATE TABLE dictionary_sys_view_tab';
  4.1884 +      ELSE
  4.1885 +         FORALL j IN Nvl(views_.FIRST,0)..Nvl(views_.LAST,-1)
  4.1886 +            DELETE FROM dictionary_sys_view_tab
  4.1887 +               WHERE view_name = views_(j);
  4.1888 +      END IF;
  4.1889 +
  4.1890 +      FOR i IN Nvl(views_.FIRST,0)..Nvl(views_.LAST,-1) LOOP
  4.1891 +         OPEN get_view_comments(views_(i));
  4.1892 +         FETCH get_view_comments INTO view_comment_;
  4.1893 +         CLOSE get_view_comments;
  4.1894 +         view_module_  := NULL;
  4.1895 +         view_lu_name_ := NULL;
  4.1896 +         view_module_  := upper(substr(Dictionary_SYS.Comment_Value_('MODULE', view_comment_), 1, 6));
  4.1897 +         IF view_module_ = 'IGNORE' THEN
  4.1898 +            view_lu_name_ := 'IGNORE';
  4.1899 +         END IF;
  4.1900 +         IF view_lu_name_ IS NULL THEN
  4.1901 +            view_lu_name_ := Dictionary_SYS.Comment_Value_('LU', view_comment_);
  4.1902 +            IF view_lu_name_ IS NULL THEN
  4.1903 +               view_lu_name_ := Dictionary_SYS.Comment_Value_('SERVICE', view_comment_);
  4.1904 +            END IF;
  4.1905 +         END IF;
  4.1906 +         view_prompt_  := Dictionary_SYS.Comment_Value_('PROMPT', view_comment_);
  4.1907 +         IF view_module_ IS NOT NULL AND view_lu_name_ IS NOT NULL THEN
  4.1908 +            IF view_module_ != 'IGNORE' THEN
  4.1909 +               Insert_View_Information___(view_lu_name_,
  4.1910 +                                          view_module_,
  4.1911 +                                          views_(i),
  4.1912 +                                          view_prompt_);
  4.1913 +            END IF;
  4.1914 +         ELSE
  4.1915 +            Write_Error_Text___ (error_text_, '   ??????:Missing Module- or LU-information for view '||views_(i)||'! Make sure that correct view comments exist for '||views_(i));
  4.1916 +         END IF;
  4.1917 +      END LOOP;
  4.1918 +      --
  4.1919 +      -- Refresh view columns once all view are updated
  4.1920 +      --
  4.1921 +      Refresh_View_Columns___(refresh_all_, start_time_);
  4.1922 +
  4.1923 +   END IF;
  4.1924 +
  4.1925 +   IF NOT refresh_all_ THEN
  4.1926 +      --
  4.1927 +      -- Delete information for objects no longer in the database
  4.1928 +      --
  4.1929 +      DELETE FROM dictionary_sys_package_tab p
  4.1930 +         WHERE NOT EXISTS (SELECT 1
  4.1931 +                           FROM user_objects o
  4.1932 +                           WHERE o.object_type = 'PACKAGE'
  4.1933 +                           AND p.package_name = o.object_name);
  4.1934 +
  4.1935 +      DELETE FROM dictionary_sys_method_tab m
  4.1936 +         WHERE NOT EXISTS (SELECT 1
  4.1937 +                           FROM dictionary_sys_package_tab p
  4.1938 +                           WHERE m.package_name = p.package_name);
  4.1939 +
  4.1940 +      DELETE FROM dictionary_sys_view_tab v
  4.1941 +         WHERE NOT EXISTS (SELECT 1
  4.1942 +                           FROM user_objects o
  4.1943 +                           WHERE o.object_type = 'VIEW'
  4.1944 +                           AND v.view_name = o.object_name);
  4.1945 +
  4.1946 +      DELETE FROM dictionary_sys_view_column_tab c
  4.1947 +         WHERE NOT EXISTS (SELECT 1
  4.1948 +                           FROM dictionary_sys_view_tab v
  4.1949 +                           WHERE v.lu_name = c.lu_name
  4.1950 +                           AND v.view_name = c.view_name);
  4.1951 +
  4.1952 +      DELETE FROM dictionary_sys_tab l
  4.1953 +         WHERE NOT EXISTS (SELECT 1
  4.1954 +                           FROM dictionary_sys_package_tab p
  4.1955 +                           WHERE p.lu_name = l.lu_name
  4.1956 +                           UNION
  4.1957 +                           SELECT 1
  4.1958 +                           FROM dictionary_sys_view_tab v
  4.1959 +                           WHERE v.lu_name = l.lu_name);
  4.1960 +   END IF;
  4.1961 +
  4.1962 +   --
  4.1963 +   -- Attempt 1:
  4.1964 +   -- At this point we have the basic information about the dictionary
  4.1965 +   -- but some base views are missing. This is the first method to fix it.
  4.1966 +   --
  4.1967 +   UPDATE dictionary_sys_view_tab
  4.1968 +      SET view_type = 'B'
  4.1969 +    WHERE lu_name NOT IN ( SELECT lu_name
  4.1970 +                             FROM dictionary_sys_view_tab
  4.1971 +                            WHERE view_type = 'B' )
  4.1972 +      AND view_name IN   ( SELECT view_name
  4.1973 +                             FROM dictionary_sys_view_tab    dv,
  4.1974 +                                  dictionary_sys_package_tab dp
  4.1975 +                            WHERE dv.lu_name = dp.lu_name
  4.1976 +                              AND ( dv.view_name || '_API') = dp.package_name );
  4.1977 +
  4.1978 +   --
  4.1979 +   -- Attempt 2:
  4.1980 +   -- Set the first view as base view for Logical Units that does not yet have been
  4.1981 +   -- assigned any base view according to naming standard rules.
  4.1982 +   --
  4.1983 +   UPDATE dictionary_sys_view_tab
  4.1984 +      SET view_type = 'B'
  4.1985 +      WHERE lu_name NOT IN (SELECT lu_name
  4.1986 +                            FROM dictionary_sys_view_tab
  4.1987 +                            WHERE view_type = 'B')
  4.1988 +      AND view_index = 1;
  4.1989 +   --
  4.1990 +   -- Set prompts for all Logical Units that didn't have a clearly defined view with a prompt.
  4.1991 +   -- Create the prompt from the Logical Unit name.
  4.1992 +   --
  4.1993 +   UPDATE dictionary_sys_tab
  4.1994 +      SET lu_prompt = replace(initcap(Dictionary_SYS.Clientnametodbname_(lu_name)),'_',' ')
  4.1995 +   WHERE lu_prompt IS NULL;
  4.1996 +
  4.1997 +   Cache_Management_API.Refresh_Cache('Dictionary');
  4.1998 +   
  4.1999 +   --
  4.2000 +   -- Call activity ManageApplicationServerCache.ClearDataDictionaryCache
  4.2001 +   --
  4.2002 +   DECLARE
  4.2003 +      record_  PLSQLAP_Record_API.type_record_;
  4.2004 +   BEGIN
  4.2005 +      record_ := PLSQLAP_Record_API.New_Record('');
  4.2006 +      PLSQLAP_Server_API.Invoke_Record_('ManageApplicationServerCache', 'ClearDataDictionaryCache', record_);
  4.2007 +      PLSQLAP_Record_API.Clear_Record(record_);
  4.2008 +   EXCEPTION
  4.2009 +      WHEN OTHERS THEN
  4.2010 +         NULL; -- Don't stop if error occurs
  4.2011 +         PLSQLAP_Record_API.Clear_Record(record_);
  4.2012 +   END;
  4.2013 +
  4.2014 +   Write_Error_Text___ (error_text_, '-------------------------------------------------------------');
  4.2015 +   Write_Error_Text___ (error_text_, 'Dictionary Cache finished');
  4.2016 +   Write_Error_Text___ (error_text_, '-------------------------------------------------------------');
  4.2017 +   RETURN(error_text_);
  4.2018 +
  4.2019 +END Rebuild_Dictionary_Storage___;
  4.2020 +
  4.2021 +
  4.2022 +-----------------------------------------------------------------------------
  4.2023 +-------------------- SERVICE SPECIFIC PRIVATE METHODS -----------------------
  4.2024 +-----------------------------------------------------------------------------
  4.2025 +
  4.2026 +-----------------------------------------------------------------------------
  4.2027 +-- Property fetching routines for run-time use (private)
  4.2028 +-----------------------------------------------------------------------------
  4.2029 +
  4.2030 +-- Modified implementation to use dictionary cache. Designtime version moved to Design_SYS
  4.2031 +PROCEDURE Enumerate_Logical_Units__ (
  4.2032 +   lu_list1_ OUT VARCHAR2,
  4.2033 +   lu_list2_ OUT VARCHAR2,
  4.2034 +   lu_list3_ OUT VARCHAR2,
  4.2035 +   lu_list4_ OUT VARCHAR2 )
  4.2036 +IS
  4.2037 +   temp_  lu_struct_type;
  4.2038 +   limit_ NUMBER := 31000;
  4.2039 +   n_     NUMBER := 1;
  4.2040 +
  4.2041 +   CURSOR units IS
  4.2042 +      SELECT lu_name
  4.2043 +      FROM   dictionary_sys_tab
  4.2044 +      WHERE lu_type = 'L'
  4.2045 +      ORDER BY lu_name;
  4.2046 +BEGIN
  4.2047 +   --
  4.2048 +   -- Init used elements
  4.2049 +   --
  4.2050 +   temp_(1) := NULL;
  4.2051 +   temp_(2) := NULL;
  4.2052 +   temp_(3) := NULL;
  4.2053 +   temp_(4) := NULL;
  4.2054 +   --
  4.2055 +   -- Fetch all packages and views associated with a logical unit
  4.2056 +   -- Convert to client naming and append to list
  4.2057 +   --
  4.2058 +   FOR unit IN units LOOP
  4.2059 +      temp_(n_) := temp_(n_)||unit.lu_name||field_separator_;
  4.2060 +      IF (length(temp_(n_)) > limit_) THEN
  4.2061 +         n_ := n_ + 1;
  4.2062 +      END IF;
  4.2063 +   END LOOP;
  4.2064 +   --
  4.2065 +   -- Return complete lists
  4.2066 +   --
  4.2067 +   lu_list1_ := temp_(1);
  4.2068 +   lu_list2_ := temp_(2);
  4.2069 +   lu_list3_ := temp_(3);
  4.2070 +   lu_list4_ := temp_(4);
  4.2071 +END Enumerate_Logical_Units__;
  4.2072 +
  4.2073 +PROCEDURE Get_Logical_Unit_Properties__ (
  4.2074 +   lu_name_        IN  VARCHAR2,
  4.2075 +   view_list_      OUT VARCHAR2,
  4.2076 +   package_list_   OUT VARCHAR2,
  4.2077 +   method_list_    OUT VARCHAR2,
  4.2078 +   all_methods_    IN  VARCHAR2 DEFAULT 'TRUE' )
  4.2079 +IS
  4.2080 +BEGIN
  4.2081 +   Get_Logical_Unit_Views__(lu_name_, view_list_);
  4.2082 +   Get_Logical_Unit_Packages__(lu_name_, package_list_);
  4.2083 +   Get_Logical_Unit_Methods__(lu_name_, method_list_, all_methods_);
  4.2084 +END Get_Logical_Unit_Properties__;
  4.2085 +
  4.2086 +PROCEDURE Get_Logical_Unit_Properties2__ (
  4.2087 +   lu_name_        IN  VARCHAR2,
  4.2088 +   view_list_      OUT VARCHAR2,
  4.2089 +   package_list_   OUT VARCHAR2,
  4.2090 +   method_list_    OUT VARCHAR2,
  4.2091 +   all_methods_    IN  VARCHAR2 DEFAULT 'TRUE' )
  4.2092 +IS
  4.2093 +BEGIN
  4.2094 +   Get_Logical_Unit_Views__(lu_name_, view_list_);
  4.2095 +   Get_Logical_Unit_Packages__(lu_name_, package_list_);
  4.2096 +   Get_LU_Method_Types__(lu_name_, method_list_);
  4.2097 +END Get_Logical_Unit_Properties2__;
  4.2098 +
  4.2099 +PROCEDURE Get_Logical_Unit_Views__ (
  4.2100 +   lu_name_        IN  VARCHAR2,
  4.2101 +   view_list_      OUT VARCHAR2 )
  4.2102 +IS
  4.2103 +BEGIN
  4.2104 +   view_list_ := Get_Logical_Unit_Views__(lu_name_);
  4.2105 +END Get_Logical_Unit_Views__;
  4.2106 +
  4.2107 +FUNCTION Get_Logical_Unit_Views__ (
  4.2108 +   lu_name_        IN  VARCHAR2) RETURN VARCHAR2
  4.2109 +IS
  4.2110 +   view_array_     object_array;
  4.2111 +   view_list_      VARCHAR2(4000);
  4.2112 +
  4.2113 +   CURSOR get_lu_views IS
  4.2114 +      SELECT view_name
  4.2115 +      FROM dictionary_sys_view_tab
  4.2116 +      WHERE lu_name = lu_name_
  4.2117 +      ORDER BY view_index;
  4.2118 +BEGIN
  4.2119 +   OPEN  get_lu_views;
  4.2120 +   FETCH get_lu_views BULK COLLECT INTO view_array_;
  4.2121 +   CLOSE get_lu_views;
  4.2122 +   IF view_array_.count > 0 THEN
  4.2123 +      FOR i IN Nvl(view_array_.first, 0)..Nvl(view_array_.last, -1) LOOP
  4.2124 +         view_list_ := view_list_||view_array_(i)||field_separator_;
  4.2125 +      END LOOP;
  4.2126 +   END IF;
  4.2127 +   RETURN view_list_;
  4.2128 +END Get_Logical_Unit_Views__;
  4.2129 +
  4.2130 +PROCEDURE Get_Logical_Unit_Packages__ (
  4.2131 +   lu_name_        IN  VARCHAR2,
  4.2132 +   package_list_   OUT VARCHAR2 )
  4.2133 +IS
  4.2134 +BEGIN
  4.2135 +   package_list_ := Get_Logical_Unit_Packages__(lu_name_);
  4.2136 +END Get_Logical_Unit_Packages__;
  4.2137 +
  4.2138 +
  4.2139 +FUNCTION Get_Logical_Unit_Packages__ (
  4.2140 +   lu_name_        IN  VARCHAR2 ) RETURN VARCHAR2
  4.2141 +IS
  4.2142 +   package_array_  object_array;
  4.2143 +   package_list_   VARCHAR2(4000);
  4.2144 +
  4.2145 +   CURSOR get_lu_packages IS
  4.2146 +      SELECT package_name
  4.2147 +      FROM dictionary_sys_package_tab
  4.2148 +      WHERE lu_name = lu_name_
  4.2149 +      ORDER BY package_index;
  4.2150 +BEGIN
  4.2151 +   OPEN  get_lu_packages;
  4.2152 +   FETCH get_lu_packages BULK COLLECT INTO package_array_;
  4.2153 +   CLOSE get_lu_packages;
  4.2154 +   IF package_array_.count > 0 THEN
  4.2155 +      FOR i IN Nvl(package_array_.first, 0)..Nvl(package_array_.last, -1) LOOP
  4.2156 +         package_list_ := package_list_||package_array_(i)||field_separator_;
  4.2157 +      END LOOP;
  4.2158 +   END IF;
  4.2159 +   RETURN package_list_;
  4.2160 +END Get_Logical_Unit_Packages__;
  4.2161 +
  4.2162 +PROCEDURE Get_Logical_Unit_Methods__ (
  4.2163 +   lu_name_        IN  VARCHAR2,
  4.2164 +   method_list_    OUT VARCHAR2,
  4.2165 +   all_methods_    IN  VARCHAR2 DEFAULT 'TRUE' )
  4.2166 +IS
  4.2167 +   method_array_  object_array;
  4.2168 +   package_array_ object_array;
  4.2169 +
  4.2170 +   CURSOR get_all_lu_methods IS
  4.2171 +      SELECT package_name, method_name
  4.2172 +      FROM dictionary_sys_method_tab
  4.2173 +      WHERE lu_name = lu_name_
  4.2174 +      ORDER BY package_name;
  4.2175 +
  4.2176 +   CURSOR get_lu_methods IS
  4.2177 +      SELECT package_name, method_name
  4.2178 +      FROM dictionary_sys_method_tab
  4.2179 +      WHERE lu_name = lu_name_
  4.2180 +      AND method_type = 'N'
  4.2181 +      ORDER BY package_name;
  4.2182 +
  4.2183 +BEGIN
  4.2184 +   IF all_methods_ = 'TRUE' THEN
  4.2185 +      OPEN get_all_lu_methods;
  4.2186 +      FETCH get_all_lu_methods BULK COLLECT INTO package_array_, method_array_;
  4.2187 +      CLOSE get_all_lu_methods;
  4.2188 +   ELSE
  4.2189 +      OPEN get_lu_methods;
  4.2190 +      FETCH get_lu_methods BULK COLLECT INTO package_array_, method_array_;
  4.2191 +      CLOSE get_lu_methods;
  4.2192 +   END IF;
  4.2193 +
  4.2194 +   IF method_array_.count > 0 THEN
  4.2195 +      FOR lu_methods IN Nvl(method_array_.first, 0)..Nvl(method_array_.last, -1) LOOP
  4.2196 +         method_list_ := method_list_||package_array_(lu_methods)||'.'||method_array_(lu_methods)||field_separator_;
  4.2197 +      END LOOP;
  4.2198 +   END IF;
  4.2199 +END Get_Logical_Unit_Methods__;
  4.2200 +
  4.2201 +PROCEDURE Get_LU_Method_Types__ (
  4.2202 +   lu_name_        IN  VARCHAR2,
  4.2203 +   method_list_    OUT VARCHAR2 )
  4.2204 +IS
  4.2205 +   method_array_  object_array;
  4.2206 +   package_array_ object_array;
  4.2207 +   type_array_    object_array;
  4.2208 +
  4.2209 +   CURSOR get_all_lu_methods IS
  4.2210 +      SELECT package_name, method_name, method_type
  4.2211 +      FROM dictionary_sys_method_tab
  4.2212 +      WHERE lu_name = lu_name_
  4.2213 +      ORDER BY package_name;
  4.2214 +
  4.2215 +BEGIN
  4.2216 +   OPEN get_all_lu_methods;
  4.2217 +   FETCH get_all_lu_methods BULK COLLECT INTO package_array_, method_array_, type_array_;
  4.2218 +   CLOSE get_all_lu_methods;
  4.2219 +
  4.2220 +   IF method_array_.count > 0 THEN
  4.2221 +      FOR lu_methods IN Nvl(method_array_.first, 0)..Nvl(method_array_.last, -1) LOOP
  4.2222 +         method_list_ := method_list_||package_array_(lu_methods)||'.'||method_array_(lu_methods)||field_separator_||type_array_(lu_methods)||record_separator_;
  4.2223 +      END LOOP;
  4.2224 +   END IF;
  4.2225 +END Get_LU_Method_Types__;
  4.2226 +
  4.2227 +FUNCTION Get_State_Encode_Method__ (
  4.2228 +   view_name_      IN  VARCHAR2 ) RETURN VARCHAR2
  4.2229 +IS
  4.2230 +BEGIN
  4.2231 +   RETURN(Check_Method_From_View___(view_name_, 'FINITE_STATE_ENCODE__'));
  4.2232 +END Get_State_Encode_Method__;
  4.2233 +
  4.2234 +FUNCTION Get_State_Enumerate_Method__ (
  4.2235 +   view_name_      IN  VARCHAR2 ) RETURN VARCHAR2
  4.2236 +IS
  4.2237 +BEGIN
  4.2238 +   RETURN(Check_Method_From_View___(view_name_, 'ENUMERATE_STATES__'));
  4.2239 +END Get_State_Enumerate_Method__;
  4.2240 +
  4.2241 +-----------------------------------------------------------------------------
  4.2242 +-------------------- SERVICE SPECIFIC PROTECTED METHODS ---------------------
  4.2243 +-----------------------------------------------------------------------------
  4.2244 +
  4.2245 +-----------------------------------------------------------------------------
  4.2246 +-- Naming conversions for client versus database object names
  4.2247 +-----------------------------------------------------------------------------
  4.2248 +
  4.2249 +FUNCTION Dbnametoclientname_ (
  4.2250 +   db_name_ IN VARCHAR2 ) RETURN VARCHAR2
  4.2251 +IS
  4.2252 +   cnt_  NUMBER;
  4.2253 +BEGIN
  4.2254 +   -- Find number of trailing underscores
  4.2255 +   cnt_ := length(db_name_) - length(rtrim(db_name_,'_'));
  4.2256 +   -- Return client name with leading underscores
  4.2257 +   IF (cnt_ = 1) THEN
  4.2258 +      RETURN('_'||replace(initcap(db_name_),'_',''));
  4.2259 +   ELSIF (cnt_ = 2) THEN
  4.2260 +      RETURN('__'||replace(initcap(db_name_),'_',''));
  4.2261 +   END IF;
  4.2262 +   RETURN(replace(initcap(db_name_),'_',''));
  4.2263 +EXCEPTION
  4.2264 +   WHEN OTHERS THEN
  4.2265 +      RETURN(NULL);
  4.2266 +END DbNameToClientName_;
  4.2267 +
  4.2268 +
  4.2269 +FUNCTION Clientnametodbname_ (
  4.2270 +   client_name_ IN VARCHAR2 ) RETURN VARCHAR2
  4.2271 +IS
  4.2272 +   cnt_   NUMBER;
  4.2273 +   index_ NUMBER;
  4.2274 +   temp_  VARCHAR2(30);
  4.2275 +   char_  VARCHAR2(1);
  4.2276 +BEGIN
  4.2277 +   -- Find number of leading underscores
  4.2278 +   cnt_ := length(client_name_) - length(ltrim(client_name_,'_'));
  4.2279 +   -- Add intermediate underscores where needed
  4.2280 +   FOR index_ IN cnt_+1..length(client_name_) LOOP
  4.2281 +      char_ := substr(client_name_,index_,1);
  4.2282 +      IF (char_ between 'A' and 'Z')  AND (temp_ IS NOT NULL) THEN
  4.2283 +         temp_ := temp_||'_'||char_;
  4.2284 +      ELSE
  4.2285 +         temp_ := temp_||char_;
  4.2286 +      END IF;
  4.2287 +   END LOOP;
  4.2288 +   -- Return database name with trailing underscores
  4.2289 +   IF (cnt_ = 1) THEN
  4.2290 +      RETURN(ltrim(upper(temp_),'_')||'__');
  4.2291 +   ELSIF (cnt_ = 2) THEN
  4.2292 +      RETURN(ltrim(upper(temp_),'_')||'__');
  4.2293 +   END IF;
  4.2294 +   RETURN(ltrim(upper(temp_),'_'));
  4.2295 +EXCEPTION
  4.2296 +   WHEN OTHERS THEN
  4.2297 +      RETURN(NULL);
  4.2298 +END ClientNameToDbName_;
  4.2299 +
  4.2300 +-----------------------------------------------------------------------------
  4.2301 +-- Comment decoding routines for LU-dictionary
  4.2302 +-----------------------------------------------------------------------------
  4.2303 +
  4.2304 +FUNCTION Comment_Value_ (
  4.2305 +   name_    IN VARCHAR2,
  4.2306 +   comment_ IN VARCHAR2 ) RETURN VARCHAR2
  4.2307 +IS
  4.2308 +   nlen_ NUMBER;
  4.2309 +   from_ NUMBER;
  4.2310 +   to_   NUMBER;
  4.2311 +BEGIN
  4.2312 +   -- Find keyword name position within comment
  4.2313 +   nlen_ := length(name_);
  4.2314 +   -- New fix to support ambigous names in report definitions in IFS/Info Services
  4.2315 +   from_ := instr(upper('^'||comment_), '^'||name_||'=');
  4.2316 +   -- If found, return value from comment
  4.2317 +   IF (from_ > 0) THEN
  4.2318 +      to_ := instr(comment_, '^', from_);
  4.2319 +      IF ( to_ = 0 ) THEN
  4.2320 +        to_ := length(comment_) + 1;
  4.2321 +      END IF;
  4.2322 +      RETURN(substr(comment_, from_+nlen_+1, to_-from_-nlen_-1));
  4.2323 +   -- If not found, return null value
  4.2324 +   ELSE
  4.2325 +      RETURN(NULL);
  4.2326 +   END IF;
  4.2327 +END Comment_Value_;
  4.2328 +
  4.2329 +-----------------------------------------------------------------------------
  4.2330 +-- Prompt fetching routines, mainly used for localization
  4.2331 +-----------------------------------------------------------------------------
  4.2332 +
  4.2333 +FUNCTION Get_View_Prompt_ (
  4.2334 +   view_name_        IN VARCHAR2 ) RETURN VARCHAR2
  4.2335 +IS
  4.2336 +   prompt_ VARCHAR2(200);
  4.2337 +   CURSOR get_prompt IS
  4.2338 +      SELECT view_prompt
  4.2339 +      FROM   dictionary_sys_view_tab
  4.2340 +      WHERE  view_name = view_name_;
  4.2341 +BEGIN
  4.2342 +   OPEN get_prompt;
  4.2343 +   FETCH get_prompt INTO prompt_;
  4.2344 +   CLOSE get_prompt;
  4.2345 +   RETURN prompt_;
  4.2346 +END Get_View_Prompt_;
  4.2347 +
  4.2348 +FUNCTION Get_Lu_Prompt_ (
  4.2349 +   lu_name_        IN VARCHAR2 ) RETURN VARCHAR2
  4.2350 +IS
  4.2351 +   prompt_              VARCHAR2(200);
  4.2352 +   CURSOR get_prompt IS
  4.2353 +      SELECT lu_prompt
  4.2354 +      FROM   dictionary_sys_tab
  4.2355 +      WHERE  lu_name = lu_name_;
  4.2356 +BEGIN
  4.2357 +   -- Check that inparameters make sense before proceeding.
  4.2358 +   IF lu_name_ IS NULL THEN
  4.2359 +      RETURN NULL;
  4.2360 +   END IF;
  4.2361 +
  4.2362 +   OPEN get_prompt;
  4.2363 +   FETCH get_prompt INTO prompt_;
  4.2364 +   CLOSE get_prompt;
  4.2365 +   RETURN prompt_;
  4.2366 +END Get_Lu_Prompt_;
  4.2367 +
  4.2368 +FUNCTION Get_Item_Prompt_ (
  4.2369 +   lu_name_        IN VARCHAR2,
  4.2370 +   view_name_      IN VARCHAR2,
  4.2371 +   item_name_      IN VARCHAR2 ) RETURN VARCHAR2
  4.2372 +IS
  4.2373 +   view_   VARCHAR2(30) := view_name_;
  4.2374 +   prompt_ dictionary_sys_view_column_tab.column_prompt%TYPE;
  4.2375 +
  4.2376 +   CURSOR get_prompt IS
  4.2377 +      SELECT column_prompt
  4.2378 +      FROM   dictionary_sys_view_column_tab
  4.2379 +      WHERE lu_name = lu_name_
  4.2380 +      AND view_name = view_
  4.2381 +      AND column_name = item_name_;
  4.2382 +BEGIN
  4.2383 +   IF (view_ IS NULL) THEN
  4.2384 +      view_ := ClientNameToDbName_(lu_name_);
  4.2385 +   END IF;
  4.2386 +   OPEN get_prompt;
  4.2387 +   FETCH get_prompt INTO prompt_;
  4.2388 +   CLOSE get_prompt;
  4.2389 +   RETURN prompt_;
  4.2390 +END Get_Item_Prompt_;
  4.2391 +
  4.2392 +-----------------------------------------------------------------------------
  4.2393 +-- Property fetching routines for run-time use (protected)
  4.2394 +-----------------------------------------------------------------------------
  4.2395 +
  4.2396 +PROCEDURE Get_Logical_Unit_Keys_ (
  4.2397 +   name_list_  OUT VARCHAR2,
  4.2398 +   value_list_ OUT VARCHAR2,
  4.2399 +   lu_name_    IN  VARCHAR2,
  4.2400 +   objid_      IN  VARCHAR2 DEFAULT NULL )
  4.2401 +IS
  4.2402 +   dummy_     NUMBER;
  4.2403 +   stmt_      VARCHAR2(2000);
  4.2404 +   view_      VARCHAR2(30);
  4.2405 +   temp_list_ VARCHAR2(32000);
  4.2406 +
  4.2407 +   -- To check that the suggested base view actually contain an objid...
  4.2408 +   CURSOR find_objid (lu_name_ IN VARCHAR2, view_name_ IN VARCHAR2) IS
  4.2409 +      SELECT 1
  4.2410 +      FROM   dictionary_sys_view_column_tab
  4.2411 +      WHERE  lu_name = lu_name_
  4.2412 +      AND    view_name = view_name_
  4.2413 +      AND    column_name = 'OBJID';
  4.2414 +
  4.2415 +   CURSOR get_keys (view_name_ IN VARCHAR2) IS
  4.2416 +      SELECT column_name
  4.2417 +      FROM dictionary_sys_view_column_tab
  4.2418 +      WHERE lu_name = lu_name_
  4.2419 +      AND view_name = view_name_
  4.2420 +      AND type_flag IN ('P','K')
  4.2421 +      ORDER BY column_index;
  4.2422 +BEGIN
  4.2423 +   General_SYS.Init_Method(service_, '&PKG', 'Get_Logical_Unit_Keys_');
  4.2424 +
  4.2425 +   name_list_  := NULL;
  4.2426 +   value_list_ := NULL;
  4.2427 +   -- Fetch the view name from LU-dictionary
  4.2428 +   view_ := Get_Base_View(lu_name_);
  4.2429 +   -- Verify that this view contains an objid
  4.2430 +   OPEN find_objid(lu_name_, view_);
  4.2431 +   FETCH find_objid INTO dummy_;
  4.2432 +   IF find_objid%FOUND THEN
  4.2433 +      CLOSE find_objid;
  4.2434 +      -- View found, fetch the keys!
  4.2435 +      FOR keyrec IN get_keys(view_) LOOP
  4.2436 +         temp_list_ := temp_list_||keyrec.column_name||text_separator_;
  4.2437 +      END LOOP;
  4.2438 +      name_list_ := temp_list_;
  4.2439 +      IF (objid_ IS NOT NULL) THEN
  4.2440 +         -- Fetch instance key information by using dynamic SQL
  4.2441 +         BEGIN
  4.2442 +            temp_list_ := substr(temp_list_, 1, length(temp_list_) - 1);
  4.2443 +            temp_list_ := REPLACE(temp_list_, text_separator_, '||''^''||')||'||''^''';
  4.2444 +            stmt_ := 'SELECT '|| temp_list_ ||' FROM '||view_||' WHERE OBJID = :objid_';
  4.2445 +            Assert_SYS.Assert_Is_View(view_);
  4.2446 +            -- ifs_assert_safe utgulk 20060105
  4.2447 +            EXECUTE IMMEDIATE stmt_ INTO value_list_ USING objid_;
  4.2448 +        EXCEPTION
  4.2449 +           WHEN OTHERS THEN
  4.2450 +              value_list_ := NULL;
  4.2451 +         END;
  4.2452 +      END IF;
  4.2453 +   ELSE
  4.2454 +      CLOSE find_objid;
  4.2455 +   END IF;
  4.2456 +END Get_Logical_Unit_Keys_;
  4.2457 +
  4.2458 +-- Could not completely rely on cached information, since table information is not extracted to the cache
  4.2459 +PROCEDURE Get_Logical_Unit_Tables_ (
  4.2460 +   table_list_ OUT VARCHAR2,
  4.2461 +   lu_name_    IN  VARCHAR2 )
  4.2462 +IS
  4.2463 +   view_name_ VARCHAR2(30);
  4.2464 +   app_owner_ VARCHAR2(30);
  4.2465 +   CURSOR view_tables IS
  4.2466 +      SELECT nvl(referenced_name,'') name
  4.2467 +         FROM   user_dependencies
  4.2468 +         WHERE  referenced_owner = app_owner_
  4.2469 +         AND    referenced_type = 'TABLE'
  4.2470 +         AND    name = view_name_
  4.2471 +         AND    type = 'VIEW'
  4.2472 +         UNION
  4.2473 +         SELECT nvl(referenced_name,'') name
  4.2474 +         FROM   user_dependencies
  4.2475 +         WHERE  referenced_owner = app_owner_
  4.2476 +         AND    referenced_type = 'TABLE'
  4.2477 +         AND    name = view_name_||'_API'
  4.2478 +         AND    type = 'PACKAGE BODY'
  4.2479 +         UNION
  4.2480 +         SELECT nvl(table_name,'') name
  4.2481 +         FROM user_tables
  4.2482 +         WHERE table_name = view_name_||'_TAB';
  4.2483 +BEGIN
  4.2484 +   -- Check that inparameters make sense before proceeding.
  4.2485 +   IF lu_name_ IS NULL THEN
  4.2486 +      RETURN;
  4.2487 +   END IF;
  4.2488 +
  4.2489 +   app_owner_ := Fnd_Session_API.Get_App_Owner;
  4.2490 +   view_name_ := Get_Base_View(lu_name_);
  4.2491 +   FOR t IN view_tables LOOP
  4.2492 +      table_list_ := table_list_||t.name||field_separator_;
  4.2493 +   END LOOP;
  4.2494 +END Get_Logical_Unit_Tables_;
  4.2495 +
  4.2496 +-- Introduced new method and implemented to use dictionary cache.
  4.2497 +PROCEDURE Enum_Modules_ (
  4.2498 +   module_list_ OUT VARCHAR2 )
  4.2499 +IS
  4.2500 +   CURSOR modules IS
  4.2501 +      SELECT DISTINCT module
  4.2502 +      FROM   dictionary_sys_tab
  4.2503 +      ORDER BY module;
  4.2504 +BEGIN
  4.2505 +   FOR module IN modules LOOP
  4.2506 +      module_list_ := module_list_||module.module||field_separator_;
  4.2507 +   END LOOP;
  4.2508 +END Enum_Modules_;
  4.2509 +
  4.2510 +PROCEDURE Enum_Module_Names_ (
  4.2511 +   module_list_ OUT VARCHAR2,
  4.2512 +   name_list_   OUT VARCHAR2 )
  4.2513 +IS
  4.2514 +   module_array_  object_array;
  4.2515 +   name_array_    lu_struct_type;
  4.2516 +
  4.2517 +   CURSOR modules IS
  4.2518 +      SELECT module, name
  4.2519 +      FROM   module_tab
  4.2520 +      ORDER BY name;
  4.2521 +BEGIN
  4.2522 +   OPEN  modules;
  4.2523 +   FETCH modules BULK COLLECT INTO module_array_, name_array_;
  4.2524 +   CLOSE modules;
  4.2525 +   IF module_array_.count > 0 THEN
  4.2526 +      FOR i IN Nvl(module_array_.first, 0)..Nvl(module_array_.last, -1) LOOP
  4.2527 +         module_list_ := module_list_||module_array_(i)||field_separator_;
  4.2528 +         name_list_   := name_list_||name_array_(i)||field_separator_;
  4.2529 +      END LOOP;
  4.2530 +   END IF;
  4.2531 +END Enum_Module_Names_;
  4.2532 +
  4.2533 +-- Modified implementation to use dictionary cache. Designtime version moved to Design_SYS
  4.2534 +PROCEDURE Enum_Module_All_Logical_Units_ (
  4.2535 +   lu_list_ OUT VARCHAR2,
  4.2536 +   module_  IN  VARCHAR2 )
  4.2537 +IS
  4.2538 +   lu_array_  object_array;
  4.2539 +
  4.2540 +   CURSOR units IS
  4.2541 +      SELECT lu_name
  4.2542 +      FROM   dictionary_sys_tab
  4.2543 +      WHERE  module = module_
  4.2544 +      AND lu_type IN ('L', 'S')
  4.2545 +      ORDER BY lu_name;
  4.2546 +BEGIN
  4.2547 +   OPEN  units;
  4.2548 +   FETCH units BULK COLLECT INTO lu_array_;
  4.2549 +   CLOSE units;
  4.2550 +   IF lu_array_.count > 0 THEN
  4.2551 +      FOR i IN Nvl(lu_array_.first, 0)..Nvl(lu_array_.last, -1) LOOP
  4.2552 +         lu_list_ := lu_list_||lu_array_(i)||field_separator_;
  4.2553 +      END LOOP;
  4.2554 +   END IF;
  4.2555 +END Enum_Module_All_Logical_Units_;
  4.2556 +
  4.2557 +-- Modified implementation to use dictionary cache. Designtime version moved to Design_SYS
  4.2558 +PROCEDURE Enum_Module_Logical_Units_ (
  4.2559 +   lu_list_ OUT VARCHAR2,
  4.2560 +   module_  IN  VARCHAR2 )
  4.2561 +IS
  4.2562 +   lu_array_  object_array;
  4.2563 +
  4.2564 +   CURSOR units IS
  4.2565 +      SELECT lu_name
  4.2566 +      FROM   dictionary_sys_tab
  4.2567 +      WHERE  module = module_
  4.2568 +      AND lu_type = 'L'
  4.2569 +      ORDER BY lu_name;
  4.2570 +BEGIN
  4.2571 +   OPEN  units;
  4.2572 +   FETCH units BULK COLLECT INTO lu_array_;
  4.2573 +   CLOSE units;
  4.2574 +   IF lu_array_.count > 0 THEN
  4.2575 +      FOR i IN Nvl(lu_array_.first, 0)..Nvl(lu_array_.last, -1) LOOP
  4.2576 +         lu_list_ := lu_list_||lu_array_(i)||field_separator_;
  4.2577 +      END LOOP;
  4.2578 +   END IF;
  4.2579 +END Enum_Module_Logical_Units_;
  4.2580 +
  4.2581 +-- Modified implementation using dictionary cache.
  4.2582 +PROCEDURE Enum_Module_System_Services_ (
  4.2583 +   sys_list_ OUT VARCHAR2,
  4.2584 +   module_   IN  VARCHAR2 )
  4.2585 +IS
  4.2586 +   CURSOR units IS
  4.2587 +      SELECT lu_name
  4.2588 +      FROM   dictionary_sys_tab
  4.2589 +      WHERE  module = module_
  4.2590 +      AND lu_type = 'S'
  4.2591 +      ORDER BY lu_name;
  4.2592 +BEGIN
  4.2593 +   FOR unit IN units LOOP
  4.2594 +      sys_list_ := sys_list_||unit.lu_name||field_separator_;
  4.2595 +   END LOOP;
  4.2596 +END Enum_Module_System_Services_;
  4.2597 +
  4.2598 +-----------------------------------------------------------------------------
  4.2599 +-- Runtime performance refreshment routines
  4.2600 +-----------------------------------------------------------------------------
  4.2601 +
  4.2602 +-- Obsolete!
  4.2603 +PROCEDURE Activate_Language_Refresh_
  4.2604 +IS
  4.2605 +BEGIN
  4.2606 +   General_SYS.Init_Method(service_, '&PKG', 'Activate_Language_Refresh_');
  4.2607 +   Error_SYS.Appl_General(service_, 'LANGERR: The method Activate_Language_Refresh_ (Change Server Language) is obsolete. Please log on again to change language.');
  4.2608 +END Activate_Language_Refresh_;
  4.2609 +
  4.2610 +PROCEDURE Rebuild_Dictionary_Storage_ (
  4.2611 +   dummy_        IN NUMBER,
  4.2612 +   refresh_mode_ IN VARCHAR2 DEFAULT 'PARTIAL' )
  4.2613 +IS
  4.2614 +   error_text_ CLOB;
  4.2615 +BEGIN
  4.2616 +   error_text_ := Rebuild_Dictionary_Storage___(dummy_, refresh_mode_, FALSE);
  4.2617 +END Rebuild_Dictionary_Storage_;
  4.2618 +
  4.2619 +PROCEDURE Rebuild_Dictionary_Storage_ (
  4.2620 +   error_text_   IN OUT NOCOPY CLOB,
  4.2621 +   dummy_        IN NUMBER,
  4.2622 +   refresh_mode_ IN VARCHAR2 DEFAULT 'PARTIAL' )
  4.2623 +IS
  4.2624 +BEGIN
  4.2625 +   error_text_ := Rebuild_Dictionary_Storage___(dummy_, refresh_mode_, TRUE);
  4.2626 +END Rebuild_Dictionary_Storage_;
  4.2627 +
  4.2628 +PROCEDURE Check_Dictionary_Storage_ (
  4.2629 +   rebuild_needed_ OUT NUMBER )
  4.2630 +IS
  4.2631 +   dummy_       NUMBER;
  4.2632 +   last_update_ DATE;
  4.2633 +
  4.2634 +   CURSOR get_last_update IS
  4.2635 +      SELECT max(rowversion)
  4.2636 +      FROM dictionary_sys_tab;
  4.2637 +
  4.2638 +   CURSOR get_objects(last_cache_update_ IN DATE) IS
  4.2639 +      SELECT 1
  4.2640 +      FROM user_objects
  4.2641 +      WHERE (object_type LIKE 'PACKAGE%'
  4.2642 +         AND timestamp > to_char(last_cache_update_, 'RRRR-MM-DD:HH24:MI:SS')
  4.2643 +         AND substr(object_name, -4) IN ('_API', '_RPI', '_SYS'))
  4.2644 +      OR    (object_type IN ('VIEW')
  4.2645 +         AND last_ddl_time > last_cache_update_);
  4.2646 +BEGIN
  4.2647 +   OPEN get_last_update;
  4.2648 +   FETCH get_last_update INTO last_update_;
  4.2649 +   IF (last_update_ IS NULL) THEN
  4.2650 +      rebuild_needed_ := 1;               -- Return TRUE
  4.2651 +   ELSE
  4.2652 +      OPEN get_objects(last_update_);
  4.2653 +      FETCH get_objects INTO dummy_;
  4.2654 +      IF (get_objects%NOTFOUND) THEN
  4.2655 +         rebuild_needed_ := 0;            -- Return FALSE
  4.2656 +      ELSE
  4.2657 +         rebuild_needed_ := 1;            -- Return TRUE
  4.2658 +      END IF;
  4.2659 +      CLOSE get_objects;
  4.2660 +   END IF;
  4.2661 +   CLOSE get_last_update;
  4.2662 +END Check_Dictionary_Storage_;
  4.2663 +
  4.2664 +-----------------------------------------------------------------------------
  4.2665 +-------------------- SERVICE SPECIFIC PUBLIC METHODS ------------------------
  4.2666 +-----------------------------------------------------------------------------
  4.2667 +
  4.2668 +-----------------------------------------------------------------------------
  4.2669 +-- Public runtime methods for dictionary information support
  4.2670 +-----------------------------------------------------------------------------
  4.2671 +
  4.2672 +FUNCTION Get_Base_View (
  4.2673 +   lu_name_        IN VARCHAR2 ) RETURN VARCHAR2
  4.2674 +IS
  4.2675 +   temp_ VARCHAR2(30);
  4.2676 +   CURSOR get_view IS
  4.2677 +      SELECT view_name
  4.2678 +      FROM   dictionary_sys_view_tab
  4.2679 +      WHERE lu_name = lu_name_
  4.2680 +      AND view_type = 'B';
  4.2681 +BEGIN
  4.2682 +   OPEN get_view;
  4.2683 +   FETCH get_view INTO temp_;
  4.2684 +   CLOSE get_view;
  4.2685 +   RETURN temp_;
  4.2686 +END Get_Base_View;
  4.2687 +
  4.2688 +FUNCTION Get_Component (
  4.2689 +   object_name_ IN VARCHAR2,
  4.2690 +   object_type_ IN VARCHAR2 ) RETURN VARCHAR2
  4.2691 +IS
  4.2692 +   component_ VARCHAR2(6);
  4.2693 +   CURSOR get_pkg_component IS
  4.2694 +      SELECT d.module
  4.2695 +      FROM   dictionary_sys_tab d, dictionary_sys_package_tab p
  4.2696 +      WHERE  p.package_name = upper(object_name_)
  4.2697 +      AND    p.lu_name = d.lu_name;
  4.2698 +
  4.2699 +   CURSOR get_view_component IS
  4.2700 +      SELECT d.module
  4.2701 +      FROM   dictionary_sys_tab d, dictionary_sys_view_tab v
  4.2702 +      WHERE  v.view_name = upper(object_name_)
  4.2703 +      AND    v.lu_name = d.lu_name;
  4.2704 +BEGIN
  4.2705 +   IF upper(object_type_) = 'PACKAGE' THEN
  4.2706 +      OPEN get_pkg_component;
  4.2707 +      FETCH get_pkg_component INTO component_;
  4.2708 +      CLOSE get_pkg_component;
  4.2709 +   ELSIF upper(object_type_) = 'VIEW' THEN
  4.2710 +      OPEN get_view_component;
  4.2711 +      FETCH get_view_component INTO component_;
  4.2712 +      CLOSE get_view_component;
  4.2713 +   ELSE
  4.2714 +      component_ := NULL;
  4.2715 +   END IF;
  4.2716 +   RETURN component_;
  4.2717 +END Get_Component;
  4.2718 +
  4.2719 +FUNCTION Get_Logical_Unit (
  4.2720 +   object_name_ IN VARCHAR2,
  4.2721 +   object_type_ IN VARCHAR2 ) RETURN VARCHAR2
  4.2722 +IS
  4.2723 +   lu_name_ VARCHAR2(30);
  4.2724 +   CURSOR get_pkg_lu IS
  4.2725 +      SELECT lu_name
  4.2726 +      FROM   dictionary_sys_package_tab
  4.2727 +      WHERE  package_name = upper(object_name_);
  4.2728 +
  4.2729 +   CURSOR get_view_lu IS
  4.2730 +      SELECT lu_name
  4.2731 +      FROM   dictionary_sys_view_tab
  4.2732 +      WHERE  view_name = upper(object_name_);
  4.2733 +BEGIN
  4.2734 +   IF upper(object_type_) = 'PACKAGE' THEN
  4.2735 +      OPEN get_pkg_lu;
  4.2736 +      FETCH get_pkg_lu INTO lu_name_;
  4.2737 +      CLOSE get_pkg_lu;
  4.2738 +   ELSIF upper(object_type_) = 'VIEW' THEN
  4.2739 +      OPEN get_view_lu;
  4.2740 +      FETCH get_view_lu INTO lu_name_;
  4.2741 +      CLOSE get_view_lu;
  4.2742 +   ELSE
  4.2743 +      lu_name_ := NULL;
  4.2744 +   END IF;
  4.2745 +   RETURN lu_name_;
  4.2746 +END Get_Logical_Unit;
  4.2747 +
  4.2748 +FUNCTION Get_Logical_Unit_Module (
  4.2749 +   lu_name_ IN VARCHAR2 ) RETURN VARCHAR2
  4.2750 +IS
  4.2751 +   module_ VARCHAR2(6);
  4.2752 +   CURSOR get_module IS
  4.2753 +      SELECT module
  4.2754 +      FROM   dictionary_sys_lu
  4.2755 +      WHERE  lu_name = lu_name_;
  4.2756 +BEGIN
  4.2757 +   OPEN  get_module;
  4.2758 +   FETCH get_module INTO module_;
  4.2759 +   CLOSE get_module;
  4.2760 +   RETURN module_;
  4.2761 +END Get_Logical_Unit_Module;
  4.2762 +
  4.2763 +FUNCTION Package_Is_Installed (
  4.2764 +   package_name_ IN VARCHAR2 ) RETURN BOOLEAN
  4.2765 +IS
  4.2766 +   dummy_ NUMBER;
  4.2767 +   CURSOR get_pkg IS
  4.2768 +      SELECT 1
  4.2769 +      FROM   dictionary_sys_package_tab
  4.2770 +      WHERE  package_name = upper(package_name_);
  4.2771 +BEGIN
  4.2772 +   -- Reroute to Database_SYS during installation
  4.2773 +   IF installation_ THEN
  4.2774 +      RETURN(Database_SYS.Package_Exist(package_name_));
  4.2775 +   ELSE
  4.2776 +      OPEN  get_pkg;
  4.2777 +      FETCH get_pkg INTO dummy_;
  4.2778 +      IF (get_pkg%FOUND) THEN
  4.2779 +         CLOSE get_pkg;
  4.2780 +         RETURN TRUE;
  4.2781 +      ELSE
  4.2782 +         CLOSE get_pkg;
  4.2783 +         RETURN FALSE;
  4.2784 +      END IF;
  4.2785 +   END IF;
  4.2786 +END Package_Is_Installed;
  4.2787 +
  4.2788 +FUNCTION Method_Is_Installed (
  4.2789 +   package_name_ IN VARCHAR2,
  4.2790 +   method_name_  IN VARCHAR2 ) RETURN BOOLEAN
  4.2791 +IS
  4.2792 +   dummy_ NUMBER;
  4.2793 +   CURSOR get_method IS
  4.2794 +      SELECT 1
  4.2795 +      FROM   dictionary_sys_method_tab
  4.2796 +      WHERE  package_name = upper(package_name_)
  4.2797 +      AND    method_name  = initcap(method_name_);
  4.2798 +BEGIN
  4.2799 +   -- Reroute to Database_SYS during installation
  4.2800 +   IF installation_ THEN
  4.2801 +      RETURN(Database_SYS.Method_Exist(package_name_, method_name_));
  4.2802 +   ELSE
  4.2803 +      OPEN  get_method;
  4.2804 +      FETCH get_method INTO dummy_;
  4.2805 +      IF (get_method%FOUND) THEN
  4.2806 +         CLOSE get_method;
  4.2807 +         RETURN TRUE;
  4.2808 +      ELSE
  4.2809 +         CLOSE get_method;
  4.2810 +         RETURN FALSE;
  4.2811 +      END IF;
  4.2812 +   END IF;
  4.2813 +END Method_Is_Installed;
  4.2814 +
  4.2815 +FUNCTION View_Is_Installed (
  4.2816 +   view_name_ IN VARCHAR2 ) RETURN BOOLEAN
  4.2817 +IS
  4.2818 +   dummy_ NUMBER;
  4.2819 +   CURSOR get_view IS
  4.2820 +      SELECT 1
  4.2821 +      FROM   dictionary_sys_view_tab
  4.2822 +      WHERE  view_name = upper(view_name_);
  4.2823 +BEGIN
  4.2824 +   -- Reroute to Database_SYS during installation
  4.2825 +   IF installation_ THEN
  4.2826 +      RETURN(Database_SYS.View_Exist(view_name_));
  4.2827 +   ELSE
  4.2828 +      OPEN  get_view;
  4.2829 +      FETCH get_view INTO dummy_;
  4.2830 +      IF (get_view%FOUND) THEN
  4.2831 +         CLOSE get_view;
  4.2832 +         RETURN TRUE;
  4.2833 +      ELSE
  4.2834 +         CLOSE get_view;
  4.2835 +         RETURN FALSE;
  4.2836 +      END IF;
  4.2837 +   END IF;
  4.2838 +END View_Is_Installed;
  4.2839 +
  4.2840 +FUNCTION Logical_Unit_Is_Installed (
  4.2841 +   lu_name_ IN VARCHAR2 ) RETURN BOOLEAN
  4.2842 +IS
  4.2843 +   dummy_          NUMBER;
  4.2844 +   CURSOR get_lu IS
  4.2845 +      SELECT 1
  4.2846 +      FROM   dictionary_sys_tab
  4.2847 +      WHERE  lu_name = lu_name_;
  4.2848 +BEGIN
  4.2849 +   -- Reroute to Database_SYS during installation
  4.2850 +   IF installation_ THEN
  4.2851 +      RETURN(Database_SYS.Package_Exist(Clientnametodbname_(lu_name_)||'_API'));
  4.2852 +   ELSE
  4.2853 +      OPEN  get_lu;
  4.2854 +      FETCH get_lu INTO dummy_;
  4.2855 +      IF (get_lu%FOUND) THEN
  4.2856 +         CLOSE get_lu;
  4.2857 +         RETURN TRUE;
  4.2858 +      ELSE
  4.2859 +         CLOSE get_lu;
  4.2860 +         RETURN FALSE;
  4.2861 +      END IF;
  4.2862 +   END IF;
  4.2863 +END Logical_Unit_Is_Installed;
  4.2864 +
  4.2865 +FUNCTION Component_Is_Installed (
  4.2866 +   component_ IN VARCHAR2,
  4.2867 +   version_   IN VARCHAR2 DEFAULT NULL ) RETURN BOOLEAN
  4.2868 +IS
  4.2869 +   dummy_ NUMBER;
  4.2870 +   CURSOR get_component IS
  4.2871 +      SELECT 1
  4.2872 +      FROM   module
  4.2873 +      WHERE  module = upper(component_)
  4.2874 +      AND    upper(version) LIKE nvl(upper(version_), '%');
  4.2875 +BEGIN
  4.2876 +   OPEN  get_component;
  4.2877 +   FETCH get_component INTO dummy_;
  4.2878 +   IF (get_component%FOUND) THEN
  4.2879 +      CLOSE get_component;
  4.2880 +      RETURN TRUE;
  4.2881 +   ELSE
  4.2882 +      CLOSE get_component;
  4.2883 +      RETURN FALSE;
  4.2884 +   END IF;
  4.2885 +END Component_Is_Installed;
  4.2886 +
  4.2887 +FUNCTION Package_Is_Installed_Num (
  4.2888 +   package_name_ IN VARCHAR2 ) RETURN NUMBER
  4.2889 +IS
  4.2890 +BEGIN
  4.2891 +   IF Package_Is_Installed(package_name_) THEN
  4.2892 +      RETURN (1);
  4.2893 +   ELSE
  4.2894 +      RETURN (0);
  4.2895 +   END IF;
  4.2896 +END Package_Is_Installed_Num;
  4.2897 +
  4.2898 +FUNCTION Method_Is_Installed_Num (
  4.2899 +   package_name_ IN VARCHAR2,
  4.2900 +   method_name_  IN VARCHAR2 ) RETURN NUMBER
  4.2901 +IS
  4.2902 +BEGIN
  4.2903 +   IF Method_Is_Installed(package_name_, method_name_) THEN
  4.2904 +      RETURN (1);
  4.2905 +   ELSE
  4.2906 +      RETURN (0);
  4.2907 +   END IF;
  4.2908 +END Method_Is_Installed_Num;
  4.2909 +
  4.2910 +FUNCTION View_Is_Installed_Num (
  4.2911 +   view_name_ IN VARCHAR2 ) RETURN NUMBER
  4.2912 +IS
  4.2913 +BEGIN
  4.2914 +   IF View_Is_Installed(view_name_) THEN
  4.2915 +      RETURN (1);
  4.2916 +   ELSE
  4.2917 +      RETURN (0);
  4.2918 +   END IF;
  4.2919 +END View_Is_Installed_Num;
  4.2920 +
  4.2921 +FUNCTION Logical_Unit_Is_Installed_Num (
  4.2922 +   lu_name_ IN VARCHAR2 ) RETURN NUMBER
  4.2923 +IS
  4.2924 +BEGIN
  4.2925 +   IF Logical_Unit_Is_Installed(lu_name_) THEN
  4.2926 +      RETURN (1);
  4.2927 +   ELSE
  4.2928 +      RETURN (0);
  4.2929 +   END IF;
  4.2930 +END Logical_Unit_Is_Installed_Num;
  4.2931 +
  4.2932 +FUNCTION Component_Is_Installed_Num (
  4.2933 +   component_ IN VARCHAR2,
  4.2934 +   version_   IN VARCHAR2 DEFAULT NULL ) RETURN NUMBER
  4.2935 +IS
  4.2936 +BEGIN
  4.2937 +   IF Component_Is_Installed(component_, version_) THEN
  4.2938 +      RETURN (1);
  4.2939 +   ELSE
  4.2940 +      RETURN (0);
  4.2941 +   END IF;
  4.2942 +END Component_Is_Installed_Num;
  4.2943 +
  4.2944 +FUNCTION Get_No_Overloads(package_name_ VARCHAR2,
  4.2945 +                          method_name_  VARCHAR2) RETURN NUMBER
  4.2946 +IS
  4.2947 +   CURSOR get_no_overloads_ IS
  4.2948 +      SELECT MAX(overload)
  4.2949 +      FROM dictionary_sys_argument_tab
  4.2950 +      WHERE package_name = package_name_
  4.2951 +        AND method_name = method_name_;
  4.2952 +
  4.2953 +      count_      NUMBER;
  4.2954 +BEGIN
  4.2955 +   count_:=NULL;
  4.2956 +   IF package_name_ IS NULL OR method_name_ IS NULL THEN
  4.2957 +--      Error_SYS.Appl_General(service_, 'NON_EXISTING_METHOD: [:P1,:P2] method is non existing method', package_name_, method_name_);
  4.2958 +      RETURN NULL;
  4.2959 +   END IF;
  4.2960 +   OPEN get_no_overloads_;
  4.2961 +   FETCH get_no_overloads_ INTO count_;
  4.2962 +   IF get_no_overloads_%NOTFOUND THEN
  4.2963 +--      Error_SYS.Appl_General(service_, 'NON_EXISTING_METHOD: [:P1,:P2] method is non existing method', package_name_, method_name_);
  4.2964 +      RETURN NULL;
  4.2965 +   END IF;
  4.2966 +   CLOSE get_no_overloads_;
  4.2967 +   RETURN count_;
  4.2968 +END Get_No_Overloads;
  4.2969 +
  4.2970 +FUNCTION Get_No_Arguments(package_name_ VARCHAR2,
  4.2971 +                          method_name_  VARCHAR2) RETURN  NUMBER
  4.2972 +IS
  4.2973 +   CURSOR get_no_args_ IS
  4.2974 +      SELECT count(*) no_args
  4.2975 +      FROM dictionary_sys_argument_tab
  4.2976 +      WHERE package_name = package_name_
  4.2977 +        AND method_name = method_name_
  4.2978 +      GROUP BY package_name, method_name,overload;
  4.2979 +
  4.2980 +      count_      NUMBER;
  4.2981 +BEGIN
  4.2982 +   count_:=NULL;
  4.2983 +   IF package_name_ IS NULL OR method_name_ IS NULL THEN
  4.2984 +--      Error_SYS.Appl_General(service_, 'NON_EXISTING_METHOD: [:P1,:P2] method is non existing method', package_name_, method_name_);
  4.2985 +      RETURN NULL;
  4.2986 +   END IF;
  4.2987 +   OPEN get_no_args_;
  4.2988 +   FETCH get_no_args_ INTO count_;
  4.2989 +   IF get_no_args_%NOTFOUND THEN
  4.2990 +--      Error_SYS.Appl_General(service_, 'NON_EXISTING_METHOD: [:P1,:P2] method is non existing method', package_name_, method_name_);
  4.2991 +      RETURN NULL;
  4.2992 +   END IF;
  4.2993 +   CLOSE get_no_args_;
  4.2994 +   RETURN count_;
  4.2995 +END Get_No_Arguments;
  4.2996 +
  4.2997 +FUNCTION Get_Min_No_Arguments(package_name_ VARCHAR2,
  4.2998 +                              method_name_  VARCHAR2) RETURN NUMBER
  4.2999 +IS
  4.3000 +   CURSOR get_min_no_args_ IS
  4.3001 +      SELECT MIN(no_args)
  4.3002 +      FROM (SELECT package_name, method_name, count(*) no_args
  4.3003 +            FROM dictionary_sys_argument_tab
  4.3004 +            GROUP BY package_name, method_name)
  4.3005 +      WHERE package_name = package_name_
  4.3006 +        AND method_name = method_name_;
  4.3007 +
  4.3008 +      count_      NUMBER;
  4.3009 +BEGIN
  4.3010 +   count_:=NULL;
  4.3011 +   IF package_name_ IS NULL OR method_name_ IS NULL THEN
  4.3012 +--      Error_SYS.Appl_General(service_, 'NON_EXISTING_METHOD: [:P1,:P2] method is non existing method', package_name_, method_name_);
  4.3013 +      RETURN NULL;
  4.3014 +   END IF;
  4.3015 +   OPEN get_min_no_args_;
  4.3016 +   FETCH get_min_no_args_ INTO count_;
  4.3017 +   IF get_min_no_args_%NOTFOUND THEN
  4.3018 +--      Error_SYS.Appl_General(service_, 'NON_EXISTING_METHOD: [:P1,:P2] method is non existing method', package_name_, method_name_);
  4.3019 +      RETURN NULL;
  4.3020 +   END IF;
  4.3021 +   CLOSE get_min_no_args_;
  4.3022 +   RETURN count_;
  4.3023 +END Get_Min_No_Arguments;
  4.3024 +
  4.3025 +FUNCTION Get_Max_No_Arguments(package_name_ VARCHAR2,
  4.3026 +                              method_name_  VARCHAR2) RETURN NUMBER
  4.3027 +IS
  4.3028 +   CURSOR get_max_no_args_ IS
  4.3029 +      SELECT MAX(no_args)
  4.3030 +      FROM (SELECT package_name, method_name, count(*) no_args
  4.3031 +            FROM dictionary_sys_argument_tab
  4.3032 +            GROUP BY package_name, method_name)
  4.3033 +      WHERE package_name = package_name_
  4.3034 +        AND method_name = method_name_;
  4.3035 +
  4.3036 +      count_      NUMBER;
  4.3037 +BEGIN
  4.3038 +   count_:=NULL;
  4.3039 +   IF package_name_ IS NULL OR method_name_ IS NULL THEN
  4.3040 +      --Error_SYS.Appl_General(service_, 'NON_EXISTING_METHOD: [:P1,:P2] method is non existing method', package_name_, method_name_);
  4.3041 +      RETURN NULL;
  4.3042 +   END IF;
  4.3043 +   OPEN get_max_no_args_;
  4.3044 +   FETCH get_max_no_args_ INTO count_;
  4.3045 +   IF get_max_no_args_%NOTFOUND THEN
  4.3046 +      --Error_SYS.Appl_General(service_, 'NON_EXISTING_METHOD: [:P1,:P2] method is non existing method', package_name_, method_name_);
  4.3047 +      RETURN NULL;
  4.3048 +   END IF;
  4.3049 +   CLOSE get_max_no_args_;
  4.3050 +   RETURN count_;
  4.3051 +END Get_Max_No_Arguments;
  4.3052 +
  4.3053 +FUNCTION Get_Argument_Type(package_name_ VARCHAR2,
  4.3054 +                           method_name_  VARCHAR2,
  4.3055 +                           arg_pos_      NUMBER) RETURN VARCHAR2
  4.3056 +IS
  4.3057 +   CURSOR get_arg_type_ IS
  4.3058 +      SELECT argument_datatype
  4.3059 +      FROM dictionary_sys_argument_tab
  4.3060 +      WHERE package_name = package_name_
  4.3061 +        AND method_name = method_name_
  4.3062 +        AND argument_index = arg_pos_;
  4.3063 +
  4.3064 +      type_      dictionary_sys_argument_tab.argument_datatype%TYPE;
  4.3065 +BEGIN
  4.3066 +   type_:=NULL;
  4.3067 +   IF package_name_ IS NULL OR method_name_ IS NULL THEN
  4.3068 +      --Error_SYS.Appl_General(service_, 'NON_EXISTING_METHOD: [:P1,:P2] method is non existing method', package_name_, method_name_);
  4.3069 +      RETURN NULL;
  4.3070 +   END IF;
  4.3071 +   IF Get_No_Overloads(package_name_, method_name_) > 1 THEN
  4.3072 +      RETURN NULL;
  4.3073 +   END IF;
  4.3074 +   OPEN get_arg_type_;
  4.3075 +   FETCH get_arg_type_ INTO type_;
  4.3076 +   IF get_arg_type_%NOTFOUND THEN
  4.3077 +      --Error_SYS.Appl_General(service_, 'NON_EXISTING_METHOD: [:P1,:P2] method is non existing method', package_name_, method_name_);
  4.3078 +      RETURN NULL;
  4.3079 +   END IF;
  4.3080 +   CLOSE get_arg_type_;
  4.3081 +   RETURN type_;
  4.3082 +END Get_Argument_Type;
  4.3083 +
  4.3084 +PROCEDURE Set_Installation_Mode (
  4.3085 +   installation_mode_ IN BOOLEAN DEFAULT FALSE )
  4.3086 +IS
  4.3087 +BEGIN
  4.3088 +   General_SYS.Init_Method(service_, '&PKG', 'Set_Installation_Mode');
  4.3089 +   installation_ := installation_mode_;
  4.3090 +END Set_Installation_Mode;
  4.3091 +
  4.3092 +FUNCTION Get_Installation_Mode RETURN BOOLEAN
  4.3093 +IS
  4.3094 +BEGIN
  4.3095 +   General_SYS.Init_Method(service_, '&PKG', 'Get_Installation_Mode');
  4.3096 +   RETURN(installation_);
  4.3097 +END Get_Installation_Mode;
  4.3098 +
  4.3099 +-----------------------------------------------------------------------------
  4.3100 +-------------------- FOUNDATION1 METHODS ------------------------------------
  4.3101 +-----------------------------------------------------------------------------
  4.3102 +-- Init
  4.3103 +--   Dummy procedure that can be called at database startup to ensure that
  4.3104 +--   this package is loaded into memory for performance reasons only.
  4.3105 +-----------------------------------------------------------------------------
  4.3106 +
  4.3107 +PROCEDURE Init
  4.3108 +IS
  4.3109 +BEGIN
  4.3110 +   NULL;
  4.3111 +END Init;
  4.3112 +
  4.3113 +
  4.3114 +END &PKG;
  4.3115 +/
  4.3116 +SHOW ERROR
  4.3117 +
  4.3118 +UNDEFINE MODULE
  4.3119 +UNDEFINE SERVICE
  4.3120 +UNDEFINE PKG
  4.3121 +UNDEFINE VIEW
  4.3122 +UNDEFINE VIEW2
  4.3123 +UNDEFINE VIEW3
  4.3124 +UNDEFINE VIEW4
  4.3125 +UNDEFINE VIEW5
  4.3126 +UNDEFINE VIEW6
  4.3127 +UNDEFINE VIEW7
  4.3128 +UNDEFINE VIEW8
  4.3129 +UNDEFINE VIEW9
  4.3130 +UNDEFINE OBJID
  4.3131 +-----------------------------------------------------------------------------
  4.3132 +
  4.3133 +
     5.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     5.2 +++ b/PLSQL/Lexer/test/unit/data/FavoriteSchedules.apy	Wed May 15 23:04:20 2013 +0200
     5.3 @@ -0,0 +1,712 @@
     5.4 +-----------------------------------------------------------------------------
     5.5 +--
     5.6 +--  Logical unit: FavoriteSchedules
     5.7 +--
     5.8 +--  Purpose:
     5.9 +--
    5.10 +--  IFS/Design Template Version 2.3
    5.11 +--
    5.12 +--  Date    Sign    History
    5.13 +--  ------  ------  ---------------------------------------------------------
    5.14 +--  050224  VYPELK  Created
    5.15 +-----------------------------------------------------------------------------
    5.16 +
    5.17 +DEFINE MODULE        = WRKSCH
    5.18 +DEFINE LU            = FavoriteSchedules
    5.19 +DEFINE TABLE         = FAVORITE_SCHEDULES_TAB
    5.20 +DEFINE VIEW          = FAVORITE_SCHEDULES
    5.21 +DEFINE PKG           = FAVORITE_SCHEDULES_API
    5.22 +
    5.23 +DEFINE OBJID         = rowid
    5.24 +DEFINE OBJVERSION    = to_char(rowversion)
    5.25 +
    5.26 +-----------------------------------------------------------------------------
    5.27 +-------------------- VIEWS FOR SELECTS --------------------------------------
    5.28 +-----------------------------------------------------------------------------
    5.29 +
    5.30 +PROMPT Creating &VIEW view
    5.31 +
    5.32 +CREATE OR REPLACE FORCE VIEW &VIEW AS
    5.33 +SELECT identity                       identity,
    5.34 +       schedule_type                  schedule_type,
    5.35 +       schedule_code                  schedule_code,
    5.36 +       company_id                     company_id,
    5.37 +       wage_class                     wage_class,
    5.38 +       &OBJID                         objid,
    5.39 +       &OBJVERSION                    objversion
    5.40 +FROM   favorite_schedules_tab
    5.41 +WITH   read only;
    5.42 +
    5.43 +COMMENT ON TABLE &VIEW
    5.44 +   IS 'LU=&LU^PROMPT=Favorite Schedules^MODULE=&MODULE^';
    5.45 +
    5.46 +COMMENT ON COLUMN &VIEW..identity
    5.47 +   IS 'FLAGS=PMI--^DATATYPE=STRING(30)/UPPERCASE^PROMPT=Identity^REF=ApplicationUser^';
    5.48 +COMMENT ON COLUMN &VIEW..schedule_type
    5.49 +   IS 'FLAGS=KMI-L^DATATYPE=STRING(10)^PROMPT=Schedule Type^';
    5.50 +COMMENT ON COLUMN &VIEW..schedule_code
    5.51 +   IS 'FLAGS=KMI--^DATATYPE=STRING(10)^PROMPT=Schedule Code^';
    5.52 +COMMENT ON COLUMN &VIEW..company_id
    5.53 +   IS 'FLAGS=KMI-L^DATATYPE=STRING(20)/UPPERCASE^PROMPT=Company ID^';
    5.54 +COMMENT ON COLUMN &VIEW..wage_class
    5.55 +   IS 'FLAGS=KMI-L^DATATYPE=STRING(10)/UPPERCASE^PROMPT=Wage Class^REF=WageClass(company_id)^';
    5.56 +
    5.57 +-----------------------------------------------------------------------------
    5.58 +-------------------- PACKAGES FOR METHODS -----------------------------------
    5.59 +-----------------------------------------------------------------------------
    5.60 +
    5.61 +PROMPT Creating &PKG implementation
    5.62 +
    5.63 +CREATE OR REPLACE PACKAGE BODY &PKG IS
    5.64 +
    5.65 +-----------------------------------------------------------------------------
    5.66 +-------------------- LU SPECIFIC IMPLEMENTATION METHOD DECLARATIONS ---------
    5.67 +-----------------------------------------------------------------------------
    5.68 +
    5.69 +
    5.70 +-----------------------------------------------------------------------------
    5.71 +-------------------- IMPLEMENTATION BASE METHODS ----------------------------
    5.72 +-----------------------------------------------------------------------------
    5.73 +-- Lock_By_Id___
    5.74 +--    Client-support to lock a specific instance of the logical unit.
    5.75 +--
    5.76 +-- Lock_By_Keys___
    5.77 +--    Server support to lock a specific instance of the logical unit.
    5.78 +--
    5.79 +-- Get_Object_By_Id___
    5.80 +--    Get LU-record from the database with a specified object identity.
    5.81 +--
    5.82 +-- Get_Object_By_Keys___
    5.83 +--    Get LU-record from the database with specified key columns.
    5.84 +--
    5.85 +-- Check_Exist___
    5.86 +--    Check if a specific LU-instance already exist in the database.
    5.87 +--
    5.88 +-- Get_Id_Version_By_Keys___
    5.89 +--    Get the current OBJID and OBJVERSION for a specific LU-instance.
    5.90 +-----------------------------------------------------------------------------
    5.91 +
    5.92 +FUNCTION Lock_By_Id___ (
    5.93 +   objid_      IN  VARCHAR2,
    5.94 +   objversion_ IN  VARCHAR2 ) RETURN &TABLE%ROWTYPE
    5.95 +IS
    5.96 +   row_changed EXCEPTION;
    5.97 +   row_deleted EXCEPTION;
    5.98 +   row_locked  EXCEPTION;
    5.99 +   PRAGMA      exception_init(row_locked, -0054);
   5.100 +   rec_        &TABLE%ROWTYPE;
   5.101 +   dummy_      NUMBER;
   5.102 +   CURSOR lock_control IS
   5.103 +      SELECT *
   5.104 +      FROM   &TABLE
   5.105 +      WHERE  &OBJID = objid_
   5.106 +      AND    &OBJVERSION = objversion_
   5.107 +      FOR UPDATE NOWAIT;
   5.108 +   CURSOR exist_control IS
   5.109 +      SELECT 1
   5.110 +      FROM   &TABLE
   5.111 +      WHERE  &OBJID = objid_;
   5.112 +BEGIN
   5.113 +   OPEN lock_control;
   5.114 +   FETCH lock_control INTO rec_;
   5.115 +   IF (lock_control%FOUND) THEN
   5.116 +      CLOSE lock_control;
   5.117 +      RETURN rec_;
   5.118 +   END IF;
   5.119 +   CLOSE lock_control;
   5.120 +   OPEN exist_control;
   5.121 +   FETCH exist_control INTO dummy_;
   5.122 +   IF (exist_control%FOUND) THEN
   5.123 +      CLOSE exist_control;
   5.124 +      RAISE row_changed;
   5.125 +   ELSE
   5.126 +      CLOSE exist_control;
   5.127 +      RAISE row_deleted;
   5.128 +   END IF;
   5.129 +EXCEPTION
   5.130 +   WHEN row_locked THEN
   5.131 +      Error_SYS.Record_Locked(lu_name_);
   5.132 +   WHEN row_changed THEN
   5.133 +      Error_SYS.Record_Modified(lu_name_);
   5.134 +   WHEN row_deleted THEN
   5.135 +      Error_SYS.Record_Removed(lu_name_);
   5.136 +END Lock_By_Id___;
   5.137 +
   5.138 +FUNCTION Lock_By_Keys___ (
   5.139 +   identity_ IN VARCHAR2,
   5.140 +   schedule_type_ IN VARCHAR2,
   5.141 +   schedule_code_ IN VARCHAR2,
   5.142 +   company_id_ IN VARCHAR2,
   5.143 +   wage_class_ IN VARCHAR2 ) RETURN &TABLE%ROWTYPE
   5.144 +IS
   5.145 +   row_deleted EXCEPTION;
   5.146 +   rec_        &TABLE%ROWTYPE;
   5.147 +   CURSOR lock_control IS
   5.148 +      SELECT *
   5.149 +      FROM  &TABLE
   5.150 +      WHERE identity = identity_
   5.151 +      AND   schedule_type = schedule_type_
   5.152 +      AND   schedule_code = schedule_code_
   5.153 +      AND   company_id = company_id_
   5.154 +      AND   wage_class = wage_class_
   5.155 +      FOR UPDATE;
   5.156 +BEGIN
   5.157 +   OPEN lock_control;
   5.158 +   FETCH lock_control INTO rec_;
   5.159 +   IF (lock_control%FOUND) THEN
   5.160 +      CLOSE lock_control;
   5.161 +      RETURN rec_;
   5.162 +   ELSE
   5.163 +      CLOSE lock_control;
   5.164 +      RAISE row_deleted;
   5.165 +   END IF;
   5.166 +EXCEPTION
   5.167 +   WHEN row_deleted THEN
   5.168 +      Error_SYS.Record_Removed(lu_name_);
   5.169 +END Lock_By_Keys___;
   5.170 +
   5.171 +FUNCTION Get_Object_By_Id___ (
   5.172 +   objid_ IN VARCHAR2 ) RETURN &TABLE%ROWTYPE
   5.173 +IS
   5.174 +   lu_rec_ &TABLE%ROWTYPE;
   5.175 +   CURSOR getrec IS
   5.176 +      SELECT *
   5.177 +      FROM   &TABLE
   5.178 +      WHERE  &OBJID = objid_;
   5.179 +BEGIN
   5.180 +   OPEN getrec;
   5.181 +   FETCH getrec INTO lu_rec_;
   5.182 +   IF (getrec%NOTFOUND) THEN
   5.183 +      CLOSE getrec;
   5.184 +      Error_SYS.Record_Removed(lu_name_);
   5.185 +   END IF;
   5.186 +   CLOSE getrec;
   5.187 +   RETURN(lu_rec_);
   5.188 +END Get_Object_By_Id___;
   5.189 +
   5.190 +
   5.191 +FUNCTION Get_Object_By_Keys___ (
   5.192 +   identity_ IN VARCHAR2,
   5.193 +   schedule_type_ IN VARCHAR2,
   5.194 +   schedule_code_ IN VARCHAR2,
   5.195 +   company_id_ IN VARCHAR2,
   5.196 +   wage_class_ IN VARCHAR2 ) RETURN &TABLE%ROWTYPE
   5.197 +IS
   5.198 +   lu_rec_ &TABLE%ROWTYPE;
   5.199 +   CURSOR getrec IS
   5.200 +      SELECT *
   5.201 +      FROM  &TABLE
   5.202 +      WHERE identity = identity_
   5.203 +      AND   schedule_type = schedule_type_
   5.204 +      AND   schedule_code = schedule_code_
   5.205 +      AND   company_id = company_id_
   5.206 +      AND   wage_class = wage_class_;
   5.207 +BEGIN
   5.208 +   OPEN getrec;
   5.209 +   FETCH getrec INTO lu_rec_;
   5.210 +   CLOSE getrec;
   5.211 +   RETURN(lu_rec_);
   5.212 +END Get_Object_By_Keys___;
   5.213 +
   5.214 +FUNCTION Check_Exist___ (
   5.215 +   identity_ IN VARCHAR2,
   5.216 +   schedule_type_ IN VARCHAR2,
   5.217 +   schedule_code_ IN VARCHAR2,
   5.218 +   company_id_ IN VARCHAR2,
   5.219 +   wage_class_ IN VARCHAR2 ) RETURN BOOLEAN
   5.220 +IS
   5.221 +   dummy_ NUMBER;
   5.222 +   CURSOR exist_control IS
   5.223 +      SELECT 1
   5.224 +      FROM   &TABLE
   5.225 +      WHERE identity = identity_
   5.226 +      AND   schedule_type = schedule_type_
   5.227 +      AND   schedule_code = schedule_code_
   5.228 +      AND   company_id = company_id_
   5.229 +      AND   wage_class = wage_class_;
   5.230 +BEGIN
   5.231 +   OPEN exist_control;
   5.232 +   FETCH exist_control INTO dummy_;
   5.233 +   IF (exist_control%FOUND) THEN
   5.234 +      CLOSE exist_control;
   5.235 +      RETURN(TRUE);
   5.236 +   END IF;
   5.237 +   CLOSE exist_control;
   5.238 +   RETURN(FALSE);
   5.239 +END Check_Exist___;
   5.240 +
   5.241 +PROCEDURE Get_Id_Version_By_Keys___ (
   5.242 +   objid_      IN OUT VARCHAR2,
   5.243 +   objversion_ IN OUT VARCHAR2,
   5.244 +   identity_ IN VARCHAR2,
   5.245 +   schedule_type_ IN VARCHAR2,
   5.246 +   schedule_code_ IN VARCHAR2,
   5.247 +   company_id_ IN VARCHAR2,
   5.248 +   wage_class_ IN VARCHAR2)
   5.249 +IS
   5.250 +   CURSOR get_version IS
   5.251 +   SELECT &OBJID, &OBJVERSION
   5.252 +      FROM  &TABLE
   5.253 +      WHERE identity = identity_
   5.254 +      AND   schedule_type = schedule_type_
   5.255 +      AND   schedule_code = schedule_code_
   5.256 +      AND   company_id = company_id_
   5.257 +      AND   wage_class = wage_class_;
   5.258 +BEGIN
   5.259 +   OPEN get_version;
   5.260 +   FETCH get_version INTO objid_, objversion_;
   5.261 +   CLOSE get_version;
   5.262 +END Get_Id_Version_By_Keys___;
   5.263 +
   5.264 +-----------------------------------------------------------------------------
   5.265 +-------------------- IMPLEMENTATION BASE METHODS FOR INSERT -----------------
   5.266 +-----------------------------------------------------------------------------
   5.267 +-- Prepare_Insert___
   5.268 +--    Set all default values for a new instance (ON-NEW-RECORD) of this
   5.269 +--    logical unit by calling procedure Add_Attr.
   5.270 +--
   5.271 +-- Unpack_Check_Insert___
   5.272 +--    Unpack the attribute list, check all attributes from the client
   5.273 +--    and generate all default values before creation of the new object.
   5.274 +--
   5.275 +-- Insert___
   5.276 +--    Insert a new LU-instance into the database and return the values
   5.277 +--    for OBJID and OBJVERSION.
   5.278 +-----------------------------------------------------------------------------
   5.279 +
   5.280 +PROCEDURE Prepare_Insert___ (
   5.281 +   attr_ IN OUT VARCHAR2 )
   5.282 +IS
   5.283 +BEGIN
   5.284 +   Client_SYS.Clear_Attr(attr_);
   5.285 +END Prepare_Insert___;
   5.286 +
   5.287 +
   5.288 +PROCEDURE Unpack_Check_Insert___ (
   5.289 +   attr_   IN OUT VARCHAR2,
   5.290 +   newrec_ IN OUT &TABLE%ROWTYPE )
   5.291 +IS
   5.292 +   ptr_   NUMBER;
   5.293 +   name_  VARCHAR2(30);
   5.294 +   value_ VARCHAR2(2000);
   5.295 +BEGIN
   5.296 +   ptr_ := NULL;
   5.297 +   WHILE (Client_SYS.Get_Next_From_Attr(attr_, ptr_, name_, value_)) LOOP
   5.298 +      IF (name_ = 'IDENTITY') THEN
   5.299 +         newrec_.identity := value_;
   5.300 +         Application_User_API.Exist(newrec_.identity);
   5.301 +      ELSIF (name_ = 'SCHEDULE_TYPE') THEN
   5.302 +         newrec_.schedule_type := value_;
   5.303 +      ELSIF (name_ = 'SCHEDULE_CODE') THEN
   5.304 +         newrec_.schedule_code := value_;
   5.305 +      ELSIF (name_ = 'COMPANY_ID') THEN
   5.306 +         newrec_.company_id := value_;
   5.307 +      ELSIF (name_ = 'WAGE_CLASS') THEN
   5.308 +         newrec_.wage_class := value_;
   5.309 +         Wage_Class_API.Exist(newrec_.company_id, newrec_.wage_class);
   5.310 +      ELSE
   5.311 +         Error_SYS.Item_Not_Exist(lu_name_, name_, value_);
   5.312 +      END IF;
   5.313 +   END LOOP;
   5.314 +   Client_SYS.Clear_Attr(attr_);
   5.315 +   Error_SYS.Check_Not_Null(lu_name_, 'IDENTITY', newrec_.identity);
   5.316 +   Error_SYS.Check_Not_Null(lu_name_, 'SCHEDULE_TYPE', newrec_.schedule_type);
   5.317 +   Error_SYS.Check_Not_Null(lu_name_, 'SCHEDULE_CODE', newrec_.schedule_code);
   5.318 +   Error_SYS.Check_Not_Null(lu_name_, 'COMPANY_ID', newrec_.company_id);
   5.319 +   Error_SYS.Check_Not_Null(lu_name_, 'WAGE_CLASS', newrec_.wage_class);
   5.320 +EXCEPTION
   5.321 +   WHEN value_error THEN
   5.322 +      Error_SYS.Item_Format(lu_name_, name_, value_);
   5.323 +END Unpack_Check_Insert___;
   5.324 +
   5.325 +
   5.326 +PROCEDURE Insert___ (
   5.327 +   objid_      OUT    VARCHAR2,
   5.328 +   objversion_ OUT    VARCHAR2,
   5.329 +   newrec_     IN OUT &TABLE%ROWTYPE,
   5.330 +   attr_       IN OUT VARCHAR2 )
   5.331 +IS
   5.332 +BEGIN
   5.333 +   newrec_.rowversion := 1;
   5.334 +   objversion_ := to_char(newrec_.rowversion);
   5.335 +   INSERT
   5.336 +      INTO favorite_schedules_tab (
   5.337 +         identity,
   5.338 +         schedule_type,
   5.339 +         schedule_code,
   5.340 +         company_id,
   5.341 +         wage_class,
   5.342 +         rowversion)
   5.343 +      VALUES (
   5.344 +         newrec_.identity,
   5.345 +         newrec_.schedule_type,
   5.346 +         newrec_.schedule_code,
   5.347 +         newrec_.company_id,
   5.348 +         newrec_.wage_class,
   5.349 +         newrec_.rowversion)
   5.350 +   RETURNING &OBJID INTO objid_;
   5.351 +EXCEPTION
   5.352 +   WHEN dup_val_on_index THEN
   5.353 +      Error_SYS.Record_Exist(lu_name_);
   5.354 +END Insert___;
   5.355 +
   5.356 +-----------------------------------------------------------------------------
   5.357 +-------------------- IMPLEMENTATION BASE METHODS FOR UPDATE -----------------
   5.358 +-----------------------------------------------------------------------------
   5.359 +-- Unpack_Check_Update___
   5.360 +--    Unpack the attribute list, check all attributes from the client
   5.361 +--    and generate all default values before modifying the object.
   5.362 +--
   5.363 +-- Update___
   5.364 +--    Update an existing LU-instance in the database and return the
   5.365 +--    the new OBJVERSION.
   5.366 +-----------------------------------------------------------------------------
   5.367 +
   5.368 +PROCEDURE Unpack_Check_Update___ (
   5.369 +   attr_   IN OUT VARCHAR2,
   5.370 +   newrec_ IN OUT &TABLE%ROWTYPE,
   5.371 +   objid_  IN     VARCHAR2 )
   5.372 +IS
   5.373 +   ptr_   NUMBER;
   5.374 +   name_  VARCHAR2(30);
   5.375 +   value_ VARCHAR2(2000);
   5.376 +BEGIN
   5.377 +   ptr_ := NULL;
   5.378 +   WHILE (Client_SYS.Get_Next_From_Attr(attr_, ptr_, name_, value_)) LOOP
   5.379 +      IF (name_ = 'IDENTITY') THEN
   5.380 +         Error_SYS.Item_Update(lu_name_, 'IDENTITY');
   5.381 +      ELSIF (name_ = 'SCHEDULE_TYPE') THEN
   5.382 +         Error_SYS.Item_Update(lu_name_, 'SCHEDULE_TYPE');
   5.383 +      ELSIF (name_ = 'SCHEDULE_CODE') THEN
   5.384 +         Error_SYS.Item_Update(lu_name_, 'SCHEDULE_CODE');
   5.385 +      ELSIF (name_ = 'COMPANY_ID') THEN
   5.386 +         Error_SYS.Item_Update(lu_name_, 'COMPANY_ID');
   5.387 +      ELSIF (name_ = 'WAGE_CLASS') THEN
   5.388 +         Error_SYS.Item_Update(lu_name_, 'WAGE_CLASS');
   5.389 +      ELSE
   5.390 +         Error_SYS.Item_Not_Exist(lu_name_, name_, value_);
   5.391 +      END IF;
   5.392 +   END LOOP;
   5.393 +   Client_SYS.Clear_Attr(attr_);
   5.394 +EXCEPTION
   5.395 +   WHEN value_error THEN
   5.396 +      Error_SYS.Item_Format(lu_name_, name_, value_);
   5.397 +END Unpack_Check_Update___;
   5.398 +
   5.399 +
   5.400 +PROCEDURE Update___ (
   5.401 +   objid_      IN     VARCHAR2,
   5.402 +   oldrec_     IN     &TABLE%ROWTYPE,
   5.403 +   newrec_     IN OUT &TABLE%ROWTYPE,
   5.404 +   attr_       IN OUT VARCHAR2,
   5.405 +   objversion_ IN OUT VARCHAR2,
   5.406 +   by_keys_    IN BOOLEAN DEFAULT FALSE )
   5.407 +IS
   5.408 +BEGIN
   5.409 +   newrec_.rowversion := newrec_.rowversion + 1;
   5.410 +   objversion_ := to_char(newrec_.rowversion);
   5.411 +   IF by_keys_ THEN
   5.412 +      UPDATE favorite_schedules_tab
   5.413 +      SET identity = newrec_.identity,
   5.414 +          schedule_type = newrec_.schedule_type,
   5.415 +          schedule_code = newrec_.schedule_code,
   5.416 +          company_id = newrec_.company_id,
   5.417 +          wage_class = newrec_.wage_class,
   5.418 +          rowversion = newrec_.rowversion
   5.419 +      WHERE identity = newrec_.identity
   5.420 +      AND   schedule_type = newrec_.schedule_type
   5.421 +      AND   schedule_code = newrec_.schedule_code
   5.422 +      AND   company_id = newrec_.company_id
   5.423 +      AND   wage_class = newrec_.wage_class;
   5.424 +   ELSE
   5.425 +      UPDATE favorite_schedules_tab
   5.426 +      SET identity = newrec_.identity,
   5.427 +          schedule_type = newrec_.schedule_type,
   5.428 +          schedule_code = newrec_.schedule_code,
   5.429 +          company_id = newrec_.company_id,
   5.430 +          wage_class = newrec_.wage_class,
   5.431 +          rowversion = newrec_.rowversion
   5.432 +      WHERE &OBJID = objid_;
   5.433 +   END IF;
   5.434 +EXCEPTION
   5.435 +   WHEN dup_val_on_index THEN
   5.436 +      Error_SYS.Record_Exist(lu_name_);
   5.437 +END Update___;
   5.438 +
   5.439 +-----------------------------------------------------------------------------
   5.440 +-------------------- IMPLEMENTATION BASE METHODS FOR DELETE -----------------
   5.441 +-----------------------------------------------------------------------------
   5.442 +-- Check_Delete___
   5.443 +--    Checks whether a specific LU-record may be removed or not.
   5.444 +--    The procedure should check business rules like attribute values
   5.445 +--    as well as database constraints (defined or not).
   5.446 +--
   5.447 +-- Delete___
   5.448 +--    Deletion of the specific LU-object from the database.
   5.449 +-----------------------------------------------------------------------------
   5.450 +
   5.451 +PROCEDURE Check_Delete___ (
   5.452 +   remrec_ IN &TABLE%ROWTYPE )
   5.453 +IS
   5.454 +   key_ VARCHAR2(2000);
   5.455 +BEGIN
   5.456 +   key_ := remrec_.identity || '^' || remrec_.schedule_type || '^' || remrec_.schedule_code || '^' || remrec_.company_id || '^' || remrec_.wage_class || '^';
   5.457 +   Reference_SYS.Check_Restricted_Delete(lu_name_, key_);
   5.458 +END Check_Delete___;
   5.459 +
   5.460 +
   5.461 +PROCEDURE Delete___ (
   5.462 +   objid_  IN VARCHAR2,
   5.463 +   remrec_ IN &TABLE%ROWTYPE )
   5.464 +IS
   5.465 +   key_ VARCHAR2(2000);
   5.466 +BEGIN
   5.467 +   key_ := remrec_.identity || '^' || remrec_.schedule_type || '^' || remrec_.schedule_code || '^' || remrec_.company_id || '^' || remrec_.wage_class || '^';
   5.468 +   Reference_SYS.Do_Cascade_Delete(lu_name_, key_);
   5.469 +   DELETE
   5.470 +      FROM  favorite_schedules_tab
   5.471 +      WHERE &OBJID = objid_;
   5.472 +END Delete___;
   5.473 +
   5.474 +-----------------------------------------------------------------------------
   5.475 +-------------------- PRIVATE BASE METHODS -----------------------------------
   5.476 +-----------------------------------------------------------------------------
   5.477 +-- Lock__
   5.478 +--    Client-support to lock a specific instance of the logical unit.
   5.479 +--
   5.480 +-- New__
   5.481 +--    Client-support interface to create LU instances.
   5.482 +--       action_ = 'PREPARE'
   5.483 +--          Default values and handle of information to client.
   5.484 +--          The default values are set in procedure Prepare_Insert___.
   5.485 +--       action_ = 'CHECK'
   5.486 +--          Check all attributes before creating new object and handle of
   5.487 +--          information to client. The attribute list is unpacked, checked
   5.488 +--          and prepared (defaults) in procedure Unpack_Check_Insert___.
   5.489 +--       action_ = 'DO'
   5.490 +--          Creation of new instances of the logical unit and handle of
   5.491 +--          information to client. The attribute list is unpacked, checked
   5.492 +--          and prepared (defaults) in procedure Unpack_Check_Insert___
   5.493 +--          before calling procedure Insert___.
   5.494 +--
   5.495 +-- Modify__
   5.496 +--    Client-support interface to modify attributes for LU instances.
   5.497 +--       action_ = 'CHECK'
   5.498 +--          Check all attributes before modifying an existing object and
   5.499 +--          handle of information to client. The attribute list is unpacked,
   5.500 +--          checked and prepared(defaults) in procedure Unpack_Check_Update___.
   5.501 +--       action_ = 'DO'
   5.502 +--          Modification of an existing instance of the logical unit. The
   5.503 +--          procedure unpacks the attributes, checks all values before
   5.504 +--          procedure Update___ is called.
   5.505 +--
   5.506 +-- Remove__
   5.507 +--    Client-support interface to remove LU instances.
   5.508 +--       action_ = 'CHECK'
   5.509 +--          Check whether a specific LU-instance may be removed or not.
   5.510 +--          The procedure fetches the complete record by calling procedure
   5.511 +--          Get_Object_By_Id___. Then the check is made by calling procedure
   5.512 +--          Check_Delete___.
   5.513 +--       action_ = 'DO'
   5.514 +--          Remove an existing instance of the logical unit. The procedure
   5.515 +--          fetches the complete LU-record, checks for a delete and then
   5.516 +--          deletes the record by calling procedure Delete___.
   5.517 +-----------------------------------------------------------------------------
   5.518 +
   5.519 +PROCEDURE Lock__ (
   5.520 +   info_       OUT VARCHAR2,
   5.521 +   objid_      IN  VARCHAR2,
   5.522 +   objversion_ IN  VARCHAR2 )
   5.523 +IS
   5.524 +   dummy_ &TABLE%ROWTYPE;
   5.525 +BEGIN
   5.526 +   General_SYS.Init_Method(lu_name_, '&PKG', 'Lock__');
   5.527 +   dummy_ := Lock_By_Id___(objid_, objversion_);
   5.528 +   info_ := Client_SYS.Get_All_Info;
   5.529 +END Lock__;
   5.530 +
   5.531 +
   5.532 +PROCEDURE New__ (
   5.533 +   info_       OUT    VARCHAR2,
   5.534 +   objid_      OUT    VARCHAR2,
   5.535 +   objversion_ OUT    VARCHAR2,
   5.536 +   attr_       IN OUT VARCHAR2,
   5.537 +   action_     IN     VARCHAR2 )
   5.538 +IS
   5.539 +   newrec_ &TABLE%ROWTYPE;
   5.540 +BEGIN
   5.541 +   General_SYS.Init_Method(lu_name_, '&PKG', 'New__');
   5.542 +   IF (action_ = 'PREPARE') THEN
   5.543 +      Prepare_Insert___(attr_);
   5.544 +   ELSIF (action_ = 'CHECK') THEN
   5.545 +      Unpack_Check_Insert___(attr_, newrec_);
   5.546 +   ELSIF (action_ = 'DO') THEN
   5.547 +      Unpack_Check_Insert___(attr_, newrec_);
   5.548 +      Insert___(objid_, objversion_, newrec_, attr_);
   5.549 +   END IF;
   5.550 +   info_ := Client_SYS.Get_All_Info;
   5.551 +END New__;
   5.552 +
   5.553 +
   5.554 +PROCEDURE Modify__ (
   5.555 +   info_       OUT    VARCHAR2,
   5.556 +   objid_      IN     VARCHAR2,
   5.557 +   objversion_ IN OUT VARCHAR2,
   5.558 +   attr_       IN OUT VARCHAR2,
   5.559 +   action_     IN     VARCHAR2 )
   5.560 +IS
   5.561 +   oldrec_ &TABLE%ROWTYPE;
   5.562 +   newrec_ &TABLE%ROWTYPE;
   5.563 +BEGIN
   5.564 +   General_SYS.Init_Method(lu_name_, '&PKG', 'Modify__');
   5.565 +   IF (action_ = 'CHECK') THEN
   5.566 +      newrec_ := Get_Object_By_Id___(objid_);
   5.567 +      Unpack_Check_Update___(attr_, newrec_, objid_);
   5.568 +   ELSIF (action_ = 'DO') THEN
   5.569 +      oldrec_ := Lock_By_Id___(objid_, objversion_);
   5.570 +      newrec_ := oldrec_;
   5.571 +      Unpack_Check_Update___(attr_, newrec_, objid_);
   5.572 +      Update___(objid_, oldrec_, newrec_, attr_, objversion_);
   5.573 +   END IF;
   5.574 +   info_ := Client_SYS.Get_All_Info;
   5.575 +END Modify__;
   5.576 +
   5.577 +
   5.578 +PROCEDURE Remove__ (
   5.579 +   info_       OUT VARCHAR2,
   5.580 +   objid_      IN  VARCHAR2,
   5.581 +   objversion_ IN  VARCHAR2,
   5.582 +   action_     IN  VARCHAR2 )
   5.583 +IS
   5.584 +   remrec_ &TABLE%ROWTYPE;
   5.585 +BEGIN
   5.586 +   General_SYS.Init_Method(lu_name_, '&PKG', 'Remove__');
   5.587 +   IF (action_ = 'CHECK') THEN
   5.588 +      remrec_ := Get_Object_By_Id___(objid_);
   5.589 +      Check_Delete___(remrec_);
   5.590 +   ELSIF (action_ = 'DO') THEN
   5.591 +      remrec_ := Lock_By_Id___(objid_, objversion_);
   5.592 +      Check_Delete___(remrec_);
   5.593 +      Delete___(objid_, remrec_);
   5.594 +   END IF;
   5.595 +   info_ := Client_SYS.Get_All_Info;
   5.596 +END Remove__;
   5.597 +
   5.598 +-----------------------------------------------------------------------------
   5.599 +-------------------- PUBLIC BASE METHODS ------------------------------------
   5.600 +-----------------------------------------------------------------------------
   5.601 +-- Exist
   5.602 +--   Checks if given pointer (e.g. primary key) to an instance of this
   5.603 +--   logical unit exists. If not an exception will be raised.
   5.604 +-----------------------------------------------------------------------------
   5.605 +
   5.606 +PROCEDURE Exist (
   5.607 +   identity_ IN VARCHAR2,
   5.608 +   schedule_type_ IN VARCHAR2,
   5.609 +   schedule_code_ IN VARCHAR2,
   5.610 +   company_id_ IN VARCHAR2,
   5.611 +   wage_class_ IN VARCHAR2 )
   5.612 +IS
   5.613 +BEGIN
   5.614 +   General_SYS.Init_Method(lu_name_, '&PKG', 'Exist', TRUE);
   5.615 +   IF (NOT Check_Exist___(identity_, schedule_type_, schedule_code_, company_id_, wage_class_)) THEN
   5.616 +      Error_SYS.Record_Not_Exist(lu_name_);
   5.617 +   END IF;
   5.618 +END Exist;
   5.619 +
   5.620 +-----------------------------------------------------------------------------
   5.621 +-------------------- LU SPECIFIC IMPLEMENTATION METHODS ---------------------
   5.622 +-----------------------------------------------------------------------------
   5.623 +
   5.624 +
   5.625 +-----------------------------------------------------------------------------
   5.626 +-------------------- LU SPECIFIC PRIVATE METHODS ----------------------------
   5.627 +-----------------------------------------------------------------------------
   5.628 +
   5.629 +
   5.630 +-----------------------------------------------------------------------------
   5.631 +-------------------- LU SPECIFIC PROTECTED METHODS --------------------------
   5.632 +-----------------------------------------------------------------------------
   5.633 +
   5.634 +
   5.635 +-----------------------------------------------------------------------------
   5.636 +-------------------- LU SPECIFIC PUBLIC METHODS -----------------------------
   5.637 +-----------------------------------------------------------------------------
   5.638 +
   5.639 +PROCEDURE Add_Remove (
   5.640 +   identity_ IN VARCHAR2,
   5.641 +   schedule_type_ IN VARCHAR2,
   5.642 +   schedule_code_ IN VARCHAR2,
   5.643 +   company_id_ IN VARCHAR2,
   5.644 +   wage_class_ IN VARCHAR2,
   5.645 +   favorite_  IN NUMBER )
   5.646 +IS
   5.647 +   info_            VARCHAR2(1000);
   5.648 +   objid_           FAVORITE_SCHEDULES.objid%TYPE;
   5.649 +   objversion_      FAVORITE_SCHEDULES.objversion%TYPE;
   5.650 +   attr_            VARCHAR2(1000);
   5.651 +BEGIN
   5.652 +   General_SYS.Init_Method(lu_name_, '&PKG', 'Add_Remove');
   5.653 +   IF favorite_ = 1 THEN
   5.654 +      IF (NOT Check_Exist___(identity_, schedule_type_, schedule_code_, company_id_, wage_class_)) THEN
   5.655 +         Client_SYS.Clear_Attr(attr_);
   5.656 +         Client_SYS.Add_To_Attr('COMPANY_ID', company_id_, attr_);
   5.657 +         Client_SYS.Add_To_Attr('WAGE_CLASS', wage_class_, attr_);
   5.658 +         Client_SYS.Add_To_Attr('IDENTITY', identity_, attr_);
   5.659 +         Client_SYS.Add_To_Attr('SCHEDULE_TYPE', schedule_type_, attr_);
   5.660 +         Client_SYS.Add_To_Attr('SCHEDULE_CODE', schedule_code_, attr_);
   5.661 +         New__( info_, objid_, objversion_, attr_, 'DO');
   5.662 +      END IF;
   5.663 +   ELSE
   5.664 +      IF (Check_Exist___(identity_, schedule_type_, schedule_code_, company_id_, wage_class_)) THEN
   5.665 +         Get_Id_Version_By_Keys___(objid_, objversion_, identity_, schedule_type_, schedule_code_, company_id_, wage_class_);
   5.666 +         Remove__(info_, objid_, objversion_, 'DO');
   5.667 +      END IF;
   5.668 +   END IF;
   5.669 +
   5.670 +END Add_Remove;
   5.671 +
   5.672 +
   5.673 +FUNCTION Get_Favorite (
   5.674 +   identity_ IN VARCHAR2,
   5.675 +   schedule_type_ IN VARCHAR2,
   5.676 +   schedule_code_ IN VARCHAR2,
   5.677 +   company_id_ IN VARCHAR2,
   5.678 +   wage_class_ IN VARCHAR2 ) RETURN NUMBER
   5.679 +IS
   5.680 +BEGIN
   5.681 +   IF (Check_Exist___(identity_, schedule_type_, schedule_code_, company_id_, wage_class_)) THEN
   5.682 +      RETURN 1;
   5.683 +   END IF;
   5.684 +   RETURN 0;
   5.685 +END Get_Favorite;
   5.686 +
   5.687 +-----------------------------------------------------------------------------
   5.688 +-------------------- FOUNDATION1 METHODS ------------------------------------
   5.689 +-----------------------------------------------------------------------------
   5.690 +-- Init
   5.691 +--   Dummy procedure that can be called at database startup to ensure that
   5.692 +--   this package is loaded into memory for performance reasons only.
   5.693 +-----------------------------------------------------------------------------
   5.694 +
   5.695 +PROCEDURE Init
   5.696 +IS
   5.697 +BEGIN
   5.698 +   NULL;
   5.699 +END Init;
   5.700 +
   5.701 +
   5.702 +END &PKG;
   5.703 +/
   5.704 +SHOW ERROR
   5.705 +
   5.706 +UNDEFINE MODULE
   5.707 +UNDEFINE LU
   5.708 +UNDEFINE TABLE
   5.709 +UNDEFINE VIEW
   5.710 +UNDEFINE PKG
   5.711 +
   5.712 +UNDEFINE OBJID
   5.713 +UNDEFINE OBJVERSION
   5.714 +
   5.715 +-----------------------------------------------------------------------------
     6.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     6.2 +++ b/PLSQL/Lexer/test/unit/data/FndEvent.api	Wed May 15 23:04:20 2013 +0200
     6.3 @@ -0,0 +1,147 @@
     6.4 +-----------------------------------------------------------------------------
     6.5 +--
     6.6 +--  Logical unit: FndEvent
     6.7 +--
     6.8 +--  IFS/Design Template Version 2.3
     6.9 +--
    6.10 +--  Date    Sign  History
    6.11 +--  ------  ----  -----------------------------------------------------------
    6.12 +--  971009  ERFO  Reviewed for Foundation1 Release 2.0.0 (ToDo #1676).
    6.13 +--  030212  ROOD  Changed module to FNDBAS (ToDo#4149).
    6.14 +--  070212  HAAR  Added support for Custom Defined Events (Bugg#61780).
    6.15 +--  090114  HAAR  Added methods for Export/Import Export__ and Register_Custom_Event (Bug#79673).
    6.16 +-----------------------------------------------------------------------------
    6.17 +
    6.18 +DEFINE MODULE        = FNDBAS
    6.19 +DEFINE LU            = FndEvent
    6.20 +DEFINE PKG           = FND_EVENT_API
    6.21 +
    6.22 +
    6.23 +PROMPT Creating &AO..&PKG specification
    6.24 +
    6.25 +CREATE OR REPLACE PACKAGE &AO..&PKG IS
    6.26 +
    6.27 +module_  CONSTANT VARCHAR2(25) := '&MODULE';
    6.28 +lu_name_ CONSTANT VARCHAR2(25) := '&LU';
    6.29 +
    6.30 +TYPE Public_Rec IS RECORD
    6.31 +   (event_description FND_EVENT_TAB.event_description%TYPE,
    6.32 +    event_enable FND_EVENT_TAB.event_enable%TYPE);
    6.33 +
    6.34 +-----------------------------------------------------------------------------
    6.35 +-------------------- PRIVATE BASE METHODS -----------------------------------
    6.36 +-----------------------------------------------------------------------------
    6.37 +
    6.38 +PROCEDURE Lock__ (
    6.39 +   info_       OUT VARCHAR2,
    6.40 +   objid_      IN  VARCHAR2,
    6.41 +   objversion_ IN  VARCHAR2 );
    6.42 +
    6.43 +PROCEDURE New__ (
    6.44 +   info_       OUT    VARCHAR2,
    6.45 +   objid_      OUT    VARCHAR2,
    6.46 +   objversion_ OUT    VARCHAR2,
    6.47 +   attr_       IN OUT VARCHAR2,
    6.48 +   action_     IN     VARCHAR2 );
    6.49 +
    6.50 +PROCEDURE Modify__ (
    6.51 +   info_       OUT    VARCHAR2,
    6.52 +   objid_      IN     VARCHAR2,
    6.53 +   objversion_ IN OUT VARCHAR2,
    6.54 +   attr_       IN OUT VARCHAR2,
    6.55 +   action_     IN     VARCHAR2 );
    6.56 +
    6.57 +PROCEDURE Remove__ (
    6.58 +   info_       OUT VARCHAR2,
    6.59 +   objid_      IN  VARCHAR2,
    6.60 +   objversion_ IN  VARCHAR2,
    6.61 +   action_     IN  VARCHAR2 );
    6.62 +
    6.63 +-----------------------------------------------------------------------------
    6.64 +-------------------- PUBLIC BASE METHODS ------------------------------------
    6.65 +-----------------------------------------------------------------------------
    6.66 +
    6.67 +PROCEDURE Exist (
    6.68 +   event_lu_name_ IN VARCHAR2,
    6.69 +   event_id_      IN VARCHAR2 );
    6.70 +
    6.71 +-----------------------------------------------------------------------------
    6.72 +-------------------- LU SPECIFIC PRIVATE METHODS ----------------------------
    6.73 +-----------------------------------------------------------------------------
    6.74 +
    6.75 +PROCEDURE Export__ (
    6.76 +   string_        OUT VARCHAR2,
    6.77 +   event_lu_name_ IN  VARCHAR2,
    6.78 +   event_id_      IN  VARCHAR2 );
    6.79 +
    6.80 +-----------------------------------------------------------------------------
    6.81 +-------------------- LU SPECIFIC PROTECTED METHODS --------------------------
    6.82 +-----------------------------------------------------------------------------
    6.83 +
    6.84 +
    6.85 +-----------------------------------------------------------------------------
    6.86 +-------------------- LU SPECIFIC PUBLIC METHODS -----------------------------
    6.87 +-----------------------------------------------------------------------------
    6.88 +
    6.89 +FUNCTION Get_Event_Description (
    6.90 +   event_lu_name_ IN VARCHAR2,
    6.91 +   event_id_      IN VARCHAR2 ) RETURN VARCHAR2;
    6.92 +PRAGMA restrict_references(Get_Event_Description, WNDS);
    6.93 +
    6.94 +
    6.95 +FUNCTION Get_Event_Enable (
    6.96 +   event_lu_name_ IN VARCHAR2,
    6.97 +   event_id_      IN VARCHAR2 ) RETURN VARCHAR2;
    6.98 +PRAGMA restrict_references(Get_Event_Enable, WNDS);
    6.99 +
   6.100 +
   6.101 +PROCEDURE Set_Event_Enable (
   6.102 +   event_lu_name_ IN VARCHAR2,
   6.103 +   event_id_      IN VARCHAR2 );
   6.104 +
   6.105 +
   6.106 +PROCEDURE Refresh (
   6.107 +   event_lu_name_       IN VARCHAR2,
   6.108 +   event_id_            IN VARCHAR2,
   6.109 +   event_desc_          IN VARCHAR2,
   6.110 +   event_type_db_       IN VARCHAR2 DEFAULT 'APPLICATION',
   6.111 +   event_table_name_    IN VARCHAR2 DEFAULT NULL,
   6.112 +   modified_attributes_ IN VARCHAR2 DEFAULT NULL,
   6.113 +   new_row_             IN VARCHAR2 DEFAULT 'FALSE',
   6.114 +   modify_row_          IN VARCHAR2 DEFAULT 'FALSE',
   6.115 +   remove_row_          IN VARCHAR2 DEFAULT 'FALSE');
   6.116 +
   6.117 +PROCEDURE Register_Custom_Event (
   6.118 +   event_lu_name_ IN VARCHAR2,
   6.119 +   event_id_      IN VARCHAR2,
   6.120 +   info_msg_      IN VARCHAR2 );
   6.121 +
   6.122 +
   6.123 +PROCEDURE Unfresh (
   6.124 +   event_lu_name_ IN VARCHAR2,
   6.125 +   event_id_      IN VARCHAR2 );
   6.126 +
   6.127 +
   6.128 +FUNCTION Get (
   6.129 +   event_lu_name_ IN VARCHAR2,
   6.130 +   event_id_ IN VARCHAR2 ) RETURN Public_Rec;
   6.131 +PRAGMA restrict_references(Get, WNDS);
   6.132 +
   6.133 +
   6.134 +
   6.135 +-----------------------------------------------------------------------------
   6.136 +-------------------- FOUNDATION1 METHODS ------------------------------------
   6.137 +-----------------------------------------------------------------------------
   6.138 +
   6.139 +PROCEDURE Init;
   6.140 +
   6.141 +
   6.142 +END &PKG;
   6.143 +/
   6.144 +SHOW ERROR
   6.145 +
   6.146 +UNDEFINE MODULE
   6.147 +UNDEFINE LU
   6.148 +UNDEFINE PKG
   6.149 +
   6.150 +-----------------------------------------------------------------------------
     7.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     7.2 +++ b/PLSQL/Lexer/test/unit/data/FndEvent.apy	Wed May 15 23:04:20 2013 +0200
     7.3 @@ -0,0 +1,1422 @@
     7.4 +-----------------------------------------------------------------------------
     7.5 +--
     7.6 +--  Logical unit: FndEvent
     7.7 +--
     7.8 +--  Purpose:
     7.9 +--
    7.10 +--  IFS/Design Template Version 2.3
    7.11 +--
    7.12 +--  Date    Sign  History
    7.13 +--  ------  ----  -----------------------------------------------------------
    7.14 +--  971009  ERFO  Reviewed for Foundation1 Release 2.0.0 (ToDo #1676).
    7.15 +--  971013  ERFO  Made attribute EVENT_ID uppercase.
    7.16 +--  980223  ERFO  Removed Set_Event_Enabled in method Refresh and added
    7.17 +--                validation when setting event enabled (ToDo #2144).
    7.18 +--  980310  ERFO  Set event_enable to FALSE in method Refresh and
    7.19 +--                ensure a correct error message in method Update___.
    7.20 +--  030212  ROOD  Changed module to FNDBAS (ToDo#4149).
    7.21 +--  030214  ROOD  Replaced usage of fnd_event_action_tab with the view (ToDo#4149).
    7.22 +--  060623  RARU  Moved the select statement into a cursor in Update__.
    7.23 +--  070212  HAAR  Added support for Custom Defined Events (Bugg#61780).
    7.24 +--  080101  SUMA  Changed the :new to old when inserting new recs.(Bug#70269).
    7.25 +--  080228  SUMA  Added Create_Trigger_Name function to aviod special chars(Bug#71099)
    7.26 +--  080925  HAAR  Renamed parameters for Custom Defined Events (Bug#77334).
    7.27 +--                New value: NEW:COLUMN_NAME => NEW:IDENTITY
    7.28 +--                Old value: OLD:COLUMN_NAME => OLD:IDENTITY
    7.29 +--  090114  HAAR  Added methods for Export/Import Export__ and Register_Custom_Event (Bug#79673).
    7.30 +--  091109  NABA  Added the check for event_id as a valid identifier (Bug#86681) 
    7.31 +-----------------------------------------------------------------------------
    7.32 +
    7.33 +DEFINE MODULE        = FNDBAS
    7.34 +DEFINE LU            = FndEvent
    7.35 +DEFINE TABLE         = FND_EVENT_TAB
    7.36 +DEFINE VIEW          = FND_EVENT
    7.37 +DEFINE PKG           = FND_EVENT_API
    7.38 +
    7.39 +DEFINE OBJID         = rowid
    7.40 +DEFINE OBJVERSION    = "ltrim(lpad(to_char(rowversion,'YYYYMMDDHH24MISS'),2000))"
    7.41 +
    7.42 +-----------------------------------------------------------------------------
    7.43 +-------------------- VIEWS FOR SELECTS --------------------------------------
    7.44 +-----------------------------------------------------------------------------
    7.45 +
    7.46 +PROMPT Creating &AO..&VIEW view
    7.47 +
    7.48 +CREATE OR REPLACE VIEW &AO..&VIEW AS
    7.49 +SELECT event_lu_name                  event_lu_name,
    7.50 +       event_id                       event_id,
    7.51 +       event_description              event_description,
    7.52 +       event_enable                   event_enable,
    7.53 +       event_table_name               event_table_name,
    7.54 +       Fnd_Event_Type_API.Decode(event_type) event_type,
    7.55 +       event_type                     event_type_db,
    7.56 +       modified_attributes            modified_attributes,
    7.57 +       Fnd_Boolean_API.Decode(new_row) new_row,
    7.58 +       new_row                        new_row_db,
    7.59 +       Fnd_Boolean_API.Decode(modify_row) modify_row,
    7.60 +       modify_row                     modify_row_db,
    7.61 +       Fnd_Boolean_API.Decode(remove_row) remove_row,
    7.62 +       remove_row                     remove_row_db,
    7.63 +       &OBJID                         objid,
    7.64 +       &OBJVERSION                    objversion
    7.65 +FROM   fnd_event_tab
    7.66 +WITH   read only;
    7.67 +
    7.68 +COMMENT ON TABLE &AO..&VIEW
    7.69 +   IS 'LU=&LU^PROMPT=Fnd Event^MODULE=&MODULE^';
    7.70 +
    7.71 +COMMENT ON COLUMN &AO..&VIEW..event_lu_name
    7.72 +   IS 'FLAGS=KMI-L^DATATYPE=STRING(25)^PROMPT=Event Lu Name^';
    7.73 +COMMENT ON COLUMN &AO..&VIEW..event_id
    7.74 +   IS 'FLAGS=KMI-L^DATATYPE=STRING(32)/UPPERCASE^PROMPT=Event Id^';
    7.75 +COMMENT ON COLUMN &AO..&VIEW..event_description
    7.76 +   IS 'FLAGS=A-IU-^DATATYPE=STRING(256)^PROMPT=Event Description^';
    7.77 +COMMENT ON COLUMN &AO..&VIEW..event_enable
    7.78 +   IS 'FLAGS=A-IU-^DATATYPE=BOOLEAN^PROMPT=Event Enable^';
    7.79 +COMMENT ON COLUMN &AO..&VIEW..event_table_name
    7.80 +   IS 'FLAGS=A-IU-^DATATYPE=STRING(30)^PROMPT=Event Table Name^';
    7.81 +COMMENT ON COLUMN &AO..&VIEW..event_type
    7.82 +   IS 'FLAGS=AMIU-^DATATYPE=STRING(200)^PROMPT=Event Type^REF=FndEventType^';
    7.83 +COMMENT ON COLUMN &AO..&VIEW..event_type_db
    7.84 +   IS 'FLAGS=A----^DATATYPE=STRING(20)^PROMPT=Event Type^';
    7.85 +COMMENT ON COLUMN &AO..&VIEW..modified_attributes
    7.86 +   IS 'FLAGS=A-IU-^DATATYPE=STRING(4000)^PROMPT=Modified Attributes^';
    7.87 +COMMENT ON COLUMN &AO..&VIEW..new_row
    7.88 +   IS 'FLAGS=AMIU-^DATATYPE=STRING(200)^PROMPT=New Row^REF=FndBoolean^';
    7.89 +COMMENT ON COLUMN &AO..&VIEW..new_row_db
    7.90 +   IS 'FLAGS=A----^DATATYPE=STRING(20)^PROMPT=New Row^';
    7.91 +COMMENT ON COLUMN &AO..&VIEW..modify_row
    7.92 +   IS 'FLAGS=AMIU-^DATATYPE=STRING(200)^PROMPT=Modify Row^REF=FndBoolean^';
    7.93 +COMMENT ON COLUMN &AO..&VIEW..modify_row_db
    7.94 +   IS 'FLAGS=A----^DATATYPE=STRING(20)^PROMPT=Modify Row^';
    7.95 +COMMENT ON COLUMN &AO..&VIEW..remove_row
    7.96 +   IS 'FLAGS=AMIUL^DATATYPE=STRING(200)^PROMPT=Remove Row^REF=FndBoolean^';
    7.97 +COMMENT ON COLUMN &AO..&VIEW..remove_row_db
    7.98 +   IS 'FLAGS=A----^DATATYPE=STRING(20)^PROMPT=Remove Row^';
    7.99 +
   7.100 +-----------------------------------------------------------------------------
   7.101 +-------------------- PACKAGES FOR METHODS -----------------------------------
   7.102 +-----------------------------------------------------------------------------
   7.103 +
   7.104 +PROMPT Creating &AO..&PKG implementation
   7.105 +
   7.106 +CREATE OR REPLACE PACKAGE BODY &AO..&PKG IS
   7.107 +
   7.108 +datetime_format_ VARCHAR2(40) := Fnd_Setting_API.Get_Value('EVENT_REG_DATETIME');
   7.109 +date_format_     VARCHAR2(40) := Fnd_Setting_API.Get_Value('EVENT_REG_DATE');
   7.110 +time_format_     VARCHAR2(40) := Fnd_Setting_API.Get_Value('EVENT_REG_TIME');
   7.111 +
   7.112 +-----------------------------------------------------------------------------
   7.113 +-------------------- LU SPECIFIC IMPLEMENTATION METHOD DECLARATIONS ---------
   7.114 +-----------------------------------------------------------------------------
   7.115 +
   7.116 +PROCEDURE Create_Custom_Trigger___(
   7.117 +   rec_           IN     Fnd_Event_Tab%ROWTYPE,
   7.118 +   trigger_type_  IN     VARCHAR2 );
   7.119 +
   7.120 +PROCEDURE Create_Custom_Triggers___(
   7.121 +   rec_ IN Fnd_Event_Tab%ROWTYPE );
   7.122 +
   7.123 +FUNCTION Get_Trigger_Name___(
   7.124 +   event_id_      IN VARCHAR2,
   7.125 +   trigger_type_  IN VARCHAR2 ) RETURN VARCHAR2;
   7.126 +
   7.127 +PROCEDURE Remove_Custom_Trigger___(
   7.128 +   rec_           IN     Fnd_Event_Tab%ROWTYPE,
   7.129 +   trigger_type_  IN     VARCHAR2 );
   7.130 +
   7.131 +PROCEDURE Remove_Custom_Triggers___(
   7.132 +   rec_ IN Fnd_Event_Tab%ROWTYPE );
   7.133 +
   7.134 +FUNCTION Create_Trigger_Name___ (
   7.135 +   event_id_ IN VARCHAR2 ) RETURN VARCHAR2;
   7.136 +-----------------------------------------------------------------------------
   7.137 +-------------------- IMPLEMENTATION BASE METHODS ----------------------------
   7.138 +-----------------------------------------------------------------------------
   7.139 +-- Lock_By_Id___
   7.140 +--    Client-support to lock a specific instance of the logical unit.
   7.141 +--
   7.142 +-- Lock_By_Keys___
   7.143 +--    Server support to lock a specific instance of the logical unit.
   7.144 +--
   7.145 +-- Get_Object_By_Id___
   7.146 +--    Get LU-record from the database with a specified object identity.
   7.147 +--
   7.148 +-- Get_Object_By_Keys___
   7.149 +--    Get LU-record from the database with specified key columns.
   7.150 +--
   7.151 +-- Check_Exist___
   7.152 +--    Check if a specific LU-instance already exist in the database.
   7.153 +--
   7.154 +-- Get_Id_Version_By_Keys___
   7.155 +--    Get the current OBJID and OBJVERSION for a specific LU-instance.
   7.156 +-----------------------------------------------------------------------------
   7.157 +
   7.158 +FUNCTION Lock_By_Id___ (
   7.159 +   objid_      IN  VARCHAR2,
   7.160 +   objversion_ IN  VARCHAR2 ) RETURN &TABLE%ROWTYPE
   7.161 +IS
   7.162 +   row_changed EXCEPTION;
   7.163 +   row_deleted EXCEPTION;
   7.164 +   row_locked  EXCEPTION;
   7.165 +   PRAGMA      exception_init(row_locked, -0054);
   7.166 +   rec_        &TABLE%ROWTYPE;
   7.167 +   dummy_      NUMBER;
   7.168 +   CURSOR lock_control IS
   7.169 +      SELECT *
   7.170 +      FROM   &TABLE
   7.171 +      WHERE  &OBJID = objid_
   7.172 +      AND    &OBJVERSION = objversion_
   7.173 +      FOR UPDATE NOWAIT;
   7.174 +   CURSOR exist_control IS
   7.175 +      SELECT 1
   7.176 +      FROM   &TABLE
   7.177 +      WHERE  &OBJID = objid_;
   7.178 +BEGIN
   7.179 +   OPEN lock_control;
   7.180 +   FETCH lock_control INTO rec_;
   7.181 +   IF (lock_control%FOUND) THEN
   7.182 +      CLOSE lock_control;
   7.183 +      RETURN rec_;
   7.184 +   END IF;
   7.185 +   CLOSE lock_control;
   7.186 +   OPEN exist_control;
   7.187 +   FETCH exist_control INTO dummy_;
   7.188 +   IF (exist_control%FOUND) THEN
   7.189 +      CLOSE exist_control;
   7.190 +      RAISE row_changed;
   7.191 +   ELSE
   7.192 +      CLOSE exist_control;
   7.193 +      RAISE row_deleted;
   7.194 +   END IF;
   7.195 +EXCEPTION
   7.196 +   WHEN row_locked THEN
   7.197 +      Error_SYS.Record_Locked(lu_name_);
   7.198 +   WHEN row_changed THEN
   7.199 +      Error_SYS.Record_Modified(lu_name_);
   7.200 +   WHEN row_deleted THEN
   7.201 +      Error_SYS.Record_Removed(lu_name_);
   7.202 +END Lock_By_Id___;
   7.203 +
   7.204 +FUNCTION Lock_By_Keys___ (
   7.205 +   event_lu_name_ IN VARCHAR2,
   7.206 +   event_id_      IN VARCHAR2 ) RETURN &TABLE%ROWTYPE
   7.207 +IS
   7.208 +   row_deleted EXCEPTION;
   7.209 +   rec_        &TABLE%ROWTYPE;
   7.210 +   CURSOR lock_control IS
   7.211 +      SELECT *
   7.212 +      FROM  &TABLE
   7.213 +      WHERE event_lu_name = event_lu_name_
   7.214 +      AND   event_id = event_id_
   7.215 +      FOR UPDATE;
   7.216 +BEGIN
   7.217 +   OPEN lock_control;
   7.218 +   FETCH lock_control INTO rec_;
   7.219 +   IF (lock_control%FOUND) THEN
   7.220 +      CLOSE lock_control;
   7.221 +      RETURN rec_;
   7.222 +   ELSE
   7.223 +      CLOSE lock_control;
   7.224 +      RAISE row_deleted;
   7.225 +   END IF;
   7.226 +EXCEPTION
   7.227 +   WHEN row_deleted THEN
   7.228 +      Error_SYS.Record_Removed(lu_name_);
   7.229 +END Lock_By_Keys___;
   7.230 +
   7.231 +FUNCTION Get_Object_By_Id___ (
   7.232 +   objid_ IN VARCHAR2 ) RETURN &TABLE%ROWTYPE
   7.233 +IS
   7.234 +   lu_rec_ &TABLE%ROWTYPE;
   7.235 +   CURSOR getrec IS
   7.236 +      SELECT *
   7.237 +      FROM   &TABLE
   7.238 +      WHERE  &OBJID = objid_;
   7.239 +BEGIN
   7.240 +   OPEN getrec;
   7.241 +   FETCH getrec INTO lu_rec_;
   7.242 +   IF (getrec%NOTFOUND) THEN
   7.243 +      CLOSE getrec;
   7.244 +      Error_SYS.Record_Removed(lu_name_);
   7.245 +   END IF;
   7.246 +   CLOSE getrec;
   7.247 +   RETURN(lu_rec_);
   7.248 +END Get_Object_By_Id___;
   7.249 +
   7.250 +
   7.251 +FUNCTION Get_Object_By_Keys___ (
   7.252 +   event_lu_name_ IN VARCHAR2,
   7.253 +   event_id_      IN VARCHAR2 ) RETURN &TABLE%ROWTYPE
   7.254 +IS
   7.255 +   lu_rec_ &TABLE%ROWTYPE;
   7.256 +   CURSOR getrec IS
   7.257 +      SELECT *
   7.258 +      FROM  &TABLE
   7.259 +      WHERE event_lu_name = event_lu_name_
   7.260 +      AND   event_id = event_id_;
   7.261 +BEGIN
   7.262 +   OPEN getrec;
   7.263 +   FETCH getrec INTO lu_rec_;
   7.264 +   CLOSE getrec;
   7.265 +   RETURN(lu_rec_);
   7.266 +END Get_Object_By_Keys___;
   7.267 +
   7.268 +FUNCTION Check_Exist___ (
   7.269 +   event_lu_name_ IN VARCHAR2,
   7.270 +   event_id_      IN VARCHAR2 ) RETURN BOOLEAN
   7.271 +IS
   7.272 +   dummy_ NUMBER;
   7.273 +   CURSOR exist_control IS
   7.274 +      SELECT 1
   7.275 +      FROM   &TABLE
   7.276 +      WHERE event_lu_name = event_lu_name_
   7.277 +      AND   event_id = event_id_;
   7.278 +BEGIN
   7.279 +   OPEN exist_control;
   7.280 +   FETCH exist_control INTO dummy_;
   7.281 +   IF (exist_control%FOUND) THEN
   7.282 +      CLOSE exist_control;
   7.283 +      RETURN(TRUE);
   7.284 +   END IF;
   7.285 +   CLOSE exist_control;
   7.286 +   RETURN(FALSE);
   7.287 +END Check_Exist___;
   7.288 +
   7.289 +PROCEDURE Get_Id_Version_By_Keys___ (
   7.290 +   objid_         IN OUT VARCHAR2,
   7.291 +   objversion_    IN OUT VARCHAR2,
   7.292 +   event_lu_name_ IN     VARCHAR2,
   7.293 +   event_id_      IN     VARCHAR2)
   7.294 +IS
   7.295 +   CURSOR get_version IS
   7.296 +      SELECT &OBJID, &OBJVERSION
   7.297 +      FROM  &TABLE
   7.298 +      WHERE event_lu_name = event_lu_name_
   7.299 +      AND   event_id = event_id_;
   7.300 +BEGIN
   7.301 +   OPEN get_version;
   7.302 +   FETCH get_version INTO objid_, objversion_;
   7.303 +   CLOSE get_version;
   7.304 +END Get_Id_Version_By_Keys___;
   7.305 +
   7.306 +-----------------------------------------------------------------------------
   7.307 +-------------------- IMPLEMENTATION BASE METHODS FOR INSERT -----------------
   7.308 +-----------------------------------------------------------------------------
   7.309 +-- Prepare_Insert___
   7.310 +--    Set all default values for a new instance (ON-NEW-RECORD) of this
   7.311 +--    logical unit by calling procedure Add_Attr.
   7.312 +--
   7.313 +-- Unpack_Check_Insert___
   7.314 +--    Unpack the attribute list, check all attributes from the client
   7.315 +--    and generate all default values before creation of the new object.
   7.316 +--
   7.317 +-- Insert___
   7.318 +--    Insert a new LU-instance into the database and return the values
   7.319 +--    for OBJID and OBJVERSION.
   7.320 +-----------------------------------------------------------------------------
   7.321 +
   7.322 +PROCEDURE Prepare_Insert___ (
   7.323 +   attr_ IN OUT VARCHAR2 )
   7.324 +IS
   7.325 +BEGIN
   7.326 +   Client_SYS.Clear_Attr(attr_);
   7.327 +   Client_SYS.Add_To_Attr('EVENT_TYPE_DB', 'CUSTOM', attr_);
   7.328 +   Client_SYS.Add_To_Attr('EVENT_TYPE', Fnd_Event_Type_API.Decode('CUSTOM'), attr_);
   7.329 +   Client_SYS.Add_To_Attr('NEW_ROW_DB', 'FALSE', attr_);
   7.330 +   Client_SYS.Add_To_Attr('NEW_ROW', Fnd_Boolean_API.Decode('FALSE'), attr_);
   7.331 +   Client_SYS.Add_To_Attr('MODIFY_ROW_DB', 'FALSE', attr_);
   7.332 +   Client_SYS.Add_To_Attr('MODIFY_ROW', Fnd_Boolean_API.Decode('FALSE'), attr_);
   7.333 +   Client_SYS.Add_To_Attr('REMOVE_ROW_DB', 'FALSE', attr_);
   7.334 +   Client_SYS.Add_To_Attr('REMOVE_ROW', Fnd_Boolean_API.Decode('FALSE'), attr_);
   7.335 +END Prepare_Insert___;
   7.336 +
   7.337 +
   7.338 +PROCEDURE Unpack_Check_Insert___ (
   7.339 +   attr_   IN OUT VARCHAR2,
   7.340 +   newrec_ IN OUT &TABLE%ROWTYPE )
   7.341 +IS
   7.342 +   ptr_   NUMBER;
   7.343 +   name_  VARCHAR2(30);
   7.344 +   value_ VARCHAR2(2000);
   7.345 +BEGIN
   7.346 +   ptr_ := NULL;
   7.347 +   WHILE (Client_SYS.Get_Next_From_Attr(attr_, ptr_, name_, value_)) LOOP
   7.348 +      IF (name_ = 'EVENT_LU_NAME') THEN
   7.349 +         newrec_.event_lu_name := value_;
   7.350 +      ELSIF (name_ = 'EVENT_ID') THEN
   7.351 +         newrec_.event_id := Upper(value_);
   7.352 +      ELSIF (name_ = 'EVENT_DESCRIPTION') THEN
   7.353 +         newrec_.event_description := value_;
   7.354 +      ELSIF (name_ = 'EVENT_ENABLE') THEN
   7.355 +         newrec_.event_enable := value_;
   7.356 +      ELSIF (name_ = 'EVENT_TABLE_NAME') THEN
   7.357 +         newrec_.event_table_name := value_;
   7.358 +      ELSIF (name_ = 'EVENT_TYPE') THEN
   7.359 +         newrec_.event_type := Fnd_Event_Type_API.Encode(value_);
   7.360 +         IF (value_ IS NOT NULL) THEN
   7.361 +            Fnd_Event_Type_API.Exist(value_);
   7.362 +         END IF;
   7.363 +      ELSIF (name_ = 'EVENT_TYPE_DB') THEN
   7.364 +         newrec_.event_type := value_;
   7.365 +         IF (value_ IS NOT NULL) THEN
   7.366 +            Fnd_Event_Type_API.Exist_Db(value_);
   7.367 +         END IF;
   7.368 +      ELSIF (name_ = 'MODIFIED_ATTRIBUTES') THEN
   7.369 +         newrec_.modified_attributes := value_;
   7.370 +      ELSIF (name_ = 'NEW_ROW') THEN
   7.371 +         newrec_.new_row := Fnd_Boolean_API.Encode(value_);
   7.372 +         IF (value_ IS NOT NULL) THEN
   7.373 +            Fnd_Boolean_API.Exist(value_);
   7.374 +         END IF;
   7.375 +      ELSIF (name_ = 'NEW_ROW_DB') THEN
   7.376 +         newrec_.new_row := value_;
   7.377 +         IF (value_ IS NOT NULL) THEN
   7.378 +            Fnd_Boolean_API.Exist_Db(value_);
   7.379 +         END IF;
   7.380 +      ELSIF (name_ = 'MODIFY_ROW') THEN
   7.381 +         newrec_.modify_row := Fnd_Boolean_API.Encode(value_);
   7.382 +         IF (value_ IS NOT NULL) THEN
   7.383 +            Fnd_Boolean_API.Exist(value_);
   7.384 +         END IF;
   7.385 +      ELSIF (name_ = 'MODIFY_ROW_DB') THEN
   7.386 +         newrec_.modify_row := value_;
   7.387 +         IF (value_ IS NOT NULL) THEN
   7.388 +            Fnd_Boolean_API.Exist_Db(value_);
   7.389 +         END IF;
   7.390 +      ELSIF (name_ = 'REMOVE_ROW') THEN
   7.391 +         newrec_.remove_row := Fnd_Boolean_API.Encode(value_);
   7.392 +         IF (value_ IS NOT NULL) THEN
   7.393 +            Fnd_Boolean_API.Exist(value_);
   7.394 +         END IF;
   7.395 +      ELSIF (name_ = 'REMOVE_ROW_DB') THEN
   7.396 +         newrec_.remove_row := value_;
   7.397 +         IF (value_ IS NOT NULL) THEN
   7.398 +            Fnd_Boolean_API.Exist_Db(value_);
   7.399 +         END IF;
   7.400 +      ELSE
   7.401 +         Error_SYS.Item_Not_Exist(lu_name_, name_, value_);
   7.402 +      END IF;
   7.403 +   END LOOP;
   7.404 +   Client_SYS.Clear_Attr(attr_);
   7.405 +   Error_SYS.Check_Not_Null(lu_name_, 'EVENT_LU_NAME', newrec_.event_lu_name);
   7.406 +   Error_SYS.Check_Not_Null(lu_name_, 'EVENT_ID', newrec_.event_id);
   7.407 +   Error_SYS.Check_Valid_Identifier('EVENT_ID', newrec_.event_id); 
   7.408 +   Error_SYS.Check_Not_Null(lu_name_, 'EVENT_TYPE', newrec_.event_type);
   7.409 +   Error_SYS.Check_Not_Null(lu_name_, 'NEW_ROW', newrec_.new_row);
   7.410 +   Error_SYS.Check_Not_Null(lu_name_, 'MODIFY_ROW', newrec_.modify_row);
   7.411 +   Error_SYS.Check_Not_Null(lu_name_, 'REMOVE_ROW', newrec_.remove_row);
   7.412 +EXCEPTION
   7.413 +   WHEN value_error THEN
   7.414 +      Error_SYS.Item_Format(lu_name_, name_, value_);
   7.415 +END Unpack_Check_Insert___;
   7.416 +
   7.417 +
   7.418 +PROCEDURE Insert___ (
   7.419 +   objid_      OUT    VARCHAR2,
   7.420 +   objversion_ OUT    VARCHAR2,
   7.421 +   newrec_     IN OUT &TABLE%ROWTYPE,
   7.422 +   attr_       IN OUT VARCHAR2 )
   7.423 +IS
   7.424 +BEGIN
   7.425 +   newrec_.rowversion := sysdate;
   7.426 +   objversion_ := to_char(newrec_.rowversion,'YYYYMMDDHH24MISS');
   7.427 +   --
   7.428 +   IF (nvl(newrec_.event_enable, 'FALSE') = 'TRUE') THEN
   7.429 +      Error_SYS.Appl_General(lu_name_, 'ENERR_I: Can not enable event with no actions enabled.');
   7.430 +   END IF;
   7.431 +   --
   7.432 +   INSERT
   7.433 +      INTO fnd_event_tab (
   7.434 +         event_lu_name,
   7.435 +         event_id,
   7.436 +         event_description,
   7.437 +         event_enable,
   7.438 +         event_table_name,
   7.439 +         event_type,
   7.440 +         modified_attributes,
   7.441 +         new_row,
   7.442 +         modify_row,
   7.443 +         remove_row,
   7.444 +         rowversion)
   7.445 +      VALUES (
   7.446 +         newrec_.event_lu_name,
   7.447 +         newrec_.event_id,
   7.448 +         newrec_.event_description,
   7.449 +         newrec_.event_enable,
   7.450 +         newrec_.event_table_name,
   7.451 +         newrec_.event_type,
   7.452 +         newrec_.modified_attributes,
   7.453 +         newrec_.new_row,
   7.454 +         newrec_.modify_row,
   7.455 +         newrec_.remove_row,
   7.456 +         newrec_.rowversion)
   7.457 +   RETURNING &OBJID INTO objid_;
   7.458 +   -- Create Custom Defined triggers
   7.459 +   IF (newrec_.event_type = 'CUSTOM') THEN
   7.460 +      IF (newrec_.event_enable = 'TRUE') THEN
   7.461 +         Create_Custom_Triggers___(newrec_);
   7.462 +      END IF;
   7.463 +   END IF;
   7.464 +EXCEPTION
   7.465 +   WHEN dup_val_on_index THEN
   7.466 +      Error_SYS.Record_Exist(lu_name_);
   7.467 +END Insert___;
   7.468 +
   7.469 +-----------------------------------------------------------------------------
   7.470 +-------------------- IMPLEMENTATION BASE METHODS FOR UPDATE -----------------
   7.471 +-----------------------------------------------------------------------------
   7.472 +-- Unpack_Check_Update___
   7.473 +--    Unpack the attribute list, check all attributes from the client
   7.474 +--    and generate all default values before modifying the object.
   7.475 +--
   7.476 +-- Update___
   7.477 +--    Update an existing LU-instance in the database and return the
   7.478 +--    the new OBJVERSION.
   7.479 +-----------------------------------------------------------------------------
   7.480 +
   7.481 +PROCEDURE Unpack_Check_Update___ (
   7.482 +   attr_   IN OUT VARCHAR2,
   7.483 +   newrec_ IN OUT &TABLE%ROWTYPE,
   7.484 +   objid_  IN     VARCHAR2 )
   7.485 +IS
   7.486 +   ptr_   NUMBER;
   7.487 +   name_  VARCHAR2(30);
   7.488 +   value_ VARCHAR2(2000);
   7.489 +BEGIN
   7.490 +   ptr_ := NULL;
   7.491 +   WHILE (Client_SYS.Get_Next_From_Attr(attr_, ptr_, name_, value_)) LOOP
   7.492 +      IF (name_ = 'EVENT_LU_NAME') THEN
   7.493 +         Error_SYS.Item_Update(lu_name_, 'EVENT_LU_NAME');
   7.494 +      ELSIF (name_ = 'EVENT_ID') THEN
   7.495 +         Error_SYS.Item_Update(lu_name_, 'EVENT_ID');
   7.496 +      ELSIF (name_ = 'EVENT_DESCRIPTION') THEN
   7.497 +         newrec_.event_description := value_;
   7.498 +      ELSIF (name_ = 'EVENT_ENABLE') THEN
   7.499 +         newrec_.event_enable := value_;
   7.500 +      ELSIF (name_ = 'EVENT_TABLE_NAME') THEN
   7.501 +         newrec_.event_table_name := value_;
   7.502 +      ELSIF (name_ = 'EVENT_TYPE') THEN
   7.503 +         newrec_.event_type := Fnd_Event_Type_API.Encode(value_);
   7.504 +         IF (value_ IS NOT NULL) THEN
   7.505 +            Fnd_Event_Type_API.Exist(value_);
   7.506 +         END IF;
   7.507 +      ELSIF (name_ = 'EVENT_TYPE_DB') THEN
   7.508 +         newrec_.event_type := value_;
   7.509 +         IF (value_ IS NOT NULL) THEN
   7.510 +            Fnd_Event_Type_API.Exist_Db(value_);
   7.511 +         END IF;
   7.512 +      ELSIF (name_ = 'MODIFIED_ATTRIBUTES') THEN
   7.513 +         newrec_.modified_attributes := value_;
   7.514 +      ELSIF (name_ = 'NEW_ROW') THEN
   7.515 +         newrec_.new_row := Fnd_Boolean_API.Encode(value_);
   7.516 +         IF (value_ IS NOT NULL) THEN
   7.517 +            Fnd_Boolean_API.Exist(value_);
   7.518 +         END IF;
   7.519 +      ELSIF (name_ = 'NEW_ROW_DB') THEN
   7.520 +         newrec_.new_row := value_;
   7.521 +         IF (value_ IS NOT NULL) THEN
   7.522 +            Fnd_Boolean_API.Exist_Db(value_);
   7.523 +         END IF;
   7.524 +      ELSIF (name_ = 'MODIFY_ROW') THEN
   7.525 +         newrec_.modify_row := Fnd_Boolean_API.Encode(value_);
   7.526 +         IF (value_ IS NOT NULL) THEN
   7.527 +            Fnd_Boolean_API.Exist(value_);
   7.528 +         END IF;
   7.529 +      ELSIF (name_ = 'MODIFY_ROW_DB') THEN
   7.530 +         newrec_.modify_row := value_;
   7.531 +         IF (value_ IS NOT NULL) THEN
   7.532 +            Fnd_Boolean_API.Exist_Db(value_);
   7.533 +         END IF;
   7.534 +      ELSIF (name_ = 'REMOVE_ROW') THEN
   7.535 +         newrec_.remove_row := Fnd_Boolean_API.Encode(value_);
   7.536 +         IF (value_ IS NOT NULL) THEN
   7.537 +            Fnd_Boolean_API.Exist(value_);
   7.538 +         END IF;
   7.539 +      ELSIF (name_ = 'REMOVE_ROW_DB') THEN
   7.540 +         newrec_.remove_row := value_;
   7.541 +         IF (value_ IS NOT NULL) THEN
   7.542 +            Fnd_Boolean_API.Exist_Db(value_);
   7.543 +         END IF;
   7.544 +      ELSE
   7.545 +         Error_SYS.Item_Not_Exist(lu_name_, name_, value_);
   7.546 +      END IF;
   7.547 +   END LOOP;
   7.548 +   Client_SYS.Clear_Attr(attr_);
   7.549 +   Error_SYS.Check_Not_Null(lu_name_, 'EVENT_TYPE', newrec_.event_type);
   7.550 +   Error_SYS.Check_Not_Null(lu_name_, 'NEW_ROW', newrec_.new_row);
   7.551 +   Error_SYS.Check_Not_Null(lu_name_, 'MODIFY_ROW', newrec_.modify_row);
   7.552 +   Error_SYS.Check_Not_Null(lu_name_, 'REMOVE_ROW', newrec_.remove_row);
   7.553 +EXCEPTION
   7.554 +   WHEN value_error THEN
   7.555 +      Error_SYS.Item_Format(lu_name_, name_, value_);
   7.556 +END Unpack_Check_Update___;
   7.557 +
   7.558 +
   7.559 +PROCEDURE Update___ (
   7.560 +   objid_      IN     VARCHAR2,
   7.561 +   oldrec_     IN     &TABLE%ROWTYPE,
   7.562 +   newrec_     IN OUT &TABLE%ROWTYPE,
   7.563 +   attr_       IN OUT VARCHAR2,
   7.564 +   objversion_ IN OUT VARCHAR2,
   7.565 +   by_keys_    IN BOOLEAN DEFAULT FALSE )
   7.566 +IS
   7.567 +   dummy_ NUMBER;
   7.568 +
   7.569 +   CURSOR get_event_count IS
   7.570 +   SELECT COUNT(*)
   7.571 +     FROM fnd_event_action_tab
   7.572 +     WHERE event_lu_name = newrec_.event_lu_name
   7.573 +     AND   event_id = newrec_.event_id
   7.574 +     AND   action_enable = 'TRUE';
   7.575 +BEGIN
   7.576 +   IF (nvl(oldrec_.event_enable, 'FALSE') = 'FALSE' AND newrec_.event_enable = 'TRUE') THEN
   7.577 +      OPEN  get_event_count;
   7.578 +      FETCH get_event_count INTO dummy_;
   7.579 +      CLOSE get_event_count;
   7.580 +      IF (dummy_ = 0) THEN
   7.581 +         Error_SYS.Appl_General(lu_name_, 'ENERR_U: Can not enable event with no actions enabled.');
   7.582 +      END IF;
   7.583 +   END IF;
   7.584 +   --
   7.585 +   newrec_.rowversion := sysdate;
   7.586 +   objversion_ := to_char(newrec_.rowversion,'YYYYMMDDHH24MISS');
   7.587 +   IF by_keys_ THEN
   7.588 +      UPDATE fnd_event_tab
   7.589 +      SET event_lu_name = newrec_.event_lu_name,
   7.590 +          event_id = newrec_.event_id,
   7.591 +          event_description = newrec_.event_description,
   7.592 +          event_enable = newrec_.event_enable,
   7.593 +          event_table_name = newrec_.event_table_name,
   7.594 +          event_type = newrec_.event_type,
   7.595 +          modified_attributes = newrec_.modified_attributes,
   7.596 +          new_row = newrec_.new_row,
   7.597 +          modify_row = newrec_.modify_row,
   7.598 +          remove_row = newrec_.remove_row,
   7.599 +          rowversion = newrec_.rowversion
   7.600 +      WHERE event_lu_name = newrec_.event_lu_name
   7.601 +      AND   event_id = newrec_.event_id;
   7.602 +   ELSE
   7.603 +      UPDATE fnd_event_tab
   7.604 +      SET event_lu_name = newrec_.event_lu_name,
   7.605 +          event_id = newrec_.event_id,
   7.606 +          event_description = newrec_.event_description,
   7.607 +          event_enable = newrec_.event_enable,
   7.608 +          event_table_name = newrec_.event_table_name,
   7.609 +          event_type = newrec_.event_type,
   7.610 +          modified_attributes = newrec_.modified_attributes,
   7.611 +          new_row = newrec_.new_row,
   7.612 +          modify_row = newrec_.modify_row,
   7.613 +          remove_row = newrec_.remove_row,
   7.614 +          rowversion = newrec_.rowversion
   7.615 +      WHERE &OBJID = objid_;
   7.616 +   END IF;
   7.617 +   -- Create/remove Custom Defined triggers
   7.618 +   IF (newrec_.event_type = 'CUSTOM') THEN
   7.619 +      IF (newrec_.event_enable = 'TRUE') THEN
   7.620 +         Remove_Custom_Triggers___(oldrec_);
   7.621 +         Create_Custom_Triggers___(newrec_);
   7.622 +      ELSE
   7.623 +         Remove_Custom_Triggers___(oldrec_);
   7.624 +      END IF;
   7.625 +   END IF;
   7.626 +EXCEPTION
   7.627 +   WHEN dup_val_on_index THEN
   7.628 +      Error_SYS.Record_Exist(lu_name_);
   7.629 +END Update___;
   7.630 +
   7.631 +-----------------------------------------------------------------------------
   7.632 +-------------------- IMPLEMENTATION BASE METHODS FOR DELETE -----------------
   7.633 +-----------------------------------------------------------------------------
   7.634 +-- Check_Delete___
   7.635 +--    Checks whether a specific LU-record may be removed or not.
   7.636 +--    The procedure should check business rules like attribute values
   7.637 +--    as well as database constraints (defined or not).
   7.638 +--
   7.639 +-- Delete___
   7.640 +--    Deletion of the specific LU-object from the database.
   7.641 +-----------------------------------------------------------------------------
   7.642 +
   7.643 +PROCEDURE Check_Delete___ (
   7.644 +   remrec_ IN &TABLE%ROWTYPE )
   7.645 +IS
   7.646 +   key_ VARCHAR2(2000);
   7.647 +BEGIN
   7.648 +   key_ := remrec_.event_lu_name || '^' || remrec_.event_id || '^';
   7.649 +   Reference_SYS.Check_Restricted_Delete(lu_name_, key_);
   7.650 +END Check_Delete___;
   7.651 +
   7.652 +
   7.653 +PROCEDURE Delete___ (
   7.654 +   objid_  IN VARCHAR2,
   7.655 +   remrec_ IN &TABLE%ROWTYPE )
   7.656 +IS
   7.657 +   key_ VARCHAR2(2000);
   7.658 +BEGIN
   7.659 +   key_ := remrec_.event_lu_name || '^' || remrec_.event_id || '^';
   7.660 +   Reference_SYS.Do_Cascade_Delete(lu_name_, key_);
   7.661 +   DELETE
   7.662 +      FROM  fnd_event_tab
   7.663 +      WHERE &OBJID = objid_;
   7.664 +   -- Remove Custom Defined triggers
   7.665 +   IF (remrec_.event_type = 'CUSTOM') THEN
   7.666 +      Remove_Custom_Triggers___(remrec_);
   7.667 +   END IF;
   7.668 +END Delete___;
   7.669 +
   7.670 +-----------------------------------------------------------------------------
   7.671 +-------------------- PRIVATE BASE METHODS -----------------------------------
   7.672 +-----------------------------------------------------------------------------
   7.673 +-- Lock__
   7.674 +--    Client-support to lock a specific instance of the logical unit.
   7.675 +--
   7.676 +-- New__
   7.677 +--    Client-support interface to create LU instances.
   7.678 +--       action_ = 'PREPARE'
   7.679 +--          Default values and handle of information to client.
   7.680 +--          The default values are set in procedure Prepare_Insert___.
   7.681 +--       action_ = 'CHECK'
   7.682 +--          Check all attributes before creating new object and handle of
   7.683 +--          information to client. The attribute list is unpacked, checked
   7.684 +--          and prepared (defaults) in procedure Unpack_Check_Insert___.
   7.685 +--       action_ = 'DO'
   7.686 +--          Creation of new instances of the logical unit and handle of
   7.687 +--          information to client. The attribute list is unpacked, checked
   7.688 +--          and prepared (defaults) in procedure Unpack_Check_Insert___
   7.689 +--          before calling procedure Insert___.
   7.690 +--
   7.691 +-- Modify__
   7.692 +--    Client-support interface to modify attributes for LU instances.
   7.693 +--       action_ = 'CHECK'
   7.694 +--          Check all attributes before modifying an existing object and
   7.695 +--          handle of information to client. The attribute list is unpacked,
   7.696 +--          checked and prepared(defaults) in procedure Unpack_Check_Update___.
   7.697 +--       action_ = 'DO'
   7.698 +--          Modification of an existing instance of the logical unit. The
   7.699 +--          procedure unpacks the attributes, checks all values before
   7.700 +--          procedure Update___ is called.
   7.701 +--
   7.702 +-- Remove__
   7.703 +--    Client-support interface to remove LU instances.
   7.704 +--       action_ = 'CHECK'
   7.705 +--          Check whether a specific LU-instance may be removed or not.
   7.706 +--          The procedure fetches the complete record by calling procedure
   7.707 +--          Get_Object_By_Id___. Then the check is made by calling procedure
   7.708 +--          Check_Delete___.
   7.709 +--       action_ = 'DO'
   7.710 +--          Remove an existing instance of the logical unit. The procedure
   7.711 +--          fetches the complete LU-record, checks for a delete and then
   7.712 +--          deletes the record by calling procedure Delete___.
   7.713 +-----------------------------------------------------------------------------
   7.714 +
   7.715 +PROCEDURE Lock__ (
   7.716 +   info_       OUT VARCHAR2,
   7.717 +   objid_      IN  VARCHAR2,
   7.718 +   objversion_ IN  VARCHAR2 )
   7.719 +IS
   7.720 +   dummy_ &TABLE%ROWTYPE;
   7.721 +BEGIN
   7.722 +   General_SYS.Init_Method(lu_name_, '&PKG', 'Lock__');
   7.723 +   dummy_ := Lock_By_Id___(objid_, objversion_);
   7.724 +   info_ := Client_SYS.Get_All_Info;
   7.725 +END Lock__;
   7.726 +
   7.727 +
   7.728 +PROCEDURE New__ (
   7.729 +   info_       OUT    VARCHAR2,
   7.730 +   objid_      OUT    VARCHAR2,
   7.731 +   objversion_ OUT    VARCHAR2,
   7.732 +   attr_       IN OUT VARCHAR2,
   7.733 +   action_     IN     VARCHAR2 )
   7.734 +IS
   7.735 +   newrec_ &TABLE%ROWTYPE;
   7.736 +BEGIN
   7.737 +   General_SYS.Init_Method(lu_name_, '&PKG', 'New__');
   7.738 +   IF (action_ = 'PREPARE') THEN
   7.739 +      Prepare_Insert___(attr_);
   7.740 +   ELSIF (action_ = 'CHECK') THEN
   7.741 +      Unpack_Check_Insert___(attr_, newrec_);
   7.742 +   ELSIF (action_ = 'DO') THEN
   7.743 +      Unpack_Check_Insert___(attr_, newrec_);
   7.744 +      Insert___(objid_, objversion_, newrec_, attr_);
   7.745 +   END IF;
   7.746 +   info_ := Client_SYS.Get_All_Info;
   7.747 +END New__;
   7.748 +
   7.749 +
   7.750 +PROCEDURE Modify__ (
   7.751 +   info_       OUT    VARCHAR2,
   7.752 +   objid_      IN     VARCHAR2,
   7.753 +   objversion_ IN OUT VARCHAR2,
   7.754 +   attr_       IN OUT VARCHAR2,
   7.755 +   action_     IN     VARCHAR2 )
   7.756 +IS
   7.757 +   oldrec_ &TABLE%ROWTYPE;
   7.758 +   newrec_ &TABLE%ROWTYPE;
   7.759 +BEGIN
   7.760 +   General_SYS.Init_Method(lu_name_, '&PKG', 'Modify__');
   7.761 +   IF (action_ = 'CHECK') THEN
   7.762 +      newrec_ := Get_Object_By_Id___(objid_);
   7.763 +      Unpack_Check_Update___(attr_, newrec_, objid_);
   7.764 +   ELSIF (action_ = 'DO') THEN
   7.765 +      oldrec_ := Lock_By_Id___(objid_, objversion_);
   7.766 +      newrec_ := oldrec_;
   7.767 +      Unpack_Check_Update___(attr_, newrec_, objid_);
   7.768 +      Update___(objid_, oldrec_, newrec_, attr_, objversion_);
   7.769 +   END IF;
   7.770 +   info_ := Client_SYS.Get_All_Info;
   7.771 +END Modify__;
   7.772 +
   7.773 +
   7.774 +PROCEDURE Remove__ (
   7.775 +   info_       OUT VARCHAR2,
   7.776 +   objid_      IN  VARCHAR2,
   7.777 +   objversion_ IN  VARCHAR2,
   7.778 +   action_     IN  VARCHAR2 )
   7.779 +IS
   7.780 +   remrec_ &TABLE%ROWTYPE;
   7.781 +BEGIN
   7.782 +   General_SYS.Init_Method(lu_name_, '&PKG', 'Remove__');
   7.783 +   IF (action_ = 'CHECK') THEN
   7.784 +      remrec_ := Get_Object_By_Id___(objid_);
   7.785 +      Check_Delete___(remrec_);
   7.786 +   ELSIF (action_ = 'DO') THEN
   7.787 +      remrec_ := Lock_By_Id___(objid_, objversion_);
   7.788 +      Check_Delete___(remrec_);
   7.789 +      Delete___(objid_, remrec_);
   7.790 +   END IF;
   7.791 +   info_ := Client_SYS.Get_All_Info;
   7.792 +END Remove__;
   7.793 +
   7.794 +-----------------------------------------------------------------------------
   7.795 +-------------------- PUBLIC BASE METHODS ------------------------------------
   7.796 +-----------------------------------------------------------------------------
   7.797 +-- Exist
   7.798 +--   Checks if given pointer (e.g. primary key) to an instance of this
   7.799 +--   logical unit exists. If not an exception will be raised.
   7.800 +-----------------------------------------------------------------------------
   7.801 +
   7.802 +PROCEDURE Exist (
   7.803 +   event_lu_name_ IN VARCHAR2,
   7.804 +   event_id_      IN VARCHAR2 )
   7.805 +IS
   7.806 +BEGIN
   7.807 +   General_SYS.Init_Method(lu_name_, '&PKG', 'Exist', TRUE);
   7.808 +   IF (NOT Check_Exist___(event_lu_name_, event_id_)) THEN
   7.809 +      Error_SYS.Record_Not_Exist(lu_name_);
   7.810 +   END IF;
   7.811 +END Exist;
   7.812 +
   7.813 +-----------------------------------------------------------------------------
   7.814 +-------------------- LU SPECIFIC IMPLEMENTATION METHODS ---------------------
   7.815 +-----------------------------------------------------------------------------
   7.816 +
   7.817 +PROCEDURE Create_Custom_Triggers___(
   7.818 +   rec_ IN Fnd_Event_Tab%ROWTYPE )
   7.819 +IS
   7.820 +BEGIN
   7.821 +   General_SYS.Init_Method(lu_name_, '&PKG', 'Create_Custom_Triggers___', TRUE);
   7.822 +   -- Create triggers per type (New, Modify, Remove)
   7.823 +   IF (rec_.new_row = 'TRUE') THEN
   7.824 +      Create_Custom_Trigger___(rec_, 'NEW');
   7.825 +   END IF;
   7.826 +   IF (rec_.modify_row = 'TRUE') THEN
   7.827 +      Create_Custom_Trigger___(rec_, 'MODIFY');
   7.828 +   END IF;
   7.829 +   IF (rec_.remove_row = 'TRUE') THEN
   7.830 +      Create_Custom_Trigger___(rec_, 'REMOVE');
   7.831 +   END IF;
   7.832 +END Create_Custom_Triggers___;
   7.833 +
   7.834 +PROCEDURE Create_Custom_Trigger___(
   7.835 +   rec_           IN     Fnd_Event_Tab%ROWTYPE,
   7.836 +   trigger_type_  IN     VARCHAR2 )
   7.837 +IS
   7.838 +   columns_             Installation_SYS.ColumnTabType;
   7.839 +   stmt_                VARCHAR2(32000);
   7.840 +   old_param_prefix_    VARCHAR2(10);
   7.841 +   new_param_prefix_    VARCHAR2(10);
   7.842 +   format_prefix_       VARCHAR2(30);
   7.843 +   format_postfix_      VARCHAR2(30);
   7.844 +   if_stmt_start_       VARCHAR2(32000);
   7.845 +   if_stmt_end_         VARCHAR2(32000);
   7.846 +   indent_              NUMBER;
   7.847 +   --
   7.848 +   CURSOR get_param IS
   7.849 +   SELECT *
   7.850 +     FROM fnd_event_parameter_tab
   7.851 +    WHERE event_lu_name = rec_.event_lu_name
   7.852 +      AND event_id = rec_.event_id;
   7.853 +   --
   7.854 +   FUNCTION space___ (
   7.855 +      indent_  IN NUMBER ) RETURN VARCHAR2
   7.856 +   IS
   7.857 +      string_  VARCHAR2(100);
   7.858 +   BEGIN
   7.859 +      RETURN(lpad(string_, indent_ * 3));
   7.860 +   END space___;
   7.861 +   --
   7.862 +   FUNCTION Get_Dml_Event___(
   7.863 +      trigger_type_        IN VARCHAR2 ) RETURN VARCHAR2
   7.864 +   IS
   7.865 +   BEGIN
   7.866 +      CASE trigger_type_
   7.867 +         WHEN 'NEW' THEN
   7.868 +            RETURN('INSERT');
   7.869 +         WHEN 'MODIFY' THEN
   7.870 +            RETURN('UPDATE');
   7.871 +         WHEN 'REMOVE' THEN
   7.872 +            RETURN('DELETE');
   7.873 +      END CASE;
   7.874 +   END Get_Dml_Event___;
   7.875 +   --
   7.876 +   FUNCTION Get_Columns___ (
   7.877 +      column_list_ IN VARCHAR2 ) RETURN Installation_SYS.ColumnTabType
   7.878 +   IS
   7.879 +      pos_              BINARY_INTEGER       := 1;
   7.880 +      start_            BINARY_INTEGER       := 1;
   7.881 +      tmp_column_list_  VARCHAR2(32000)      := column_list_;
   7.882 +      separator_        CONSTANT VARCHAR2(2) := ';';
   7.883 +      column_name_      VARCHAR2(30);
   7.884 +      columns_          Installation_SYS.ColumnTabType;
   7.885 +   BEGIN
   7.886 +      IF column_list_ IS NULL THEN
   7.887 +         RETURN(columns_);
   7.888 +      END IF;
   7.889 +      -- Find all attributes in Search Domain Title
   7.890 +      pos_ := Instr(tmp_column_list_, separator_, pos_);
   7.891 +      LOOP
   7.892 +         -- Find column name
   7.893 +         column_name_ := Substr(tmp_column_list_, start_, pos_ - start_);
   7.894 +         IF column_name_ IS NOT NULL THEN
   7.895 +            Installation_SYS.Set_Table_Column(columns_, column_name_);
   7.896 +         END IF;
   7.897 +         -- Find new attribute
   7.898 +         start_ := pos_ + 1;
   7.899 +         pos_   := Instr(tmp_column_list_, separator_, start_);
   7.900 +         IF pos_ = 0 THEN
   7.901 +            pos_ := length(tmp_column_list_);
   7.902 +            -- Find column name
   7.903 +            column_name_ := Substr(tmp_column_list_, start_);
   7.904 +            Installation_SYS.Set_Table_Column(columns_, column_name_);
   7.905 +            EXIT;
   7.906 +         END IF;
   7.907 +      END LOOP;
   7.908 +      RETURN(columns_);
   7.909 +   END Get_Columns___;
   7.910 +   --
   7.911 +   FUNCTION Create_If_Stmt___ (
   7.912 +      column_list_ IN VARCHAR2 ) RETURN VARCHAR2
   7.913 +   IS
   7.914 +      found_            BOOLEAN              := FALSE;
   7.915 +      i_                BINARY_INTEGER       := 0;
   7.916 +      pos_              BINARY_INTEGER       := 1;
   7.917 +      start_            BINARY_INTEGER       := 1;
   7.918 +      tmp_column_list_  VARCHAR2(32000)      := column_list_;
   7.919 +      stmt_             VARCHAR2(32000);
   7.920 +      separator_        CONSTANT VARCHAR2(2) := ';';
   7.921 +      column_name_      VARCHAR2(30);
   7.922 +   BEGIN
   7.923 +      IF column_list_ IS NULL THEN
   7.924 +         RETURN(NULL);
   7.925 +      END IF;
   7.926 +      -- Find all attributes in Search Domain Title
   7.927 +      pos_ := Instr(tmp_column_list_, separator_, pos_);
   7.928 +      i_   := i_ + 1;
   7.929 +      IF (tmp_column_list_ IS NOT NULL) THEN
   7.930 +         stmt_ := stmt_ || 'IF ';
   7.931 +      END IF;
   7.932 +      LOOP
   7.933 +         IF (i_ > 1) THEN
   7.934 +            stmt_ := stmt_||space___(indent_)||' OR ';
   7.935 +         END IF;
   7.936 +         -- Find column name
   7.937 +         column_name_ := Substr(tmp_column_list_, start_, pos_ - start_);
   7.938 +         IF column_name_ IS NOT NULL THEN
   7.939 +            found_   := TRUE;
   7.940 +            indent_  := indent_ + 1;
   7.941 +            stmt_    := stmt_ ||space___(indent_)||'(:NEW.'||column_name_||' != '||':OLD.'||column_name_||') OR ((:NEW.'||column_name_||' IS NULL) AND ('||':old.'||column_name_||' IS NOT NULL)) OR ((:new.'||column_name_||' IS NOT NULL) AND ('||':OLD.'||column_name_||' IS NULL))';
   7.942 +         END IF;
   7.943 +         -- Find new attribute
   7.944 +         start_ := pos_ + 1;
   7.945 +         pos_   := Instr(tmp_column_list_, separator_, start_);
   7.946 +         i_     := i_ + 1;
   7.947 +         IF pos_ = 0 THEN
   7.948 +            IF (i_ > 1 AND found_) THEN
   7.949 +               stmt_ := stmt_||space___(indent_)||' OR ';
   7.950 +            END IF;
   7.951 +            pos_ := length(tmp_column_list_);
   7.952 +            -- Find column name
   7.953 +            column_name_ := Substr(tmp_column_list_, start_);
   7.954 +            stmt_ := stmt_ ||space___(indent_)||'(:NEW.'||column_name_||' != '||':OLD.'||column_name_||') OR ((:NEW.'||column_name_||' IS NULL) AND ('||':OLD.'||column_name_||' IS NOT NULL)) OR ((:NEW.'||column_name_||' IS NOT NULL) AND ('||':OLD.'||column_name_||' IS NULL))';
   7.955 +            stmt_ := stmt_||space___(indent_)||' THEN ';
   7.956 +            EXIT;
   7.957 +         END IF;
   7.958 +      END LOOP;
   7.959 +      RETURN(stmt_);
   7.960 +   END Create_If_Stmt___;
   7.961 +   --
   7.962 +   FUNCTION Replace_Parameter___ (
   7.963 +      plsql_method_ IN VARCHAR2 ) RETURN VARCHAR2
   7.964 +   IS
   7.965 +      pos_              BINARY_INTEGER       := 1;
   7.966 +      method_           VARCHAR2(32000)      := plsql_method_;
   7.967 +      param_marker_     CONSTANT VARCHAR2(2) := chr(38);
   7.968 +      --
   7.969 +      CURSOR get_param IS
   7.970 +      SELECT *
   7.971 +        FROM fnd_event_parameter_tab
   7.972 +       WHERE event_lu_name = rec_.event_lu_name
   7.973 +         AND event_id = rec_.event_id;
   7.974 +   BEGIN
   7.975 +      pos_ := Instr(method_, param_marker_);
   7.976 +      IF (pos_ = 0) THEN
   7.977 +         RETURN(method_);
   7.978 +      END IF;
   7.979 +      -- Replace all parameters used as parameters to PL/SQL method
   7.980 +      FOR par IN get_param LOOP
   7.981 +         IF par.current_value = 'TRUE' THEN
   7.982 +            method_ := replace(method_, param_marker_||'OLD:'||par.id, old_param_prefix_||par.id);
   7.983 +         END IF;
   7.984 +         IF par.new_value = 'TRUE' THEN
   7.985 +            method_ := replace(method_, param_marker_||'NEW:'||par.id, new_param_prefix_||par.id);
   7.986 +         END IF;
   7.987 +         pos_ := Instr(method_, param_marker_);
   7.988 +         IF pos_ = 0 THEN
   7.989 +            RETURN(method_);
   7.990 +         END IF;
   7.991 +      END LOOP;
   7.992 +      RETURN(method_);
   7.993 +   END Replace_Parameter___;
   7.994 +BEGIN
   7.995 +   General_SYS.Init_Method(lu_name_, '&PKG', 'Create_Custom_Trigger___', TRUE);
   7.996 +   indent_ := 1;
   7.997 +   CASE trigger_type_
   7.998 +      WHEN 'NEW' THEN
   7.999 +         new_param_prefix_ := ':NEW.';
  7.1000 +         old_param_prefix_ := ':OLD.';
  7.1001 +      WHEN 'MODIFY' THEN
  7.1002 +         new_param_prefix_ := ':NEW.';
  7.1003 +         old_param_prefix_ := ':OLD.';
  7.1004 +         -- Build If statement for modify
  7.1005 +         if_stmt_start_ := Create_If_Stmt___(rec_.modified_attributes);
  7.1006 +         IF (if_stmt_start_ IS NOT NULL) THEN
  7.1007 +            indent_        := 1;
  7.1008 +            if_stmt_end_   := 'END IF; ';
  7.1009 +         ELSE
  7.1010 +            indent_        := 0;
  7.1011 +            if_stmt_end_   := NULL;
  7.1012 +         END IF;
  7.1013 +         stmt_ := if_stmt_start_;
  7.1014 +      WHEN 'REMOVE' THEN
  7.1015 +         new_param_prefix_ := ':OLD.';
  7.1016 +         old_param_prefix_ := ':OLD.';
  7.1017 +   END CASE;
  7.1018 +   -- Build PL/SQL statement
  7.1019 +   stmt_ := stmt_ ||space___(indent_)||'DECLARE ';
  7.1020 +   indent_ := indent_ + 1;
  7.1021 +   stmt_ := stmt_ ||space___(indent_)||'msg_  VARCHAR2(32000);';
  7.1022 +   indent_ := indent_ - 1;
  7.1023 +   stmt_ := stmt_ ||space___(indent_)||'BEGIN ';
  7.1024 +   indent_ := indent_ + 1;
  7.1025 +   stmt_ := stmt_ ||space___(indent_)||'IF (Event_SYS.Event_Enabled('''||rec_.event_lu_name||''', '''||rec_.event_id||''')) THEN ';
  7.1026 +   indent_ := indent_ + 1;
  7.1027 +   stmt_ := stmt_ ||space___(indent_)||'msg_ := Message_SYS.Construct('''||rec_.event_id||''');';
  7.1028 +   FOR par_ IN get_param LOOP
  7.1029 +      IF (par_.id_type = 'DATETIME') THEN
  7.1030 +         format_prefix_  := 'to_char(';
  7.1031 +         format_postfix_ := ', '''||datetime_format_||''')';
  7.1032 +      ELSIF (par_.id_type = 'DATE') THEN
  7.1033 +         format_prefix_  := 'to_char(';
  7.1034 +         format_postfix_ := ', '''||date_format_||''')';
  7.1035 +      ELSIF (par_.id_type = 'TIME') THEN
  7.1036 +         format_prefix_  := 'to_char(';
  7.1037 +         format_postfix_ := ', '''||time_format_||''')';
  7.1038 +      ELSE
  7.1039 +         format_prefix_  := NULL;
  7.1040 +         format_postfix_ := NULL;
  7.1041 +      END IF;
  7.1042 +      --
  7.1043 +      IF par_.plsql_method IS NOT NULL THEN
  7.1044 +         stmt_ := stmt_ ||space___(indent_)||'Message_SYS.Add_Attribute(msg_, '''||par_.id||''', '||
  7.1045 +                          format_prefix_||Replace_Parameter___(par_.plsql_method)||format_postfix_||');';
  7.1046 +      ELSE
  7.1047 +         IF par_.current_value = 'TRUE' THEN
  7.1048 +            stmt_ := stmt_ ||space___(indent_)||'Message_SYS.Add_Attribute(msg_, ''OLD:'||par_.id||''', '||format_prefix_||old_param_prefix_||par_.id||format_postfix_||');';
  7.1049 +         END IF;
  7.1050 +         IF par_.new_value = 'TRUE' THEN
  7.1051 +            stmt_ := stmt_ ||space___(indent_)||'Message_SYS.Add_Attribute(msg_, ''NEW:'||par_.id||''', '||format_prefix_||new_param_prefix_||par_.id||format_postfix_||');';
  7.1052 +         END IF;
  7.1053 +      END IF;
  7.1054 +   END LOOP;
  7.1055 +   stmt_ := stmt_ ||space___(indent_)||'Event_SYS.Event_Execute('''||rec_.event_lu_name||''', '''||rec_.event_id||''', msg_);';
  7.1056 +   indent_ := indent_ - 1;
  7.1057 +   stmt_ := stmt_ ||space___(indent_)||'END IF; ';
  7.1058 +   indent_ := indent_ - 1;
  7.1059 +   stmt_ := stmt_ ||space___(indent_)||'END; ';
  7.1060 +   indent_ := indent_ - 1;
  7.1061 +   stmt_ := stmt_ ||space___(indent_)||if_stmt_end_;
  7.1062 +dbms_output.put_line(stmt_);
  7.1063 +   --
  7.1064 +   Installation_SYS.Create_Trigger (
  7.1065 +   Get_Trigger_Name___(rec_.event_id, trigger_type_),
  7.1066 +   'AFTER',
  7.1067 +   Get_Dml_Event___(trigger_type_),
  7.1068 +   Get_Columns___(rec_.modified_attributes),
  7.1069 +   rec_.event_table_name,
  7.1070 +   NULL,
  7.1071 +   stmt_,
  7.1072 +   TRUE);
  7.1073 +END Create_Custom_Trigger___;
  7.1074 +
  7.1075 +FUNCTION Get_Trigger_Name___(
  7.1076 +   event_id_      IN VARCHAR2,
  7.1077 +   trigger_type_  IN VARCHAR2 ) RETURN VARCHAR2
  7.1078 +IS
  7.1079 +BEGIN
  7.1080 +   CASE trigger_type_
  7.1081 +      WHEN 'NEW' THEN
  7.1082 +         RETURN(Upper(Create_Trigger_Name___(event_id_)||'_EVI'));
  7.1083 +      WHEN 'MODIFY' THEN
  7.1084 +         RETURN(Upper(Create_Trigger_Name___(event_id_)||'_EVU'));
  7.1085 +      WHEN 'REMOVE' THEN
  7.1086 +         RETURN(Upper(Create_Trigger_Name___(event_id_)||'_EVD'));
  7.1087 +   END CASE;
  7.1088 +END Get_Trigger_Name___;
  7.1089 +
  7.1090 +PROCEDURE Remove_Custom_Triggers___(
  7.1091 +   rec_ IN Fnd_Event_Tab%ROWTYPE )
  7.1092 +IS
  7.1093 +BEGIN
  7.1094 +   General_SYS.Init_Method(lu_name_, '&PKG', 'Create_Custom_Triggers___', TRUE);
  7.1095 +   -- Create triggers per type (New, Modify, Remove)
  7.1096 +   IF (rec_.new_row = 'TRUE') THEN
  7.1097 +      Remove_Custom_Trigger___(rec_, 'NEW');
  7.1098 +   END IF;
  7.1099 +   IF (rec_.modify_row = 'TRUE') THEN
  7.1100 +      Remove_Custom_Trigger___(rec_, 'MODIFY');
  7.1101 +   END IF;
  7.1102 +   IF (rec_.remove_row = 'TRUE') THEN
  7.1103 +      Remove_Custom_Trigger___(rec_, 'REMOVE');
  7.1104 +   END IF;
  7.1105 +END Remove_Custom_Triggers___;
  7.1106 +
  7.1107 +PROCEDURE Remove_Custom_Trigger___(
  7.1108 +   rec_           IN     Fnd_Event_Tab%ROWTYPE,
  7.1109 +   trigger_type_  IN     VARCHAR2 )
  7.1110 +IS
  7.1111 +   stmt_ VARCHAR2(32000);
  7.1112 +   --
  7.1113 +BEGIN
  7.1114 +   General_SYS.Init_Method(lu_name_, '&PKG', 'Remove_Custom_Trigger___', TRUE);
  7.1115 +   Installation_SYS.Remove_Trigger(Get_Trigger_Name___(rec_.event_id, trigger_type_), TRUE);
  7.1116 +END Remove_Custom_Trigger___;
  7.1117 +
  7.1118 +FUNCTION Create_Trigger_Name___ (
  7.1119 +   event_id_ IN VARCHAR2 ) RETURN VARCHAR2
  7.1120 +IS
  7.1121 +   new_event_id_ VARCHAR2(100);
  7.1122 +BEGIN
  7.1123 +   new_event_id_ := Replace(event_id_, ' ', '_');
  7.1124 +   new_event_id_ := Replace(new_event_id_, '/', '_');
  7.1125 +   new_event_id_ := Replace(new_event_id_, '\', '_');
  7.1126 +   new_event_id_ := Replace(new_event_id_, '-', '_');
  7.1127 +   RETURN new_event_id_;
  7.1128 +END Create_Trigger_Name___;
  7.1129 +-----------------------------------------------------------------------------
  7.1130 +-------------------- LU SPECIFIC PRIVATE METHODS ----------------------------
  7.1131 +-----------------------------------------------------------------------------
  7.1132 +
  7.1133 +PROCEDURE Export__ (
  7.1134 +   string_        OUT VARCHAR2,
  7.1135 +   event_lu_name_ IN  VARCHAR2,
  7.1136 +   event_id_      IN  VARCHAR2 )
  7.1137 +IS
  7.1138 +   newline_    CONSTANT VARCHAR2(2) := chr(13)||chr(10);
  7.1139 +   rec                  &TABLE%ROWTYPE;
  7.1140 +   id_                  VARCHAR2(100);
  7.1141 +   CURSOR get_param IS
  7.1142 +   SELECT id, id_type, plsql_method, current_value, new_value
  7.1143 +     FROM fnd_event_parameter_tab
  7.1144 +    WHERE event_lu_name = event_lu_name_
  7.1145 +      AND event_id = event_id_;
  7.1146 +BEGIN
  7.1147 +   General_SYS.Init_Method(lu_name_, '&PKG', 'Export__');
  7.1148 +   -- Fetch the event details
  7.1149 +   rec     := Get_Object_By_Keys___(event_lu_name_, event_id_);
  7.1150 +   -- Only allowed to export Custom Events
  7.1151 +   IF (nvl(rec.event_type, 'APPLICATION') != 'CUSTOM') THEN
  7.1152 +      Error_SYS.Appl_General(lu_name_, 'EXP_TYPE: Only Custom Events are allowed to be exported.');
  7.1153 +   END IF;
  7.1154 +   --
  7.1155 +   -- Create Export file
  7.1156 +   --
  7.1157 +   string_ :=            '-------------------------------------------------------------------------------------------- ' || newline_;
  7.1158 +   string_ := string_ || '-- Export file for Custom Events ' || rec.event_id || '.' || newline_;
  7.1159 +   string_ := string_ || '-- ' || newline_;
  7.1160 +   string_ := string_ || '--  Date    Sign    History' || newline_;
  7.1161 +   string_ := string_ || '--  ------  ------  -----------------------------------------------------------' || newline_;
  7.1162 +   string_ := string_ || '--  ' || to_char(sysdate, 'YYMMDD') || '  ' || rpad(Fnd_Session_API.Get_Fnd_User, 6, ' ') || '  ' ||
  7.1163 +                         'Export file for task ' || rec.event_id || '.' || newline_;
  7.1164 +   string_ := string_ || '-------------------------------------------------------------------------------------------- ' || newline_;
  7.1165 +   string_ := string_ || newline_;
  7.1166 +   string_ := string_ || 'SET DEFINE ~' || newline_;
  7.1167 +   string_ := string_ || 'PROMPT Register Custom Event "' || rec.event_id || '"' || newline_;
  7.1168 +   string_ := string_ || 'DECLARE' || newline_;
  7.1169 +   string_ := string_ || '   event_lu_name_      VARCHAR2(30)    := ''' || event_lu_name_ || ''';' || newline_;
  7.1170 +   string_ := string_ || '   event_id_           VARCHAR2(30)    := ''' || event_id_ || ''';' || newline_;
  7.1171 +   string_ := string_ || '   id_                 VARCHAR2(100);' || newline_;
  7.1172 +   string_ := string_ || '   info_msg_           VARCHAR2(32000) := NULL;' || newline_;
  7.1173 +   string_ := string_ || 'BEGIN' || newline_;
  7.1174 +   --
  7.1175 +   -- Create Main Message
  7.1176 +   --
  7.1177 +   string_ := string_ || '-- Construct Main Message' || newline_;
  7.1178 +   string_ := string_ || '   info_msg_    := Message_SYS.Construct('''');' || newline_;
  7.1179 +   string_ := string_ || '   Message_SYS.Add_Attribute(info_msg_, ''EVENT_DESCRIPTION'', ''' || rec.event_description || ''');' || newline_;
  7.1180 +   string_ := string_ || '   Message_SYS.Add_Attribute(info_msg_, ''EVENT_ENABLE'', ''FALSE'');' || newline_;
  7.1181 +   string_ := string_ || '   Message_SYS.Add_Attribute(info_msg_, ''EVENT_TYPE_DB'', ''' || rec.event_type || ''');' || newline_;
  7.1182 +   string_ := string_ || '   Message_SYS.Add_Attribute(info_msg_, ''EVENT_TABLE_NAME'', ''' || rec.event_table_name || ''');' || newline_;
  7.1183 +   string_ := string_ || '   Message_SYS.Add_Attribute(info_msg_, ''MODIFIED_ATTRIBUTES'', ''' || rec.modified_attributes || ''');' || newline_;
  7.1184 +   string_ := string_ || '   Message_SYS.Add_Attribute(info_msg_, ''NEW_ROW_DB'', ''' || rec.new_row || ''');' || newline_;
  7.1185 +   string_ := string_ || '   Message_SYS.Add_Attribute(info_msg_, ''MODIFY_ROW_DB'', ''' || rec.modify_row || ''');' || newline_;
  7.1186 +   string_ := string_ || '   Message_SYS.Add_Attribute(info_msg_, ''REMOVE_ROW_DB'', ''' || rec.remove_row || ''');' || newline_;
  7.1187 +   string_ := string_ || '-- Register Custom Event' || newline_;
  7.1188 +   string_ := string_ || '   Fnd_Event_API.Register_Custom_Event(event_lu_name_, event_id_, info_msg_);' || newline_;
  7.1189 +   FOR rec2 IN get_param LOOP
  7.1190 +      string_ := string_ || '   -- Register Event Parameter' || newline_;
  7.1191 +      string_ := string_ || '      info_msg_ := Message_SYS.Construct('''');' || newline_;
  7.1192 +      string_ := string_ || '      id_  := ''' || rec2.id || ''';' || newline_;
  7.1193 +      string_ := string_ || '      Message_SYS.Add_Attribute(info_msg_, ''ID_TYPE'', ''' || rec2.id_type || ''');' || newline_;
  7.1194 +      string_ := string_ || '      Message_SYS.Add_Attribute(info_msg_, ''PLSQL_METHOD'', ''' || rec2.plsql_method || ''');' || newline_;
  7.1195 +      string_ := string_ || '      Message_SYS.Add_Attribute(info_msg_, ''CURRENT_VALUE_DB'', ''' || rec2.current_value || ''');' || newline_;
  7.1196 +      string_ := string_ || '      Message_SYS.Add_Attribute(info_msg_, ''NEW_VALUE_DB'', ''' || rec2.new_value || ''');' || newline_;
  7.1197 +      string_ := string_ || '      Fnd_Event_Parameter_API.Register(event_lu_name_, event_id_, id_, info_msg_);' || newline_;
  7.1198 +   END LOOP;
  7.1199 +   string_ := string_ || 'END;' || newline_;
  7.1200 +   string_ := string_ || '/' || newline_;
  7.1201 +   string_ := string_ || 'SET DEFINE &' || newline_;
  7.1202 +END Export__;
  7.1203 +
  7.1204 +-----------------------------------------------------------------------------
  7.1205 +-------------------- LU SPECIFIC PROTECTED METHODS --------------------------
  7.1206 +-----------------------------------------------------------------------------
  7.1207 +
  7.1208 +
  7.1209 +-----------------------------------------------------------------------------
  7.1210 +-------------------- LU SPECIFIC PUBLIC METHODS -----------------------------
  7.1211 +-----------------------------------------------------------------------------
  7.1212 +
  7.1213 +FUNCTION Get_Event_Description (
  7.1214 +   event_lu_name_ IN VARCHAR2,
  7.1215 +   event_id_      IN VARCHAR2 ) RETURN VARCHAR2
  7.1216 +IS
  7.1217 +   temp_ &TABLE..event_description%TYPE;
  7.1218 +   CURSOR get_attr IS
  7.1219 +      SELECT event_description
  7.1220 +      FROM &TABLE
  7.1221 +      WHERE event_lu_name = event_lu_name_
  7.1222 +      AND   event_id = event_id_;
  7.1223 +BEGIN
  7.1224 +   OPEN get_attr;
  7.1225 +   FETCH get_attr INTO temp_;
  7.1226 +   CLOSE get_attr;
  7.1227 +   RETURN temp_;
  7.1228 +END Get_Event_Description;
  7.1229 +
  7.1230 +
  7.1231 +FUNCTION Get_Event_Enable (
  7.1232 +   event_lu_name_ IN VARCHAR2,
  7.1233 +   event_id_      IN VARCHAR2 ) RETURN VARCHAR2
  7.1234 +IS
  7.1235 +   temp_ &TABLE..event_enable%TYPE;
  7.1236 +   CURSOR get_attr IS
  7.1237 +      SELECT event_enable
  7.1238 +      FROM &TABLE
  7.1239 +      WHERE event_lu_name = event_lu_name_
  7.1240 +      AND   event_id = event_id_;
  7.1241 +BEGIN
  7.1242 +   OPEN get_attr;
  7.1243 +   FETCH get_attr INTO temp_;
  7.1244 +   CLOSE get_attr;
  7.1245 +   IF temp_ IS NULL THEN
  7.1246 +      RETURN 'FALSE';
  7.1247 +   ELSE
  7.1248 +      RETURN temp_;
  7.1249 +   END IF;
  7.1250 +END Get_Event_Enable;
  7.1251 +
  7.1252 +
  7.1253 +PROCEDURE Set_Event_Enable (
  7.1254 +   event_lu_name_ IN VARCHAR2,
  7.1255 +   event_id_      IN VARCHAR2 )
  7.1256 +IS
  7.1257 +   temp_       NUMBER;
  7.1258 +   attr_       VARCHAR2(32000);
  7.1259 +   oldrec_     &TABLE%ROWTYPE;
  7.1260 +   newrec_     &TABLE%ROWTYPE;
  7.1261 +   objid_      &VIEW..objid%TYPE;
  7.1262 +   objversion_ &VIEW..objversion%TYPE;
  7.1263 +BEGIN
  7.1264 +   General_SYS.Init_Method(lu_name_, '&PKG', 'Set_Event_Enable');
  7.1265 +   IF (event_id_ <> upper(event_id_)) THEN
  7.1266 +      Error_SYS.Appl_General(lu_name_, 'UPPCASE: The event identity ":P1" must be in upper case.', event_id_);
  7.1267 +   END IF;
  7.1268 +   SELECT COUNT(*)
  7.1269 +      INTO temp_
  7.1270 +      FROM fnd_event_action
  7.1271 +      WHERE event_id = event_id_
  7.1272 +      AND   event_lu_name = event_lu_name_
  7.1273 +      AND   action_enable = 'TRUE';
  7.1274 +   Get_Id_Version_By_Keys___ (objid_, objversion_, event_lu_name_, event_id_);
  7.1275 +   IF (temp_ > 0) THEN
  7.1276 +      Client_SYS.Add_To_Attr('EVENT_ENABLE', 'TRUE', attr_);
  7.1277 +      oldrec_ := Get_Object_By_Keys___(event_lu_name_, event_id_);
  7.1278 +      newrec_ := oldrec_;
  7.1279 +      Unpack_Check_Update___(attr_, newrec_, objid_);
  7.1280 +      Update___(objid_, oldrec_, newrec_, attr_, objversion_);
  7.1281 +   ELSE
  7.1282 +      Client_SYS.Add_To_Attr('EVENT_ENABLE', 'FALSE', attr_);
  7.1283 +      oldrec_ := Get_Object_By_Keys___(event_lu_name_, event_id_);
  7.1284 +      newrec_ := oldrec_;
  7.1285 +      Unpack_Check_Update___(attr_, newrec_, objid_);
  7.1286 +      Update___(objid_, oldrec_, newrec_, attr_, objversion_);
  7.1287 +   END IF;
  7.1288 +END Set_Event_Enable;
  7.1289 +
  7.1290 +
  7.1291 +PROCEDURE Refresh (
  7.1292 +   event_lu_name_       IN VARCHAR2,
  7.1293 +   event_id_            IN VARCHAR2,
  7.1294 +   event_desc_          IN VARCHAR2,
  7.1295 +   event_type_db_       IN VARCHAR2 DEFAULT 'APPLICATION',
  7.1296 +   event_table_name_    IN VARCHAR2 DEFAULT NULL,
  7.1297 +   modified_attributes_ IN VARCHAR2 DEFAULT NULL,
  7.1298 +   new_row_             IN VARCHAR2 DEFAULT 'FALSE',
  7.1299 +   modify_row_          IN VARCHAR2 DEFAULT 'FALSE',
  7.1300 +   remove_row_          IN VARCHAR2 DEFAULT 'FALSE')
  7.1301 +IS
  7.1302 +   temp_ NUMBER;
  7.1303 +BEGIN
  7.1304 +   General_SYS.Init_Method(lu_name_, '&PKG', 'Refresh');
  7.1305 +   IF (event_id_ <> upper(event_id_)) THEN
  7.1306 +      Error_SYS.Appl_General(lu_name_, 'UPPCASE: The event identity ":P1" must be in upper case.', event_id_);
  7.1307 +   END IF;
  7.1308 +   SELECT COUNT(*)
  7.1309 +      INTO temp_
  7.1310 +      FROM &VIEW
  7.1311 +      WHERE event_id = event_id_
  7.1312 +      AND event_lu_name = event_lu_name_;
  7.1313 +   IF (temp_ = 0) THEN
  7.1314 +      INSERT INTO fnd_event_tab
  7.1315 +         (event_lu_name, event_id, event_description, event_enable, rowversion,
  7.1316 +          event_type, event_table_name, modified_attributes,
  7.1317 +          new_row, modify_row, remove_row)
  7.1318 +      VALUES
  7.1319 +         (event_lu_name_, event_id_, event_desc_, 'FALSE', SYSDATE,
  7.1320 +          event_type_db_, event_table_name_, modified_attributes_,
  7.1321 +          new_row_, modify_row_, remove_row_);
  7.1322 +   ELSE
  7.1323 +      UPDATE fnd_event_tab
  7.1324 +         SET event_description = event_desc_
  7.1325 +         WHERE event_lu_name = event_lu_name_
  7.1326 +         AND   event_id = event_id_;
  7.1327 +   END IF;
  7.1328 +END Refresh;
  7.1329 +
  7.1330 +PROCEDURE Register_Custom_Event (
  7.1331 +   event_lu_name_ IN VARCHAR2,
  7.1332 +   event_id_      IN VARCHAR2,
  7.1333 +   info_msg_      IN VARCHAR2 )
  7.1334 +IS
  7.1335 +   info_       VARCHAR2(32000);
  7.1336 +   objid_      VARCHAR2(100);
  7.1337 +   objversion_ VARCHAR2(100);
  7.1338 +   attr_       VARCHAR2(2000);
  7.1339 +BEGIN
  7.1340 +   General_SYS.Init_Method(lu_name_, '&PKG', 'Register_Custom_Event');
  7.1341 +   Client_SYS.Add_To_Attr('EVENT_LU_NAME',       event_lu_name_, attr_);
  7.1342 +   Client_SYS.Add_To_Attr('EVENT_ID',            event_id_, attr_);
  7.1343 +   Client_SYS.Add_To_Attr('EVENT_DESCRIPTION',   Message_SYS.Find_Attribute(info_msg_, 'EVENT_DESCRIPTION', ''), attr_);
  7.1344 +   Client_SYS.Add_To_Attr('EVENT_ENABLE',        Message_SYS.Find_Attribute(info_msg_, 'EVENT_ENABLE', 'FALSE'), attr_);
  7.1345 +   Client_SYS.Add_To_Attr('EVENT_TABLE_NAME',    Message_SYS.Find_Attribute(info_msg_, 'EVENT_TABLE_NAME', ''), attr_);
  7.1346 +   Client_SYS.Add_To_Attr('EVENT_TYPE_DB',       Message_SYS.Find_Attribute(info_msg_, 'EVENT_TYPE_DB', ''), attr_);
  7.1347 +   Client_SYS.Add_To_Attr('NEW_ROW_DB',          Message_SYS.Find_Attribute(info_msg_, 'NEW_ROW_DB', 'FALSE'), attr_);
  7.1348 +   Client_SYS.Add_To_Attr('MODIFY_ROW_DB',       Message_SYS.Find_Attribute(info_msg_, 'MODIFY_ROW_DB', 'FALSE'), attr_);
  7.1349 +   Client_SYS.Add_To_Attr('REMOVE_ROW_DB',       Message_SYS.Find_Attribute(info_msg_, 'REMOVE_ROW_DB', 'FALSE'), attr_);
  7.1350 +   Client_SYS.Add_To_Attr('MODIFIED_ATTRIBUTES', Message_SYS.Find_Attribute(info_msg_, 'MODIFIED_ATTRIBUTES', ''), attr_);
  7.1351 +   IF (Check_Exist___(event_lu_name_, event_id_)) THEN
  7.1352 +      DELETE FROM fnd_event_tab WHERE event_lu_name = event_lu_name_ AND event_id = event_id_;
  7.1353 +      DELETE FROM fnd_event_parameter_tab WHERE event_lu_name = event_lu_name_ AND event_id = event_id_;
  7.1354 +   END IF;
  7.1355 +   New__(info_, objid_, objversion_, attr_, 'DO');
  7.1356 +END Register_Custom_Event;
  7.1357 +
  7.1358 +PROCEDURE Unfresh (
  7.1359 +   event_lu_name_ IN VARCHAR2,
  7.1360 +   event_id_      IN VARCHAR2 )
  7.1361 +IS
  7.1362 +   temp_ NUMBER;
  7.1363 +BEGIN
  7.1364 +   General_SYS.Init_Method(lu_name_, '&PKG', 'Unfresh');
  7.1365 +   SELECT COUNT(*)
  7.1366 +      INTO temp_
  7.1367 +      FROM &VIEW
  7.1368 +      WHERE event_id = event_id_
  7.1369 +      AND   event_lu_name = event_lu_name_;
  7.1370 +   IF (temp_ > 0) THEN
  7.1371 +      DELETE FROM fnd_event_tab
  7.1372 +         WHERE event_lu_name = event_lu_name_
  7.1373 +         AND   event_id = event_id_;
  7.1374 +   END IF;
  7.1375 +END Unfresh;
  7.1376 +
  7.1377 +
  7.1378 +FUNCTION Get (
  7.1379 +   event_lu_name_ IN VARCHAR2,
  7.1380 +   event_id_ IN VARCHAR2 ) RETURN Public_Rec
  7.1381 +IS
  7.1382 +   temp_ Public_Rec;
  7.1383 +   CURSOR get_attr IS
  7.1384 +      SELECT event_description, event_enable
  7.1385 +      FROM &TABLE
  7.1386 +      WHERE event_lu_name = event_lu_name_
  7.1387 +      AND   event_id = event_id_;
  7.1388 +BEGIN
  7.1389 +   OPEN get_attr;
  7.1390 +   FETCH get_attr INTO temp_;
  7.1391 +   CLOSE get_attr;
  7.1392 +   RETURN temp_;
  7.1393 +END Get;
  7.1394 +
  7.1395 +
  7.1396 +
  7.1397 +-----------------------------------------------------------------------------
  7.1398 +-------------------- FOUNDATION1 METHODS ------------------------------------
  7.1399 +-----------------------------------------------------------------------------
  7.1400 +-- Init
  7.1401 +--   Dummy procedure that can be called at database startup to ensure that
  7.1402 +--   this package is loaded into memory for performance reasons only.
  7.1403 +-----------------------------------------------------------------------------
  7.1404 +
  7.1405 +PROCEDURE Init
  7.1406 +IS
  7.1407 +BEGIN
  7.1408 +   NULL;
  7.1409 +END Init;
  7.1410 +
  7.1411 +
  7.1412 +END &PKG;
  7.1413 +/
  7.1414 +SHOW ERROR
  7.1415 +
  7.1416 +UNDEFINE MODULE
  7.1417 +UNDEFINE LU
  7.1418 +UNDEFINE TABLE
  7.1419 +UNDEFINE VIEW
  7.1420 +UNDEFINE PKG
  7.1421 +
  7.1422 +UNDEFINE OBJID
  7.1423 +UNDEFINE OBJVERSION
  7.1424 +
  7.1425 +-----------------------------------------------------------------------------
     8.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     8.2 +++ b/PLSQL/Lexer/test/unit/data/IdentityPayInfo.apy	Wed May 15 23:04:20 2013 +0200
     8.3 @@ -0,0 +1,3557 @@
     8.4 +-----------------------------------------------------------------------------
     8.5 +--
     8.6 +--  Logical unit: IdentityPayInfo
     8.7 +--
     8.8 +--  Purpose: Handles Party Type Id Payment Information
     8.9 +--
    8.10 +--  IFS/Design Template Version 2.2
    8.11 +--
    8.12 +--  Date    Sign     History
    8.13 +--  ------  ----     -----------------------------------------------------------
    8.14 +--  960730  DAKA     Created
    8.15 +--  960731  DAKA     View definition corrected.
    8.16 +--  960802  MABE     Added procedure Remove_Set. Modified Check_Delete.
    8.17 +--  960821  MABE     Removed procedure Remove_Set. Added procedure Instance_Exists.
    8.18 +--  960927  MABE     Removed call to reference by Bank Account in Check_Delete.
    8.19 +--  961011  MABE     Changes to fit Enterprise module.
    8.20 +--  961129  DAKA     Columns Priority,Blocked_For_Parked_Payment,Other_Payee.
    8.21 +--  961205  MABE     Changed error message for Exist changed.
    8.22 +--                   Added procedure Create_Party_Type_Id.
    8.23 +--  961205  Yohe     Added view PARTY_TYPE_ID_PAY_INFO_SU_QRY and
    8.24 +--                   PARTY_TYPE_ID_PAY_INFO_CU_QRY.
    8.25 +--  961209  MABE     Corrected type return by function Get_Blocked_For_Payment
    8.26 +--                   to VARCHAR2.
    8.27 +--  961213  MABE     VIEW2 and VIEW3 changed to VIEW4 and VIEW5.
    8.28 +--  970102  MABE     Changes to fit Domain concept.
    8.29 +--  970106  MABE     Added function Get_Netting_Allowed.
    8.30 +--                   Column DUMMY deleted.
    8.31 +--  970114  MABE     Developing of query forms.
    8.32 +--  970121  MABE     Added columns is_note and note to Query views. (not finished)
    8.33 +--  970219  DAKA     Columns INTEREST_TEMPLATE , REMINDER_TEMPLATE added.
    8.34 +--  970220  MABE     Added default templates when creating customer
    8.35 +--                   by Create_Party_Type_Id.
    8.36 +--  970303  MABE     Added functions Get_Reminder_Template and Get_Interest_Template.
    8.37 +--  970306  MABE     Handling of notes added to views for query.
    8.38 +--  970306  DAKA     Call to party_type_id_invoice_info_api.exist added
    8.39 +--  970318  MABE     Checking if PartyTypeIdInvoiceInfo exists excluded
    8.40 +--                   for party type 'COMPANY'.
    8.41 +--  970512  SLKO     Some performance improvement.
    8.42 +--  970908  MABE     Added function Get_Payment_Delay.
    8.43 +--  970916  MABE     Corrected Get_Payment_Delay.
    8.44 +--  971029  MABE     Joins with company_tab and party_type_identity_tab instead
    8.45 +--                   of function calls.
    8.46 +--  980415  DAKA     Function Get_Name created
    8.47 +--  980512  MABE     Updated to fit IFS/Design 2.1.1A
    8.48 +--  980515  MABE     Added missing columns PARTY_TYPE_DB.
    8.49 +--  980519  MARK     Modified to use party_type_db values
    8.50 +--  980522  MABE     Corrected usage of party_type_db.
    8.51 +--  980602  DAKA     Identity added to LU
    8.52 +--  980602  PICZ     'SELECT *' replaced with 'SELECT '1'' in Instance_Exists
    8.53 +--  980629  WOBL     Added comments to _db columns
    8.54 +--  981103  KATH     Bug # 4399 Fixed - add new function called Validate_Identity() to validate
    8.55 +--                   supplies & customers
    8.56 +--  981118  MABE     Added missing comments to _db columns.
    8.57 +--  981130  MABE     Changed to fit Enterp 1.3.0.
    8.58 +--  981208  MABE     Removed VIEW PARTY_TYPE_ID_PAY_INFO_REF
    8.59 +--  981214  PICZ     Changes to Prepare_Insert___
    8.60 +--  981222  DAKA     US Localization code added
    8.61 +--  990201  DAKA     Connection with ENTERP improved
    8.62 +--  990208  MarK     Changes with regards to the Get_Currency_Rate.
    8.63 +--  990209  DAKA     Synchronized witch model
    8.64 +--  990406  MABE     Corrected problem with customer in not default company.
    8.65 +--  990419  MABE     Template modification to increase performance.
    8.66 +--  990625  MABE     Copied from PartyPayInfo and PartyTypeIdPayInfo due
    8.67 +--                   to replace of party with identity.
    8.68 +--  990811  MABE     substr -> substr_b.
    8.69 +--  990920  FRPO     Added IID PaymentAdvice
    8.70 +--  990928  FRPO     Added default value for Payment Advice (No Advice) in Prepare_Insert___
    8.71 +--                   for use in Create_Identity_Pay_Info for party_type = company
    8.72 +--  991012  FRPO     Other Payer made available for customers FIN123
    8.73 +--  990914  REANPL   Fetch_Tolerance modified to support payment tolerance for Supplier
    8.74 +--  991214  PICZ     Copy_Customer and Copy_Supplier added
    8.75 +--  000224  WITOPL   Removing DBMS_Output
    8.76 +--  000304  PICZ     Call #32631 corrected
    8.77 +--  000410  PICZ     Function Get_Group_For_Identity added
    8.78 +--  000412  PICZ     Function Get_Payment_Advice_Db added
    8.79 +--  000825  REANPL   Added new columns to VIEW:
    8.80 +--                   deduction_group,corporation_id,member_id,send_reminder_to_payer,send_interest_inv_to_payer
    8.81 +--  000829  REANPL   Added new columns to Prepare_Insert___, Copy_Customer
    8.82 +--  000929  PICZ     Call #49661 (procedure Save_Identity_Notes___ added)
    8.83 +--  001006  PICZ     Call #49721 (function Get_Other_Payee_Ded_Group_Desc added)
    8.84 +--  010220  LiSv     For new Create Company concept added new view identity_pay__etc and _pct.
    8.85 +--                   Added procedures Make_Company, Copy___, Import___ and Export___.
    8.86 +--  010305  MAMIPL   Bug #20283. Amount and Percent tolerance only positive value allowed.
    8.87 +--  010503  visuus   Bug Fix 20212: D&B number not copied when copying a customer.
    8.88 +--  010611  MACHSE   Bug# 15677 Fixed. Call to General_SYS.Init_Method.
    8.89 +--  010816  OVJOSE   Added Create Company translation method Create_Company_Translations___
    8.90 +--  011009  RAFA     Bug #23834 Added function Cust_Open_Items_Exist
    8.91 +--  020304  RAFA     IID 10998/10999 Call 77665 corrected Copy_Payment_Address___
    8.92 +--  020308  LISV     Call 78225 Corrected.
    8.93 +--  020319  PPer     Bug # 28324. Changed "PAYMENTSONACCOUNTEXIST" To "PAYMENTONACCNTEXIST".
    8.94 +--  021008  Nimalk   Removed usage of the view Company_Finance_Auth in viewes
    8.95 +--                   and replaced by view Company_Finance_Auth1 using EXISTS caluse instead of joins
    8.96 +--  021224  MACHLK   SP3 Merge Bug ID 34081, 34083.
    8.97 +--  030418  JAKALK   DEFI165N Added column disc_days_tolerance.
    8.98 +--  030506  NiKaLK   Added new views Multi_Customer_Info and Multi_Supplier_Info
    8.99 +--  030609  Kupelk   FRFI154. Added column next_payment_matching_id.
   8.100 +--                   Added Get_Next_Pay_Matching_Id, Get_Payment_Matching_Id .
   8.101 +--  030729  Gepelk   SP4 Merge. Bug # 35316. Modified  'Check_Cascade___'.
   8.102 +--  030827  KuPelk   Added next_payment_matching_id column to the method Copy___.
   8.103 +--  040325  Thsrlk   SP1 Merge
   8.104 +--  040629  anpelk   FIPR338A2: Unicode Changes
   8.105 +--  040924  nalslk   FITH354 - Modified calls to Payment_Library_API.Get_Currency_Rate
   8.106 +--                   and removed retrieving default_currency_type from Currency_Type_API directly.
   8.107 +--  041001  TsYolk   FIPR360, Added column Group_ID to IDENTITY_PAY_INFO_SU_QRY and IDENTITY_PAY_INFO_CU_QRY.
   8.108 +--  041104  GRRO     FIJP345 Payment Method Plan added rule_id to IDENTITY_PAY_INFO
   8.109 +--  041104  TsYolk   Call B119368, Modified the WHERE clause of IDENTITY_PAY_INFO_CU_QRY.
   8.110 +--  041124  AnGiSe   FITH352, Added column tax_withholding to view IDENTITY_PAY_INFO_CU_QRY.
   8.111 +--  041203  AnGiSe   FITH352, Added column balance_excl_withheld to view IDENTITY_PAY_INFO_SU_QRY.
   8.112 +--  050105  reanpl   FITH351 Added payment_receipt_type
   8.113 +--  050309  Samclk   FIPR360 - New Notes dialog functionality - Changed IDENTITY_PAY_INFO_CU_QRY.
   8.114 +--  050310  Samclk   FIPR360 - New Notes dialog functionality - Changed IDENTITY_PAY_INFO_SU_QRY.
   8.115 +--  050323  Jeguse   Moved MULTI_CUS_DETAILS_QRY, MULTI_SUP_DETAILS_QRY and MULTI_SUP_ADDRESS_QRY from Ledgitem.apy
   8.116 +--  051011  NiFelk   FIPR360, Notes code clean up.
   8.117 +--  060215  NiFelk   LCS Merge 48619. Added new method Create_Cus_Other_Payee_Attr__.
   8.118 +--  060728  Vohelk   FIPL617A - Added Template_id to the IDENTITY_PAY_INFO view
   8.119 +--  060829  Chhulk   FIBR620A - Modified Prepare_Insert___
   8.120 +--  060831  Shsalk   LCS Merge 56765. Increased the variable lenghth.
   8.121 +--  060919  RUFELK   B139515 - Added the parameter 'company' to the Get_Template_Id() Function.
   8.122 +--  061106  Lisvse   FIBR621A - Added check_recipient.
   8.123 +--  061121  RUFELK   FIPL612A - Renamed the status_id column into ledger_status_type.
   8.124 +--  061222  Kagalk   LCS Merge 61779, Modified Check_Cascade___
   8.125 +--  070109  Shsalk   LCS Merge 62571, Modified cursor to fetch member id in the method Get_Member_Id.  
   8.126 +--  070327  RAFA     LCS Merge Bug 51783
   8.127 +--  070508  Surmlk   Removed the use of SUBSTRB from the view PAYER_INFO_QRY
   8.128 +--  070627  Shsalk   LCS Merge 65361, Insert cursor selected value to payment_delay column in Copy_Customer method.
   8.129 +--  070816  Shsalk   B146601 Corrected accoding to a request from SDMAN module.
   8.130 +--  070827  Naadlk   LCS Merge 61494, Added advanced invoice column to views IDENTITY_PAY_INFO_SU_QRY,IDENTITY_PAY_INFO_CU_QRY,PAYER_INFO_QRY. 
   8.131 +--  070906  Paralk   B148391  Modified Copy_Customer()
   8.132 +--  071114  Paralk   Bug 69035, Added reminder_template_id,interest_template_id and their descriptions to VIEW_CU_QRY  
   8.133 +--  071127  Shsalk   Bug 68653, Added new columns to IDENTITY LOV views.
   8.134 +--  080108  Paralk   Bug 69035, Added reminder_template_id,interest_template_id and their descriptions to VIEW_PAYER_QRY   
   8.135 +--  080322  Shsalk   Bug 72177 Corrected. Added bic_code to the copy identity functionality.
   8.136 +--  080417  Paralk   Bug 73125, Added template_id to Copy_Customer() and Copy_Supplier().
   8.137 +--  080429  Nudilk   Bug 72612, Modified procedure Exist() 
   8.138 +--  080528  DiUdlk   Bug 74138, Modified cursor exist_company in Import__ function.
   8.139 +--  081003  Hawalk   Bug 77136, Table join with customer_info_tab and supplier_info_tab for VIEW_CU_QRY and VIEW_SU_QRY respectively,
   8.140 +--  081003           to get name and association no directly.
   8.141 +---------------------------------------------------------------------------------
   8.142 +
   8.143 +DEFINE MODULE           = PAYLED
   8.144 +DEFINE LU               = IdentityPayInfo
   8.145 +DEFINE TABLE            = IDENTITY_PAY_INFO_TAB
   8.146 +DEFINE VIEW             = IDENTITY_PAY_INFO
   8.147 +DEFINE VIEWPCT          = IDENTITY_PAY_INFO_PCT
   8.148 +DEFINE VIEW_SU_QRY      = IDENTITY_PAY_INFO_SU_QRY
   8.149 +DEFINE VIEW_CU_QRY      = IDENTITY_PAY_INFO_CU_QRY
   8.150 +DEFINE VIEW_SUPP        = IDENTITY_PAY_INFO_SUPP
   8.151 +DEFINE VIEW_CUST        = IDENTITY_PAY_INFO_CUST
   8.152 +DEFINE VIEW_LOV         = IDENTITY_PAY_INFO_LOV
   8.153 +DEFINE VIEW_ALL         = IDENTITY_PAY_INFO_ALL
   8.154 +DEFINE VIEW_PAYER_QRY   = PAYER_INFO_QRY
   8.155 +
   8.156 +DEFINE VIEW_MULTI_CUS   = MULTI_CUS_DETAILS_QRY
   8.157 +DEFINE VIEW_MULTI_SUP   = MULTI_SUP_DETAILS_QRY
   8.158 +DEFINE VIEW_MULTI_ADD   = MULTI_SUP_ADDRESS_QRY
   8.159 +
   8.160 +DEFINE PKG              = IDENTITY_PAY_INFO_API
   8.161 +
   8.162 +DEFINE OBJID            = rowid
   8.163 +DEFINE OBJVERSION       = ltrim(lpad(to_char(rowversion),2000))
   8.164 +
   8.165 +DEFINE OBJID_ptipi      = ptipi.rowid
   8.166 +DEFINE OBJVERSION_ptipi = ltrim(lpad(to_char(ptipi.rowversion),2000))
   8.167 +
   8.168 +DEFINE OBJID_p          = p.rowid
   8.169 +DEFINE OBJVERSION_p     = ltrim(lpad(to_char(p.rowversion),2000))
   8.170 +
   8.171 +
   8.172 +-----------------------------------------------------------------------------
   8.173 +-------------------- VIEWS FOR SELECTS --------------------------------------
   8.174 +-----------------------------------------------------------------------------
   8.175 +
   8.176 +PROMPT Creating &VIEW view
   8.177 +
   8.178 +CREATE OR REPLACE FORCE VIEW &VIEW AS
   8.179 +SELECT p.company                      company,
   8.180 +       identity                       identity,
   8.181 +       Party_Type_API.Decode(party_type) party_type,
   8.182 +       party_type                     party_type_db,
   8.183 +       priority                       priority,
   8.184 +       blocked_for_payment            blocked_for_payment,
   8.185 +       other_payee_identity           other_payee_identity,
   8.186 +       interest_template              interest_template,
   8.187 +       reminder_template              reminder_template,
   8.188 +       payment_delay                  payment_delay,
   8.189 +       amount_tolerance               amount_tolerance,
   8.190 +       percent_tolerance              percent_tolerance,
   8.191 +       disc_days_tolerance            disc_days_tolerance,
   8.192 +       netting_allowed                netting_allowed,
   8.193 +       format_no                      format_no,
   8.194 +       Payment_Advice_API.Decode(payment_advice) payment_advice,
   8.195 +       payment_advice                 payment_advice_db,
   8.196 +       deduction_group                deduction_group,
   8.197 +       corporation_id                 corporation_id,
   8.198 +       member_id                      member_id,
   8.199 +       send_reminder_to_payer         send_reminder_to_payer,
   8.200 +       send_interest_inv_to_payer     send_interest_inv_to_payer,
   8.201 +       rule_id                        rule_id,
   8.202 +       Payment_Receipt_Type_API.Decode(payment_receipt_type) payment_receipt_type,
   8.203 +       payment_receipt_type           payment_receipt_type_db,
   8.204 +       template_id                    template_id,
   8.205 +       Check_Recipient_API.Decode(check_recipient) check_recipient,
   8.206 +       check_recipient                check_recipient_db,
   8.207 +       send_statement_of_acc_to_payer send_statement_of_acc_to_payer,
   8.208 +       p.&OBJID                       objid,
   8.209 +       &OBJVERSION                    objversion
   8.210 +FROM   identity_pay_info_tab p
   8.211 +WHERE  EXISTS (SELECT * FROM company_finance_auth1 c WHERE p.company = c.company)
   8.212 +WITH   read only;
   8.213 +
   8.214 +COMMENT ON TABLE &VIEW
   8.215 +   IS 'LU=&LU^PROMPT=Identity Pay Info^MODULE=&MODULE^';
   8.216 +
   8.217 +COMMENT ON COLUMN &VIEW..company
   8.218 +   IS 'FLAGS=PMI--^DATATYPE=STRING(20)/UPPERCASE^PROMPT=Company^REF=CompanyPayInfo^';
   8.219 +COMMENT ON COLUMN &VIEW..identity
   8.220 +   IS 'FLAGS=KMI--^DATATYPE=STRING(20)/UPPERCASE^PROMPT=Identity^';
   8.221 +COMMENT ON COLUMN &VIEW..party_type
   8.222 +   IS 'FLAGS=KMI-L^DATATYPE=STRING(200)^PROMPT=Party Type^REF=PartyType^';
   8.223 +COMMENT ON COLUMN &VIEW..party_type_db
   8.224 +   IS 'FLAGS=A----^DATATYPE=STRING(20)^PROMPT=Party Type^';
   8.225 +COMMENT ON COLUMN &VIEW..priority
   8.226 +   IS 'FLAGS=A-IUL^DATATYPE=NUMBER^PROMPT=Priority^';
   8.227 +COMMENT ON COLUMN &VIEW..blocked_for_payment
   8.228 +   IS 'FLAGS=A-IUL^DATATYPE=BOOLEAN^PROMPT=Blocked For Payment^';
   8.229 +COMMENT ON COLUMN &VIEW..other_payee_identity
   8.230 +   IS 'FLAGS=A-IUL^DATATYPE=STRING(20)/UPPERCASE^PROMPT=Other Payee Identity^REF=IdentityPayInfo(company)^';
   8.231 +COMMENT ON COLUMN &VIEW..interest_template
   8.232 +   IS 'FLAGS=A-IU-^DATATYPE=STRING(20)/UPPERCASE^PROMPT=Interest Template^REF=InterestTemplate(company)^';
   8.233 +COMMENT ON COLUMN &VIEW..reminder_template
   8.234 +   IS 'FLAGS=A-IU-^DATATYPE=STRING(20)/UPPERCASE^PROMPT=Reminder Template^REF=ReminderTemplate(company)^';
   8.235 +COMMENT ON COLUMN &VIEW..payment_delay
   8.236 +   IS 'FLAGS=A-IU-^DATATYPE=NUMBER^PROMPT=Number of Days Usual Payment Delay^';
   8.237 +COMMENT ON COLUMN &VIEW..amount_tolerance
   8.238 +   IS 'FLAGS=A-IU-^DATATYPE=NUMBER^PROMPT=Amount Tolerance^';
   8.239 +COMMENT ON COLUMN &VIEW..percent_tolerance
   8.240 +   IS 'FLAGS=A-IU-^DATATYPE=NUMBER^PROMPT=Percent Tolerance^';
   8.241 +COMMENT ON COLUMN &VIEW..disc_days_tolerance
   8.242 +   IS 'FLAGS=A-IU-^DATATYPE=NUMBER^PROMPT=Tolerance Days for Discount^';
   8.243 +COMMENT ON COLUMN &VIEW..netting_allowed
   8.244 +   IS 'FLAGS=AMIUL^DATATYPE=BOOLEAN^PROMPT=Netting Allowed^';
   8.245 +COMMENT ON COLUMN &VIEW..format_no
   8.246 +   IS 'FLAGS=AMI--^DATATYPE=NUMBER^PROMPT=Format No^';
   8.247 +COMMENT ON COLUMN &VIEW..payment_advice
   8.248 +   IS 'FLAGS=AMIUL^DATATYPE=STRING(200)^PROMPT=Payment Advice^REF=PaymentAdvice^';
   8.249 +COMMENT ON COLUMN &VIEW..payment_advice_db
   8.250 +   IS 'FLAGS=A----^DATATYPE=STRING(20)^PROMPT=Payment Advice^';
   8.251 +COMMENT ON COLUMN &VIEW..deduction_group
   8.252 +   IS 'FLAGS=A-IUL^DATATYPE=STRING(20)^PROMPT=Deduction Group^REF=DeductionGroup^';
   8.253 +COMMENT ON COLUMN &VIEW..corporation_id
   8.254 +   IS 'FLAGS=A-IU-^DATATYPE=STRING(20)^PROMPT=Corporation Id^';
   8.255 +COMMENT ON COLUMN &VIEW..member_id
   8.256 +   IS 'FLAGS=A-IU-^DATATYPE=STRING(20)^PROMPT=Member Id^';
   8.257 +COMMENT ON COLUMN &VIEW..send_reminder_to_payer
   8.258 +   IS 'FLAGS=A-IU-^DATATYPE=STRING(5)^PROMPT=Send Reminder To Payer^';
   8.259 +COMMENT ON COLUMN &VIEW..send_interest_inv_to_payer
   8.260 +   IS 'FLAGS=A-IU-^DATATYPE=STRING(5)^PROMPT=Send Interest Inv To Payer^';
   8.261 +COMMENT ON COLUMN &VIEW..rule_id
   8.262 +   IS 'FLAGS=A-IUL^DATATYPE=STRING(20)/UPPERCASE^PROMPT=Rule Id^REF=PayMethodRule(company)^';
   8.263 +COMMENT ON COLUMN &VIEW..payment_receipt_type
   8.264 +   IS 'FLAGS=AMIUL^DATATYPE=STRING(200)^PROMPT=Payment Receipt^REF=PaymentReceiptType^';
   8.265 +COMMENT ON COLUMN &VIEW..payment_receipt_type_db
   8.266 +   IS 'FLAGS=A----^DATATYPE=STRING(20)^PROMPT=Payment Receipt^';
   8.267 +COMMENT ON COLUMN &VIEW..template_id
   8.268 +   IS 'FLAGS=A-IU-^DATATYPE=STRING(20)/UPPERCASE^PROMPT=Template Id^REF=ConfirmationStmntTempl(company)^';
   8.269 +COMMENT ON COLUMN &VIEW..check_recipient
   8.270 +   IS 'FLAGS=AMIUL^DATATYPE=STRING(200)^PROMPT=Check Recipient^REF=CheckRecipient^';
   8.271 +COMMENT ON COLUMN &VIEW..check_recipient_db
   8.272 +   IS 'FLAGS=A----^DATATYPE=STRING(20)^PROMPT=Check Recipient^';
   8.273 +COMMENT ON COLUMN &VIEW..send_statement_of_acc_to_payer                        
   8.274 +   IS 'FLAGS=A-IU-^DATATYPE=STRING(5)^PROMPT=Send Statement Of Account To Payer^';
   8.275 +
   8.276 +-- Bug 77136, begin, Table join with supplier_info_tab, in order to get name and association no directly.
   8.277 +PROMPT Creating &VIEW_SU_QRY VIEW
   8.278 +CREATE OR REPLACE FORCE VIEW &VIEW_SU_QRY AS
   8.279 +SELECT p.company                                                           company,
   8.280 +       p.identity                                                          identity,
   8.281 +       Party_Type_API.Decode(p.party_type)                                 party_type,
   8.282 +       p.party_type                                                        party_type_db,
   8.283 +       si.name                                                             name,
   8.284 +       si.association_no                                                   association_no,                               
   8.285 +       NVL(Ledger_Item_Util_API.Get_Dom_Balance(
   8.286 +                                p.company,
   8.287 +                                p.identity,
   8.288 +                                Party_Type_API.Decode(p.party_type),
   8.289 +                                Company_Pay_Info_API.Get_Query_Voucher_Date), 0)
   8.290 +                                                                           balance,
   8.291 +       NVL(Ledger_Item_Util_API.Get_Dom_Balance(
   8.292 +                                p.company,
   8.293 +                                p.identity,
   8.294 +                                Party_Type_API.Decode(p.party_type)), 0)   pay_doc_balance,
   8.295 +       NVL(Ledger_Item_Util_API.Get_Adv_Inv_Dom_Balance(
   8.296 +                                p.company,
   8.297 +                                p.identity,
   8.298 +                                Party_Type_API.Decode(p.party_type)), 0)   adv_inv_balance,
   8.299 +       NVL(Ledger_Item_Util_API.Get_Dom_Amount_Due(
   8.300 +                                p.company,
   8.301 +                                p.identity,
   8.302 +                                Party_Type_API.Decode(p.party_type),
   8.303 +                                Company_Pay_Info_API.Get_Query_Voucher_Date), 0)
   8.304 +                                                                           amount_due,
   8.305 +       NVL(Ledger_Item_Util_API.Get_Dom_Amount_Due(
   8.306 +                                p.company,
   8.307 +                                p.identity,
   8.308 +                                Party_Type_API.Decode(p.party_type),
   8.309 +                                Company_Pay_Info_API.Get_Query_Voucher_Date,
   8.310 +                                'TRUE'), 0)
   8.311 +                                                                           pay_doc_amount_due,
   8.312 +       NVL(Ledger_Item_Util_API.Get_Dom_Pre_Payment_Balance(
   8.313 +                                p.company,
   8.314 +                                p.identity,
   8.315 +                                Party_Type_API.Decode(p.party_type),
   8.316 +                                Company_Pay_Info_API.Get_Query_Voucher_Date), 0)
   8.317 +                                                                           pre_payment_balance,
   8.318 +       NVL(Ledger_Item_Util_API.Get_Dom_Bal_Excl_Withh(
   8.319 +                                p.company,
   8.320 +                                p.identity,
   8.321 +                                Party_Type_API.Decode(p.party_type),
   8.322 +                                Company_Pay_Info_API.Get_Query_Voucher_Date), 0)
   8.323 +                                                                           balance_excl_withheld,
   8.324 +       decode(p.other_payee_identity,NULL,'FALSE','TRUE')                  other_party_type_exists,
   8.325 +       Identity_Note_API.Check_Note_Exist(p.company,
   8.326 +                                          p.identity,
   8.327 +                                          p.party_type)                    is_note,
   8.328 +       i.group_id                                                          group_id,
   8.329 +       &OBJID_p                                                            objid,
   8.330 +       &OBJVERSION_p                                                       objversion
   8.331 +FROM   identity_pay_info_tab     p,
   8.332 +       identity_invoice_info_tab i,
   8.333 +       supplier_info_tab         si
   8.334 +WHERE  EXISTS (SELECT * FROM company_finance_auth1 c WHERE p.company = c.company)
   8.335 +AND    p.party_type = 'SUPPLIER'
   8.336 +AND    p.company    = i.company
   8.337 +AND    p.identity   = i.identity
   8.338 +AND    p.party_type = i.party_type
   8.339 +AND    p.identity   = si.supplier_id
   8.340 +WITH   read only;
   8.341 +
   8.342 +COMMENT ON TABLE &VIEW_SU_QRY
   8.343 +   IS 'LU=&LU^PROMPT=Identity Pay Info^MODULE=&MODULE^';
   8.344 +
   8.345 +COMMENT ON COLUMN &VIEW_SU_QRY..company
   8.346 +   IS 'FLAGS=PM---^DATATYPE=STRING(20)/UPPERCASE^PROMPT=Company^REF=Company/NOCHECK^';
   8.347 +COMMENT ON COLUMN &VIEW_SU_QRY..identity
   8.348 +   IS 'FLAGS=PM---^DATATYPE=STRING(20)/UPPERCASE^PROMPT=Identity^';
   8.349 +COMMENT ON COLUMN &VIEW_SU_QRY..party_type
   8.350 +   IS 'FLAGS=KM--L^DATATYPE=STRING(200)^PROMPT=Party Type^REF=PartyType^';
   8.351 +COMMENT ON COLUMN &VIEW_SU_QRY..party_type_db
   8.352 +   IS 'FLAGS=A----^DATATYPE=STRING(20)^PROMPT=Party Type^';
   8.353 +COMMENT ON COLUMN &VIEW_SU_QRY..name
   8.354 +   IS 'FLAGS=AM--L^DATATYPE=STRING(100)^PROMPT=Supplier Name^';
   8.355 +COMMENT ON COLUMN &VIEW_SU_QRY..balance
   8.356 +   IS 'FLAGS=AM--L^DATATYPE=NUMBER^PROMPT=Balance^';
   8.357 +COMMENT ON COLUMN &VIEW_SU_QRY..adv_inv_balance
   8.358 +   IS 'FLAGS=AM--L^DATATYPE=NUMBER^PROMPT=Adv Inv Balance^';
   8.359 +COMMENT ON COLUMN &VIEW_SU_QRY..amount_due
   8.360 +   IS 'FLAGS=AM--L^DATATYPE=NUMBER^PROMPT=Amount Due^';
   8.361 +COMMENT ON COLUMN &VIEW_SU_QRY..pre_payment_balance
   8.362 +   IS 'FLAGS=AM--L^DATATYPE=NUMBER^PROMPT=Open Pre-Payments^';
   8.363 +COMMENT ON COLUMN &VIEW_SU_QRY..balance_excl_withheld
   8.364 +   IS 'FLAGS=AM--L^DATATYPE=NUMBER^PROMPT=Balance Excl Withheld^';
   8.365 +COMMENT ON COLUMN &VIEW_SU_QRY..other_party_type_exists
   8.366 +   IS 'FLAGS=AM--L^DATATYPE=BOOLEAN^PROMPT=Other Party Type Exist^';
   8.367 +COMMENT ON COLUMN &VIEW_SU_QRY..is_note
   8.368 +   IS 'FLAGS=AM--L^DATATYPE=BOOLEAN^PROMPT=Notes^';
   8.369 +COMMENT ON COLUMN &VIEW_SU_QRY..group_id
   8.370 +   IS 'FLAGS=A----^DATATYPE=STRING(20)^PROMPT=Group ID^';
   8.371 +-- Bug 77136, end
   8.372 +
   8.373 +-- Bug 77136, begin, Table join with customer_info_tab, in order to get name and association no directly.
   8.374 +-- Bug 69035, Begin, Added reminder_template_id,interest_template_id and their descriptions to VIEW_CU_QRY  
   8.375 +PROMPT Creating &VIEW_CU_QRY view
   8.376 +CREATE OR REPLACE FORCE VIEW &VIEW_CU_QRY AS
   8.377 +SELECT p.company                                                           company,
   8.378 +       p.identity                                                          identity,
   8.379 +       Party_Type_API.Decode(p.party_type)                                 party_type,
   8.380 +       p.party_type                                                        party_type_db,
   8.381 +       ci.name                                                             name,
   8.382 +       ci.association_no                                                   association_no,
   8.383 +       NVL(Ledger_Item_Util_API.Get_Dom_Balance(
   8.384 +                                p.company,
   8.385 +                                p.identity,
   8.386 +                                Party_Type_API.Decode(p.party_type),
   8.387 +                                Company_Pay_Info_API.Get_Query_Voucher_Date), 0)
   8.388 +                                                                           balance,
   8.389 +       NVL(Ledger_Item_Util_API.Get_Dom_Balance(
   8.390 +                                p.company,
   8.391 +                                p.identity,
   8.392 +                                Party_Type_API.Decode(p.party_type),
   8.393 +                                Company_Pay_Info_API.Get_Query_Voucher_Date,
   8.394 +                                'TRUE'), 0)                                pay_doc_balance,
   8.395 +       NVL(Ledger_Item_Util_API.Get_Adv_Inv_Dom_Balance(
   8.396 +                                p.company,
   8.397 +                                p.identity,
   8.398 +                                Party_Type_API.Decode(p.party_type)), 0)   adv_inv_balance,
   8.399 +       NVL(Ledger_Item_Util_API.Get_Dom_Amount_Due(
   8.400 +                                p.company,
   8.401 +                                p.identity,
   8.402 +                                Party_Type_API.Decode(p.party_type),
   8.403 +                                Company_Pay_Info_API.Get_Query_Voucher_Date), 0)
   8.404 +                                                                           amount_due,
   8.405 +       NVL(Ledger_Item_Util_API.Get_Dom_Amount_Due(
   8.406 +                                p.company,
   8.407 +                                p.identity,
   8.408 +                                Party_Type_API.Decode(p.party_type),
   8.409 +                                Company_Pay_Info_API.Get_Query_Voucher_Date,
   8.410 +                                'TRUE'), 0)                                pay_doc_amount_due,
   8.411 +       NVL(Ledger_Item_Util_API.Get_Dom_Pre_Payment_Balance(
   8.412 +                                p.company,
   8.413 +                                p.identity,
   8.414 +                                Party_Type_API.Decode(p.party_type),
   8.415 +                                Company_Pay_Info_API.Get_Query_Voucher_Date), 0)
   8.416 +                                                                           pre_payment_balance,
   8.417 +       'FALSE'                                                             other_party_type_exists,
   8.418 +       Identity_Note_API.Check_Note_Exist(p.company,
   8.419 +                                          p.identity,
   8.420 +                                          p.party_type)                    is_note,
   8.421 +       i.group_id                                                          group_id,
   8.422 +       cci.credit_analyst_code                                             ca_code,
   8.423 +       Credit_Analyst_API.Get_Description(p.company,
   8.424 +                                          cci.credit_analyst_code )        ca_desc,
   8.425 +       Credit_Analyst_API.Get_Manager(p.company,
   8.426 +                                      cci.credit_analyst_code)             ca_manager,
   8.427 +       Credit_Analyst_API.Get_Manager_Description(p.company,
   8.428 +                                                  cci.credit_analyst_code) manager_desc,
   8.429 +       cci.corp_credit_relation_exist                                      credit_relation_exist,
   8.430 +       cci.credit_relationship_type                                        credit_relation_type,
   8.431 +       cci.parent_company                                                  parent_company,
   8.432 +       cci.parent_identity                                                 parent_party,
   8.433 +       Customer_Info_API.Get_Name(cci.parent_identity)                     parent_name,
   8.434 +       Customer_Info_Vat_API.Get_Tax_Withholding(p.identity,
   8.435 +               Customer_Info_Address_API.Get_Default_Address(p.identity,
   8.436 +                 Address_Type_Code_API.Decode('DELIVERY')), p.company)     tax_withholding,
   8.437 +       p.reminder_template                                                 reminder_template_id,
   8.438 +       Reminder_Template_Api.Get_Template_Description(p.company ,
   8.439 +                                                      p.reminder_template) reminder_template_des,
   8.440 +       p.interest_template                                                 interest_template_id,
   8.441 +       Interest_Template_API.Get_Template_Description(p.company,
   8.442 +                                                      p.interest_template) interest_template_des,
   8.443 +       &OBJID_p                                                            objid,
   8.444 +       &OBJVERSION_p                                                       objversion
   8.445 +FROM   identity_pay_info_tab     p,
   8.446 +       identity_invoice_info_tab i,
   8.447 +       customer_credit_info_tab  cci,
   8.448 +       customer_info_tab         ci
   8.449 +WHERE  EXISTS (SELECT * FROM company_finance_auth1 c WHERE p.company = c.company)
   8.450 +AND    p.party_type = 'CUSTOMER'
   8.451 +AND    p.company    = cci.company(+)
   8.452 +AND    p.identity   = cci.identity(+)
   8.453 +AND    p.company    = i.company
   8.454 +AND    p.identity   = i.identity
   8.455 +AND    p.party_type = i.party_type
   8.456 +AND    p.identity   = ci.customer_id
   8.457 +WITH   read only;
   8.458 +
   8.459 +COMMENT ON TABLE &VIEW_CU_QRY
   8.460 +   IS 'LU=&LU^PROMPT=Identity Pay Info^MODULE=&MODULE^';
   8.461 +
   8.462 +COMMENT ON COLUMN &VIEW_CU_QRY..company
   8.463 +   IS 'FLAGS=PM---^DATATYPE=STRING(20)/UPPERCASE^PROMPT=Company^REF=Company/NOCHECK^';
   8.464 +COMMENT ON COLUMN &VIEW_CU_QRY..identity
   8.465 +   IS 'FLAGS=PM---^DATATYPE=STRING(20)/UPPERCASE^PROMPT=Identity^';
   8.466 +COMMENT ON COLUMN &VIEW_CU_QRY..party_type
   8.467 +   IS 'FLAGS=KM--L^DATATYPE=STRING(200)^PROMPT=Party Type^REF=PartyType^';
   8.468 +COMMENT ON COLUMN &VIEW_CU_QRY..party_type_db
   8.469 +   IS 'FLAGS=A----^DATATYPE=STRING(20)^PROMPT=Party Type^';
   8.470 +COMMENT ON COLUMN &VIEW_CU_QRY..name
   8.471 +   IS 'FLAGS=AM--L^DATATYPE=STRING(100)^PROMPT=Customer Name^';
   8.472 +COMMENT ON COLUMN &VIEW_CU_QRY..balance
   8.473 +   IS 'FLAGS=AM--L^DATATYPE=NUMBER^PROMPT=Balance^';
   8.474 +COMMENT ON COLUMN &VIEW_CU_QRY..adv_inv_balance
   8.475 +   IS 'FLAGS=AM--L^DATATYPE=NUMBER^PROMPT=Adv Inv Balance^';
   8.476 +COMMENT ON COLUMN &VIEW_CU_QRY..amount_due
   8.477 +   IS 'FLAGS=AM--L^DATATYPE=NUMBER^PROMPT=Amount Due^';
   8.478 +COMMENT ON COLUMN &VIEW_CU_QRY..pre_payment_balance
   8.479 +   IS 'FLAGS=AM--L^DATATYPE=NUMBER^PROMPT=Open Pre-Payments^';
   8.480 +COMMENT ON COLUMN &VIEW_CU_QRY..other_party_type_exists
   8.481 +   IS 'FLAGS=AM--L^DATATYPE=BOOLEAN^PROMPT=Other Party Type Exist^';
   8.482 +COMMENT ON COLUMN &VIEW_CU_QRY..is_note
   8.483 +   IS 'FLAGS=AM--L^DATATYPE=BOOLEAN^PROMPT=Notes^';
   8.484 +COMMENT ON COLUMN &VIEW_CU_QRY..group_id
   8.485 +   IS 'FLAGS=A----^DATATYPE=STRING(20)^PROMPT=Group ID^';
   8.486 +COMMENT ON COLUMN &VIEW_CU_QRY..ca_code
   8.487 +   IS 'FLAGS=A---L^DATATYPE=STRING(20)/UPPERCASE^PROMPT=Credit Analyst Code^';
   8.488 +COMMENT ON COLUMN &VIEW_CU_QRY..ca_desc
   8.489 +   IS 'FLAGS=A---L^DATATYPE=STRING(100)^PROMPT=Credit Analyst Description^';
   8.490 +COMMENT ON COLUMN &VIEW_CU_QRY..ca_manager
   8.491 +   IS 'FLAGS=A---L^DATATYPE=STRING(20)/UPPERCASE^PROMPT=Credit Analyst Manager^';
   8.492 +COMMENT ON COLUMN &VIEW_CU_QRY..manager_desc
   8.493 +   IS 'FLAGS=A---L^DATATYPE=STRING(100)^PROMPT=Manager Description^';
   8.494 +COMMENT ON COLUMN &VIEW_CU_QRY..credit_relation_exist
   8.495 +   IS 'FLAGS=A---L^DATATYPE=BOOLEAN^PROMPT=Credit Relation Exist^';
   8.496 +COMMENT ON COLUMN &VIEW_CU_QRY..credit_relation_type
   8.497 +   IS 'FLAGS=A---L^DATATYPE=STRING(100)^PROMPT=Credit Relation Type^';
   8.498 +COMMENT ON COLUMN &VIEW_CU_QRY..parent_company
   8.499 +   IS 'FLAGS=A---L^DATATYPE=STRING(20)/UPPERCASE^PROMPT=Parent Company^';
   8.500 +COMMENT ON COLUMN &VIEW_CU_QRY..parent_party
   8.501 +   IS 'FLAGS=A---L^DATATYPE=STRING(20)/UPPERCASE^PROMPT=Parent Party^';
   8.502 +COMMENT ON COLUMN &VIEW_CU_QRY..parent_name
   8.503 +   IS 'FLAGS=A---L^DATATYPE=STRING(100)^PROMPT=Parent Name^';
   8.504 +COMMENT ON COLUMN &VIEW_CU_QRY..tax_withholding
   8.505 +   IS 'FLAGS=A---L^DATATYPE=STRING(20)^PROMPT=Tax Withholding^';
   8.506 +COMMENT ON COLUMN &VIEW_CU_QRY..reminder_template_id
   8.507 +   IS 'FLAGS=A---L^DATATYPE=STRING(20)^PROMPT=Reminder Template Id^';
   8.508 +COMMENT ON COLUMN &VIEW_CU_QRY..reminder_template_des
   8.509 +   IS 'FLAGS=A---L^DATATYPE=STRING(200)^PROMPT=Reminder Template Description^';
   8.510 +COMMENT ON COLUMN &VIEW_CU_QRY..interest_template_id
   8.511 +   IS 'FLAGS=A---L^DATATYPE=STRING(20)^PROMPT=Interest Template Id^';
   8.512 +COMMENT ON COLUMN &VIEW_CU_QRY..interest_template_des
   8.513 +   IS 'FLAGS=A---L^DATATYPE=STRING(200)^PROMPT=Interest Template Description^';
   8.514 +-- Bug 69035, End;
   8.515 +-- Bug 77136, end
   8.516 +
   8.517 +PROMPT Creating &VIEW_SUPP view
   8.518 +
   8.519 +-- Bug 68653, Begin, Added new columns address and city
   8.520 +CREATE OR REPLACE FORCE VIEW &VIEW_SUPP AS
   8.521 +SELECT ipi.company                      company,
   8.522 +       identity                       identity,
   8.523 +       Supplier_Info_API.Get_Name(identity)   party_name,
   8.524 +       Supplier_Info_Address_API.Get_City(identity,
   8.525 +                                                Supplier_Info_Address_API.Get_Default_Address(identity,
   8.526 +                                                               Address_Type_Code_API.Decode('PAY')))      city,
   8.527 +       RTRIM(Supplier_Info_Address_API.Get_Address1(identity,
   8.528 +                                                Supplier_Info_Address_API.Get_Default_Address(identity,
   8.529 +                                                               Address_Type_Code_API.Decode('PAY')))||','||
   8.530 +                                                Supplier_Info_Address_API.Get_Address2(identity,
   8.531 +                                                Supplier_Info_Address_API.Get_Default_Address(identity,
   8.532 +                                                               Address_Type_Code_API.Decode('PAY'))),',') address,
   8.533 +       priority                       priority,
   8.534 +       blocked_for_payment            blocked_for_payment,
   8.535 +       other_payee_identity           other_payee_identity,
   8.536 +       Payment_Advice_API.Decode(payment_advice) payment_advice,
   8.537 +       ipi.&OBJID                     objid,
   8.538 +       &OBJVERSION                    objversion
   8.539 +FROM   identity_pay_info_tab ipi
   8.540 +WHERE  EXISTS (SELECT * FROM company_finance_auth1 c WHERE ipi.company = c.company)
   8.541 +AND    party_type = 'SUPPLIER'
   8.542 +WITH   read only;
   8.543 +
   8.544 +COMMENT ON TABLE &VIEW_SUPP
   8.545 +   IS 'LU=&LU^PROMPT=Supplier Pay Info^MODULE=&MODULE^';
   8.546 +
   8.547 +COMMENT ON COLUMN &VIEW_SUPP..company
   8.548 +   IS 'FLAGS=PMI--^DATATYPE=STRING(20)/UPPERCASE^PROMPT=Company^REF=Company/NOCHECK^';
   8.549 +COMMENT ON COLUMN &VIEW_SUPP..identity
   8.550 +   IS 'FLAGS=KMI-L^DATATYPE=STRING(20)/UPPERCASE^PROMPT=Supplier Id^REF=SupplierInfo/CUSTOM=(Check_Cascade_Supplier__,Cascade_Delete_Supplier__)^';
   8.551 +COMMENT ON COLUMN &VIEW_SUPP..party_name
   8.552 +   IS 'FLAGS=AMI-L^DATATYPE=STRING(100)^PROMPT=Supplier Name^';
   8.553 +COMMENT ON COLUMN &VIEW_SUPP..city
   8.554 +   IS 'FLAGS=A---L^DATATYPE=STRING(35)^PROMPT=City^';
   8.555 +COMMENT ON COLUMN &VIEW_SUPP..address
   8.556 +   IS 'FLAGS=A---L^DATATYPE=STRING(2000)^PROMPT=Address^';
   8.557 +COMMENT ON COLUMN &VIEW_SUPP..priority
   8.558 +   IS 'FLAGS=A-IUL^DATATYPE=NUMBER^PROMPT=Priority^';
   8.559 +COMMENT ON COLUMN &VIEW_SUPP..blocked_for_payment
   8.560 +   IS 'FLAGS=A-IUL^DATATYPE=BOOLEAN^PROMPT=Blocked For Payment^';
   8.561 +COMMENT ON COLUMN &VIEW_SUPP..other_payee_identity
   8.562 +   IS 'FLAGS=A-IUL^DATATYPE=STRING(20)/UPPERCASE^PROMPT=Other Payee^';
   8.563 +COMMENT ON COLUMN &VIEW_SUPP..payment_advice
   8.564 +   IS 'FLAGS=A-IU-^DATATYPE=STRING(200)^PROMPT=Payment Advice^REF=PaymentAdvice^';
   8.565 +-- Bug 68653, End
   8.566 +
   8.567 +
   8.568 +PROMPT Creating &VIEW_CUST view
   8.569 +
   8.570 +-- Bug 68653, Begin, Added new columns address and city
   8.571 +CREATE OR REPLACE FORCE VIEW &VIEW_CUST AS
   8.572 +SELECT ipi.company                   company,
   8.573 +       identity                    identity,
   8.574 +       Customer_Info_API.Get_Name(identity)   party_name,
   8.575 +       Customer_Info_Address_API.Get_City(identity,
   8.576 +                                               Customer_Info_Address_API.Get_Default_Address(identity,
   8.577 +                                                                  Address_Type_Code_API.Decode('PAY')))     city,
   8.578 +       RTRIM(Customer_Info_Address_API.Get_Address1(identity,
   8.579 +                                               Customer_Info_Address_API.Get_Default_Address(identity,
   8.580 +                                                                  Address_Type_Code_API.Decode('PAY')))||','||
   8.581 +                                               Customer_Info_Address_API.Get_Address2(identity,
   8.582 +                                               Customer_Info_Address_API.Get_Default_Address(identity,
   8.583 +                                                                 Address_Type_Code_API.Decode('PAY'))),',') address,
   8.584 +       interest_template           interest_template,
   8.585 +       reminder_template           reminder_template,
   8.586 +       Payment_Advice_API.Decode(payment_advice) payment_advice,
   8.587 +       ipi.&OBJID                  objid,
   8.588 +       &OBJVERSION                 objversion
   8.589 +FROM   identity_pay_info_tab ipi
   8.590 +WHERE  EXISTS (SELECT * FROM company_finance_auth1 c WHERE ipi.company = c.company)
   8.591 +AND    party_type = 'CUSTOMER'
   8.592 +WITH   read only;
   8.593 +
   8.594 +COMMENT ON TABLE &VIEW_CUST
   8.595 +   IS 'LU=&LU^PROMPT=Customer Pay Info^MODULE=&MODULE^';
   8.596 +
   8.597 +COMMENT ON COLUMN &VIEW_CUST..company
   8.598 +   IS 'FLAGS=PMI--^DATATYPE=STRING(20)/UPPERCASE^PROMPT=Company^REF=Company/NOCHECK^';
   8.599 +COMMENT ON COLUMN &VIEW_CUST..identity
   8.600 +   IS 'FLAGS=KMI-L^DATATYPE=STRING(20)/UPPERCASE^PROMPT=Customer Id^REF=CustomerInfo/CUSTOM=(Check_Cascade_Customer__,Cascade_Delete_Customer__)^';
   8.601 +COMMENT ON COLUMN &VIEW_CUST..party_name
   8.602 +   IS 'FLAGS=AMI-L^DATATYPE=STRING(100)^PROMPT=Customer Name^';
   8.603 +COMMENT ON COLUMN &VIEW_CUST..city
   8.604 +   IS 'FLAGS=A---L^DATATYPE=STRING(35)^PROMPT=City^';
   8.605 +COMMENT ON COLUMN &VIEW_CUST..address
   8.606 +   IS 'FLAGS=A---L^DATATYPE=STRING(2000)^PROMPT=Address^';
   8.607 +COMMENT ON COLUMN &VIEW_CUST..interest_template
   8.608 +   IS 'FLAGS=A-IUL^DATATYPE=STRING(20)/UPPERCASE^PROMPT=Interest Template^REF=InterestTemplate(company)/NOCHECK^';
   8.609 +COMMENT ON COLUMN &VIEW_CUST..reminder_template
   8.610 +   IS 'FLAGS=A-IUL^DATATYPE=STRING(20)/UPPERCASE^PROMPT=Reminder Template^REF=ReminderTemplate(company)/NOCHECK^';
   8.611 +COMMENT ON COLUMN &VIEW_CUST..payment_advice
   8.612 +   IS 'FLAGS=A-IU-^DATATYPE=STRING(200)^PROMPT=Payment Advice^REF=PaymentAdvice^';
   8.613 +-- Bug 68653, End
   8.614 +
   8.615 +PROMPT Creating &VIEW_LOV view
   8.616 +
   8.617 +-- Bug 68653, Begin, Added new columns address and city
   8.618 +CREATE OR REPLACE FORCE VIEW &VIEW_LOV AS
   8.619 +SELECT ipi.company                   company,
   8.620 +       party_type                  party_type_db,
   8.621 +       identity                    identity,
   8.622 +       Payment_Library_API.Get_Identity_Name(ipi.company,
   8.623 +                                             identity,
   8.624 +                                             Party_Type_API.Decode(party_type)) party_name,
   8.625 +       Payment_Library_API.Get_City(ipi.company,
   8.626 +                                    identity,
   8.627 +                                    party_type)    city,
   8.628 +       Payment_Library_API.Get_Address(ipi.company,
   8.629 +                                       identity,
   8.630 +                                       party_type) address,
   8.631 +       ipi.&OBJID                  objid,
   8.632 +       &OBJVERSION                 objversion
   8.633 +FROM   identity_pay_info_tab ipi
   8.634 +WHERE  EXISTS (SELECT * FROM company_finance_auth1 c WHERE ipi.company = c.company)
   8.635 +WITH   read only;
   8.636 +
   8.637 +COMMENT ON TABLE &VIEW_LOV
   8.638 +   IS 'LU=&LU^PROMPT=Customer/Supplier Pay Info^MODULE=&MODULE^';
   8.639 +
   8.640 +COMMENT ON COLUMN &VIEW_LOV..company
   8.641 +   IS 'FLAGS=PMI--^DATATYPE=STRING(20)/UPPERCASE^PROMPT=Company^REF=Company/NOCHECK^';
   8.642 +COMMENT ON COLUMN &VIEW_LOV..party_type_db
   8.643 +   IS 'FLAGS=PMI--^DATATYPE=STRING(20)^PROMPT=Party Type^';
   8.644 +COMMENT ON COLUMN &VIEW_LOV..identity
   8.645 +   IS 'FLAGS=KMI-L^DATATYPE=STRING(20)/UPPERCASE^PROMPT=Identity^';
   8.646 +COMMENT ON COLUMN &VIEW_LOV..party_name
   8.647 +   IS 'FLAGS=AMI-L^DATATYPE=STRING(100)^PROMPT=Name^';
   8.648 +COMMENT ON COLUMN &VIEW_LOV..city
   8.649 +   IS 'FLAGS=A---L^DATATYPE=STRING(35)^PROMPT=City^';
   8.650 +COMMENT ON COLUMN &VIEW_LOV..address
   8.651 +   IS 'FLAGS=A---L^DATATYPE=STRING(2000)^PROMPT=Address^';
   8.652 +-- Bug 68653, End
   8.653 +
   8.654 +
   8.655 +PROMPT Creating &VIEW_ALL view
   8.656 +
   8.657 +CREATE OR REPLACE FORCE VIEW &VIEW_ALL AS
   8.658 +SELECT ipi.company                 company,
   8.659 +       identity                    identity,
   8.660 +       Party_Type_API.Decode(party_type) party_type,
   8.661 +       Payment_Library_API.Get_Identity_Name(ipi.company,
   8.662 +                                             identity,
   8.663 +                                             Party_Type_API.Decode(party_type)) party_name,
   8.664 +       ipi.&OBJID                  objid,
   8.665 +       &OBJVERSION                 objversion
   8.666 +FROM   identity_pay_info_tab ipi
   8.667 +WHERE  EXISTS (SELECT * FROM company_finance_auth1 c WHERE ipi.company = c.company)
   8.668 +WITH   read only;
   8.669 +
   8.670 +COMMENT ON TABLE &VIEW_ALL
   8.671 +   IS 'LU=&LU^PROMPT=Identity Pay Info^MODULE=&MODULE^';
   8.672 +
   8.673 +COMMENT ON COLUMN &VIEW_ALL..company
   8.674 +   IS 'FLAGS=PMI--^DATATYPE=STRING(20)/UPPERCASE^PROMPT=Company^REF=Company/NOCHECK^';
   8.675 +COMMENT ON COLUMN &VIEW_ALL..identity
   8.676 +   IS 'FLAGS=KMI-L^DATATYPE=STRING(20)/UPPERCASE^PROMPT=Identity^';
   8.677 +COMMENT ON COLUMN &VIEW_ALL..party_type
   8.678 +   IS 'FLAGS=AMI-L^DATATYPE=STRING(200)^PROMPT=Party Type^REF=PartyType';
   8.679 +COMMENT ON COLUMN &VIEW_ALL..party_name
   8.680 +   IS 'FLAGS=AMI-L^DATATYPE=STRING(100)^PROMPT=Name^';
   8.681 +
   8.682 +PROMPT Creating &VIEWPCT view
   8.683 +
   8.684 +CREATE OR REPLACE FORCE VIEW &VIEWPCT AS
   8.685 +SELECT company                        company,
   8.686 +       identity                       identity,
   8.687 +       party_type                     party_type_db,
   8.688 +       priority                       priority,
   8.689 +       blocked_for_payment            blocked_for_payment,
   8.690 +       other_payee_identity           other_payee_identity,
   8.691 +       interest_template              interest_template,
   8.692 +       reminder_template              reminder_template,
   8.693 +       payment_delay                  payment_delay,
   8.694 +       amount_tolerance               amount_tolerance,
   8.695 +       percent_tolerance              percent_tolerance,
   8.696 +       disc_days_tolerance            disc_days_tolerance,
   8.697 +       netting_allowed                netting_allowed,
   8.698 +       format_no                      format_no,
   8.699 +       payment_advice                 payment_advice_db,
   8.700 +       deduction_group                deduction_group,
   8.701 +       corporation_id                 corporation_id,
   8.702 +       member_id                      member_id,
   8.703 +       send_reminder_to_payer         send_reminder_to_payer,
   8.704 +       send_interest_inv_to_payer     send_interest_inv_to_payer,
   8.705 +       payment_receipt_type           payment_receipt_type_db,
   8.706 +       send_statement_of_acc_to_payer send_statement_of_acc_to_payer
   8.707 +FROM   identity_pay_info_tab
   8.708 +WITH   read only;
   8.709 +
   8.710 +COMMENT ON TABLE &VIEWPCT
   8.711 +   IS 'LU=&LU^PROMPT=Identity Pay Info^MODULE=&MODULE^';
   8.712 +
   8.713 +COMMENT ON COLUMN &VIEWPCT..company
   8.714 +   IS 'FLAGS=PMI--^DATATYPE=STRING(20)/UPPERCASE^PROMPT=Company^REF=CompanyPayInfo/NOCHECK^';
   8.715 +COMMENT ON COLUMN &VIEWPCT..identity
   8.716 +   IS 'FLAGS=KMI--^DATATYPE=STRING(20)/UPPERCASE^PROMPT=Identity^';
   8.717 +COMMENT ON COLUMN &VIEWPCT..party_type_db
   8.718 +   IS 'FLAGS=A----^DATATYPE=STRING(20)^PROMPT=Party Type^';
   8.719 +COMMENT ON COLUMN &VIEWPCT..priority
   8.720 +   IS 'FLAGS=A-IUL^DATATYPE=NUMBER^PROMPT=Priority^';
   8.721 +COMMENT ON COLUMN &VIEWPCT..blocked_for_payment
   8.722 +   IS 'FLAGS=A-IUL^DATATYPE=BOOLEAN^PROMPT=Blocked For Payment^';
   8.723 +COMMENT ON COLUMN &VIEWPCT..other_payee_identity
   8.724 +   IS 'FLAGS=A-IUL^DATATYPE=STRING(20)/UPPERCASE^PROMPT=Other Payee Identity^REF=IdentityPayInfo(company)/NOCHECK^';
   8.725 +COMMENT ON COLUMN &VIEWPCT..interest_template
   8.726 +   IS 'FLAGS=A-IU-^DATATYPE=STRING(20)/UPPERCASE^PROMPT=Interest Template^REF=InterestTemplate(company)/NOCHECK^';
   8.727 +COMMENT ON COLUMN &VIEWPCT..reminder_template
   8.728 +   IS 'FLAGS=A-IU-^DATATYPE=STRING(20)/UPPERCASE^PROMPT=Reminder Template^REF=ReminderTemplate(company)/NOCHECK^';
   8.729 +COMMENT ON COLUMN &VIEWPCT..payment_delay
   8.730 +   IS 'FLAGS=A-IU-^DATATYPE=NUMBER^PROMPT=Number of Days Usual Payment Delay^';
   8.731 +COMMENT ON COLUMN &VIEWPCT..amount_tolerance
   8.732 +   IS 'FLAGS=A-IU-^DATATYPE=NUMBER^PROMPT=Amount Tolerance^';
   8.733 +COMMENT ON COLUMN &VIEWPCT..percent_tolerance
   8.734 +   IS 'FLAGS=A-IU-^DATATYPE=NUMBER^PROMPT=Percent Tolerance^';
   8.735 +COMMENT ON COLUMN &VIEWPCT..disc_days_tolerance
   8.736 +   IS 'FLAGS=A-IU-^DATATYPE=NUMBER^PROMPT=Tolerance Days for Discount^';
   8.737 +COMMENT ON COLUMN &VIEWPCT..netting_allowed
   8.738 +   IS 'FLAGS=AMIUL^DATATYPE=BOOLEAN^PROMPT=Netting Allowed^';
   8.739 +COMMENT ON COLUMN &VIEWPCT..format_no
   8.740 +   IS 'FLAGS=AMI--^DATATYPE=NUMBER^PROMPT=Format No^';
   8.741 +COMMENT ON COLUMN &VIEWPCT..payment_advice_db
   8.742 +   IS 'FLAGS=A----^DATATYPE=STRING(20)^PROMPT=Payment Advice^';
   8.743 +COMMENT ON COLUMN &VIEWPCT..deduction_group
   8.744 +   IS 'FLAGS=A-IUL^DATATYPE=STRING(20)^PROMPT=Deduction Group^REF=DeductionGroup/NOCHECK^';
   8.745 +COMMENT ON COLUMN &VIEWPCT..corporation_id
   8.746 +   IS 'FLAGS=A-IU-^DATATYPE=STRING(20)^PROMPT=Corporation Id^';
   8.747 +COMMENT ON COLUMN &VIEWPCT..member_id
   8.748 +   IS 'FLAGS=A-IU-^DATATYPE=STRING(20)^PROMPT=Member Id^';
   8.749 +COMMENT ON COLUMN &VIEWPCT..send_reminder_to_payer
   8.750 +   IS 'FLAGS=A-IU-^DATATYPE=STRING(5)^PROMPT=Send Reminder To Payer^';
   8.751 +COMMENT ON COLUMN &VIEWPCT..send_interest_inv_to_payer
   8.752 +   IS 'FLAGS=A-IU-^DATATYPE=STRING(5)^PROMPT=Send Interest Inv To Payer^';
   8.753 +COMMENT ON COLUMN &VIEWPCT..payment_receipt_type_db
   8.754 +   IS 'FLAGS=A----^DATATYPE=STRING(20)^PROMPT=Payment Receipt^';
   8.755 +COMMENT ON COLUMN &VIEWPCT..send_statement_of_acc_to_payer                        
   8.756 +   IS 'FLAGS=A-IU-^DATATYPE=STRING(5)^PROMPT=Send Statement Of Account To Payer^';
   8.757 +
   8.758 +
   8.759 +PROMPT Creating &VIEW_PAYER_QRY view
   8.760 +-- Bug 69035, Begin, Added reminder_template_id,interest_template_id and their descriptions   
   8.761 +CREATE OR REPLACE FORCE VIEW &VIEW_PAYER_QRY AS
   8.762 +SELECT p.company                      company,
   8.763 +       identity                       identity,
   8.764 +       Party_Type_API.Decode(party_type)  party_type,                              
   8.765 +       party_type                     party_type_db,
   8.766 +       Customer_Info_API.Get_Name(identity)  name,                              
   8.767 +       NVL(Ledger_Item_Util_API.Get_Payer_Dom_Balance(
   8.768 +                                p.company,
   8.769 +                                identity,
   8.770 +                                Party_Type_API.Decode(party_type)), 0)
   8.771 +                                      balance,
   8.772 +       NVL(Ledger_Item_Util_API.Get_Payer_Adv_Inv_Dom_Balance(
   8.773 +                                p.company,
   8.774 +                                identity,
   8.775 +                                Party_Type_API.Decode(party_type)), 0)
   8.776 +                                      payer_adv_inv_balance,
   8.777 +       NVL(Ledger_Item_Util_API.Get_Payer_Dom_Bal_of_other_cus(
   8.778 +                                p.company,
   8.779 +                                identity,
   8.780 +                                Party_Type_API.Decode(party_type)), 0)
   8.781 +                                      other_cust_bal,
   8.782 +       NVL(Ledger_Item_Util_API.Get_Payer_Dom_Amount_Due(
   8.783 +                                p.company,
   8.784 +                                identity,
   8.785 +                                Party_Type_API.Decode(party_type)), 0)
   8.786 +                                      amount_due,
   8.787 +       NVL(Ledger_Item_Util_API.Get_Payer_Dom_Pre_Pay_Bal(
   8.788 +                                p.company,
   8.789 +                                identity,
   8.790 +                                Party_Type_API.Decode(party_type)), 0)
   8.791 +                                      pre_payment_balance,
   8.792 +       Identity_Note_API.Check_Note_Exist(p.company,
   8.793 +                                          p.identity,
   8.794 +                                          p.party_type)
   8.795 +                                      is_note,
   8.796 +       p.reminder_template            reminder_template_id,
   8.797 +       Reminder_Template_Api.Get_Template_Description(p.company ,
   8.798 +                                                      p.reminder_template) 
   8.799 +                                      reminder_template_des,
   8.800 +       p.interest_template            interest_template_id,
   8.801 +       Interest_Template_API.Get_Template_Description(p.company,
   8.802 +                                                      p.interest_template) 
   8.803 +                                      interest_template_des,
   8.804 +       p.&OBJID                       objid,
   8.805 +       &OBJVERSION                    objversion
   8.806 +FROM   identity_pay_info_tab p
   8.807 +WHERE  EXISTS (SELECT * FROM company_finance_auth1 c WHERE p.company = c.company)
   8.808 +AND    party_type = 'CUSTOMER'
   8.809 +WITH   read only;
   8.810 +
   8.811 +COMMENT ON TABLE &VIEW_PAYER_QRY
   8.812 +   IS 'LU=&LU^PROMPT=Identity Pay Info^MODULE=&MODULE^';
   8.813 +
   8.814 +COMMENT ON COLUMN &VIEW_PAYER_QRY..company
   8.815 +   IS 'FLAGS=PM---^DATATYPE=STRING(20)/UPPERCASE^PROMPT=Company^REF=Company/NOCHECK^';
   8.816 +COMMENT ON COLUMN &VIEW_PAYER_QRY..identity
   8.817 +   IS 'FLAGS=PM---^DATATYPE=STRING(20)/UPPERCASE^PROMPT=Payer^';
   8.818 +COMMENT ON COLUMN &VIEW_PAYER_QRY..party_type
   8.819 +   IS 'FLAGS=KM--L^DATATYPE=STRING(200)^PROMPT=Party Type^REF=PartyType^';
   8.820 +COMMENT ON COLUMN &VIEW_PAYER_QRY..party_type_db
   8.821 +   IS 'FLAGS=A----^DATATYPE=STRING(20)^PROMPT=Party Type^';
   8.822 +COMMENT ON COLUMN &VIEW_PAYER_QRY..name
   8.823 +   IS 'FLAGS=AM--L^DATATYPE=STRING(100)^PROMPT=Name^';
   8.824 +COMMENT ON COLUMN &VIEW_PAYER_QRY..balance
   8.825 +   IS 'FLAGS=AM--L^DATATYPE=NUMBER^PROMPT=Payer Balance^';
   8.826 +COMMENT ON COLUMN &VIEW_PAYER_QRY..payer_adv_inv_balance
   8.827 +   IS 'FLAGS=AM--L^DATATYPE=NUMBER^PROMPT=Payer Adv Inv Balance^';
   8.828 +COMMENT ON COLUMN &VIEW_PAYER_QRY..other_cust_bal
   8.829 +   IS 'FLAGS=AM--L^DATATYPE=NUMBER^PROMPT=Other Customres Balance^';
   8.830 +COMMENT ON COLUMN &VIEW_PAYER_QRY..amount_due
   8.831 +   IS 'FLAGS=AM--L^DATATYPE=NUMBER^PROMPT=Amount Due^';
   8.832 +COMMENT ON COLUMN &VIEW_PAYER_QRY..pre_payment_balance
   8.833 +   IS 'FLAGS=AM--L^DATATYPE=NUMBER^PROMPT=Open Pre-Payments^';
   8.834 +COMMENT ON COLUMN &VIEW_PAYER_QRY..is_note
   8.835 +   IS 'FLAGS=AM--L^DATATYPE=BOOLEAN^PROMPT=Notes^';
   8.836 +COMMENT ON COLUMN &VIEW_PAYER_QRY..reminder_template_id
   8.837 +   IS 'FLAGS=AM--L^DATATYPE=STRING(20)^PROMPT=Reminder Template Id^';
   8.838 +COMMENT ON COLUMN &VIEW_PAYER_QRY..reminder_template_des
   8.839 +   IS 'FLAGS=AM--L^DATATYPE=STRING(200)^PROMPT=Reminder Template Description^';
   8.840 +COMMENT ON COLUMN &VIEW_PAYER_QRY..interest_template_id
   8.841 +   IS 'FLAGS=AM--L^DATATYPE=STRING(20)^PROMPT=Interest Template Id^';
   8.842 +COMMENT ON COLUMN &VIEW_PAYER_QRY..interest_template_des
   8.843 +   IS 'FLAGS=AM--L^DATATYPE=STRING(200)^PROMPT=Interest Template Description^';
   8.844 +-- Bug 69035, End
   8.845 +
   8.846 +PROMPT Creating &VIEW_MULTI_CUS view
   8.847 +
   8.848 +CREATE OR REPLACE FORCE VIEW &VIEW_MULTI_CUS AS
   8.849 +SELECT c.customer_id                                 customer_id,
   8.850 +       c.name                                        name,
   8.851 +       c.association_no                              association_no,
   8.852 +       c.customer_id                                 identity,
   8.853 +       c.party_type                                  party_type_db, 
   8.854 +       c.rowid                                       objid,
   8.855 +       LTRIM(LPAD(TO_CHAR(c.rowversion),2000))       objversion
   8.856 +FROM   customer_info_tab  c
   8.857 +WHERE  EXISTS
   8.858 +   (SELECT 1
   8.859 +    FROM   identity_pay_info_tab     p,
   8.860 +           identity_invoice_info_tab i
   8.861 +    WHERE  p.identity   = c.customer_id
   8.862 +    AND    p.party_type = 'CUSTOMER'
   8.863 +    AND EXISTS
   8.864 +        (SELECT * FROM company_finance_auth1 a WHERE p.company = a.company)
   8.865 +    AND    i.company    = p.company
   8.866 +    AND    i.identity   = p.identity
   8.867 +    AND    i.party_type = p.party_type)
   8.868 +WITH read only;
   8.869 +
   8.870 +COMMENT ON TABLE &VIEW_MULTI_CUS
   8.871 +   IS 'LU=&LU^PROMPT=Invoice Ledger Item^MODULE=&MODULE^';
   8.872 +
   8.873 +COMMENT ON COLUMN &VIEW_MULTI_CUS..customer_id
   8.874 +   IS 'FLAGS=KMI-L^DATATYPE=STRING(20)/UPPERCASE^PROMPT=Customer Id^';
   8.875 +COMMENT ON COLUMN &VIEW_MULTI_CUS..name
   8.876 +   IS 'FLAGS=AMIUL^DATATYPE=STRING(100)^PROMPT=Name^';
   8.877 +COMMENT ON COLUMN &VIEW_MULTI_CUS..association_no
   8.878 +   IS 'FLAGS=A-IUL^DATATYPE=STRING(50)^PROMPT=Association No^';
   8.879 +COMMENT ON COLUMN &VIEW_MULTI_CUS..identity
   8.880 +   IS 'FLAGS=A-IUL^DATATYPE=STRING(20)/UPPERCASE^PROMPT=Identity^';   
   8.881 +COMMENT ON COLUMN &VIEW_MULTI_CUS..party_type_db
   8.882 +   IS 'FLAGS=A-IUL^DATATYPE=STRING(20)^PROMPT=Party Type^';
   8.883 +   
   8.884 +
   8.885 +PROMPT Creating &VIEW_MULTI_SUP VIEW
   8.886 +
   8.887 +CREATE OR REPLACE FORCE VIEW &VIEW_MULTI_SUP AS
   8.888 +SELECT s.supplier_id                                   supplier_id,
   8.889 +       s.name                                          name,
   8.890 +       s.association_no                                association_no,
   8.891 +       s.suppliers_own_id                              suppliers_own_id,
   8.892 +       s.rowid                                         objid,
   8.893 +       LTRIM(LPAD(TO_CHAR(s.rowversion),2000))         objversion
   8.894 +FROM   supplier_info_tab s
   8.895 +WHERE  EXISTS
   8.896 +   (SELECT 1
   8.897 +    FROM   identity_pay_info_tab     p,
   8.898 +           identity_invoice_info_tab i
   8.899 +    WHERE  p.identity   = s.supplier_id
   8.900 +    AND    p.party_type = 'SUPPLIER'
   8.901 +    AND EXISTS
   8.902 +       (SELECT * FROM company_finance_auth1 a WHERE p.company = a.company)
   8.903 +    AND    i.company    = p.company
   8.904 +    AND    i.identity   = p.identity
   8.905 +    AND    i.party_type = p.party_type)
   8.906 +WITH read only;
   8.907 +
   8.908 +COMMENT ON TABLE &VIEW_MULTI_SUP
   8.909 +   IS 'LU=&LU^PROMPT=Invoice Ledger Item^MODULE=&MODULE^';
   8.910 +
   8.911 +COMMENT ON COLUMN &VIEW_MULTI_SUP..supplier_id
   8.912 +   IS 'FLAGS=KMI-L^DATATYPE=STRING(20)/UPPERCASE^PROMPT=Supplier Id^';
   8.913 +COMMENT ON COLUMN &VIEW_MULTI_SUP..name
   8.914 +   IS 'FLAGS=AMIUL^DATATYPE=STRING(100)^PROMPT=Name^';
   8.915 +COMMENT ON COLUMN &VIEW_MULTI_SUP..association_no
   8.916 +   IS 'FLAGS=A-IUL^DATATYPE=STRING(50)^PROMPT=Association No^';
   8.917 +COMMENT ON COLUMN &VIEW_MULTI_SUP..suppliers_own_id
   8.918 +   IS 'FLAGS=A-IUL^DATATYPE=STRING(20)^PROMPT=Suppliers Own Id^';
   8.919 +
   8.920 +
   8.921 +PROMPT Creating &VIEW_MULTI_ADD VIEW
   8.922 +CREATE OR REPLACE FORCE VIEW &VIEW_MULTI_ADD AS
   8.923 +SELECT s.supplier_id                    supplier_id,
   8.924 +       s.address_id                     address_id,
   8.925 +       s.valid_from                     valid_from,
   8.926 +       s.valid_to                       valid_to
   8.927 +FROM  supplier_info_address_tab s
   8.928 +WHERE  EXISTS
   8.929 +   (SELECT 1
   8.930 +    FROM   identity_pay_info_tab     p,
   8.931 +           identity_invoice_info_tab i
   8.932 +    WHERE  p.identity   = s.supplier_id
   8.933 +    AND    p.party_type = 'SUPPLIER'
   8.934 +    AND EXISTS
   8.935 +       (SELECT * FROM company_finance_auth1 a WHERE p.company = a.company)
   8.936 +    AND    i.company    = p.company
   8.937 +    AND    i.identity   = p.identity
   8.938 +    AND    i.party_type = p.party_type)
   8.939 +WITH read only;
   8.940 +
   8.941 +COMMENT ON TABLE &VIEW_MULTI_ADD
   8.942 +   IS 'LU=&LU^PROMPT=Invoice Ledger Item^MODULE=&MODULE^';
   8.943 +
   8.944 +COMMENT ON COLUMN &VIEW_MULTI_ADD..supplier_id
   8.945 +   IS 'FLAGS=PMI-L^DATATYPE=STRING(20)/UPPERCASE^PROMPT=Supplier Id^';
   8.946 +COMMENT ON COLUMN &VIEW_MULTI_ADD..address_id
   8.947 +   IS 'FLAGS=KMI-L^DATATYPE=STRING(50)/UPPERCASE^PROMPT=Address Id^';
   8.948 +COMMENT ON COLUMN &VIEW_MULTI_ADD..valid_from
   8.949 +   IS 'FLAGS=A-IUL^DATATYPE=DATE/DATE^PROMPT=Valid From^';
   8.950 +COMMENT ON COLUMN &VIEW_MULTI_ADD..valid_to
   8.951 +   IS 'FLAGS=A-IUL^DATATYPE=DATE/DATE^PROMPT=Valid To^';
   8.952 +
   8.953 +-----------------------------------------------------------------------------
   8.954 +-------------------- PACKAGES FOR METHODS -----------------------------------
   8.955 +-----------------------------------------------------------------------------
   8.956 +
   8.957 +PROMPT Creating &PKG implementation
   8.958 +
   8.959 +CREATE OR REPLACE PACKAGE BODY &PKG IS
   8.960 +
   8.961 +-----------------------------------------------------------------------------
   8.962 +-------------------- LU SPECIFIC IMPLEMENTATION METHOD DECLARATIONS ---------
   8.963 +-----------------------------------------------------------------------------
   8.964 +PROCEDURE Save_Identity_Notes___ (
   8.965 +   attr_       IN VARCHAR2,
   8.966 +   newrec_     IN &TABLE%ROWTYPE );
   8.967 +
   8.968 +FUNCTION Get_Next_Format_No___ (
   8.969 +   company_       IN VARCHAR2 ) RETURN NUMBER;
   8.970 +
   8.971 +PROCEDURE Check_Cascade___ (
   8.972 +   company_       IN VARCHAR2,
   8.973 +   identity_      IN VARCHAR2,
   8.974 +   party_type_db_ IN VARCHAR2 );
   8.975 +
   8.976 +PROCEDURE Import___ (
   8.977 +   crecomp_rec_ IN ENTERP_COMP_CONNECT_V160_API.Crecomp_Lu_Public_Rec );
   8.978 +
   8.979 +PROCEDURE Copy___ (
   8.980 +   crecomp_rec_   IN ENTERP_COMP_CONNECT_V160_API.Crecomp_Lu_Public_Rec );
   8.981 +
   8.982 +PROCEDURE Export___ (
   8.983 +   crecomp_rec_   IN ENTERP_COMP_CONNECT_V160_API.Crecomp_Lu_Public_Rec );
   8.984 +
   8.985 +PROCEDURE User_Allowed___(
   8.986 +   company_   IN VARCHAR2);
   8.987 +
   8.988 +
   8.989 +
   8.990 +
   8.991 +
   8.992 +-----------------------------------------------------------------------------
   8.993 +-------------------- IMPLEMENTATION BASE METHODS ----------------------------
   8.994 +-----------------------------------------------------------------------------
   8.995 +-- Lock_By_Id___
   8.996 +--    Client-support to lock a specific instance of the logical unit.
   8.997 +--
   8.998 +-- Lock_By_Keys___
   8.999 +--    Server support to lock a specific instance of the logical unit.
  8.1000 +--
  8.1001 +-- Get_Object_By_Id___
  8.1002 +--    Get LU-record from the database with a specified object identity.
  8.1003 +--
  8.1004 +-- Get_Object_By_Keys___
  8.1005 +--    Get LU-record from the database with specified key columns.
  8.1006 +--
  8.1007 +-- Check_Exist___
  8.1008 +--    Check if a specific LU-instance already exist in the database.
  8.1009 +--
  8.1010 +-- Get_Id_Version_By_Keys___
  8.1011 +--    Get the current OBJID and OBJVERSION for a specific LU-instance.
  8.1012 +-----------------------------------------------------------------------------
  8.1013 +
  8.1014 +FUNCTION Lock_By_Id___ (
  8.1015 +   objid_      IN VARCHAR2,
  8.1016 +   objversion_ IN VARCHAR2 ) RETURN &TABLE%ROWTYPE
  8.1017 +IS
  8.1018 +   row_changed EXCEPTION;
  8.1019 +   row_deleted EXCEPTION;
  8.1020 +   row_locked  EXCEPTION;
  8.1021 +   PRAGMA      exception_init(row_locked, -0054);
  8.1022 +   rec_        &TABLE%ROWTYPE;
  8.1023 +   dummy_      NUMBER;
  8.1024 +   CURSOR lock_control IS
  8.1025 +      SELECT *
  8.1026 +      FROM   &TABLE
  8.1027 +      WHERE  &OBJID = objid_
  8.1028 +      AND    &OBJVERSION = objversion_
  8.1029 +      FOR UPDATE NOWAIT;
  8.1030 +   CURSOR exist_control IS
  8.1031 +      SELECT 1
  8.1032 +      FROM   &TABLE
  8.1033 +      WHERE  &OBJID = objid_;
  8.1034 +BEGIN
  8.1035 +   OPEN lock_control;
  8.1036 +   FETCH lock_control INTO rec_;
  8.1037 +   IF (lock_control%FOUND) THEN
  8.1038 +      CLOSE lock_control;
  8.1039 +      RETURN rec_;
  8.1040 +   END IF;
  8.1041 +   CLOSE lock_control;
  8.1042 +   OPEN exist_control;
  8.1043 +   FETCH exist_control INTO dummy_;
  8.1044 +   IF (exist_control%FOUND) THEN
  8.1045 +      CLOSE exist_control;
  8.1046 +      RAISE row_changed;
  8.1047 +   ELSE
  8.1048 +      CLOSE exist_control;
  8.1049 +      RAISE row_deleted;
  8.1050 +   END IF;
  8.1051 +EXCEPTION
  8.1052 +   WHEN row_locked THEN
  8.1053 +      Error_SYS.Record_Locked(lu_name_);
  8.1054 +   WHEN row_changed THEN
  8.1055 +      Error_SYS.Record_Modified(lu_name_);
  8.1056 +   WHEN row_deleted THEN
  8.1057 +      Error_SYS.Record_Removed(lu_name_);
  8.1058 +END Lock_By_Id___;
  8.1059 +
  8.1060 +FUNCTION Lock_By_Keys___ (
  8.1061 +   company_       IN VARCHAR2,
  8.1062 +   identity_      IN VARCHAR2,
  8.1063 +   party_type_db_ IN VARCHAR2 ) RETURN &TABLE%ROWTYPE
  8.1064 +IS
  8.1065 +   row_deleted EXCEPTION;
  8.1066 +   rec_        &TABLE%ROWTYPE;
  8.1067 +   CURSOR lock_control IS
  8.1068 +      SELECT *
  8.1069 +      FROM  &TABLE
  8.1070 +      WHERE company = company_
  8.1071 +      AND   identity = identity_
  8.1072 +      AND   party_type = party_type_db_
  8.1073 +      FOR UPDATE;
  8.1074 +BEGIN
  8.1075 +   OPEN lock_control;
  8.1076 +   FETCH lock_control INTO rec_;
  8.1077 +   IF (lock_control%FOUND) THEN
  8.1078 +      CLOSE lock_control;
  8.1079 +      RETURN rec_;
  8.1080 +   ELSE
  8.1081 +      CLOSE lock_control;
  8.1082 +      RAISE row_deleted;
  8.1083 +   END IF;
  8.1084 +EXCEPTION
  8.1085 +   WHEN row_deleted THEN
  8.1086 +      Error_SYS.Record_Removed(lu_name_);
  8.1087 +END Lock_By_Keys___;
  8.1088 +
  8.1089 +FUNCTION Get_Object_By_Id___ (
  8.1090 +   objid_ IN VARCHAR2 ) RETURN &TABLE%ROWTYPE
  8.1091 +IS
  8.1092 +   lu_rec_ &TABLE%ROWTYPE;
  8.1093 +   CURSOR getrec IS
  8.1094 +      SELECT *
  8.1095 +      FROM   &TABLE
  8.1096 +      WHERE  &OBJID = objid_;
  8.1097 +BEGIN
  8.1098 +   OPEN getrec;
  8.1099 +   FETCH getrec INTO lu_rec_;
  8.1100 +   IF (getrec%NOTFOUND) THEN
  8.1101 +      CLOSE getrec;
  8.1102 +      Error_SYS.Record_Removed(lu_name_);
  8.1103 +   END IF;
  8.1104 +   CLOSE getrec;
  8.1105 +   RETURN(lu_rec_);
  8.1106 +END Get_Object_By_Id___;
  8.1107 +
  8.1108 +FUNCTION Get_Object_By_Keys___ (
  8.1109 +   company_       IN VARCHAR2,
  8.1110 +   identity_      IN VARCHAR2,
  8.1111 +   party_type_db_ IN VARCHAR2 ) RETURN &TABLE%ROWTYPE
  8.1112 +IS
  8.1113 +   lu_rec_ &TABLE%ROWTYPE;
  8.1114 +   CURSOR getrec IS
  8.1115 +      SELECT *
  8.1116 +      FROM  &TABLE
  8.1117 +      WHERE company = company_
  8.1118 +      AND   identity = identity_
  8.1119 +      AND   party_type = party_type_db_;
  8.1120 +BEGIN
  8.1121 +   OPEN getrec;
  8.1122 +   FETCH getrec INTO lu_rec_;
  8.1123 +   CLOSE getrec;
  8.1124 +   RETURN(lu_rec_);
  8.1125 +END Get_Object_By_Keys___;
  8.1126 +
  8.1127 +FUNCTION Check_Exist___ (
  8.1128 +   company_       IN VARCHAR2,
  8.1129 +   identity_      IN VARCHAR2,
  8.1130 +   party_type_db_ IN VARCHAR2 ) RETURN BOOLEAN
  8.1131 +IS
  8.1132 +   dummy_ NUMBER;
  8.1133 +   CURSOR exist_control IS
  8.1134 +      SELECT 1
  8.1135 +      FROM   &TABLE
  8.1136 +      WHERE company = company_
  8.1137 +      AND   identity = identity_
  8.1138 +      AND   party_type = party_type_db_;
  8.1139 +BEGIN
  8.1140 +   OPEN exist_control;
  8.1141 +   FETCH exist_control INTO dummy_;
  8.1142 +   IF (exist_control%FOUND) THEN
  8.1143 +      CLOSE exist_control;
  8.1144 +      RETURN(TRUE);
  8.1145 +   END IF;
  8.1146 +   CLOSE exist_control;
  8.1147 +   RETURN(FALSE);
  8.1148 +END Check_Exist___;
  8.1149 +
  8.1150 +PROCEDURE Get_Id_Version_By_Keys___ (
  8.1151 +   objid_         IN OUT VARCHAR2,
  8.1152 +   objversion_    IN OUT VARCHAR2,
  8.1153 +   company_       IN     VARCHAR2,
  8.1154 +   identity_      IN     VARCHAR2,
  8.1155 +   party_type_db_ IN     VARCHAR2)
  8.1156 +IS
  8.1157 +   CURSOR get_version IS
  8.1158 +      SELECT &OBJID, &OBJVERSION
  8.1159 +      FROM  &TABLE
  8.1160 +      WHERE company = company_
  8.1161 +      AND   identity = identity_
  8.1162 +      AND   party_type = party_type_db_;
  8.1163 +BEGIN
  8.1164 +   OPEN get_version;
  8.1165 +   FETCH get_version INTO objid_, objversion_;
  8.1166 +   CLOSE get_version;
  8.1167 +END Get_Id_Version_By_Keys___;
  8.1168 +
  8.1169 +-----------------------------------------------------------------------------
  8.1170 +-------------------- IMPLEMENTATION BASE METHODS FOR INSERT -----------------
  8.1171 +-----------------------------------------------------------------------------
  8.1172 +-- Prepare_Insert___
  8.1173 +--    Set all default values for a new instance (ON-NEW-RECORD) of this
  8.1174 +--    logical unit by calling procedure Add_Attr.
  8.1175 +--
  8.1176 +-- Unpack_Check_Insert___
  8.1177 +--    Unpack the attribute list, check all attributes from the client
  8.1178 +--    and generate all default values before creation of the new object.
  8.1179 +--
  8.1180 +-- Insert___
  8.1181 +--    Insert a new LU-instance into the database and return the values
  8.1182 +--    for OBJID and OBJVERSION.
  8.1183 +-----------------------------------------------------------------------------
  8.1184 +
  8.1185 +PROCEDURE Prepare_Insert___ (
  8.1186 +   attr_ IN OUT VARCHAR2 )
  8.1187 +IS
  8.1188 +   company_             &TABLE..company%TYPE;
  8.1189 +   identity_            &TABLE..identity%TYPE;
  8.1190 +   party_type_          &VIEW..party_type%TYPE;
  8.1191 +   template_id_         &VIEW..template_id%TYPE;
  8.1192 +BEGIN
  8.1193 +
  8.1194 +   company_       := Client_SYS.Get_Item_Value('COMPANY',attr_);
  8.1195 +   identity_      := Client_SYS.Get_Item_Value('IDENTITY',attr_);
  8.1196 +   party_type_    := Client_SYS.Get_Item_Value('PARTY_TYPE',attr_);
  8.1197 +   template_id_   := Confirmation_Stmnt_Templ_API.Get_Default_Template(company_);
  8.1198 +
  8.1199 +   Client_SYS.Clear_Attr(attr_);
  8.1200 +
  8.1201 +--          Default value 'No Advice'
  8.1202 +   Client_SYS.Add_To_Attr('PAYMENT_ADVICE', PAYMENT_ADVICE_API.DECODE('1'),attr_);
  8.1203 +
  8.1204 +   IF (party_type_ = Party_Type_API.Decode('CUSTOMER')) THEN
  8.1205 +      Client_SYS.Add_To_Attr('REMINDER_TEMPLATE', Reminder_Template_API.Get_Default_Template(company_), attr_);
  8.1206 +      Client_SYS.Add_To_Attr('SEND_REMINDER_TO_PAYER', 'FALSE', attr_);
  8.1207 +      Client_SYS.Add_To_Attr('SEND_INTEREST_INV_TO_PAYER', 'FALSE', attr_);
  8.1208 +      Client_SYS.Add_To_Attr('PAYMENT_RECEIPT_TYPE', Payment_Receipt_Type_API.Decode('NO_RECEIPT'), attr_);
  8.1209 +   ELSIF (party_type_ = Party_Type_API.Decode('SUPPLIER') ) THEN
  8.1210 +      Client_SYS.Add_To_Attr('BLOCKED_FOR_PAYMENT', 'FALSE', attr_);
  8.1211 +      Client_SYS.Add_To_Attr('CHECK_RECIPIENT', Check_Recipient_API.Decode('PAYEE'), attr_);
  8.1212 +   END IF;
  8.1213 +   Client_SYS.Add_To_Attr('INTEREST_TEMPLATE', Interest_Template_API.Get_Default_Template(company_), attr_);
  8.1214 +   Client_SYS.Add_To_Attr('NETTING_ALLOWED', 'FALSE', attr_);
  8.1215 +   Client_SYS.Add_To_Attr('TEMPLATE_ID', template_id_, attr_);
  8.1216 +   Client_SYS.Add_To_Attr('SEND_STATEMENT_OF_ACC_TO_PAYER', 'FALSE', attr_);
  8.1217 +END Prepare_Insert___;
  8.1218 +
  8.1219 +
  8.1220 +PROCEDURE Unpack_Check_Insert___ (
  8.1221 +   attr_   IN OUT VARCHAR2,
  8.1222 +   newrec_ IN OUT &TABLE%ROWTYPE )
  8.1223 +IS
  8.1224 +   ptr_   NUMBER;
  8.1225 +   name_  VARCHAR2(30);
  8.1226 +   value_ VARCHAR2(2000);
  8.1227 +BEGIN
  8.1228 +   ptr_ := NULL;
  8.1229 +   WHILE (Client_SYS.Get_Next_From_Attr(attr_, ptr_, name_, value_)) LOOP
  8.1230 +      IF (name_ = 'COMPANY') THEN
  8.1231 +         newrec_.company := value_;
  8.1232 +         Company_API.Exist(newrec_.company);
  8.1233 + 	 User_Allowed___(newrec_.company);
  8.1234 +      ELSIF (name_ = 'IDENTITY') THEN
  8.1235 +         newrec_.identity := value_;
  8.1236 +      ELSIF (name_ = 'PARTY_TYPE') THEN
  8.1237 +         newrec_.party_type := Party_Type_API.Encode(value_);
  8.1238 +         Payment_Library_API.Exist_In_Enterp(newrec_.company, newrec_.identity, value_);
  8.1239 +         IF (newrec_.party_type <> 'COMPANY') THEN
  8.1240 +            Identity_Invoice_Info_API.Exist(newrec_.company, newrec_.identity, value_);
  8.1241 +         END IF;
  8.1242 +      ELSIF (name_ = 'PARTY_TYPE_DB') THEN
  8.1243 +         newrec_.party_type := value_;
  8.1244 +         Payment_Library_API.Exist_In_Enterp(newrec_.company, newrec_.identity, Party_Type_API.Decode(newrec_.party_type));
  8.1245 +         IF (newrec_.party_type <> Party_Type_API.Decode('COMPANY')) THEN
  8.1246 +            Identity_Invoice_Info_API.Exist_Db(newrec_.company, newrec_.identity, value_);
  8.1247 +         END IF;
  8.1248 +      ELSIF (name_ = 'PRIORITY') THEN
  8.1249 +         newrec_.priority := Client_SYS.Attr_Value_To_Number(value_);
  8.1250 +      ELSIF (name_ = 'BLOCKED_FOR_PAYMENT') THEN
  8.1251 +         newrec_.blocked_for_payment := value_;
  8.1252 +         IF (value_ IS NOT NULL AND newrec_.blocked_for_payment NOT IN ('TRUE', 'FALSE')) THEN
  8.1253 +            RAISE value_error;
  8.1254 +         END IF;
  8.1255 +      ELSIF (name_ = 'OTHER_PAYEE_IDENTITY') THEN
  8.1256 +         newrec_.other_payee_identity := value_;
  8.1257 +         IF (value_ IS NOT NULL) THEN
  8.1258 +            Identity_Pay_Info_API.Exist(newrec_.company, newrec_.other_payee_identity, Party_Type_API.Decode(newrec_.party_type));
  8.1259 +         END IF;
  8.1260 +      ELSIF (name_ = 'INTEREST_TEMPLATE') THEN
  8.1261 +         newrec_.interest_template := value_;
  8.1262 +         IF (value_ IS NOT NULL) THEN
  8.1263 +            Interest_Template_API.Exist(newrec_.company, newrec_.interest_template);
  8.1264 +         END IF;
  8.1265 +      ELSIF (name_ = 'REMINDER_TEMPLATE') THEN
  8.1266 +         newrec_.reminder_template := value_;
  8.1267 +         IF (value_ IS NOT NULL) THEN
  8.1268 +            Reminder_Template_API.Exist(newrec_.company, newrec_.reminder_template);
  8.1269 +         END IF;
  8.1270 +      ELSIF (name_ = 'PAYMENT_DELAY') THEN
  8.1271 +         newrec_.payment_delay := Client_SYS.Attr_Value_To_Number(value_);
  8.1272 +         IF (TRUNC(newrec_.payment_delay) <> newrec_.payment_delay) THEN
  8.1273 +            Error_SYS.Record_General(lu_name_, 'NOTWHOLENUM: A whole number must be specified for the payment delay.');
  8.1274 +         END IF;
  8.1275 +      ELSIF (name_ = 'AMOUNT_TOLERANCE') THEN
  8.1276 +         newrec_.amount_tolerance := Client_SYS.Attr_Value_To_Number(value_);
  8.1277 +      ELSIF (name_ = 'PERCENT_TOLERANCE') THEN
  8.1278 +         newrec_.percent_tolerance := Client_SYS.Attr_Value_To_Number(value_);
  8.1279 +      ELSIF (name_ = 'DISC_DAYS_TOLERANCE') THEN
  8.1280 +         newrec_.disc_days_tolerance := Client_SYS.Attr_Value_To_Number(value_);
  8.1281 +      ELSIF (name_ = 'NETTING_ALLOWED') THEN
  8.1282 +         newrec_.netting_allowed := value_;
  8.1283 +         IF (newrec_.netting_allowed NOT IN ('TRUE', 'FALSE')) THEN
  8.1284 +            RAISE value_error;
  8.1285 +         END IF;
  8.1286 +      ELSIF (name_ = 'FORMAT_NO') THEN
  8.1287 +         newrec_.format_no := Client_SYS.Attr_Value_To_Number(value_);
  8.1288 +      ELSIF (name_ = 'PAYMENT_ADVICE') THEN
  8.1289 +         newrec_.payment_advice := Payment_Advice_API.Encode(value_);
  8.1290 +         IF (value_ IS NOT NULL) THEN
  8.1291 +            Payment_Advice_API.Exist(value_);
  8.1292 +         END IF;
  8.1293 +      ELSIF (name_ = 'PAYMENT_ADVICE_DB') THEN
  8.1294 +         newrec_.payment_advice := value_;
  8.1295 +         IF (value_ IS NOT NULL) THEN
  8.1296 +            Payment_Advice_API.Exist_Db(value_);
  8.1297 +         END IF;
  8.1298 +      ELSIF (name_ = 'DEDUCTION_GROUP') THEN
  8.1299 +         newrec_.deduction_group := value_;
  8.1300 +         IF (value_ IS NOT NULL) THEN
  8.1301 +            Deduction_Group_API.Exist(newrec_.company, newrec_.deduction_group);
  8.1302 +         END IF;
  8.1303 +      ELSIF (name_ = 'CORPORATION_ID') THEN
  8.1304 +         newrec_.corporation_id := value_;
  8.1305 +      ELSIF (name_ = 'MEMBER_ID') THEN
  8.1306 +         newrec_.member_id := value_;
  8.1307 +      ELSIF (name_ = 'SEND_REMINDER_TO_PAYER') THEN
  8.1308 +         newrec_.send_reminder_to_payer := value_;
  8.1309 +      ELSIF (name_ = 'SEND_INTEREST_INV_TO_PAYER') THEN
  8.1310 +         newrec_.send_interest_inv_to_payer := value_;
  8.1311 +      ELSIF (name_ = 'RULE_ID') THEN
  8.1312 +         newrec_.rule_id := value_;
  8.1313 +         IF (value_ IS NOT NULL) THEN
  8.1314 +            Pay_Method_Rule_API.Exist(newrec_.company, newrec_.rule_id);
  8.1315 +         END IF;
  8.1316 +      ELSIF (name_ = 'PAYMENT_RECEIPT_TYPE') THEN
  8.1317 +         newrec_.payment_receipt_type := Payment_Receipt_Type_API.Encode(value_);
  8.1318 +         IF (value_ IS NOT NULL) THEN
  8.1319 +            Payment_Receipt_Type_API.Exist(value_);
  8.1320 +         END IF;
  8.1321 +      ELSIF (name_ = 'PAYMENT_RECEIPT_TYPE_DB') THEN
  8.1322 +         newrec_.payment_receipt_type := value_;
  8.1323 +         IF (value_ IS NOT NULL) THEN
  8.1324 +            Payment_Receipt_Type_API.Exist_Db(value_);
  8.1325 +         END IF;
  8.1326 +      ELSIF (name_ = 'TEMPLATE_ID') THEN
  8.1327 +         newrec_.template_id := value_;
  8.1328 +         IF (value_ IS NOT NULL) THEN
  8.1329 +            Confirmation_Stmnt_Templ_API.Exist(newrec_.company, newrec_.template_id);
  8.1330 +         END IF;
  8.1331 +      ELSIF (name_ = 'CHECK_RECIPIENT') THEN
  8.1332 +         newrec_.check_recipient := Check_Recipient_API.Encode(value_);
  8.1333 +         IF (value_ IS NOT NULL) THEN
  8.1334 +            Check_Recipient_API.Exist(value_);
  8.1335 +         END IF;
  8.1336 +      ELSIF (name_ = 'CHECK_RECIPIENT_DB') THEN
  8.1337 +         newrec_.check_recipient := value_;
  8.1338 +         IF (value_ IS NOT NULL) THEN
  8.1339 +            Check_Recipient_API.Exist_Db(value_);
  8.1340 +         END IF;
  8.1341 +      ELSIF (name_ = 'SEND_STATEMENT_OF_ACC_TO_PAYER') THEN
  8.1342 +         newrec_.send_statement_of_acc_to_payer := value_;
  8.1343 +      ELSE
  8.1344 +         Error_SYS.Item_Not_Exist(lu_name_, name_, value_);
  8.1345 +      END IF;
  8.1346 +   END LOOP;
  8.1347 +
  8.1348 +
  8.1349 +   IF (newrec_.amount_tolerance < 0) OR (newrec_.percent_tolerance < 0) OR (newrec_.disc_days_tolerance < 0) THEN
  8.1350 +      Error_SYS.Appl_General(lu_name_, 'NEGTOLERANCE: Tolerance should be positive value.');
  8.1351 +   END IF;
  8.1352 +
  8.1353 +
  8.1354 +   Client_SYS.Clear_Attr(attr_);
  8.1355 +
  8.1356 +   Error_SYS.Check_Not_Null(lu_name_, 'COMPANY', newrec_.company);
  8.1357 +   Error_SYS.Check_Not_Null(lu_name_, 'IDENTITY', newrec_.identity);
  8.1358 +   Error_SYS.Check_Not_Null(lu_name_, 'PARTY_TYPE', newrec_.party_type);
  8.1359 +   Error_SYS.Check_Not_Null(lu_name_, 'NETTING_ALLOWED', newrec_.netting_allowed);
  8.1360 +
  8.1361 +   IF (newrec_.interest_template IS NULL) THEN
  8.1362 +      newrec_.interest_template := Interest_Template_API.Get_Default_Template(newrec_.company);
  8.1363 +   END IF;
  8.1364 +
  8.1365 +   IF (newrec_.party_type = 'SUPPLIER') THEN
  8.1366 +      Error_SYS.Check_Not_Null(lu_name_, 'PRIORITY', newrec_.priority);
  8.1367 +      Error_SYS.Check_Not_Null(lu_name_, 'BLOCKED_FOR_PAYMENT', newrec_.blocked_for_payment);
  8.1368 +      Error_SYS.Check_Not_Null(lu_name_, 'CHECK_RECIPIENT', newrec_.check_recipient);
  8.1369 +   END IF;
  8.1370 +   IF (newrec_.party_type = 'CUSTOMER') THEN
  8.1371 +      Error_SYS.Check_Not_Null(lu_name_, 'INTEREST_TEMPLATE', newrec_.interest_template);
  8.1372 +      Error_SYS.Check_Not_Null(lu_name_, 'REMINDER_TEMPLATE', newrec_.reminder_template);
  8.1373 +      Error_SYS.Check_Not_Null(lu_name_, 'PAYMENT_RECEIPT_TYPE', newrec_.payment_receipt_type);
  8.1374 +      IF Company_Invoice_Info_API.Get_Use_Tax_Invoice(newrec_.company)='TRUE' AND newrec_.payment_receipt_type != 'AT_MATCHING' THEN
  8.1375 +         Error_SYS.Record_General(lu_name_, 'WRONGPAYRECTYPE: Only Receipt At Matching is allowed when Tax Invoice for company is used.');
  8.1376 +      END IF;
  8.1377 +   END IF;
  8.1378 +
  8.1379 +   Error_SYS.Check_Not_Null(lu_name_, 'IDENTITY', newrec_.identity);
  8.1380 +
  8.1381 +   IF (newrec_.identity = newrec_.other_payee_identity) THEN
  8.1382 +      Error_SYS.Record_General(lu_name_, 'SAMEPARTY: Other Payee cannot refer to itself.');
  8.1383 +   END IF;
  8.1384 +
  8.1385 +EXCEPTION
  8.1386 +   WHEN value_error THEN
  8.1387 +      Error_SYS.Item_Format(lu_name_, name_, value_);
  8.1388 +END Unpack_Check_Insert___;
  8.1389 +
  8.1390 +
  8.1391 +PROCEDURE Insert___ (
  8.1392 +   objid_      OUT    VARCHAR2,
  8.1393 +   objversion_ OUT    VARCHAR2,
  8.1394 +   newrec_     IN OUT &TABLE%ROWTYPE,
  8.1395 +   attr_       IN OUT VARCHAR2 )
  8.1396 +IS
  8.1397 +   CURSOR get_objid IS
  8.1398 +      SELECT &OBJID
  8.1399 +      FROM  &TABLE
  8.1400 +      WHERE company = newrec_.company
  8.1401 +      AND   identity = newrec_.identity
  8.1402 +      AND   party_type = newrec_.party_type;
  8.1403 +BEGIN
  8.1404 +   newrec_.format_no := Get_Next_Format_No___ (newrec_.company);
  8.1405 +   newrec_.rowversion := 1;
  8.1406 +   objversion_ := to_char(newrec_.rowversion);
  8.1407 +   INSERT
  8.1408 +      INTO identity_pay_info_tab (
  8.1409 +         company,
  8.1410 +         identity,
  8.1411 +         party_type,
  8.1412 +         priority,
  8.1413 +         blocked_for_payment,
  8.1414 +         other_payee_identity,
  8.1415 +         interest_template,
  8.1416 +         reminder_template,
  8.1417 +         payment_delay,
  8.1418 +         amount_tolerance,
  8.1419 +         percent_tolerance,
  8.1420 +         disc_days_tolerance,
  8.1421 +         netting_allowed,
  8.1422 +         format_no,
  8.1423 +         payment_advice,
  8.1424 +         deduction_group,
  8.1425 +         corporation_id,
  8.1426 +         member_id,
  8.1427 +         send_reminder_to_payer,
  8.1428 +         send_interest_inv_to_payer,
  8.1429 +         rule_id,
  8.1430 +         next_payment_matching_id,
  8.1431 +         payment_receipt_type,
  8.1432 +         template_id,
  8.1433 +         check_recipient,
  8.1434 +         send_statement_of_acc_to_payer,
  8.1435 +         rowversion)
  8.1436 +      VALUES (
  8.1437 +         newrec_.company,
  8.1438 +         newrec_.identity,
  8.1439 +         newrec_.party_type,
  8.1440 +         newrec_.priority,
  8.1441 +         newrec_.blocked_for_payment,
  8.1442 +         newrec_.other_payee_identity,
  8.1443 +         newrec_.interest_template,
  8.1444 +         newrec_.reminder_template,
  8.1445 +         newrec_.payment_delay,
  8.1446 +         newrec_.amount_tolerance,
  8.1447 +         newrec_.percent_tolerance,
  8.1448 +         newrec_.disc_days_tolerance,
  8.1449 +         newrec_.netting_allowed,
  8.1450 +         newrec_.format_no,
  8.1451 +         newrec_.payment_advice,
  8.1452 +         newrec_.deduction_group,
  8.1453 +         newrec_.corporation_id,
  8.1454 +         newrec_.member_id,
  8.1455 +         newrec_.send_reminder_to_payer,
  8.1456 +         newrec_.send_interest_inv_to_payer,
  8.1457 +         newrec_.rule_id,
  8.1458 +         0,
  8.1459 +         newrec_.payment_receipt_type,
  8.1460 +         newrec_.template_id,
  8.1461 +         newrec_.check_recipient,
  8.1462 +         newrec_.send_statement_of_acc_to_payer,
  8.1463 +         newrec_.rowversion)
  8.1464 +      RETURNING &OBJID INTO objid_;
  8.1465 +EXCEPTION
  8.1466 +   WHEN dup_val_on_index THEN
  8.1467 +      Error_SYS.Record_General(lu_name_, 'PARTYTYPEIDNOTEXIST: :P1 already exists in the Payment module.',
  8.1468 +      Party_Type_API.Decode(newrec_.party_type));
  8.1469 +END Insert___;
  8.1470 +
  8.1471 +-----------------------------------------------------------------------------
  8.1472 +-------------------- IMPLEMENTATION BASE METHODS FOR UPDATE -----------------
  8.1473 +-----------------------------------------------------------------------------
  8.1474 +-- Unpack_Check_Update___
  8.1475 +--    Unpack the attribute list, check all attributes from the client
  8.1476 +--    and generate all default values before modifying the object.
  8.1477 +--
  8.1478 +-- Update___
  8.1479 +--    Update an existing LU-instance in the database and return the
  8.1480 +--    the new OBJVERSION.
  8.1481 +-----------------------------------------------------------------------------
  8.1482 +
  8.1483 +PROCEDURE Unpack_Check_Update___ (
  8.1484 +   attr_   IN OUT VARCHAR2,
  8.1485 +   newrec_ IN OUT &TABLE%ROWTYPE,
  8.1486 +   objid_  IN     VARCHAR2 )
  8.1487 +IS
  8.1488 +   ptr_   NUMBER;
  8.1489 +   name_  VARCHAR2(30);
  8.1490 +   value_ VARCHAR2(2000);
  8.1491 +BEGIN
  8.1492 +   ptr_ := NULL;
  8.1493 +   WHILE (Client_SYS.Get_Next_From_Attr(attr_, ptr_, name_, value_)) LOOP
  8.1494 +      IF (name_ = 'COMPANY') THEN
  8.1495 +         Error_SYS.Item_Update(lu_name_, 'COMPANY');
  8.1496 +      ELSIF (name_ = 'IDENTITY') THEN
  8.1497 +         Error_SYS.Item_Update(lu_name_, 'IDENTITY');
  8.1498 +      ELSIF (name_ = 'PARTY_TYPE') THEN
  8.1499 +         Error_SYS.Item_Update(lu_name_, 'PARTY_TYPE');
  8.1500 +      ELSIF (name_ = 'PARTY_TYPE_DB') THEN
  8.1501 +         Error_SYS.Item_Update(lu_name_, 'PARTY_TYPE');
  8.1502 +      ELSIF (name_ = 'PRIORITY') THEN
  8.1503 +         newrec_.priority := Client_SYS.Attr_Value_To_Number(value_);
  8.1504 +      ELSIF (name_ = 'BLOCKED_FOR_PAYMENT') THEN
  8.1505 +         newrec_.blocked_for_payment := value_;
  8.1506 +         IF (value_ IS NOT NULL AND newrec_.blocked_for_payment NOT IN ('TRUE', 'FALSE')) THEN
  8.1507 +            RAISE value_error;
  8.1508 +         END IF;
  8.1509 +      ELSIF (name_ = 'OTHER_PAYEE_IDENTITY') THEN
  8.1510 +         newrec_.other_payee_identity := value_;
  8.1511 +         IF (value_ IS NOT NULL) THEN
  8.1512 +            Identity_Pay_Info_API.Exist(newrec_.company, newrec_.other_payee_identity ,Party_Type_API.Decode(newrec_.party_type));
  8.1513 +         END IF;
  8.1514 +      ELSIF (name_ = 'INTEREST_TEMPLATE') THEN
  8.1515 +         newrec_.interest_template := value_;
  8.1516 +         IF (value_ IS NOT NULL) THEN
  8.1517 +            Interest_Template_API.Exist(newrec_.company, newrec_.interest_template);
  8.1518 +         END IF;
  8.1519 +      ELSIF (name_ = 'REMINDER_TEMPLATE') THEN
  8.1520 +         newrec_.reminder_template := value_;
  8.1521 +         IF (value_ IS NOT NULL) THEN
  8.1522 +            Reminder_Template_API.Exist(newrec_.company, newrec_.reminder_template);
  8.1523 +         END IF;
  8.1524 +      ELSIF (name_ = 'PAYMENT_DELAY') THEN
  8.1525 +         newrec_.payment_delay := Client_SYS.Attr_Value_To_Number(value_);
  8.1526 +         IF (TRUNC(newrec_.payment_delay) <> newrec_.payment_delay) THEN
  8.1527 +            Error_SYS.Record_General(lu_name_, 'NOTWHOLENUM: A whole number must be specified for the payment delay.');
  8.1528 +         END IF;
  8.1529 +      ELSIF (name_ = 'AMOUNT_TOLERANCE') THEN
  8.1530 +         newrec_.amount_tolerance := Client_SYS.Attr_Value_To_Number(value_);
  8.1531 +      ELSIF (name_ = 'PERCENT_TOLERANCE') THEN
  8.1532 +         newrec_.percent_tolerance := Client_SYS.Attr_Value_To_Number(value_);
  8.1533 +      ELSIF (name_ = 'DISC_DAYS_TOLERANCE') THEN
  8.1534 +         newrec_.disc_days_tolerance := Client_SYS.Attr_Value_To_Number(value_);
  8.1535 +      ELSIF (name_ = 'NETTING_ALLOWED') THEN
  8.1536 +         newrec_.netting_allowed := value_;
  8.1537 +         IF (newrec_.netting_allowed NOT IN ('TRUE', 'FALSE')) THEN
  8.1538 +            RAISE value_error;
  8.1539 +         END IF;
  8.1540 +      ELSIF (name_ = 'FORMAT_NO') THEN
  8.1541 +         Error_SYS.Item_Update(lu_name_, 'FORMAT_NO');
  8.1542 +      ELSIF (name_ = 'PAYMENT_ADVICE') THEN
  8.1543 +         newrec_.payment_advice := Payment_Advice_API.Encode(value_);
  8.1544 +         IF (value_ IS NOT NULL) THEN
  8.1545 +            Payment_Advice_API.Exist(value_);
  8.1546 +         END IF;
  8.1547 +      ELSIF (name_ = 'PAYMENT_ADVICE_DB') THEN
  8.1548 +         newrec_.payment_advice := value_;
  8.1549 +         IF (value_ IS NOT NULL) THEN
  8.1550 +            Payment_Advice_API.Exist_Db(value_);
  8.1551 +         END IF;
  8.1552 +      ELSIF (name_ = 'DEDUCTION_GROUP') THEN
  8.1553 +         newrec_.deduction_group := value_;
  8.1554 +         IF (value_ IS NOT NULL) THEN
  8.1555 +            Deduction_Group_API.Exist(newrec_.company, newrec_.deduction_group);
  8.1556 +         END IF;
  8.1557 +      ELSIF (name_ = 'CORPORATION_ID') THEN
  8.1558 +         newrec_.corporation_id := value_;
  8.1559 +      ELSIF (name_ = 'MEMBER_ID') THEN
  8.1560 +         newrec_.member_id := value_;
  8.1561 +      ELSIF (name_ = 'SEND_REMINDER_TO_PAYER') THEN
  8.1562 +         newrec_.send_reminder_to_payer := value_;
  8.1563 +      ELSIF (name_ = 'SEND_INTEREST_INV_TO_PAYER') THEN
  8.1564 +         newrec_.send_interest_inv_to_payer := value_;
  8.1565 +      ELSIF (name_ = 'NOTE') THEN
  8.1566 +         NULL;
  8.1567 +      ELSIF (name_ = 'NOTE_UPDATE') THEN
  8.1568 +         NULL;
  8.1569 +      ELSIF (name_ = 'RULE_ID') THEN
  8.1570 +         newrec_.rule_id := value_;
  8.1571 +         IF (value_ IS NOT NULL) THEN
  8.1572 +            Pay_Method_Rule_API.Exist(newrec_.company, newrec_.rule_id);
  8.1573 +         END IF;
  8.1574 +      ELSIF (name_ = 'PAYMENT_RECEIPT_TYPE') THEN
  8.1575 +         newrec_.payment_receipt_type := Payment_Receipt_Type_API.Encode(value_);
  8.1576 +         IF (value_ IS NOT NULL) THEN
  8.1577 +            Payment_Receipt_Type_API.Exist(value_);
  8.1578 +         END IF;
  8.1579 +      ELSIF (name_ = 'PAYMENT_RECEIPT_TYPE_DB') THEN
  8.1580 +         newrec_.payment_receipt_type := value_;
  8.1581 +         IF (value_ IS NOT NULL) THEN
  8.1582 +            Payment_Receipt_Type_API.Exist_Db(value_);
  8.1583 +         END IF;
  8.1584 +      ELSIF (name_ = 'TEMPLATE_ID') THEN
  8.1585 +         newrec_.template_id := value_;
  8.1586 +         IF (value_ IS NOT NULL) THEN
  8.1587 +            Confirmation_Stmnt_Templ_API.Exist(newrec_.company, newrec_.template_id);
  8.1588 +         END IF;
  8.1589 +      ELSIF (name_ = 'CHECK_RECIPIENT') THEN
  8.1590 +         newrec_.check_recipient := Check_Recipient_API.Encode(value_);
  8.1591 +         IF (value_ IS NOT NULL) THEN
  8.1592 +            Check_Recipient_API.Exist(value_);
  8.1593 +         END IF;
  8.1594 +      ELSIF (name_ = 'CHECK_RECIPIENT_DB') THEN
  8.1595 +         newrec_.check_recipient := value_;
  8.1596 +         IF (value_ IS NOT NULL) THEN
  8.1597 +            Check_Recipient_API.Exist_Db(value_);
  8.1598 +         END IF;
  8.1599 +      ELSIF (name_ = 'SEND_STATEMENT_OF_ACC_TO_PAYER') THEN
  8.1600 +         newrec_.send_statement_of_acc_to_payer := value_;
  8.1601 +      ELSE
  8.1602 +         Error_SYS.Item_Not_Exist(lu_name_, name_, value_);
  8.1603 +      END IF;
  8.1604 +   END LOOP;
  8.1605 +
  8.1606 +
  8.1607 +   IF (newrec_.amount_tolerance < 0) OR (newrec_.percent_tolerance < 0) OR (newrec_.disc_days_tolerance < 0) THEN
  8.1608 +      Error_SYS.Appl_General(lu_name_, 'NEGTOLERANCE: Tolerance should be positive value.');
  8.1609 +   END IF;
  8.1610 +
  8.1611 +   Client_SYS.Clear_Attr(attr_);
  8.1612 +
  8.1613 +   Error_SYS.Check_Not_Null(lu_name_, 'NETTING_ALLOWED', newrec_.netting_allowed);
  8.1614 +   IF (newrec_.interest_template IS NULL) THEN
  8.1615 +      newrec_.interest_template := Interest_Template_API.Get_Default_Template(newrec_.company);
  8.1616 +   END IF;
  8.1617 +
  8.1618 +   IF (newrec_.party_type = 'SUPPLIER') THEN
  8.1619 +      Error_SYS.Check_Not_Null(lu_name_, 'PRIORITY', newrec_.priority);
  8.1620 +      Error_SYS.Check_Not_Null(lu_name_, 'BLOCKED_FOR_PAYMENT', newrec_.blocked_for_payment);
  8.1621 +      Error_SYS.Check_Not_Null(lu_name_, 'CHECK_RECIPIENT', newrec_.check_recipient);
  8.1622 +   END IF;
  8.1623 +   IF (newrec_.party_type = 'CUSTOMER') THEN
  8.1624 +      Error_SYS.Check_Not_Null(lu_name_, 'INTEREST_TEMPLATE', newrec_.interest_template);
  8.1625 +      Error_SYS.Check_Not_Null(lu_name_, 'REMINDER_TEMPLATE', newrec_.reminder_template);
  8.1626 +      Error_SYS.Check_Not_Null(lu_name_, 'PAYMENT_RECEIPT_TYPE', newrec_.payment_receipt_type);
  8.1627 +      IF Company_Invoice_Info_API.Get_Use_Tax_Invoice(newrec_.company)='TRUE' AND newrec_.payment_receipt_type != 'AT_MATCHING' THEN
  8.1628 +         Error_SYS.Record_General(lu_name_, 'WRONGPAYRECTYPE: Only Receipt At Matching is allowed when Tax Invoice for company is used.');
  8.1629 +      END IF;
  8.1630 +   END IF;
  8.1631 +   IF (newrec_.identity = newrec_.other_payee_identity) THEN
  8.1632 +      Error_SYS.Record_General(lu_name_, 'SAMEPARTY: Other Payee cannot refer to itself.');
  8.1633 +   END IF;
  8.1634 +EXCEPTION
  8.1635 +   WHEN value_error THEN
  8.1636 +      Error_SYS.Item_Format(lu_name_, name_, value_);
  8.1637 +END Unpack_Check_Update___;
  8.1638 +
  8.1639 +
  8.1640 +PROCEDURE Update___ (
  8.1641 +   objid_      IN     VARCHAR2,
  8.1642 +   oldrec_     IN     &TABLE%ROWTYPE,
  8.1643 +   newrec_     IN OUT &TABLE%ROWTYPE,
  8.1644 +   attr_       IN OUT VARCHAR2,
  8.1645 +   objversion_ IN OUT VARCHAR2,
  8.1646 +   by_keys_    IN     BOOLEAN DEFAULT FALSE )
  8.1647 +IS
  8.1648 +BEGIN
  8.1649 +   newrec_.rowversion := newrec_.rowversion + 1;
  8.1650 +   objversion_ := to_char(newrec_.rowversion);
  8.1651 +   IF by_keys_ THEN
  8.1652 +      UPDATE identity_pay_info_tab
  8.1653 +         SET company = newrec_.company,
  8.1654 +             identity = newrec_.identity,
  8.1655 +             party_type = newrec_.party_type,
  8.1656 +             priority = newrec_.priority,
  8.1657 +             blocked_for_payment = newrec_.blocked_for_payment,
  8.1658 +             other_payee_identity = newrec_.other_payee_identity,
  8.1659 +             interest_template = newrec_.interest_template,
  8.1660 +             reminder_template = newrec_.reminder_template,
  8.1661 +             payment_delay = newrec_.payment_delay,
  8.1662 +             amount_tolerance = newrec_.amount_tolerance,
  8.1663 +             percent_tolerance = newrec_.percent_tolerance,
  8.1664 +             disc_days_tolerance = newrec_.disc_days_tolerance,
  8.1665 +             netting_allowed = newrec_.netting_allowed,
  8.1666 +             format_no = newrec_.format_no,
  8.1667 +             payment_advice = newrec_.payment_advice,
  8.1668 +             deduction_group = newrec_.deduction_group,
  8.1669 +             corporation_id = newrec_.corporation_id,
  8.1670 +             member_id = newrec_.member_id,
  8.1671 +             send_reminder_to_payer = newrec_.send_reminder_to_payer,
  8.1672 +             send_interest_inv_to_payer = newrec_.send_interest_inv_to_payer,
  8.1673 +             rule_id = newrec_.rule_id,
  8.1674 +             payment_receipt_type = newrec_.payment_receipt_type,
  8.1675 +             template_id = newrec_.template_id,
  8.1676 +             check_recipient = newrec_.check_recipient,
  8.1677 +             send_statement_of_acc_to_payer = newrec_.send_statement_of_acc_to_payer,
  8.1678 +             rowversion = newrec_.rowversion
  8.1679 +         WHERE company = newrec_.company
  8.1680 +         AND   identity = newrec_.identity
  8.1681 +         AND   party_type = newrec_.party_type;
  8.1682 +   ELSE
  8.1683 +      UPDATE identity_pay_info_tab
  8.1684 +         SET company = newrec_.company,
  8.1685 +             identity = newrec_.identity,
  8.1686 +             party_type = newrec_.party_type,
  8.1687 +             priority = newrec_.priority,
  8.1688 +             blocked_for_payment = newrec_.blocked_for_payment,
  8.1689 +             other_payee_identity = newrec_.other_payee_identity,
  8.1690 +             interest_template = newrec_.interest_template,
  8.1691 +             reminder_template = newrec_.reminder_template,
  8.1692 +             payment_delay = newrec_.payment_delay,
  8.1693 +             amount_tolerance = newrec_.amount_tolerance,
  8.1694 +             percent_tolerance = newrec_.percent_tolerance,
  8.1695 +             disc_days_tolerance = newrec_.disc_days_tolerance,
  8.1696 +             netting_allowed = newrec_.netting_allowed,
  8.1697 +             format_no = newrec_.format_no,
  8.1698 +             payment_advice = newrec_.payment_advice,
  8.1699 +             deduction_group = newrec_.deduction_group,
  8.1700 +             corporation_id = newrec_.corporation_id,
  8.1701 +             member_id = newrec_.member_id,
  8.1702 +             send_reminder_to_payer = newrec_.send_reminder_to_payer,
  8.1703 +             send_interest_inv_to_payer = newrec_.send_interest_inv_to_payer,
  8.1704 +             rule_id = newrec_.rule_id,
  8.1705 +             payment_receipt_type = newrec_.payment_receipt_type,
  8.1706 +             template_id = newrec_.template_id,
  8.1707 +             check_recipient = newrec_.check_recipient,
  8.1708 +             send_statement_of_acc_to_payer = newrec_.send_statement_of_acc_to_payer,
  8.1709 +             rowversion = newrec_.rowversion
  8.1710 +         WHERE &OBJID = objid_;
  8.1711 +   END IF;
  8.1712 +EXCEPTION
  8.1713 +   WHEN dup_val_on_index THEN
  8.1714 +      Error_SYS.Record_Exist(lu_name_);
  8.1715 +END Update___;
  8.1716 +
  8.1717 +-----------------------------------------------------------------------------
  8.1718 +-------------------- IMPLEMENTATION BASE METHODS FOR DELETE -----------------
  8.1719 +-----------------------------------------------------------------------------
  8.1720 +-- Check_Delete___
  8.1721 +--    Checks whether a specific LU-record may be removed or not.
  8.1722 +--    The procedure should check business rules like attribute values
  8.1723 +--    as well as database constraints (defined or not).
  8.1724 +--
  8.1725 +-- Delete___
  8.1726 +--    Deletion of the specific LU-object from the database.
  8.1727 +-----------------------------------------------------------------------------
  8.1728 +
  8.1729 +PROCEDURE Check_Delete___ (
  8.1730 +   remrec_ IN &TABLE%ROWTYPE )
  8.1731 +IS
  8.1732 +   key_ VARCHAR2(2000);
  8.1733 +BEGIN
  8.1734 +   key_ := remrec_.company || '^' || remrec_.identity || '^' || Party_Type_API.Decode(remrec_.party_type) || '^';
  8.1735 +   Reference_SYS.Check_Restricted_Delete(lu_name_, key_);
  8.1736 +END Check_Delete___;
  8.1737 +
  8.1738 +
  8.1739 +PROCEDURE Delete___ (
  8.1740 +   objid_  IN VARCHAR2,
  8.1741 +   remrec_ IN &TABLE%ROWTYPE )
  8.1742 +IS
  8.1743 +   key_ VARCHAR2(2000);
  8.1744 +BEGIN
  8.1745 +   key_ := remrec_.company || '^' || remrec_.identity || '^' || Party_Type_API.Decode(remrec_.party_type) || '^';
  8.1746 +   Reference_SYS.Do_Cascade_Delete(lu_name_, key_);
  8.1747 +   DELETE
  8.1748 +      FROM  identity_pay_info_tab
  8.1749 +      WHERE &OBJID = objid_;
  8.1750 +END Delete___;
  8.1751 +
  8.1752 +-----------------------------------------------------------------------------
  8.1753 +-------------------- PRIVATE BASE METHODS -----------------------------------
  8.1754 +-----------------------------------------------------------------------------
  8.1755 +-- Lock__
  8.1756 +--    Client-support to lock a specific instance of the logical unit.
  8.1757 +--
  8.1758 +-- New__
  8.1759 +--    Client-support interface to create LU instances.
  8.1760 +--       action_ = 'PREPARE'
  8.1761 +--          Default values and handle of information to client.
  8.1762 +--          The default values are set in procedure Prepare_Insert___.
  8.1763 +--       action_ = 'CHECK'
  8.1764 +--          Check all attributes before creating new object and handle of
  8.1765 +--          information to client. The attribute list is unpacked, checked
  8.1766 +--          and prepared (defaults) in procedure Unpack_Check_Insert___.
  8.1767 +--       action_ = 'DO'
  8.1768 +--          Creation of new instances of the logical unit and handle of
  8.1769 +--          information to client. The attribute list is unpacked, checked
  8.1770 +--          and prepared (defaults) in procedure Unpack_Check_Insert___
  8.1771 +--          before calling procedure Insert___.
  8.1772 +--
  8.1773 +-- Modify__
  8.1774 +--    Client-support interface to modify attributes for LU instances.
  8.1775 +--       action_ = 'CHECK'
  8.1776 +--          Check all attributes before modifying an existing object and
  8.1777 +--          handle of information to client. The attribute list is unpacked,
  8.1778 +--          checked and prepared(defaults) in procedure Unpack_Check_Update___.
  8.1779 +--       action_ = 'DO'
  8.1780 +--          Modification of an existing instance of the logical unit. The
  8.1781 +--          procedure unpacks the attributes, checks all values before
  8.1782 +--          procedure Update___ is called.
  8.1783 +--
  8.1784 +-- Remove__
  8.1785 +--    Client-support interface to remove LU instances.
  8.1786 +--       action_ = 'CHECK'
  8.1787 +--          Check whether a specific LU-instance may be removed or not.
  8.1788 +--          The procedure fetches the complete record by calling procedure
  8.1789 +--          Get_Object_By_Id___. Then the check is made by calling procedure
  8.1790 +--          Check_Delete___.
  8.1791 +--       action_ = 'DO'
  8.1792 +--          Remove an existing instance of the logical unit. The procedure
  8.1793 +--          fetches the complete LU-record, checks for a delete and then
  8.1794 +--          deletes the record by calling procedure Delete___.
  8.1795 +-----------------------------------------------------------------------------
  8.1796 +
  8.1797 +PROCEDURE Lock__ (
  8.1798 +   info_       OUT VARCHAR2,
  8.1799 +   objid_      IN  VARCHAR2,
  8.1800 +   objversion_ IN  VARCHAR2 )
  8.1801 +IS
  8.1802 +   dummy_ &TABLE%ROWTYPE;
  8.1803 +BEGIN
  8.1804 +   General_SYS.Init_Method(lu_name_, '&PKG', 'Lock__');
  8.1805 +   dummy_ := Lock_By_Id___(objid_, objversion_);
  8.1806 +   info_ := Client_SYS.Get_All_Info;
  8.1807 +END Lock__;
  8.1808 +
  8.1809 +
  8.1810 +PROCEDURE New__ (
  8.1811 +   info_       OUT    VARCHAR2,
  8.1812 +   objid_      OUT    VARCHAR2,
  8.1813 +   objversion_ OUT    VARCHAR2,
  8.1814 +   attr_       IN OUT VARCHAR2,
  8.1815 +   action_     IN     VARCHAR2 )
  8.1816 +IS
  8.1817 +   newrec_ &TABLE%ROWTYPE;
  8.1818 +BEGIN
  8.1819 +   General_SYS.Init_Method(lu_name_, '&PKG', 'New__');
  8.1820 +   IF (action_ = 'PREPARE') THEN
  8.1821 +      Prepare_Insert___(attr_);
  8.1822 +   ELSIF (action_ = 'CHECK') THEN
  8.1823 +      Unpack_Check_Insert___(attr_, newrec_);
  8.1824 +   ELSIF (action_ = 'DO') THEN
  8.1825 +      Unpack_Check_Insert___(attr_, newrec_);
  8.1826 +      Insert___(objid_, objversion_, newrec_, attr_);
  8.1827 +   END IF;
  8.1828 +   info_ := Client_SYS.Get_All_Info;
  8.1829 +END New__;
  8.1830 +
  8.1831 +PROCEDURE Modify__ (
  8.1832 +   info_       OUT    VARCHAR2,
  8.1833 +   objid_      IN     VARCHAR2,
  8.1834 +   objversion_ IN OUT VARCHAR2,
  8.1835 +   attr_       IN OUT VARCHAR2,
  8.1836 +   action_     IN     VARCHAR2 )
  8.1837 +IS
  8.1838 +   oldrec_ &TABLE%ROWTYPE;
  8.1839 +   newrec_ &TABLE%ROWTYPE;
  8.1840 +BEGIN
  8.1841 +   General_SYS.Init_Method(lu_name_, '&PKG', 'Modify__');
  8.1842 +   IF (action_ = 'CHECK') THEN
  8.1843 +      newrec_ := Get_Object_By_Id___(objid_);
  8.1844 +      Unpack_Check_Update___(attr_, newrec_, objid_);
  8.1845 +   ELSIF (action_ = 'DO') THEN
  8.1846 +      oldrec_ := Lock_By_Id___(objid_, objversion_);
  8.1847 +      newrec_ := oldrec_;
  8.1848 +
  8.1849 +      Save_Identity_Notes___(attr_, newrec_ );
  8.1850 +
  8.1851 +      Unpack_Check_Update___(attr_, newrec_, objid_);
  8.1852 +      Update___(objid_, oldrec_, newrec_, attr_, objversion_);
  8.1853 +   END IF;
  8.1854 +   info_ := Client_SYS.Get_All_Info;
  8.1855 +END Modify__;
  8.1856 +
  8.1857 +
  8.1858 +PROCEDURE Remove__ (
  8.1859 +   info_       OUT VARCHAR2,
  8.1860 +   objid_      IN  VARCHAR2,
  8.1861 +   objversion_ IN  VARCHAR2,
  8.1862 +   action_     IN  VARCHAR2 )
  8.1863 +IS
  8.1864 +   remrec_ &TABLE%ROWTYPE;
  8.1865 +BEGIN
  8.1866 +   General_SYS.Init_Method(lu_name_, '&PKG', 'Remove__');
  8.1867 +   IF (action_ = 'CHECK') THEN
  8.1868 +      remrec_ := Get_Object_By_Id___(objid_);
  8.1869 +      Check_Delete___(remrec_);
  8.1870 +   ELSIF (action_ = 'DO') THEN
  8.1871 +      remrec_ := Lock_By_Id___(objid_, objversion_);
  8.1872 +      Check_Delete___(remrec_);
  8.1873 +      Delete___(objid_, remrec_);
  8.1874 +   END IF;
  8.1875 +   info_ := Client_SYS.Get_All_Info;
  8.1876 +END Remove__;
  8.1877 +
  8.1878 +-----------------------------------------------------------------------------
  8.1879 +-------------------- PUBLIC BASE METHODS ------------------------------------
  8.1880 +-----------------------------------------------------------------------------
  8.1881 +-- Exist
  8.1882 +--   Checks if given pointer (e.g. primary key) to an instance of this
  8.1883 +--   logical unit exists. If not an exception will be raised.
  8.1884 +-----------------------------------------------------------------------------
  8.1885 +
  8.1886 +PROCEDURE Exist (
  8.1887 +   company_    IN VARCHAR2,
  8.1888 +   identity_   IN VARCHAR2,
  8.1889 +   party_type_ IN VARCHAR2 )
  8.1890 +IS
  8.1891 +BEGIN
  8.1892 +   General_SYS.Init_Method(lu_name_, '&PKG', 'Exist', TRUE);
  8.1893 +   IF (NOT Check_Exist___(company_, identity_, Party_Type_API.Encode(party_type_))) THEN
  8.1894 +      -- Bug 72612, Begin, Modified IF condition
  8.1895 +      IF Party_Type_API.Encode(party_type_) IN ('CUSTOMER', 'SUPPLIER') THEN
  8.1896 +         Error_SYS.Record_General(lu_name_, 'IDENTITYPAYEXIST: :P1 :P2 does not exist in company :P3 in Payment module.', party_type_, identity_, company_);
  8.1897 +      -- Bug 72612, End.
  8.1898 +         -- Bug 71612, Begin, Added IF condition, IF Party type 'COMPANY' display an error message
  8.1899 +         ELSIF (Party_Type_API.Encode(party_type_) = 'COMPANY') THEN
  8.1900 +            Error_SYS.Record_General(lu_name_, 'NOTPAYCOMPANY: Parked payments are allowed only against the payment company.');
  8.1901 +         -- Bug 72612, End.
  8.1902 +      ELSE
  8.1903 +         Error_SYS.Record_Not_Exist(lu_name_);
  8.1904 +      END IF;
  8.1905 +   END IF;
  8.1906 +END Exist;
  8.1907 +
  8.1908 +
  8.1909 +PROCEDURE Exist_Db (
  8.1910 +   company_       IN VARCHAR2,
  8.1911 +   identity_      IN VARCHAR2,
  8.1912 +   party_type_db_ IN VARCHAR2 )
  8.1913 +IS
  8.1914 +BEGIN
  8.1915 +   General_SYS.Init_Method(lu_name_, '&PKG', 'Exist', TRUE);
  8.1916 +   IF (NOT Check_Exist___(company_, identity_, party_type_db_)) THEN
  8.1917 +      IF party_type_db_ IN ('CUSTOMER', 'SUPPLIER', 'COMPANY') THEN
  8.1918 +         Error_SYS.Record_General(lu_name_, 'IDENTITYPAYEXIST2: :P1 :P2 does not exist in company :P3 in Payment module.', Party_Type_API.Decode(party_type_db_), identity_, company_);
  8.1919 +      ELSE
  8.1920 +         Error_SYS.Record_Not_Exist(lu_name_);
  8.1921 +      END IF;
  8.1922 +   END IF;
  8.1923 +END Exist_Db;
  8.1924 +
  8.1925 +-----------------------------------------------------------------------------
  8.1926 +-------------------- LU SPECIFIC IMPLEMENTATION METHODS ---------------------
  8.1927 +-----------------------------------------------------------------------------
  8.1928 +PROCEDURE Save_Identity_Notes___ (
  8.1929 +   attr_       IN VARCHAR2,
  8.1930 +   newrec_     IN &TABLE%ROWTYPE )
  8.1931 +IS
  8.1932 +   note_   VARCHAR2(2000);
  8.1933 +   note_update_   VARCHAR2(20);
  8.1934 +
  8.1935 +BEGIN
  8.1936 +   note_ := Client_SYS.Get_Item_Value('NOTE',attr_);
  8.1937 +   note_update_ := Client_SYS.Get_Item_Value('NOTE_UPDATE',attr_);
  8.1938 +
  8.1939 +   IF ((note_ IS NULL) AND (note_update_ IS NULL)) THEN
  8.1940 +      RETURN;
  8.1941 +   END IF;
  8.1942 +
  8.1943 +   Identity_Invoice_Info_API.Set_Notes(newrec_.company,
  8.1944 +                                       newrec_.identity,
  8.1945 +                                       Party_Type_Api.Decode(newrec_.party_type),
  8.1946 +                                       note_ );
  8.1947 +END Save_Identity_Notes___;
  8.1948 +
  8.1949 +FUNCTION Get_Next_Format_No___ (
  8.1950 +   company_       IN VARCHAR2 ) RETURN NUMBER
  8.1951 +IS
  8.1952 +   CURSOR rec IS
  8.1953 +      SELECT MAX( format_no )
  8.1954 +      FROM &TABLE
  8.1955 +      WHERE company   = company_;
  8.1956 +
  8.1957 +   max_format_   NUMBER;
  8.1958 +BEGIN
  8.1959 +   OPEN rec;
  8.1960 +   FETCH rec INTO max_format_;
  8.1961 +   IF ( rec%NOTFOUND ) THEN
  8.1962 +      CLOSE rec;
  8.1963 +      RETURN 1;
  8.1964 +   END IF;
  8.1965 +   CLOSE rec;
  8.1966 +
  8.1967 +   RETURN ( NVL(max_format_,0) + 1 );
  8.1968 +END Get_Next_Format_No___;
  8.1969 +
  8.1970 +PROCEDURE Check_Cascade___ (
  8.1971 +   company_       IN VARCHAR2,
  8.1972 +   identity_      IN VARCHAR2,
  8.1973 +   party_type_db_ IN VARCHAR2 )
  8.1974 +IS
  8.1975 +   CURSOR get_ledger_item1 IS                                         
  8.1976 +      SELECT rowtype
  8.1977 +      FROM   ledger_item_tab
  8.1978 +      WHERE  company    = company_
  8.1979 +      AND    party_type = party_type_db_
  8.1980 +      AND    identity   = identity_;
  8.1981 +
  8.1982 +   CURSOR get_ledger_item2 IS                                         
  8.1983 +      SELECT rowtype
  8.1984 +      FROM   ledger_item_tab
  8.1985 +      WHERE  company        = company_
  8.1986 +      AND    party_type     = party_type_db_
  8.1987 +      AND    payer_identity = identity_;
  8.1988 +
  8.1989 +   CURSOR get_ledger_item3 IS                                         
  8.1990 +      SELECT rowtype
  8.1991 +      FROM   ledger_item_tab
  8.1992 +      WHERE  company        = company_
  8.1993 +      AND    party_type     = party_type_db_
  8.1994 +      AND    payee_identity = identity_;
  8.1995 +BEGIN
  8.1996 +   FOR ledger_item_ IN get_ledger_item1 LOOP
  8.1997 +      IF (ledger_item_.rowtype = 'InvoiceLedgerItem') THEN
  8.1998 +         Error_SYS.Appl_General(lu_name_, 'INVOICESEXIST: Invoices exist for :P1 :P2', Party_Type_API.Decode(party_type_db_), identity_);
  8.1999 +      ELSIF (ledger_item_.rowtype = 'OnAccountLedgerItem') THEN
  8.2000 +         Error_SYS.Appl_General(lu_name_, 'PAYMENTONACCNTEXIST: Payments on account exist for :P1 :P2', Party_Type_API.Decode(party_type_db_), identity_);
  8.2001 +      ELSE
  8.2002 +         Error_SYS.Appl_General(lu_name_, 'LEDGERITEMSEXIST: Ledger items exist for :P1 :P2', Party_Type_API.Decode(party_type_db_), identity_);
  8.2003 +      END IF;
  8.2004 +   END LOOP;
  8.2005 +
  8.2006 +   FOR ledger_item_ IN get_ledger_item2 LOOP
  8.2007 +      IF (ledger_item_.rowtype = 'InvoiceLedgerItem') THEN
  8.2008 +         Error_SYS.Appl_General(lu_name_, 'INVOICESEXIST: Invoices exist for :P1 :P2', Party_Type_API.Decode(party_type_db_), identity_);
  8.2009 +      ELSIF (ledger_item_.rowtype = 'OnAccountLedgerItem') THEN
  8.2010 +         Error_SYS.Appl_General(lu_name_, 'PAYMENTONACCNTEXIST: Payments on account exist for :P1 :P2', Party_Type_API.Decode(party_type_db_), identity_);
  8.2011 +      ELSE
  8.2012 +         Error_SYS.Appl_General(lu_name_, 'LEDGERITEMSEXIST: Ledger items exist for :P1 :P2', Party_Type_API.Decode(party_type_db_), identity_);
  8.2013 +      END IF;
  8.2014 +   END LOOP;
  8.2015 +
  8.2016 +   FOR ledger_item_ IN get_ledger_item3 LOOP
  8.2017 +      IF (ledger_item_.rowtype = 'InvoiceLedgerItem') THEN
  8.2018 +         Error_SYS.Appl_General(lu_name_, 'INVOICESEXIST: Invoices exist for :P1 :P2', Party_Type_API.Decode(party_type_db_), identity_);
  8.2019 +      ELSIF (ledger_item_.rowtype = 'OnAccountLedgerItem') THEN
  8.2020 +         Error_SYS.Appl_General(lu_name_, 'PAYMENTONACCNTEXIST: Payments on account exist for :P1 :P2', Party_Type_API.Decode(party_type_db_), identity_);
  8.2021 +      ELSE
  8.2022 +         Error_SYS.Appl_General(lu_name_, 'LEDGERITEMSEXIST: Ledger items exist for :P1 :P2', Party_Type_API.Decode(party_type_db_), identity_);
  8.2023 +      END IF;
  8.2024 +   END LOOP;
  8.2025 +END Check_Cascade___;
  8.2026 +
  8.2027 +PROCEDURE Import___ (
  8.2028 +   crecomp_rec_ IN ENTERP_COMP_CONNECT_V160_API.Crecomp_Lu_Public_Rec )
  8.2029 +IS
  8.2030 +   CURSOR get_data IS
  8.2031 +      SELECT C1,C2,N1,C3,C4,C5,C6,N2,N3,N4,C7,N5,C8,C9,C10,C11,C12,C13,C14,C15
  8.2032 +      FROM   Create_Company_Tem_Detail src
  8.2033 +      WHERE  component = '&MODULE'
  8.2034 +      AND    lu        = lu_name_
  8.2035 +      AND    template_id = crecomp_rec_.template_id
  8.2036 +      AND    version     = crecomp_rec_.version
  8.2037 +      AND NOT EXISTS (SELECT 1
  8.2038 +                      FROM &TABLE dest
  8.2039 +                      WHERE dest.company = crecomp_rec_.company
  8.2040 +                      AND dest.identity = crecomp_rec_.company
  8.2041 +                      AND dest.party_type = src.c2);
  8.2042 +
  8.2043 +   -- Bug 74138, Begin, Added condition to fetch data when party_type = 'COMPANY'  
  8.2044 +   CURSOR exist_company IS
  8.2045 +      SELECT 'X'
  8.2046 +      FROM   &TABLE
  8.2047 +      WHERE  company = crecomp_rec_.company
  8.2048 +      AND    party_type = 'COMPANY';
  8.2049 +   -- Bug 74138, End
  8.2050 +
  8.2051 +   dummy_         VARCHAR2(1);
  8.2052 +   attr_          VARCHAR2(2000);
  8.2053 +   objid_         VARCHAR2(2000);
  8.2054 +   objversion_    VARCHAR2(2000);
  8.2055 +   newrec_        &TABLE%ROWTYPE;
  8.2056 +   msg_           VARCHAR2(2000);
  8.2057 +   i_             NUMBER := 0;
  8.2058 +   update_by_key_ BOOLEAN DEFAULT FALSE;
  8.2059 +   empty_lu_      BOOLEAN := FALSE;
  8.2060 +BEGIN
  8.2061 +   General_SYS.Init_Method(lu_name_, '&PKG', 'Import___', TRUE);
  8.2062 +
  8.2063 +   update_by_key_ := Enterp_Comp_Connect_V160_API.Use_Keys(module_, lu_name_, crecomp_rec_);
  8.2064 +
  8.2065 +   IF (NOT update_by_key_) THEN
  8.2066 +      empty_lu_ := FALSE;
  8.2067 +      OPEN exist_company;
  8.2068 +      FETCH exist_company INTO dummy_;
  8.2069 +      IF ( exist_company%NOTFOUND ) THEN
  8.2070 +         CLOSE exist_company;
  8.2071 +         empty_lu_ := TRUE;
  8.2072 +      END IF;
  8.2073 +   END IF;
  8.2074 +
  8.2075 +   IF ( update_by_key_ OR empty_lu_ ) THEN
  8.2076 +      FOR rec_ IN get_data LOOP
  8.2077 +         i_ := i_ + 1;
  8.2078 +         BEGIN
  8.2079 +            newrec_.company                        := crecomp_rec_.company;
  8.2080 +            newrec_.identity                       := crecomp_rec_.company;
  8.2081 +            newrec_.party_type                     := rec_.c2;
  8.2082 +            newrec_.priority                       := rec_.n1;
  8.2083 +            newrec_.blocked_for_payment            := rec_.c3;
  8.2084 +            newrec_.other_payee_identity           := rec_.c4;
  8.2085 +            newrec_.interest_template              := rec_.c5;
  8.2086 +            newrec_.reminder_template              := rec_.c6;
  8.2087 +            newrec_.payment_delay                  := rec_.n2;
  8.2088 +            newrec_.amount_tolerance               := rec_.n3;
  8.2089 +            newrec_.percent_tolerance              := rec_.n4;
  8.2090 +            newrec_.disc_days_tolerance            := rec_.n5;
  8.2091 +            newrec_.netting_allowed                := rec_.c7;
  8.2092 +            newrec_.format_no                      := rec_.n5;
  8.2093 +            newrec_.payment_advice                 := rec_.c8;
  8.2094 +            newrec_.deduction_group                := rec_.c9;
  8.2095 +            newrec_.corporation_id                 := rec_.c10;
  8.2096 +            newrec_.member_id                      := rec_.c11;
  8.2097 +            newrec_.send_reminder_to_payer         := rec_.c12;
  8.2098 +            newrec_.send_interest_inv_to_payer     := rec_.c13;
  8.2099 +            newrec_.payment_receipt_type           := rec_.c14;
  8.2100 +            newrec_.send_statement_of_acc_to_payer := rec_.c15;
  8.2101 +            
  8.2102 +            Company_API.Exist(newrec_.company);
  8.2103 +            Payment_Library_API.Exist_In_Enterp(newrec_.company, newrec_.company, Party_Type_API.Decode(newrec_.party_type));
  8.2104 +            IF (newrec_.blocked_for_payment IS NOT NULL AND newrec_.blocked_for_payment NOT IN ('TRUE', 'FALSE')) THEN
  8.2105 +               Error_SYS.Record_General(lu_name_,'TRUEORFALSE: The value must be TRUE or FALSE');
  8.2106 +            END IF;
  8.2107 +            IF (newrec_.other_payee_identity IS NOT NULL) THEN
  8.2108 +               Identity_Pay_Info_API.Exist(newrec_.company, newrec_.other_payee_identity, Party_Type_API.Decode(newrec_.party_type));
  8.2109 +            END IF;
  8.2110 +            IF (newrec_.interest_template IS NOT NULL) THEN
  8.2111 +               Interest_Template_API.Exist(newrec_.company, newrec_.interest_template);
  8.2112 +            END IF;
  8.2113 +            IF (newrec_.reminder_template IS NOT NULL) THEN
  8.2114 +               Reminder_Template_API.Exist(newrec_.company, newrec_.reminder_template);
  8.2115 +            END IF;
  8.2116 +            IF (TRUNC(newrec_.payment_delay) <> newrec_.payment_delay) THEN
  8.2117 +               Error_SYS.Record_General(lu_name_, 'NOTWHOLENUM: A whole number must be specified for the payment delay.');
  8.2118 +            END IF;
  8.2119 +            IF (newrec_.netting_allowed NOT IN ('TRUE', 'FALSE')) THEN
  8.2120 +               Error_SYS.Record_General(lu_name_,'TRUEORFALSE: The value must be TRUE or FALSE');
  8.2121 +            END IF;
  8.2122 +            IF (newrec_.payment_advice IS NOT NULL) THEN
  8.2123 +               Payment_Advice_API.Exist_Db(newrec_.payment_advice);
  8.2124 +            END IF;
  8.2125 +            IF (newrec_.deduction_group IS NOT NULL) THEN
  8.2126 +               Deduction_Group_API.Exist(newrec_.company, newrec_.deduction_group);
  8.2127 +            END IF;
  8.2128 +            IF (newrec_.payment_receipt_type IS NOT NULL) THEN
  8.2129 +               Payment_Receipt_Type_API.Exist_Db(newrec_.payment_receipt_type);
  8.2130 +            END IF;
  8.2131 +
  8.2132 +            Error_SYS.Check_Not_Null(lu_name_, 'COMPANY', newrec_.company);
  8.2133 +            Error_SYS.Check_Not_Null(lu_name_, 'IDENTITY', newrec_.identity);
  8.2134 +            Error_SYS.Check_Not_Null(lu_name_, 'PARTY_TYPE', newrec_.party_type);
  8.2135 +            Error_SYS.Check_Not_Null(lu_name_, 'NETTING_ALLOWED', newrec_.netting_allowed);
  8.2136 +
  8.2137 +            IF (newrec_.party_type = 'SUPPLIER') THEN
  8.2138 +               Error_SYS.Check_Not_Null(lu_name_, 'PRIORITY', newrec_.priority);
  8.2139 +               Error_SYS.Check_Not_Null(lu_name_, 'BLOCKED_FOR_PAYMENT', newrec_.blocked_for_payment);
  8.2140 +            END IF;
  8.2141 +            IF (newrec_.party_type = 'CUSTOMER') THEN
  8.2142 +               Error_SYS.Check_Not_Null(lu_name_, 'INTEREST_TEMPLATE', newrec_.interest_template);
  8.2143 +               Error_SYS.Check_Not_Null(lu_name_, 'REMINDER_TEMPLATE', newrec_.reminder_template);
  8.2144 +               Error_SYS.Check_Not_Null(lu_name_, 'PAYMENT_RECEIPT_TYPE', newrec_.payment_receipt_type);
  8.2145 +            END IF;
  8.2146 +
  8.2147 +            Error_SYS.Check_Not_Null(lu_name_, 'IDENTITY', newrec_.identity);
  8.2148 +
  8.2149 +            IF (newrec_.identity = newrec_.other_payee_identity) THEN
  8.2150 +               Error_SYS.Record_General(lu_name_, 'SAMEPARTY: Other Payee cannot refer to itself.');
  8.2151 +            END IF;
  8.2152 +
  8.2153 +            Insert___(objid_, objversion_, newrec_, attr_);
  8.2154 +         EXCEPTION
  8.2155 +            WHEN OTHERS THEN
  8.2156 +               msg_ := SQLERRM;
  8.2157 +               Enterp_Comp_Connect_V160_API.Log_Logging(crecomp_rec_.company, module_, '&PKG', 'Error', msg_);
  8.2158 +         END;
  8.2159 +      END LOOP;
  8.2160 +      IF ( i_ = 0 ) THEN
  8.2161 +         msg_ := language_sys.translate_constant(lu_name_, 'NODATAFOUND:No Data Found');
  8.2162 +         Enterp_Comp_Connect_V160_API.Log_Logging(crecomp_rec_.company, module_, '&PKG', 'CreatedSuccessfully', msg_);
  8.2163 +      ELSE
  8.2164 +         IF msg_ IS NULL THEN
  8.2165 +            Enterp_Comp_Connect_V160_API.Log_Logging(crecomp_rec_.company, module_, '&PKG', 'CreatedSuccessfully');
  8.2166 +         ELSE
  8.2167 +            Enterp_Comp_Connect_V160_API.Log_Logging(crecomp_rec_.company, module_, '&PKG', 'CreatedWithErrors');
  8.2168 +         END IF;
  8.2169 +      END IF;
  8.2170 +   END IF;
  8.2171 +   -- This statement is to add to the log that the Create company process for LUs is finished if
  8.2172 +   -- update_by_key_ and empty_lu are FALSE
  8.2173 +   IF ( NOT update_by_key_ AND NOT empty_lu_ ) THEN
  8.2174 +      Enterp_Comp_Connect_V160_API.Log_Logging(crecomp_rec_.company, module_, '&PKG', 'CreatedSuccessfully');
  8.2175 +   END IF;
  8.2176 +EXCEPTION
  8.2177 +   WHEN OTHERS THEN
  8.2178 +      msg_ := SQLERRM;
  8.2179 +      Enterp_Comp_Connect_V160_API.Log_Logging(crecomp_rec_.company, module_, '&PKG', 'Error', msg_);
  8.2180 +      Enterp_Comp_Connect_V160_API.Log_Logging(crecomp_rec_.company, module_, '&PKG', 'CreatedWithErrors');
  8.2181 +END Import___;
  8.2182 +
  8.2183 +
  8.2184 +PROCEDURE Copy___ (
  8.2185 +   crecomp_rec_   IN ENTERP_COMP_CONNECT_V160_API.Crecomp_Lu_Public_Rec )
  8.2186 +IS
  8.2187 +   dummy_         VARCHAR2(1);
  8.2188 +   msg_           VARCHAR2(2000);
  8.2189 +   update_by_key_ BOOLEAN DEFAULT FALSE;
  8.2190 +   empty_lu_      BOOLEAN := FALSE;
  8.2191 +
  8.2192 +   CURSOR exist_company IS
  8.2193 +      SELECT 'X'
  8.2194 +      FROM   &TABLE
  8.2195 +      WHERE  company = crecomp_rec_.company;
  8.2196 +
  8.2197 +   CURSOR get_data IS
  8.2198 +      SELECT *
  8.2199 +      FROM   &TABLE src
  8.2200 +      WHERE  company = crecomp_rec_.old_company
  8.2201 +      AND    identity = crecomp_rec_.old_company
  8.2202 +      AND    party_type = 'COMPANY'
  8.2203 +      AND NOT EXISTS (SELECT 1
  8.2204 +                      FROM &TABLE dest
  8.2205 +                      WHERE dest.company = crecomp_rec_.company
  8.2206 +                      AND dest.identity = src.identity
  8.2207 +                      AND dest.party_type = src.party_type);
  8.2208 +BEGIN
  8.2209 +   General_SYS.Init_Method(lu_name_, '&PKG', 'Copy___', TRUE);
  8.2210 +
  8.2211 +   update_by_key_ := Enterp_Comp_Connect_V160_API.Use_Keys(module_, lu_name_, crecomp_rec_);
  8.2212 +
  8.2213 +   IF (NOT update_by_key_) THEN
  8.2214 +      empty_lu_ := FALSE;
  8.2215 +      OPEN exist_company;
  8.2216 +      FETCH exist_company INTO dummy_;
  8.2217 +      IF ( exist_company%NOTFOUND ) THEN
  8.2218 +         CLOSE exist_company;
  8.2219 +         empty_lu_ := TRUE;
  8.2220 +      END IF;
  8.2221 +   END IF;
  8.2222 +
  8.2223 +   IF ( update_by_key_ OR empty_lu_ ) THEN
  8.2224 +      FOR rec_ IN get_data LOOP
  8.2225 +         BEGIN
  8.2226 +            INSERT
  8.2227 +               INTO identity_pay_info_tab (
  8.2228 +                  company,
  8.2229 +                  identity,
  8.2230 +                  party_type,
  8.2231 +                  priority,
  8.2232 +                  blocked_for_payment,
  8.2233 +                  other_payee_identity,
  8.2234 +                  interest_template,
  8.2235 +                  reminder_template,
  8.2236 +                  payment_delay,
  8.2237 +                  amount_tolerance,
  8.2238 +                  percent_tolerance,
  8.2239 +                  disc_days_tolerance,
  8.2240 +                  netting_allowed,
  8.2241 +                  format_no,
  8.2242 +                  payment_advice,
  8.2243 +                  deduction_group,
  8.2244 +                  corporation_id,
  8.2245 +                  member_id,
  8.2246 +                  send_reminder_to_payer,
  8.2247 +                  send_interest_inv_to_payer,
  8.2248 +                  next_payment_matching_id,
  8.2249 +                  payment_receipt_type,
  8.2250 +                  send_statement_of_acc_to_payer,
  8.2251 +                  rowversion)
  8.2252 +               VALUES (
  8.2253 +                  crecomp_rec_.company,
  8.2254 +                  crecomp_rec_.company,
  8.2255 +                  rec_.party_type,
  8.2256 +                  rec_.priority,
  8.2257 +                  rec_.blocked_for_payment,
  8.2258 +                  rec_.other_payee_identity,
  8.2259 +                  rec_.interest_template,
  8.2260 +                  rec_.reminder_template,
  8.2261 +                  rec_.payment_delay,
  8.2262 +                  rec_.amount_tolerance,
  8.2263 +                  rec_.percent_tolerance,
  8.2264 +                  rec_.disc_days_tolerance,
  8.2265 +                  rec_.netting_allowed,
  8.2266 +                  rec_.format_no,
  8.2267 +                  rec_.payment_advice,
  8.2268 +                  rec_.deduction_group,
  8.2269 +                  rec_.corporation_id,
  8.2270 +                  rec_.member_id,
  8.2271 +                  rec_.send_reminder_to_payer,
  8.2272 +                  rec_.send_interest_inv_to_payer,
  8.2273 +                  0,
  8.2274 +                  rec_.payment_receipt_type,
  8.2275 +                  rec_.send_statement_of_acc_to_payer,
  8.2276 +                  1);
  8.2277 +         END;
  8.2278 +      END LOOP;
  8.2279 +      Enterp_Comp_Connect_V160_API.Log_Logging(crecomp_rec_.company, module_, '&PKG', 'CreatedSuccessfully');
  8.2280 +   END IF;
  8.2281 +   -- This statement is to add to the log that the Create company process for LUs is finished if
  8.2282 +   -- update_by_key_ and empty_lu are FALSE
  8.2283 +   IF ( NOT update_by_key_ AND NOT empty_lu_ ) THEN
  8.2284 +      Enterp_Comp_Connect_V160_API.Log_Logging(crecomp_rec_.company, module_, '&PKG', 'CreatedSuccessfully');
  8.2285 +   END IF;
  8.2286 +EXCEPTION
  8.2287 +   WHEN OTHERS THEN
  8.2288 +      msg_ := SQLERRM;
  8.2289 +      Enterp_Comp_Connect_V160_API.Log_Logging(crecomp_rec_.company, module_, '&PKG', 'Error', msg_);
  8.2290 +      Enterp_Comp_Connect_V160_API.Log_Logging(crecomp_rec_.company, module_, '&PKG', 'CreatedWithErrors');
  8.2291 +END Copy___;
  8.2292 +
  8.2293 +
  8.2294 +
  8.2295 +PROCEDURE Export___ (
  8.2296 +   crecomp_rec_   IN ENTERP_COMP_CONNECT_V160_API.Crecomp_Lu_Public_Rec )
  8.2297 +IS
  8.2298 +   pub_rec_       Enterp_Comp_Connect_V160_API.Tem_Public_Rec;
  8.2299 +   i_             NUMBER := 1;
  8.2300 +
  8.2301 +   CURSOR get_data IS
  8.2302 +      SELECT *
  8.2303 +      FROM   &VIEWPCT
  8.2304 +      WHERE  company = crecomp_rec_.company
  8.2305 +      AND    party_type_db = 'COMPANY';
  8.2306 +BEGIN
  8.2307 +   General_SYS.Init_Method(lu_name_, '&PKG', 'Export___', TRUE);
  8.2308 +   FOR pctrec_ IN get_data LOOP
  8.2309 +      pub_rec_.template_id := crecomp_rec_.template_id;
  8.2310 +      pub_rec_.component := '&MODULE';
  8.2311 +      pub_rec_.version  := crecomp_rec_.version;
  8.2312 +      pub_rec_.lu       := lu_name_;
  8.2313 +      pub_rec_.item_id  := i_;
  8.2314 +      pub_rec_.c1 := '<NEW COMPANY>';
  8.2315 +      pub_rec_.c2 := pctrec_.party_type_db;
  8.2316 +      pub_rec_.n1 := pctrec_.priority;
  8.2317 +      pub_rec_.c3 := pctrec_.blocked_for_payment;
  8.2318 +      pub_rec_.c4 := pctrec_.other_payee_identity;
  8.2319 +      pub_rec_.c5 := pctrec_.interest_template;
  8.2320 +      pub_rec_.c6 := pctrec_.reminder_template;
  8.2321 +      pub_rec_.n2 := pctrec_.payment_delay;
  8.2322 +      pub_rec_.n3 := pctrec_.amount_tolerance;
  8.2323 +      pub_rec_.n4 := pctrec_.percent_tolerance;
  8.2324 +      pub_rec_.n5 := pctrec_.disc_days_tolerance;
  8.2325 +      pub_rec_.c7 := pctrec_.netting_allowed;
  8.2326 +      pub_rec_.n5 := pctrec_.format_no;
  8.2327 +      pub_rec_.c8 := pctrec_.payment_advice_db;
  8.2328 +      pub_rec_.c9 := pctrec_.deduction_group;
  8.2329 +      pub_rec_.c10 := pctrec_.corporation_id;
  8.2330 +      pub_rec_.c11 := pctrec_.member_id;
  8.2331 +      pub_rec_.c12 := pctrec_.send_reminder_to_payer;
  8.2332 +      pub_rec_.c13 := pctrec_.send_interest_inv_to_payer;
  8.2333 +      pub_rec_.c14 := pctrec_.payment_receipt_type_db;
  8.2334 +      pub_rec_.c15 := pctrec_.send_statement_of_acc_to_payer;
  8.2335 +      Enterp_Comp_Connect_V160_API.Tem_Insert_Detail_Data(pub_rec_);
  8.2336 +      i_ := i_ + 1;
  8.2337 +   END LOOP;
  8.2338 +END Export___;
  8.2339 +
  8.2340 +-----------------------------------------------------------------------------
  8.2341 +-------------------- LU SPECIFIC PRIVATE METHODS ----------------------------
  8.2342 +-----------------------------------------------------------------------------
  8.2343 +
  8.2344 +PROCEDURE Check_Cascade_Customer__ (
  8.2345 +   attr_ IN VARCHAR2 )
  8.2346 +IS
  8.2347 +   CURSOR customer_in_company (identity_      IN VARCHAR2,
  8.2348 +                               party_type_db_ IN VARCHAR2 ) IS
  8.2349 +      SELECT company
  8.2350 +      FROM   &TABLE
  8.2351 +      WHERE  identity   = identity_
  8.2352 +      AND    party_type = party_type_db_;
  8.2353 +
  8.2354 +   identity_        VARCHAR2(20);
  8.2355 +   party_type_db_   VARCHAR2(20);
  8.2356 +BEGIN
  8.2357 +   General_SYS.Init_Method(lu_name_, '&PKG', 'Check_Cascade_Customer__');
  8.2358 +
  8.2359 +   identity_ := substr(attr_,1,instr(attr_,'^',1,1)-1);
  8.2360 +   party_type_db_  := 'CUSTOMER';
  8.2361 +   FOR comp_ IN customer_in_company (identity_, party_type_db_) LOOP
  8.2362 +      Check_Cascade___(comp_.company, identity_, party_type_db_);
  8.2363 +   END LOOP;
  8.2364 +END Check_Cascade_Customer__;
  8.2365 +
  8.2366 +PROCEDURE Check_Cascade_Supplier__ (
  8.2367 +   attr_ IN VARCHAR2 )
  8.2368 +IS
  8.2369 +   CURSOR supplier_in_company (identity_      IN VARCHAR2,
  8.2370 +                               party_type_db_ IN VARCHAR2 ) IS
  8.2371 +      SELECT company
  8.2372 +      FROM   &TABLE
  8.2373 +      WHERE  identity   = identity_
  8.2374 +      AND    party_type = party_type_db_;
  8.2375 +
  8.2376 +   identity_        VARCHAR2(20);
  8.2377 +   party_type_db_   VARCHAR2(20);
  8.2378 +BEGIN
  8.2379 +   General_SYS.Init_Method(lu_name_, '&PKG', 'Check_Cascade_Supplier__');
  8.2380 +
  8.2381 +   identity_ := substr(attr_,1,instr(attr_,'^',1,1)-1);
  8.2382 +   party_type_db_  := 'SUPPLIER';
  8.2383 +   FOR comp_ IN supplier_in_company (identity_, party_type_db_) LOOP
  8.2384 +      Check_Cascade___(comp_.company, identity_, party_type_db_);
  8.2385 +   END LOOP;
  8.2386 +END Check_Cascade_Supplier__;
  8.2387 +
  8.2388 +PROCEDURE Cascade_Delete_Customer__ (
  8.2389 +   attr_ IN VARCHAR2 )
  8.2390 +IS
  8.2391 +   identity_        VARCHAR2(20);
  8.2392 +   party_type_db_   VARCHAR2(20);
  8.2393 +   info_            VARCHAR2(2000);
  8.2394 +
  8.2395 +   CURSOR customer_in_company (identity_      IN VARCHAR2,
  8.2396 +                               party_type_db_ IN VARCHAR2 ) IS
  8.2397 +      SELECT &OBJID       objid,
  8.2398 +             &OBJVERSION  objversion
  8.2399 +      FROM   &TABLE
  8.2400 +      WHERE  identity   = identity_
  8.2401 +      AND    party_type = party_type_db_;
  8.2402 +BEGIN
  8.2403 +   General_SYS.Init_Method(lu_name_, '&PKG', 'Cascade_Delete_Customer__');
  8.2404 +
  8.2405 +   Check_Cascade_Customer__(attr_);
  8.2406 +   identity_ := substr(attr_,1,instr(attr_,'^',1,1)-1);
  8.2407 +   party_type_db_  := 'CUSTOMER';
  8.2408 +
  8.2409 +   FOR comp_ IN customer_in_company (identity_, party_type_db_) LOOP
  8.2410 +      Remove__(info_, comp_.objid, comp_.objversion, 'DO');
  8.2411 +   END LOOP;
  8.2412 +
  8.2413 +END Cascade_Delete_Customer__;
  8.2414 +
  8.2415 +PROCEDURE Cascade_Delete_Supplier__ (
  8.2416 +   attr_ IN VARCHAR2 )
  8.2417 +IS
  8.2418 +   identity_        VARCHAR2(20);
  8.2419 +   party_type_db_   VARCHAR2(20);
  8.2420 +   info_            VARCHAR2(2000);
  8.2421 +
  8.2422 +   CURSOR supplier_in_company (identity_      IN VARCHAR2,
  8.2423 +                               party_type_db_ IN VARCHAR2 ) IS
  8.2424 +      SELECT &OBJID       objid,
  8.2425 +             &OBJVERSION  objversion
  8.2426 +      FROM   &TABLE
  8.2427 +      WHERE  identity   = identity_
  8.2428 +      AND    party_type = party_type_db_;
  8.2429 +BEGIN
  8.2430 +   General_SYS.Init_Method(lu_name_, '&PKG', 'Cascade_Delete_Supplier__');
  8.2431 +
  8.2432 +   Check_Cascade_Supplier__(attr_);
  8.2433 +   identity_ := substr(attr_,1,instr(attr_,'^',1,1)-1);
  8.2434 +   party_type_db_  := 'SUPPLIER';
  8.2435 +
  8.2436 +   FOR comp_ IN supplier_in_company (identity_, party_type_db_) LOOP
  8.2437 +      Remove__(info_, comp_.objid, comp_.objversion, 'DO');
  8.2438 +   END LOOP;
  8.2439 +
  8.2440 +END Cascade_Delete_Supplier__;
  8.2441 +
  8.2442 +FUNCTION Create_Other_Payee_Attr__ (
  8.2443 +   company_  IN VARCHAR2,
  8.2444 +   payer_id_ IN VARCHAR2 ) RETURN VARCHAR2
  8.2445 +IS
  8.2446 +   value_attr_ VARCHAR2(32000);
  8.2447 +
  8.2448 +   CURSOR get_supplier IS
  8.2449 +      SELECT identity
  8.2450 +      FROM   &TABLE
  8.2451 +      WHERE  company              = company_
  8.2452 +      AND    other_payee_identity = payer_id_
  8.2453 +      AND    party_type           = 'SUPPLIER';
  8.2454 +BEGIN
  8.2455 +   General_SYS.Init_Method(lu_name_, '&PKG', 'Create_Other_Payee_Attr__');
  8.2456 +
  8.2457 +   value_attr_ := payer_id_;
  8.2458 +   FOR supplier_info_ IN get_supplier LOOP
  8.2459 +      value_attr_ := value_attr_ || CHR(39) || ',' || CHR(39) || supplier_info_.identity;
  8.2460 +   END LOOP;
  8.2461 +
  8.2462 +   RETURN value_attr_;
  8.2463 +END Create_Other_Payee_Attr__;
  8.2464 +
  8.2465 +FUNCTION Create_Cus_Other_Payee_Attr__ (
  8.2466 +   company_  IN VARCHAR2,
  8.2467 +   payer_id_ IN VARCHAR2 ) RETURN VARCHAR2
  8.2468 +IS
  8.2469 +   value_attr_ VARCHAR2(32000);
  8.2470 +
  8.2471 +   CURSOR get_customer IS
  8.2472 +      SELECT identity
  8.2473 +      FROM   &TABLE
  8.2474 +      WHERE  company = company_
  8.2475 +      AND    other_payee_identity = payer_id_
  8.2476 +      AND    party_type = 'CUSTOMER';
  8.2477 +BEGIN
  8.2478 +   General_SYS.Init_Method(lu_name_, '&PKG', 'Create_Cus_Other_Payee_Attr__');
  8.2479 +
  8.2480 +   value_attr_ := payer_id_;
  8.2481 +   FOR customer_info_ IN get_customer LOOP
  8.2482 +      value_attr_ := value_attr_ || CHR(39) || ',' || CHR(39) || customer_info_.identity;
  8.2483 +   END LOOP;
  8.2484 +
  8.2485 +   RETURN value_attr_;
  8.2486 +END Create_Cus_Other_Payee_Attr__;
  8.2487 +-----------------------------------------------------------------------------
  8.2488 +-------------------- LU SPECIFIC PROTECTED METHODS --------------------------
  8.2489 +-----------------------------------------------------------------------------
  8.2490 +
  8.2491 +
  8.2492 +-----------------------------------------------------------------------------
  8.2493 +-------------------- LU SPECIFIC PUBLIC METHODS -----------------------------
  8.2494 +-----------------------------------------------------------------------------
  8.2495 +
  8.2496 +FUNCTION Get_Priority (
  8.2497 +   company_    IN VARCHAR2,
  8.2498 +   identity_   IN VARCHAR2,
  8.2499 +   party_type_ IN VARCHAR2 ) RETURN NUMBER
  8.2500 +IS
  8.2501 +   temp_  Public_Rec;
  8.2502 +BEGIN
  8.2503 +   temp_ := Get(company_, identity_, Party_Type_API.Encode(party_type_));
  8.2504 +   RETURN temp_.priority;
  8.2505 +END Get_Priority;
  8.2506 +
  8.2507 +FUNCTION Get_Blocked_For_Payment (
  8.2508 +   company_    IN VARCHAR2,
  8.2509 +   identity_   IN VARCHAR2,
  8.2510 +   party_type_ IN VARCHAR2 ) RETURN VARCHAR2
  8.2511 +IS
  8.2512 +   temp_ Public_Rec;
  8.2513 +BEGIN
  8.2514 +   temp_ := Get(company_, identity_, Party_Type_API.Encode(party_type_));
  8.2515 +   RETURN temp_.blocked_for_payment;
  8.2516 +END Get_Blocked_For_Payment;
  8.2517 +
  8.2518 +FUNCTION Get_Payment_Delay (
  8.2519 +   company_    IN VARCHAR2,
  8.2520 +   identity_   IN VARCHAR2,
  8.2521 +   party_type_ IN VARCHAR2 ) RETURN NUMBER
  8.2522 +IS
  8.2523 +   temp_ Public_Rec;
  8.2524 +BEGIN
  8.2525 +   temp_ := Get(company_, identity_, Party_Type_API.Encode(party_type_));
  8.2526 +   RETURN NVL(temp_.payment_delay, 0);
  8.2527 +END Get_Payment_Delay;
  8.2528 +
  8.2529 +FUNCTION Get_Amount_Tolerance (
  8.2530 +   company_    IN VARCHAR2,
  8.2531 +   identity_   IN VARCHAR2,
  8.2532 +   party_type_ IN VARCHAR2 ) RETURN NUMBER
  8.2533 +IS
  8.2534 +   temp_ Public_Rec;
  8.2535 +BEGIN
  8.2536 +   temp_ := Get(company_, identity_, Party_Type_API.Encode(party_type_));
  8.2537 +   RETURN temp_.amount_tolerance;
  8.2538 +END Get_Amount_Tolerance;
  8.2539 +
  8.2540 +FUNCTION Get_Percent_Tolerance (
  8.2541 +   company_    IN VARCHAR2,
  8.2542 +   identity_   IN VARCHAR2,
  8.2543 +   party_type_ IN VARCHAR2 ) RETURN NUMBER
  8.2544 +IS
  8.2545 +   temp_ Public_Rec;
  8.2546 +BEGIN
  8.2547 +   temp_ := Get(company_, identity_, Party_Type_API.Encode(party_type_));
  8.2548 +   RETURN temp_.percent_tolerance;
  8.2549 +END Get_Percent_Tolerance;
  8.2550 +
  8.2551 +FUNCTION Get_Disc_Days_Tolerance (
  8.2552 +   company_ IN VARCHAR2,
  8.2553 +   identity_ IN VARCHAR2,
  8.2554 +   party_type_ IN VARCHAR2 ) RETURN NUMBER
  8.2555 +IS
  8.2556 +   temp_ &TABLE..disc_days_tolerance%TYPE;
  8.2557 +   CURSOR get_attr IS
  8.2558 +      SELECT disc_days_tolerance
  8.2559 +      FROM &TABLE
  8.2560 +      WHERE company = company_
  8.2561 +      AND   identity = identity_
  8.2562 +      AND   party_type = party_type_;
  8.2563 +BEGIN
  8.2564 +   OPEN get_attr;
  8.2565 +   FETCH get_attr INTO temp_;
  8.2566 +   CLOSE get_attr;
  8.2567 +   RETURN temp_;
  8.2568 +END Get_Disc_Days_Tolerance;
  8.2569 +
  8.2570 +FUNCTION Get_Netting_Allowed (
  8.2571 +   company_    IN VARCHAR2,
  8.2572 +   identity_   IN VARCHAR2,
  8.2573 +   party_type_ IN VARCHAR2 ) RETURN VARCHAR2
  8.2574 +IS
  8.2575 +   temp_ &TABLE..netting_allowed%TYPE;
  8.2576 +   CURSOR get_attr (party_type_db_ IN VARCHAR2) IS
  8.2577 +      SELECT netting_allowed
  8.2578 +      FROM &TABLE
  8.2579 +      WHERE company = company_
  8.2580 +      AND   identity = identity_
  8.2581 +      AND   party_type = party_type_db_;
  8.2582 +BEGIN
  8.2583 +   IF (NOT Company_Finance_API.Is_User_Authorized(company_)) THEN
  8.2584 +      RETURN temp_;
  8.2585 +   END IF;
  8.2586 +   OPEN get_attr(Party_Type_API.Encode(party_type_));
  8.2587 +   FETCH get_attr INTO temp_;
  8.2588 +   CLOSE get_attr;
  8.2589 +   RETURN temp_;
  8.2590 +END Get_Netting_Allowed;
  8.2591 +
  8.2592 +FUNCTION Get_Check_Recipient (
  8.2593 +   company_ IN VARCHAR2,
  8.2594 +   identity_ IN VARCHAR2,
  8.2595 +   party_type_ IN VARCHAR2 ) RETURN VARCHAR2
  8.2596 +IS
  8.2597 +   temp_ &TABLE..check_recipient%TYPE;
  8.2598 +   CURSOR get_attr (party_type_db_ IN VARCHAR2) IS
  8.2599 +      SELECT check_recipient
  8.2600 +      FROM &TABLE
  8.2601 +      WHERE company = company_
  8.2602 +      AND   identity = identity_
  8.2603 +      AND   party_type = party_type_db_;
  8.2604 +BEGIN
  8.2605 +   OPEN get_attr(Party_Type_API.Encode(party_type_));
  8.2606 +   FETCH get_attr INTO temp_;
  8.2607 +   CLOSE get_attr;
  8.2608 +   RETURN Check_Recipient_API.Decode(temp_);
  8.2609 +END Get_Check_Recipient;
  8.2610 +
  8.2611 +FUNCTION Get_Check_Recipient_Db (
  8.2612 +   company_    IN VARCHAR2,
  8.2613 +   identity_   IN VARCHAR2,
  8.2614 +   party_type_ IN VARCHAR2 ) RETURN VARCHAR2
  8.2615 +IS
  8.2616 +   temp_ &TABLE..check_recipient%TYPE;
  8.2617 +   CURSOR get_attr (party_type_db_ IN VARCHAR2) IS
  8.2618 +      SELECT check_recipient
  8.2619 +      FROM &TABLE
  8.2620 +      WHERE company = company_
  8.2621 +      AND   identity = identity_
  8.2622 +      AND   party_type = party_type_db_;
  8.2623 +BEGIN
  8.2624 +   OPEN get_attr(Party_Type_API.Encode(party_type_));
  8.2625 +   FETCH get_attr INTO temp_;
  8.2626 +   CLOSE get_attr;
  8.2627 +   RETURN temp_;
  8.2628 +END Get_Check_Recipient_Db;
  8.2629 +
  8.2630 +FUNCTION Get_Next_Pay_Matching_Id (
  8.2631 +   company_    IN VARCHAR2,
  8.2632 +   identity_   IN VARCHAR2,
  8.2633 +   party_type_ IN VARCHAR2 ) RETURN VARCHAR2
  8.2634 +IS
  8.2635 +   dummy_  NUMBER;
  8.2636 +BEGIN
  8.2637 +   General_SYS.Init_Method(lu_name_, '&PKG', 'Get_Next_Pay_Matching_Id');
  8.2638 +   dummy_ := Get_Payment_Matching_Id ( company_,
  8.2639 +                                       identity_,
  8.2640 +                                       party_type_ ) + 1;
  8.2641 +   UPDATE identity_pay_info_tab
  8.2642 +      SET next_payment_matching_id = dummy_
  8.2643 +   WHERE  company  = company_
  8.2644 +   AND    identity = identity_
  8.2645 +   AND    party_type = party_type_ ;
  8.2646 +   RETURN  dummy_ ;
  8.2647 +END Get_Next_Pay_Matching_Id;
  8.2648 +
  8.2649 +FUNCTION Get_Payment_Matching_Id (
  8.2650 +   company_    IN VARCHAR2,
  8.2651 +   identity_   IN VARCHAR2,
  8.2652 +   party_type_ IN VARCHAR2 ) RETURN VARCHAR2
  8.2653 +IS
  8.2654 +   CURSOR get_matching_id   IS
  8.2655 +   SELECT next_payment_matching_id
  8.2656 +   FROM   &TABLE
  8.2657 +   WHERE  company  = company_
  8.2658 +   AND    identity = identity_
  8.2659 +   AND    party_type = party_type_ ;
  8.2660 +
  8.2661 +   dummy_  NUMBER;
  8.2662 +BEGIN
  8.2663 +   General_SYS.Init_Method(lu_name_, '&PKG', 'Get_Payment_Matching_Id');
  8.2664 +   OPEN  get_matching_id;
  8.2665 +   FETCH get_matching_id INTO dummy_;
  8.2666 +   CLOSE get_matching_id;
  8.2667 +
  8.2668 +   RETURN  dummy_ ;
  8.2669 +END Get_Payment_Matching_Id;
  8.2670 +
  8.2671 +FUNCTION Get_Format_No (
  8.2672 +   company_    IN VARCHAR2,
  8.2673 +   identity_   IN VARCHAR2,
  8.2674 +   party_type_ IN VARCHAR2 ) RETURN NUMBER
  8.2675 +IS
  8.2676 +   temp_ &TABLE..format_no%TYPE;
  8.2677 +   CURSOR get_attr (party_type_db_ IN VARCHAR2) IS
  8.2678 +      SELECT format_no
  8.2679 +      FROM &TABLE
  8.2680 +      WHERE company = company_
  8.2681 +      AND   identity = identity_
  8.2682 +      AND   party_type = party_type_db_;
  8.2683 +BEGIN
  8.2684 +   IF (NOT Company_Finance_API.Is_User_Authorized(company_)) THEN
  8.2685 +      RETURN temp_;
  8.2686 +   END IF;
  8.2687 +   OPEN get_attr(Party_Type_API.Encode(party_type_));
  8.2688 +   FETCH get_attr INTO temp_;
  8.2689 +   CLOSE get_attr;
  8.2690 +   RETURN temp_;
  8.2691 +END Get_Format_No;
  8.2692 +
  8.2693 +FUNCTION Get_Other_Payee_Ded_Group_Desc (
  8.2694 +   company_           IN VARCHAR2,
  8.2695 +   payee_identity_    IN VARCHAR2,
  8.2696 +   party_type_        IN VARCHAR2 ) RETURN VARCHAR2
  8.2697 +IS
  8.2698 +   deduction_group_      VARCHAR2(20);
  8.2699 +BEGIN
  8.2700 +   deduction_group_ := Get_Deduction_Group(company_,
  8.2701 +                                           payee_identity_,
  8.2702 +                                           party_type_ );
  8.2703 +   IF (deduction_group_ IS NULL) THEN
  8.2704 +      RETURN NULL;
  8.2705 +   END IF;
  8.2706 +
  8.2707 +   RETURN Deduction_Group_API.Get_Description(company_,deduction_group_);
  8.2708 +END Get_Other_Payee_Ded_Group_Desc;
  8.2709 +
  8.2710 +FUNCTION Get_Deduction_Group (
  8.2711 +   company_    IN VARCHAR2,
  8.2712 +   identity_   IN VARCHAR2,
  8.2713 +   party_type_ IN VARCHAR2 ) RETURN VARCHAR2
  8.2714 +IS
  8.2715 +   temp_ &TABLE..deduction_group%TYPE;
  8.2716 +   CURSOR get_attr (party_type_db_ IN VARCHAR2) IS
  8.2717 +      SELECT deduction_group
  8.2718 +      FROM &TABLE
  8.2719 +      WHERE company = company_
  8.2720 +      AND   identity = identity_
  8.2721 +      AND   party_type = party_type_db_;
  8.2722 +BEGIN
  8.2723 +   IF (NOT Company_Finance_API.Is_User_Authorized(company_)) THEN
  8.2724 +      RETURN temp_;
  8.2725 +   END IF;
  8.2726 +   OPEN get_attr(Party_Type_API.Encode(party_type_));
  8.2727 +   FETCH get_attr INTO temp_;
  8.2728 +   CLOSE get_attr;
  8.2729 +   RETURN temp_;
  8.2730 +END Get_Deduction_Group;
  8.2731 +
  8.2732 +FUNCTION Get_Template_Id (
  8.2733 +   company_    IN VARCHAR2,
  8.2734 +   identity_   IN VARCHAR2,
  8.2735 +   party_type_ IN VARCHAR2 ) RETURN VARCHAR2
  8.2736 +IS
  8.2737 +   temp_ &TABLE..template_id%TYPE;
  8.2738 +   CURSOR get_attr IS
  8.2739 +      SELECT template_id
  8.2740 +      FROM &TABLE
  8.2741 +      WHERE company = company_
  8.2742 +      AND   identity = identity_
  8.2743 +      AND   party_type = party_type_;
  8.2744 +BEGIN
  8.2745 +   OPEN get_attr;
  8.2746 +   FETCH get_attr INTO temp_;
  8.2747 +   CLOSE get_attr;
  8.2748 +   RETURN temp_;
  8.2749 +END Get_Template_Id;
  8.2750 +
  8.2751 +FUNCTION Get_Corporation_Id (
  8.2752 +   company_    IN VARCHAR2,
  8.2753 +   identity_   IN VARCHAR2,
  8.2754 +   party_type_ IN VARCHAR2 ) RETURN VARCHAR2
  8.2755 +IS
  8.2756 +   temp_ &TABLE..corporation_id%TYPE;
  8.2757 +   CURSOR get_attr (party_type_db_ IN VARCHAR2) IS
  8.2758 +      SELECT corporation_id
  8.2759 +      FROM &TABLE
  8.2760 +      WHERE company = company_
  8.2761 +      AND   identity = identity_
  8.2762 +      AND   party_type = party_type_db_;
  8.2763 +BEGIN
  8.2764 +   IF (NOT Company_Finance_API.Is_User_Authorized(company_)) THEN
  8.2765 +      RETURN temp_;
  8.2766 +   END IF;
  8.2767 +   OPEN get_attr(Party_Type_API.Encode(party_type_));
  8.2768 +   FETCH get_attr INTO temp_;
  8.2769 +   CLOSE get_attr;
  8.2770 +   RETURN temp_;
  8.2771 +END Get_Corporation_Id;
  8.2772 +
  8.2773 +FUNCTION Get_Member_Id (
  8.2774 +   company_    IN VARCHAR2,
  8.2775 +   identity_   IN VARCHAR2,
  8.2776 +   party_type_ IN VARCHAR2 ) RETURN VARCHAR2
  8.2777 +IS
  8.2778 +   temp_ &TABLE..member_id%TYPE;
  8.2779 +   CURSOR get_attr (party_type_db_ IN VARCHAR2) IS
  8.2780 +      SELECT member_id
  8.2781 +      FROM &TABLE
  8.2782 +      WHERE company = company_
  8.2783 +      AND   identity = identity_
  8.2784 +      AND   party_type = party_type_db_;
  8.2785 +BEGIN
  8.2786 +   IF (NOT Company_Finance_API.Is_User_Authorized(company_)) THEN
  8.2787 +      RETURN temp_;
  8.2788 +   END IF;
  8.2789 +   OPEN get_attr(Party_Type_API.Encode(party_type_));
  8.2790 +   FETCH get_attr INTO temp_;
  8.2791 +   CLOSE get_attr;
  8.2792 +   RETURN temp_;
  8.2793 +END Get_Member_Id;
  8.2794 +
  8.2795 +FUNCTION Get_Send_Reminder_To_Payer (
  8.2796 +   company_    IN VARCHAR2,
  8.2797 +   identity_   IN VARCHAR2,
  8.2798 +   party_type_ IN VARCHAR2 ) RETURN VARCHAR2
  8.2799 +IS
  8.2800 +   temp_ &TABLE..send_reminder_to_payer%TYPE;
  8.2801 +   CURSOR get_attr (party_type_db_ IN VARCHAR2) IS
  8.2802 +      SELECT send_reminder_to_payer
  8.2803 +      FROM &TABLE
  8.2804 +      WHERE company = company_
  8.2805 +      AND   identity = identity_
  8.2806 +      AND   party_type = party_type_db_;
  8.2807 +BEGIN
  8.2808 +   IF (NOT Company_Finance_API.Is_User_Authorized(company_)) THEN
  8.2809 +      RETURN temp_;
  8.2810 +   END IF;
  8.2811 +   OPEN get_attr(Party_Type_API.Encode(party_type_));
  8.2812 +   FETCH get_attr INTO temp_;
  8.2813 +   CLOSE get_attr;
  8.2814 +   RETURN temp_;
  8.2815 +END Get_Send_Reminder_To_Payer;
  8.2816 +
  8.2817 +FUNCTION Get_Send_Interest_Inv_To_Payer (
  8.2818 +   company_    IN VARCHAR2,
  8.2819 +   identity_   IN VARCHAR2,
  8.2820 +   party_type_ IN VARCHAR2 ) RETURN VARCHAR2
  8.2821 +IS
  8.2822 +   temp_ &TABLE..send_interest_inv_to_payer%TYPE;
  8.2823 +   CURSOR get_attr (party_type_db_ IN VARCHAR2) IS
  8.2824 +      SELECT send_interest_inv_to_payer
  8.2825 +      FROM &TABLE
  8.2826 +      WHERE company = company_
  8.2827 +      AND   identity = identity_
  8.2828 +      AND   party_type = party_type_db_;
  8.2829 +BEGIN
  8.2830 +   IF (NOT Company_Finance_API.Is_User_Authorized(company_)) THEN
  8.2831 +      RETURN temp_;
  8.2832 +   END IF;
  8.2833 +   OPEN get_attr(Party_Type_API.Encode(party_type_));
  8.2834 +   FETCH get_attr INTO temp_;
  8.2835 +   CLOSE get_attr;
  8.2836 +   RETURN temp_;
  8.2837 +END Get_Send_Interest_Inv_To_Payer;
  8.2838 +
  8.2839 +FUNCTION Get_Payment_Advice (
  8.2840 +   company_ IN VARCHAR2,
  8.2841 +   identity_ IN VARCHAR2,
  8.2842 +   party_type_ IN VARCHAR2 ) RETURN VARCHAR2
  8.2843 +IS
  8.2844 +   temp_ &TABLE..payment_advice%TYPE;
  8.2845 +   CURSOR get_attr (party_type_db_ IN VARCHAR2) IS
  8.2846 +      SELECT payment_advice
  8.2847 +      FROM &TABLE
  8.2848 +      WHERE company = company_
  8.2849 +      AND   identity = identity_
  8.2850 +      AND   party_type = party_type_db_;
  8.2851 +BEGIN
  8.2852 +   IF (NOT Company_Finance_API.Is_User_Authorized(company_)) THEN
  8.2853 +      RETURN temp_;
  8.2854 +   END IF;
  8.2855 +   OPEN get_attr(Party_Type_API.Encode(party_type_));
  8.2856 +   FETCH get_attr INTO temp_;
  8.2857 +   CLOSE get_attr;
  8.2858 +   RETURN Payment_Advice_API.Decode(temp_);
  8.2859 +END Get_Payment_Advice;
  8.2860 +
  8.2861 +FUNCTION Get_Payment_Advice_Db (
  8.2862 +   company_ IN VARCHAR2,
  8.2863 +   identity_ IN VARCHAR2,
  8.2864 +   party_type_ IN VARCHAR2 ) RETURN VARCHAR2
  8.2865 +IS
  8.2866 +   temp_ &TABLE..payment_advice%TYPE;
  8.2867 +   CURSOR get_attr (party_type_db_ IN VARCHAR2) IS
  8.2868 +      SELECT payment_advice
  8.2869 +      FROM &TABLE
  8.2870 +      WHERE company = company_
  8.2871 +      AND   identity = identity_
  8.2872 +      AND   party_type = party_type_db_;
  8.2873 +BEGIN
  8.2874 +   IF (NOT Company_Finance_API.Is_User_Authorized(company_)) THEN
  8.2875 +      RETURN temp_;
  8.2876 +   END IF;
  8.2877 +   OPEN get_attr(Party_Type_API.Encode(party_type_));
  8.2878 +   FETCH get_attr INTO temp_;
  8.2879 +   CLOSE get_attr;
  8.2880 +   RETURN temp_;
  8.2881 +END Get_Payment_Advice_Db;
  8.2882 +
  8.2883 +
  8.2884 +FUNCTION Get_Other_Payee_Identity (
  8.2885 +   company_    IN VARCHAR2,
  8.2886 +   identity_   IN VARCHAR2,
  8.2887 +   party_type_ IN VARCHAR2 ) RETURN VARCHAR2
  8.2888 +IS
  8.2889 +   temp_  Public_Rec;
  8.2890 +BEGIN
  8.2891 +   temp_ := Get(company_, identity_, Party_Type_API.Encode(party_type_));
  8.2892 +   RETURN temp_.other_payee_identity;
  8.2893 +END Get_Other_Payee_Identity;
  8.2894 +
  8.2895 +FUNCTION Get_Interest_Template (
  8.2896 +   company_    IN VARCHAR2,
  8.2897 +   identity_ IN VARCHAR2,
  8.2898 +   party_type_ IN VARCHAR2 ) RETURN VARCHAR2
  8.2899 +IS
  8.2900 +   temp_  Public_Rec;
  8.2901 +BEGIN
  8.2902 +   temp_ := Get(company_, identity_, Party_Type_API.Encode(party_type_));
  8.2903 +   RETURN temp_.interest_template;
  8.2904 +END Get_Interest_Template;
  8.2905 +
  8.2906 +FUNCTION Get_Reminder_Template (
  8.2907 +   company_    IN VARCHAR2,
  8.2908 +   identity_   IN VARCHAR2,
  8.2909 +   party_type_ IN VARCHAR2 ) RETURN VARCHAR2
  8.2910 +IS
  8.2911 +   temp_ Public_Rec;
  8.2912 +BEGIN
  8.2913 +   temp_ := Get(company_, identity_, Party_Type_API.Encode(party_type_));
  8.2914 +   RETURN temp_.reminder_template;
  8.2915 +END Get_Reminder_Template;
  8.2916 +
  8.2917 +FUNCTION Get_Rule_Id (
  8.2918 +   company_    IN VARCHAR2,
  8.2919 +   identity_   IN VARCHAR2,
  8.2920 +   party_type_ IN VARCHAR2 ) RETURN VARCHAR2
  8.2921 +IS
  8.2922 +   temp_ &TABLE..rule_id%TYPE;
  8.2923 +   CURSOR get_attr (party_type_db_ IN VARCHAR2) IS
  8.2924 +      SELECT rule_id
  8.2925 +      FROM &TABLE
  8.2926 +      WHERE company = company_
  8.2927 +      AND   identity = identity_
  8.2928 +      AND   party_type = party_type_db_;
  8.2929 +BEGIN
  8.2930 +   IF (NOT Company_Finance_API.Is_User_Authorized(company_)) THEN
  8.2931 +      RETURN temp_;
  8.2932 +   END IF;
  8.2933 +   OPEN get_attr(Party_Type_API.Encode(party_type_));
  8.2934 +   FETCH get_attr INTO temp_;
  8.2935 +   CLOSE get_attr;
  8.2936 +   RETURN temp_;
  8.2937 +END Get_Rule_Id;
  8.2938 +
  8.2939 +FUNCTION Get_Payment_Receipt_Type (
  8.2940 +   company_    IN VARCHAR2,
  8.2941 +   identity_   IN VARCHAR2,
  8.2942 +   party_type_ IN VARCHAR2 ) RETURN VARCHAR2
  8.2943 +IS
  8.2944 +   temp_ &TABLE..payment_receipt_type%TYPE;
  8.2945 +   CURSOR get_attr (party_type_db_ IN VARCHAR2) IS
  8.2946 +      SELECT payment_receipt_type
  8.2947 +      FROM &TABLE
  8.2948 +      WHERE company = company_
  8.2949 +      AND   identity = identity_
  8.2950 +      AND   party_type = party_type_db_;
  8.2951 +BEGIN
  8.2952 +   OPEN get_attr(Party_Type_API.Encode(party_type_));
  8.2953 +   FETCH get_attr INTO temp_;
  8.2954 +   CLOSE get_attr;
  8.2955 +   RETURN Payment_Receipt_Type_API.Decode(temp_);
  8.2956 +END Get_Payment_Receipt_Type;
  8.2957 +
  8.2958 +FUNCTION Get_Payment_Receipt_Type_Db (
  8.2959 +   company_    IN VARCHAR2,
  8.2960 +   identity_   IN VARCHAR2,
  8.2961 +   party_type_ IN VARCHAR2 ) RETURN VARCHAR2
  8.2962 +IS
  8.2963 +   temp_ &TABLE..payment_receipt_type%TYPE;
  8.2964 +   CURSOR get_attr (party_type_db_ IN VARCHAR2) IS
  8.2965 +      SELECT payment_receipt_type
  8.2966 +      FROM &TABLE
  8.2967 +      WHERE company = company_
  8.2968 +      AND   identity = identity_
  8.2969 +      AND   party_type = party_type_db_;
  8.2970 +BEGIN
  8.2971 +   OPEN get_attr(Party_Type_API.Encode(party_type_));
  8.2972 +   FETCH get_attr INTO temp_;
  8.2973 +   CLOSE get_attr;
  8.2974 +   RETURN temp_;
  8.2975 +END Get_Payment_Receipt_Type_Db;
  8.2976 +
  8.2977 +PROCEDURE Instance_Exists (
  8.2978 +   info_       OUT VARCHAR2,
  8.2979 +   company_    IN  VARCHAR2,
  8.2980 +   identity_   IN  VARCHAR2,
  8.2981 +   party_type_ IN  VARCHAR2 )
  8.2982 +IS
  8.2983 +   CURSOR getrec (party_type_db_ IN VARCHAR2) IS
  8.2984 +      SELECT '1'
  8.2985 +      FROM   &TABLE
  8.2986 +      WHERE  company    = company_
  8.2987 +      AND    identity   = identity_
  8.2988 +      AND    party_type = party_type_db_;
  8.2989 +   lu_rec_ getrec%ROWTYPE;
  8.2990 +BEGIN
  8.2991 +   General_SYS.Init_Method(lu_name_, '&PKG', 'Instance_Exists');
  8.2992 +   OPEN getrec(Party_Type_API.Encode(party_type_));
  8.2993 +   FETCH getrec INTO lu_rec_;
  8.2994 +   IF (getrec%FOUND) THEN
  8.2995 +      info_ := 'TRUE';
  8.2996 +   ELSE
  8.2997 +      info_ := 'FALSE';
  8.2998 +   END IF;
  8.2999 +   CLOSE getrec;
  8.3000 +END Instance_Exists;
  8.3001 +
  8.3002 +PROCEDURE Create_Party_Type_Id (
  8.3003 +   company_    IN VARCHAR2,
  8.3004 +   identity_   IN VARCHAR2,
  8.3005 +   party_type_ IN VARCHAR2 )
  8.3006 +IS
  8.3007 +BEGIN
  8.3008 +   General_SYS.Init_Method(lu_name_, '&PKG', 'Create_Party_Type_Id');
  8.3009 +   Create_Identity_Pay_Info(company_, identity_, party_type_);
  8.3010 +END Create_Party_Type_Id;
  8.3011 +
  8.3012 +PROCEDURE Create_Identity_Pay_Info (
  8.3013 +   company_    IN VARCHAR2,
  8.3014 +   identity_   IN VARCHAR2,
  8.3015 +   party_type_ IN VARCHAR2 )
  8.3016 +IS
  8.3017 +   info_             VARCHAR2(2000);
  8.3018 +   objid_            &VIEW..objid%TYPE;
  8.3019 +   objversion_       &VIEW..objversion%TYPE;
  8.3020 +   attr_             VARCHAR2(2000);
  8.3021 +   def_template_     VARCHAR2(20);
  8.3022 +   nodefinteresttemp EXCEPTION;
  8.3023 +   nodefremindertemp EXCEPTION;
  8.3024 +   party_type_db_    &TABLE..party_type%TYPE;
  8.3025 +BEGIN
  8.3026 +   General_SYS.Init_Method(lu_name_, '&PKG', 'Create_Identity_Pay_Info');
  8.3027 +
  8.3028 +   party_type_db_ := Party_Type_API.Encode(party_type_);
  8.3029 +
  8.3030 +   New__(info_, objid_, objversion_, attr_, 'PREPARE');
  8.3031 +   Client_SYS.Add_To_Attr('COMPANY', company_, attr_);
  8.3032 +   Client_SYS.Add_To_Attr('IDENTITY', identity_, attr_);
  8.3033 +   Client_SYS.Add_To_Attr('PARTY_TYPE', party_type_, attr_);
  8.3034 +   IF (party_type_db_ = 'SUPPLIER') THEN
  8.3035 +      Client_SYS.Add_To_Attr('BLOCKED_FOR_PAYMENT', 'FALSE', attr_);
  8.3036 +      Client_SYS.Add_To_Attr('PRIORITY', 1, attr_);
  8.3037 +      Client_SYS.Add_To_Attr('CHECK_RECIPIENT', 'PAYEE', attr_);
  8.3038 +   ELSIF (party_type_db_ = 'CUSTOMER') THEN
  8.3039 +      def_template_ := Interest_Template_API.Get_Default_Template(company_);
  8.3040 +      IF (def_template_ IS NULL) THEN
  8.3041 +         RAISE nodefinteresttemp;
  8.3042 +      ELSE
  8.3043 +         Client_SYS.Add_To_Attr('INTEREST_TEMPLATE', def_template_, attr_);
  8.3044 +      END IF;
  8.3045 +      def_template_ := Reminder_Template_API.Get_Default_Template(company_);
  8.3046 +      IF (def_template_ IS NULL) THEN
  8.3047 +         RAISE nodefremindertemp;
  8.3048 +      ELSE
  8.3049 +         Client_SYS.Add_To_Attr('REMINDER_TEMPLATE', def_template_, attr_);
  8.3050 +      END IF;
  8.3051 +      IF Company_Invoice_Info_API.Get_Use_Tax_Invoice(company_) = 'TRUE' THEN
  8.3052 +         Client_SYS.Add_To_Attr('PAYMENT_RECEIPT_TYPE_DB', 'AT_MATCHING', attr_);
  8.3053 +      ELSE
  8.3054 +         Client_SYS.Add_To_Attr('PAYMENT_RECEIPT_TYPE_DB', 'NO_RECEIPT', attr_);
  8.3055 +      END IF;
  8.3056 +   END IF;
  8.3057 +   New__(info_, objid_, objversion_, attr_, 'DO');
  8.3058 +EXCEPTION
  8.3059 +   WHEN nodefremindertemp THEN
  8.3060 +      Error_SYS.Record_General(lu_name_, 'NODEFREMINDERTEMP: There is no default reminder template defined');
  8.3061 +   WHEN nodefinteresttemp THEN
  8.3062 +      Error_SYS.Record_General(lu_name_, 'NODEFINTERESTTEMP: There is no default interest template defined');
  8.3063 +END Create_Identity_Pay_Info;
  8.3064 +
  8.3065 +FUNCTION Validate_Identity (
  8.3066 +   company_    IN VARCHAR2,
  8.3067 +   party_type_ IN VARCHAR2,
  8.3068 +   identity_   IN VARCHAR2 ) RETURN VARCHAR2
  8.3069 +IS
  8.3070 +   dummy_ NUMBER;
  8.3071 +   CURSOR exist_identity (party_type_db_ IN VARCHAR2) IS
  8.3072 +      SELECT 1
  8.3073 +      FROM   &TABLE
  8.3074 +      WHERE  company    = company_
  8.3075 +      AND    party_type = party_type_db_
  8.3076 +      AND    identity   = identity_ ;
  8.3077 +BEGIN
  8.3078 +   OPEN exist_identity(Party_Type_API.Encode(party_type_));
  8.3079 +   FETCH exist_identity INTO dummy_;
  8.3080 +   IF (exist_identity %FOUND) THEN
  8.3081 +      CLOSE exist_identity ;
  8.3082 +      RETURN('TRUE');
  8.3083 +   END IF;
  8.3084 +   CLOSE exist_identity ;
  8.3085 +   RETURN('FALSE');
  8.3086 +END Validate_Identity;
  8.3087 +
  8.3088 +PROCEDURE Fetch_Tolerance (
  8.3089 +   amount_tolerance_   OUT NUMBER,
  8.3090 +   percent_tolerance_  OUT NUMBER,
  8.3091 +   company_            IN VARCHAR2,
  8.3092 +   identity_           IN VARCHAR2,
  8.3093 +   party_type_         IN VARCHAR2,
  8.3094 +   currency_           IN VARCHAR2,
  8.3095 +   curr_rate_          IN NUMBER,
  8.3096 +   conv_factor_        IN NUMBER,
  8.3097 +   date_               IN DATE,
  8.3098 +   action_             IN VARCHAR2 )
  8.3099 +IS
  8.3100 +   acc_currency_              VARCHAR2(20);
  8.3101 +   div_factor_                NUMBER;
  8.3102 +   amount_tolerance_acc_curr_ NUMBER;
  8.3103 +   currency_rate_             NUMBER;
  8.3104 +   dummy_                     VARCHAR2(5);
  8.3105 +   party_type_db_             VARCHAR2(20);
  8.3106 +
  8.3107 +   CURSOR get_identity_tolerance_ IS
  8.3108 +      SELECT percent_tolerance, amount_tolerance
  8.3109 +      FROM   &TABLE
  8.3110 +      WHERE  company = company_
  8.3111 +      AND    identity = identity_
  8.3112 +      AND    party_type = party_type_db_;
  8.3113 +
  8.3114 +   CURSOR get_company_tolerance_ IS
  8.3115 +      SELECT percent_tolerance, amount_tolerance
  8.3116 +      FROM   COMPANY_PAY_INFO_TAB
  8.3117 +      WHERE  company = company_;
  8.3118 +
  8.3119 +BEGIN
  8.3120 +   General_SYS.Init_Method(lu_name_, '&PKG', 'Fetch_Tolerance');
  8.3121 +
  8.3122 +   party_type_db_ := Party_Type_API.Encode(party_type_);
  8.3123 +
  8.3124 +   IF party_type_db_ = 'CUSTOMER' THEN
  8.3125 +       OPEN  get_identity_tolerance_;
  8.3126 +       FETCH get_identity_tolerance_  INTO percent_tolerance_, amount_tolerance_acc_curr_;
  8.3127 +       CLOSE get_identity_tolerance_;
  8.3128 +
  8.3129 +   -- general payment tolerance
  8.3130 +      IF percent_tolerance_ IS NULL AND amount_tolerance_acc_curr_ IS NULL THEN
  8.3131 +         OPEN  get_company_tolerance_;
  8.3132 +         FETCH get_company_tolerance_  INTO percent_tolerance_, amount_tolerance_acc_curr_;
  8.3133 +         CLOSE get_company_tolerance_;
  8.3134 +      END IF;
  8.3135 +
  8.3136 +   ELSIF party_type_db_ = 'SUPPLIER' THEN
  8.3137 +   -- general payment tolerance
  8.3138 +         OPEN  get_company_tolerance_;
  8.3139 +         FETCH get_company_tolerance_  INTO percent_tolerance_, amount_tolerance_acc_curr_;
  8.3140 +         CLOSE get_company_tolerance_;
  8.3141 +   END IF;
  8.3142 +
  8.3143 +   IF action_ = 'NOCALCULATE' THEN
  8.3144 +      amount_tolerance_ := amount_tolerance_acc_curr_;
  8.3145 +      RETURN;
  8.3146 +   END IF;
  8.3147 +
  8.3148 +   acc_currency_ := Company_Finance_API.Get_Currency_Code(company_);
  8.3149 +
  8.3150 +   IF acc_currency_ = currency_ THEN
  8.3151 +      amount_tolerance_ := amount_tolerance_acc_curr_;
  8.3152 +      RETURN;
  8.3153 +   END IF;
  8.3154 +   div_factor_:= conv_factor_;
  8.3155 +   currency_rate_ := curr_rate_;
  8.3156 +   IF ( (div_factor_ IS NULL) OR (currency_rate_ IS NULL)) THEN
  8.3157 +      Payment_Library_API.Get_Currency_Rate(
  8.3158 +         currency_rate_,
  8.3159 +         div_factor_,
  8.3160 +         dummy_,
  8.3161 +         dummy_,
  8.3162 +         company_,
  8.3163 +         currency_,
  8.3164 +         NVL( date_, sysdate),
  8.3165 +         NULL,
  8.3166 +         party_type_db_,
  8.3167 +         identity_
  8.3168 +         );
  8.3169 +   END IF;
  8.3170 +   IF (date_ IS NOT NULL) AND ((div_factor_ IS NULL) OR (currency_rate_ IS NULL)) THEN
  8.3171 +      Payment_Library_API.Get_Currency_Rate(
  8.3172 +         currency_rate_,
  8.3173 +         div_factor_,
  8.3174 +         dummy_,
  8.3175 +         dummy_,
  8.3176 +         company_,
  8.3177 +         currency_,
  8.3178 +         sysdate,
  8.3179 +         NULL,
  8.3180 +         party_type_db_,
  8.3181 +         identity_
  8.3182 +         );
  8.3183 +   END IF;
  8.3184 +
  8.3185 +   Payment_Library_API.Recalculate_To_Curr_Round(
  8.3186 +      amount_tolerance_,
  8.3187 +      company_,
  8.3188 +      amount_tolerance_acc_curr_,
  8.3189 +      curr_rate_,
  8.3190 +      div_factor_,
  8.3191 +      currency_);
  8.3192 +END Fetch_Tolerance;
  8.3193 +
  8.3194 +PROCEDURE Copy_Payway_Per_Identity___ (
  8.3195 +   company_               IN VARCHAR2,
  8.3196 +   identity_              IN VARCHAR2,
  8.3197 +   party_type_db_         IN VARCHAR2,
  8.3198 +   new_identity_          IN VARCHAR2 )
  8.3199 +IS
  8.3200 +   CURSOR get_pay_way IS
  8.3201 +      SELECT *
  8.3202 +      FROM   PAYMENT_WAY_PER_IDENTITY_TAB
  8.3203 +      WHERE  company    = company_
  8.3204 +        AND  identity   = identity_
  8.3205 +        AND  party_type = party_type_db_;
  8.3206 +BEGIN
  8.3207 +   FOR pay_way_ IN get_pay_way LOOP
  8.3208 +        INSERT INTO PAYMENT_WAY_PER_IDENTITY_TAB (company, identity, party_type,
  8.3209 +                                                  way_id, default_payment_way, rowversion )
  8.3210 +               VALUES (pay_way_.company, new_identity_, pay_way_.party_type,
  8.3211 +                       pay_way_.way_id, pay_way_.default_payment_way, 1 );
  8.3212 +   END LOOP;
  8.3213 +END Copy_Payway_Per_Identity___;
  8.3214 +
  8.3215 +PROCEDURE Copy_Payment_Address___ (
  8.3216 +   company_               IN VARCHAR2,
  8.3217 +   identity_              IN VARCHAR2,
  8.3218 +   party_type_db_         IN VARCHAR2,
  8.3219 +   new_identity_          IN VARCHAR2 )
  8.3220 +IS
  8.3221 +   CURSOR get_pay_addr IS
  8.3222 +      SELECT *
  8.3223 +      FROM   PAYMENT_ADDRESS_TAB
  8.3224 +      WHERE  company    = company_
  8.3225 +        AND  identity   = identity_
  8.3226 +        AND  party_type = party_type_db_;
  8.3227 +BEGIN
  8.3228 +   FOR pay_addr_ IN get_pay_addr LOOP
  8.3229 +      -- Bug 72177, Begin, Added bic_code
  8.3230 +      INSERT INTO PAYMENT_ADDRESS_TAB (company, identity, party_type, way_id,
  8.3231 +                                       address_id,description, default_address,
  8.3232 +                                       data1, data2, data3, data4, data5, data6,
  8.3233 +                                       data7, data8, data9, data10, data11, data12,
  8.3234 +                                       data13, data14, data15, data16, data17, data18,
  8.3235 +                                       data19, data20, data21, data22,
  8.3236 +                                       account, bic_code, rowversion, rowtype )
  8.3237 +             VALUES (pay_addr_.company, new_identity_, pay_addr_.party_type, pay_addr_.way_id,
  8.3238 +                     pay_addr_.address_id,
  8.3239 +                     pay_addr_.description, pay_addr_.default_address,
  8.3240 +                     pay_addr_.data1, pay_addr_.data2, pay_addr_.data3,
  8.3241 +                     pay_addr_.data4, pay_addr_.data5, pay_addr_.data6,
  8.3242 +                     pay_addr_.data7, pay_addr_.data8, pay_addr_.data9,
  8.3243 +                     pay_addr_.data10, pay_addr_.data11, pay_addr_.data12,
  8.3244 +                     pay_addr_.data13, pay_addr_.data14, pay_addr_.data15,
  8.3245 +                     pay_addr_.data16, pay_addr_.data17, pay_addr_.data18,
  8.3246 +                     pay_addr_.data19, pay_addr_.data20, pay_addr_.data21,
  8.3247 +                     pay_addr_.data22,pay_addr_.account, pay_addr_.bic_code, 1, pay_addr_.rowtype );
  8.3248 +      -- Bug 72177, End
  8.3249 +
  8.3250 +   END LOOP;
  8.3251 +END Copy_Payment_Address___;
  8.3252 +
  8.3253 +PROCEDURE Copy_Customer (
  8.3254 +   customer_identity_old_ IN VARCHAR2,
  8.3255 +   customer_identity_new_ IN VARCHAR2,
  8.3256 +   company_               IN VARCHAR2 )
  8.3257 +IS
  8.3258 +   CURSOR get_customer IS
  8.3259 +      SELECT *
  8.3260 +      FROM   IDENTITY_PAY_INFO_TAB
  8.3261 +      WHERE  identity   = customer_identity_old_
  8.3262 +        AND  company    = company_
  8.3263 +        AND  party_type = 'CUSTOMER';
  8.3264 +
  8.3265 +   CURSOR get_credit_info IS
  8.3266 +      SELECT *
  8.3267 +      FROM   CUSTOMER_CREDIT_INFO_TAB
  8.3268 +      WHERE  identity = customer_identity_old_
  8.3269 +        AND  company = company_;
  8.3270 +
  8.3271 +   format_no_ NUMBER;
  8.3272 +BEGIN
  8.3273 +   General_SYS.Init_Method(lu_name_, '&PKG', 'Copy_Customer');
  8.3274 +   FOR customer_ IN get_customer LOOP
  8.3275 +      format_no_ := Get_Next_Format_No___ (company_);
  8.3276 +      -- Bug 73125, Begin, Added template_id 
  8.3277 +      INSERT INTO IDENTITY_PAY_INFO_TAB (company, identity, party_type,
  8.3278 +                                         reminder_template, interest_template, payment_delay,
  8.3279 +                                         amount_tolerance, percent_tolerance, disc_days_tolerance,
  8.3280 +                                         netting_allowed, format_no, payment_advice,
  8.3281 +                                         deduction_group, corporation_id,
  8.3282 +                                         other_payee_identity, member_id,
  8.3283 +                                         send_reminder_to_payer, send_interest_inv_to_payer,
  8.3284 +                                         payment_receipt_type,send_statement_of_acc_to_payer ,
  8.3285 +                                         next_payment_matching_id,
  8.3286 +                                         template_id,rowversion )
  8.3287 +             VALUES (customer_.company, customer_identity_new_, 'CUSTOMER',
  8.3288 +                     customer_.reminder_template, customer_.interest_template, customer_.payment_delay,
  8.3289 +                     customer_.amount_tolerance, customer_.percent_tolerance, customer_.disc_days_tolerance,
  8.3290 +                     customer_.netting_allowed, format_no_, customer_.payment_advice,
  8.3291 +                     customer_.deduction_group, customer_.corporation_id,
  8.3292 +                     customer_.other_payee_identity, customer_.member_id,
  8.3293 +                     customer_.send_reminder_to_payer, customer_.send_interest_inv_to_payer,
  8.3294 +                     customer_.payment_receipt_type,
  8.3295 +                     customer_.send_statement_of_acc_to_payer, 1,
  8.3296 +                     customer_.template_id,1 );
  8.3297 +      -- Bug 73125, End
  8.3298 +
  8.3299 +
  8.3300 +      Copy_Payway_Per_Identity___( customer_.company,
  8.3301 +                                   customer_identity_old_,
  8.3302 +                                   'CUSTOMER',
  8.3303 +                                   customer_identity_new_ );
  8.3304 +      Copy_Payment_Address___( customer_.company,
  8.3305 +                               customer_identity_old_,
  8.3306 +                               'CUSTOMER',
  8.3307 +                               customer_identity_new_ );
  8.3308 +   END LOOP;
  8.3309 +
  8.3310 +   FOR credit_ IN get_credit_info LOOP
  8.3311 +      INSERT INTO CUSTOMER_CREDIT_INFO_TAB (company, identity, last4q_sales,
  8.3312 +                                            note_text, credit_number, credit_rating, avg_days_for_payment,
  8.3313 +                                            credit_comments,credit_limit,credit_block,
  8.3314 +                                            next_review_date,corp_credit_relation_exist,
  8.3315 +                                            credit_relationship_type,message_type,
  8.3316 +                                            party_type,parent_identity,parent_company,
  8.3317 +                                            credit_analyst_code,rowversion )
  8.3318 +             VALUES (credit_.company, customer_identity_new_, credit_.last4q_sales,
  8.3319 +                     credit_.note_text, credit_.credit_number, credit_.credit_rating, credit_.avg_days_for_payment,
  8.3320 +                     credit_.credit_comments,credit_.credit_limit,credit_.credit_block,
  8.3321 +                     credit_.next_review_date,'FALSE',
  8.3322 +                     NULL,credit_.message_type,
  8.3323 +                     credit_.party_type,NULL,NULL,
  8.3324 +                     credit_.credit_analyst_code, sysdate );
  8.3325 +   END LOOP;
  8.3326 +END Copy_Customer;
  8.3327 +
  8.3328 +PROCEDURE Copy_Supplier (
  8.3329 +   supplier_identity_old_ IN VARCHAR2,
  8.3330 +   supplier_identity_new_ IN VARCHAR2,
  8.3331 +   company_               IN VARCHAR2 )
  8.3332 +IS
  8.3333 +   CURSOR get_supplier IS
  8.3334 +      SELECT *
  8.3335 +      FROM   IDENTITY_PAY_INFO_TAB
  8.3336 +      WHERE  identity   = supplier_identity_old_
  8.3337 +        AND  company    = company_
  8.3338 +        AND  party_type = 'SUPPLIER';
  8.3339 +
  8.3340 +   attr_       VARCHAR2(2000);
  8.3341 +   info_       VARCHAR2(2000);
  8.3342 +   objid_      VARCHAR2(2000);
  8.3343 +   objversion_ VARCHAR2(2000);
  8.3344 +   format_no_  NUMBER;
  8.3345 +BEGIN
  8.3346 +   General_SYS.Init_Method(lu_name_, '&PKG', 'Copy_Supplier');
  8.3347 +   FOR supplier_ IN get_supplier LOOP
  8.3348 +      format_no_ := Get_Next_Format_No___ (company_);
  8.3349 +      -- Bug 73125, Begin, Added template_id 
  8.3350 +      INSERT INTO IDENTITY_PAY_INFO_TAB (company, identity, party_type,
  8.3351 +                                         priority, blocked_for_payment,
  8.3352 +                                         reminder_template, interest_template,
  8.3353 +                                         amount_tolerance, percent_tolerance,
  8.3354 +                                         netting_allowed, format_no,
  8.3355 +                                         payment_advice, next_payment_matching_id,check_recipient,
  8.3356 +                                         template_id, rowversion )
  8.3357 +             VALUES (supplier_.company, supplier_identity_new_, 'SUPPLIER',
  8.3358 +                     supplier_.priority, supplier_.blocked_for_payment,
  8.3359 +                     supplier_.reminder_template, supplier_.interest_template,
  8.3360 +                     supplier_.amount_tolerance, supplier_.percent_tolerance,
  8.3361 +                     supplier_.netting_allowed,  format_no_,
  8.3362 +                     supplier_.payment_advice, 1, supplier_.check_recipient,
  8.3363 +                     supplier_.template_id,1 );
  8.3364 +      -- Bug 73125, End
  8.3365 +      Copy_Payway_Per_Identity___( supplier_.company,
  8.3366 +                                   supplier_identity_old_,
  8.3367 +                                   'SUPPLIER',
  8.3368 +                                   supplier_identity_new_ );
  8.3369 +      Copy_Payment_Address___( supplier_.company,
  8.3370 +                               supplier_identity_old_,
  8.3371 +                               'SUPPLIER',
  8.3372 +                               supplier_identity_new_ );
  8.3373 +   END LOOP;
  8.3374 +END Copy_Supplier;
  8.3375 +
  8.3376 +FUNCTION Get (
  8.3377 +   company_       IN VARCHAR2,
  8.3378 +   identity_      IN VARCHAR2,
  8.3379 +   party_type_db_ IN VARCHAR2 ) RETURN Public_Rec
  8.3380 +IS
  8.3381 +   temp_ Public_Rec;
  8.3382 +   CURSOR get_attr IS
  8.3383 +      SELECT priority, blocked_for_payment, other_payee_identity, interest_template, reminder_template,payment_delay,
  8.3384 +             amount_tolerance, percent_tolerance, disc_days_tolerance, netting_allowed, format_no, payment_advice,
  8.3385 +             deduction_group,corporation_id,member_id,send_reminder_to_payer,send_interest_inv_to_payer,payment_receipt_type, 
  8.3386 +             template_id, check_recipient, send_statement_of_acc_to_payer
  8.3387 +      FROM &TABLE
  8.3388 +      WHERE company = company_
  8.3389 +      AND   identity = identity_
  8.3390 +      AND   party_type = party_type_db_;
  8.3391 +BEGIN
  8.3392 +   IF (NOT Company_Finance_API.Is_User_Authorized(company_)) THEN
  8.3393 +      RETURN temp_;
  8.3394 +   END IF;
  8.3395 +
  8.3396 +   OPEN get_attr;
  8.3397 +   FETCH get_attr INTO temp_;
  8.3398 +   CLOSE get_attr;
  8.3399 +   RETURN temp_;
  8.3400 +END Get;
  8.3401 +
  8.3402 +PROCEDURE User_Allowed___(
  8.3403 +   company_   IN VARCHAR2)
  8.3404 +IS
  8.3405 +  fnd_user_  VARCHAR2(2000);
  8.3406 +
  8.3407 +BEGIN
  8.3408 +
  8.3409 +  fnd_user_ := Fnd_Session_API.Get_Fnd_User;
  8.3410 +
  8.3411 +  IF NOT (company_finance_api.Is_User_Authorized(company_)) then
  8.3412 +        Error_SYS.Appl_General(lu_name_,'NOTUSERALLOWED: User :P1 is not allowed to use Company :P2',fnd_user_,company_);
  8.3413 +  END IF;
  8.3414 +
  8.3415 +END User_Allowed___;
  8.3416 +
  8.3417 +
  8.3418 +-- --------------------------------------------------------------------------
  8.3419 +-- Server-side functions used by new report (Output Servicese)
  8.3420 +-- --------------------------------------------------------------------------
  8.3421 +FUNCTION Get_Group_For_Identity (
  8.3422 +   company_               IN VARCHAR2,
  8.3423 +   identity_              IN VARCHAR2,
  8.3424 +   party_type_db_         IN VARCHAR2 ) RETURN VARCHAR2
  8.3425 +IS
  8.3426 +   CURSOR get_group IS
  8.3427 +      SELECT group_id
  8.3428 +      FROM   IDENTITY_INVOICE_INFO
  8.3429 +      WHERE  company = company_
  8.3430 +        AND  identity = identity_
  8.3431 +        AND  party_type_db = party_type_db_ ;
  8.3432 +   group_id_       VARCHAR2(20);
  8.3433 +BEGIN
  8.3434 +   OPEN  get_group;
  8.3435 +   FETCH get_group INTO group_id_;
  8.3436 +   IF (get_group%NOTFOUND) THEN
  8.3437 +      CLOSE get_group;
  8.3438 +      RETURN NULL;
  8.3439 +   END IF;
  8.3440 +   CLOSE get_group;
  8.3441 +
  8.3442 +   RETURN group_id_;
  8.3443 +END Get_Group_For_Identity;
  8.3444 +
  8.3445 +PROCEDURE Make_Company (
  8.3446 +   attr_         IN VARCHAR2 )
  8.3447 +IS
  8.3448 +   rec_        Enterp_Comp_Connect_V160_API.Crecomp_Lu_Public_Rec;
  8.3449 +BEGIN
  8.3450 +   General_SYS.Init_Method(lu_name_, '&PKG', 'Make_Company');
  8.3451 +
  8.3452 +   rec_ := Enterp_Comp_Connect_V160_API.Get_Crecomp_Lu_Rec('&MODULE', attr_);
  8.3453 +
  8.3454 +   IF (rec_.make_company = 'EXPORT') THEN
  8.3455 +      Export___(rec_);
  8.3456 +   ELSIF (rec_.make_company = 'IMPORT') THEN
  8.3457 +      IF (rec_.action = 'NEW') THEN
  8.3458 +         Import___(rec_);
  8.3459 +      ELSIF (rec_.action = 'DUPLICATE') THEN
  8.3460 +         Copy___(rec_);
  8.3461 +      END IF;
  8.3462 +   END IF;
  8.3463 +END Make_Company;
  8.3464 +
  8.3465 +FUNCTION Cust_Open_Items_Exist (
  8.3466 +   company_ 	IN VARCHAR2,
  8.3467 +   identity_ 	IN VARCHAR2 ) RETURN VARCHAR2
  8.3468 +IS
  8.3469 +   dummy_ NUMBER;
  8.3470 +   CURSOR exist_control IS
  8.3471 +      SELECT 1
  8.3472 +      FROM   LEDGER_ITEM_TAB
  8.3473 +      WHERE  company = company_
  8.3474 +      AND    identity = identity_
  8.3475 +      AND    (payer_identity IS NOT NULL AND payer_identity != identity)
  8.3476 +      AND    ledger_status_type = 'NORMAL'
  8.3477 +      AND   ((fully_paid_voucher_date IS NULL) OR
  8.3478 +             (rowstate in ('Unpaid', 'PartlyPaid'))
  8.3479 +             OR (rowstate in ('Created', 'BeforeDueDate', 'SentForCashing')))
  8.3480 +      AND   (party_type = 'CUSTOMER' OR (party_type = 'COMPANY' AND parked_pay_type = 'CUSTOMER'));
  8.3481 +
  8.3482 +BEGIN
  8.3483 +   General_SYS.Init_Method(lu_name_, '&PKG', 'Cust_Open_Items_Exist');
  8.3484 +   OPEN exist_control;
  8.3485 +   FETCH exist_control INTO dummy_;
  8.3486 +   IF (exist_control%FOUND) THEN
  8.3487 +      CLOSE exist_control;
  8.3488 +      RETURN('TRUE');
  8.3489 +   END IF;
  8.3490 +   CLOSE exist_control;
  8.3491 +   RETURN('FALSE');
  8.3492 +END Cust_Open_Items_Exist;
  8.3493 +
  8.3494 +FUNCTION Get_Send_Stmt_Of_Acc_To_Payer (
  8.3495 +   company_    IN VARCHAR2,
  8.3496 +   identity_   IN VARCHAR2,
  8.3497 +   party_type_ IN VARCHAR2 ) RETURN VARCHAR2
  8.3498 +IS
  8.3499 +   temp_  Public_Rec;
  8.3500 +BEGIN
  8.3501 +   IF (NOT Company_Finance_API.Is_User_Authorized(company_)) THEN
  8.3502 +      RETURN NULL;
  8.3503 +   END IF;
  8.3504 +   temp_ := Get(company_, identity_, Party_Type_API.Encode(party_type_));
  8.3505 +   RETURN temp_.send_statement_of_acc_to_payer;
  8.3506 +END Get_Send_Stmt_Of_Acc_To_Payer;
  8.3507 +-----------------------------------------------------------------------------
  8.3508 +-------------------- FOUNDATION1 METHODS ------------------------------------
  8.3509 +-----------------------------------------------------------------------------
  8.3510 +-- Init
  8.3511 +--   Dummy procedure that can be called at database startup to ensure that
  8.3512 +--   this package is loaded into memory for performance reasons only.
  8.3513 +-----------------------------------------------------------------------------
  8.3514 +
  8.3515 +PROCEDURE Init
  8.3516 +IS
  8.3517 +BEGIN
  8.3518 +   NULL;
  8.3519 +END Init;
  8.3520 +
  8.3521 +
  8.3522 +END &PKG;
  8.3523 +/
  8.3524 +SHOW ERROR
  8.3525 +
  8.3526 +-----------------------------------------------------------------------------
  8.3527 +
  8.3528 +----------------------------------------------------------
  8.3529 +-- <UNDEFINE_SECTION>
  8.3530 +----------------------------------------------------------
  8.3531 +-- This section is reserved for undefine statements
  8.3532 +-- nothing should be manually written below because
  8.3533 +-- that would be overwritten everytime the IFS / Undefine
  8.3534 +-- tool is run.
  8.3535 +-- Also do NOT make any changes to the above tag because
  8.3536 +-- this will result in duplicated code
  8.3537 +----------------------------------------------------------
  8.3538 +UNDEFINE MODULE
  8.3539 +UNDEFINE LU
  8.3540 +UNDEFINE TABLE
  8.3541 +
  8.3542 +UNDEFINE VIEW
  8.3543 +UNDEFINE VIEWPCT
  8.3544 +UNDEFINE VIEW_SU_QRY
  8.3545 +UNDEFINE VIEW_CU_QRY
  8.3546 +UNDEFINE VIEW_SUPP
  8.3547 +UNDEFINE VIEW_CUST
  8.3548 +UNDEFINE VIEW_MULTI_CUST
  8.3549 +UNDEFINE VIEW_MULTI_SUP
  8.3550 +UNDEFINE VIEW_LOV
  8.3551 +UNDEFINE VIEW_ALL
  8.3552 +UNDEFINE VIEW_MULTI_CUS
  8.3553 +UNDEFINE VIEW_MULTI_SUP
  8.3554 +UNDEFINE VIEW_MULTI_ADD
  8.3555 +
  8.3556 +UNDEFINE PKG
  8.3557 +UNDEFINE OBJID
  8.3558 +UNDEFINE OBJVERSION
  8.3559 +UNDEFINE OBJID_PTIPI
  8.3560 +UNDEFINE OBJVERSION_PTIPI
     9.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     9.2 +++ b/PLSQL/Lexer/test/unit/data/InstallationSite.apy	Wed May 15 23:04:20 2013 +0200
     9.3 @@ -0,0 +1,739 @@
     9.4 +-----------------------------------------------------------------------------
     9.5 +--
     9.6 +--  Logical unit: InstallationSite
     9.7 +--
     9.8 +--  Purpose:
     9.9 +--
    9.10 +--  IFS/Design Template Version 2.2
    9.11 +--
    9.12 +--  Date    Sign  History
    9.13 +--  ------  ----  -----------------------------------------------------------
    9.14 +--  000101  JhMa  Created.
    9.15 +--  000621  ROOD  Modified parameters in Get_Timezone_Difference_.
    9.16 +--  000628  ROOD  Changes in error handling.
    9.17 +--  000808  ROOD  Completed the upgrade to Yoshimura template (Bug#15811).
    9.18 +--  020128  ROOD  Modified view and business logic to handle 
    9.19 +--                attribute translations (ToDo#4070).
    9.20 +--  020702  ROOD  Corrected usage of General_SYS.Init_Method (ToDo#4087).
    9.21 +--  030212  ROOD  Changed module to FNDBAS (ToDo#4149).
    9.22 +--  040408  HAAR  Unicode bulk changes, removed extensive use of Substr and/or Substrb (F1PR408B).
    9.23 +-----------------------------------------------------------------------------
    9.24 +
    9.25 +DEFINE MODULE        = FNDBAS
    9.26 +DEFINE LU            = InstallationSite
    9.27 +DEFINE TABLE         = INSTALLATION_SITE_TAB
    9.28 +DEFINE VIEW          = INSTALLATION_SITE
    9.29 +DEFINE PKG           = INSTALLATION_SITE_API
    9.30 +DEFINE LOV_VIEW      = USER_DB_LINKS_LOV
    9.31 +
    9.32 +DEFINE OBJID         = rowid
    9.33 +DEFINE OBJVERSION    = "ltrim(lpad(to_char(rowversion,'YYYYMMDDHH24MISS'),2000))"
    9.34 +
    9.35 +-----------------------------------------------------------------------------
    9.36 +-------------------- VIEWS FOR SELECTS --------------------------------------
    9.37 +-----------------------------------------------------------------------------
    9.38 +
    9.39 +PROMPT Creating &LOV_VIEW view
    9.40 +
    9.41 +CREATE OR REPLACE FORCE VIEW &LOV_VIEW AS
    9.42 +SELECT Db_Link                        Db_Link
    9.43 +FROM   user_db_links
    9.44 +WITH   read only;
    9.45 +
    9.46 +COMMENT ON TABLE &LOV_VIEW
    9.47 +   IS 'LU=&LU^PROMPT=Installation Site^MODULE=&MODULE^';
    9.48 +
    9.49 +COMMENT ON COLUMN &LOV_VIEW..Db_Link
    9.50 +   IS 'FLAGS=K---L^DATATYPE=STRING(128)/UPPERCASE^PROMPT=Db Link^';
    9.51 +
    9.52 +
    9.53 +PROMPT Creating &VIEW view
    9.54 +
    9.55 +CREATE OR REPLACE FORCE VIEW &VIEW AS
    9.56 +SELECT site_id                        site_id,
    9.57 +       timezone_difference            timezone_difference,
    9.58 +       nvl(Module_Translate_Attr_Util_API.Get_Attribute_Translation('&MODULE', '&LU', site_id ),description)     description,
    9.59 +       this_site                      this_site,
    9.60 +       database_link                  database_link,
    9.61 +       &OBJID                         objid,
    9.62 +       &OBJVERSION                    objversion
    9.63 +FROM   installation_site_tab
    9.64 +WITH   read only;
    9.65 +
    9.66 +COMMENT ON TABLE &VIEW
    9.67 +   IS 'LU=&LU^PROMPT=Installation Site^MODULE=&MODULE^';
    9.68 +
    9.69 +COMMENT ON COLUMN &VIEW..site_id
    9.70 +   IS 'FLAGS=KMI-L^DATATYPE=STRING(30)/UPPERCASE^PROMPT=Site Id^';
    9.71 +COMMENT ON COLUMN &VIEW..timezone_difference
    9.72 +   IS 'FLAGS=AMIU-^DATATYPE=NUMBER^PROMPT=Timezone Difference^';
    9.73 +COMMENT ON COLUMN &VIEW..description
    9.74 +   IS 'FLAGS=A-IUL^DATATYPE=STRING(255)^PROMPT=Description^';
    9.75 +COMMENT ON COLUMN &VIEW..this_site
    9.76 +   IS 'FLAGS=AMIU-^DATATYPE=STRING(5)/UPPERCASE^PROMPT=This Site^';
    9.77 +COMMENT ON COLUMN &VIEW..database_link
    9.78 +   IS 'FLAGS=A-IU-^DATATYPE=STRING(128)/UPPERCASE^PROMPT=Database Link^';
    9.79 +
    9.80 +-----------------------------------------------------------------------------
    9.81 +-------------------- PACKAGES FOR METHODS -----------------------------------
    9.82 +-----------------------------------------------------------------------------
    9.83 +
    9.84 +PROMPT Creating &PKG implementation
    9.85 +
    9.86 +CREATE OR REPLACE PACKAGE BODY &PKG IS
    9.87 +
    9.88 +-----------------------------------------------------------------------------
    9.89 +-------------------- LU SPECIFIC IMPLEMENTATION METHOD DECLARATIONS ---------
    9.90 +-----------------------------------------------------------------------------
    9.91 +
    9.92 +
    9.93 +-----------------------------------------------------------------------------
    9.94 +-------------------- IMPLEMENTATION BASE METHODS ----------------------------
    9.95 +-----------------------------------------------------------------------------
    9.96 +-- Lock_By_Id___
    9.97 +--    Client-support to lock a specific instance of the logical unit.
    9.98 +--
    9.99 +-- Lock_By_Keys___
   9.100 +--    Server support to lock a specific instance of the logical unit.
   9.101 +--
   9.102 +-- Get_Object_By_Id___
   9.103 +--    Get LU-record from the database with a specified object identity.
   9.104 +--
   9.105 +-- Get_Object_By_Keys___
   9.106 +--    Get LU-record from the database with specified key columns.
   9.107 +--
   9.108 +-- Check_Exist___
   9.109 +--    Check if a specific LU-instance already exist in the database.
   9.110 +--
   9.111 +-- Get_Id_Version_By_Keys___
   9.112 +--    Get the current OBJID and OBJVERSION for a specific LU-instance.
   9.113 +-----------------------------------------------------------------------------
   9.114 +
   9.115 +FUNCTION Lock_By_Id___ (
   9.116 +   objid_      IN  VARCHAR2,
   9.117 +   objversion_ IN  VARCHAR2 ) RETURN &TABLE%ROWTYPE
   9.118 +IS
   9.119 +   row_changed EXCEPTION;
   9.120 +   row_deleted EXCEPTION;
   9.121 +   row_locked  EXCEPTION;
   9.122 +   PRAGMA      exception_init(row_locked, -0054);
   9.123 +   rec_        &TABLE%ROWTYPE;
   9.124 +   dummy_      NUMBER;
   9.125 +   CURSOR lock_control IS
   9.126 +      SELECT *
   9.127 +      FROM   &TABLE
   9.128 +      WHERE  &OBJID = objid_
   9.129 +      AND    &OBJVERSION = objversion_
   9.130 +      FOR UPDATE NOWAIT;
   9.131 +   CURSOR exist_control IS
   9.132 +      SELECT 1
   9.133 +      FROM   &TABLE
   9.134 +      WHERE  &OBJID = objid_;
   9.135 +BEGIN
   9.136 +   OPEN lock_control;
   9.137 +   FETCH lock_control INTO rec_;
   9.138 +   IF (lock_control%FOUND) THEN
   9.139 +      CLOSE lock_control;
   9.140 +      RETURN rec_;
   9.141 +   END IF;
   9.142 +   CLOSE lock_control;
   9.143 +   OPEN exist_control;
   9.144 +   FETCH exist_control INTO dummy_;
   9.145 +   IF (exist_control%FOUND) THEN
   9.146 +      CLOSE exist_control;
   9.147 +      RAISE row_changed;
   9.148 +   ELSE
   9.149 +      CLOSE exist_control;
   9.150 +      RAISE row_deleted;
   9.151 +   END IF;
   9.152 +EXCEPTION
   9.153 +   WHEN row_locked THEN
   9.154 +      Error_SYS.Record_Locked(lu_name_);
   9.155 +   WHEN row_changed THEN
   9.156 +      Error_SYS.Record_Modified(lu_name_);
   9.157 +   WHEN row_deleted THEN
   9.158 +      Error_SYS.Record_Removed(lu_name_);
   9.159 +END Lock_By_Id___;
   9.160 +
   9.161 +FUNCTION Lock_By_Keys___ (
   9.162 +   site_id_ IN VARCHAR2 ) RETURN &TABLE%ROWTYPE
   9.163 +IS
   9.164 +   row_deleted EXCEPTION;
   9.165 +   rec_        &TABLE%ROWTYPE;
   9.166 +   CURSOR lock_control IS
   9.167 +      SELECT *
   9.168 +      FROM  &TABLE
   9.169 +      WHERE site_id = site_id_
   9.170 +      FOR UPDATE;
   9.171 +BEGIN
   9.172 +   OPEN lock_control;
   9.173 +   FETCH lock_control INTO rec_;
   9.174 +   IF (lock_control%FOUND) THEN
   9.175 +      CLOSE lock_control;
   9.176 +      RETURN rec_;
   9.177 +   ELSE
   9.178 +      CLOSE lock_control;
   9.179 +      RAISE row_deleted;
   9.180 +   END IF;
   9.181 +EXCEPTION
   9.182 +   WHEN row_deleted THEN
   9.183 +      Error_SYS.Record_Removed(lu_name_);
   9.184 +END Lock_By_Keys___;
   9.185 +
   9.186 +FUNCTION Get_Object_By_Id___ (
   9.187 +   objid_ IN VARCHAR2 ) RETURN &TABLE%ROWTYPE
   9.188 +IS
   9.189 +   lu_rec_ &TABLE%ROWTYPE;
   9.190 +   CURSOR getrec IS
   9.191 +      SELECT *
   9.192 +      FROM   &TABLE
   9.193 +      WHERE  &OBJID = objid_;
   9.194 +BEGIN
   9.195 +   OPEN getrec;
   9.196 +   FETCH getrec INTO lu_rec_;
   9.197 +   IF (getrec%NOTFOUND) THEN
   9.198 +      CLOSE getrec;
   9.199 +      Error_SYS.Record_Removed(lu_name_);
   9.200 +   END IF;
   9.201 +   CLOSE getrec;
   9.202 +   RETURN(lu_rec_);
   9.203 +END Get_Object_By_Id___;
   9.204 +
   9.205 +FUNCTION Get_Object_By_Keys___ (
   9.206 +   site_id_ IN VARCHAR2 ) RETURN &TABLE%ROWTYPE
   9.207 +IS
   9.208 +   lu_rec_ &TABLE%ROWTYPE;
   9.209 +   CURSOR getrec IS
   9.210 +      SELECT *
   9.211 +      FROM  &TABLE
   9.212 +      WHERE site_id = site_id_;
   9.213 +BEGIN
   9.214 +   OPEN getrec;
   9.215 +   FETCH getrec INTO lu_rec_;
   9.216 +   CLOSE getrec;
   9.217 +   RETURN(lu_rec_);
   9.218 +END Get_Object_By_Keys___;
   9.219 +
   9.220 +FUNCTION Check_Exist___ (
   9.221 +   site_id_ IN VARCHAR2 ) RETURN BOOLEAN
   9.222 +IS
   9.223 +   dummy_ NUMBER;
   9.224 +   CURSOR exist_control IS
   9.225 +      SELECT 1
   9.226 +      FROM   &TABLE
   9.227 +      WHERE site_id = site_id_;
   9.228 +BEGIN
   9.229 +   OPEN exist_control;
   9.230 +   FETCH exist_control INTO dummy_;
   9.231 +   IF (exist_control%FOUND) THEN
   9.232 +      CLOSE exist_control;
   9.233 +      RETURN(TRUE);
   9.234 +   END IF;
   9.235 +   CLOSE exist_control;
   9.236 +   RETURN(FALSE);
   9.237 +END Check_Exist___;
   9.238 +
   9.239 +PROCEDURE Get_Id_Version_By_Keys___ (
   9.240 +   objid_      IN OUT VARCHAR2,
   9.241 +   objversion_ IN OUT VARCHAR2,
   9.242 +   site_id_ IN VARCHAR2)
   9.243 +IS
   9.244 +   CURSOR get_version IS
   9.245 +   SELECT &OBJID, &OBJVERSION
   9.246 +      FROM  &TABLE
   9.247 +      WHERE site_id = site_id_;
   9.248 +BEGIN
   9.249 +   OPEN get_version;
   9.250 +   FETCH get_version INTO objid_, objversion_;
   9.251 +   CLOSE get_version;
   9.252 +END Get_Id_Version_By_Keys___;
   9.253 +
   9.254 +-----------------------------------------------------------------------------
   9.255 +-------------------- IMPLEMENTATION BASE METHODS FOR INSERT -----------------
   9.256 +-----------------------------------------------------------------------------
   9.257 +-- Prepare_Insert___
   9.258 +--    Set all default values for a new instance (ON-NEW-RECORD) of this
   9.259 +--    logical unit by calling procedure Add_Attr.
   9.260 +--
   9.261 +-- Unpack_Check_Insert___
   9.262 +--    Unpack the attribute list, check all attributes from the client
   9.263 +--    and generate all default values before creation of the new object.
   9.264 +--
   9.265 +-- Insert___
   9.266 +--    Insert a new LU-instance into the database and return the values
   9.267 +--    for OBJID and OBJVERSION.
   9.268 +-----------------------------------------------------------------------------
   9.269 +
   9.270 +PROCEDURE Prepare_Insert___ (
   9.271 +   attr_ IN OUT VARCHAR2 )
   9.272 +IS
   9.273 +BEGIN
   9.274 +   Client_SYS.Clear_Attr(attr_);
   9.275 +   Client_SYS.Add_To_Attr('TIMEZONE_DIFFERENCE', 0, attr_);
   9.276 +   Client_SYS.Add_To_Attr('THIS_SITE', 'FALSE', attr_);
   9.277 +END Prepare_Insert___;
   9.278 +
   9.279 +
   9.280 +PROCEDURE Unpack_Check_Insert___ (
   9.281 +   attr_   IN OUT VARCHAR2,
   9.282 +   newrec_ IN OUT &TABLE%ROWTYPE )
   9.283 +IS
   9.284 +   ptr_             NUMBER;
   9.285 +   name_            VARCHAR2(30);
   9.286 +   value_           VARCHAR2(2000);
   9.287 +   this_site_exist_ EXCEPTION;
   9.288 +BEGIN
   9.289 +   newrec_.timezone_difference := 0;
   9.290 +   newrec_.this_site := 'FALSE';
   9.291 +   value_ := Client_SYS.Get_Item_Value('THIS_SITE', attr_);
   9.292 +   IF ( (UPPER(NVL(value_, 'FALSE')) = 'TRUE') AND This_Site_Exist__ ) THEN
   9.293 +      RAISE this_site_exist_;
   9.294 +   END IF;
   9.295 +   ptr_ := NULL;
   9.296 +   WHILE (Client_SYS.Get_Next_From_Attr(attr_, ptr_, name_, value_)) LOOP
   9.297 +      IF (name_ = 'SITE_ID') THEN
   9.298 +         newrec_.site_id := value_;
   9.299 +      ELSIF (name_ = 'TIMEZONE_DIFFERENCE') THEN
   9.300 +         newrec_.timezone_difference := Client_SYS.Attr_Value_To_Number(value_);
   9.301 +      ELSIF (name_ = 'DESCRIPTION') THEN
   9.302 +         newrec_.description := value_;
   9.303 +      ELSIF (name_ = 'THIS_SITE') THEN
   9.304 +         newrec_.this_site := value_;
   9.305 +      ELSIF (name_ = 'DATABASE_LINK') THEN
   9.306 +         newrec_.database_link := value_;
   9.307 +      ELSE
   9.308 +         Error_SYS.Item_Not_Exist(lu_name_, name_, value_);
   9.309 +      END IF;
   9.310 +   END LOOP;
   9.311 +   Client_SYS.Clear_Attr(attr_);
   9.312 +   Error_SYS.Check_Not_Null(lu_name_, 'SITE_ID', newrec_.site_id);
   9.313 +   Error_SYS.Check_Not_Null(lu_name_, 'TIMEZONE_DIFFERENCE', newrec_.timezone_difference);
   9.314 +   Error_SYS.Check_Not_Null(lu_name_, 'THIS_SITE', newrec_.this_site);
   9.315 +EXCEPTION
   9.316 +   WHEN value_error THEN
   9.317 +      Error_SYS.Item_Format(lu_name_, name_, value_);
   9.318 +   WHEN this_site_exist_ THEN
   9.319 +      Error_SYS.Appl_General(lu_name_, 'EXIST_INSERT: Only one replication site can be THIS_SITE.');
   9.320 +END Unpack_Check_Insert___;
   9.321 +
   9.322 +
   9.323 +PROCEDURE Insert___ (
   9.324 +   objid_      OUT    VARCHAR2,
   9.325 +   objversion_ OUT    VARCHAR2,
   9.326 +   newrec_     IN OUT &TABLE%ROWTYPE,
   9.327 +   attr_       IN OUT VARCHAR2 )
   9.328 +IS
   9.329 +BEGIN
   9.330 +   IF ( newrec_.timezone_difference IS NULL ) THEN
   9.331 +      newrec_.timezone_difference := 0;
   9.332 +   END IF;
   9.333 +   IF ( NVL(newrec_.this_site,'FALSE') NOT IN ('TRUE','FALSE') ) THEN
   9.334 +      newrec_.this_site := 'FALSE';
   9.335 +   END IF;
   9.336 +   newrec_.rowversion := sysdate;
   9.337 +   objversion_ := to_char(newrec_.rowversion,'YYYYMMDDHH24MISS');
   9.338 +   INSERT
   9.339 +      INTO installation_site_tab (
   9.340 +         site_id,
   9.341 +         timezone_difference,
   9.342 +         description,
   9.343 +         this_site,
   9.344 +         database_link,
   9.345 +         rowversion)
   9.346 +      VALUES (
   9.347 +         newrec_.site_id,
   9.348 +         newrec_.timezone_difference,
   9.349 +         newrec_.description,
   9.350 +         newrec_.this_site,
   9.351 +         newrec_.database_link,
   9.352 +         newrec_.rowversion);
   9.353 +   SELECT &OBJID
   9.354 +      INTO  objid_
   9.355 +      FROM  &TABLE
   9.356 +      WHERE site_id = newrec_.site_id;
   9.357 +   -- Insert into the translation database
   9.358 +   Module_Translate_Attr_Util_API.Insert_Lu_Translation('&MODULE',
   9.359 +                                                        '&LU', 
   9.360 +                                                        newrec_.site_id,
   9.361 +                                                        NULL,
   9.362 +                                                        newrec_.description);
   9.363 +EXCEPTION
   9.364 +   WHEN dup_val_on_index THEN
   9.365 +      Error_SYS.Record_Exist(lu_name_);
   9.366 +END Insert___;
   9.367 +
   9.368 +-----------------------------------------------------------------------------
   9.369 +-------------------- IMPLEMENTATION BASE METHODS FOR UPDATE -----------------
   9.370 +-----------------------------------------------------------------------------
   9.371 +-- Unpack_Check_Update___
   9.372 +--    Unpack the attribute list, check all attributes from the client
   9.373 +--    and generate all default values before modifying the object.
   9.374 +--
   9.375 +-- Update___
   9.376 +--    Update an existing LU-instance in the database and return the
   9.377 +--    the new OBJVERSION.
   9.378 +-----------------------------------------------------------------------------
   9.379 +
   9.380 +PROCEDURE Unpack_Check_Update___ (
   9.381 +   attr_   IN OUT VARCHAR2,
   9.382 +   newrec_ IN OUT &TABLE%ROWTYPE,
   9.383 +   objid_  IN     VARCHAR2 )
   9.384 +IS
   9.385 +   ptr_              NUMBER;
   9.386 +   name_             VARCHAR2(30);
   9.387 +   value_            VARCHAR2(2000);
   9.388 +   this_site_exist_  EXCEPTION;
   9.389 +BEGIN
   9.390 +   value_ := Client_SYS.Get_Item_Value('THIS_SITE', attr_);
   9.391 +   IF ( (UPPER(NVL(value_, 'FALSE')) = 'TRUE') AND (newrec_.this_site = 'FALSE') AND This_Site_Exist__ ) THEN
   9.392 +      RAISE this_site_exist_;
   9.393 +   END IF;
   9.394 +   ptr_ := NULL;
   9.395 +   WHILE (Client_SYS.Get_Next_From_Attr(attr_, ptr_, name_, value_)) LOOP
   9.396 +      IF (name_ = 'SITE_ID') THEN
   9.397 +         Error_SYS.Item_Update(lu_name_, 'SITE_ID');
   9.398 +      ELSIF (name_ = 'TIMEZONE_DIFFERENCE') THEN
   9.399 +         newrec_.timezone_difference := Client_SYS.Attr_Value_To_Number(value_);
   9.400 +      ELSIF (name_ = 'DESCRIPTION') THEN
   9.401 +         newrec_.description := value_;
   9.402 +      ELSIF (name_ = 'THIS_SITE') THEN
   9.403 +         newrec_.this_site := value_;
   9.404 +      ELSIF (name_ = 'DATABASE_LINK') THEN
   9.405 +         newrec_.database_link := value_;
   9.406 +      ELSE
   9.407 +         Error_SYS.Item_Not_Exist(lu_name_, name_, value_);
   9.408 +      END IF;
   9.409 +   END LOOP;
   9.410 +   Client_SYS.Clear_Attr(attr_);
   9.411 +   Error_SYS.Check_Not_Null(lu_name_, 'TIMEZONE_DIFFERENCE', newrec_.timezone_difference);
   9.412 +   Error_SYS.Check_Not_Null(lu_name_, 'THIS_SITE', newrec_.this_site);
   9.413 +EXCEPTION
   9.414 +   WHEN value_error THEN
   9.415 +      Error_SYS.Item_Format(lu_name_, name_, value_);
   9.416 +   WHEN this_site_exist_ THEN
   9.417 +      Error_SYS.Appl_General(lu_name_, 'EXIST_UPDATE: Only one replication site can be THIS_SITE.');
   9.418 +END Unpack_Check_Update___;
   9.419 +
   9.420 +
   9.421 +PROCEDURE Update___ (
   9.422 +   objid_      IN     VARCHAR2,
   9.423 +   oldrec_     IN     &TABLE%ROWTYPE,
   9.424 +   newrec_     IN OUT &TABLE%ROWTYPE,
   9.425 +   attr_       IN OUT VARCHAR2,
   9.426 +   objversion_ IN OUT VARCHAR2,
   9.427 +   by_keys_    IN BOOLEAN DEFAULT FALSE )
   9.428 +IS
   9.429 +BEGIN
   9.430 +   IF ( newrec_.timezone_difference IS NULL ) THEN
   9.431 +      newrec_.timezone_difference := 0;
   9.432 +   END IF;
   9.433 +   IF ( NVL(newrec_.this_site,'FALSE') NOT IN ('TRUE','FALSE') ) THEN
   9.434 +      newrec_.this_site := 'FALSE';
   9.435 +   END IF;
   9.436 +   newrec_.rowversion := sysdate;
   9.437 +   objversion_ := to_char(newrec_.rowversion,'YYYYMMDDHH24MISS');
   9.438 +   IF by_keys_ THEN
   9.439 +      UPDATE installation_site_tab
   9.440 +      SET site_id = newrec_.site_id,
   9.441 +          timezone_difference = newrec_.timezone_difference,
   9.442 +          description = newrec_.description,
   9.443 +          this_site = newrec_.this_site,
   9.444 +          database_link = newrec_.database_link,
   9.445 +          rowversion = newrec_.rowversion
   9.446 +      WHERE site_id = newrec_.site_id;
   9.447 +   ELSE
   9.448 +      UPDATE installation_site_tab
   9.449 +      SET site_id = newrec_.site_id,
   9.450 +          timezone_difference = newrec_.timezone_difference,
   9.451 +          description = newrec_.description,
   9.452 +          this_site = newrec_.this_site,
   9.453 +          database_link = newrec_.database_link,
   9.454 +          rowversion = newrec_.rowversion
   9.455 +      WHERE &OBJID = objid_;
   9.456 +   END IF;
   9.457 +   -- Update the translation database if necessary
   9.458 +   Module_Translate_Attr_Util_API.Modify_Translation('&MODULE', 
   9.459 +                                                     lu_name_, 
   9.460 +                                                     newrec_.site_id,
   9.461 +                                                     newrec_.description,
   9.462 +                                                     oldrec_.description);
   9.463 +EXCEPTION
   9.464 +   WHEN dup_val_on_index THEN
   9.465 +      Error_SYS.Record_Exist(lu_name_);
   9.466 +END Update___;
   9.467 +
   9.468 +-----------------------------------------------------------------------------
   9.469 +-------------------- IMPLEMENTATION BASE METHODS FOR DELETE -----------------
   9.470 +-----------------------------------------------------------------------------
   9.471 +-- Check_Delete___
   9.472 +--    Checks whether a specific LU-record may be removed or not.
   9.473 +--    The procedure should check business rules like attribute values
   9.474 +--    as well as database constraints (defined or not).
   9.475 +--
   9.476 +-- Delete___
   9.477 +--    Deletion of the specific LU-object from the database.
   9.478 +-----------------------------------------------------------------------------
   9.479 +
   9.480 +PROCEDURE Check_Delete___ (
   9.481 +   remrec_ IN &TABLE%ROWTYPE )
   9.482 +IS
   9.483 +   key_ VARCHAR2(2000);
   9.484 +BEGIN
   9.485 +   key_ := remrec_.site_id || '^';
   9.486 +   Reference_SYS.Check_Restricted_Delete(lu_name_, key_);
   9.487 +END Check_Delete___;
   9.488 +
   9.489 +
   9.490 +PROCEDURE Delete___ (
   9.491 +   objid_  IN VARCHAR2,
   9.492 +   remrec_ IN &TABLE%ROWTYPE )
   9.493 +IS
   9.494 +   key_ VARCHAR2(2000);
   9.495 +BEGIN
   9.496 +   key_ := remrec_.site_id || '^';
   9.497 +   Reference_SYS.Do_Cascade_Delete(lu_name_, key_);
   9.498 +   DELETE
   9.499 +      FROM  installation_site_tab
   9.500 +      WHERE &OBJID = objid_;
   9.501 +   -- Delete all existing translations for this record.
   9.502 +   Module_Translate_Attr_Util_API.Remove_Attribute('&MODULE', lu_name_, remrec_.site_id);
   9.503 +END Delete___;
   9.504 +
   9.505 +-----------------------------------------------------------------------------
   9.506 +-------------------- PRIVATE BASE METHODS -----------------------------------
   9.507 +-----------------------------------------------------------------------------
   9.508 +-- Lock__
   9.509 +--    Client-support to lock a specific instance of the logical unit.
   9.510 +--
   9.511 +-- New__
   9.512 +--    Client-support interface to create LU instances.
   9.513 +--       action_ = 'PREPARE'
   9.514 +--          Default values and handle of information to client.
   9.515 +--          The default values are set in procedure Prepare_Insert___.
   9.516 +--       action_ = 'CHECK'
   9.517 +--          Check all attributes before creating new object and handle of
   9.518 +--          information to client. The attribute list is unpacked, checked
   9.519 +--          and prepared (defaults) in procedure Unpack_Check_Insert___.
   9.520 +--       action_ = 'DO'
   9.521 +--          Creation of new instances of the logical unit and handle of
   9.522 +--          information to client. The attribute list is unpacked, checked
   9.523 +--          and prepared (defaults) in procedure Unpack_Check_Insert___
   9.524 +--          before calling procedure Insert___.
   9.525 +--
   9.526 +-- Modify__
   9.527 +--    Client-support interface to modify attributes for LU instances.
   9.528 +--       action_ = 'CHECK'
   9.529 +--          Check all attributes before modifying an existing object and
   9.530 +--          handle of information to client. The attribute list is unpacked,
   9.531 +--          checked and prepared(defaults) in procedure Unpack_Check_Update___.
   9.532 +--       action_ = 'DO'
   9.533 +--          Modification of an existing instance of the logical unit. The
   9.534 +--          procedure unpacks the attributes, checks all values before
   9.535 +--          procedure Update___ is called.
   9.536 +--
   9.537 +-- Remove__
   9.538 +--    Client-support interface to remove LU instances.
   9.539 +--       action_ = 'CHECK'
   9.540 +--          Check whether a specific LU-instance may be removed or not.
   9.541 +--          The procedure fetches the complete record by calling procedure
   9.542 +--          Get_Object_By_Id___. Then the check is made by calling procedure
   9.543 +--          Check_Delete___.
   9.544 +--       action_ = 'DO'
   9.545 +--          Remove an existing instance of the logical unit. The procedure
   9.546 +--          fetches the complete LU-record, checks for a delete and then
   9.547 +--          deletes the record by calling procedure Delete___.
   9.548 +-----------------------------------------------------------------------------
   9.549 +
   9.550 +PROCEDURE Lock__ (
   9.551 +   info_       OUT VARCHAR2,
   9.552 +   objid_      IN  VARCHAR2,
   9.553 +   objversion_ IN  VARCHAR2 )
   9.554 +IS
   9.555 +   dummy_ &TABLE%ROWTYPE;
   9.556 +BEGIN
   9.557 +   General_SYS.Init_Method(lu_name_, '&PKG', 'Lock__');
   9.558 +   dummy_ := Lock_By_Id___(objid_, objversion_);
   9.559 +   info_ := Client_SYS.Get_All_Info;
   9.560 +END Lock__;
   9.561 +
   9.562 +
   9.563 +PROCEDURE New__ (
   9.564 +   info_       OUT    VARCHAR2,
   9.565 +   objid_      OUT    VARCHAR2,
   9.566 +   objversion_ OUT    VARCHAR2,
   9.567 +   attr_       IN OUT VARCHAR2,
   9.568 +   action_     IN     VARCHAR2 )
   9.569 +IS
   9.570 +   newrec_ &TABLE%ROWTYPE;
   9.571 +BEGIN
   9.572 +   General_SYS.Init_Method(lu_name_, '&PKG', 'New__');
   9.573 +   IF (action_ = 'PREPARE') THEN
   9.574 +      Prepare_Insert___(attr_);
   9.575 +   ELSIF (action_ = 'CHECK') THEN
   9.576 +      Unpack_Check_Insert___(attr_, newrec_);
   9.577 +   ELSIF (action_ = 'DO') THEN
   9.578 +      Unpack_Check_Insert___(attr_, newrec_);
   9.579 +      Insert___(objid_, objversion_, newrec_, attr_);
   9.580 +   END IF;
   9.581 +   info_ := Client_SYS.Get_All_Info;
   9.582 +END New__;
   9.583 +
   9.584 +
   9.585 +PROCEDURE Modify__ (
   9.586 +   info_       OUT    VARCHAR2,
   9.587 +   objid_      IN     VARCHAR2,
   9.588 +   objversion_ IN OUT VARCHAR2,
   9.589 +   attr_       IN OUT VARCHAR2,
   9.590 +   action_     IN     VARCHAR2 )
   9.591 +IS
   9.592 +   oldrec_ &TABLE%ROWTYPE;
   9.593 +   newrec_ &TABLE%ROWTYPE;
   9.594 +BEGIN
   9.595 +   General_SYS.Init_Method(lu_name_, '&PKG', 'Modify__');
   9.596 +   IF (action_ = 'CHECK') THEN
   9.597 +      newrec_ := Get_Object_By_Id___(objid_);
   9.598 +      Unpack_Check_Update___(attr_, newrec_, objid_);
   9.599 +   ELSIF (action_ = 'DO') THEN
   9.600 +      oldrec_ := Lock_By_Id___(objid_, objversion_);
   9.601 +      newrec_ := oldrec_;
   9.602 +      Unpack_Check_Update___(attr_, newrec_, objid_);
   9.603 +      Update___(objid_, oldrec_, newrec_, attr_, objversion_);
   9.604 +   END IF;
   9.605 +   info_ := Client_SYS.Get_All_Info;
   9.606 +END Modify__;
   9.607 +
   9.608 +
   9.609 +PROCEDURE Remove__ (
   9.610 +   info_       OUT VARCHAR2,
   9.611 +   objid_      IN  VARCHAR2,
   9.612 +   objversion_ IN  VARCHAR2,
   9.613 +   action_     IN  VARCHAR2 )
   9.614 +IS
   9.615 +   remrec_ &TABLE%ROWTYPE;
   9.616 +BEGIN
   9.617 +   General_SYS.Init_Method(lu_name_, '&PKG', 'Remove__');
   9.618 +   IF (action_ = 'CHECK') THEN
   9.619 +      remrec_ := Get_Object_By_Id___(objid_);
   9.620 +      Check_Delete___(remrec_);
   9.621 +   ELSIF (action_ = 'DO') THEN
   9.622 +      remrec_ := Lock_By_Id___(objid_, objversion_);
   9.623 +      Check_Delete___(remrec_);
   9.624 +      Delete___(objid_, remrec_);
   9.625 +   END IF;
   9.626 +   info_ := Client_SYS.Get_All_Info;
   9.627 +END Remove__;
   9.628 +
   9.629 +-----------------------------------------------------------------------------
   9.630 +-------------------- PUBLIC BASE METHODS ------------------------------------
   9.631 +-----------------------------------------------------------------------------
   9.632 +-- Exist
   9.633 +--   Checks if given pointer (e.g. primary key) to an instance of this
   9.634 +--   logical unit exists. If not an exception will be raised.
   9.635 +-----------------------------------------------------------------------------
   9.636 +
   9.637 +PROCEDURE Exist (
   9.638 +   site_id_ IN VARCHAR2 )
   9.639 +IS
   9.640 +BEGIN
   9.641 +   General_SYS.Init_Method(lu_name_, '&PKG', 'Exist', TRUE);
   9.642 +   IF (NOT Check_Exist___(site_id_)) THEN
   9.643 +      Error_SYS.Record_Not_Exist(lu_name_);
   9.644 +   END IF;
   9.645 +END Exist;
   9.646 +
   9.647 +-----------------------------------------------------------------------------
   9.648 +-------------------- LU SPECIFIC IMPLEMENTATION METHODS ---------------------
   9.649 +-----------------------------------------------------------------------------
   9.650 +
   9.651 +
   9.652 +-----------------------------------------------------------------------------
   9.653 +-------------------- LU SPECIFIC PRIVATE METHODS ----------------------------
   9.654 +-----------------------------------------------------------------------------
   9.655 +
   9.656 +FUNCTION This_Site_Exist__ RETURN BOOLEAN
   9.657 +IS
   9.658 +   dummy_    NUMBER;
   9.659 +   CURSOR this_site_exist IS
   9.660 +      SELECT 1
   9.661 +      FROM   &TABLE
   9.662 +      WHERE  this_site = 'TRUE';
   9.663 +BEGIN
   9.664 +   OPEN this_site_exist;
   9.665 +   FETCH this_site_exist INTO dummy_;
   9.666 +   IF ( this_site_exist%FOUND ) THEN
   9.667 +      CLOSE this_site_exist;
   9.668 +      RETURN TRUE;
   9.669 +   ELSE
   9.670 +      CLOSE this_site_exist;
   9.671 +      RETURN FALSE;
   9.672 +   END IF;
   9.673 +END This_Site_Exist__;
   9.674 +
   9.675 +-----------------------------------------------------------------------------
   9.676 +-------------------- LU SPECIFIC PROTECTED METHODS --------------------------
   9.677 +-----------------------------------------------------------------------------
   9.678 +
   9.679 +FUNCTION Get_Timezone_Difference_ (
   9.680 +   site_id_ IN VARCHAR2 DEFAULT NULL ) RETURN NUMBER
   9.681 +IS
   9.682 +   timezone_difference_error_ EXCEPTION;
   9.683 +   timezone_difference_       &TABLE..timezone_difference%TYPE;
   9.684 +   CURSOR local IS
   9.685 +      SELECT timezone_difference
   9.686 +      FROM   &TABLE
   9.687 +      WHERE  this_site = 'TRUE';
   9.688 +   CURSOR remote IS
   9.689 +      SELECT timezone_difference
   9.690 +      FROM   &TABLE
   9.691 +      WHERE  site_id = site_id_;
   9.692 +BEGIN
   9.693 +   General_SYS.Init_Method(lu_name_, '&PKG', 'Get_Timezone_Difference_');
   9.694 +   IF ( site_id_ IS NULL ) THEN
   9.695 +      OPEN local;
   9.696 +      FETCH local INTO timezone_difference_;
   9.697 +      IF ( local%NOTFOUND ) THEN
   9.698 +         timezone_difference_ := 0;
   9.699 +      END IF;
   9.700 +      CLOSE local;
   9.701 +   ELSE
   9.702 +      OPEN remote;
   9.703 +      FETCH remote INTO timezone_difference_;
   9.704 +      IF ( remote%NOTFOUND ) THEN
   9.705 +         timezone_difference_ := 0;
   9.706 +      END IF;
   9.707 +      CLOSE remote;
   9.708 +   END IF;
   9.709 +   IF ( ABS(timezone_difference_) > 24 ) THEN
   9.710 +      RAISE timezone_difference_error_;
   9.711 +   END IF;
   9.712 +   RETURN timezone_difference_;
   9.713 +EXCEPTION
   9.714 +   WHEN timezone_difference_error_ THEN
   9.715 +      Error_SYS.Appl_General(lu_name_, 'INVALIDTIMEZONEDIFF: Invalid timezone difference :P1.', timezone_difference_);
   9.716 +END Get_Timezone_Difference_;
   9.717 +
   9.718 +-----------------------------------------------------------------------------
   9.719 +-------------------- LU SPECIFIC PUBLIC METHODS -----------------------------
   9.720 +-----------------------------------------------------------------------------
   9.721 +
   9.722 +
   9.723 +-----------------------------------------------------------------------------
   9.724 +-------------------- FOUNDATION1 METHODS ------------------------------------
   9.725 +-----------------------------------------------------------------------------
   9.726 +-- Init
   9.727 +--   Dummy procedure that can be called at database startup to ensure that
   9.728 +--   this package is loaded into memory for performance reasons only.
   9.729 +-----------------------------------------------------------------------------
   9.730 +
   9.731 +PROCEDURE Init
   9.732 +IS
   9.733 +BEGIN
   9.734 +   NULL;
   9.735 +END Init;
   9.736 +
   9.737 +
   9.738 +END &PKG;
   9.739 +/
   9.740 +SHOW ERROR
   9.741 +
   9.742 +-----------------------------------------------------------------------------
    10.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    10.2 +++ b/PLSQL/Lexer/test/unit/data/OpPersDiaryCalculation.apy	Wed May 15 23:04:20 2013 +0200
    10.3 @@ -0,0 +1,928 @@
    10.4 +-----------------------------------------------------------------------------
    10.5 +--
    10.6 +--  Logical unit: OpPersDiaryCalculation
    10.7 +--
    10.8 +--  Purpose:
    10.9 +--
   10.10 +--  IFS/Design Template Version 2.3
   10.11 +--
   10.12 +--  Date    Sign  History
   10.13 +--  ------  ----  -----------------------------------------------------------
   10.14 +--  070419  Laadlk Bug 64820, Added new IF condition in Calculate order hours
   10.15 +--  070109  AmGa  Check error_no is null before update.
   10.16 +--  060106  GaKa  Added labor class changes
   10.17 +--  040915  KjCr  Modifications due to new Balance
   10.18 +--  040813  KjCr  HRPR408 PL/SQL Torexec
   10.19 +-----------------------------------------------------------------------------
   10.20 +
   10.21 +DEFINE MODULE        = SHPEMP
   10.22 +DEFINE LU            = OpPersDiaryCalculation
   10.23 +DEFINE PKG           = OP_PERS_DIARY_CALCULATION_API
   10.24 +
   10.25 +
   10.26 +-----------------------------------------------------------------------------
   10.27 +-------------------- PACKAGES FOR METHODS -----------------------------------
   10.28 +-----------------------------------------------------------------------------
   10.29 +
   10.30 +PROMPT Creating &PKG implementation
   10.31 +
   10.32 +CREATE OR REPLACE PACKAGE BODY &PKG IS
   10.33 +
   10.34 +   RowLocked EXCEPTION;
   10.35 +   Skip      EXCEPTION;
   10.36 +   DataError EXCEPTION;
   10.37 +   PRAGMA    exception_init(RowLocked, -0054);
   10.38 +
   10.39 +-------------------------------------------------------------------------
   10.40 +--   Private types
   10.41 +-------------------------------------------------------------------------
   10.42 +
   10.43 +   TYPE Op_Data_Rec IS RECORD (
   10.44 +      org_code       VARCHAR2(20),
   10.45 +      min_op_diff    NUMBER,
   10.46 +      max_op_diff    NUMBER,
   10.47 +      presence_hours NUMBER );
   10.48 +
   10.49 +-------------------------------------------------------------------------
   10.50 +--   Global variables
   10.51 +-------------------------------------------------------------------------
   10.52 +
   10.53 +   comp_time_format_ Comp_Time_Format_API.Value_Rec;
   10.54 +   wage_group_       Wage_Group_API.Value_Rec;
   10.55 +   time_param_label_ Time_Param_Label_API.Value_Rec;
   10.56 +   reg_status_       Time_Reg_Status_API.Value_Rec;
   10.57 +   test_active_      Time_Reg_Error_API.Active_Array_Type;
   10.58 +
   10.59 +-----------------------------------------------------------------------------
   10.60 +-------------------- LU SPECIFIC IMPLEMENTATION METHOD DECLARATIONS ---------
   10.61 +-----------------------------------------------------------------------------
   10.62 +
   10.63 +PROCEDURE Calculate_Op_Hours___ (
   10.64 +   op_data_    IN     Op_Data_Rec,
   10.65 +   pers_diary_ IN     Time_Pers_Diary_Calc_API.Diary_Record_Type,
   10.66 +   op_diary_   IN OUT NOCOPY Op_Diary_Record_Type );
   10.67 +
   10.68 +
   10.69 +PROCEDURE Convert_Group_Operations___ (
   10.70 +   op_diary_ IN OUT NOCOPY Op_Diary_Record_Type );
   10.71 +
   10.72 +
   10.73 +PROCEDURE Do_Wage_Rounding___ (
   10.74 +   pers_diary_ IN     Time_Pers_Diary_Calc_API.Diary_Record_Type,
   10.75 +   op_diary_   IN OUT NOCOPY Op_Diary_Record_Type );
   10.76 +
   10.77 +
   10.78 +PROCEDURE Get_Diary___ (
   10.79 +   op_diary_ IN OUT NOCOPY Op_Diary_Record_Type );
   10.80 +
   10.81 +
   10.82 +PROCEDURE Get_Op_Data___ (
   10.83 +   op_data_    OUT    NOCOPY Op_Data_Rec,
   10.84 +   pers_diary_ IN     Time_Pers_Diary_Calc_API.Diary_Record_Type,
   10.85 +   op_diary_   IN OUT NOCOPY Op_Diary_Record_Type );
   10.86 +
   10.87 +
   10.88 +PROCEDURE Remove_Result___ (
   10.89 +   op_diary_ IN Op_Diary_Record_Type );
   10.90 +
   10.91 +
   10.92 +PROCEDURE Save_Result___ (
   10.93 +   op_diary_ IN Op_Diary_Record_Type );
   10.94 +
   10.95 +
   10.96 +PROCEDURE Set_Op_Error___ (
   10.97 +   op_diary_ IN Op_Diary_Record_Type );
   10.98 +   
   10.99 +PROCEDURE Set_Op_Error_Labor___ (
  10.100 +   op_diary_ IN Op_Diary_Record_Type );
  10.101 +
  10.102 +
  10.103 +PROCEDURE Update_Diary___ (
  10.104 +   op_data_  IN     Op_Data_Rec,
  10.105 +   op_diary_ IN OUT NOCOPY Op_Diary_Record_Type );
  10.106 +
  10.107 +
  10.108 +
  10.109 +-----------------------------------------------------------------------------
  10.110 +-------------------- LU SPECIFIC IMPLEMENTATION METHODS ---------------------
  10.111 +-----------------------------------------------------------------------------
  10.112 +
  10.113 +PROCEDURE Calculate_Op_Hours___ (
  10.114 +   op_data_    IN     Op_Data_Rec,
  10.115 +   pers_diary_ IN     Time_Pers_Diary_Calc_API.Diary_Record_Type,
  10.116 +   op_diary_   IN OUT NOCOPY Op_Diary_Record_Type )
  10.117 +IS
  10.118 +   wage_grp_        VARCHAR2(20);
  10.119 +   wage_code_       VARCHAR2(20);
  10.120 +   wage_hours_      NUMBER;
  10.121 +   pers_wage_grp_   VARCHAR2(20);
  10.122 +   pers_wage_hours_ NUMBER;
  10.123 +   abs_hours_       NUMBER;
  10.124 +   op_id_           INTEGER;
  10.125 +   mch_code_        VARCHAR2(20);
  10.126 +   info_code_       VARCHAR2(20);
  10.127 +   org_code_        VARCHAR2(20);
  10.128 +   min_in_time_     NUMBER;
  10.129 +   max_out_time_    NUMBER;
  10.130 +   cur_in_time_     NUMBER;
  10.131 +   cur_out_time_    NUMBER;
  10.132 +   in_time_         NUMBER;
  10.133 +   out_time_        NUMBER;
  10.134 +   cur_count_       NUMBER;
  10.135 +   cur_factor_      NUMBER;
  10.136 +   w_               INTEGER;
  10.137 +BEGIN
  10.138 +   /*-----------------------------------------------------------------------*/
  10.139 +   /* a) If status = done set status = ready                                */
  10.140 +   /*-----------------------------------------------------------------------*/
  10.141 +   min_in_time_  :=  100.0;
  10.142 +   max_out_time_ := -100.0;
  10.143 +   IF op_diary_.reg_status = reg_status_.done THEN
  10.144 +      IF (time_pers_diary_api.Reporting_Complete(op_diary_.company_id,  op_diary_.emp_no, 
  10.145 +            op_diary_.account_date, op_diary_.reg_status) = 'TRUE') THEN 
  10.146 +         op_diary_.reg_status := reg_status_.ready;
  10.147 +      END IF;
  10.148 +   END IF;
  10.149 +   FOR i_ IN 1 .. op_diary_.clocking.row_count LOOP
  10.150 +      min_in_time_  := LEAST(min_in_time_, op_diary_.clocking.start_stamp(i_));
  10.151 +      max_out_time_ := GREATEST(max_out_time_, op_diary_.clocking.stop_stamp(i_));
  10.152 +      IF op_diary_.clocking.org_code(i_) IS NULL THEN
  10.153 +         op_diary_.clocking.org_code(i_) := op_data_.org_code;
  10.154 +      END IF;
  10.155 +   END LOOP;
  10.156 +   /*-----------------------------------------------------------------------*/
  10.157 +   /* b) Calculate order hours                                              */
  10.158 +   /*-----------------------------------------------------------------------*/
  10.159 +   op_diary_.result.row_count := 0;
  10.160 +   WHILE min_in_time_ < max_out_time_ LOOP
  10.161 +      cur_in_time_ := max_out_time_;
  10.162 +      FOR i_ IN 1 .. op_diary_.clocking.row_count LOOP
  10.163 +         IF min_in_time_ < op_diary_.clocking.stop_stamp(i_) THEN
  10.164 +            cur_in_time_ := LEAST(cur_in_time_, op_diary_.clocking.start_stamp(i_));
  10.165 +         END IF;
  10.166 +      END LOOP;
  10.167 +      cur_count_    := 0;
  10.168 +      cur_out_time_ := max_out_time_;
  10.169 +      FOR i_ IN 1 .. op_diary_.clocking.row_count LOOP
  10.170 +         IF min_in_time_ < op_diary_.clocking.stop_stamp(i_) THEN
  10.171 +            IF cur_in_time_ = op_diary_.clocking.start_stamp(i_) THEN
  10.172 +               cur_count_ := cur_count_+1;
  10.173 +               cur_out_time_ := LEAST(cur_out_time_, op_diary_.clocking.stop_stamp(i_));
  10.174 +            ELSE
  10.175 +               cur_out_time_ := LEAST(cur_out_time_, op_diary_.clocking.start_stamp(i_));
  10.176 +            END IF;
  10.177 +         END IF;
  10.178 +      END LOOP;
  10.179 +      cur_factor_ := 1 / cur_count_;
  10.180 +      FOR i_ IN 1 .. op_diary_.clocking.row_count LOOP
  10.181 +         IF cur_in_time_ = op_diary_.clocking.start_stamp(i_) AND
  10.182 +            cur_in_time_ < op_diary_.clocking.stop_stamp(i_) THEN
  10.183 +            op_id_     := op_diary_.clocking.op_id(i_);
  10.184 +            info_code_ := op_diary_.clocking.info_code(i_);
  10.185 +            mch_code_  := op_diary_.clocking.mch_code(i_);
  10.186 +            org_code_  := op_diary_.clocking.org_code(i_);
  10.187 +            FOR j_ IN 1 .. pers_diary_.result.row_count LOOP
  10.188 +               wage_hours_ := 0.0;
  10.189 +               wage_grp_   := pers_diary_.result.wage_grp(j_);
  10.190 +               wage_code_  := pers_diary_.result.wage_code(j_);
  10.191 +               pers_wage_hours_ := pers_diary_.result.wage_hours(j_);
  10.192 +               in_time_  := GREATEST(pers_diary_.result.wage_ftime(j_), cur_in_time_);
  10.193 +               out_time_ := LEAST(pers_diary_.result.wage_ttime(j_), cur_out_time_);
  10.194 +               IF wage_grp_ IN (wage_group_.normal, wage_group_.overtime, wage_group_.extra, wage_group_.increment, wage_group_.balance_accrual, wage_group_.info) THEN
  10.195 +                  IF NOT pers_diary_.result.wage_hol(j_) THEN
  10.196 +                     IF in_time_ < out_time_ THEN
  10.197 +                        wage_hours_ := LEAST((out_time_-in_time_) * pers_diary_.result.wage_factor(j_), pers_wage_hours_);
  10.198 +                     END IF;
  10.199 +                  END IF;
  10.200 +               ELSIF wage_grp_ = wage_group_.balance_withdrawal THEN
  10.201 +                  -- Bug 64820, Begin
  10.202 +                  IF in_time_ < out_time_ THEN
  10.203 +                     FOR k_ IN 1 .. pers_diary_.result.row_count LOOP
  10.204 +                        pers_wage_grp_ := pers_diary_.result.wage_grp(k_);
  10.205 +                        IF pers_wage_grp_ = wage_group_.normal AND
  10.206 +                           in_time_  < pers_diary_.result.wage_ttime(k_) AND
  10.207 +                           out_time_ > pers_diary_.result.wage_ftime(k_) AND
  10.208 +                           pers_diary_.result.wage_hours(k_) > 0.005 THEN
  10.209 +                           wage_grp_   := pers_wage_grp_;
  10.210 +                           wage_code_  := pers_diary_.result.wage_code(k_);
  10.211 +                           abs_hours_  := LEAST(pers_diary_.result.wage_hours(k_), pers_wage_hours_);
  10.212 +                           abs_hours_  := LEAST((out_time_-in_time_) * pers_diary_.result.wage_factor(j_), abs_hours_);
  10.213 +                           wage_hours_ := wage_hours_ - abs_hours_;
  10.214 +                        END IF;
  10.215 +                     END LOOP;
  10.216 +                  END IF;
  10.217 +                  -- Bug 64820, End
  10.218 +               END IF;
  10.219 +               IF wage_hours_ > 0.005 OR wage_hours_ < -0.005 THEN
  10.220 +                  w_ := -1;
  10.221 +                  FOR k_ IN 1 .. op_diary_.result.row_count LOOP
  10.222 +                     IF op_id_     = op_diary_.result.op_id(k_) AND
  10.223 +                        info_code_ = op_diary_.result.info_code(k_) AND
  10.224 +                        mch_code_  = op_diary_.result.mch_code(k_) AND
  10.225 +                        org_code_  = op_diary_.result.org_code(k_) AND
  10.226 +                        wage_grp_  = op_diary_.result.wage_group(k_) AND
  10.227 +                        wage_code_ = op_diary_.result.wage_code(k_) THEN
  10.228 +                        w_ := k_;
  10.229 +                        EXIT;
  10.230 +                     END IF;
  10.231 +                  END LOOP;
  10.232 +                  IF w_ < 0 THEN
  10.233 +                     op_diary_.result.row_count := op_diary_.result.row_count+1;
  10.234 +                     w_ := op_diary_.result.row_count;
  10.235 +                     op_diary_.result.op_id(w_)          := op_id_;
  10.236 +                     op_diary_.result.info_code(w_)      := info_code_;
  10.237 +                     op_diary_.result.mch_code(w_)       := mch_code_;
  10.238 +                     op_diary_.result.org_code(w_)       := org_code_;
  10.239 +                     op_diary_.result.contract(w_)       := op_diary_.clocking.contract(i_);
  10.240 +                     op_diary_.result.work_center_no(w_) := op_diary_.clocking.work_center_no(i_);
  10.241 +                     op_diary_.result.labor_class_no(w_) := op_diary_.clocking.labor_class_no(i_);
  10.242 +                     op_diary_.result.wage_group(w_)     := wage_grp_;
  10.243 +                     op_diary_.result.wage_code(w_)      := wage_code_;
  10.244 +                     op_diary_.result.wage_hours(w_)     := 0.0;
  10.245 +                  END IF;
  10.246 +                  op_diary_.result.wage_hours(w_) := op_diary_.result.wage_hours(w_) + cur_factor_ * wage_hours_;
  10.247 +               END IF;
  10.248 +            END LOOP;
  10.249 +            op_diary_.clocking.start_stamp(i_) := cur_out_time_;
  10.250 +         END IF;
  10.251 +      END LOOP;
  10.252 +      min_in_time_ := cur_out_time_;
  10.253 +   END LOOP;
  10.254 +END Calculate_Op_Hours___;
  10.255 +
  10.256 +
  10.257 +PROCEDURE Convert_Group_Operations___ (
  10.258 +   op_diary_ IN OUT NOCOPY Op_Diary_Record_Type )
  10.259 +IS
  10.260 +   op_id_          INTEGER;
  10.261 +   info_code_      VARCHAR2(20);
  10.262 +   grp_count_      INTEGER;
  10.263 +   grp_op_id_      INTEGER_ARRAY;
  10.264 +   grp_plan_hours_ NUMBER_ARRAY;
  10.265 +   sum_hours_      NUMBER;
  10.266 +   cnt_            INTEGER;
  10.267 +   w_              INTEGER;
  10.268 +   CURSOR Get_Operations IS
  10.269 +      SELECT op_id,
  10.270 +             NVL(DECODE(info_code_,
  10.271 +             'R', plan_run_man,
  10.272 +             'S', plan_setup_man,
  10.273 +             'I', plan_run_man), 0)
  10.274 +      FROM   op_plan_tab
  10.275 +      WHERE  company_id = op_diary_.company_id
  10.276 +      AND    sup_op_id  = op_id_;
  10.277 +BEGIN
  10.278 +   cnt_ := op_diary_.result.row_count;
  10.279 +   FOR i_ IN 1 .. cnt_ LOOP
  10.280 +      op_id_     := op_diary_.result.op_id(i_);
  10.281 +      info_code_ := op_diary_.result.info_code(i_);
  10.282 +      OPEN Get_Operations;
  10.283 +      FETCH Get_Operations
  10.284 +      BULK COLLECT INTO
  10.285 +         grp_op_id_,
  10.286 +         grp_plan_hours_;
  10.287 +      grp_count_ := Get_Operations%ROWCOUNT;
  10.288 +      CLOSE Get_Operations;
  10.289 +      IF grp_count_ > 0 THEN
  10.290 +         sum_hours_ := 0.0;
  10.291 +         FOR j_ IN 1 .. grp_count_ LOOP
  10.292 +            sum_hours_ := sum_hours_ + grp_plan_hours_(j_);
  10.293 +         END LOOP;
  10.294 +         IF sum_hours_ < 0.005 THEN
  10.295 +            /* If no planned hours, make equal distribution */
  10.296 +            FOR j_ IN 1 .. grp_count_ LOOP
  10.297 +               grp_plan_hours_(j_) := 1.0;
  10.298 +            END LOOP;
  10.299 +            sum_hours_ := TO_NUMBER(grp_count_);
  10.300 +         END IF;
  10.301 +         FOR j_ IN 1 .. grp_count_ LOOP
  10.302 +            w_ := op_diary_.result.row_count+1;
  10.303 +            op_diary_.result.op_id(w_)          := grp_op_id_(j_);
  10.304 +            op_diary_.result.mch_code(w_)       := op_diary_.result.mch_code(i_);
  10.305 +            op_diary_.result.info_code(w_)      := op_diary_.result.info_code(i_);
  10.306 +            op_diary_.result.org_code(w_)       := op_diary_.result.org_code(i_);
  10.307 +            op_diary_.result.contract(w_)       := op_diary_.result.contract(i_);
  10.308 +            op_diary_.result.work_center_no(w_) := op_diary_.result.work_center_no(i_);
  10.309 +            op_diary_.result.labor_class_no(w_) := op_diary_.result.labor_class_no(i_);
  10.310 +            op_diary_.result.wage_group(w_)     := op_diary_.result.wage_group(i_);
  10.311 +            op_diary_.result.wage_code(w_)      := op_diary_.result.wage_code(i_);
  10.312 +            op_diary_.result.wage_hours(w_)     := op_diary_.result.wage_hours(i_) * grp_plan_hours_(j_) / sum_hours_;
  10.313 +            op_diary_.result.row_count          := w_;
  10.314 +         END LOOP;
  10.315 +         op_diary_.result.wage_hours(i_) := 0.0;
  10.316 +      END IF;
  10.317 +   END LOOP;
  10.318 +END Convert_Group_Operations___;
  10.319 +
  10.320 +
  10.321 +PROCEDURE Do_Wage_Rounding___ (
  10.322 +   pers_diary_ IN     Time_Pers_Diary_Calc_API.Diary_Record_Type,
  10.323 +   op_diary_   IN OUT NOCOPY Op_Diary_Record_Type )
  10.324 +IS
  10.325 +   pers_sum_hours_ NUMBER;
  10.326 +   op_sum_hours_   NUMBER;
  10.327 +   sum_hours_      NUMBER;
  10.328 +   diff_hours_     NUMBER;
  10.329 +   wage_hours_     NUMBER;
  10.330 +   wage_grp_       VARCHAR2(20);
  10.331 +   wage_code_      VARCHAR2(20);
  10.332 +   wage_diff_      NUMBER_ARRAY;
  10.333 +   w_              INTEGER;
  10.334 +BEGIN
  10.335 +   IF NOT op_diary_.do_update THEN
  10.336 +      op_diary_.clocking.row_count := 0;
  10.337 +      op_diary_.result.row_count   := 0;
  10.338 +   END IF;
  10.339 +   /*-----------------------------------------------------------------------*/
  10.340 +   /* a) Adjust wage hours according to TimePersDiaryResult                 */
  10.341 +   /*-----------------------------------------------------------------------*/
  10.342 +   FOR i_ IN 1 .. pers_diary_.result.row_count LOOP
  10.343 +      IF pers_diary_.result.wage_hours(i_) != 0 AND
  10.344 +         NOT pers_diary_.result.wage_hol(i_) THEN
  10.345 +         wage_grp_  := pers_diary_.result.wage_grp(i_);
  10.346 +         wage_code_ := pers_diary_.result.wage_code(i_);
  10.347 +         pers_sum_hours_ := 0.0;
  10.348 +         FOR j_ IN 1 .. pers_diary_.result.row_count LOOP
  10.349 +            IF pers_diary_.result.wage_grp(j_)  = wage_grp_ AND
  10.350 +               pers_diary_.result.wage_code(j_) = wage_code_ AND
  10.351 +               NOT pers_diary_.result.wage_hol(j_) THEN
  10.352 +               pers_sum_hours_ := pers_sum_hours_ + pers_diary_.result.wage_hours(j_);
  10.353 +            END IF;
  10.354 +         END LOOP;
  10.355 +         op_sum_hours_ := 0.0;
  10.356 +         FOR j_ IN 1 .. op_diary_.result.row_count LOOP
  10.357 +            IF op_diary_.result.wage_group(j_) = wage_grp_ AND
  10.358 +               op_diary_.result.wage_code(j_)  = wage_code_ THEN
  10.359 +               op_sum_hours_ := op_sum_hours_ + op_diary_.result.wage_hours(j_);
  10.360 +            END IF;
  10.361 +         END LOOP;
  10.362 +         /*-----------------------------------------------------------------------*/
  10.363 +         /* b) Wage hours are reduced proportionally to presence hours level      */
  10.364 +         /*-----------------------------------------------------------------------*/
  10.365 +         sum_hours_ := op_sum_hours_;
  10.366 +         IF pers_sum_hours_ - op_sum_hours_ < 0.011 THEN
  10.367 +            sum_hours_ := 0.0;
  10.368 +            FOR j_ IN 1 .. op_diary_.result.row_count LOOP
  10.369 +               IF op_diary_.result.wage_group(j_) = wage_grp_ AND
  10.370 +                  op_diary_.result.wage_code(j_)  = wage_code_ THEN
  10.371 +                  op_diary_.result.wage_hours(j_) := pers_sum_hours_ * op_diary_.result.wage_hours(j_) / op_sum_hours_;
  10.372 +                  sum_hours_ := sum_hours_ + op_diary_.result.wage_hours(j_);
  10.373 +               END IF;
  10.374 +            END LOOP;
  10.375 +         END IF;
  10.376 +         op_sum_hours_ := ROUND(sum_hours_, 2);
  10.377 +         /*-----------------------------------------------------------------------*/
  10.378 +         /* c) Wage hours are rounded                                             */
  10.379 +         /*-----------------------------------------------------------------------*/
  10.380 +         sum_hours_ := 0.0;
  10.381 +         FOR j_ IN 1 .. op_diary_.result.row_count LOOP
  10.382 +            IF op_diary_.result.wage_group(j_) = wage_grp_ AND
  10.383 +               op_diary_.result.wage_code(j_)  = wage_code_ THEN
  10.384 +               wage_hours_ := op_diary_.result.wage_hours(j_);
  10.385 +               op_diary_.result.wage_hours(j_) := ROUND(wage_hours_, 2);
  10.386 +               wage_diff_(j_) := op_diary_.result.wage_hours(j_) - wage_hours_;
  10.387 +               sum_hours_ := sum_hours_ + op_diary_.result.wage_hours(j_);
  10.388 +            END IF;
  10.389 +         END LOOP;
  10.390 +         diff_hours_ := sum_hours_ - op_sum_hours_;
  10.391 +         /*-----------------------------------------------------------------------*/
  10.392 +         /* d) Wage hours are adjusted to total hours level after rounding diffs  */
  10.393 +         /*-----------------------------------------------------------------------*/
  10.394 +         WHILE diff_hours_ < -0.001 LOOP
  10.395 +            w_ := 0;
  10.396 +            FOR j_ IN 1 .. op_diary_.result.row_count LOOP
  10.397 +               IF op_diary_.result.wage_group(j_) = wage_grp_ AND
  10.398 +                  op_diary_.result.wage_code(j_)  = wage_code_ THEN
  10.399 +                  IF w_ = 0 THEN
  10.400 +                     w_ := j_;
  10.401 +                  ELSE
  10.402 +                     IF wage_diff_(j_) < wage_diff_(w_) THEN
  10.403 +                        w_ := j_;
  10.404 +                     END IF;
  10.405 +                  END IF;
  10.406 +               END IF;
  10.407 +            END LOOP;
  10.408 +            op_diary_.result.wage_hours(w_) := op_diary_.result.wage_hours(w_) + 0.01;
  10.409 +            wage_diff_(w_) := wage_diff_(w_) + 0.01;
  10.410 +            diff_hours_ := diff_hours_ + 0.01;
  10.411 +         END LOOP;
  10.412 +         WHILE diff_hours_ > 0.001 LOOP
  10.413 +            w_ := 0;
  10.414 +            FOR j_ IN 1 .. op_diary_.result.row_count LOOP
  10.415 +               IF op_diary_.result.wage_group(j_) = wage_grp_ AND
  10.416 +                  op_diary_.result.wage_code(j_)  = wage_code_ THEN
  10.417 +                  IF w_ = 0 THEN
  10.418 +                     w_ := j_;
  10.419 +                  ELSE
  10.420 +                     IF wage_diff_(j_) > wage_diff_(w_) THEN
  10.421 +                        w_ := j_;
  10.422 +                     END IF;
  10.423 +                  END IF;
  10.424 +               END IF;
  10.425 +            END LOOP;
  10.426 +            op_diary_.result.wage_hours(w_) := op_diary_.result.wage_hours(w_) - 0.01;
  10.427 +            wage_diff_(w_) := wage_diff_(w_) - 0.01;
  10.428 +            diff_hours_ := diff_hours_ - 0.01;
  10.429 +         END LOOP;
  10.430 +      END IF;
  10.431 +   END LOOP;
  10.432 +END Do_Wage_Rounding___;
  10.433 +
  10.434 +
  10.435 +PROCEDURE Get_Diary___ (
  10.436 +   op_diary_ IN OUT NOCOPY Op_Diary_Record_Type )
  10.437 +IS
  10.438 +   skip_  BOOLEAN;
  10.439 +   block_ BOOLEAN;
  10.440 +   found_ BOOLEAN;
  10.441 +   error_exist_     BOOLEAN;
  10.442 +   
  10.443 +   CURSOR Get_Diary IS
  10.444 +      SELECT ROWID,
  10.445 +             DECODE(auth_id, NULL, 0, 1),
  10.446 +             reg_status
  10.447 +      FROM   op_pers_diary_tab
  10.448 +      WHERE  company_id   = op_diary_.company_id
  10.449 +      AND    emp_no       = op_diary_.emp_no
  10.450 +      AND    account_date = op_diary_.account_date
  10.451 +      FOR UPDATE OF reg_status NOWAIT;
  10.452 +   CURSOR Get_Clockings IS
  10.453 +      SELECT ROWID,
  10.454 +             DECODE(error_no, NULL, 0,31,0, 1),
  10.455 +             op_id,
  10.456 +             mch_code,
  10.457 +             info_code,
  10.458 +             org_code,
  10.459 +             contract,
  10.460 +             work_center_no,
  10.461 +             labor_class_no,
  10.462 +             24 * (start_stamp - account_date),
  10.463 +             24 * (NVL(stop_stamp, start_stamp) - account_date)
  10.464 +      FROM   op_clocking_tab
  10.465 +      WHERE  company_id   = op_diary_.company_id
  10.466 +      AND    emp_no       = op_diary_.emp_no
  10.467 +      AND    account_date = op_diary_.account_date
  10.468 +      ORDER BY start_stamp, stop_stamp;
  10.469 +      --FOR UPDATE OF rowversion NOWAIT;
  10.470 +   CURSOR Get_Result IS
  10.471 +      SELECT ROWID
  10.472 +      FROM   op_result_tab
  10.473 +      WHERE  company_id   = op_diary_.company_id
  10.474 +      AND    emp_no       = op_diary_.emp_no
  10.475 +      AND    account_date = op_diary_.account_date
  10.476 +      FOR UPDATE OF rowversion NOWAIT;
  10.477 +BEGIN
  10.478 +   /*-----------------------------------------------------------------------*/
  10.479 +   /* a) Fetch rows from OpClocking (to be updated later)                   */
  10.480 +   /*-----------------------------------------------------------------------*/
  10.481 +   op_diary_.error_no           := 0;
  10.482 +   op_diary_.do_update          := FALSE;
  10.483 +   op_diary_.clocking.row_count := 0;
  10.484 +   op_diary_.result.row_count   := 0;
  10.485 +   skip_  := FALSE;
  10.486 +   block_ := FALSE;
  10.487 +   OPEN Get_Diary;
  10.488 +   FETCH Get_Diary
  10.489 +   INTO  op_diary_.row_id,
  10.490 +   op_diary_.auth_id,
  10.491 +   op_diary_.reg_status;
  10.492 +   found_ := Get_Diary%FOUND;
  10.493 +   CLOSE Get_Diary;
  10.494 +   IF NOT found_ THEN
  10.495 +      op_diary_.reg_status := '';
  10.496 +      op_diary_.auth_id := 0;
  10.497 +      skip_ := TRUE;
  10.498 +   END IF;
  10.499 +   IF op_diary_.auth_id = 1 THEN
  10.500 +      block_ := TRUE;
  10.501 +   END IF;
  10.502 +   IF op_diary_.reg_status = reg_status_.OPEN THEN
  10.503 +      skip_ := TRUE;
  10.504 +   END IF;
  10.505 +   IF op_diary_.reg_status = reg_status_.ready THEN
  10.506 +      op_diary_.do_update := TRUE;
  10.507 +   END IF;
  10.508 +   IF op_diary_.reg_status = reg_status_.modified THEN
  10.509 +      block_ := TRUE;
  10.510 +   END IF;
  10.511 +   --
  10.512 +   OPEN Get_Clockings;
  10.513 +   FETCH Get_Clockings
  10.514 +   BULK COLLECT INTO
  10.515 +      op_diary_.clocking.row_id,
  10.516 +      op_diary_.clocking.error_no,
  10.517 +      op_diary_.clocking.op_id,
  10.518 +      op_diary_.clocking.mch_code,
  10.519 +      op_diary_.clocking.info_code,
  10.520 +      op_diary_.clocking.org_code,
  10.521 +      op_diary_.clocking.contract,
  10.522 +      op_diary_.clocking.work_center_no,
  10.523 +      op_diary_.clocking.labor_class_no,
  10.524 +      op_diary_.clocking.start_stamp,
  10.525 +      op_diary_.clocking.stop_stamp;
  10.526 +   op_diary_.clocking.row_count := Get_Clockings%ROWCOUNT;
  10.527 +   CLOSE Get_Clockings;
  10.528 +   --
  10.529 +   OPEN Get_Result;
  10.530 +   FETCH Get_Result
  10.531 +   BULK COLLECT INTO op_diary_.result.row_id;
  10.532 +   op_diary_.result.row_count := Get_Result%ROWCOUNT;
  10.533 +   CLOSE Get_Result;
  10.534 +   op_diary_.clocking.row_count_read := op_diary_.clocking.row_count;
  10.535 +   op_diary_.result.row_count_read   := op_diary_.result.row_count;
  10.536 +   /*-----------------------------------------------------------------------*/
  10.537 +   /* b) If an error occurs on op clockings, save error code,               */
  10.538 +   /*    but continue with Time and Attendance processing                   */
  10.539 +   /*-----------------------------------------------------------------------*/
  10.540 +   error_exist_ := FALSE;
  10.541 +   FOR i_ IN 1 .. op_diary_.clocking.row_count LOOP
  10.542 +      IF op_diary_.clocking.start_stamp(i_) - op_diary_.clocking.stop_stamp(i_) > 0.001 AND
  10.543 +         test_active_(Time_Reg_Error_API.CD_OVERLAP) THEN
  10.544 +         skip_ := TRUE;
  10.545 +         op_diary_.error_no  := Time_Reg_Error_API.CD_OVERLAP;
  10.546 +      END IF;
  10.547 +      FOR j_ IN  i_+1 .. op_diary_.clocking.row_count LOOP
  10.548 +         IF ((op_diary_.clocking.op_id(i_) = op_diary_.clocking.op_id(j_)) AND
  10.549 +            (op_diary_.clocking.info_code(i_) = op_diary_.clocking.info_code(j_)) AND
  10.550 +            (op_diary_.clocking.mch_code(i_)  = op_diary_.clocking.mch_code(j_)) ) THEN
  10.551 +            IF (op_diary_.clocking.labor_class_no(i_) != op_diary_.clocking.labor_class_no(j_)) THEN
  10.552 +               op_diary_.error_no :=  Time_Reg_Error_API.CD_LABOR_CLASS;  
  10.553 +               Set_Op_Error_Labor___(op_diary_);
  10.554 +               skip_ := TRUE;
  10.555 +               error_exist_ := TRUE;
  10.556 +            END IF;
  10.557 +            IF (op_diary_.clocking.work_center_no(i_) != op_diary_.clocking.work_center_no(j_)) THEN
  10.558 +               --Bug 61149, start
  10.559 +               IF (Op_Machine_Api.Work_Center_Exists(op_diary_.clocking.contract(i_), op_diary_.clocking.work_center_no(i_))='TRUE') AND 
  10.560 +                  (Op_Machine_Api.Work_Center_Exists(op_diary_.clocking.contract(j_), op_diary_.clocking.work_center_no(j_))='TRUE') THEN
  10.561 +                  op_diary_.error_no :=  Time_Reg_Error_API.CD_SUP_MCH_CODE;
  10.562 +                  Set_Op_Error_Labor___(op_diary_);
  10.563 +                  skip_ := TRUE;
  10.564 +                  error_exist_ := TRUE;
  10.565 +               END IF;
  10.566 +               --Bug 61149, end
  10.567 +            END IF;
  10.568 +
  10.569 +         END IF;
  10.570 +      END LOOP;
  10.571 +      IF (NOT (error_exist_)) THEN
  10.572 +         op_diary_.error_no := NULL;
  10.573 +         Set_Op_Error_Labor___(op_diary_);
  10.574 +      END IF;
  10.575 +      IF (op_diary_.clocking.error_no(i_) != 0)  THEN
  10.576 +         skip_ := TRUE;
  10.577 +      END IF;
  10.578 +   END LOOP;
  10.579 +   IF block_ AND op_diary_.do_update THEN
  10.580 +      op_diary_.clocking.row_count := 0;
  10.581 +      op_diary_.error_no  := Time_Reg_Error_API.CD_ORACLE;
  10.582 +   END IF;
  10.583 +   IF skip_ THEN
  10.584 +      op_diary_.clocking.row_count := 0;
  10.585 +   END IF;
  10.586 +   IF block_ THEN
  10.587 +      op_diary_.clocking.row_count := 0;
  10.588 +      op_diary_.do_update := FALSE;
  10.589 +   END IF;
  10.590 +   IF op_diary_.clocking.row_count > 0 THEN
  10.591 +      op_diary_.do_update := TRUE;
  10.592 +   END IF;
  10.593 +   IF op_diary_.clocking.row_count = 0 THEN
  10.594 +      RAISE Skip;
  10.595 +   END IF;
  10.596 +END Get_Diary___;
  10.597 +
  10.598 +
  10.599 +PROCEDURE Get_Op_Data___ (
  10.600 +   op_data_    OUT    NOCOPY Op_Data_Rec,
  10.601 +   pers_diary_ IN     Time_Pers_Diary_Calc_API.Diary_Record_Type,
  10.602 +   op_diary_   IN OUT NOCOPY Op_Diary_Record_Type )
  10.603 +IS
  10.604 +   company_id_      VARCHAR2(20);
  10.605 +   emp_no_          VARCHAR2(20);
  10.606 +   account_date_    DATE;
  10.607 +   work_sched_      Work_Sched_Assign_API.Public_Rec;
  10.608 +   calc_param_type_ VARCHAR2(20);
  10.609 +   wage_grp_        VARCHAR2(20);
  10.610 +   wage_hours_      NUMBER;
  10.611 +   CURSOR Get_Calc_Param IS
  10.612 +      SELECT param_label_db      param_label,
  10.613 +             NVL(param_value, 0) param_value
  10.614 +      FROM   time_calc_param_desc
  10.615 +      WHERE  company_id      = company_id_
  10.616 +      AND    calc_param_type = calc_param_type_;
  10.617 +BEGIN
  10.618 +   company_id_   := op_diary_.company_id;
  10.619 +   emp_no_       := op_diary_.emp_no;
  10.620 +   account_date_ := op_diary_.account_date;
  10.621 +   op_data_.org_code := Company_Pers_Assign_API.Get_Org_Code(company_id_, emp_no_, account_date_);
  10.622 +   work_sched_ := Work_Sched_Assign_API.Get(company_id_, emp_no_, account_date_);
  10.623 +   op_diary_.wage_class := work_sched_.wage_class;
  10.624 +   calc_param_type_ := '';
  10.625 +   IF work_sched_.rule_type IS NOT NULL THEN
  10.626 +      calc_param_type_ := Time_Rule_API.Get_Calc_Param_Type(company_id_, work_sched_.wage_class, work_sched_.rule_type);
  10.627 +   END IF;
  10.628 +   op_data_.min_op_diff := 0.0;
  10.629 +   op_data_.max_op_diff := 0.0;
  10.630 +   IF calc_param_type_ IS NOT NULL THEN
  10.631 +      FOR p_ IN Get_Calc_Param LOOP
  10.632 +         CASE p_.param_label
  10.633 +         WHEN time_param_label_.min_op_diff THEN
  10.634 +            op_data_.min_op_diff := p_.param_value;
  10.635 +         WHEN time_param_label_.max_op_diff THEN
  10.636 +            op_data_.max_op_diff := p_.param_value;
  10.637 +         ELSE
  10.638 +            NULL;
  10.639 +         END CASE;
  10.640 +      END LOOP;
  10.641 +   END IF;
  10.642 +   op_data_.presence_hours := 0.0;
  10.643 +   FOR i_ IN 1 .. pers_diary_.result.row_count LOOP
  10.644 +      wage_hours_ := pers_diary_.result.wage_hours(i_);
  10.645 +      IF wage_hours_ > 0.001 OR wage_hours_ < -0.001 THEN
  10.646 +         wage_grp_ := pers_diary_.result.wage_grp(i_);
  10.647 +         IF wage_grp_ IN (wage_group_.normal, wage_group_.overtime, wage_group_.extra, wage_group_.balance_accrual) THEN
  10.648 +            IF NOT pers_diary_.result.wage_hol(i_) THEN
  10.649 +               op_data_.presence_hours := op_data_.presence_hours + wage_hours_;
  10.650 +            END IF;
  10.651 +         ELSIF wage_grp_ = wage_group_.balance_withdrawal THEN
  10.652 +            op_data_.presence_hours := op_data_.presence_hours - wage_hours_;
  10.653 +         END IF;
  10.654 +      END IF;
  10.655 +   END LOOP;
  10.656 +   op_data_.presence_hours := ROUND(op_data_.presence_hours, 2);
  10.657 +END Get_Op_Data___;
  10.658 +
  10.659 +
  10.660 +PROCEDURE Remove_Result___ (
  10.661 +   op_diary_ IN Op_Diary_Record_Type )
  10.662 +IS
  10.663 +BEGIN
  10.664 +   IF op_diary_.result.row_count_read > 0 AND op_diary_.do_update THEN
  10.665 +      FORALL i_ IN 1 .. op_diary_.result.row_count_read
  10.666 +      DELETE
  10.667 +         FROM  op_result_tab
  10.668 +         WHERE ROWID = op_diary_.result.row_id(i_);
  10.669 +   END IF;
  10.670 +END Remove_Result___;
  10.671 +
  10.672 +
  10.673 +PROCEDURE Save_Result___ (
  10.674 +   op_diary_ IN Op_Diary_Record_Type )
  10.675 +IS
  10.676 +BEGIN
  10.677 +   IF op_diary_.result.row_count > 0 THEN
  10.678 +      FORALL i_ IN 1 .. op_diary_.result.row_count
  10.679 +      INSERT
  10.680 +         INTO op_result_tab (
  10.681 +            company_id,
  10.682 +            op_id,
  10.683 +            mch_code,
  10.684 +            info_code,
  10.685 +            emp_no,
  10.686 +            account_date,
  10.687 +            org_code,
  10.688 +            contract,
  10.689 +            work_center_no,
  10.690 +            labor_class_no,
  10.691 +            wage_class,
  10.692 +            wage_group,
  10.693 +            wage_code,
  10.694 +            work_hours,
  10.695 +            rowversion)
  10.696 +         SELECT op_diary_.company_id,
  10.697 +                op_diary_.result.op_id(i_),
  10.698 +                op_diary_.result.mch_code(i_),
  10.699 +                op_diary_.result.info_code(i_),
  10.700 +                op_diary_.emp_no,
  10.701 +                op_diary_.account_date,
  10.702 +                op_diary_.result.org_code(i_),
  10.703 +                op_diary_.result.contract(i_),
  10.704 +                op_diary_.result.work_center_no(i_),
  10.705 +                op_diary_.result.labor_class_no(i_),
  10.706 +                op_diary_.wage_class,
  10.707 +                op_diary_.result.wage_group(i_),
  10.708 +                op_diary_.result.wage_code(i_),
  10.709 +                ROUND(op_diary_.result.wage_hours(i_), 2),
  10.710 +                SYSDATE
  10.711 +         FROM   dual
  10.712 +         WHERE  ROUND(op_diary_.result.wage_hours(i_), 2) != 0;
  10.713 +   END IF;
  10.714 +END Save_Result___;
  10.715 +
  10.716 +
  10.717 +PROCEDURE Set_Op_Error___ (
  10.718 +   op_diary_ IN Op_Diary_Record_Type )
  10.719 +IS
  10.720 +   PRAGMA AUTONOMOUS_TRANSACTION;
  10.721 +BEGIN
  10.722 +   IF op_diary_.clocking.row_count > 0 THEN
  10.723 +      --Bug 61149, start
  10.724 +      IF op_diary_.error_no IS NOT NULL THEN
  10.725 +         FORALL i_ IN 1 .. op_diary_.clocking.row_id.COUNT
  10.726 +         UPDATE op_clocking_tab
  10.727 +            SET error_no   = op_diary_.error_no,
  10.728 +                rowversion = SYSDATE
  10.729 +            WHERE ROWID = op_diary_.clocking.row_id(i_)
  10.730 +            AND   op_diary_.clocking.row_id(i_) IS NOT NULL
  10.731 +            AND   error_no IS NULL;
  10.732 +         COMMIT;
  10.733 +      END IF;
  10.734 +      --Bug 61149, end
  10.735 +   END IF;
  10.736 +EXCEPTION
  10.737 +   WHEN OTHERS THEN
  10.738 +      ROLLBACK;
  10.739 +END Set_Op_Error___;
  10.740 +
  10.741 +PROCEDURE Set_Op_Error_Labor___ (
  10.742 +   op_diary_ IN Op_Diary_Record_Type )
  10.743 +IS
  10.744 +   PRAGMA AUTONOMOUS_TRANSACTION;
  10.745 +BEGIN
  10.746 +   IF op_diary_.clocking.row_count > 0 THEN
  10.747 +      --Bug 61149, start
  10.748 +      IF op_diary_.error_no IS NOT NULL THEN
  10.749 +         FORALL i_ IN 1 .. op_diary_.clocking.row_id.COUNT
  10.750 +         UPDATE op_clocking_tab
  10.751 +            SET error_no   = op_diary_.error_no,
  10.752 +                rowversion = SYSDATE
  10.753 +            WHERE ROWID = op_diary_.clocking.row_id(i_)
  10.754 +            AND   op_diary_.clocking.row_id(i_) IS NOT NULL;
  10.755 +         COMMIT;
  10.756 +      END IF;
  10.757 +      --Bug 61149, end
  10.758 +   END IF;
  10.759 +EXCEPTION
  10.760 +   WHEN OTHERS THEN
  10.761 +      ROLLBACK;
  10.762 +END Set_Op_Error_Labor___;
  10.763 +
  10.764 +
  10.765 +PROCEDURE Update_Diary___ (
  10.766 +   op_data_  IN     Op_Data_Rec,
  10.767 +   op_diary_ IN OUT NOCOPY Op_Diary_Record_Type )
  10.768 +IS
  10.769 +   min_op_normal_sum_ NUMBER;
  10.770 +   max_op_normal_sum_ NUMBER;
  10.771 +   sum_hours_         NUMBER;
  10.772 +BEGIN
  10.773 +   min_op_normal_sum_ := op_data_.presence_hours + op_data_.min_op_diff - 0.005;
  10.774 +   max_op_normal_sum_ := op_data_.presence_hours + op_data_.max_op_diff + 0.005;
  10.775 +   sum_hours_ := 0.0;
  10.776 +   FOR w_ IN 1 .. op_diary_.result.row_count LOOP
  10.777 +      IF op_diary_.result.wage_group(w_) IN (wage_group_.normal, wage_group_.overtime, wage_group_.balance_accrual, wage_group_.extra) THEN
  10.778 +         sum_hours_ := sum_hours_ + op_diary_.result.wage_hours(w_);
  10.779 +      END IF;
  10.780 +   END LOOP;
  10.781 +   op_diary_.reg_status := reg_status_.done;
  10.782 +   IF op_diary_.clocking.row_count > 0 THEN
  10.783 +      UPDATE op_pers_diary_tab
  10.784 +         SET reg_status = op_diary_.reg_status,
  10.785 +             rowversion = SYSDATE
  10.786 +         WHERE rowid = op_diary_.row_id;
  10.787 +   END IF;
  10.788 +   /*-----------------------------------------------------------------------*/
  10.789 +   /* If an error occurred during order calculation all OpClocking records  */
  10.790 +   /* are error marked.                                                     */
  10.791 +   /*-----------------------------------------------------------------------*/
  10.792 +   IF op_diary_.error_no != 0 AND op_diary_.clocking.row_count_read > 0 THEN
  10.793 +      op_diary_.clocking.row_count := op_diary_.clocking.row_count_read;
  10.794 +      Set_Op_Error___(op_diary_);
  10.795 +   END IF;
  10.796 +END Update_Diary___;
  10.797 +
  10.798 +
  10.799 +
  10.800 +-----------------------------------------------------------------------------
  10.801 +-------------------- LU SPECIFIC PRIVATE METHODS ----------------------------
  10.802 +-----------------------------------------------------------------------------
  10.803 +
  10.804 +PROCEDURE Calculate_Op__ (
  10.805 +   pers_diary_ IN Time_Pers_Diary_Calc_API.Diary_Record_Type )
  10.806 +IS
  10.807 +   op_diary_        Op_Diary_Record_Type;
  10.808 +   op_data_         Op_Data_Rec;
  10.809 +   history_enabled_ BOOLEAN;
  10.810 +BEGIN
  10.811 +   SAVEPOINT Calculation_Start;
  10.812 +   /*************************************************************************/
  10.813 +   /* 1) Start                                                              */
  10.814 +   /*-----------------------------------------------------------------------*/
  10.815 +   history_enabled_ := History_Setting_Util_API.Is_Enabled;
  10.816 +   History_Setting_Util_API.Disable;
  10.817 +   op_diary_.company_id   := pers_diary_.company_id;
  10.818 +   op_diary_.emp_no       := pers_diary_.emp_no;
  10.819 +   op_diary_.account_date := pers_diary_.account_date;
  10.820 +   /*************************************************************************/
  10.821 +   /* 2) Get data                                                           */
  10.822 +   /*************************************************************************/
  10.823 +   Get_Diary___(op_diary_);
  10.824 +   Get_Op_Data___(op_data_, pers_diary_, op_diary_);
  10.825 +   /*************************************************************************/
  10.826 +   /* 3) Order calculations                                                 */
  10.827 +   /*************************************************************************/
  10.828 +   Calculate_Op_Hours___(op_data_, pers_diary_, op_diary_);
  10.829 +   Convert_Group_Operations___(op_diary_);
  10.830 +   Do_Wage_Rounding___(pers_diary_, op_diary_);
  10.831 +   /*************************************************************************/
  10.832 +   /* 4) Store order calulations                                            */
  10.833 +   /*************************************************************************/
  10.834 +   Remove_Result___(op_diary_);
  10.835 +   Save_Result___(op_diary_);
  10.836 +   Update_Diary___(op_data_, op_diary_);
  10.837 +   /*************************************************************************/
  10.838 +   /* 5) End                                                                */
  10.839 +   /*************************************************************************/
  10.840 +   IF history_enabled_ THEN
  10.841 +      History_Setting_Util_API.Enable;
  10.842 +   END IF;
  10.843 +EXCEPTION
  10.844 +   WHEN Skip THEN
  10.845 +      ROLLBACK TO Calculation_Start;
  10.846 +      IF history_enabled_ THEN
  10.847 +         History_Setting_Util_API.Enable;
  10.848 +      END IF;
  10.849 +   WHEN RowLocked THEN
  10.850 +      ROLLBACK TO Calculation_Start;
  10.851 +      IF history_enabled_ THEN
  10.852 +         History_Setting_Util_API.Enable;
  10.853 +      END IF;
  10.854 +   WHEN DataError THEN
  10.855 +      ROLLBACK TO Calculation_Start;
  10.856 +      Set_Op_Error___(op_diary_);
  10.857 +      IF history_enabled_ THEN
  10.858 +         History_Setting_Util_API.Enable;
  10.859 +      END IF;
  10.860 +   WHEN OTHERS THEN
  10.861 +      op_diary_.error_no := SQLCODE;
  10.862 +      ROLLBACK TO Calculation_Start;
  10.863 +      IF test_active_(Time_Reg_Error_API.CD_ORACLE) THEN
  10.864 +         op_diary_.error_no := Time_Reg_Error_API.CD_ORACLE;
  10.865 +         Set_Op_Error___(op_diary_);
  10.866 +      END IF;
  10.867 +      IF history_enabled_ THEN
  10.868 +         History_Setting_Util_API.Enable;
  10.869 +      END IF;
  10.870 +END Calculate_Op__;
  10.871 +
  10.872 +
  10.873 +FUNCTION Get_Op_Clocking_Count__ (
  10.874 +   pers_diary_ IN Time_Pers_Diary_Calc_API.Diary_Record_Type ) RETURN INTEGER
  10.875 +IS
  10.876 +   op_diary_ Op_Diary_Record_Type;
  10.877 +BEGIN
  10.878 +   op_diary_.company_id   := pers_diary_.company_id;
  10.879 +   op_diary_.emp_no       := pers_diary_.emp_no;
  10.880 +   op_diary_.account_date := pers_diary_.account_date;
  10.881 +   Get_Diary___(op_diary_);
  10.882 +   RETURN op_diary_.clocking.row_count;
  10.883 +EXCEPTION
  10.884 +   WHEN OTHERS THEN
  10.885 +      RETURN 0;
  10.886 +END Get_Op_Clocking_Count__;
  10.887 +
  10.888 +
  10.889 +
  10.890 +-----------------------------------------------------------------------------
  10.891 +-------------------- LU SPECIFIC PROTECTED METHODS --------------------------
  10.892 +-----------------------------------------------------------------------------
  10.893 +
  10.894 +
  10.895 +-----------------------------------------------------------------------------
  10.896 +-------------------- LU SPECIFIC PUBLIC METHODS -----------------------------
  10.897 +-----------------------------------------------------------------------------
  10.898 +
  10.899 +
  10.900 +-----------------------------------------------------------------------------
  10.901 +-------------------- FOUNDATION1 METHODS ------------------------------------
  10.902 +-----------------------------------------------------------------------------
  10.903 +-- Init
  10.904 +--   Dummy procedure that can be called at database startup to ensure that
  10.905 +--   this package is loaded into memory for performance reasons only.
  10.906 +-----------------------------------------------------------------------------
  10.907 +
  10.908 +PROCEDURE Init
  10.909 +IS
  10.910 +BEGIN
  10.911 +   NULL;
  10.912 +END Init;
  10.913 +-------------------------------------------------------------------------
  10.914 +-- Initialize
  10.915 +-------------------------------------------------------------------------
  10.916 +BEGIN
  10.917 +   comp_time_format_ := Comp_Time_Format_API.Get_Db_Value_Rec;
  10.918 +   wage_group_       := Wage_Group_API.Get_Db_Value_Rec;
  10.919 +   time_param_label_ := Time_Param_Label_API.Get_Db_Value_Rec;
  10.920 +   reg_status_       := Time_Reg_Status_API.Get_Db_Value_Rec;
  10.921 +   Time_Reg_Error_API.Get_Active_Array(test_active_);
  10.922 +END &PKG;
  10.923 +/
  10.924 +SHOW ERROR
  10.925 +
  10.926 +UNDEFINE MODULE
  10.927 +UNDEFINE LU
  10.928 +UNDEFINE PKG
  10.929 +
  10.930 +
  10.931 +-----------------------------------------------------------------------------
    11.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    11.2 +++ b/PLSQL/Lexer/test/unit/data/ScorecardInputValue.apy	Wed May 15 23:04:20 2013 +0200
    11.3 @@ -0,0 +1,6810 @@
    11.4 +-----------------------------------------------------------------------------
    11.5 +--
    11.6 +--  Logical unit: ScorecardInputValue
    11.7 +--
    11.8 +--  Purpose:
    11.9 +--
   11.10 +--  IFS/Design Template Version 2.2
   11.11 +--
   11.12 +--  Date    Sign     History
   11.13 +--  ------  ----  -----------------------------------------------------------
   11.14 +--  090402  ASJALK   Created.
   11.15 +--  230402  ASJALK   Changed the view comments.
   11.16 +--  150502  ASJALK   Added method Get_Distributed_Attr.
   11.17 +--  200502  ASJALK   Added method Update_Distributed_Values and removed the method Get_Distributed_Attr.
   11.18 +--  200502  ASJALK   Added method Update_Sales_Values.
   11.19 +--  220502  SHWILK   Call Id: 84289 - Changed the Modify__ method.
   11.20 +--  230502  ASJALK   Added method Calculate_Measures.
   11.21 +--  240502  ASJALK   Modified method Calculate_Measures.
   11.22 +--  300502  ASJALK   Added method Update_Referred_Component.
   11.23 +--  310502  ASJALK   Modified method Calculate_Measures.
   11.24 +--  110602  ASJALK   Modified method Update_Sales_Values.
   11.25 +--  120602  ASJALK   Added a new parameter for method Update_Reffered_Component.
   11.26 +--  130602  MAWELK   Fixed Call Id 85475.(Added a update satement to Scorecard_Structure_tab in the Modify__ method.)
   11.27 +--  170602  ASJALK   Added a update statement to Scorecard_Structure_tab in the Calculate_Measures and removed the
   11.28 +--                   update statement in Modify__ method.
   11.29 +--  180602  UMDOLK   Call Id 85764,85765 Corrected.
   11.30 +--  200602  ASJALK   Call Id 85793.
   11.31 +--  210602  MAWELK   CALL ID 85518 Decimal Problem.
   11.32 +--  250602  UMDOLK   Call Id 85913, 85775 Corrected.
   11.33 +--  250602  ASJALK   Call Id 85606.
   11.34 +--  250602  UMDOLK   Changed methods Publish__,Publish_Scorecard, and Update_Versions__.
   11.35 +--  250602  ASJALK   Modified Update_Distributed_Values method.
   11.36 +--  250602  MAWELK   CALL ID 85518 Decimal Problem(made the database more than 2 decimals).
   11.37 +--  260602  UMDOLK   Corrected a bug in planned data publishing ( Changed Publish__ Method).
   11.38 +--  190802  INGULK   Meathod added Check_Table.(Call Id 86123)
   11.39 +--  030902  INGULK   Removed the check for the valid table in the Publish_Score__(Call Id 88441).
   11.40 +--  250902  SHWILK   Added the field Action
   11.41 +--  011002  ASJALK   Modified methods Update_Distributed_Values and Update_Sales_Values.
   11.42 +--  011002  MAWELK   Added a new parameter called from_where_ to Update_Distributed_Values and Update_Sales_Values. Also change the code for measures too.
   11.43 +--  041002  ASJALK   Added new parameter "action_value_" to Update_Distributed_Values and Update_Sales_Values methods.
   11.44 +--  071002  ASJALK   Changed the error messages of Update_Sales_Values.
   11.45 +--  210103  ASJALK   Rewrite all the get methods used for scorecard planning in the scorecard_structure_apy which was
   11.46 +--                   previously written in the scorecard_measure_apy.
   11.47 +--  130203  ASJALK   Modified Update_Distributed_Values,Update_Sales_Values,Calculate_Measures methods in order to calculate the version and index (new logic).
   11.48 +--  130203  PRWELK   modified input_scorecard_value procedure with ref cursors.
   11.49 +--  190203  ASJALK   Modified Update_Distributed_Values,Update_Sales_Values methods.
   11.50 +--  240203  ASJALK   Modified cursors 'get_period' of Update_Sales_Values and Input_Scorecard_Data methods.
   11.51 +--  290303  ASJALK   Added methods Hierachical_Distribution and Distribute_Input_Values___.
   11.52 +--  010403  PRWELK   Added support for administrating individual items in input_scorecard_data().
   11.53 +--  090903  PRWELK   Added set_Publishing_environment,start_publishing_environment__,Publish_Environment_Batch.
   11.54 +--  090403  ASJALK   Modified the method Distribute_Input_Values___.
   11.55 +--  100403  PRWELK   Added Set_Publish_Scorecards()
   11.56 +--  230403  PRWELK   Added prepare_scorecar_publish__,publish_scorecard_batch(),start_publish_scorecard_.
   11.57 +--  250403  MAAMLK   Call Id 96585 - Added the new error message in Distribute_Input_Values___.
   11.58 +--  300403  ASJALK   Added methods Hierarchical_Consolidation and Consolidate_Values.
   11.59 +--  060503  ASJALK   Added methods All_Hierarchical_Logic,Background_Hierarchical_Logic,
   11.60 +--                   Call_Hierarchical_Logic and Start_Hierarchical_Logic.
   11.61 +--  080503  ASJALK   Modified method Start_Hierarchical_Logic.
   11.62 +--  190503  MAAMLK   Call Id 97124 - Added a new view Scorecard_Input_Value2 (VIEW2)
   11.63 +--  210503  ASJALK   Modified All_Hierarchical_Logic method in order to make the ACTION field value TRUE.
   11.64 +--  040603  UMDOLK   Call Id 97125 - Created a new view SCORECARD_INPUT_VALUE3.
   11.65 +--  050603  UMDOLK   Modified Calculate_Measures method.
   11.66 +--  190603  ASJALK   Added new field plan_seq_no to the view SCORECARD_INPUT_VALUE3.
   11.67 +--  070703  ASJALK   Modified Calculate_Measures method.
   11.68 +--  210703  ANGALK   Call Id 98470 - Cannot plan in a year with one period. Calculate_Measures method updated
   11.69 +--  240703  ANGALK   Call Id 98225 - Changed message displayed when no plan formula in Calculate_Measures method
   11.70 +--  200803  CHPALK   Added objid and objversion to view SCORECARD_INPUT_VALUE2.
   11.71 +--  280803  INGULK   Call Id 101075 Added Rowversion to the Update statement in the Update_Versions__ method.
   11.72 +--  010903  ANGALK   Call Id 98762 - CalculateMeasures() method was updated
   11.73 +--  020903  ANGALK   Call Id 98855 - CalculateMeasures() method was updated
   11.74 +--  040903  CHPALK   Call Id 101406 Changed methods Publish_Score__ ,Publish__
   11.75 +--                   and Update_Versions__ to improve performace.
   11.76 +--  170903  INGULK   Call Id 102095 Changed lenghs of 4 variables in Input_Scorecard_Data & Scorecard_Inputs_By_Batch.
   11.77 +--  220903  ASJALK   Call Id 103595 Changed dynamic cursors used in Update_Sales_Values to use bind variables.
   11.78 +--  230903  MAAMLK   Call Id 99040 Changed the IID check from INF_WAR to DATA_WAR.
   11.79 +--  171003  ASJALK   Call Id 105967 Modified method Update_Sales_Values.
   11.80 +--  231003  ANGALK   Call Id 108864 Modified Update_Versions_() and Publish_Score methods
   11.81 +--  280104  UMDOLK   FIPR408A1 Unicode (changed instrb to instr)
   11.82 +--  050304  CHPALK   Modified Insert___ to use RETURNING INTO to select rowid.
   11.83 +--  040304  MAAMLK   Call Id 40712
   11.84 +--  240304  MAWELK   SP1 Merge (LCS Bug Id 42350)
   11.85 +--  080404  ASJALK   Modified the code in order to align with the removed fields planned,scorecard_published,
   11.86 +--                   environment_published from scorecard_tab.
   11.87 +--  200404  ASJALK   Called the method Set_To_Planned in Distribute_Input_Values___ and Consolidate_Values.
   11.88 +--  200404  PRWELK   Value_distribution_type is replaced by scorecard_measure_api.get_match_type()
   11.89 +--  210404  PRWELK   Removed Plan formula field and references
   11.90 +--  210404  ASJALK   Modified methods Distribute_Input_Values___ and Consolidate_Values.
   11.91 +--  220404  ASJALK   Modified methods Update_Distributed_Values,Update_Sales_Values,Distribute_Input_Values___ and Consolidate_Values.
   11.92 +--  280404  ASJALK   Aligned the code according to the added state machine.
   11.93 +--  280404  ASJALK   Added method Set_To_Planned and called this method in the planning methods.
   11.94 +--  280404  ASJALK   Added method Get_Sco_Obj_State_Date.
   11.95 +--  190704  PRWELK   Added Method Budget_And_Calculate
   11.96 +--  090804  PRWELK   Changed Budget_And_Calculate method (Bug Id 116291)
   11.97 +--  260804  ASJALK   Call Id 116850 Modified method Insert__.
   11.98 +--  030904  INGULK   Call Id 117467 Changed cursor get_open_child_scr in the method Distribute_Input_Values___.
   11.99 +--  251004  ASJALK   Call Id 118165 Modified method Budget_And_Calculate.
  11.100 +--  101104  MAAMLK   Call Id 119453 Modified 'where' condition for consolidation error message
  11.101 +--  111104  MAAMLK   Call Id 119454 Modified the 'where' condition
  11.102 +--  101204  INGULK   Added General_SYS.Init_Method for procedures and Pragma for functions.
  11.103 +--  300305  MAWELK   FIPR375 Added a method called Get_Error_Msg_For_Comp().
  11.104 +--  211205  ISWALK   Added method Import_Planned_Values(), Calculate_Year_Value(), Aggregate_Planned_Values()
  11.105 +--                   and SCORECARD_INPUT_VALUE_BUDPRO... views.
  11.106 +--  110106  ISWALK   Modified SCORECARD_INPUT_VALUE3,SCORECARD_INPUT_VALUE_BUDPRO1
  11.107 +--  140106  ISWALK   Added method Load_Planned_Values(), Get_No_Of_Periods().
  11.108 +--  090206  MAAMLK   Call Id 132397 This problem was caused due to the assert comments introduced. As such
  11.109 +--                   these changes were reversed.
  11.110 +--  170206  ISWALK   Added functionality to load financials type data from budget process.
  11.111 +--  090306  ISWALK   B136588 modified Import_Fin_Values().
  11.112 +--  090306  ISWALK   B136601 modified Calculate_Year_Value() and Import_Fin_Values().
  11.113 +--  220306  ISWALK   B136602 modified Load_Planned_Values() and Import_Fin_Values().
  11.114 +--  220207  INGULK   Bug 63415, Changes to the WHERE clause of the view SCORECARD_INPUT_VALUE_BUDPRO2.
  11.115 +--  070515  SURMLK   Added ifs_assert_safe comment
  11.116 +--  070523  CHSALK   LCS Merge 64779, added a method Calc_Measure_From_Budpro() to calculate the measure values.
  11.117 +--  060707  MAAMLK   LCS Merge Bug 65000, Corrected in all_hierarchical_logic.
  11.118 +--  110707  MAAMLK   LCS Merge Bug 66326, Corrected in Publish_Environment.
  11.119 +--  160707  MAAMLK   LCS Merge Bug 64779, added a method Calc_Measure_From_Budpro() to calculate the measure values.
  11.120 +--  200707  MAAMLK   LCS Merge Bug 66082, Added calculate measure for FIN measures
  11.121 +--  051107  MAWELK   Bug 68118, Changes to Import_Fin_Values()
  11.122 +--  060208  MAKRLK   Bug 71089, Changes to Import_Fin_Values(), added dynamic calls to BUDPRO when required.
  11.123 +--  080318  Nsillk   Bug 72069, Added assert_safe to places where it was missing.
  11.124 +--  080331  MAKRLK   Bug 66984, changed method Load_Planned_Values() 
  11.125 +--  160908  MAAYLK   Bug 76573, Set measure to planned state at the end of Calculate_Measures() method 
  11.126 +-----------------------------------------------------------------------------
  11.127 +
  11.128 +DEFINE MODULE        = BUSPER
  11.129 +DEFINE LU            = ScorecardInputValue
  11.130 +DEFINE TABLE         = SCORECARD_INPUT_VALUE_TAB
  11.131 +DEFINE VIEW          = SCORECARD_INPUT_VALUE
  11.132 +DEFINE VIEW2         = SCORECARD_INPUT_VALUE2
  11.133 +DEFINE VIEW3         = SCORECARD_INPUT_VALUE3
  11.134 +DEFINE VIEW4         = SCORECARD_INPUT_VALUE_BUDPRO1
  11.135 +DEFINE VIEW5         = SCORECARD_INPUT_VALUE_BUDPRO2
  11.136 +DEFINE PKG           = SCORECARD_INPUT_VALUE_API
  11.137 +
  11.138 +DEFINE OBJID         = rowid
  11.139 +DEFINE OBJVERSION    = "ltrim(lpad(to_char(rowversion,'YYYYMMDDHH24MISS'),2000))"
  11.140 +
  11.141 +DEFINE OBJSTATE      = rowstate
  11.142 +DEFINE OBJEVENTS     = &PKG..Finite_State_Events__(&OBJSTATE)
  11.143 +DEFINE STATE         = &PKG..Finite_State_Decode__(&OBJSTATE)
  11.144 +-----------------------------------------------------------------------------
  11.145 +-------------------- VIEWS FOR SELECTS --------------------------------------
  11.146 +-----------------------------------------------------------------------------
  11.147 +
  11.148 +PROMPT Creating &VIEW view
  11.149 +
  11.150 +CREATE OR REPLACE FORCE VIEW &VIEW AS
  11.151 +SELECT environment                    environment,
  11.152 +       scorecard                      scorecard,
  11.153 +       year                           year,
  11.154 +       version                        version,
  11.155 +       scorecard_object               scorecard_object,
  11.156 +       object_type                    object_type,
  11.157 +       year_value                     year_value,
  11.158 +       p1_key                         p1_key,
  11.159 +       p1_value                       p1_value,
  11.160 +       p2_key                         p2_key,
  11.161 +       p2_value                       p2_value,
  11.162 +       p3_key                         p3_key,
  11.163 +       p3_value                       p3_value,
  11.164 +       p4_key                         p4_key,
  11.165 +       p4_value                       p4_value,
  11.166 +       p5_key                         p5_key,
  11.167 +       p5_value                       p5_value,
  11.168 +       p6_key                         p6_key,
  11.169 +       p6_value                       p6_value,
  11.170 +       p7_key                         p7_key,
  11.171 +       p7_value                       p7_value,
  11.172 +       p8_key                         p8_key,
  11.173 +       p8_value                       p8_value,
  11.174 +       p9_key                         p9_key,
  11.175 +       p9_value                       p9_value,
  11.176 +       p10_key                        p10_key,
  11.177 +       p10_value                      p10_value,
  11.178 +       p11_key                        p11_key,
  11.179 +       p11_value                      p11_value,
  11.180 +       p12_key                        p12_key,
  11.181 +       p12_value                      p12_value,
  11.182 +       action                         action,
  11.183 +       mea_state_change_date          mea_state_change_date,
  11.184 +       budget_version                 budget_version,
  11.185 +       &OBJID                         objid,
  11.186 +       &OBJVERSION                    objversion,
  11.187 +       &OBJSTATE                      objstate,
  11.188 +       &OBJEVENTS                     objevents,
  11.189 +       &STATE                         state
  11.190 +FROM   scorecard_input_value_tab
  11.191 +WITH   read only;
  11.192 +
  11.193 +COMMENT ON TABLE &VIEW
  11.194 +   IS 'LU=&LU^PROMPT=Scorecard Input Value^MODULE=&MODULE^';
  11.195 +
  11.196 +COMMENT ON COLUMN &VIEW..environment
  11.197 +   IS 'FLAGS=KMIU-^DATATYPE=STRING(10)^PROMPT=Environment^REF=ScorecardEnvironment^';
  11.198 +COMMENT ON COLUMN &VIEW..scorecard
  11.199 +   IS 'FLAGS=KMIU-^DATATYPE=STRING(10)^PROMPT=Scorecard^REF=Scorecard(environment)^';
  11.200 +COMMENT ON COLUMN &VIEW..year
  11.201 +   IS 'FLAGS=KMIU-^DATATYPE=STRING(20)^PROMPT=Year^REF=EnvironmentYear(environment)^';
  11.202 +COMMENT ON COLUMN &VIEW..version
  11.203 +   IS 'FLAGS=KMI-L^DATATYPE=STRING(20)^PROMPT=Version^';
  11.204 +COMMENT ON COLUMN &VIEW..scorecard_object
  11.205 +   IS 'FLAGS=KMIU-^DATATYPE=STRING(10)^PROMPT=Scorecard Object^';
  11.206 +COMMENT ON COLUMN &VIEW..object_type
  11.207 +   IS 'FLAGS=AMIU-^DATATYPE=STRING(10)^PROMPT=Object Type^';
  11.208 +COMMENT ON COLUMN &VIEW..year_value
  11.209 +   IS 'FLAGS=A-IU-^DATATYPE=NUMBER^PROMPT=Year Value^';
  11.210 +COMMENT ON COLUMN &VIEW..p1_key
  11.211 +   IS 'FLAGS=A-IU-^DATATYPE=STRING(10)^PROMPT=P1 Key^';
  11.212 +COMMENT ON COLUMN &VIEW..p1_value
  11.213 +   IS 'FLAGS=A-IU-^DATATYPE=NUMBER^PROMPT=P1 Value^';
  11.214 +COMMENT ON COLUMN &VIEW..p2_key
  11.215 +   IS 'FLAGS=A-IU-^DATATYPE=STRING(10)^PROMPT=P2 Key^';
  11.216 +COMMENT ON COLUMN &VIEW..p2_value
  11.217 +   IS 'FLAGS=A-IU-^DATATYPE=NUMBER^PROMPT=P2 Value^';
  11.218 +COMMENT ON COLUMN &VIEW..p3_key
  11.219 +   IS 'FLAGS=A-IU-^DATATYPE=STRING(10)^PROMPT=P3 Key^';
  11.220 +COMMENT ON COLUMN &VIEW..p3_value
  11.221 +   IS 'FLAGS=A-IU-^DATATYPE=NUMBER^PROMPT=P3 Value^';
  11.222 +COMMENT ON COLUMN &VIEW..p4_key
  11.223 +   IS 'FLAGS=A-IU-^DATATYPE=STRING(10)^PROMPT=P4 Key^';
  11.224 +COMMENT ON COLUMN &VIEW..p4_value
  11.225 +   IS 'FLAGS=A-IU-^DATATYPE=NUMBER^PROMPT=P4 Value^';
  11.226 +COMMENT ON COLUMN &VIEW..p5_key
  11.227 +   IS 'FLAGS=A-IU-^DATATYPE=STRING(10)^PROMPT=P5 Key^';
  11.228 +COMMENT ON COLUMN &VIEW..p5_value
  11.229 +   IS 'FLAGS=A-IU-^DATATYPE=NUMBER^PROMPT=P5 Value^';
  11.230 +COMMENT ON COLUMN &VIEW..p6_key
  11.231 +   IS 'FLAGS=A-IU-^DATATYPE=STRING(10)^PROMPT=P6 Key^';
  11.232 +COMMENT ON COLUMN &VIEW..p6_value
  11.233 +   IS 'FLAGS=A-IU-^DATATYPE=NUMBER^PROMPT=P6 Value^';
  11.234 +COMMENT ON COLUMN &VIEW..p7_key
  11.235 +   IS 'FLAGS=A-IU-^DATATYPE=STRING(10)^PROMPT=P7 Key^';
  11.236 +COMMENT ON COLUMN &VIEW..p7_value
  11.237 +   IS 'FLAGS=A-IU-^DATATYPE=NUMBER^PROMPT=P7 Value^';
  11.238 +COMMENT ON COLUMN &VIEW..p8_key
  11.239 +   IS 'FLAGS=A-IU-^DATATYPE=STRING(10)^PROMPT=P8 Key^';
  11.240 +COMMENT ON COLUMN &VIEW..p8_value
  11.241 +   IS 'FLAGS=A-IU-^DATATYPE=NUMBER^PROMPT=P8 Value^';
  11.242 +COMMENT ON COLUMN &VIEW..p9_key
  11.243 +   IS 'FLAGS=A-IU-^DATATYPE=STRING(10)^PROMPT=P9 Key^';
  11.244 +COMMENT ON COLUMN &VIEW..p9_value
  11.245 +   IS 'FLAGS=A-IU-^DATATYPE=NUMBER^PROMPT=P9 Value^';
  11.246 +COMMENT ON COLUMN &VIEW..p10_key
  11.247 +   IS 'FLAGS=A-IU-^DATATYPE=STRING(10)^PROMPT=P10 Key^';
  11.248 +COMMENT ON COLUMN &VIEW..p10_value
  11.249 +   IS 'FLAGS=A-IU-^DATATYPE=NUMBER^PROMPT=P10 Value^';
  11.250 +COMMENT ON COLUMN &VIEW..p11_key
  11.251 +   IS 'FLAGS=A-IU-^DATATYPE=STRING(10)^PROMPT=P11 Key^';
  11.252 +COMMENT ON COLUMN &VIEW..p11_value
  11.253 +   IS 'FLAGS=A-IU-^DATATYPE=NUMBER^PROMPT=P11 Value^';
  11.254 +COMMENT ON COLUMN &VIEW..p12_key
  11.255 +   IS 'FLAGS=A-IU-^DATATYPE=STRING(10)^PROMPT=P12 Key^';
  11.256 +COMMENT ON COLUMN &VIEW..p12_value
  11.257 +   IS 'FLAGS=A-IU-^DATATYPE=NUMBER^PROMPT=P12 Value^';
  11.258 +COMMENT ON COLUMN &VIEW..action
  11.259 +   IS 'FLAGS=AMIUL^DATATYPE=STRING^PROMPT=Action^';
  11.260 +COMMENT ON COLUMN &VIEW..mea_state_change_date
  11.261 +   IS 'FLAGS=A-IU-^DATATYPE=DATE/DATE^PROMPT=Mea State Change Date^';
  11.262 +COMMENT ON COLUMN &VIEW..budget_version
  11.263 +   IS 'FLAGS=A-IUL^DATATYPE=STRING(10)^PROMPT=Budget Version^';
  11.264 +
  11.265 +
  11.266 +PROMPT Creating &VIEW2 view
  11.267 +
  11.268 +CREATE OR REPLACE FORCE VIEW &VIEW2 AS
  11.269 +SELECT a.environment                    environment,
  11.270 +       a.scorecard                      scorecard,
  11.271 +       a.year                           year,
  11.272 +       a.version                        version,
  11.273 +       a.scorecard_object               scorecard_object,
  11.274 +       a.object_type                    object_type,
  11.275 +       DECODE(c.decimal_places,NULL,a.year_value/TO_NUMBER(c.measure_format),ROUND(a.year_value/TO_NUMBER(c.measure_format), c.decimal_places))  year_value,
  11.276 +       a.p1_key                         p1_key,
  11.277 +       DECODE(c.decimal_places,NULL,a.p1_value/TO_NUMBER(c.measure_format),ROUND(a.p1_value/TO_NUMBER(c.measure_format), c.decimal_places))  p1_value,
  11.278 +       a.p2_key                         p2_key,
  11.279 +       DECODE(c.decimal_places,NULL,a.p2_value/TO_NUMBER(c.measure_format),ROUND(a.p2_value/TO_NUMBER(c.measure_format), c.decimal_places))  p2_value,
  11.280 +       a.p3_key                         p3_key,
  11.281 +       DECODE(c.decimal_places,NULL,a.p3_value/TO_NUMBER(c.measure_format),ROUND(a.p3_value/TO_NUMBER(c.measure_format), c.decimal_places))  p3_value,
  11.282 +       a.p4_key                         p4_key,
  11.283 +       DECODE(c.decimal_places,NULL,a.p4_value/TO_NUMBER(c.measure_format),ROUND(a.p4_value/TO_NUMBER(c.measure_format), c.decimal_places))  p4_value,
  11.284 +       a.p5_key                         p5_key,
  11.285 +       DECODE(c.decimal_places,NULL,a.p5_value/TO_NUMBER(c.measure_format),ROUND(a.p5_value/TO_NUMBER(c.measure_format), c.decimal_places))  p5_value,
  11.286 +       a.p6_key                         p6_key,
  11.287 +       DECODE(c.decimal_places,NULL,a.p6_value/TO_NUMBER(c.measure_format),ROUND(a.p6_value/TO_NUMBER(c.measure_format), c.decimal_places))  p6_value,
  11.288 +       a.p7_key                         p7_key,
  11.289 +       DECODE(c.decimal_places,NULL,a.p7_value/TO_NUMBER(c.measure_format),ROUND(a.p7_value/TO_NUMBER(c.measure_format), c.decimal_places))  p7_value,
  11.290 +       a.p8_key                         p8_key,
  11.291 +       DECODE(c.decimal_places,NULL,a.p8_value/TO_NUMBER(c.measure_format),ROUND(a.p8_value/TO_NUMBER(c.measure_format), c.decimal_places))  p8_value,
  11.292 +       a.p9_key                         p9_key,
  11.293 +       DECODE(c.decimal_places,NULL,a.p9_value/TO_NUMBER(c.measure_format),ROUND(a.p9_value/TO_NUMBER(c.measure_format), c.decimal_places))  p9_value,
  11.294 +       a.p10_key                        p10_key,
  11.295 +       DECODE(c.decimal_places,NULL,a.p10_value/TO_NUMBER(c.measure_format),ROUND(a.p10_value/TO_NUMBER(c.measure_format), c.decimal_places))  p10_value,
  11.296 +       a.p11_key                        p11_key,
  11.297 +       DECODE(c.decimal_places,NULL,a.p11_value/TO_NUMBER(c.measure_format),ROUND(a.p11_value/TO_NUMBER(c.measure_format), c.decimal_places))  p11_value,
  11.298 +       a.p12_key                        p12_key,
  11.299 +       DECODE(c.decimal_places,NULL,a.p12_value/TO_NUMBER(c.measure_format),ROUND(a.p12_value/TO_NUMBER(c.measure_format), c.decimal_places))  p12_value,
  11.300 +       a.action                         action,
  11.301 +       a.rowid                          objid,
  11.302 +       ltrim(lpad(to_char(a.rowversion,'YYYYMMDDHH24MISS'),2000))   objversion
  11.303 +FROM   scorecard_input_value_tab a, measure_version_tab b, scorecard_measure_tab c
  11.304 +WHERE  a.environment = b.environment
  11.305 +AND    a.version = b.version
  11.306 +AND    b.rowstate = 'Open'
  11.307 +AND    a.object_type = 'MEASURE'
  11.308 +AND    a.scorecard_object = c.measure
  11.309 +WITH   read only;
  11.310 +
  11.311 +COMMENT ON TABLE &VIEW2
  11.312 +   IS 'LU=&LU^PROMPT=Scorecard Input Value^MODULE=&MODULE^';
  11.313 +
  11.314 +COMMENT ON COLUMN &VIEW2..environment
  11.315 +   IS 'FLAGS=KMIU-^DATATYPE=STRING(10)^PROMPT=Environment^REF=ScorecardEnvironment^';
  11.316 +COMMENT ON COLUMN &VIEW2..scorecard
  11.317 +   IS 'FLAGS=KMIU-^DATATYPE=STRING(10)^PROMPT=Scorecard^REF=Scorecard(environment)^';
  11.318 +COMMENT ON COLUMN &VIEW2..year
  11.319 +   IS 'FLAGS=KMIU-^DATATYPE=STRING(20)^PROMPT=Year^REF=EnvironmentYear(environment)^';
  11.320 +COMMENT ON COLUMN &VIEW2..version
  11.321 +   IS 'FLAGS=KMI-L^DATATYPE=STRING(20)^PROMPT=Version^';
  11.322 +COMMENT ON COLUMN &VIEW2..scorecard_object
  11.323 +   IS 'FLAGS=KMIU-^DATATYPE=STRING(10)^PROMPT=Scorecard Object^';
  11.324 +COMMENT ON COLUMN &VIEW2..object_type
  11.325 +   IS 'FLAGS=AMIU-^DATATYPE=STRING(10)^PROMPT=Object Type^';
  11.326 +COMMENT ON COLUMN &VIEW2..year_value
  11.327 +   IS 'FLAGS=A-IU-^DATATYPE=NUMBER^PROMPT=Year Value^';
  11.328 +COMMENT ON COLUMN &VIEW2..p1_key
  11.329 +   IS 'FLAGS=A-IU-^DATATYPE=STRING(10)^PROMPT=P1 Key^';
  11.330 +COMMENT ON COLUMN &VIEW2..p1_value
  11.331 +   IS 'FLAGS=A-IU-^DATATYPE=NUMBER^PROMPT=P1 Value^';
  11.332 +COMMENT ON COLUMN &VIEW2..p2_key
  11.333 +   IS 'FLAGS=A-IU-^DATATYPE=STRING(10)^PROMPT=P2 Key^';
  11.334 +COMMENT ON COLUMN &VIEW2..p2_value
  11.335 +   IS 'FLAGS=A-IU-^DATATYPE=NUMBER^PROMPT=P2 Value^';
  11.336 +COMMENT ON COLUMN &VIEW2..p3_key
  11.337 +   IS 'FLAGS=A-IU-^DATATYPE=STRING(10)^PROMPT=P3 Key^';
  11.338 +COMMENT ON COLUMN &VIEW2..p3_value
  11.339 +   IS 'FLAGS=A-IU-^DATATYPE=NUMBER^PROMPT=P3 Value^';
  11.340 +COMMENT ON COLUMN &VIEW2..p4_key
  11.341 +   IS 'FLAGS=A-IU-^DATATYPE=STRING(10)^PROMPT=P4 Key^';
  11.342 +COMMENT ON COLUMN &VIEW2..p4_value
  11.343 +   IS 'FLAGS=A-IU-^DATATYPE=NUMBER^PROMPT=P4 Value^';
  11.344 +COMMENT ON COLUMN &VIEW2..p5_key
  11.345 +   IS 'FLAGS=A-IU-^DATATYPE=STRING(10)^PROMPT=P5 Key^';
  11.346 +COMMENT ON COLUMN &VIEW2..p5_value
  11.347 +   IS 'FLAGS=A-IU-^DATATYPE=NUMBER^PROMPT=P5 Value^';
  11.348 +COMMENT ON COLUMN &VIEW2..p6_key
  11.349 +   IS 'FLAGS=A-IU-^DATATYPE=STRING(10)^PROMPT=P6 Key^';
  11.350 +COMMENT ON COLUMN &VIEW2..p6_value
  11.351 +   IS 'FLAGS=A-IU-^DATATYPE=NUMBER^PROMPT=P6 Value^';
  11.352 +COMMENT ON COLUMN &VIEW2..p7_key
  11.353 +   IS 'FLAGS=A-IU-^DATATYPE=STRING(10)^PROMPT=P7 Key^';
  11.354 +COMMENT ON COLUMN &VIEW2..p7_value
  11.355 +   IS 'FLAGS=A-IU-^DATATYPE=NUMBER^PROMPT=P7 Value^';
  11.356 +COMMENT ON COLUMN &VIEW2..p8_key
  11.357 +   IS 'FLAGS=A-IU-^DATATYPE=STRING(10)^PROMPT=P8 Key^';
  11.358 +COMMENT ON COLUMN &VIEW2..p8_value
  11.359 +   IS 'FLAGS=A-IU-^DATATYPE=NUMBER^PROMPT=P8 Value^';
  11.360 +COMMENT ON COLUMN &VIEW2..p9_key
  11.361 +   IS 'FLAGS=A-IU-^DATATYPE=STRING(10)^PROMPT=P9 Key^';
  11.362 +COMMENT ON COLUMN &VIEW2..p9_value
  11.363 +   IS 'FLAGS=A-IU-^DATATYPE=NUMBER^PROMPT=P9 Value^';
  11.364 +COMMENT ON COLUMN &VIEW2..p10_key
  11.365 +   IS 'FLAGS=A-IU-^DATATYPE=STRING(10)^PROMPT=P10 Key^';
  11.366 +COMMENT ON COLUMN &VIEW2..p10_value
  11.367 +   IS 'FLAGS=A-IU-^DATATYPE=NUMBER^PROMPT=P10 Value^';
  11.368 +COMMENT ON COLUMN &VIEW2..p11_key
  11.369 +   IS 'FLAGS=A-IU-^DATATYPE=STRING(10)^PROMPT=P11 Key^';
  11.370 +COMMENT ON COLUMN &VIEW2..p11_value
  11.371 +   IS 'FLAGS=A-IU-^DATATYPE=NUMBER^PROMPT=P11 Value^';
  11.372 +COMMENT ON COLUMN &VIEW2..p12_key
  11.373 +   IS 'FLAGS=A-IU-^DATATYPE=STRING(10)^PROMPT=P12 Key^';
  11.374 +COMMENT ON COLUMN &VIEW2..p12_value
  11.375 +   IS 'FLAGS=A-IU-^DATATYPE=NUMBER^PROMPT=P12 Value^';
  11.376 +COMMENT ON COLUMN &VIEW2..action
  11.377 +   IS 'FLAGS=AMIUL^DATATYPE=STRING^PROMPT=Action^';
  11.378 +
  11.379 +
  11.380 +
  11.381 +PROMPT Creating &VIEW3 view
  11.382 +
  11.383 +CREATE OR REPLACE FORCE VIEW &VIEW3 AS
  11.384 +SELECT siv.environment                environment,
  11.385 +       siv.scorecard                  scorecard,
  11.386 +       year                           year,
  11.387 +       version                        version,
  11.388 +       scorecard_object               scorecard_object,
  11.389 +       object_type                    object_type,
  11.390 +       DECODE(sm.decimal_places,NULL  ,siv.year_value/TO_NUMBER(sm.measure_format),ROUND(siv.year_value/TO_NUMBER(sm.measure_format), sm.decimal_places))  year_value,
  11.391 +       p1_key                         p1_key,
  11.392 +       DECODE(sm.decimal_places,NULL  ,siv.p1_value/TO_NUMBER(sm.measure_format)  ,ROUND(siv.p1_value/TO_NUMBER(sm.measure_format)  , sm.decimal_places))  p1_value,
  11.393 +       p2_key                         p2_key,
  11.394 +       DECODE(sm.decimal_places,NULL  ,siv.p2_value/TO_NUMBER(sm.measure_format)  ,ROUND(siv.p2_value/TO_NUMBER(sm.measure_format)  , sm.decimal_places))  p2_value,
  11.395 +       p3_key                         p3_key,
  11.396 +       DECODE(sm.decimal_places,NULL  ,siv.p3_value/TO_NUMBER(sm.measure_format)  ,ROUND(siv.p3_value/TO_NUMBER(sm.measure_format)  , sm.decimal_places))  p3_value,
  11.397 +       p4_key                         p4_key,
  11.398 +       DECODE(sm.decimal_places,NULL  ,siv.p4_value/TO_NUMBER(sm.measure_format)  ,ROUND(siv.p4_value/TO_NUMBER(sm.measure_format)  , sm.decimal_places))  p4_value,
  11.399 +       p5_key                         p5_key,
  11.400 +       DECODE(sm.decimal_places,NULL  ,siv.p5_value/TO_NUMBER(sm.measure_format)  ,ROUND(siv.p5_value/TO_NUMBER(sm.measure_format)  , sm.decimal_places))  p5_value,
  11.401 +       p6_key                         p6_key,
  11.402 +       DECODE(sm.decimal_places,NULL  ,siv.p6_value/TO_NUMBER(sm.measure_format)  ,ROUND(siv.p6_value/TO_NUMBER(sm.measure_format)  , sm.decimal_places))  p6_value,
  11.403 +       p7_key                         p7_key,
  11.404 +       DECODE(sm.decimal_places,NULL  ,siv.p7_value/TO_NUMBER(sm.measure_format)  ,ROUND(siv.p7_value/TO_NUMBER(sm.measure_format)  , sm.decimal_places))  p7_value,
  11.405 +       p8_key                         p8_key,
  11.406 +       DECODE(sm.decimal_places,NULL  ,siv.p8_value/TO_NUMBER(sm.measure_format)  ,ROUND(siv.p8_value/TO_NUMBER(sm.measure_format)  , sm.decimal_places))  p8_value,
  11.407 +       p9_key                         p9_key,
  11.408 +       DECODE(sm.decimal_places,NULL  ,siv.p9_value/TO_NUMBER(sm.measure_format)  ,ROUND(siv.p9_value/TO_NUMBER(sm.measure_format)  , sm.decimal_places))  p9_value,
  11.409 +       p10_key                        p10_key,
  11.410 +       DECODE(sm.decimal_places,NULL  ,siv.p10_value/TO_NUMBER(sm.measure_format) ,ROUND(siv.p10_value/TO_NUMBER(sm.measure_format) , sm.decimal_places))  p10_value,
  11.411 +       p11_key                        p11_key,
  11.412 +       DECODE(sm.decimal_places,NULL  ,siv.p11_value/TO_NUMBER(sm.measure_format) ,ROUND(siv.p11_value/TO_NUMBER(sm.measure_format) , sm.decimal_places))  p11_value,
  11.413 +       p12_key                        p12_key,
  11.414 +       DECODE(sm.decimal_places,NULL  ,siv.p12_value/TO_NUMBER(sm.measure_format) ,ROUND(siv.p12_value/TO_NUMBER(sm.measure_format) , sm.decimal_places))  p12_value,
  11.415 +       siv.action                     action,
  11.416 +       ss.plan_seq_no                 plan_seq_no,
  11.417 +       Budget_Process_Type_API.Encode(Measure_Version_API.Get_Budget_Process_Type(version,
  11.418 +                                                                                  siv.environment))
  11.419 +                                      budget_process_type,
  11.420 +       DECODE(sm.measure_format,'1',sm.description,sm.description ||' ('||sm.measure_format||' )' )                                            scorecard_object_desc,
  11.421 +       siv.rowid                      objid,
  11.422 +       ltrim(lpad(to_char(siv.rowversion,'YYYYMMDDHH24MISS'),2000)) objversion
  11.423 +FROM   scorecard_input_value_tab siv, scorecard_measure_tab sm, scorecard_structure_tab ss
  11.424 +WHERE  siv.scorecard_object = sm.measure
  11.425 +AND    siv.environment      =  ss.environment
  11.426 +AND    siv.scorecard        =  ss.scorecard
  11.427 +AND    siv.object_type      =  ss.child_level_type
  11.428 +AND    siv.scorecard_object =  ss.level_id
  11.429 +WITH   read only;
  11.430 +
  11.431 +COMMENT ON TABLE &VIEW3
  11.432 +   IS 'LU=&LU^PROMPT=Scorecard Input Value^MODULE=&MODULE^';
  11.433 +
  11.434 +COMMENT ON COLUMN &VIEW3..environment
  11.435 +   IS 'FLAGS=KMIU-^DATATYPE=STRING(10)^PROMPT=Environment^REF=ScorecardEnvironment^';
  11.436 +COMMENT ON COLUMN &VIEW3..scorecard
  11.437 +   IS 'FLAGS=KMIU-^DATATYPE=STRING(10)^PROMPT=Scorecard^REF=Scorecard(environment)^';
  11.438 +COMMENT ON COLUMN &VIEW3..year
  11.439 +   IS 'FLAGS=KMIU-^DATATYPE=STRING(20)^PROMPT=Year^REF=EnvironmentYear(environment)^';
  11.440 +COMMENT ON COLUMN &VIEW3..version
  11.441 +   IS 'FLAGS=KMI-L^DATATYPE=STRING(20)^PROMPT=Version^';
  11.442 +COMMENT ON COLUMN &VIEW3..scorecard_object
  11.443 +   IS 'FLAGS=KMIU-^DATATYPE=STRING(10)^PROMPT=Scorecard Object^';
  11.444 +COMMENT ON COLUMN &VIEW3..object_type
  11.445 +   IS 'FLAGS=AMIU-^DATATYPE=STRING(10)^PROMPT=Object Type^';
  11.446 +COMMENT ON COLUMN &VIEW3..year_value
  11.447 +   IS 'FLAGS=A-IU-^DATATYPE=NUMBER^PROMPT=Year Value^';
  11.448 +COMMENT ON COLUMN &VIEW3..p1_key
  11.449 +   IS 'FLAGS=A-IU-^DATATYPE=STRING(10)^PROMPT=P1 Key^';
  11.450 +COMMENT ON COLUMN &VIEW3..p1_value
  11.451 +   IS 'FLAGS=A-IU-^DATATYPE=NUMBER^PROMPT=P1 Value^';
  11.452 +COMMENT ON COLUMN &VIEW3..p2_key
  11.453 +   IS 'FLAGS=A-IU-^DATATYPE=STRING(10)^PROMPT=P2 Key^';
  11.454 +COMMENT ON COLUMN &VIEW3..p2_value
  11.455 +   IS 'FLAGS=A-IU-^DATATYPE=NUMBER^PROMPT=P2 Value^';
  11.456 +COMMENT ON COLUMN &VIEW3..p3_key
  11.457 +   IS 'FLAGS=A-IU-^DATATYPE=STRING(10)^PROMPT=P3 Key^';
  11.458 +COMMENT ON COLUMN &VIEW3..p3_value
  11.459 +   IS 'FLAGS=A-IU-^DATATYPE=NUMBER^PROMPT=P3 Value^';
  11.460 +COMMENT ON COLUMN &VIEW3..p4_key
  11.461 +   IS 'FLAGS=A-IU-^DATATYPE=STRING(10)^PROMPT=P4 Key^';
  11.462 +COMMENT ON COLUMN &VIEW3..p4_value
  11.463 +   IS 'FLAGS=A-IU-^DATATYPE=NUMBER^PROMPT=P4 Value^';
  11.464 +COMMENT ON COLUMN &VIEW3..p5_key
  11.465 +   IS 'FLAGS=A-IU-^DATATYPE=STRING(10)^PROMPT=P5 Key^';
  11.466 +COMMENT ON COLUMN &VIEW3..p5_value
  11.467 +   IS 'FLAGS=A-IU-^DATATYPE=NUMBER^PROMPT=P5 Value^';
  11.468 +COMMENT ON COLUMN &VIEW3..p6_key
  11.469 +   IS 'FLAGS=A-IU-^DATATYPE=STRING(10)^PROMPT=P6 Key^';
  11.470 +COMMENT ON COLUMN &VIEW3..p6_value
  11.471 +   IS 'FLAGS=A-IU-^DATATYPE=NUMBER^PROMPT=P6 Value^';
  11.472 +COMMENT ON COLUMN &VIEW3..p7_key
  11.473 +   IS 'FLAGS=A-IU-^DATATYPE=STRING(10)^PROMPT=P7 Key^';
  11.474 +COMMENT ON COLUMN &VIEW3..p7_value
  11.475 +   IS 'FLAGS=A-IU-^DATATYPE=NUMBER^PROMPT=P7 Value^';
  11.476 +COMMENT ON COLUMN &VIEW3..p8_key
  11.477 +   IS 'FLAGS=A-IU-^DATATYPE=STRING(10)^PROMPT=P8 Key^';
  11.478 +COMMENT ON COLUMN &VIEW3..p8_value
  11.479 +   IS 'FLAGS=A-IU-^DATATYPE=NUMBER^PROMPT=P8 Value^';
  11.480 +COMMENT ON COLUMN &VIEW3..p9_key
  11.481 +   IS 'FLAGS=A-IU-^DATATYPE=STRING(10)^PROMPT=P9 Key^';
  11.482 +COMMENT ON COLUMN &VIEW3..p9_value
  11.483 +   IS 'FLAGS=A-IU-^DATATYPE=NUMBER^PROMPT=P9 Value^';
  11.484 +COMMENT ON COLUMN &VIEW3..p10_key
  11.485 +   IS 'FLAGS=A-IU-^DATATYPE=STRING(10)^PROMPT=P10 Key^';
  11.486 +COMMENT ON COLUMN &VIEW3..p10_value
  11.487 +   IS 'FLAGS=A-IU-^DATATYPE=NUMBER^PROMPT=P10 Value^';
  11.488 +COMMENT ON COLUMN &VIEW3..p11_key
  11.489 +   IS 'FLAGS=A-IU-^DATATYPE=STRING(10)^PROMPT=P11 Key^';
  11.490 +COMMENT ON COLUMN &VIEW3..p11_value
  11.491 +   IS 'FLAGS=A-IU-^DATATYPE=NUMBER^PROMPT=P11 Value^';
  11.492 +COMMENT ON COLUMN &VIEW3..p12_key
  11.493 +   IS 'FLAGS=A-IU-^DATATYPE=STRING(10)^PROMPT=P12 Key^';
  11.494 +COMMENT ON COLUMN &VIEW3..p12_value
  11.495 +   IS 'FLAGS=A-IU-^DATATYPE=NUMBER^PROMPT=P12 Value^';
  11.496 +COMMENT ON COLUMN &VIEW3..action
  11.497 +   IS 'FLAGS=AMIUL^DATATYPE=STRING^PROMPT=Action^';
  11.498 +COMMENT ON COLUMN &VIEW3..plan_seq_no
  11.499 +   IS 'FLAGS=A---L^DATATYPE=STRING^PROMPT=Plan seq no^';
  11.500 +COMMENT ON COLUMN &VIEW3..budget_process_type
  11.501 +   IS 'FLAGS=A----^DATATYPE=STRING(10)^PROMPT=Budget Process Type^';
  11.502 +COMMENT ON COLUMN &VIEW3..scorecard_object_desc
  11.503 +   IS 'FLAGS=A----^DATATYPE=STRING(40)^PROMPT=Level Description^';
  11.504 +
  11.505 +--THIS VIEW IS USED AS A BASE FOR THE VIEW5 WHICH IS USED TO DISPLAY BUDGET REQUIREMENTS VS. TARGETS.
  11.506 +PROMPT Creating &VIEW4 view
  11.507 +
  11.508 +CREATE OR REPLACE FORCE VIEW &VIEW4 AS
  11.509 +SELECT environment                    environment,
  11.510 +       scorecard                      scorecard,
  11.511 +       year                           year,
  11.512 +       version                        version,
  11.513 +       scorecard_object               measure,
  11.514 +       p1_key                         period,
  11.515 +       p1_value                       period_value
  11.516 +FROM   scorecard_input_value_tab
  11.517 +WHERE  p1_key IS NOT NULL
  11.518 +UNION
  11.519 +SELECT environment                    environment,
  11.520 +       scorecard                      scorecard,
  11.521 +       year                           year,
  11.522 +       version                        version,
  11.523 +       scorecard_object               scorecard_object,
  11.524 +       p2_key                         period,
  11.525 +       p2_value                       period_value
  11.526 +FROM   scorecard_input_value_tab
  11.527 +WHERE  p2_key IS NOT NULL
  11.528 +UNION
  11.529 +SELECT environment                    environment,
  11.530 +       scorecard                      scorecard,
  11.531 +       year                           year,
  11.532 +       version                        version,
  11.533 +       scorecard_object               measure,
  11.534 +       p3_key                         period,
  11.535 +       p3_value                       period_value
  11.536 +FROM   scorecard_input_value_tab
  11.537 +WHERE  p3_key IS NOT NULL
  11.538 +UNION
  11.539 +SELECT environment                    environment,
  11.540 +       scorecard                      scorecard,
  11.541 +       year                           year,
  11.542 +       version                        version,
  11.543 +       scorecard_object               measure,
  11.544 +       p4_key                         period,
  11.545 +       p4_value                       period_value
  11.546 +FROM   scorecard_input_value_tab
  11.547 +WHERE  p4_key IS NOT NULL
  11.548 +UNION
  11.549 +SELECT environment                    environment,
  11.550 +       scorecard                      scorecard,
  11.551 +       year                           year,
  11.552 +       version                        version,
  11.553 +       scorecard_object               measure,
  11.554 +       p5_key                         period,
  11.555 +       p5_value                       period_value
  11.556 +FROM   scorecard_input_value_tab
  11.557 +WHERE  p5_key IS NOT NULL
  11.558 +UNION
  11.559 +SELECT environment                    environment,
  11.560 +       scorecard                      scorecard,
  11.561 +       year                           year,
  11.562 +       version                        version,
  11.563 +       scorecard_object               measure,
  11.564 +       p6_key                         period,
  11.565 +       p6_value                       period_value
  11.566 +FROM   scorecard_input_value_tab
  11.567 +WHERE  p6_key IS NOT NULL
  11.568 +UNION
  11.569 +SELECT environment                    environment,
  11.570 +       scorecard                      scorecard,
  11.571 +       year                           year,
  11.572 +       version                        version,
  11.573 +       scorecard_object               measure,
  11.574 +       p7_key                         period,
  11.575 +       p7_value                       period_value
  11.576 +FROM   scorecard_input_value_tab
  11.577 +WHERE  p7_key IS NOT NULL
  11.578 +UNION
  11.579 +SELECT environment                    environment,
  11.580 +       scorecard                      scorecard,
  11.581 +       year                           year,
  11.582 +       version                        version,
  11.583 +       scorecard_object               measure,
  11.584 +       p8_key                         period,
  11.585 +       p8_value                       period_value
  11.586 +FROM   scorecard_input_value_tab
  11.587 +WHERE  p8_key IS NOT NULL
  11.588 +UNION
  11.589 +SELECT environment                    environment,
  11.590 +       scorecard                      scorecard,
  11.591 +       year                           year,
  11.592 +       version                        version,
  11.593 +       scorecard_object               measure,
  11.594 +       p9_key                         period,
  11.595 +       p9_value                       period_value
  11.596 +FROM   scorecard_input_value_tab
  11.597 +WHERE  p9_key IS NOT NULL
  11.598 +UNION
  11.599 +SELECT environment                    environment,
  11.600 +       scorecard                      scorecard,
  11.601 +       year                           year,
  11.602 +       version                        version,
  11.603 +       scorecard_object               measure,
  11.604 +       p10_key                        period,
  11.605 +       p10_value                      period_value
  11.606 +FROM   scorecard_input_value_tab
  11.607 +WHERE  p10_key IS NOT NULL
  11.608 +UNION
  11.609 +SELECT environment                    environment,
  11.610 +       scorecard                      scorecard,
  11.611 +       year                           year,
  11.612 +       version                        version,
  11.613 +       scorecard_object               measure,
  11.614 +       p11_key                        period,
  11.615 +       p11_value                      period_value
  11.616 +FROM   scorecard_input_value_tab
  11.617 +WHERE  p11_key IS NOT NULL
  11.618 +UNION
  11.619 +SELECT environment                    environment,
  11.620 +       scorecard                      scorecard,
  11.621 +       year                           year,
  11.622 +       version                        version,
  11.623 +       scorecard_object               measure,
  11.624 +       p12_key                        period,
  11.625 +       p12_value                      period_value
  11.626 +FROM   scorecard_input_value_tab
  11.627 +WHERE  p12_key IS NOT NULL
  11.628 +WITH   read only;
  11.629 +
  11.630 +COMMENT ON TABLE &VIEW4
  11.631 +   IS 'LU=&LU^PROMPT=View Budget Requirements/Targets[BASE]^MODULE=&MODULE^';
  11.632 +
  11.633 +
  11.634 +--THIS VIEW IS USED TO DISPLAY BUDGET REQUIREMENTS VS. TARGETS.[Client is BudgetRequirementsTargets.java]
  11.635 +PROMPT Creating &VIEW5 view
  11.636 +-- Bug 63415, begin, Added another condition to where clause of the view
  11.637 +CREATE OR REPLACE FORCE VIEW &VIEW5 AS
  11.638 +SELECT t1.environment                    environment,
  11.639 +       t1.scorecard                      scorecard,
  11.640 +       t1.year                           year,
  11.641 +       t1.version                        version,
  11.642 +       t1.measure                        measure,
  11.643 +       t1.period                         period,
  11.644 +       t1.period_value/TO_NUMBER(t5.measure_format)  planned_value,
  11.645 +       t2.period_value/TO_NUMBER(t5.measure_format)  target_value
  11.646 +FROM   &VIEW4 t1,
  11.647 +       &VIEW4 t2,
  11.648 +       measure_version_tab t3,
  11.649 +       measure_version_tab t4,
  11.650 +       scorecard_measure_tab t5
  11.651 +WHERE  t1.environment          = t2.environment
  11.652 +AND    t1.scorecard            = t2.scorecard
  11.653 +AND    t1.year                 = t2.YEAR
  11.654 +AND    t5.measure              = t2.measure
  11.655 +AND    t1.measure              = t2.measure
  11.656 +AND    t1.period               = t2.period
  11.657 +AND    t1.environment          = t3.environment
  11.658 +AND    t1.version              = t3.version
  11.659 +AND    t2.environment          = t4.environment
  11.660 +AND    t2.version              = t4.version
  11.661 +AND    t3.budget_process_type  = 'BUDPLAN'
  11.662 +AND    t4.budget_process_type  = 'TARGET'
  11.663 +AND    ((t1.measure IN (SELECT measure
  11.664 +                       FROM   measure_role_access_tab
  11.665 +                       WHERE  role IN (SELECT oracle_role
  11.666 +                                       FROM   fnd_user_role_runtime
  11.667 +                                       WHERE  identity  = (SELECT fnd_user
  11.668 +                                                           FROM   fnd_session))))
  11.669 +        OR t1.measure IN (SELECT measure
  11.670 +                          FROM   measure_user_access_tab
  11.671 +                          WHERE  identity = (SELECT fnd_user
  11.672 +                                             FROM   fnd_session))
  11.673 +        OR EXISTS (SELECT 1
  11.674 +                  FROM  BP_ADMINISTRATOR_TAB
  11.675 +                  WHERE identity = (SELECT fnd_user
  11.676 +                                    FROM   fnd_session)))
  11.677 +AND   (t1.scorecard IN (SELECT scorecard
  11.678 +                        FROM   scorecard_user_access_tab
  11.679 +                        WHERE  identity = (SELECT fnd_user
  11.680 +                                           FROM   fnd_session)
  11.681 +                        AND environment = t1.environment
  11.682 +                        AND scorecard   = t1.scorecard)
  11.683 +       OR t1.scorecard IN (SELECT scorecard
  11.684 +                           FROM   scorecard_role_access_tab
  11.685 +                           WHERE  environment = t1.environment
  11.686 +                           AND    scorecard   = t1.scorecard
  11.687 +                           AND    role IN (SELECT oracle_role
  11.688 +                                           FROM   fnd_user_role_runtime
  11.689 +                                           WHERE  identity = (SELECT fnd_user
  11.690 +                                                              FROM   fnd_session)))
  11.691 +       OR EXISTS (SELECT 1
  11.692 +                  FROM BP_ADMINISTRATOR_TAB
  11.693 +                  WHERE identity = (SELECT fnd_user
  11.694 +                                    FROM   fnd_session)))
  11.695 +WITH   read only;
  11.696 +
  11.697 +COMMENT ON TABLE &VIEW5
  11.698 +   IS 'LU=&LU^PROMPT=View Budget Requirements/Targets^MODULE=&MODULE^';
  11.699 +
  11.700 +COMMENT ON COLUMN &VIEW5..environment
  11.701 +   IS 'FLAGS=KMIU-^DATATYPE=STRING(10)^PROMPT=Environment^';
  11.702 +COMMENT ON COLUMN &VIEW5..scorecard
  11.703 +   IS 'FLAGS=KMIU-^DATATYPE=STRING(10)^PROMPT=Scorecard^';
  11.704 +COMMENT ON COLUMN &VIEW5..year
  11.705 +   IS 'FLAGS=KMIU-^DATATYPE=STRING(20)^PROMPT=Year^';
  11.706 +COMMENT ON COLUMN &VIEW5..version
  11.707 +   IS 'FLAGS=KMI-L^DATATYPE=STRING(20)^PROMPT=Version^';
  11.708 +COMMENT ON COLUMN &VIEW5..measure
  11.709 +   IS 'FLAGS=KMIU-^DATATYPE=STRING(10)^PROMPT=Measure^';
  11.710 +COMMENT ON COLUMN &VIEW5..period
  11.711 +   IS 'FLAGS=A-IU-^DATATYPE=STRING(10)^PROMPT=Period^';
  11.712 +COMMENT ON COLUMN &VIEW5..planned_value
  11.713 +   IS 'FLAGS=A-IU-^DATATYPE=NUMBER^PROMPT=Planned Value^';
  11.714 +COMMENT ON COLUMN &VIEW5..target_value
  11.715 +   IS 'FLAGS=A-IU-^DATATYPE=NUMBER^PROMPT=Target Value^';
  11.716 +
  11.717 +-- Bug 63415, end
  11.718 +
  11.719 +
  11.720 +
  11.721 +-- Bug 63415, end
  11.722 +
  11.723 +-----------------------------------------------------------------------------
  11.724 +-------------------- PACKAGES FOR METHODS -----------------------------------
  11.725 +-----------------------------------------------------------------------------
  11.726 +
  11.727 +PROMPT Creating &PKG implementation
  11.728 +
  11.729 +CREATE OR REPLACE PACKAGE BODY &PKG IS
  11.730 +
  11.731 +-----------------------------------------------------------------------------
  11.732 +-------------------- FINITE STATE DECLARATIONS ------------------------------
  11.733 +-----------------------------------------------------------------------------
  11.734 +db_state_list_     CONSTANT VARCHAR2(13) := 'Open^Planned^';
  11.735 +client_state_list_ CONSTANT VARCHAR2(13) := 'Open^Planned^';
  11.736 +active_state_list_          VARCHAR2(52) := Language_SYS.Translate_State_(lu_name_, client_state_list_);
  11.737 +state_separator_   CONSTANT VARCHAR2(1)  := Client_SYS.field_separator_;
  11.738 +
  11.739 +bp_installed_      CONSTANT BOOLEAN      := Dictionary_SYS.Component_Is_Installed('BUDPRO');
  11.740 +-----------------------------------------------------------------------------
  11.741 +-------------------- LU SPECIFIC IMPLEMENTATION METHOD DECLARATIONS ---------
  11.742 +-----------------------------------------------------------------------------
  11.743 +
  11.744 +
  11.745 +PROCEDURE Distribute_Input_Values___ (
  11.746 +   environment_ IN VARCHAR2,
  11.747 +   scorecard_ IN VARCHAR2,
  11.748 +   year_ IN VARCHAR2,
  11.749 +   version_ IN VARCHAR2,
  11.750 +   object_type_ IN VARCHAR2,
  11.751 +   period_count_ IN NUMBER,
  11.752 +   scorecard_object_ IN VARCHAR2 );
  11.753 +--PROCHEAD.Start_Publish_Environments___
  11.754 +
  11.755 +
  11.756 +PROCEDURE Object_Planned_Date___ (
  11.757 +   rec_  IN     &TABLE%ROWTYPE,
  11.758 +   attr_ IN OUT VARCHAR2 );
  11.759 +
  11.760 +FUNCTION Find_Column___(
  11.761 +   environment_      IN VARCHAR2,
  11.762 +   scorecard_        IN VARCHAR2,
  11.763 +   year_             IN VARCHAR2,
  11.764 +   version_          IN VARCHAR2,
  11.765 +   scorecard_object_ IN VARCHAR2,
  11.766 +   key_              IN VARCHAR2) RETURN VARCHAR2;
  11.767 +-----------------------------------------------------------------------------
  11.768 +-------------------- IMPLEMENTATION BASE METHODS ----------------------------
  11.769 +-----------------------------------------------------------------------------
  11.770 +-- Lock_By_Id___
  11.771 +--    Client-support to lock a specific instance of the logical unit.
  11.772 +--
  11.773 +-- Lock_By_Keys___
  11.774 +--    Server support to lock a specific instance of the logical unit.
  11.775 +--
  11.776 +-- Get_Object_By_Id___
  11.777 +--    Get LU-record from the database with a specified object identity.
  11.778 +--
  11.779 +-- Get_Object_By_Keys___
  11.780 +--    Get LU-record from the database with specified key columns.
  11.781 +--
  11.782 +-- Check_Exist___
  11.783 +--    Check if a specific LU-instance already exist in the database.
  11.784 +--
  11.785 +-- Get_Id_Version_By_Keys___
  11.786 +--    Get the current OBJID and OBJVERSION for a specific LU-instance.
  11.787 +-----------------------------------------------------------------------------
  11.788 +
  11.789 +FUNCTION Lock_By_Id___ (
  11.790 +   objid_      IN  VARCHAR2,
  11.791 +   objversion_ IN  VARCHAR2 ) RETURN &TABLE%ROWTYPE
  11.792 +IS
  11.793 +   row_changed EXCEPTION;
  11.794 +   row_deleted EXCEPTION;
  11.795 +   row_locked  EXCEPTION;
  11.796 +   PRAGMA      exception_init(row_locked, -0054);
  11.797 +   rec_        &TABLE%ROWTYPE;
  11.798 +   dummy_      NUMBER;
  11.799 +   CURSOR lock_control IS
  11.800 +      SELECT *
  11.801 +      FROM   &TABLE
  11.802 +      WHERE  &OBJID = objid_
  11.803 +      AND    &OBJVERSION = objversion_
  11.804 +      FOR UPDATE NOWAIT;
  11.805 +   CURSOR exist_control IS
  11.806 +      SELECT 1
  11.807 +      FROM   &TABLE
  11.808 +      WHERE  &OBJID = objid_;
  11.809 +BEGIN
  11.810 +   OPEN lock_control;
  11.811 +   FETCH lock_control INTO rec_;
  11.812 +   IF (lock_control%FOUND) THEN
  11.813 +      CLOSE lock_control;
  11.814 +      RETURN rec_;
  11.815 +   END IF;
  11.816 +   CLOSE lock_control;
  11.817 +   OPEN exist_control;
  11.818 +   FETCH exist_control INTO dummy_;
  11.819 +   IF (exist_control%FOUND) THEN
  11.820 +      CLOSE exist_control;
  11.821 +      RAISE row_changed;
  11.822 +   ELSE
  11.823 +      CLOSE exist_control;
  11.824 +      RAISE row_deleted;
  11.825 +   END IF;
  11.826 +EXCEPTION
  11.827 +   WHEN row_locked THEN
  11.828 +      Error_SYS.Record_Locked(lu_name_);
  11.829 +   WHEN row_changed THEN
  11.830 +      Error_SYS.Record_Modified(lu_name_);
  11.831 +   WHEN row_deleted THEN
  11.832 +      Error_SYS.Record_Removed(lu_name_);
  11.833 +END Lock_By_Id___;
  11.834 +
  11.835 +FUNCTION Lock_By_Keys___ (
  11.836 +   environment_ IN VARCHAR2,
  11.837 +   scorecard_ IN VARCHAR2,
  11.838 +   year_ IN VARCHAR2,
  11.839 +   version_ IN VARCHAR2,
  11.840 +   scorecard_object_ IN VARCHAR2 ) RETURN &TABLE%ROWTYPE
  11.841 +IS
  11.842 +   row_deleted EXCEPTION;
  11.843 +   rec_        &TABLE%ROWTYPE;
  11.844 +   CURSOR lock_control IS
  11.845 +      SELECT *
  11.846 +      FROM  &TABLE
  11.847 +      WHERE environment = environment_
  11.848 +      AND   scorecard = scorecard_
  11.849 +      AND   year = year_
  11.850 +      AND   version = version_
  11.851 +      AND   scorecard_object = scorecard_object_
  11.852 +      FOR UPDATE;
  11.853 +BEGIN
  11.854 +   OPEN lock_control;
  11.855 +   FETCH lock_control INTO rec_;
  11.856 +   IF (lock_control%FOUND) THEN
  11.857 +      CLOSE lock_control;
  11.858 +      RETURN rec_;
  11.859 +   ELSE
  11.860 +      CLOSE lock_control;
  11.861 +      RAISE row_deleted;
  11.862 +   END IF;
  11.863 +EXCEPTION
  11.864 +   WHEN row_deleted THEN
  11.865 +      Error_SYS.Record_Removed(lu_name_);
  11.866 +END Lock_By_Keys___;
  11.867 +
  11.868 +FUNCTION Get_Object_By_Id___ (
  11.869 +   objid_ IN VARCHAR2 ) RETURN &TABLE%ROWTYPE
  11.870 +IS
  11.871 +   lu_rec_ &TABLE%ROWTYPE;
  11.872 +   CURSOR getrec IS
  11.873 +      SELECT *
  11.874 +      FROM   &TABLE
  11.875 +      WHERE  &OBJID = objid_;
  11.876 +BEGIN
  11.877 +   OPEN getrec;
  11.878 +   FETCH getrec INTO lu_rec_;
  11.879 +   IF (getrec%NOTFOUND) THEN
  11.880 +      CLOSE getrec;
  11.881 +      Error_SYS.Record_Removed(lu_name_);
  11.882 +   END IF;
  11.883 +   CLOSE getrec;
  11.884 +   RETURN(lu_rec_);
  11.885 +END Get_Object_By_Id___;
  11.886 +
  11.887 +
  11.888 +FUNCTION Get_Object_By_Keys___ (
  11.889 +   environment_ IN VARCHAR2,
  11.890 +   scorecard_ IN VARCHAR2,
  11.891 +   year_ IN VARCHAR2,
  11.892 +   version_ IN VARCHAR2,
  11.893 +   scorecard_object_ IN VARCHAR2 ) RETURN &TABLE%ROWTYPE
  11.894 +IS
  11.895 +   lu_rec_ &TABLE%ROWTYPE;
  11.896 +   CURSOR getrec IS
  11.897 +      SELECT *
  11.898 +      FROM  &TABLE
  11.899 +      WHERE environment = environment_
  11.900 +      AND   scorecard = scorecard_
  11.901 +      AND   year = year_
  11.902 +      AND   version = version_
  11.903 +      AND   scorecard_object = scorecard_object_;
  11.904 +BEGIN
  11.905 +   OPEN getrec;
  11.906 +   FETCH getrec INTO lu_rec_;
  11.907 +   CLOSE getrec;
  11.908 +   RETURN(lu_rec_);
  11.909 +END Get_Object_By_Keys___;
  11.910 +
  11.911 +FUNCTION Check_Exist___ (
  11.912 +   environment_ IN VARCHAR2,
  11.913 +   scorecard_ IN VARCHAR2,
  11.914 +   year_ IN VARCHAR2,
  11.915 +   version_ IN VARCHAR2,
  11.916 +   scorecard_object_ IN VARCHAR2 ) RETURN BOOLEAN
  11.917 +IS
  11.918 +   dummy_ NUMBER;
  11.919 +   CURSOR exist_control IS
  11.920 +      SELECT 1
  11.921 +      FROM   &TABLE
  11.922 +      WHERE environment = environment_
  11.923 +      AND   scorecard = scorecard_
  11.924 +      AND   year = year_
  11.925 +      AND   version = version_
  11.926 +      AND   scorecard_object = scorecard_object_;
  11.927 +BEGIN
  11.928 +   OPEN exist_control;
  11.929 +   FETCH exist_control INTO dummy_;
  11.930 +   IF (exist_control%FOUND) THEN
  11.931 +      CLOSE exist_control;
  11.932 +      RETURN(TRUE);
  11.933 +   END IF;
  11.934 +   CLOSE exist_control;
  11.935 +   RETURN(FALSE);
  11.936 +END Check_Exist___;
  11.937 +
  11.938 +PROCEDURE Get_Id_Version_By_Keys___ (
  11.939 +   objid_      IN OUT VARCHAR2,
  11.940 +   objversion_ IN OUT VARCHAR2,
  11.941 +   environment_ IN VARCHAR2,
  11.942 +   scorecard_ IN VARCHAR2,
  11.943 +   year_ IN VARCHAR2,
  11.944 +   version_ IN VARCHAR2,
  11.945 +   scorecard_object_ IN VARCHAR2)
  11.946 +IS
  11.947 +   CURSOR get_version IS
  11.948 +   SELECT &OBJID, &OBJVERSION
  11.949 +      FROM  &TABLE
  11.950 +      WHERE environment = environment_
  11.951 +      AND   scorecard = scorecard_
  11.952 +      AND   year = year_
  11.953 +      AND   version = version_
  11.954 +      AND   scorecard_object = scorecard_object_;
  11.955 +BEGIN
  11.956 +   OPEN get_version;
  11.957 +   FETCH get_version INTO objid_, objversion_;
  11.958 +   CLOSE get_version;
  11.959 +END Get_Id_Version_By_Keys___;
  11.960 +
  11.961 +-----------------------------------------------------------------------------
  11.962 +-------------------- IMPLEMENTATION FINITE STATE MACHINE --------------------
  11.963 +-----------------------------------------------------------------------------
  11.964 +-- Finite_State_Set___
  11.965 +--    Updates the finite state indicator for an existing LU-instance.
  11.966 +--
  11.967 +-- Finite_State_Machine___
  11.968 +--    Processes an event by:
  11.969 +--    1. Fetching the current state
  11.970 +--    2. Evaluating any conditions for given event at current state
  11.971 +--    3. executing any exit code for the old state
  11.972 +--    4. Performing any action associated with given event
  11.973 +--    5. update the database to the new state
  11.974 +--    6. execute any entry code for the new state
  11.975 +--    7. Executing a state change to the new state
  11.976 +--
  11.977 +-- Finite_State_Add_To_Attr___
  11.978 +--    Adds the current state and allowed events to the attribute string.
  11.979 +--
  11.980 +-- Finite_State_Init___
  11.981 +--    Sets the initial finite state indicator for an existing LU-instance
  11.982 +--    and processes any automatic events.
  11.983 +-----------------------------------------------------------------------------
  11.984 +PROCEDURE Finite_State_Set___ (
  11.985 +   rec_   IN OUT &TABLE%ROWTYPE,
  11.986 +   state_ IN     VARCHAR2 )
  11.987 +IS
  11.988 +BEGIN
  11.989 +   rec_.rowversion := sysdate;
  11.990 +    UPDATE scorecard_input_value_tab
  11.991 +      SET &OBJSTATE = state_,
  11.992 +          mea_state_change_date = rec_.rowversion,
  11.993 +          rowversion = rec_.rowversion
  11.994 +      WHERE environment = rec_.environment
  11.995 +      AND   scorecard = rec_.scorecard
  11.996 +      AND   year = rec_.year
  11.997 +      AND   version = rec_.version
  11.998 +      AND   scorecard_object = rec_.scorecard_object;
  11.999 +   rec_.rowstate := state_;
 11.1000 +END Finite_State_Set___;
 11.1001 +PROCEDURE Finite_State_Machine___ (
 11.1002 +   rec_   IN OUT &TABLE%ROWTYPE,
 11.1003 +   event_ IN     VARCHAR2,
 11.1004 +   attr_  IN OUT VARCHAR2 )
 11.1005 +IS
 11.1006 +   state_ VARCHAR2(30);
 11.1007 +BEGIN
 11.1008 +   state_ := rec_.rowstate;
 11.1009 +   IF (state_ IS NULL) THEN
 11.1010 +      IF (event_ IS NULL) THEN
 11.1011 +         rec_.rowstate := 'Open';
 11.1012 +      ELSE
 11.1013 +         Error_SYS.State_Event_Not_Handled(lu_name_, event_, Finite_State_Decode__(state_));
 11.1014 +      END IF;
 11.1015 +   ELSIF (state_ = 'Open') THEN
 11.1016 +      IF (event_ = 'Plan') THEN
 11.1017 +         Finite_State_Set___(rec_, 'Planned');
 11.1018 +      ELSE
 11.1019 +         Error_SYS.State_Event_Not_Handled(lu_name_, event_, Finite_State_Decode__(state_));
 11.1020 +      END IF;
 11.1021 +   ELSIF (state_ = 'Planned') THEN
 11.1022 +      IF (event_ = 'Plan') THEN
 11.1023 +         Object_Planned_Date___(rec_, attr_);
 11.1024 +      ELSE
 11.1025 +         Error_SYS.State_Event_Not_Handled(lu_name_, event_, Finite_State_Decode__(state_));
 11.1026 +      END IF;
 11.1027 +   ELSE
 11.1028 +      Error_SYS.State_Not_Exist(lu_name_, Finite_State_Decode__(state_));
 11.1029 +   END IF;
 11.1030 +END Finite_State_Machine___;
 11.1031 +PROCEDURE Finite_State_Add_To_Attr___ (
 11.1032 +   rec_   IN     &TABLE%ROWTYPE,
 11.1033 +   attr_  IN OUT VARCHAR2 )
 11.1034 +IS
 11.1035 +   state_ VARCHAR2(30);
 11.1036 +BEGIN
 11.1037 +   state_ := rec_.rowstate;
 11.1038 +   Client_SYS.Add_To_Attr('__OBJSTATE', state_, attr_);
 11.1039 +   Client_SYS.Add_To_Attr('__OBJEVENTS', Finite_State_Events__(state_), attr_);
 11.1040 +   Client_SYS.Add_To_Attr('STATE', Finite_State_Decode__(state_), attr_);
 11.1041 +END Finite_State_Add_To_Attr___;
 11.1042 +PROCEDURE Finite_State_Init___ (
 11.1043 +   rec_  IN OUT &TABLE%ROWTYPE,
 11.1044 +   attr_ IN OUT VARCHAR2 )
 11.1045 +IS
 11.1046 +   state_ VARCHAR2(30);
 11.1047 +BEGIN
 11.1048 +   Finite_State_Machine___(rec_, NULL, attr_);
 11.1049 +   Finite_State_Add_To_Attr___(rec_, attr_);
 11.1050 +END Finite_State_Init___;
 11.1051 +-----------------------------------------------------------------------------
 11.1052 +-------------------- PRIVATE FINITE STATE MACHINE ---------------------------
 11.1053 +-----------------------------------------------------------------------------
 11.1054 +-- Finite_State_Decode__
 11.1055 +--   Returns the client equivalent for any database representation of
 11.1056 +--   a state name = objstate.
 11.1057 +--
 11.1058 +-- Finite_State_Encode__
 11.1059 +--   Returns the database equivalent for any client representation of
 11.1060 +--   a state name = state.
 11.1061 +--
 11.1062 +-- Enumerate_States__
 11.1063 +--   Returns a list of all possible finite states in client terminology.
 11.1064 +--
 11.1065 +-- Finite_State_Events__
 11.1066 +--   Returns a list of allowed events for a given state
 11.1067 +--   NOTE! Regardless of conditions if not otherwize encoded
 11.1068 +--
 11.1069 +-- Enumerate_Events__
 11.1070 +--   Returns a list of all possible events.
 11.1071 +-----------------------------------------------------------------------------
 11.1072 +FUNCTION Finite_State_Decode__ (
 11.1073 +   db_state_ IN VARCHAR2 ) RETURN VARCHAR2
 11.1074 +IS
 11.1075 +BEGIN
 11.1076 +   RETURN(Domain_SYS.Decode_(active_state_list_, db_state_list_, db_state_));
 11.1077 +END Finite_State_Decode__;
 11.1078 +FUNCTION Finite_State_Encode__ (
 11.1079 +   client_state_ IN VARCHAR2 ) RETURN VARCHAR2
 11.1080 +IS
 11.1081 +BEGIN
 11.1082 +   RETURN(Domain_SYS.Encode_(active_state_list_, db_state_list_, client_state_));
 11.1083 +END Finite_State_Encode__;
 11.1084 +PROCEDURE Enumerate_States__ (
 11.1085 +   client_values_ OUT VARCHAR2)
 11.1086 +IS
 11.1087 +BEGIN
 11.1088 +   client_values_ := Domain_SYS.Enumerate_(active_state_list_);
 11.1089 +END Enumerate_States__;
 11.1090 +FUNCTION Finite_State_Events__ (
 11.1091 +   db_state_ IN VARCHAR2 ) RETURN VARCHAR2
 11.1092 +IS
 11.1093 +BEGIN
 11.1094 +   IF (db_state_ IS NULL) THEN
 11.1095 +      RETURN NULL;
 11.1096 +   ELSIF (db_state_ = 'Open') THEN
 11.1097 +      RETURN 'Plan^';
 11.1098 +   ELSIF (db_state_ = 'Planned') THEN
 11.1099 +      RETURN 'Plan^';
 11.1100 +   ELSE
 11.1101 +      RETURN NULL;
 11.1102 +   END IF;
 11.1103 +END Finite_State_Events__;
 11.1104 +PROCEDURE Enumerate_Events__ (
 11.1105 +   db_events_ OUT VARCHAR2 )
 11.1106 +IS
 11.1107 +BEGIN
 11.1108 +   db_events_ := 'Plan^';
 11.1109 +END Enumerate_Events__;
 11.1110 +-----------------------------------------------------------------------------
 11.1111 +-------------------- IMPLEMENTATION BASE METHODS FOR INSERT -----------------
 11.1112 +-----------------------------------------------------------------------------
 11.1113 +-- Prepare_Insert___
 11.1114 +--    Set all default values for a new instance (ON-NEW-RECORD) of this
 11.1115 +--    logical unit by calling procedure Add_Attr.
 11.1116 +--
 11.1117 +-- Unpack_Check_Insert___
 11.1118 +--    Unpack the attribute list, check all attributes from the client
 11.1119 +--    and generate all default values before creation of the new object.
 11.1120 +--
 11.1121 +-- Insert___
 11.1122 +--    Insert a new LU-instance into the database and return the values
 11.1123 +--    for OBJID and OBJVERSION.
 11.1124 +-----------------------------------------------------------------------------
 11.1125 +
 11.1126 +PROCEDURE Prepare_Insert___ (
 11.1127 +   attr_ IN OUT VARCHAR2 )
 11.1128 +IS
 11.1129 +BEGIN
 11.1130 +   Client_SYS.Clear_Attr(attr_);
 11.1131 +END Prepare_Insert___;
 11.1132 +
 11.1133 +
 11.1134 +PROCEDURE Unpack_Check_Insert___ (
 11.1135 +   attr_   IN OUT VARCHAR2,
 11.1136 +   newrec_ IN OUT &TABLE%ROWTYPE )
 11.1137 +IS
 11.1138 +   ptr_   NUMBER;
 11.1139 +   name_  VARCHAR2(30);
 11.1140 +   value_ VARCHAR2(2000);
 11.1141 +
 11.1142 +   measure_format_    NUMBER;
 11.1143 +
 11.1144 +BEGIN
 11.1145 +   ptr_ := NULL;
 11.1146 +   WHILE (Client_SYS.Get_Next_From_Attr(attr_, ptr_, name_, value_)) LOOP
 11.1147 +      IF (name_ = 'ENVIRONMENT') THEN
 11.1148 +         newrec_.environment := value_;
 11.1149 +         Scorecard_Environment_API.Exist(newrec_.environment);
 11.1150 +      ELSIF (name_ = 'SCORECARD') THEN
 11.1151 +         newrec_.scorecard := value_;
 11.1152 +         Scorecard_API.Exist(newrec_.environment, newrec_.scorecard);
 11.1153 +      ELSIF (name_ = 'YEAR') THEN
 11.1154 +         newrec_.year := value_;
 11.1155 +         Environment_Year_API.Exist(newrec_.environment, newrec_.year);
 11.1156 +      ELSIF (name_ = 'VERSION') THEN
 11.1157 +         newrec_.version := value_;
 11.1158 +      ELSIF (name_ = 'SCORECARD_OBJECT') THEN
 11.1159 +         newrec_.scorecard_object := value_;
 11.1160 +      ELSIF (name_ = 'OBJECT_TYPE') THEN
 11.1161 +         newrec_.object_type := value_;
 11.1162 +      ELSIF (name_ = 'YEAR_VALUE') THEN
 11.1163 +         newrec_.year_value := Client_SYS.Attr_Value_To_Number(value_);
 11.1164 +      ELSIF (name_ = 'P1_KEY') THEN
 11.1165 +         newrec_.p1_key := value_;
 11.1166 +      ELSIF (name_ = 'P1_VALUE') THEN
 11.1167 +         newrec_.p1_value := Client_SYS.Attr_Value_To_Number(value_);
 11.1168 +      ELSIF (name_ = 'P2_KEY') THEN
 11.1169 +         newrec_.p2_key := value_;
 11.1170 +      ELSIF (name_ = 'P2_VALUE') THEN
 11.1171 +         newrec_.p2_value := Client_SYS.Attr_Value_To_Number(value_);
 11.1172 +      ELSIF (name_ = 'P3_KEY') THEN
 11.1173 +         newrec_.p3_key := value_;
 11.1174 +      ELSIF (name_ = 'P3_VALUE') THEN
 11.1175 +         newrec_.p3_value := Client_SYS.Attr_Value_To_Number(value_);
 11.1176 +      ELSIF (name_ = 'P4_KEY') THEN
 11.1177 +         newrec_.p4_key := value_;
 11.1178 +      ELSIF (name_ = 'P4_VALUE') THEN
 11.1179 +         newrec_.p4_value := Client_SYS.Attr_Value_To_Number(value_);
 11.1180 +      ELSIF (name_ = 'P5_KEY') THEN
 11.1181 +         newrec_.p5_key := value_;
 11.1182 +      ELSIF (name_ = 'P5_VALUE') THEN
 11.1183 +         newrec_.p5_value := Client_SYS.Attr_Value_To_Number(value_);
 11.1184 +      ELSIF (name_ = 'P6_KEY') THEN
 11.1185 +         newrec_.p6_key := value_;
 11.1186 +      ELSIF (name_ = 'P6_VALUE') THEN
 11.1187 +         newrec_.p6_value := Client_SYS.Attr_Value_To_Number(value_);
 11.1188 +      ELSIF (name_ = 'P7_KEY') THEN
 11.1189 +         newrec_.p7_key := value_;
 11.1190 +      ELSIF (name_ = 'P7_VALUE') THEN
 11.1191 +         newrec_.p7_value := Client_SYS.Attr_Value_To_Number(value_);
 11.1192 +      ELSIF (name_ = 'P8_KEY') THEN
 11.1193 +         newrec_.p8_key := value_;
 11.1194 +      ELSIF (name_ = 'P8_VALUE') THEN
 11.1195 +         newrec_.p8_value := Client_SYS.Attr_Value_To_Number(value_);
 11.1196 +      ELSIF (name_ = 'P9_KEY') THEN
 11.1197 +         newrec_.p9_key := value_;
 11.1198 +      ELSIF (name_ = 'P9_VALUE') THEN
 11.1199 +         newrec_.p9_value := Client_SYS.Attr_Value_To_Number(value_);
 11.1200 +      ELSIF (name_ = 'P10_KEY') THEN
 11.1201 +         newrec_.p10_key := value_;
 11.1202 +      ELSIF (name_ = 'P10_VALUE') THEN
 11.1203 +         newrec_.p10_value := Client_SYS.Attr_Value_To_Number(value_);
 11.1204 +      ELSIF (name_ = 'P11_KEY') THEN
 11.1205 +         newrec_.p11_key := value_;
 11.1206 +      ELSIF (name_ = 'P11_VALUE') THEN
 11.1207 +         newrec_.p11_value := Client_SYS.Attr_Value_To_Number(value_);
 11.1208 +      ELSIF (name_ = 'P12_KEY') THEN
 11.1209 +         newrec_.p12_key := value_;
 11.1210 +      ELSIF (name_ = 'P12_VALUE') THEN
 11.1211 +         newrec_.p12_value := Client_SYS.Attr_Value_To_Number(value_);
 11.1212 +      ELSIF (name_ = 'ACTION') THEN
 11.1213 +         newrec_.action := value_;
 11.1214 +      ELSIF (name_ = 'MEA_STATE_CHANGE_DATE') THEN
 11.1215 +         newrec_.mea_state_change_date := Client_SYS.Attr_Value_To_Date(value_);
 11.1216 +      ELSIF (name_ = 'BUDGET_VERSION') THEN
 11.1217 +         newrec_.budget_version := value_;
 11.1218 +      ELSE
 11.1219 +         Error_SYS.Item_Not_Exist(lu_name_, name_, value_);
 11.1220 +      END IF;
 11.1221 +   END LOOP;
 11.1222 +
 11.1223 +
 11.1224 +   IF( newrec_.scorecard_object IS NOT NULL) THEN
 11.1225 +
 11.1226 +      measure_format_      := TO_NUMBER(Scorecard_Measure_API.Get_Measure_Format(newrec_.scorecard_object));
 11.1227 +
 11.1228 +      newrec_.year_value   := newrec_.year_value  *  measure_format_;
 11.1229 +      newrec_.p1_value     := newrec_.p1_value     *  measure_format_;
 11.1230 +      newrec_.p2_value     := newrec_.p2_value     *  measure_format_;
 11.1231 +      newrec_.p3_value     := newrec_.p3_value     *  measure_format_;
 11.1232 +      newrec_.p4_value     := newrec_.p4_value     *  measure_format_;
 11.1233 +      newrec_.p5_value     := newrec_.p5_value     *  measure_format_;
 11.1234 +      newrec_.p6_value     := newrec_.p6_value     *  measure_format_;
 11.1235 +      newrec_.p7_value     := newrec_.p7_value     *  measure_format_;
 11.1236 +      newrec_.p8_value     := newrec_.p8_value     *  measure_format_;
 11.1237 +      newrec_.p9_value     := newrec_.p9_value     *  measure_format_;
 11.1238 +      newrec_.p10_value    := newrec_.p10_value    *  measure_format_;
 11.1239 +      newrec_.p11_value    := newrec_.p11_value    *  measure_format_;
 11.1240 +      newrec_.p12_value    := newrec_.p12_value    *  measure_format_;
 11.1241 +
 11.1242 +   END IF;
 11.1243 +
 11.1244 +   Client_SYS.Clear_Attr(attr_);
 11.1245 +   Error_SYS.Check_Not_Null(lu_name_, 'ENVIRONMENT', newrec_.environment);
 11.1246 +   Error_SYS.Check_Not_Null(lu_name_, 'SCORECARD', newrec_.scorecard);
 11.1247 +   Error_SYS.Check_Not_Null(lu_name_, 'YEAR', newrec_.year);
 11.1248 +   Error_SYS.Check_Not_Null(lu_name_, 'VERSION', newrec_.version);
 11.1249 +   Error_SYS.Check_Not_Null(lu_name_, 'SCORECARD_OBJECT', newrec_.scorecard_object);
 11.1250 +   Error_SYS.Check_Not_Null(lu_name_, 'OBJECT_TYPE', newrec_.object_type);
 11.1251 +   Error_SYS.Check_Not_Null(lu_name_, 'ACTION', newrec_.action);
 11.1252 +EXCEPTION
 11.1253 +   WHEN value_error THEN
 11.1254 +      Error_SYS.Item_Format(lu_name_, name_, value_);
 11.1255 +END Unpack_Check_Insert___;
 11.1256 +
 11.1257 +
 11.1258 +PROCEDURE Insert___ (
 11.1259 +   objid_      OUT    VARCHAR2,
 11.1260 +   objversion_ OUT    VARCHAR2,
 11.1261 +   newrec_     IN OUT &TABLE%ROWTYPE,
 11.1262 +   attr_       IN OUT VARCHAR2 )
 11.1263 +IS
 11.1264 +BEGIN
 11.1265 +   newrec_.rowversion := sysdate;
 11.1266 +   objversion_ := to_char(newrec_.rowversion,'YYYYMMDDHH24MISS');
 11.1267 +   newrec_.mea_state_change_date := sysdate;
 11.1268 +   INSERT
 11.1269 +      INTO scorecard_input_value_tab (
 11.1270 +         environment,
 11.1271 +         scorecard,
 11.1272 +         year,
 11.1273 +         version,
 11.1274 +         scorecard_object,
 11.1275 +         object_type,
 11.1276 +         year_value,
 11.1277 +         p1_key,
 11.1278 +         p1_value,
 11.1279 +         p2_key,
 11.1280 +         p2_value,
 11.1281 +         p3_key,
 11.1282 +         p3_value,
 11.1283 +         p4_key,
 11.1284 +         p4_value,
 11.1285 +         p5_key,
 11.1286 +         p5_value,
 11.1287 +         p6_key,
 11.1288 +         p6_value,
 11.1289 +         p7_key,
 11.1290 +         p7_value,
 11.1291 +         p8_key,
 11.1292 +         p8_value,
 11.1293 +         p9_key,
 11.1294 +         p9_value,
 11.1295 +         p10_key,
 11.1296 +         p10_value,
 11.1297 +         p11_key,
 11.1298 +         p11_value,
 11.1299 +         p12_key,
 11.1300 +         p12_value,
 11.1301 +         action,
 11.1302 +         mea_state_change_date,
 11.1303 +         budget_version,
 11.1304 +         rowversion,
 11.1305 +         rowstate)
 11.1306 +      VALUES (
 11.1307 +         newrec_.environment,
 11.1308 +         newrec_.scorecard,
 11.1309 +         newrec_.year,
 11.1310 +         newrec_.version,
 11.1311 +         newrec_.scorecard_object,
 11.1312 +         newrec_.object_type,
 11.1313 +         newrec_.year_value,
 11.1314 +         newrec_.p1_key,
 11.1315 +         newrec_.p1_value,
 11.1316 +         newrec_.p2_key,
 11.1317 +         newrec_.p2_value,
 11.1318 +         newrec_.p3_key,
 11.1319 +         newrec_.p3_value,
 11.1320 +         newrec_.p4_key,
 11.1321 +         newrec_.p4_value,
 11.1322 +         newrec_.p5_key,
 11.1323 +         newrec_.p5_value,
 11.1324 +         newrec_.p6_key,
 11.1325 +         newrec_.p6_value,
 11.1326 +         newrec_.p7_key,
 11.1327 +         newrec_.p7_value,
 11.1328 +         newrec_.p8_key,
 11.1329 +         newrec_.p8_value,
 11.1330 +         newrec_.p9_key,
 11.1331 +         newrec_.p9_value,
 11.1332 +         newrec_.p10_key,
 11.1333 +         newrec_.p10_value,
 11.1334 +         newrec_.p11_key,
 11.1335 +         newrec_.p11_value,
 11.1336 +         newrec_.p12_key,
 11.1337 +         newrec_.p12_value,
 11.1338 +         newrec_.action,
 11.1339 +         newrec_.mea_state_change_date,
 11.1340 +         newrec_.budget_version,
 11.1341 +         newrec_.rowversion,
 11.1342 +         'Open')
 11.1343 +      RETURNING &OBJID INTO objid_;
 11.1344 +   Finite_State_Init___(newrec_, attr_);
 11.1345 +EXCEPTION
 11.1346 +   WHEN dup_val_on_index THEN
 11.1347 +      Error_SYS.Record_Exist(lu_name_);
 11.1348 +END Insert___;
 11.1349 +
 11.1350 +-----------------------------------------------------------------------------
 11.1351 +-------------------- IMPLEMENTATION BASE METHODS FOR UPDATE -----------------
 11.1352 +-----------------------------------------------------------------------------
 11.1353 +-- Unpack_Check_Update___
 11.1354 +--    Unpack the attribute list, check all attributes from the client
 11.1355 +--    and generate all default values before modifying the object.
 11.1356 +--
 11.1357 +-- Update___
 11.1358 +--    Update an existing LU-instance in the database and return the
 11.1359 +--    the new OBJVERSION.
 11.1360 +-----------------------------------------------------------------------------
 11.1361 +
 11.1362 +PROCEDURE Unpack_Check_Update___ (
 11.1363 +   attr_   IN OUT VARCHAR2,
 11.1364 +   newrec_ IN OUT &TABLE%ROWTYPE,
 11.1365 +   objid_  IN     VARCHAR2 )
 11.1366 +IS
 11.1367 +   ptr_   NUMBER;
 11.1368 +   name_  VARCHAR2(30);
 11.1369 +   value_ VARCHAR2(2000);
 11.1370 +
 11.1371 +
 11.1372 +   measure_format_    NUMBER;
 11.1373 +   from_budpro_       VARCHAR2(5):= 'FALSE';
 11.1374 +   oldrec_           Scorecard_Input_Value_Tab%ROWTYPE;
 11.1375 +
 11.1376 +BEGIN
 11.1377 +   ptr_ := NULL;
 11.1378 +   oldrec_  := newrec_;
 11.1379 +   WHILE (Client_SYS.Get_Next_From_Attr(attr_, ptr_, name_, value_)) LOOP
 11.1380 +      IF (name_ = 'ENVIRONMENT') THEN
 11.1381 +         newrec_.environment := value_;
 11.1382 +         Scorecard_Environment_API.Exist(newrec_.environment);
 11.1383 +      ELSIF (name_ = 'SCORECARD') THEN
 11.1384 +         newrec_.scorecard := value_;
 11.1385 +         Scorecard_API.Exist(newrec_.environment, newrec_.scorecard);
 11.1386 +      ELSIF (name_ = 'YEAR') THEN
 11.1387 +         newrec_.year := value_;
 11.1388 +         Environment_Year_API.Exist(newrec_.environment, newrec_.year);
 11.1389 +      ELSIF (name_ = 'VERSION') THEN
 11.1390 +         Error_SYS.Item_Update(lu_name_, 'VERSION');
 11.1391 +      ELSIF (name_ = 'SCORECARD_OBJECT') THEN
 11.1392 +         newrec_.scorecard_object := value_;
 11.1393 +      ELSIF (name_ = 'OBJECT_TYPE') THEN
 11.1394 +         newrec_.object_type := value_;
 11.1395 +      ELSIF (name_ = 'YEAR_VALUE') THEN
 11.1396 +         newrec_.year_value := Client_SYS.Attr_Value_To_Number(value_);
 11.1397 +      ELSIF (name_ = 'P1_KEY') THEN
 11.1398 +         newrec_.p1_key := value_;
 11.1399 +      ELSIF (name_ = 'P1_VALUE') THEN
 11.1400 +         newrec_.p1_value := Client_SYS.Attr_Value_To_Number(value_);
 11.1401 +      ELSIF (name_ = 'P2_KEY') THEN
 11.1402 +         newrec_.p2_key := value_;
 11.1403 +      ELSIF (name_ = 'P2_VALUE') THEN
 11.1404 +         newrec_.p2_value := Client_SYS.Attr_Value_To_Number(value_);
 11.1405 +      ELSIF (name_ = 'P3_KEY') THEN
 11.1406 +         newrec_.p3_key := value_;
 11.1407 +      ELSIF (name_ = 'P3_VALUE') THEN
 11.1408 +         newrec_.p3_value := Client_SYS.Attr_Value_To_Number(value_);
 11.1409 +      ELSIF (name_ = 'P4_KEY') THEN
 11.1410 +         newrec_.p4_key := value_;
 11.1411 +      ELSIF (name_ = 'P4_VALUE') THEN
 11.1412 +         newrec_.p4_value := Client_SYS.Attr_Value_To_Number(value_);
 11.1413 +      ELSIF (name_ = 'P5_KEY') THEN
 11.1414 +         newrec_.p5_key := value_;
 11.1415 +      ELSIF (name_ = 'P5_VALUE') THEN
 11.1416 +         newrec_.p5_value := Client_SYS.Attr_Value_To_Number(value_);
 11.1417 +      ELSIF (name_ = 'P6_KEY') THEN
 11.1418 +         newrec_.p6_key := value_;
 11.1419 +      ELSIF (name_ = 'P6_VALUE') THEN
 11.1420 +         newrec_.p6_value := Client_SYS.Attr_Value_To_Number(value_);
 11.1421 +      ELSIF (name_ = 'P7_KEY') THEN
 11.1422 +         newrec_.p7_key := value_;
 11.1423 +      ELSIF (name_ = 'P7_VALUE') THEN
 11.1424 +         newrec_.p7_value := Client_SYS.Attr_Value_To_Number(value_);
 11.1425 +      ELSIF (name_ = 'P8_KEY') THEN
 11.1426 +         newrec_.p8_key := value_;
 11.1427 +      ELSIF (name_ = 'P8_VALUE') THEN
 11.1428 +         newrec_.p8_value := Client_SYS.Attr_Value_To_Number(value_);
 11.1429 +      ELSIF (name_ = 'P9_KEY') THEN
 11.1430 +         newrec_.p9_key := value_;
 11.1431 +      ELSIF (name_ = 'P9_VALUE') THEN
 11.1432 +         newrec_.p9_value := Client_SYS.Attr_Value_To_Number(value_);
 11.1433 +      ELSIF (name_ = 'P10_KEY') THEN
 11.1434 +         newrec_.p10_key := value_;
 11.1435 +      ELSIF (name_ = 'P10_VALUE') THEN
 11.1436 +         newrec_.p10_value := Client_SYS.Attr_Value_To_Number(value_);
 11.1437 +      ELSIF (name_ = 'P11_KEY') THEN
 11.1438 +         newrec_.p11_key := value_;
 11.1439 +      ELSIF (name_ = 'P11_VALUE') THEN
 11.1440 +         newrec_.p11_value := Client_SYS.Attr_Value_To_Number(value_);
 11.1441 +      ELSIF (name_ = 'P12_KEY') THEN
 11.1442 +         newrec_.p12_key := value_;
 11.1443 +      ELSIF (name_ = 'P12_VALUE') THEN
 11.1444 +         newrec_.p12_value := Client_SYS.Attr_Value_To_Number(value_);
 11.1445 +      ELSIF (name_ = 'ACTION') THEN
 11.1446 +         newrec_.action := value_;
 11.1447 +      ELSIF (name_ = 'MEA_STATE_CHANGE_DATE') THEN
 11.1448 +         newrec_.mea_state_change_date := Client_SYS.Attr_Value_To_Date(value_);
 11.1449 +      ELSIF (name_ = 'BUDGET_VERSION') THEN
 11.1450 +         newrec_.budget_version := value_;
 11.1451 +      ELSIF (name_ = 'FROM_BUDPRO') THEN
 11.1452 +         from_budpro_ := value_;
 11.1453 +      ELSE
 11.1454 +         Error_SYS.Item_Not_Exist(lu_name_, name_, value_);
 11.1455 +      END IF;
 11.1456 +   END LOOP;
 11.1457 +
 11.1458 +
 11.1459 +   IF( newrec_.scorecard_object IS NOT NULL AND from_budpro_ = 'FALSE') THEN
 11.1460 +
 11.1461 +      measure_format_      := TO_NUMBER(Scorecard_Measure_API.Get_Measure_Format(newrec_.scorecard_object));
 11.1462 +      IF( newrec_.year_value != NVL(oldrec_.year_value,0)) THEN
 11.1463 +         newrec_.year_value   := newrec_.year_value  *  measure_format_;
 11.1464 +      END IF;
 11.1465 +      IF( newrec_.p1_value != NVL(oldrec_.p1_value,0)) THEN
 11.1466 +         newrec_.p1_value     := newrec_.p1_value     *  measure_format_;
 11.1467 +      END IF;
 11.1468 +      IF( newrec_.p2_value != NVL(oldrec_.p2_value,0)) THEN
 11.1469 +         newrec_.p2_value     := newrec_.p2_value     *  measure_format_;
 11.1470 +      END IF;
 11.1471 +      IF( newrec_.p3_value != NVL(oldrec_.p3_value,0)) THEN
 11.1472 +         newrec_.p3_value     := newrec_.p3_value     *  measure_format_;
 11.1473 +      END IF;
 11.1474 +      IF( newrec_.p4_value != NVL(oldrec_.p4_value,0)) THEN
 11.1475 +         newrec_.p4_value     := newrec_.p4_value     *  measure_format_;
 11.1476 +      END IF;
 11.1477 +      IF( newrec_.p5_value != NVL(oldrec_.p5_value,0)) THEN
 11.1478 +         newrec_.p5_value     := newrec_.p5_value     *  measure_format_;
 11.1479 +      END IF;
 11.1480 +      IF( newrec_.p6_value != NVL(oldrec_.p6_value,0)) THEN
 11.1481 +         newrec_.p6_value     := newrec_.p6_value     *  measure_format_;
 11.1482 +      END IF;
 11.1483 +      IF( newrec_.p7_value != NVL(oldrec_.p7_value,0)) THEN
 11.1484 +         newrec_.p7_value     := newrec_.p7_value     *  measure_format_;
 11.1485 +      END IF;
 11.1486 +      IF( newrec_.p8_value != NVL(oldrec_.p8_value,0)) THEN
 11.1487 +         newrec_.p8_value     := newrec_.p8_value     *  measure_format_;
 11.1488 +      END IF;
 11.1489 +      IF( newrec_.p9_value != NVL(oldrec_.p9_value,0)) THEN
 11.1490 +         newrec_.p9_value     := newrec_.p9_value     *  measure_format_;
 11.1491 +      END IF;
 11.1492 +      IF( newrec_.p10_value != NVL(oldrec_.p10_value,0)) THEN
 11.1493 +         newrec_.p10_value    := newrec_.p10_value    *  measure_format_;
 11.1494 +      END IF;
 11.1495 +      IF( newrec_.p11_value != NVL(oldrec_.p11_value,0)) THEN
 11.1496 +         newrec_.p11_value    := newrec_.p11_value    *  measure_format_;
 11.1497 +      END IF;
 11.1498 +      IF( newrec_.p12_value != NVL(oldrec_.p12_value,0)) THEN
 11.1499 +         newrec_.p12_value    := newrec_.p12_value    *  measure_format_;
 11.1500 +      END IF;
 11.1501 +
 11.1502 +   END IF;
 11.1503 +   Client_SYS.Clear_Attr(attr_);
 11.1504 +   Error_SYS.Check_Not_Null(lu_name_, 'ENVIRONMENT', newrec_.environment);
 11.1505 +   Error_SYS.Check_Not_Null(lu_name_, 'SCORECARD', newrec_.scorecard);
 11.1506 +   Error_SYS.Check_Not_Null(lu_name_, 'YEAR', newrec_.year);
 11.1507 +   Error_SYS.Check_Not_Null(lu_name_, 'SCORECARD_OBJECT', newrec_.scorecard_object);
 11.1508 +   Error_SYS.Check_Not_Null(lu_name_, 'OBJECT_TYPE', newrec_.object_type);
 11.1509 +   Error_SYS.Check_Not_Null(lu_name_, 'ACTION', newrec_.action);
 11.1510 +EXCEPTION
 11.1511 +   WHEN value_error THEN
 11.1512 +      Error_SYS.Item_Format(lu_name_, name_, value_);
 11.1513 +END Unpack_Check_Update___;
 11.1514 +
 11.1515 +
 11.1516 +PROCEDURE Update___ (
 11.1517 +   objid_      IN     VARCHAR2,
 11.1518 +   oldrec_     IN     &TABLE%ROWTYPE,
 11.1519 +   newrec_     IN OUT &TABLE%ROWTYPE,
 11.1520 +   attr_       IN OUT VARCHAR2,
 11.1521 +   objversion_ IN OUT VARCHAR2,
 11.1522 +   by_keys_    IN BOOLEAN DEFAULT FALSE )
 11.1523 +IS
 11.1524 +BEGIN
 11.1525 +   newrec_.rowversion := sysdate;
 11.1526 +   objversion_ := to_char(newrec_.rowversion,'YYYYMMDDHH24MISS');
 11.1527 +   IF by_keys_ THEN
 11.1528 +      UPDATE scorecard_input_value_tab
 11.1529 +      SET environment = newrec_.environment,
 11.1530 +          scorecard = newrec_.scorecard,
 11.1531 +          year = newrec_.year,
 11.1532 +          version = newrec_.version,
 11.1533 +          scorecard_object = newrec_.scorecard_object,
 11.1534 +          object_type = newrec_.object_type,
 11.1535 +          year_value = newrec_.year_value,
 11.1536 +          p1_key = newrec_.p1_key,
 11.1537 +          p1_value = newrec_.p1_value,
 11.1538 +          p2_key = newrec_.p2_key,
 11.1539 +          p2_value = newrec_.p2_value,
 11.1540 +          p3_key = newrec_.p3_key,
 11.1541 +          p3_value = newrec_.p3_value,
 11.1542 +          p4_key = newrec_.p4_key,
 11.1543 +          p4_value = newrec_.p4_value,
 11.1544 +          p5_key = newrec_.p5_key,
 11.1545 +          p5_value = newrec_.p5_value,
 11.1546 +          p6_key = newrec_.p6_key,
 11.1547 +          p6_value = newrec_.p6_value,
 11.1548 +          p7_key = newrec_.p7_key,
 11.1549 +          p7_value = newrec_.p7_value,
 11.1550 +          p8_key = newrec_.p8_key,
 11.1551 +          p8_value = newrec_.p8_value,
 11.1552 +          p9_key = newrec_.p9_key,
 11.1553 +          p9_value = newrec_.p9_value,
 11.1554 +          p10_key = newrec_.p10_key,
 11.1555 +          p10_value = newrec_.p10_value,
 11.1556 +          p11_key = newrec_.p11_key,
 11.1557 +          p11_value = newrec_.p11_value,
 11.1558 +          p12_key = newrec_.p12_key,
 11.1559 +          p12_value = newrec_.p12_value,
 11.1560 +          action = newrec_.action,
 11.1561 +          mea_state_change_date = newrec_.mea_state_change_date,
 11.1562 +          budget_version = newrec_.budget_version,
 11.1563 +          rowversion = newrec_.rowversion
 11.1564 +      WHERE environment = newrec_.environment
 11.1565 +      AND   scorecard = newrec_.scorecard
 11.1566 +      AND   year = newrec_.year
 11.1567 +      AND   version = newrec_.version
 11.1568 +      AND   scorecard_object = newrec_.scorecard_object;
 11.1569 +   ELSE
 11.1570 +      UPDATE scorecard_input_value_tab
 11.1571 +      SET environment = newrec_.environment,
 11.1572 +          scorecard = newrec_.scorecard,
 11.1573 +          year = newrec_.year,
 11.1574 +          version = newrec_.version,
 11.1575 +          scorecard_object = newrec_.scorecard_object,
 11.1576 +          object_type = newrec_.object_type,
 11.1577 +          year_value = newrec_.year_value,
 11.1578 +          p1_key = newrec_.p1_key,
 11.1579 +          p1_value = newrec_.p1_value,
 11.1580 +          p2_key = newrec_.p2_key,
 11.1581 +          p2_value = newrec_.p2_value,
 11.1582 +          p3_key = newrec_.p3_key,
 11.1583 +          p3_value = newrec_.p3_value,
 11.1584 +          p4_key = newrec_.p4_key,
 11.1585 +          p4_value = newrec_.p4_value,
 11.1586 +          p5_key = newrec_.p5_key,
 11.1587 +          p5_value = newrec_.p5_value,
 11.1588 +          p6_key = newrec_.p6_key,
 11.1589 +          p6_value = newrec_.p6_value,
 11.1590 +          p7_key = newrec_.p7_key,
 11.1591 +          p7_value = newrec_.p7_value,
 11.1592 +          p8_key = newrec_.p8_key,
 11.1593 +          p8_value = newrec_.p8_value,
 11.1594 +          p9_key = newrec_.p9_key,
 11.1595 +          p9_value = newrec_.p9_value,
 11.1596 +          p10_key = newrec_.p10_key,
 11.1597 +          p10_value = newrec_.p10_value,
 11.1598 +          p11_key = newrec_.p11_key,
 11.1599 +          p11_value = newrec_.p11_value,
 11.1600 +          p12_key = newrec_.p12_key,
 11.1601 +          p12_value = newrec_.p12_value,
 11.1602 +          action = newrec_.action,
 11.1603 +          mea_state_change_date = newrec_.mea_state_change_date,
 11.1604 +          budget_version = newrec_.budget_version,
 11.1605 +          rowversion = newrec_.rowversion
 11.1606 +      WHERE &OBJID = objid_;
 11.1607 +   END IF;
 11.1608 +EXCEPTION
 11.1609 +   WHEN dup_val_on_index THEN
 11.1610 +      Error_SYS.Record_Exist(lu_name_);
 11.1611 +END Update___;
 11.1612 +
 11.1613 +-----------------------------------------------------------------------------
 11.1614 +-------------------- IMPLEMENTATION BASE METHODS FOR DELETE -----------------
 11.1615 +-----------------------------------------------------------------------------
 11.1616 +-- Check_Delete___
 11.1617 +--    Checks whether a specific LU-record may be removed or not.
 11.1618 +--    The procedure should check business rules like attribute values
 11.1619 +--    as well as database constraints (defined or not).
 11.1620 +--
 11.1621 +-- Delete___
 11.1622 +--    Deletion of the specific LU-object from the database.
 11.1623 +-----------------------------------------------------------------------------
 11.1624 +
 11.1625 +PROCEDURE Check_Delete___ (
 11.1626 +   remrec_ IN &TABLE%ROWTYPE )
 11.1627 +IS
 11.1628 +   key_ VARCHAR2(2000);
 11.1629 +BEGIN
 11.1630 +   key_ := remrec_.environment || '^' || remrec_.scorecard || '^' || remrec_.year || '^' || remrec_.version || '^' || remrec_.scorecard_object || '^';
 11.1631 +   Reference_SYS.Check_Restricted_Delete(lu_name_, key_);
 11.1632 +END Check_Delete___;
 11.1633 +
 11.1634 +
 11.1635 +PROCEDURE Delete___ (
 11.1636 +   objid_  IN VARCHAR2,
 11.1637 +   remrec_ IN &TABLE%ROWTYPE )
 11.1638 +IS
 11.1639 +   key_ VARCHAR2(2000);
 11.1640 +BEGIN
 11.1641 +   key_ := remrec_.environment || '^' || remrec_.scorecard || '^' || remrec_.year || '^' || remrec_.version || '^' || remrec_.scorecard_object || '^';
 11.1642 +   Reference_SYS.Do_Cascade_Delete(lu_name_, key_);
 11.1643 +   DELETE
 11.1644 +      FROM  scorecard_input_value_tab
 11.1645 +      WHERE &OBJID = objid_;
 11.1646 +END Delete___;
 11.1647 +
 11.1648 +-----------------------------------------------------------------------------
 11.1649 +-------------------- PRIVATE BASE METHODS -----------------------------------
 11.1650 +-----------------------------------------------------------------------------
 11.1651 +-- Lock__
 11.1652 +--    Client-support to lock a specific instance of the logical unit.
 11.1653 +--
 11.1654 +-- New__
 11.1655 +--    Client-support interface to create LU instances.
 11.1656 +--       action_ = 'PREPARE'
 11.1657 +--          Default values and handle of information to client.
 11.1658 +--          The default values are set in procedure Prepare_Insert___.
 11.1659 +--       action_ = 'CHECK'
 11.1660 +--          Check all attributes before creating new object and handle of
 11.1661 +--          information to client. The attribute list is unpacked, checked
 11.1662 +--          and prepared (defaults) in procedure Unpack_Check_Insert___.
 11.1663 +--       action_ = 'DO'
 11.1664 +--          Creation of new instances of the logical unit and handle of
 11.1665 +--          information to client. The attribute list is unpacked, checked
 11.1666 +--          and prepared (defaults) in procedure Unpack_Check_Insert___
 11.1667 +--          before calling procedure Insert___.
 11.1668 +--
 11.1669 +-- Modify__
 11.1670 +--    Client-support interface to modify attributes for LU instances.
 11.1671 +--       action_ = 'CHECK'
 11.1672 +--          Check all attributes before modifying an existing object and
 11.1673 +--          handle of information to client. The attribute list is unpacked,
 11.1674 +--          checked and prepared(defaults) in procedure Unpack_Check_Update___.
 11.1675 +--       action_ = 'DO'
 11.1676 +--          Modification of an existing instance of the logical unit. The
 11.1677 +--          procedure unpacks the attributes, checks all values before
 11.1678 +--          procedure Update___ is called.
 11.1679 +--
 11.1680 +-- Remove__
 11.1681 +--    Client-support interface to remove LU instances.
 11.1682 +--       action_ = 'CHECK'
 11.1683 +--          Check whether a specific LU-instance may be removed or not.
 11.1684 +--          The procedure fetches the complete record by calling procedure
 11.1685 +--          Get_Object_By_Id___. Then the check is made by calling procedure
 11.1686 +--          Check_Delete___.
 11.1687 +--       action_ = 'DO'
 11.1688 +--          Remove an existing instance of the logical unit. The procedure
 11.1689 +--          fetches the complete LU-record, checks for a delete and then
 11.1690 +--          deletes the record by calling procedure Delete___.
 11.1691 +-----------------------------------------------------------------------------
 11.1692 +
 11.1693 +PROCEDURE Lock__ (
 11.1694 +   info_       OUT VARCHAR2,
 11.1695 +   objid_      IN  VARCHAR2,
 11.1696 +   objversion_ IN  VARCHAR2 )
 11.1697 +IS
 11.1698 +   dummy_ &TABLE%ROWTYPE;
 11.1699 +BEGIN
 11.1700 +   General_SYS.Init_Method(lu_name_, '&PKG', 'Lock__');
 11.1701 +   dummy_ := Lock_By_Id___(objid_, objversion_);
 11.1702 +   info_ := Client_SYS.Get_All_Info;
 11.1703 +END Lock__;
 11.1704 +
 11.1705 +
 11.1706 +PROCEDURE New__ (
 11.1707 +   info_       OUT    VARCHAR2,
 11.1708 +   objid_      OUT    VARCHAR2,
 11.1709 +   objversion_ OUT    VARCHAR2,
 11.1710 +   attr_       IN OUT VARCHAR2,
 11.1711 +   action_     IN     VARCHAR2 )
 11.1712 +IS
 11.1713 +   newrec_ &TABLE%ROWTYPE;
 11.1714 +BEGIN
 11.1715 +   General_SYS.Init_Method(lu_name_, '&PKG', 'New__');
 11.1716 +   IF (action_ = 'PREPARE') THEN
 11.1717 +      Prepare_Insert___(attr_);
 11.1718 +   ELSIF (action_ = 'CHECK') THEN
 11.1719 +      Unpack_Check_Insert___(attr_, newrec_);
 11.1720 +   ELSIF (action_ = 'DO') THEN
 11.1721 +      Unpack_Check_Insert___(attr_, newrec_);
 11.1722 +      Insert___(objid_, objversion_, newrec_, attr_);
 11.1723 +   END IF;
 11.1724 +   info_ := Client_SYS.Get_All_Info;
 11.1725 +END New__;
 11.1726 +
 11.1727 +
 11.1728 +PROCEDURE Modify__ (
 11.1729 +   info_       OUT    VARCHAR2,
 11.1730 +   objid_      IN     VARCHAR2,
 11.1731 +   objversion_ IN OUT VARCHAR2,
 11.1732 +   attr_       IN OUT VARCHAR2,
 11.1733 +   action_     IN     VARCHAR2 )
 11.1734 +IS
 11.1735 +   oldrec_ &TABLE%ROWTYPE;
 11.1736 +   newrec_ &TABLE%ROWTYPE;
 11.1737 +BEGIN
 11.1738 +   General_SYS.Init_Method(lu_name_, '&PKG', 'Modify__');
 11.1739 +   IF (action_ = 'CHECK') THEN
 11.1740 +      newrec_ := Get_Object_By_Id___(objid_);
 11.1741 +      Unpack_Check_Update___(attr_, newrec_, objid_);
 11.1742 +   ELSIF (action_ = 'DO') THEN
 11.1743 +      oldrec_ := Lock_By_Id___(objid_, objversion_);
 11.1744 +      newrec_ := oldrec_;
 11.1745 +      Unpack_Check_Update___(attr_, newrec_, objid_);
 11.1746 +      Update___(objid_, oldrec_, newrec_, attr_, objversion_);
 11.1747 +   END IF;
 11.1748 +   info_ := Client_SYS.Get_All_Info;
 11.1749 +END Modify__;
 11.1750 +
 11.1751 +
 11.1752 +PROCEDURE Remove__ (
 11.1753 +   info_       OUT VARCHAR2,
 11.1754 +   objid_      IN  VARCHAR2,
 11.1755 +   objversion_ IN  VARCHAR2,
 11.1756 +   action_     IN  VARCHAR2 )
 11.1757 +IS
 11.1758 +   remrec_ &TABLE%ROWTYPE;
 11.1759 +BEGIN
 11.1760 +   General_SYS.Init_Method(lu_name_, '&PKG', 'Remove__');
 11.1761 +   IF (action_ = 'CHECK') THEN
 11.1762 +      remrec_ := Get_Object_By_Id___(objid_);
 11.1763 +      Check_Delete___(remrec_);
 11.1764 +   ELSIF (action_ = 'DO') THEN
 11.1765 +      remrec_ := Lock_By_Id___(objid_, objversion_);
 11.1766 +      Check_Delete___(remrec_);
 11.1767 +      Delete___(objid_, remrec_);
 11.1768 +   END IF;
 11.1769 +   info_ := Client_SYS.Get_All_Info;
 11.1770 +END Remove__;
 11.1771 +
 11.1772 +-----------------------------------------------------------------------------
 11.1773 +-------------------- PUBLIC BASE METHODS ------------------------------------
 11.1774 +-----------------------------------------------------------------------------
 11.1775 +-- Exist
 11.1776 +--   Checks if given pointer (e.g. primary key) to an instance of this
 11.1777 +--   logical unit exists. If not an exception will be raised.
 11.1778 +-----------------------------------------------------------------------------
 11.1779 +
 11.1780 +PROCEDURE Exist (
 11.1781 +   environment_ IN VARCHAR2,
 11.1782 +   scorecard_ IN VARCHAR2,
 11.1783 +   year_ IN VARCHAR2,
 11.1784 +   version_ IN VARCHAR2,
 11.1785 +   scorecard_object_ IN VARCHAR2 )
 11.1786 +IS
 11.1787 +BEGIN
 11.1788 +   General_SYS.Init_Method(lu_name_, '&PKG', 'Exist', TRUE);
 11.1789 +   IF (NOT Check_Exist___(environment_, scorecard_, year_, version_, scorecard_object_)) THEN
 11.1790 +      Error_SYS.Record_Not_Exist(lu_name_);
 11.1791 +   END IF;
 11.1792 +END Exist;
 11.1793 +
 11.1794 +-----------------------------------------------------------------------------
 11.1795 +-------------------- PUBLIC TRANSLATION METHODS -----------------------------
 11.1796 +-----------------------------------------------------------------------------
 11.1797 +PROCEDURE Language_Refreshed
 11.1798 +IS
 11.1799 +BEGIN
 11.1800 +   active_state_list_ := Language_SYS.Translate_State_(lu_name_, client_state_list_);
 11.1801 +END Language_Refreshed;
 11.1802 +-----------------------------------------------------------------------------
 11.1803 +-------------------- LU SPECIFIC IMPLEMENTATION METHODS ---------------------
 11.1804 +-----------------------------------------------------------------------------
 11.1805 +
 11.1806 +
 11.1807 +PROCEDURE Distribute_Input_Values___ (
 11.1808 +   environment_ IN VARCHAR2,
 11.1809 +   scorecard_ IN VARCHAR2,
 11.1810 +   year_ IN VARCHAR2,
 11.1811 +   version_ IN VARCHAR2,
 11.1812 +   object_type_ IN VARCHAR2,
 11.1813 +   period_count_ IN NUMBER,
 11.1814 +   scorecard_object_ IN VARCHAR2 )
 11.1815 +IS
 11.1816 +   child_scr_                        VARCHAR2(20);
 11.1817 +
 11.1818 +
 11.1819 +   CURSOR get_child_scorecards IS        --- Move to scorecard
 11.1820 +   SELECT scorecard
 11.1821 +   FROM scorecard
 11.1822 +   WHERE parent=scorecard_
 11.1823 +   AND environment=environment_;
 11.1824 +
 11.1825 +   CURSOR get_open_child_scr IS
 11.1826 +   SELECT '1'
 11.1827 +   FROM scorecard
 11.1828 +   WHERE scorecard = child_scr_
 11.1829 +   AND environment=environment_
 11.1830 +   AND objstate NOT IN ('Open', 'Planned');
 11.1831 +
 11.1832 +   CURSOR get_input_values (scorecard_object_  VARCHAR2,temp_scorecard_  VARCHAR2) IS
 11.1833 +   SELECT year_value,p1_value,p2_value,p3_value,p4_value,p5_value,p6_value,
 11.1834 +          p7_value,p8_value,p9_value,p10_value,p11_value,p12_value
 11.1835 +   FROM scorecard_input_value_tab
 11.1836 +   WHERE environment = environment_
 11.1837 +   AND scorecard = temp_scorecard_
 11.1838 +   AND year = year_
 11.1839 +   AND version = version_
 11.1840 +   AND scorecard_object = scorecard_object_
 11.1841 +   AND object_type_=object_type_;
 11.1842 +
 11.1843 +   CURSOR get_attribute_value_sum(attribute_  VARCHAR2) IS
 11.1844 +   SELECT SUM(TO_NUMBER(value))
 11.1845 +   FROM scorecard_attribute_tab
 11.1846 +   WHERE environment=environment_
 11.1847 +   AND scorecard IN (SELECT scorecard
 11.1848 +                     FROM scorecard
 11.1849 +                     WHERE environment = environment_
 11.1850 +                     AND parent = scorecard_)
 11.1851 +   AND attribute=attribute_;
 11.1852 +
 11.1853 +   value_distribution_type_          VARCHAR2(20);
 11.1854 +   hierachical_dist_logic_           VARCHAR2(20);
 11.1855 +   distribution_version_             VARCHAR2(20);
 11.1856 +   distribution_attribute_           VARCHAR2(20);
 11.1857 +   temp_val_                         VARCHAR2(5);
 11.1858 +   newrec_                           SCORECARD_INPUT_VALUE_TAB%ROWTYPE;
 11.1859 +   oldrec_                           SCORECARD_INPUT_VALUE_TAB%ROWTYPE;
 11.1860 +   objid_                            VARCHAR2(2000);
 11.1861 +   attr_                             VARCHAR2(2000);
 11.1862 +   objversion_                       VARCHAR2(2000);
 11.1863 +   child_count_                      NUMBER;
 11.1864 +   temp_period_count_                NUMBER;
 11.1865 +   attribute_val_str_                VARCHAR2(2000);
 11.1866 +   attribute_value_                  NUMBER;
 11.1867 +   attribute_value_sum_              NUMBER;
 11.1868 +
 11.1869 +   parent_year_value_                NUMBER;
 11.1870 +   parent_p1_value_                  NUMBER;
 11.1871 +   parent_p2_value_                  NUMBER;
 11.1872 +   parent_p3_value_                  NUMBER;
 11.1873 +   parent_p4_value_                  NUMBER;
 11.1874 +   parent_p5_value_                  NUMBER;
 11.1875 +   parent_p6_value_                  NUMBER;
 11.1876 +   parent_p7_value_                  NUMBER;
 11.1877 +   parent_p8_value_                  NUMBER;
 11.1878 +   parent_p9_value_                  NUMBER;
 11.1879 +   parent_p10_value_                 NUMBER;
 11.1880 +   parent_p11_value_                 NUMBER;
 11.1881 +   parent_p12_value_                 NUMBER;
 11.1882 +
 11.1883 +   period_val_arr_                   PeriodValArrType;
 11.1884 +   TYPE ValArrType                   IS TABLE OF NUMBER
 11.1885 +                                     INDEX BY BINARY_INTEGER;
 11.1886 +   parent_val_arr_                   ValArrType;
 11.1887 +   child_val_arr_                    ValArrType;
 11.1888 +   year_value_                       NUMBER;
 11.1889 +
 11.1890 +BEGIN
 11.1891 +
 11.1892 +   Scorecard_Structure_API.Get_Dist_Logic_Details(value_distribution_type_,hierachical_dist_logic_,
 11.1893 +                                                    distribution_version_,distribution_attribute_,
 11.1894 +                                                    scorecard_,scorecard_object_,environment_,object_type_);
 11.1895 +
 11.1896 +   IF value_distribution_type_ IS NULL THEN
 11.1897 +      IF object_type_='MEASURE' THEN
 11.1898 +         Error_SYS.Appl_General(lu_name_,'VALDIST1: Value distribution type must have a value for measure :P1 in parent scorecard :P2.',scorecard_object_,scorecard_);
 11.1899 +      ELSE
 11.1900 +         Error_SYS.Appl_General(lu_name_,'VALDIST2: Value distribution type must have a value for component :P1 in parent scorecard :P2.',scorecard_object_,scorecard_);
 11.1901 +      END IF;
 11.1902 +   END IF;
 11.1903 +
 11.1904 +   OPEN get_input_values(scorecard_object_,scorecard_);
 11.1905 +   FETCH get_input_values INTO  parent_year_value_,parent_p1_value_,parent_p2_value_,parent_p3_value_,parent_p4_value_,
 11.1906 +                                parent_p5_value_,parent_p6_value_,parent_p7_value_,parent_p8_value_,parent_p9_value_,
 11.1907 +                                parent_p10_value_,parent_p11_value_,parent_p12_value_;
 11.1908 +   CLOSE get_input_values;
 11.1909 +
 11.1910 +    parent_val_arr_(1):=parent_p1_value_;
 11.1911 +    parent_val_arr_(2):=parent_p2_value_;
 11.1912 +    parent_val_arr_(3):=parent_p3_value_;
 11.1913 +    parent_val_arr_(4):=parent_p4_value_;
 11.1914 +    parent_val_arr_(5):=parent_p5_value_;
 11.1915 +    parent_val_arr_(6):=parent_p6_value_;
 11.1916 +    parent_val_arr_(7):=parent_p7_value_;
 11.1917 +    parent_val_arr_(8):=parent_p8_value_;
 11.1918 +    parent_val_arr_(9):=parent_p9_value_;
 11.1919 +    parent_val_arr_(10):=parent_p10_value_;
 11.1920 +    parent_val_arr_(11):=parent_p11_value_;
 11.1921 +    parent_val_arr_(12):=parent_p12_value_;
 11.1922 +    --END IF;
 11.1923 +
 11.1924 +    FOR temp_period_count_ IN 1..period_count_ LOOP
 11.1925 +       IF  parent_val_arr_(temp_period_count_) IS NULL THEN
 11.1926 +          Error_SYS.Appl_General(lu_name_,'PERVAL1: One or more periods in parent scorecard :P1 does not contain input values.',scorecard_);
 11.1927 +       END IF;
 11.1928 +    END LOOP;
 11.1929 +
 11.1930 +    child_count_:=Scorecard_API.Get_Child_Count(scorecard_,environment_);
 11.1931 +
 11.1932 +    FOR child_scorecards_ IN get_child_scorecards LOOP  -- fetch the child scorecards
 11.1933 +
 11.1934 +      year_value_:=0;
 11.1935 +      child_scr_ := child_scorecards_.scorecard;
 11.1936 +      OPEN get_open_child_scr;
 11.1937 +      FETCH get_open_child_scr INTO temp_val_;
 11.1938 +      CLOSE get_open_child_scr;
 11.1939 +
 11.1940 +      IF (temp_val_ = '1') THEN
 11.1941 +         Error_SYS.Appl_General(lu_name_,'TMPVAL: Not all scorecards in the hierarchy are opened for planning. Distribution not possible.');
 11.1942 +      END IF;
 11.1943 +
 11.1944 +      IF NOT Check_Exist___(environment_,child_scorecards_.scorecard,year_,version_,scorecard_object_) THEN
 11.1945 +         Error_SYS.Appl_General(lu_name_,'INPVAL: Scorecard object :P1 does not exist in scorecard :P2.',scorecard_object_,child_scorecards_.scorecard);
 11.1946 +
 11.1947 +      ELSE
 11.1948 +         oldrec_:=Lock_By_Keys___(environment_,child_scorecards_.scorecard,year_,version_,scorecard_object_);
 11.1949 +         child_val_arr_(1):=oldrec_.p1_value;
 11.1950 +         child_val_arr_(2):=oldrec_.p2_value;
 11.1951 +         child_val_arr_(3):=oldrec_.p3_value;
 11.1952 +         child_val_arr_(4):=oldrec_.p4_value;
 11.1953 +         child_val_arr_(5):=oldrec_.p5_value;
 11.1954 +         child_val_arr_(6):=oldrec_.p6_value;
 11.1955 +         child_val_arr_(7):=oldrec_.p7_value;
 11.1956 +         child_val_arr_(8):=oldrec_.p8_value;
 11.1957 +         child_val_arr_(9):=oldrec_.p9_value;
 11.1958 +         child_val_arr_(10):=oldrec_.p10_value;
 11.1959 +         child_val_arr_(11):=oldrec_.p11_value;
 11.1960 +         child_val_arr_(12):=oldrec_.p12_value;
 11.1961 +         newrec_:=oldrec_;
 11.1962 +         IF value_distribution_type_ = 'PERCENTAGE' THEN
 11.1963 +            IF hierachical_dist_logic_ IS NULL THEN
 11.1964 +              FOR temp_period_count_ IN 1..period_count_ LOOP
 11.1965 +                 child_val_arr_(temp_period_count_):=parent_val_arr_(temp_period_count_);
 11.1966 +                 year_value_:=year_value_ +child_val_arr_(temp_period_count_);
 11.1967 +              END LOOP;
 11.1968 +
 11.1969 +            ELSIF hierachical_dist_logic_='VERSION' THEN
 11.1970 +              IF distribution_version_ IS NULL THEN
 11.1971 +                 IF object_type_='MEASURE' THEN
 11.1972 +                    Error_SYS.Appl_General(lu_name_,'DISTVER1: Distribution version must have a value for measure :P1 in parent scorecard :P2.',scorecard_object_,scorecard_);
 11.1973 +                 ELSE
 11.1974 +                    Error_SYS.Appl_General(lu_name_,'DISTVER2: Distribution version must have a value for component :P1 in parent scorecard :P2.',scorecard_object_,scorecard_);
 11.1975 +                 END IF;
 11.1976 +              END IF;
 11.1977 +              Scorecard_Value_API.Get_Period_Values__ (period_val_arr_,child_scorecards_.scorecard,object_type_,
 11.1978 +                                                       period_count_,environment_,scorecard_,year_,
 11.1979 +                                                       distribution_version_,scorecard_object_);
 11.1980 +              FOR temp_period_count_ IN 1..period_count_ LOOP
 11.1981 +                 child_val_arr_(temp_period_count_):=parent_val_arr_(temp_period_count_)
 11.1982 +                                                    *(period_val_arr_(temp_period_count_).value
 11.1983 +                                                       /(period_val_arr_(temp_period_count_).sum/child_count_));
 11.1984 +                 year_value_:=year_value_ +child_val_arr_(temp_period_count_);
 11.1985 +              END LOOP;
 11.1986 +            ELSIF hierachical_dist_logic_='ATTRIBUTE' THEN
 11.1987 +              IF distribution_attribute_ IS NULL THEN
 11.1988 +                 IF object_type_='MEASURE' THEN
 11.1989 +                    Error_SYS.Appl_General(lu_name_,'DISTATTR1: Distribution attribute must have a value for measure :P1 in parent scorecard :P2.',scorecard_object_,scorecard_);
 11.1990 +                 ELSE
 11.1991 +                    Error_SYS.Appl_General(lu_name_,'DISTATTR2: Distribution attribute must have a value for component :P1 in parent scorecard :P2.',scorecard_object_,scorecard_);
 11.1992 +                 END IF;
 11.1993 +              END IF;
 11.1994 +
 11.1995 +              attribute_val_str_:=Scorecard_Attribute_API.Get_Value(environment_,child_scorecards_.scorecard,
 11.1996 +                                                                    distribution_attribute_);
 11.1997 +              IF attribute_val_str_ IS NULL THEN
 11.1998 +                 Error_SYS.Appl_General(lu_name_,'ATTRERR: Attribute :P1 must have a value in scorecard :P2.',distribution_attribute_,child_scorecards_.scorecard);
 11.1999 +              ELSE
 11.2000 +                 BEGIN
 11.2001 +                    attribute_value_:=TO_NUMBER(attribute_val_str_);
 11.2002 +                 EXCEPTION
 11.2003 +                    WHEN OTHERS THEN
 11.2004 +                       Error_SYS.Appl_General(lu_name_,'NUMVALERR: Value of the attribute :P1 in all child scorecards of parent scorecard :P2 must be numeric.',distribution_attribute_,scorecard_);
 11.2005 +                 END;
 11.2006 +              END IF;
 11.2007 +              BEGIN
 11.2008 +                 OPEN get_attribute_value_sum(distribution_attribute_);
 11.2009 +                 FETCH get_attribute_value_sum INTO attribute_value_sum_;
 11.2010 +                 CLOSE get_attribute_value_sum;
 11.2011 +
 11.2012 +                 IF attribute_value_sum_=0 THEN
 11.2013 +                     Error_SYS.Appl_General(lu_name_,'ATTRSUM : Attribute value of at least one child scorecard of parent scorecard :P1 must be greater than 0.');
 11.2014 +                 END IF;
 11.2015 +              EXCEPTION
 11.2016 +                 WHEN OTHERS THEN
 11.2017 +                    Error_SYS.Appl_General(lu_name_,'NUMVALERR: Value of the attribute :P1 in all child scorecards of parent scorecard :P2 must be numeric.',distribution_attribute_,scorecard_);
 11.2018 +              END;
 11.2019 +
 11.2020 +              FOR temp_period_count_ IN 1..period_count_ LOOP
 11.2021 +                 child_val_arr_(temp_period_count_):=parent_val_arr_(temp_period_count_)
 11.2022 +                                                    *(attribute_value_/(attribute_value_sum_/child_count_));
 11.2023 +                 year_value_:=year_value_ +child_val_arr_(temp_period_count_);
 11.2024 +              END LOOP;
 11.2025 +            END IF;
 11.2026 +            year_value_:=year_value_ /period_count_;
 11.2027 +         ELSIF value_distribution_type_ = 'VALUE' THEN
 11.2028 +            IF hierachical_dist_logic_ IS NULL THEN
 11.2029 +               FOR temp_period_count_ IN 1..period_count_ LOOP
 11.2030 +                  child_val_arr_(temp_period_count_):=parent_val_arr_(temp_period_count_)/child_count_;
 11.2031 +                  year_value_:=year_value_ +child_val_arr_(temp_period_count_);
 11.2032 +               END LOOP;
 11.2033 +            ELSIF hierachical_dist_logic_='VERSION' THEN
 11.2034 +               IF distribution_version_ IS NULL THEN
 11.2035 +                  IF object_type_='MEASURE' THEN
 11.2036 +                      Error_SYS.Appl_General(lu_name_,'DISTVER1: Distribution version must have a value for measure :P1 in parent scorecard :P2.',scorecard_object_,scorecard_);
 11.2037 +                   ELSE
 11.2038 +                      Error_SYS.Appl_General(lu_name_,'DISTVER2: Distribution version must have a value for component :P1 in parent scorecard :P2.',scorecard_object_,scorecard_);
 11.2039 +                 END IF;
 11.2040 +               END IF;
 11.2041 +               Scorecard_Value_API.Get_Period_Values__ (period_val_arr_,child_scorecards_.scorecard,object_type_,
 11.2042 +                                                       period_count_,environment_,scorecard_,year_,
 11.2043 +                                                       distribution_version_,scorecard_object_);
 11.2044 +               FOR temp_period_count_ IN 1..period_count_ LOOP
 11.2045 +                  child_val_arr_(temp_period_count_):=parent_val_arr_(temp_period_count_)
 11.2046 +                                                    *(period_val_arr_(temp_period_count_).value
 11.2047 +                                                      /period_val_arr_(temp_period_count_).sum);
 11.2048 +                  year_value_:=year_value_ +child_val_arr_(temp_period_count_);
 11.2049 +               END LOOP;
 11.2050 +            ELSIF hierachical_dist_logic_='ATTRIBUTE' THEN
 11.2051 +               IF distribution_attribute_ IS NULL THEN
 11.2052 +                  IF object_type_='MEASURE' THEN
 11.2053 +                     Error_SYS.Appl_General(lu_name_,'DISTATTR1: Distribution attribute must have a value for measure :P1 in parent scorecard :P2.',scorecard_object_,scorecard_);
 11.2054 +                  ELSE
 11.2055 +                     Error_SYS.Appl_General(lu_name_,'DISTATTR2: Distribution attribute must have a value for component :P1 in parent scorecard :P2.',scorecard_object_,scorecard_);
 11.2056 +                  END IF;
 11.2057 +               END IF;
 11.2058 +               attribute_val_str_:=Scorecard_Attribute_API.Get_Value(environment_,child_scorecards_.scorecard,
 11.2059 +                                                                    distribution_attribute_);
 11.2060 +               IF attribute_val_str_ IS NULL THEN
 11.2061 +                  Error_SYS.Appl_General(lu_name_,'ATTRERR: Attribute :P1 must have a value in scorecard :P2.',distribution_attribute_,child_scorecards_.scorecard);
 11.2062 +               ELSE
 11.2063 +                  BEGIN
 11.2064 +                     attribute_value_:=TO_NUMBER(attribute_val_str_);
 11.2065 +                  EXCEPTION
 11.2066 +                     WHEN OTHERS THEN
 11.2067 +	                    Error_SYS.Appl_General(lu_name_,'NUMVALERR: Value of the attribute :P1 in all child scorecards of parent scorecard :P2 must be numeric.',distribution_attribute_,scorecard_);
 11.2068 +                  END;
 11.2069 +               END IF;
 11.2070 +               BEGIN
 11.2071 +                  OPEN get_attribute_value_sum(distribution_attribute_);
 11.2072 +                  FETCH get_attribute_value_sum INTO attribute_value_sum_;
 11.2073 +                  CLOSE get_attribute_value_sum;
 11.2074 +
 11.2075 +                  IF attribute_value_sum_=0 THEN
 11.2076 +                     Error_SYS.Appl_General(lu_name_,'ATTRSUM : Attribute value of at least one child scorecard of parent scorecard :P1 must be greater than 0.');
 11.2077 +                  END IF;
 11.2078 +               EXCEPTION
 11.2079 +                  WHEN OTHERS THEN
 11.2080 +                     Error_SYS.Appl_General(lu_name_,'NUMVALERR: Value of the attribute :P1 in all child scorecards of parent scorecard :P2 must be numeric.',distribution_attribute_,scorecard_);
 11.2081 +               END;
 11.2082 +
 11.2083 +               FOR temp_period_count_ IN 1..period_count_ LOOP
 11.2084 +                  child_val_arr_(temp_period_count_):=parent_val_arr_(temp_period_count_)
 11.2085 +                                                     *(attribute_value_/attribute_value_sum_);
 11.2086 +                  year_value_:=year_value_ +child_val_arr_(temp_period_count_);
 11.2087 +               END LOOP;
 11.2088 +            END IF;
 11.2089 +         END IF;
 11.2090 +         newrec_.year_value:=year_value_;
 11.2091 +         newrec_.p1_value:=child_val_arr_(1);
 11.2092 +         newrec_.p2_value:=child_val_arr_(2);
 11.2093 +         newrec_.p3_value:=child_val_arr_(3);
 11.2094 +         newrec_.p4_value:=child_val_arr_(4);
 11.2095 +         newrec_.p5_value:=child_val_arr_(5);
 11.2096 +         newrec_.p6_value:=child_val_arr_(6);
 11.2097 +         newrec_.p7_value:=child_val_arr_(7);
 11.2098 +         newrec_.p8_value:=child_val_arr_(8);
 11.2099 +         newrec_.p9_value:=child_val_arr_(9);
 11.2100 +         newrec_.p10_value:=child_val_arr_(10);
 11.2101 +         newrec_.p11_value:=child_val_arr_(11);
 11.2102 +         newrec_.p12_value:=child_val_arr_(12);
 11.2103 +         Update___(objid_,oldrec_,newrec_,attr_,objversion_,TRUE);
 11.2104 +         Scorecard_api.Set_To_Planned(environment_,child_scorecards_.scorecard);
 11.2105 +         Scorecard_Input_Value_api.Set_To_Planned(environment_,child_scorecards_.scorecard,year_,version_,scorecard_object_);
 11.2106 +      END IF;
 11.2107 +   END LOOP;
 11.2108 +END Distribute_Input_Values___;
 11.2109 +PROCEDURE Object_Planned_Date___ (
 11.2110 +   rec_  IN     &TABLE%ROWTYPE,
 11.2111 +   attr_ IN OUT VARCHAR2 )
 11.2112 +IS
 11.2113 +   newrec_ &TABLE%ROWTYPE;
 11.2114 +BEGIN
 11.2115 +   newrec_ := rec_;
 11.2116 +   Finite_State_Set___(newrec_, 'Planned');
 11.2117 +END Object_Planned_Date___;
 11.2118 +
 11.2119 +FUNCTION Find_Column___(
 11.2120 +   environment_      IN VARCHAR2,
 11.2121 +   scorecard_        IN VARCHAR2,
 11.2122 +   year_             IN VARCHAR2,
 11.2123 +   version_          IN VARCHAR2,
 11.2124 +   scorecard_object_ IN VARCHAR2,
 11.2125 +   key_              IN VARCHAR2) RETURN VARCHAR2
 11.2126 +IS
 11.2127 +   CURSOR get_record IS
 11.2128 +      SELECT p1_key, p2_key, p3_key, p4_key, p5_key, p6_key,
 11.2129 +             p7_key, p8_key, p9_key, p10_key, p11_key, p12_key
 11.2130 +      FROM   &TABLE
 11.2131 +      WHERE  environment      = environment_
 11.2132 +      AND    scorecard        = scorecard_
 11.2133 +      AND    year             = year_
 11.2134 +      AND    version          = version_
 11.2135 +      AND    scorecard_object = scorecard_object_;
 11.2136 +
 11.2137 +   column_ VARCHAR2(30);
 11.2138 +BEGIN
 11.2139 +   FOR rec_ IN get_record LOOP
 11.2140 +      IF (rec_.p1_key = key_) THEN
 11.2141 +         column_ := 'P1_VALUE';
 11.2142 +      ELSIF (rec_.p2_key = key_) THEN
 11.2143 +         column_ := 'P2_VALUE';
 11.2144 +      ELSIF (rec_.p3_key = key_) THEN
 11.2145 +         column_ := 'P3_VALUE';
 11.2146 +      ELSIF (rec_.p4_key = key_) THEN
 11.2147 +         column_ := 'P4_VALUE';
 11.2148 +      ELSIF (rec_.p5_key = key_) THEN
 11.2149 +         column_ := 'P5_VALUE';
 11.2150 +      ELSIF (rec_.p6_key = key_) THEN
 11.2151 +         column_ := 'P6_VALUE';
 11.2152 +      ELSIF (rec_.p7_key = key_) THEN
 11.2153 +         column_ := 'P7_VALUE';
 11.2154 +      ELSIF (rec_.p8_key = key_) THEN
 11.2155 +         column_ := 'P8_VALUE';
 11.2156 +      ELSIF (rec_.p9_key = key_) THEN
 11.2157 +         column_ := 'P9_VALUE';
 11.2158 +      ELSIF (rec_.p10_key = key_) THEN
 11.2159 +         column_ := 'P10_VALUE';
 11.2160 +      ELSIF (rec_.p11_key = key_) THEN
 11.2161 +         column_ := 'P11_VALUE';
 11.2162 +      ELSIF (rec_.p12_key = key_) THEN
 11.2163 +         column_ := 'P12_VALUE';
 11.2164 +      END IF;
 11.2165 +   END LOOP;
 11.2166 +
 11.2167 +   RETURN column_;
 11.2168 +END Find_Column___;
 11.2169 +-----------------------------------------------------------------------------
 11.2170 +-------------------- LU SPECIFIC PRIVATE METHODS ----------------------------
 11.2171 +-----------------------------------------------------------------------------
 11.2172 +
 11.2173 +
 11.2174 +PROCEDURE Update_Versions__ (
 11.2175 +   environment_ IN VARCHAR2,
 11.2176 +   scorecard_ IN VARCHAR2,
 11.2177 +   measure_ IN VARCHAR2,
 11.2178 +   object_type_ IN VARCHAR2,
 11.2179 +   period_ IN VARCHAR2,
 11.2180 +   version_ IN VARCHAR2,
 11.2181 +   version_value_ IN NUMBER,
 11.2182 +   plan_type_ IN VARCHAR2,
 11.2183 +   data_mart_ IN VARCHAR2 )
 11.2184 +IS
 11.2185 +  attr_               VARCHAR2(32000);
 11.2186 +  objid_              VARCHAR2(2000);
 11.2187 +  objversion_         VARCHAR2(2000);
 11.2188 +  info_               VARCHAR2(2000);
 11.2189 +BEGIN
 11.2190 +  General_SYS.Init_Method(lu_name_, '&PKG', 'Update_Versions__');
 11.2191 +  Client_SYS.Clear_Attr(attr_);
 11.2192 +  IF version_ = 'TAR' THEN
 11.2193 +     Client_SYS.Add_To_Attr('TARGET_VALUE', version_value_, attr_);
 11.2194 +  ELSIF version_ = 'ACT' THEN
 11.2195 +     Client_SYS.Add_To_Attr('ACTUAL_VALUE', version_value_, attr_);
 11.2196 +  ELSE
 11.2197 +     Client_SYS.Add_To_Attr(version_||'_VALUE', version_value_, attr_);
 11.2198 +  END IF;
 11.2199 +  IF data_mart_='TRUE' THEN
 11.2200 +     Bp_Scorecard_Fact_API.Get_Id_Version(objid_,objversion_,environment_,scorecard_,period_,object_type_,measure_);
 11.2201 +     Bp_Scorecard_Fact_API.Modify__(info_,objid_,objversion_,attr_,'DO');
 11.2202 +  ELSE
 11.2203 +     Scorecard_Value_API.Get_Id_Version(objid_,objversion_,environment_,scorecard_,period_,object_type_,measure_);
 11.2204 +     Scorecard_Value_API.Modify__(info_,objid_,objversion_,attr_,'DO');
 11.2205 +  END IF;
 11.2206 +END Update_Versions__;
 11.2207 +
 11.2208 +PROCEDURE Publish__ (
 11.2209 +   environment_ IN VARCHAR2,
 11.2210 +   scorecard_ IN VARCHAR2,
 11.2211 +   measure_ IN VARCHAR2,
 11.2212 +   object_type_ IN VARCHAR2,
 11.2213 +   period_ IN VARCHAR2,
 11.2214 +   version_ IN VARCHAR2,
 11.2215 +   value_ IN NUMBER,
 11.2216 +   plan_type_ IN VARCHAR2 )
 11.2217 +IS
 11.2218 +  attr_               VARCHAR2(32000);
 11.2219 +  objid_              VARCHAR2(2000);
 11.2220 +  objversion_         VARCHAR2(2000);
 11.2221 +  info_               VARCHAR2(2000);
 11.2222 +  flag_               VARCHAR2(5);
 11.2223 +  data_mart_enabled_  VARCHAR2(5);
 11.2224 +BEGIN
 11.2225 +   General_SYS.Init_Method(lu_name_, '&PKG', 'Publish__');
 11.2226 +   flag_ := 'TRUE';
 11.2227 +   data_mart_enabled_:= Scorecard_Environment_API.Get_Data_Mart(environment_);
 11.2228 +
 11.2229 +   IF data_mart_enabled_='TRUE' THEN
 11.2230 +      IF Bp_Scorecard_Fact_API.Check_Exist_By_Object(environment_,scorecard_,period_,object_type_,measure_)='FALSE' THEN
 11.2231 +         IF value_ IS NOT NULL THEN
 11.2232 +            Client_SYS.Clear_Attr(attr_);
 11.2233 +            Client_SYS.Add_To_Attr('ENVIRONMENT', environment_, attr_);
 11.2234 +            Client_SYS.Add_To_Attr('SCORECARD', scorecard_, attr_);
 11.2235 +            Client_SYS.Add_To_Attr('PERIOD', period_, attr_);
 11.2236 +            Client_SYS.Add_To_Attr(object_type_, measure_, attr_);
 11.2237 +            Bp_Scorecard_Fact_API.New__(info_,objid_,objversion_,attr_,'DO');
 11.2238 +         ELSE
 11.2239 +              flag_ := 'FALSE';
 11.2240 +           END IF;
 11.2241 +        END IF;
 11.2242 +     ELSE
 11.2243 +        IF Scorecard_Value_API.Check_Exist_By_Object(environment_,scorecard_,period_,object_type_,measure_)='FALSE' THEN
 11.2244 +           IF value_ IS NOT NULL THEN
 11.2245 +              Client_SYS.Clear_Attr(attr_);
 11.2246 +              Client_SYS.Add_To_Attr('ENVIRONMENT', environment_, attr_);
 11.2247 +              Client_SYS.Add_To_Attr('SCORECARD', scorecard_, attr_);
 11.2248 +              Client_SYS.Add_To_Attr('PERIOD', period_, attr_);
 11.2249 +              Client_SYS.Add_To_Attr(object_type_, measure_, attr_);
 11.2250 +              Scorecard_Value_API.New__(info_,objid_,objversion_,attr_,'DO');
 11.2251 +           ELSE
 11.2252 +              flag_ := 'FALSE';
 11.2253 +           END IF;
 11.2254 +        END IF;
 11.2255 +     END IF;
 11.2256 +
 11.2257 +     IF (flag_ = 'TRUE' AND value_ IS NOT NULL) THEN
 11.2258 +        Update_Versions__(environment_,scorecard_,measure_ ,object_type_, period_ , version_, value_ , plan_type_ ,data_mart_enabled_);
 11.2259 +     END IF;
 11.2260 +  flag_ := 'FALSE';
 11.2261 +END Publish__;
 11.2262 +PROCEDURE Publish_Score__ (
 11.2263 +   environment_ IN VARCHAR2,
 11.2264 +   scorecard_ IN VARCHAR2,
 11.2265 +   publish_type_ IN VARCHAR2 )
 11.2266 +IS
 11.2267 +  measure_ VARCHAR2(40);
 11.2268 +  version_ VARCHAR2(15);
 11.2269 +  target_tab_  VARCHAR2(30);
 11.2270 +
 11.2271 +  --get measures and components for a specific environment_, scorecard_
 11.2272 +  CURSOR get_measure IS
 11.2273 +     select * from scorecard_input_value_tab
 11.2274 +        where scorecard = scorecard_
 11.2275 +        and environment = environment_
 11.2276 +        order by scorecard_object;
 11.2277 +
 11.2278 +  -- get Id, version of a scorecard record by keys
 11.2279 +  CURSOR get_objid IS
 11.2280 +     select objid,objversion from scorecard
 11.2281 +        where scorecard = scorecard_
 11.2282 +        and environment = environment_;
 11.2283 +
 11.2284 +  attr_   VARCHAR2(32000);
 11.2285 +  objid_  VARCHAR2(32000);
 11.2286 +  objversion_ VARCHAR2(32000);
 11.2287 +  info_  VARCHAR2(2000);
 11.2288 +  isScorecardPlan VARCHAR2(5);
 11.2289 +  isEnvPlan VARCHAR2(5);
 11.2290 +BEGIN
 11.2291 +  General_SYS.Init_Method(lu_name_, '&PKG', 'Publish_Score__');
 11.2292 +  FOR get_rec_ in get_measure LOOP
 11.2293 +     isEnvPlan := 'FALSE';
 11.2294 +     isScorecardPlan := 'FALSE';
 11.2295 +
 11.2296 +     measure_ := get_rec_.scorecard_object;
 11.2297 +     version_ := get_rec_.version;
 11.2298 +     if publish_type_ = 'ENV' then  --plublish only environment plan data
 11.2299 +        isEnvPlan := MEASURE_VERSION_API.GET_ENVIRONMENT_PLANNING(version_,environment_);
 11.2300 +     else
 11.2301 +        isScorecardPlan := MEASURE_VERSION_API.Get_Scorecard_Planning (version_,environment_);
 11.2302 +     end if;
 11.2303 +
 11.2304 +     if (isScorecardPlan = 'TRUE' or isEnvPlan = 'TRUE' ) then
 11.2305 +
 11.2306 +        if get_rec_.p1_key is not null then
 11.2307 +           Publish__(environment_, scorecard_,measure_,  get_rec_.object_type, get_rec_.p1_key, version_ , get_rec_.p1_value,publish_type_);
 11.2308 +        end if;
 11.2309 +        if get_rec_.p2_key is not null then
 11.2310 +           Publish__(environment_, scorecard_,measure_, get_rec_.object_type ,get_rec_.p2_key, version_ , get_rec_.p2_value,publish_type_);
 11.2311 +        end if;
 11.2312 +        if get_rec_.p3_key is not null then
 11.2313 +           Publish__(environment_, scorecard_,measure_, get_rec_.object_type ,get_rec_.p3_key, version_ , get_rec_.p3_value,publish_type_);
 11.2314 +        end if;
 11.2315 +        if get_rec_.p4_key is not null then
 11.2316 +           Publish__(environment_, scorecard_,measure_, get_rec_.object_type,  get_rec_.p4_key, version_ , get_rec_.p4_value,publish_type_);
 11.2317 +        end if;
 11.2318 +       if get_rec_.p5_key is not null then
 11.2319 +           Publish__(environment_, scorecard_,measure_, get_rec_.object_type,  get_rec_.p5_key, version_ , get_rec_.p5_value,publish_type_);
 11.2320 +        end if;
 11.2321 +        if get_rec_.p6_key is not null then
 11.2322 +           Publish__(environment_, scorecard_,measure_,  get_rec_.object_type , get_rec_.p6_key, version_ , get_rec_.p6_value,publish_type_);
 11.2323 +        end if;
 11.2324 +        if get_rec_.p7_key is not null then
 11.2325 +           Publish__(environment_, scorecard_,measure_,  get_rec_.object_type , get_rec_.p7_key, version_ , get_rec_.p7_value,publish_type_);
 11.2326 +        end if;
 11.2327 +        if get_rec_.p8_key is not null then
 11.2328 +           Publish__(environment_, scorecard_,measure_,  get_rec_.object_type, get_rec_.p8_key, version_ , get_rec_.p8_value,publish_type_);
 11.2329 +        end if;
 11.2330 +        if get_rec_.p9_key is not null then
 11.2331 +           Publish__(environment_, scorecard_,measure_,  get_rec_.object_type , get_rec_.p9_key, version_ , get_rec_.p9_value,publish_type_);
 11.2332 +        end if;
 11.2333 +        if get_rec_.p10_key is not null then
 11.2334 +           Publish__(environment_, scorecard_,measure_,  get_rec_.object_type , get_rec_.p10_key, version_ , get_rec_.p10_value,publish_type_);
 11.2335 +        end if;
 11.2336 +        -- Call Id - 85775 Fix
 11.2337 +        if get_rec_.p11_key is not null then
 11.2338 +           Publish__(environment_, scorecard_,measure_,  get_rec_.object_type , get_rec_.p11_key, version_ , get_rec_.p11_value,publish_type_);
 11.2339 +        end if;
 11.2340 +        if get_rec_.p12_key is not null then
 11.2341 +           Publish__(environment_, scorecard_,measure_,  get_rec_.object_type , get_rec_.p12_key, version_ , get_rec_.p12_value,publish_type_);
 11.2342 +        end if;
 11.2343 +     end if;
 11.2344 +  END LOOP;
 11.2345 +  open get_objid;
 11.2346 +  fetch get_objid into objid_,objversion_;
 11.2347 +  close get_objid;
 11.2348 +
 11.2349 +  SCORECARD_API.MODIFY__(info_,objid_,objversion_,attr_,'DO');
 11.2350 +
 11.2351 +  isScorecardPlan := 'FALSE';
 11.2352 +END Publish_Score__;
 11.2353 +PROCEDURE Start_Publish_Environments__ (
 11.2354 +   attr_ IN VARCHAR2 )
 11.2355 +IS
 11.2356 +   new_attr_ VARCHAR2(32000) := attr_;
 11.2357 +   desc_     VARCHAR2(2000);
 11.2358 +BEGIN
 11.2359 +   General_SYS.Init_Method(lu_name_, '&PKG', 'Start_Publish_Environments__');
 11.2360 +   desc_ := Language_SYS.Translate_Constant (lu_name_, 'BGJOB_INPUTSSC:Publish Environment.');
 11.2361 +   Transaction_SYS.Deferred_Call ('Scorecard_Input_Value_API.Set_Publish_Environments__',new_attr_, desc_);
 11.2362 +END Start_Publish_Environments__;
 11.2363 +PROCEDURE Set_Publish_Environments__ (
 11.2364 +   attr_ IN VARCHAR2 )
 11.2365 +IS
 11.2366 +   env VARCHAR2(20);
 11.2367 +
 11.2368 +BEGIN
 11.2369 +   General_SYS.Init_Method(lu_name_, '&PKG', 'Set_Publish_Environments__');
 11.2370 +   env:=Client_SYS.Get_Item_Value('ENVIRONMENT',attr_);
 11.2371 +   Publish_Environment(env);
 11.2372 +
 11.2373 +END Set_Publish_Environments__;
 11.2374 +PROCEDURE Start_Publish_Scorecards__ (
 11.2375 +   attr_ IN VARCHAR2 )
 11.2376 +IS
 11.2377 +   new_attr_ VARCHAR2(32000) := attr_;
 11.2378 +   desc_     VARCHAR2(2000);
 11.2379 +BEGIN
 11.2380 +   General_SYS.Init_Method(lu_name_, '&PKG', 'Start_Publish_Scorecards__');
 11.2381 +   desc_ := Language_SYS.Translate_Constant (lu_name_, 'BGJOB_INPUTSSC:Publish Scorecards.');
 11.2382 +   Transaction_SYS.Deferred_Call ('Scorecard_Input_Value_API.Prepare_Scorecard_Publish__',new_attr_, desc_);
 11.2383 +END Start_Publish_Scorecards__;
 11.2384 +PROCEDURE Prepare_Scorecard_Publish__ (
 11.2385 +   attr_ IN VARCHAR2 )
 11.2386 +IS
 11.2387 +   env_ VARCHAR2(2000);
 11.2388 +   scr_ VARCHAR2(2000);
 11.2389 +BEGIN
 11.2390 +   General_SYS.Init_Method(lu_name_, '&PKG', 'Prepare_Scorecard_Publish__');
 11.2391 +   env_:=Client_SYS.Get_Item_Value('ENVIRONMENT',attr_);
 11.2392 +   scr_:=Client_SYS.Get_Item_Value('SCORECARD',attr_);
 11.2393 +   Set_Publish_Scorecards(env_,scr_);
 11.2394 +END Prepare_Scorecard_Publish__;
 11.2395 +PROCEDURE Plan__ (
 11.2396 +   info_       OUT    VARCHAR2,
 11.2397 +   objid_      IN     VARCHAR2,
 11.2398 +   objversion_ IN OUT VARCHAR2,
 11.2399 +   attr_       IN OUT VARCHAR2,
 11.2400 +   action_     IN     VARCHAR2 )
 11.2401 +IS
 11.2402 +   rec_ &TABLE%ROWTYPE;
 11.2403 +BEGIN
 11.2404 +   General_SYS.Init_Method(lu_name_, '&PKG', 'Plan__');
 11.2405 +   IF (action_ = 'CHECK') THEN
 11.2406 +      NULL;
 11.2407 +   ELSIF (action_ = 'DO') THEN
 11.2408 +      rec_ := Lock_By_Id___(objid_, objversion_);
 11.2409 +      Finite_State_Machine___(rec_, 'Plan', attr_);
 11.2410 +      objversion_ := to_char(rec_.rowversion,'YYYYMMDDHH24MISS');
 11.2411 +      Finite_State_Add_To_Attr___(rec_, attr_);
 11.2412 +   END IF;
 11.2413 +   info_ := Client_SYS.Get_All_Info;
 11.2414 +END Plan__;
 11.2415 +-----------------------------------------------------------------------------
 11.2416 +-------------------- LU SPECIFIC PROTECTED METHODS --------------------------
 11.2417 +-----------------------------------------------------------------------------
 11.2418 +
 11.2419 +
 11.2420 +-----------------------------------------------------------------------------
 11.2421 +-------------------- LU SPECIFIC PUBLIC METHODS -----------------------------
 11.2422 +-----------------------------------------------------------------------------
 11.2423 +
 11.2424 +
 11.2425 +FUNCTION Get_Year (
 11.2426 +   environment_ IN VARCHAR2,
 11.2427 +   scorecard_ IN VARCHAR2,
 11.2428 +   year_ IN VARCHAR2,
 11.2429 +   version_ IN VARCHAR2,
 11.2430 +   scorecard_object_ IN VARCHAR2 ) RETURN VARCHAR2
 11.2431 +IS
 11.2432 +   temp_ &TABLE..year%TYPE;
 11.2433 +   CURSOR get_attr IS
 11.2434 +      SELECT year
 11.2435 +      FROM &TABLE
 11.2436 +      WHERE environment = environment_
 11.2437 +      AND   scorecard = scorecard_
 11.2438 +      AND   year = year_
 11.2439 +      AND   version = version_
 11.2440 +      AND   scorecard_object = scorecard_object_;
 11.2441 +BEGIN
 11.2442 +   OPEN get_attr;
 11.2443 +   FETCH get_attr INTO temp_;
 11.2444 +   CLOSE get_attr;
 11.2445 +   RETURN temp_;
 11.2446 +END Get_Year;
 11.2447 +FUNCTION Get_Distributed_Attr (
 11.2448 +   environment_ IN VARCHAR2,
 11.2449 +   scorecard_ IN VARCHAR2,
 11.2450 +   component_ IN VARCHAR2,
 11.2451 +   year_ IN VARCHAR2,
 11.2452 +   year_value_ IN NUMBER ) RETURN VARCHAR2
 11.2453 +IS
 11.2454 +   period_                  VARCHAR2(20);
 11.2455 +   version_val_             NUMBER;
 11.2456 +   distribute_string_       VARCHAR2(2000);
 11.2457 +   index_value_             NUMBER;
 11.2458 +   distribute_val_          NUMBER;
 11.2459 +   total_val_               NUMBER;
 11.2460 +   --distribute_str_       VARCHAR2(20);
 11.2461 +
 11.2462 +   CURSOR version_cur_ IS
 11.2463 +      SELECT period,v4_value
 11.2464 +      FROM scorecard_value11
 11.2465 +      WHERE environment = environment_
 11.2466 +      AND scorecard = scorecard_
 11.2467 +      AND component = component_
 11.2468 +      AND year = year_;
 11.2469 +
 11.2470 +      CURSOR total_cur_ IS
 11.2471 +      SELECT sum(v4_value)
 11.2472 +      FROM scorecard_value11
 11.2473 +      WHERE environment = environment_
 11.2474 +      AND scorecard = scorecard_
 11.2475 +      AND component = component_
 11.2476 +      AND year = year_;
 11.2477 +BEGIN
 11.2478 +   General_SYS.Init_Method(lu_name_, '&PKG', 'Get_Distributed_Attr');
 11.2479 +   OPEN total_cur_;
 11.2480 +     FETCH total_cur_ INTO total_val_;
 11.2481 +   CLOSE total_cur_;
 11.2482 +   IF total_val_ IS NULL THEN
 11.2483 +      Error_SYS.Appl_General(lu_name_,'SCDISVAL : There are no values for version6');
 11.2484 +   END IF;
 11.2485 +
 11.2486 +  --distribute_string_ := "";
 11.2487 +
 11.2488 +  FOR temp_ IN version_cur_ LOOP
 11.2489 +
 11.2490 +  version_val_ := temp_.v4_value;
 11.2491 +  period_  := temp_.period;
 11.2492 +  index_value_   := scorecard_index_api.Get_Value(environment_,period_,'k_index');
 11.2493 +  distribute_val_ := (version_val_/total_val_)*year_value_*index_value_;
 11.2494 +  distribute_string_ := distribute_string_ || '^' ||distribute_val_;
 11.2495 +
 11.2496 +  END LOOP;
 11.2497 +  RETURN distribute_string_;
 11.2498 +END Get_Distributed_Attr;
 11.2499 +FUNCTION Get_Action (
 11.2500 +   environment_ IN VARCHAR2,
 11.2501 +   scorecard_ IN VARCHAR2,
 11.2502 +   year_ IN VARCHAR2,
 11.2503 +   version_ IN VARCHAR2,
 11.2504 +   scorecard_object_ IN VARCHAR2 ) RETURN VARCHAR2
 11.2505 +IS
 11.2506 +   temp_ &TABLE..action%TYPE;
 11.2507 +   CURSOR get_attr IS
 11.2508 +      SELECT action
 11.2509 +      FROM &TABLE
 11.2510 +      WHERE environment = environment_
 11.2511 +      AND   scorecard = scorecard_
 11.2512 +      AND   year = year_
 11.2513 +      AND   version = version_
 11.2514 +      AND   scorecard_object = scorecard_object_;
 11.2515 +BEGIN
 11.2516 +   OPEN get_attr;
 11.2517 +   FETCH get_attr INTO temp_;
 11.2518 +   CLOSE get_attr;
 11.2519 +   RETURN temp_;
 11.2520 +END Get_Action;
 11.2521 +FUNCTION Get_Mea_State_Change_Date (
 11.2522 +   environment_ IN VARCHAR2,
 11.2523 +   scorecard_ IN VARCHAR2,
 11.2524 +   year_ IN VARCHAR2,
 11.2525 +   version_ IN VARCHAR2,
 11.2526 +   scorecard_object_ IN VARCHAR2 ) RETURN DATE
 11.2527 +IS
 11.2528 +   temp_ &TABLE..mea_state_change_date%TYPE;
 11.2529 +   CURSOR get_attr IS
 11.2530 +      SELECT mea_state_change_date
 11.2531 +      FROM &TABLE
 11.2532 +      WHERE environment = environment_
 11.2533 +      AND   scorecard = scorecard_
 11.2534 +      AND   year = year_
 11.2535 +      AND   version = version_
 11.2536 +      AND   scorecard_object = scorecard_object_;
 11.2537 +BEGIN
 11.2538 +   OPEN get_attr;
 11.2539 +   FETCH get_attr INTO temp_;
 11.2540 +   CLOSE get_attr;
 11.2541 +   RETURN temp_;
 11.2542 +END Get_Mea_State_Change_Date;
 11.2543 +FUNCTION Get_Budget_Version (
 11.2544 +   environment_ IN VARCHAR2,
 11.2545 +   scorecard_ IN VARCHAR2,
 11.2546 +   year_ IN VARCHAR2,
 11.2547 +   version_ IN VARCHAR2,
 11.2548 +   scorecard_object_ IN VARCHAR2 ) RETURN VARCHAR2
 11.2549 +IS
 11.2550 +   temp_ &TABLE..budget_version%TYPE;
 11.2551 +   CURSOR get_attr IS
 11.2552 +      SELECT budget_version
 11.2553 +      FROM &TABLE
 11.2554 +      WHERE environment = environment_
 11.2555 +      AND   scorecard = scorecard_
 11.2556 +      AND   year = year_
 11.2557 +      AND   version = version_
 11.2558 +      AND   scorecard_object = scorecard_object_;
 11.2559 +BEGIN
 11.2560 +   OPEN get_attr;
 11.2561 +   FETCH get_attr INTO temp_;
 11.2562 +   CLOSE get_attr;
 11.2563 +   RETURN temp_;
 11.2564 +END Get_Budget_Version;
 11.2565 +PROCEDURE Update_Sales_Values (
 11.2566 +   environment_ IN VARCHAR2,
 11.2567 +   scorecard_ IN VARCHAR2,
 11.2568 +   year_ IN VARCHAR2,
 11.2569 +   version_ IN VARCHAR2,
 11.2570 +   component_ IN VARCHAR2,
 11.2571 +   year_value_ IN NUMBER,
 11.2572 +   period_count_ IN NUMBER,
 11.2573 +   from_where_ IN VARCHAR2,
 11.2574 +   action_value_ IN VARCHAR2 )
 11.2575 +IS
 11.2576 +   period_                  VARCHAR2(20);
 11.2577 +   version_val_             NUMBER;
 11.2578 +   distribute_string_       VARCHAR2(2000);
 11.2579 +   index_value_             NUMBER;
 11.2580 +   distribute_val_          NUMBER;
 11.2581 +   total_val_               NUMBER;
 11.2582 +   total_dist_val_          NUMBER;
 11.2583 +   avarage_val_             NUMBER;
 11.2584 +   count_null_              NUMBER;
 11.2585 +   total_index_             NUMBER;
 11.2586 +   period_index_            VARCHAR2(20);
 11.2587 +   avarage_index_val_       NUMBER;
 11.2588 +   distribute_index_val_    NUMBER;
 11.2589 +   index_val_               NUMBER;
 11.2590 +
 11.2591 +   count_                   NUMBER;
 11.2592 +   dist_type_               VARCHAR2(30);
 11.2593 +   dist_index_              VARCHAR2(20);
 11.2594 +   dist_version_            VARCHAR2(20);
 11.2595 +   dist_ver_                VARCHAR2(10);
 11.2596 +   dist_logic_              VARCHAR2(10);
 11.2597 +   temp1_                   VARCHAR2(1000);
 11.2598 +   temp2_                   VARCHAR2(1000);
 11.2599 +
 11.2600 +   TYPE RefCurTyp IS REF CURSOR;
 11.2601 +
 11.2602 +   version_cur_      RefCurTyp;
 11.2603 +   total_cur_        RefCurTyp;
 11.2604 +
 11.2605 +   TYPE Val_Array_Type IS TABLE OF NUMBER
 11.2606 +            INDEX BY BINARY_INTEGER;
 11.2607 +
 11.2608 +   val_arr_  Val_Array_Type;
 11.2609 +   rec_        SCORECARD_INPUT_VALUE_TAB%ROWTYPE;
 11.2610 +
 11.2611 +   CURSOR total_index_cur_ IS
 11.2612 +      SELECT SUM(value)
 11.2613 +      FROM scorecard_index_tab
 11.2614 +      WHERE environment = environment_
 11.2615 +      AND index_type = dist_index_;
 11.2616 +
 11.2617 +   CURSOR get_period IS
 11.2618 +      SELECT period
 11.2619 +      FROM scorecard_period_tab
 11.2620 +      WHERE environment = environment_
 11.2621 +      AND year = year_
 11.2622 +      ORDER BY end_date;
 11.2623 +
 11.2624 +   -- Bug 65540, begin
 11.2625 +   final_year_value_      NUMBER;
 11.2626 +   measure_format_        NUMBER;
 11.2627 +   -- Bug 65540, end
 11.2628 +
 11.2629 +
 11.2630 +BEGIN
 11.2631 +   General_SYS.Init_Method(lu_name_, '&PKG', 'Update_Sales_Values');
 11.2632 +   rec_ := Lock_By_Keys___(environment_,scorecard_,year_,version_,component_);
 11.2633 +   count_ := 0;
 11.2634 +   --val_arr_  Val_Array_Type;
 11.2635 +
 11.2636 +   IF (from_where_ = 'FROM_COMPONENT') THEN
 11.2637 +
 11.2638 +   dist_type_ := measure_type_api.Encode(scorecard_Measure_api.Get_Measure_type(component_));
 11.2639 +   dist_index_ := scorecard_Structure_api.Get_Distribution_Index(scorecard_,component_,environment_,Scorecard_Level_Type_api.Decode('COMPONENT'));
 11.2640 +   dist_ver_ := UPPER(scorecard_Structure_api.Get_Distribution_Version(scorecard_,component_,environment_,Scorecard_Level_Type_api.Decode('COMPONENT')));
 11.2641 +   dist_logic_ := scorecard_Structure_api.Get_Dist_Logic_Db(scorecard_,component_,environment_,'COMPONENT');
 11.2642 +
 11.2643 +   END IF;
 11.2644 +
 11.2645 +   IF (from_where_ = 'FROM_MEASURE') THEN
 11.2646 +
 11.2647 +   dist_type_  := measure_type_api.Encode(scorecard_Measure_api.Get_Measure_type(component_));
 11.2648 +   dist_index_ := scorecard_Structure_api.Get_Distribution_Index(scorecard_,component_,environment_,Scorecard_Level_Type_api.Decode('MEASURE'));
 11.2649 +   dist_ver_   := UPPER(scorecard_Structure_api.Get_Distribution_Version(scorecard_,component_,environment_,Scorecard_Level_Type_api.Decode('MEASURE')));
 11.2650 +   dist_logic_ := scorecard_Structure_api.Get_Dist_Logic_Db(scorecard_,component_,environment_,'MEASURE');
 11.2651 +
 11.2652 +   END IF;
 11.2653 +
 11.2654 +   IF (dist_logic_ = 'INDEX') THEN
 11.2655 +
 11.2656 +      OPEN total_index_cur_;
 11.2657 +         FETCH total_index_cur_ INTO total_index_;
 11.2658 +      CLOSE total_index_cur_;
 11.2659 +
 11.2660 +      IF (total_index_ IS NULL) THEN
 11.2661 +         Error_SYS.Appl_General(lu_name_,'SCDISVAL : There are no values for indexes :P1',dist_index_);
 11.2662 +      END IF;
 11.2663 +
 11.2664 +      total_dist_val_ := 0;
 11.2665 +      avarage_index_val_ := 0;
 11.2666 +      distribute_index_val_ := 0;
 11.2667 +
 11.2668 +      OPEN get_period;
 11.2669 +      LOOP
 11.2670 +         FETCH get_period INTO period_index_;
 11.2671 +            EXIT WHEN get_period%NOTFOUND;
 11.2672 +         count_ := count_+1;
 11.2673 +         index_value_   := scorecard_index_api.Get_Value(environment_,period_index_,dist_index_);
 11.2674 +         IF (index_value_ IS NULL) THEN
 11.2675 +            CLOSE get_period;
 11.2676 +            Error_SYS.Appl_General(lu_name_,'SCDISNOINDEXVAL1 : There are no values for index :P1',dist_index_);
 11.2677 +         END IF;
 11.2678 +         IF (dist_type_ = 'PERCENTAGE') THEN
 11.2679 +            avarage_index_val_ := total_index_/period_count_;
 11.2680 +            distribute_index_val_ := (index_value_/avarage_index_val_)*year_value_;
 11.2681 +         ELSIF (dist_type_ = 'VALUE') THEN
 11.2682 +            distribute_index_val_ := (index_value_/total_index_)*year_value_;
 11.2683 +         END IF;
 11.2684 +         val_arr_(count_) := distribute_index_val_;
 11.2685 +         total_dist_val_ := total_dist_val_ + distribute_index_val_;
 11.2686 +      END LOOP;
 11.2687 +      CLOSE get_period;
 11.2688 +   ELSIF (dist_logic_ != 'INDEX') THEN
 11.2689 +      IF (dist_ver_ = 'ACT') THEN
 11.2690 +          dist_version_ := 'actual_value';
 11.2691 +      ELSIF (dist_ver_ = 'TAR') THEN
 11.2692 +          dist_version_ := 'target_value';
 11.2693 +      ELSIF (dist_ver_ = 'V1') THEN
 11.2694 +          dist_version_ := 'v1_value';
 11.2695 +      ELSIF (dist_ver_ = 'V2') THEN
 11.2696 +          dist_version_ := 'v2_value';
 11.2697 +      ELSIF (dist_ver_ = 'V3') THEN
 11.2698 +          dist_version_ := 'v3_value';
 11.2699 +      ELSIF (dist_ver_ = 'V4') THEN
 11.2700 +          dist_version_ := 'v4_value';
 11.2701 +      ELSIF (dist_ver_ = 'V5') THEN
 11.2702 +          dist_version_ := 'v5_value';
 11.2703 +      ELSIF (dist_ver_ = 'V6') THEN
 11.2704 +          dist_version_ := 'v6_value';
 11.2705 +      ELSIF (dist_ver_ = 'V7') THEN
 11.2706 +          dist_version_ := 'v7_value';
 11.2707 +      ELSIF (dist_ver_ = 'V8') THEN
 11.2708 +          dist_version_ := 'v8_value';
 11.2709 +      ELSIF (dist_ver_ = 'V9') THEN
 11.2710 +          dist_version_ := 'v9_value';
 11.2711 +      ELSIF (dist_ver_ = 'V10') THEN
 11.2712 +          dist_version_ := 'v10_value';
 11.2713 +      END IF;
 11.2714 +
 11.2715 +      IF( from_where_= 'FROM_COMPONENT') THEN
 11.2716 +         temp1_  := 'SELECT period,'|| dist_version_ ||'
 11.2717 +                    FROM  scorecard_value11
 11.2718 +                    WHERE environment= :p_environment
 11.2719 +                    AND   scorecard = :p_scorecard
 11.2720 +                    AND   component = :p_component
 11.2721 +                    AND   year = :p_year
 11.2722 +                    ORDER BY end_date';
 11.2723 +
 11.2724 +         temp2_  := 'SELECT sum('|| dist_version_ ||') '||'
 11.2725 +                    FROM  scorecard_value11
 11.2726 +                    WHERE environment= :p_environment
 11.2727 +                    AND   scorecard  = :p_scorecard
 11.2728 +                    AND   component  = :p_component
 11.2729 +                    AND   year = :p_year ';
 11.2730 +      END IF;
 11.2731 +
 11.2732 +      IF( from_where_= 'FROM_MEASURE') THEN
 11.2733 +         temp1_  := 'SELECT period,'|| dist_version_ ||'
 11.2734 +                    FROM  scorecard_value11
 11.2735 +                    WHERE environment= :p_environment
 11.2736 +                    AND   scorecard = :p_scorecard
 11.2737 +                    AND   measure = :p_component
 11.2738 +                    AND   year = :p_year
 11.2739 +                    ORDER BY end_date';
 11.2740 +
 11.2741 +         temp2_  := 'SELECT sum('|| dist_version_ ||') '||'
 11.2742 +                    FROM  scorecard_value11
 11.2743 +                    WHERE environment= :p_environment
 11.2744 +                    AND   scorecard = :p_scorecard
 11.2745 +                    AND   measure = :p_component
 11.2746 +                    AND   year = :p_year ';
 11.2747 +      END IF;
 11.2748 +
 11.2749 +      -- ifs_assert_safe shsalk 20060117
 11.2750 +      OPEN total_cur_ FOR temp2_ USING environment_,scorecard_,component_,year_;
 11.2751 +         FETCH total_cur_ INTO total_val_;
 11.2752 +      CLOSE total_cur_;
 11.2753 +
 11.2754 +      IF (total_val_ IS NULL) THEN
 11.2755 +         Error_SYS.Appl_General(lu_name_,'SCDISVAL : There are no values for distribution version :P1',dist_ver_);
 11.2756 +      END IF;
 11.2757 +
 11.2758 +      total_dist_val_ := 0;
 11.2759 +      avarage_val_ := 0;
 11.2760 +      -- ifs_assert_safe shsalk 20060117
 11.2761 +      OPEN version_cur_ FOR temp1_ USING environment_,scorecard_,component_,year_;
 11.2762 +      LOOP
 11.2763 +         FETCH version_cur_ INTO period_,version_val_;
 11.2764 +            EXIT WHEN version_cur_%NOTFOUND;
 11.2765 +         count_ := count_+1;
 11.2766 +         IF (version_val_ IS NULL) THEN
 11.2767 +            CLOSE version_cur_;
 11.2768 +            Error_SYS.Appl_General(lu_name_,'SCDISNOVAL1 : There are no values for distribution version :P1',dist_ver_);
 11.2769 +         ELSE
 11.2770 +            IF (dist_logic_ = 'SYB') THEN
 11.2771 +               index_value_   := scorecard_index_api.Get_Value(environment_,period_,dist_index_);
 11.2772 +               IF (index_value_ IS NULL) THEN
 11.2773 +                  CLOSE version_cur_;
 11.2774 +                  Error_SYS.Appl_General(lu_name_,'SCDISNOINDEXVAL1 : There are no values for distribution index :P1',dist_index_);
 11.2775 +               END IF;
 11.2776 +               IF (dist_type_ = 'PERCENTAGE') THEN
 11.2777 +                  avarage_val_ := total_val_/period_count_;
 11.2778 +                  distribute_val_ := (version_val_/avarage_val_)*year_value_*index_value_;
 11.2779 +               ELSIF (dist_type_ = 'VALUE') THEN
 11.2780 +                  distribute_val_ := (version_val_/total_val_)*year_value_*index_value_;
 11.2781 +               END IF;
 11.2782 +            ELSIF (dist_logic_ = 'VERSION') THEN
 11.2783 +               IF (dist_type_ = 'PERCENTAGE') THEN
 11.2784 +                  avarage_val_ := total_val_/period_count_;
 11.2785 +                  distribute_val_ := (version_val_/avarage_val_)*year_value_;
 11.2786 +               ELSIF (dist_type_ = 'VALUE') THEN
 11.2787 +                  distribute_val_ := (version_val_/total_val_)*year_value_;
 11.2788 +               END IF;
 11.2789 +            END IF;
 11.2790 +         END IF;
 11.2791 +
 11.2792 +         val_arr_(count_) := distribute_val_;
 11.2793 +         total_dist_val_ := total_dist_val_ + distribute_val_;
 11.2794 +      END LOOP;
 11.2795 +      CLOSE version_cur_;
 11.2796 +   END IF;
 11.2797 +
 11.2798 +
 11.2799 +   measure_format_      := TO_NUMBER(Scorecard_Measure_API.Get_Measure_Format(component_));
 11.2800 +
 11.2801 +   final_year_value_    := year_value_ * measure_format_;
 11.2802 +
 11.2803 +   IF (dist_logic_ != 'VERSION') THEN
 11.2804 +
 11.2805 +      IF (dist_type_ = 'PERCENTAGE') THEN
 11.2806 +         total_dist_val_ := total_dist_val_/count_;
 11.2807 +      END IF;
 11.2808 +
 11.2809 +      IF (year_value_ != total_dist_val_) THEN
 11.2810 +         FOR i IN 1..count_ LOOP
 11.2811 +            val_arr_(i) := (val_arr_(i)/total_dist_val_)*year_value_ * measure_format_;
 11.2812 +         END LOOP;
 11.2813 +      END IF;
 11.2814 +   END IF;
 11.2815 +
 11.2816 +   IF (count_= 1) THEN
 11.2817 +     UPDATE scorecard_input_value_tab
 11.2818 +          SET action = action_value_,
 11.2819 +                 year_value = final_year_value_,
 11.2820 +                 p1_value = val_arr_(1)
 11.2821 +             WHERE
 11.2822 +                 environment = environment_
 11.2823 +             AND
 11.2824 +                 scorecard = scorecard_
 11.2825 +             AND
 11.2826 +                 year = year_
 11.2827 +             AND
 11.2828 +                 version = version_
 11.2829 +             AND
 11.2830 +                 scorecard_object = component_;
 11.2831 +   ELSIF (count_= 2) THEN
 11.2832 +     UPDATE scorecard_input_value_tab
 11.2833 +          SET action = action_value_,
 11.2834 +                 year_value = final_year_value_,
 11.2835 +                 p1_value = val_arr_(1),
 11.2836 +                 p2_value = val_arr_(2)
 11.2837 +             WHERE
 11.2838 +                 environment = environment_
 11.2839 +             AND
 11.2840 +                 scorecard = scorecard_
 11.2841 +             AND
 11.2842 +                 year = year_
 11.2843 +             AND
 11.2844 +                 version = version_
 11.2845 +             AND
 11.2846 +                 scorecard_object = component_;
 11.2847 +   ELSIF (count_= 3) THEN
 11.2848 +     UPDATE scorecard_input_value_tab
 11.2849 +             SET action = action_value_,
 11.2850 +                 year_value = final_year_value_,
 11.2851 +                 p1_value = val_arr_(1),
 11.2852 +                 p2_value = val_arr_(2),
 11.2853 +                 p3_value = val_arr_(3)
 11.2854 +             WHERE
 11.2855 +                 environment = environment_
 11.2856 +             AND
 11.2857 +                 scorecard = scorecard_
 11.2858 +             AND
 11.2859 +                 year = year_
 11.2860 +             AND
 11.2861 +                 version = version_
 11.2862 +             AND
 11.2863 +                 scorecard_object = component_;
 11.2864 +   ELSIF (count_= 4) THEN
 11.2865 +     UPDATE scorecard_input_value_tab
 11.2866 +             SET action = action_value_,
 11.2867 +                 year_value = final_year_value_,
 11.2868 +                 p1_value = val_arr_(1),
 11.2869 +                 p2_value = val_arr_(2),
 11.2870 +                 p3_value = val_arr_(3),
 11.2871 +                 p4_value = val_arr_(4)
 11.2872 +             WHERE
 11.2873 +                 environment = environment_
 11.2874 +             AND
 11.2875 +                 scorecard = scorecard_
 11.2876 +             AND
 11.2877 +                 year = year_
 11.2878 +             AND
 11.2879 +                 version = version_
 11.2880 +             AND
 11.2881 +                 scorecard_object = component_;
 11.2882 +   ELSIF (count_= 5) THEN
 11.2883 +     UPDATE scorecard_input_value_tab
 11.2884 +             SET action = final_year_value_,
 11.2885 +                 year_value = year_value_,
 11.2886 +                 p1_value = val_arr_(1),
 11.2887 +                 p2_value = val_arr_(2),
 11.2888 +                 p3_value = val_arr_(3),
 11.2889 +                 p4_value = val_arr_(4),
 11.2890 +                 p5_value = val_arr_(5)
 11.2891 +             WHERE
 11.2892 +                 environment = environment_
 11.2893 +             AND
 11.2894 +                 scorecard = scorecard_
 11.2895 +             AND
 11.2896 +                 year = year_
 11.2897 +             AND
 11.2898 +                 version = version_
 11.2899 +             AND
 11.2900 +                 scorecard_object = component_;
 11.2901 +   ELSIF (count_= 6) THEN
 11.2902 +     UPDATE scorecard_input_value_tab
 11.2903 +             SET action = action_value_,
 11.2904 +                 year_value = final_year_value_,
 11.2905 +                 p1_value = val_arr_(1),
 11.2906 +                 p2_value = val_arr_(2),
 11.2907 +                 p3_value = val_arr_(3),
 11.2908 +                 p4_value = val_arr_(4),
 11.2909 +                 p5_value = val_arr_(5),
 11.2910 +                 p6_value = val_arr_(6)
 11.2911 +             WHERE
 11.2912 +                 environment = environment_
 11.2913 +             AND
 11.2914 +                 scorecard = scorecard_
 11.2915 +             AND
 11.2916 +                 year = year_
 11.2917 +             AND
 11.2918 +                 version = version_
 11.2919 +             AND
 11.2920 +                 scorecard_object = component_;
 11.2921 +   ELSIF (count_= 7) THEN
 11.2922 +     UPDATE scorecard_input_value_tab
 11.2923 +             SET action = action_value_,
 11.2924 +                 year_value = final_year_value_,
 11.2925 +                 p1_value = val_arr_(1),
 11.2926 +                 p2_value = val_arr_(2),
 11.2927 +                 p3_value = val_arr_(3),
 11.2928 +                 p4_value = val_arr_(4),
 11.2929 +                 p5_value = val_arr_(5),
 11.2930 +                 p6_value = val_arr_(6),
 11.2931 +                 p7_value = val_arr_(7)
 11.2932 +             WHERE
 11.2933 +                 environment = environment_
 11.2934 +             AND
 11.2935 +                 scorecard = scorecard_
 11.2936 +             AND
 11.2937 +                 year = year_
 11.2938 +             AND
 11.2939 +                 version = version_
 11.2940 +             AND
 11.2941 +                 scorecard_object = component_;
 11.2942 +   ELSIF (count_= 8) THEN
 11.2943 +     UPDATE scorecard_input_value_tab
 11.2944 +             SET action = action_value_,
 11.2945 +                 year_value = final_year_value_,
 11.2946 +                 p1_value = val_arr_(1),
 11.2947 +                 p2_value = val_arr_(2),
 11.2948 +                 p3_value = val_arr_(3),
 11.2949 +                 p4_value = val_arr_(4),
 11.2950 +                 p5_value = val_arr_(5),
 11.2951 +                 p6_value = val_arr_(6),
 11.2952 +                 p7_value = val_arr_(7),
 11.2953 +                 p8_value = val_arr_(8)
 11.2954 +             WHERE
 11.2955 +                 environment = environment_
 11.2956 +             AND
 11.2957 +                 scorecard = scorecard_
 11.2958 +             AND
 11.2959 +                 year = year_
 11.2960 +             AND
 11.2961 +                 version = version_
 11.2962 +             AND
 11.2963 +                 scorecard_object = component_;
 11.2964 +   ELSIF (count_= 9) THEN
 11.2965 +     UPDATE scorecard_input_value_tab
 11.2966 +             SET action = action_value_,
 11.2967 +                 year_value = final_year_value_,
 11.2968 +                 p1_value = val_arr_(1),
 11.2969 +                 p2_value = val_arr_(2),
 11.2970 +                 p3_value = val_arr_(3),
 11.2971 +                 p4_value = val_arr_(4),
 11.2972 +                 p5_value = val_arr_(5),
 11.2973 +                 p6_value = val_arr_(6),
 11.2974 +                 p7_value = val_arr_(7),
 11.2975 +                 p8_value = val_arr_(8),
 11.2976 +                 p9_value = val_arr_(9)
 11.2977 +             WHERE
 11.2978 +                 environment = environment_
 11.2979 +             AND
 11.2980 +                 scorecard = scorecard_
 11.2981 +             AND
 11.2982 +                 year = year_
 11.2983 +             AND
 11.2984 +                 version = version_
 11.2985 +             AND
 11.2986 +                 scorecard_object = component_;
 11.2987 +   ELSIF (count_= 10) THEN
 11.2988 +     UPDATE scorecard_input_value_tab
 11.2989 +             SET action = action_value_,
 11.2990 +                 year_value = final_year_value_,
 11.2991 +                 p1_value = val_arr_(1),
 11.2992 +                 p2_value = val_arr_(2),
 11.2993 +                 p3_value = val_arr_(3),
 11.2994 +                 p4_value = val_arr_(4),
 11.2995 +                 p5_value = val_arr_(5),
 11.2996 +                 p6_value = val_arr_(6),
 11.2997 +                 p7_value = val_arr_(7),
 11.2998 +                 p8_value = val_arr_(8),
 11.2999 +                 p9_value = val_arr_(9),
 11.3000 +                 p10_value = val_arr_(10)
 11.3001 +             WHERE
 11.3002 +                 environment = environment_
 11.3003 +             AND
 11.3004 +                 scorecard = scorecard_
 11.3005 +             AND
 11.3006 +                 year = year_
 11.3007 +             AND
 11.3008 +                 version = version_
 11.3009 +             AND
 11.3010 +                 scorecard_object = component_;
 11.3011 +   ELSIF (count_= 11) THEN
 11.3012 +      UPDATE scorecard_input_value_tab
 11.3013 +             SET action = action_value_,
 11.3014 +                 year_value = final_year_value_,
 11.3015 +                 p1_value = val_arr_(1),
 11.3016 +                 p2_value = val_arr_(2),
 11.3017 +                 p3_value = val_arr_(3),
 11.3018 +                 p4_value = val_arr_(4),
 11.3019 +                 p5_value = val_arr_(5),
 11.3020 +                 p6_value = val_arr_(6),
 11.3021 +                 p7_value = val_arr_(7),
 11.3022 +                 p8_value = val_arr_(8),
 11.3023 +                 p9_value = val_arr_(9),
 11.3024 +                 p10_value = val_arr_(10),
 11.3025 +                 p11_value = val_arr_(11)
 11.3026 +             WHERE
 11.3027 +                 environment = environment_
 11.3028 +             AND
 11.3029 +                 scorecard = scorecard_
 11.3030 +             AND
 11.3031 +                 year = year_
 11.3032 +             AND
 11.3033 +                 version = version_
 11.3034 +             AND
 11.3035 +                 scorecard_object = component_;
 11.3036 +   ELSIF (count_= 12) THEN
 11.3037 +      UPDATE scorecard_input_value_tab
 11.3038 +             SET action = action_value_,
 11.3039 +                 year_value = final_year_value_,
 11.3040 +                 p1_value = val_arr_(1),
 11.3041 +                 p2_value = val_arr_(2),
 11.3042 +                 p3_value = val_arr_(3),
 11.3043 +                 p4_value = val_arr_(4),
 11.3044 +                 p5_value = val_arr_(5),
 11.3045 +                 p6_value = val_arr_(6),
 11.3046 +                 p7_value = val_arr_(7),
 11.3047 +                 p8_value = val_arr_(8),
 11.3048 +                 p9_value = val_arr_(9),
 11.3049 +                 p10_value = val_arr_(10),
 11.3050 +                 p11_value = val_arr_(11),
 11.3051 +                 p12_value = val_arr_(12)
 11.3052 +             WHERE
 11.3053 +                 environment = environment_
 11.3054 +             AND
 11.3055 +                 scorecard = scorecard_
 11.3056 +             AND
 11.3057 +                 year = year_
 11.3058 +             AND
 11.3059 +                 version = version_
 11.3060 +             AND
 11.3061 +                 scorecard_object = component_;
 11.3062 +      END IF;
 11.3063 +
 11.3064 +END Update_Sales_Values;
 11.3065 +PROCEDURE Update_Distributed_Values (
 11.3066 +   environment_ IN VARCHAR2,
 11.3067 +   scorecard_ IN VARCHAR2,
 11.3068 +   year_ IN VARCHAR2,
 11.3069 +   version_ IN VARCHAR2,
 11.3070 +   component_ IN VARCHAR2,
 11.3071 +   year_value_ IN NUMBER,
 11.3072 +   period_count_ IN NUMBER,
 11.3073 +   from_where_ IN VARCHAR2,
 11.3074 +   action_value_ IN VARCHAR2 )
 11.3075 +IS
 11.3076 +   dist_type_               VARCHAR2(30);
 11.3077 +   dist_logic_              VARCHAR2(10);
 11.3078 +   mean_value_              NUMBER;
 11.3079 +   reference_type_          VARCHAR2(10);
 11.3080 +   ref_type_                VARCHAR2(10);
 11.3081 +   rec_        SCORECARD_INPUT_VALUE_TAB%ROWTYPE;
 11.3082 +   measure_format_          NUMBER;
 11.3083 +   final_year_value_        NUMBER;
 11.3084 +
 11.3085 +BEGIN
 11.3086 +   General_SYS.Init_Method(lu_name_, '&PKG', 'Update_Distributed_Values');
 11.3087 +   rec_ := Lock_By_Keys___(environment_,scorecard_,year_,version_,component_);
 11.3088 +
 11.3089 +   IF (action_value_ = 'TRUE') THEN
 11.3090 +
 11.3091 +      measure_format_      := TO_NUMBER(Scorecard_Measure_API.Get_Measure_Format(component_));
 11.3092 +      IF(from_where_ = 'FROM_COMPONENT') THEN
 11.3093 +         reference_type_ := scorecard_structure_api.Get_Planning_Type_Db(scorecard_,component_,environment_,'COMPONENT');
 11.3094 +         ref_type_ := NVL(reference_type_,'BASE');
 11.3095 +      END IF;
 11.3096 +
 11.3097 +      IF(from_where_ = 'FROM_MEASURE') THEN
 11.3098 +         ref_type_ := 'BASE';
 11.3099 +      END IF;
 11.3100 +
 11.3101 +      IF NOT(ref_type_ = 'REFERENCE') THEN
 11.3102 +
 11.3103 +         IF (from_where_ = 'FROM_COMPONENT') THEN
 11.3104 +
 11.3105 +         dist_type_ := measure_type_api.Encode(scorecard_Measure_api.Get_Measure_type(component_));
 11.3106 +         dist_logic_ := scorecard_Structure_api.Get_Dist_Logic_Db(scorecard_,component_,environment_,'COMPONENT');
 11.3107 +
 11.3108 +         END IF;
 11.3109 +
 11.3110 +         IF (from_where_ = 'FROM_MEASURE') THEN
 11.3111 +
 11.3112 +         dist_type_ := measure_type_api.Encode(scorecard_Measure_api.Get_Measure_type(component_));
 11.3113 +         dist_logic_ := scorecard_Structure_api.Get_Dist_Logic_Db(scorecard_,component_,environment_,'MEASURE');
 11.3114 +
 11.3115 +         END IF;
 11.3116 +
 11.3117 +         final_year_value_ := year_value_ * measure_format_;
 11.3118 +         IF (year_value_ IS NULL) THEN
 11.3119 +            UPDATE scorecard_input_value_tab
 11.3120 +                SET year_value = final_year_value_
 11.3121 +                WHERE
 11.3122 +                    environment = environment_
 11.3123 +                AND
 11.3124 +                 scorecard = scorecard_
 11.3125 +                AND
 11.3126 +                 year = year_
 11.3127 +                AND
 11.3128 +                 version = version_
 11.3129 +                AND
 11.3130 +                 scorecard_object = component_;
 11.3131 +         ELSE
 11.3132 +            IF (dist_type_ = 'PERCENTAGE' AND dist_logic_ IS NULL) THEN
 11.3133 +               IF (period_count_ = 1) THEN
 11.3134 +                   UPDATE scorecard_input_value_tab
 11.3135 +                   SET action = final_year_value_,
 11.3136 +                       year_value = final_year_value_,
 11.3137 +                       p1_value = final_year_value_
 11.3138 +                   WHERE
 11.3139 +                       environment = environment_
 11.3140 +                   AND
 11.3141 +                       scorecard = scorecard_
 11.3142 +                   AND
 11.3143 +                       year = year_
 11.3144 +                   AND
 11.3145 +                       version = version_
 11.3146 +                   AND
 11.3147 +                    scorecard_object = component_;
 11.3148 +               ELSIF (period_count_ = 2) THEN
 11.3149 +                   UPDATE scorecard_input_value_tab
 11.3150 +                   SET action = action_value_,
 11.3151 +                       year_value = final_year_value_,
 11.3152 +                       p1_value = final_year_value_,
 11.3153 +                       p2_value = final_year_value_
 11.3154 +                   WHERE
 11.3155 +                       environment = environment_
 11.3156 +                   AND
 11.3157 +                       scorecard = scorecard_
 11.3158 +                   AND
 11.3159 +                       year = year_
 11.3160 +                   AND
 11.3161 +                       version = version_
 11.3162 +                   AND
 11.3163 +                       scorecard_object = component_;
 11.3164 +               ELSIF (period_count_ = 3) THEN
 11.3165 +                   UPDATE scorecard_input_value_tab
 11.3166 +                   SET action = action_value_,
 11.3167 +                       year_value = final_year_value_,
 11.3168 +                       p1_value = final_year_value_,
 11.3169 +                       p2_value = final_year_value_,
 11.3170 +                       p3_value = final_year_value_
 11.3171 +                   WHERE
 11.3172 +                       environment = environment_
 11.3173 +                   AND
 11.3174 +                       scorecard = scorecard_
 11.3175 +                   AND
 11.3176 +                       year = year_
 11.3177 +                   AND
 11.3178 +                       version = version_
 11.3179 +                   AND
 11.3180 +                       scorecard_object = component_;
 11.3181 +               ELSIF (period_count_ = 4) THEN
 11.3182 +                   UPDATE scorecard_input_value_tab
 11.3183 +                   SET action = action_value_,
 11.3184 +                       year_value = final_year_value_,
 11.3185 +                       p1_value = final_year_value_,
 11.3186 +                       p2_value = final_year_value_,
 11.3187 +                       p3_value = final_year_value_,
 11.3188 +                       p4_value = final_year_value_
 11.3189 +                   WHERE
 11.3190 +                       environment = environment_
 11.3191 +                   AND
 11.3192 +                       scorecard = scorecard_
 11.3193 +                   AND
 11.3194 +                       year = year_
 11.3195 +                   AND
 11.3196 +                       version = version_
 11.3197 +                   AND
 11.3198 +                       scorecard_object = component_;
 11.3199 +               ELSIF (period_count_ = 5) THEN
 11.3200 +                   UPDATE scorecard_input_value_tab
 11.3201 +                   SET action = action_value_,
 11.3202 +                       year_value = final_year_value_,
 11.3203 +                       p1_value = final_year_value_,
 11.3204 +                       p2_value = final_year_value_,
 11.3205 +                       p3_value = final_year_value_,
 11.3206 +                       p4_value = final_year_value_,
 11.3207 +                       p5_value = final_year_value_
 11.3208 +                   WHERE
 11.3209 +                       environment = environment_
 11.3210 +                   AND
 11.3211 +                       scorecard = scorecard_
 11.3212 +                   AND
 11.3213 +                       year = year_
 11.3214 +                   AND
 11.3215 +                       version = version_
 11.3216 +                   AND
 11.3217 +                       scorecard_object = component_;
 11.3218 +               ELSIF (period_count_ = 6) THEN
 11.3219 +                   UPDATE scorecard_input_value_tab
 11.3220 +                   SET action = action_value_,
 11.3221 +                       year_value = final_year_value_,
 11.3222 +                       p1_value = final_year_value_,
 11.3223 +                       p2_value = final_year_value_,
 11.3224 +                       p3_value = final_year_value_,
 11.3225 +                       p4_value = final_year_value_,
 11.3226 +                       p5_value = final_year_value_,
 11.3227 +                       p6_value = final_year_value_
 11.3228 +                   WHERE
 11.3229 +                       environment = environment_
 11.3230 +                   AND
 11.3231 +                       scorecard = scorecard_
 11.3232 +                   AND
 11.3233 +                       year = year_
 11.3234 +                   AND
 11.3235 +                       version = version_
 11.3236 +                   AND
 11.3237 +                       scorecard_object = component_;
 11.3238 +               ELSIF (period_count_ = 7) THEN
 11.3239 +                   UPDATE scorecard_input_value_tab
 11.3240 +                   SET action = action_value_,
 11.3241 +                       year_value = final_year_value_,
 11.3242 +                       p1_value = final_year_value_,
 11.3243 +                       p2_value = final_year_value_,
 11.3244 +                       p3_value = final_year_value_,
 11.3245 +                       p4_value = final_year_value_,
 11.3246 +                       p5_value = final_year_value_,
 11.3247 +                       p6_value = final_year_value_,
 11.3248 +                       p7_value = final_year_value_
 11.3249 +                   WHERE
 11.3250 +                       environment = environment_
 11.3251 +                   AND
 11.3252 +                       scorecard = scorecard_
 11.3253 +                   AND
 11.3254 +                       year = year_
 11.3255 +                   AND
 11.3256 +                       version = version_
 11.3257 +                   AND
 11.3258 +                       scorecard_object = component_;
 11.3259 +               ELSIF (period_count_ = 8) THEN
 11.3260 +                   UPDATE scorecard_input_value_tab
 11.3261 +                   SET action = action_value_,
 11.3262 +                       year_value = final_year_value_,
 11.3263 +                       p1_value = final_year_value_,
 11.3264 +                       p2_value = final_year_value_,
 11.3265 +                       p3_value = final_year_value_,
 11.3266 +                       p4_value = final_year_value_,
 11.3267 +                       p5_value = final_year_value_,
 11.3268 +                       p6_value = final_year_value_,
 11.3269 +                       p7_value = final_year_value_,
 11.3270 +                       p8_value = final_year_value_
 11.3271 +                   WHERE
 11.3272 +                       environment = environment_
 11.3273 +                   AND
 11.3274 +                       scorecard = scorecard_
 11.3275 +                   AND
 11.3276 +                       year = year_
 11.3277 +                   AND
 11.3278 +                       version = version_
 11.3279 +                   AND
 11.3280 +                       scorecard_object = component_;
 11.3281 +               ELSIF (period_count_ = 9) THEN
 11.3282 +                   UPDATE scorecard_input_value_tab
 11.3283 +                   SET action = action_value_,
 11.3284 +                       year_value = final_year_value_,
 11.3285 +                       p1_value = final_year_value_,
 11.3286 +                       p2_value = final_year_value_,
 11.3287 +                       p3_value = final_year_value_,
 11.3288 +                       p4_value = final_year_value_,
 11.3289 +                       p5_value = final_year_value_,
 11.3290 +                       p6_value = final_year_value_,
 11.3291 +                       p7_value = final_year_value_,
 11.3292 +                       p8_value = final_year_value_,
 11.3293 +                       p9_value = final_year_value_
 11.3294 +                   WHERE
 11.3295 +                       environment = environment_
 11.3296 +                   AND
 11.3297 +                       scorecard = scorecard_
 11.3298 +                   AND
 11.3299 +                       year = year_
 11.3300 +                   AND
 11.3301 +                       version = version_
 11.3302 +                   AND
 11.3303 +                       scorecard_object = component_;
 11.3304 +               ELSIF (period_count_ = 10) THEN
 11.3305 +                   UPDATE scorecard_input_value_tab
 11.3306 +                   SET action = action_value_,
 11.3307 +                       year_value = final_year_value_,
 11.3308 +                       p1_value = final_year_value_,
 11.3309 +                       p2_value = final_year_value_,
 11.3310 +                       p3_value = final_year_value_,
 11.3311 +                       p4_value = final_year_value_,
 11.3312 +                       p5_value = final_year_value_,
 11.3313 +                       p6_value = final_year_value_,
 11.3314 +                       p7_value = final_year_value_,
 11.3315 +                       p8_value = final_year_value_,
 11.3316 +                       p9_value = final_year_value_,
 11.3317 +                       p10_value = final_year_value_
 11.3318 +                   WHERE
 11.3319 +                       environment = environment_
 11.3320 +                   AND
 11.3321 +                       scorecard = scorecard_
 11.3322 +                   AND
 11.3323 +                       year = year_
 11.3324 +                   AND
 11.3325 +                       version = version_
 11.3326 +                   AND
 11.3327 +                       scorecard_object = component_;
 11.3328 +             ELSIF (period_count_ = 11) THEN
 11.3329 +                   UPDATE scorecard_input_value_tab
 11.3330 +                   SET action = action_value_,
 11.3331 +                       year_value = final_year_value_,
 11.3332 +                       p1_value = final_year_value_,
 11.3333 +                       p2_value = final_year_value_,
 11.3334 +                       p3_value = final_year_value_,
 11.3335 +                       p4_value = final_year_value_,
 11.3336 +                       p5_value = final_year_value_,
 11.3337 +                       p6_value = final_year_value_,
 11.3338 +                       p7_value = final_year_value_,
 11.3339 +                       p8_value = final_year_value_,
 11.3340 +                       p9_value = final_year_value_,
 11.3341 +                       p10_value = final_year_value_,
 11.3342 +                       p11_value = final_year_value_
 11.3343 +                   WHERE
 11.3344 +                       environment = environment_
 11.3345 +                   AND
 11.3346 +                       scorecard = scorecard_
 11.3347 +                   AND
 11.3348 +                       year = year_
 11.3349 +                   AND
 11.3350 +                       version = version_
 11.3351 +                   AND
 11.3352 +                       scorecard_object = component_;
 11.3353 +               ELSIF (period_count_ = 12) THEN
 11.3354 +                   UPDATE scorecard_input_value_tab
 11.3355 +                   SET action = action_value_,
 11.3356 +                       year_value = final_year_value_,
 11.3357 +                       p1_value = final_year_value_,
 11.3358 +                       p2_value = final_year_value_,
 11.3359 +                       p3_value = final_year_value_,
 11.3360 +                       p4_value = final_year_value_,
 11.3361 +                       p5_value = final_year_value_,
 11.3362 +                       p6_value = final_year_value_,
 11.3363 +                       p7_value = final_year_value_,
 11.3364 +                       p8_value = final_year_value_,
 11.3365 +                       p9_value = final_year_value_,
 11.3366 +                       p10_value = final_year_value_,
 11.3367 +                       p11_value = final_year_value_,
 11.3368 +                       p12_value = final_year_value_
 11.3369 +                   WHERE
 11.3370 +                       environment = environment_
 11.3371 +                   AND
 11.3372 +                       scorecard = scorecard_
 11.3373 +                   AND
 11.3374 +                       year = year_
 11.3375 +                   AND
 11.3376 +                       version = version_
 11.3377 +                   AND
 11.3378 +                       scorecard_object = component_;
 11.3379 +               END IF;
 11.3380 +
 11.3381 +
 11.3382 +            ELSIF (dist_type_ = 'VALUE' AND dist_logic_ IS NULL) THEN
 11.3383 +               mean_value_ := (year_value_ * measure_format_)/period_count_;
 11.3384 +               IF (period_count_ = 1) THEN
 11.3385 +                   UPDATE scorecard_input_value_tab
 11.3386 +                   SET action = action_value_,
 11.3387 +                       year_value = final_year_value_,
 11.3388 +                       p1_value = mean_value_
 11.3389 +                   WHERE
 11.3390 +                       environment = environment_
 11.3391 +                   AND
 11.3392 +                       scorecard = scorecard_
 11.3393 +                   AND
 11.3394 +                       year = year_
 11.3395 +                   AND
 11.3396 +                       version = version_
 11.3397 +                   AND
 11.3398 +                       scorecard_object = component_;
 11.3399 +               ELSIF (period_count_ = 2) THEN
 11.3400 +                   UPDATE scorecard_input_value_tab
 11.3401 +                   SET action = action_value_,
 11.3402 +                       year_value = final_year_value_,
 11.3403 +                       p1_value = mean_value_,
 11.3404 +                       p2_value = mean_value_
 11.3405 +                   WHERE
 11.3406 +                       environment = environment_
 11.3407 +                   AND
 11.3408 +                       scorecard = scorecard_
 11.3409 +                   AND
 11.3410 +                       year = year_
 11.3411 +                   AND
 11.3412 +                       version = version_
 11.3413 +                   AND
 11.3414 +                       scorecard_object = component_;
 11.3415 +               ELSIF (period_count_ = 3) THEN
 11.3416 +                   UPDATE scorecard_input_value_tab
 11.3417 +                   SET action = action_value_,
 11.3418 +                       year_value = final_year_value_,
 11.3419 +                       p1_value = mean_value_,
 11.3420 +                       p2_value = mean_value_,
 11.3421 +                       p3_value = mean_value_
 11.3422 +                   WHERE
 11.3423 +                       environment = environment_
 11.3424 +                   AND
 11.3425 +                       scorecard = scorecard_
 11.3426 +                   AND
 11.3427 +                       year = year_
 11.3428 +                   AND
 11.3429 +                       version = version_
 11.3430 +                   AND
 11.3431 +                       scorecard_object = component_;
 11.3432 +               ELSIF (period_count_ = 4) THEN
 11.3433 +                   UPDATE scorecard_input_value_tab
 11.3434 +                   SET action = action_value_,
 11.3435 +                       year_value = final_year_value_,
 11.3436 +                       p1_value = mean_value_,
 11.3437 +                       p2_value = mean_value_,
 11.3438 +                       p3_value = mean_value_,
 11.3439 +                       p4_value = mean_value_
 11.3440 +                   WHERE
 11.3441 +                       environment = environment_
 11.3442 +                   AND
 11.3443 +                       scorecard = scorecard_
 11.3444 +                   AND
 11.3445 +                       year = year_
 11.3446 +                   AND
 11.3447 +                       version = version_
 11.3448 +                   AND
 11.3449 +                       scorecard_object = component_;
 11.3450 +               ELSIF (period_count_ = 5) THEN
 11.3451 +                   UPDATE scorecard_input_value_tab
 11.3452 +                   SET action = action_value_,
 11.3453 +                       year_value = final_year_value_,
 11.3454 +                       p1_value = mean_value_,
 11.3455 +                       p2_value = mean_value_,
 11.3456 +                       p3_value = mean_value_,
 11.3457 +                       p4_value = mean_value_,
 11.3458 +                       p5_value = mean_value_
 11.3459 +                   WHERE
 11.3460 +                       environment = environment_
 11.3461 +                   AND
 11.3462 +                       scorecard = scorecard_
 11.3463 +                   AND
 11.3464 +                       year = year_
 11.3465 +                   AND
 11.3466 +                       version = version_
 11.3467 +                   AND
 11.3468 +                       scorecard_object = component_;
 11.3469 +               ELSIF (period_count_ = 6) THEN
 11.3470 +                   UPDATE scorecard_input_value_tab
 11.3471 +                   SET action = action_value_,
 11.3472 +                       year_value = final_year_value_,
 11.3473 +                       p1_value = mean_value_,
 11.3474 +                       p2_value = mean_value_,
 11.3475 +                       p3_value = mean_value_,
 11.3476 +                       p4_value = mean_value_,
 11.3477 +                       p5_value = mean_value_,
 11.3478 +                       p6_value = mean_value_
 11.3479 +                   WHERE
 11.3480 +                       environment = environment_
 11.3481 +                   AND
 11.3482 +                       scorecard = scorecard_
 11.3483 +                   AND
 11.3484 +                       year = year_
 11.3485 +                   AND
 11.3486 +                       version = version_
 11.3487 +                   AND
 11.3488 +                       scorecard_object = component_;
 11.3489 +               ELSIF (period_count_ = 7) THEN
 11.3490 +                   UPDATE scorecard_input_value_tab
 11.3491 +                   SET action = action_value_,
 11.3492 +                       year_value = final_year_value_,
 11.3493 +                       p1_value = mean_value_,
 11.3494 +                       p2_value = mean_value_,
 11.3495 +                       p3_value = mean_value_,
 11.3496 +                       p4_value = mean_value_,
 11.3497 +                       p5_value = mean_value_,
 11.3498 +                       p6_value = mean_value_,
 11.3499 +                       p7_value = mean_value_
 11.3500 +                   WHERE
 11.3501 +                       environment = environment_
 11.3502 +                   AND
 11.3503 +                       scorecard = scorecard_
 11.3504 +                   AND
 11.3505 +                       year = year_
 11.3506 +                   AND
 11.3507 +                       version = version_
 11.3508 +                   AND
 11.3509 +                       scorecard_object = component_;
 11.3510 +               ELSIF (period_count_ = 8) THEN
 11.3511 +                   UPDATE scorecard_input_value_tab
 11.3512 +                   SET action = action_value_,
 11.3513 +                       year_value = final_year_value_,
 11.3514 +                       p1_value = mean_value_,
 11.3515 +                       p2_value = mean_value_,
 11.3516 +                       p3_value = mean_value_,
 11.3517 +                       p4_value = mean_value_,
 11.3518 +                       p5_value = mean_value_,
 11.3519 +                       p6_value = mean_value_,
 11.3520 +                       p7_value = mean_value_,
 11.3521 +                       p8_value = mean_value_
 11.3522 +                   WHERE
 11.3523 +                       environment = environment_
 11.3524 +                   AND
 11.3525 +                       scorecard = scorecard_
 11.3526 +                   AND
 11.3527 +                       year = year_
 11.3528 +                   AND
 11.3529 +                       version = version_
 11.3530 +                   AND
 11.3531 +                       scorecard_object = component_;
 11.3532 +               ELSIF (period_count_ = 9) THEN
 11.3533 +                   UPDATE scorecard_input_value_tab
 11.3534 +                   SET action = action_value_,
 11.3535 +                       year_value = final_year_value_,
 11.3536 +                       p1_value = mean_value_,
 11.3537 +                       p2_value = mean_value_,
 11.3538 +                       p3_value = mean_value_,
 11.3539 +                       p4_value = mean_value_,
 11.3540 +                       p5_value = mean_value_,
 11.3541 +                       p6_value = mean_value_,
 11.3542 +                       p7_value = mean_value_,
 11.3543 +                       p8_value = mean_value_,
 11.3544 +                       p9_value = mean_value_
 11.3545 +                   WHERE
 11.3546 +                       environment = environment_
 11.3547 +                   AND
 11.3548 +                       scorecard = scorecard_
 11.3549 +                   AND
 11.3550 +                       year = year_
 11.3551 +                   AND
 11.3552 +                       version = version_
 11.3553 +                   AND
 11.3554 +                       scorecard_object = component_;
 11.3555 +               ELSIF (period_count_ = 10) THEN
 11.3556 +                   UPDATE scorecard_input_value_tab
 11.3557 +                   SET action = action_value_,
 11.3558 +                       year_value = final_year_value_,
 11.3559 +                       p1_value = mean_value_,
 11.3560 +                       p2_value = mean_value_,
 11.3561 +                       p3_value = mean_value_,
 11.3562 +                       p4_value = mean_value_,
 11.3563 +                       p5_value = mean_value_,
 11.3564 +                       p6_value = mean_value_,
 11.3565 +                       p7_value = mean_value_,
 11.3566 +                       p8_value = mean_value_,
 11.3567 +                       p9_value = mean_value_,
 11.3568 +                       p10_value = mean_value_
 11.3569 +                   WHERE
 11.3570 +                       environment = environment_
 11.3571 +                   AND
 11.3572 +                       scorecard = scorecard_
 11.3573 +                   AND
 11.3574 +                       year = year_
 11.3575 +                   AND
 11.3576 +                       version = version_
 11.3577 +                   AND
 11.3578 +                       scorecard_object = component_;
 11.3579 +               ELSIF (period_count_ = 11) THEN
 11.3580 +                   UPDATE scorecard_input_value_tab
 11.3581 +                   SET action = action_value_,
 11.3582 +                       year_value = final_year_value_,
 11.3583 +                       p1_value = mean_value_,
 11.3584 +                       p2_value = mean_value_,
 11.3585 +                       p3_value = mean_value_,
 11.3586 +                       p4_value = mean_value_,
 11.3587 +                       p5_value = mean_value_,
 11.3588 +                       p6_value = mean_value_,
 11.3589 +                       p7_value = mean_value_,
 11.3590 +                       p8_value = mean_value_,
 11.3591 +                       p9_value = mean_value_,
 11.3592 +                       p10_value = mean_value_,
 11.3593 +                       p11_value = mean_value_
 11.3594 +                   WHERE
 11.3595 +                       environment = environment_
 11.3596 +                   AND
 11.3597 +                       scorecard = scorecard_
 11.3598 +                   AND
 11.3599 +                       year = year_
 11.3600 +                   AND
 11.3601 +                       version = version_
 11.3602 +                   AND
 11.3603 +                       scorecard_object = component_;
 11.3604 +               ELSIF (period_count_ = 12) THEN
 11.3605 +                   UPDATE scorecard_input_value_tab
 11.3606 +                   SET action = action_value_,
 11.3607 +                       year_value = final_year_value_,
 11.3608 +                       p1_value = mean_value_,
 11.3609 +                       p2_value = mean_value_,
 11.3610 +                       p3_value = mean_value_,
 11.3611 +                       p4_value = mean_value_,
 11.3612 +                       p5_value = mean_value_,
 11.3613 +                       p6_value = mean_value_,
 11.3614 +                       p7_value = mean_value_,
 11.3615 +                       p8_value = mean_value_,
 11.3616 +                       p9_value = mean_value_,
 11.3617 +                       p10_value = mean_value_,
 11.3618 +                       p11_value = mean_value_,
 11.3619 +                       p12_value = mean_value_
 11.3620 +                   WHERE
 11.3621 +                       environment = environment_
 11.3622 +                   AND
 11.3623 +                       scorecard = scorecard_
 11.3624 +                   AND
 11.3625 +                       year = year_
 11.3626 +                   AND
 11.3627 +                       version = version_
 11.3628 +                   AND
 11.3629 +                       scorecard_object = component_;
 11.3630 +
 11.3631 +               END IF;
 11.3632 +            ELSIF ((dist_logic_ = 'SYB' OR dist_logic_ = 'VERSION' OR dist_logic_ = 'INDEX') AND (dist_type_ IS NOT NULL)) THEN
 11.3633 +               Update_Sales_Values(environment_,scorecard_,year_,version_,component_,year_value_,period_count_,from_where_,action_value_);
 11.3634 +            END IF;
 11.3635 +         END IF;
 11.3636 +      END IF;
 11.3637 +   ELSIF (action_value_ = 'FALSE') THEN
 11.3638 +      UPDATE scorecard_input_value_tab
 11.3639 +      SET action = action_value_
 11.3640 +      WHERE
 11.3641 +         environment = environment_
 11.3642 +      AND
 11.3643 +         scorecard = scorecard_
 11.3644 +      AND
 11.3645 +         year = year_
 11.3646 +      AND
 11.3647 +         version = version_
 11.3648 +      AND
 11.3649 +         scorecard_object = component_;
 11.3650 +   END IF;
 11.3651 +END Update_Distributed_Values;
 11.3652 +PROCEDURE Publish_Scorecard (
 11.3653 +   environment_ IN VARCHAR2,
 11.3654 +   scorecard_ IN VARCHAR2 )
 11.3655 +IS
 11.3656 +   can_modify_  VARCHAR2(5);
 11.3657 +BEGIN
 11.3658 +     General_SYS.Init_Method(lu_name_, '&PKG', 'Publish_Scorecard');
 11.3659 +     can_modify_ := Scorecard_User_Access_Api.Check_Modify_Acc(environment_,scorecard_);
 11.3660 +     if can_modify_ = 'TRUE' then
 11.3661 +        Publish_Score__(environment_, scorecard_, 'SCORE');
 11.3662 +     end if;
 11.3663 +END Publish_Scorecard;
 11.3664 +PROCEDURE Publish_Environment (
 11.3665 +   environment_ IN VARCHAR2 )
 11.3666 +IS
 11.3667 +   attr_ VARCHAR2(2000);
 11.3668 +   info_ VARCHAR2(2000);
 11.3669 +
 11.3670 +   CURSOR get_scorecard IS
 11.3671 +     SELECT DISTINCT scorecard, objstate
 11.3672 +     FROM   scorecard_input
 11.3673 +     WHERE  environment = environment_
 11.3674 +     AND   (objstate = 'Open' OR     objstate = 'Planned');
 11.3675 +
 11.3676 +   can_modify_  VARCHAR2(5);
 11.3677 +BEGIN
 11.3678 +   General_SYS.Init_Method(lu_name_, '&PKG', 'Publish_Environment');
 11.3679 +   FOR get_rec in get_scorecard  loop
 11.3680 +      IF (get_rec.objstate = 'Open')  THEN
 11.3681 +         info_ := Language_SYS.Translate_Constant(lu_name_,'TRANS: The operation "Publish" is not allowed for Scorecard :P1 in state "Open"',Fnd_Session_API.Get_Language,get_rec.scorecard);
 11.3682 +         Transaction_SYS.Set_Status_Info(info_);
 11.3683 +      ELSE
 11.3684 +         can_modify_ := Scorecard_User_Access_Api.Check_Modify_Acc(environment_,get_rec.scorecard);
 11.3685 +         if can_modify_ = 'TRUE' then
 11.3686 +            Publish_Score__(environment_, get_rec.scorecard, 'ENV');
 11.3687 +            Client_SYS.Clear_Attr(attr_);
 11.3688 +            Scorecard_Api.Force_Publish__(info_,attr_,'DO',environment_,get_rec.scorecard);
 11.3689 +            Client_SYS.Clear_Attr(attr_);
 11.3690 +         end if;
 11.3691 +      END IF;
 11.3692 +   end loop;
 11.3693 +END Publish_Environment;
 11.3694 +
 11.3695 +
 11.3696 +PROCEDURE Calculate_Measures (
 11.3697 +   environment_ IN VARCHAR2,
 11.3698 +   scorecard_ IN VARCHAR2,
 11.3699 +   year_ IN VARCHAR2,
 11.3700 +   version_ IN VARCHAR2,
 11.3701 +   measure_ IN VARCHAR2,
 11.3702 +   period_count_ IN NUMBER,
 11.3703 +   from_budpro_ IN VARCHAR2 DEFAULT 'FALSE' )
 11.3704 +IS
 11.3705 +   plan_formula_            VARCHAR2(2000);
 11.3706 +   plan_formula_year_       VARCHAR2(2000);
 11.3707 +   plan_formula_p1_         VARCHAR2(2000);
 11.3708 +   plan_formula_p2_         VARCHAR2(2000);
 11.3709 +   plan_formula_p3_         VARCHAR2(2000);
 11.3710 +   plan_formula_p4_         VARCHAR2(2000);
 11.3711 +   plan_formula_p5_         VARCHAR2(2000);
 11.3712 +   plan_formula_p6_         VARCHAR2(2000);
 11.3713 +   plan_formula_p7_         VARCHAR2(2000);
 11.3714 +   plan_formula_p8_         VARCHAR2(2000);
 11.3715 +   plan_formula_p9_         VARCHAR2(2000);
 11.3716 +   plan_formula_p10_        VARCHAR2(2000);
 11.3717 +   plan_formula_p11_        VARCHAR2(2000);
 11.3718 +   plan_formula_p12_        VARCHAR2(2000);
 11.3719 +   count_                   NUMBER;
 11.3720 +   p1_value_                NUMBER;
 11.3721 +   p2_value_                NUMBER;
 11.3722 +   p3_value_                NUMBER;
 11.3723 +   p4_value_                NUMBER;
 11.3724 +   p5_value_                NUMBER;
 11.3725 +   p6_value_                NUMBER;
 11.3726 +   p7_value_                NUMBER;
 11.3727 +   p8_value_                NUMBER;
 11.3728 +   p9_value_                NUMBER;
 11.3729 +   p10_value_               NUMBER;
 11.3730 +   p11_value_               NUMBER;
 11.3731 +   p12_value_               NUMBER;
 11.3732 +   year_value_              NUMBER;
 11.3733 +   level_id_                VARCHAR2(30);
 11.3734 +
 11.3735 +   formula_year_            NUMBER;
 11.3736 +   formula_p1_              NUMBER;
 11.3737 +   formula_p2_              NUMBER;
 11.3738 +   formula_p3_              NUMBER;
 11.3739 +   formula_p4_              NUMBER;
 11.3740 +   formula_p5_              NUMBER;
 11.3741 +   formula_p6_              NUMBER;
 11.3742 +   formula_p7_              NUMBER;
 11.3743 +   formula_p8_              NUMBER;
 11.3744 +   formula_p9_              NUMBER;
 11.3745 +   formula_p10_             NUMBER;
 11.3746 +   formula_p11_             NUMBER;
 11.3747 +   formula_p12_             NUMBER;
 11.3748 +
 11.3749 +   check_year_value_        VARCHAR2(10);
 11.3750 +   check_p1_value_          VARCHAR2(10);
 11.3751 +   check_p2_value_          VARCHAR2(10);
 11.3752 +   check_p3_value_          VARCHAR2(10);
 11.3753 +   check_p4_value_          VARCHAR2(10);
 11.3754 +   check_p5_value_          VARCHAR2(10);
 11.3755 +   check_p6_value_          VARCHAR2(10);
 11.3756 +   check_p7_value_          VARCHAR2(10);
 11.3757 +   check_p8_value_          VARCHAR2(10);
 11.3758 +   check_p9_value_          VARCHAR2(10);
 11.3759 +   check_p10_value_          VARCHAR2(10);
 11.3760 +   check_p11_value_          VARCHAR2(10);
 11.3761 +   check_p12_value_          VARCHAR2(10);
 11.3762 +   level_type_val_           VARCHAR2(20);
 11.3763 +
 11.3764 +   stmt_                   VARCHAR2(2000);
 11.3765 +
 11.3766 +   rec_        SCORECARD_INPUT_VALUE_TAB%ROWTYPE;
 11.3767 +
 11.3768 +   CURSOR measure_components_ IS
 11.3769 +      SELECT level_id
 11.3770 +      FROM scorecard_structure_tab
 11.3771 +      WHERE environment = environment_
 11.3772 +      AND scorecard = scorecard_
 11.3773 +      AND parent_level_type = 'MEASURE'
 11.3774 +      AND parent_id = measure_;
 11.3775 +   CURSOR version_value_ IS
 11.3776 +      SELECT Year_Value,P1_Value,P2_Value,P3_Value,P4_Value,P5_Value,P6_Value,P7_Value,P8_Value,P9_Value,P10_Value,P11_Value,P12_Value
 11.3777 +      FROM scorecard_input_value_tab
 11.3778 +      WHERE environment = environment_
 11.3779 +      AND scorecard = scorecard_
 11.3780 +      AND year = year_
 11.3781 +      AND version = version_
 11.3782 +      AND scorecard_object = level_id_;
 11.3783 +   CURSOR measure_value_ IS
 11.3784 +      SELECT Year_Value,P1_Value,P2_Value,P3_Value,P4_Value,P5_Value,P6_Value,P7_Value,P8_Value,P9_Value,P10_Value,P11_Value,P12_Value
 11.3785 +      FROM scorecard_input_value_tab
 11.3786 +      WHERE environment = environment_
 11.3787 +      AND scorecard = scorecard_
 11.3788 +      AND year = year_
 11.3789 +      AND version = version_
 11.3790 +      AND scorecard_object = measure_;
 11.3791 +
 11.3792 +   byteOffSet_ Number := 0;
 11.3793 +
 11.3794 +   invalid_comp_ NUMBER;
 11.3795 +BEGIN
 11.3796 +   General_SYS.Init_Method(lu_name_, '&PKG', 'Calculate_Measures');
 11.3797 +   rec_ := Lock_By_Keys___(environment_,scorecard_,year_,version_,measure_);
 11.3798 +   level_type_val_ := Scorecard_Level_Type_API.Decode('MEASURE');
 11.3799 +   plan_formula_ := scorecard_structure_api.Get_Measure_Calc_Formula(scorecard_,measure_,environment_,level_type_val_);
 11.3800 +   check_year_value_  := 'FALSE';
 11.3801 +   check_p1_value_    := 'FALSE';
 11.3802 +   check_p2_value_    := 'FALSE';
 11.3803 +   check_p3_value_    := 'FALSE';
 11.3804 +   check_p4_value_    := 'FALSE';
 11.3805 +   check_p5_value_    := 'FALSE';
 11.3806 +   check_p6_value_    := 'FALSE';
 11.3807 +   check_p7_value_    := 'FALSE';
 11.3808 +   check_p8_value_    := 'FALSE';
 11.3809 +   check_p9_value_    := 'FALSE';
 11.3810 +   check_p10_value_   := 'FALSE';
 11.3811 +   check_p11_value_   := 'FALSE';
 11.3812 +   check_p12_value_   := 'FALSE';
 11.3813 +
 11.3814 +   IF plan_formula_ IS NOT NULL THEN
 11.3815 +      plan_formula_ := REPLACE(plan_formula_,' ','');
 11.3816 +      plan_formula_ := UPPER(plan_formula_);
 11.3817 +      plan_formula_year_ := plan_formula_;
 11.3818 +      plan_formula_p1_ := plan_formula_;
 11.3819 +      plan_formula_p2_ := plan_formula_;
 11.3820 +      plan_formula_p3_ := plan_formula_;
 11.3821 +      plan_formula_p4_ := plan_formula_;
 11.3822 +      plan_formula_p5_ := plan_formula_;
 11.3823 +      plan_formula_p6_ := plan_formula_;
 11.3824 +      plan_formula_p7_ := plan_formula_;
 11.3825 +      plan_formula_p8_ := plan_formula_;
 11.3826 +      plan_formula_p9_ := plan_formula_;
 11.3827 +      plan_formula_p10_ := plan_formula_;
 11.3828 +      plan_formula_p11_ := plan_formula_;
 11.3829 +      plan_formula_p12_ := plan_formula_;
 11.3830 +      count_ := 0;
 11.3831 +      FOR measure_comp_ IN measure_components_ LOOP
 11.3832 +         level_id_ := measure_comp_.level_id;
 11.3833 +         byteOffset_ := INSTR(plan_formula_,'COMP.'||level_id_);
 11.3834 +
 11.3835 +         IF byteOffSet_ > 0 THEN
 11.3836 +            OPEN version_value_;
 11.3837 +            FETCH version_value_ INTO year_value_,p1_value_,p2_value_,p3_value_,p4_value_,p5_value_,p6_value_,p7_value_,p8_value_,p9_value_,p10_value_,p11_value_,p12_value_;
 11.3838 +            CLOSE version_value_;
 11.3839 +            IF (year_value_ IS NULL) THEN
 11.3840 +               check_year_value_  := 'TRUE';
 11.3841 +            END IF;
 11.3842 +            IF (p1_value_ IS NULL) THEN
 11.3843 +               check_p1_value_  := 'TRUE';
 11.3844 +            END IF;
 11.3845 +            IF (p2_value_ IS NULL) THEN
 11.3846 +               check_p2_value_  := 'TRUE';
 11.3847 +            END IF;
 11.3848 +            IF (p3_value_ IS NULL) THEN
 11.3849 +               check_p3_value_  := 'TRUE';
 11.3850 +            END IF;
 11.3851 +            IF (p4_value_ IS NULL) THEN
 11.3852 +               check_p4_value_  := 'TRUE';
 11.3853 +            END IF;
 11.3854 +            IF (p5_value_ IS NULL) THEN
 11.3855 +               check_p5_value_  := 'TRUE';
 11.3856 +            END IF;
 11.3857 +            IF (p6_value_ IS NULL) THEN
 11.3858 +               check_p6_value_  := 'TRUE';
 11.3859 +            END IF;
 11.3860 +            IF (p7_value_ IS NULL) THEN
 11.3861 +               check_p7_value_  := 'TRUE';
 11.3862 +            END IF;
 11.3863 +            IF (p8_value_ IS NULL) THEN
 11.3864 +               check_p8_value_  := 'TRUE';
 11.3865 +            END IF;
 11.3866 +            IF (p9_value_ IS NULL) THEN
 11.3867 +               check_p9_value_  := 'TRUE';
 11.3868 +            END IF;
 11.3869 +            IF (p10_value_ IS NULL) THEN
 11.3870 +               check_p10_value_  := 'TRUE';
 11.3871 +            END IF;
 11.3872 +            IF (p11_value_ IS NULL) THEN
 11.3873 +               check_p11_value_  := 'TRUE';
 11.3874 +            END IF;
 11.3875 +            IF (p12_value_ IS NULL) THEN
 11.3876 +               check_p12_value_  := 'TRUE';
 11.3877 +            END IF;
 11.3878 +
 11.3879 +            plan_formula_year_ := REPLACE(plan_formula_year_,'COMP.'||level_id_,year_value_);
 11.3880 +            plan_formula_p1_   := REPLACE(plan_formula_p1_,'COMP.'||level_id_,p1_value_);
 11.3881 +            plan_formula_p2_   := REPLACE(plan_formula_p2_,'COMP.'||level_id_,p2_value_);
 11.3882 +            plan_formula_p3_   := REPLACE(plan_formula_p3_,'COMP.'||level_id_,p3_value_);
 11.3883 +            plan_formula_p4_   := REPLACE(plan_formula_p4_,'COMP.'||level_id_,p4_value_);
 11.3884 +            plan_formula_p5_   := REPLACE(plan_formula_p5_,'COMP.'||level_id_,p5_value_);
 11.3885 +            plan_formula_p6_   := REPLACE(plan_formula_p6_,'COMP.'||level_id_,p6_value_);
 11.3886 +            plan_formula_p7_   := REPLACE(plan_formula_p7_,'COMP.'||level_id_,p7_value_);
 11.3887 +            plan_formula_p8_   := REPLACE(plan_formula_p8_,'COMP.'||level_id_,p8_value_);
 11.3888 +            plan_formula_p9_   := REPLACE(plan_formula_p9_,'COMP.'||level_id_,p9_value_);
 11.3889 +            plan_formula_p10_  := REPLACE(plan_formula_p10_,'COMP.'||level_id_,p10_value_);
 11.3890 +            plan_formula_p11_  := REPLACE(plan_formula_p11_,'COMP.'||level_id_,p11_value_);
 11.3891 +            plan_formula_p12_  := REPLACE(plan_formula_p12_,'COMP.'||level_id_,p12_value_);
 11.3892 +         END IF;
 11.3893 +      END LOOP;
 11.3894 +
 11.3895 +      Get_Error_Msg_For_Comp(plan_formula_year_,check_year_value_);
 11.3896 +      Get_Error_Msg_For_Comp(plan_formula_p1_,check_p1_value_);
 11.3897 +      Get_Error_Msg_For_Comp(plan_formula_p2_,check_p2_value_);
 11.3898 +      Get_Error_Msg_For_Comp(plan_formula_p3_,check_p3_value_);
 11.3899 +      Get_Error_Msg_For_Comp(plan_formula_p4_,check_p4_value_);
 11.3900 +      Get_Error_Msg_For_Comp(plan_formula_p5_,check_p5_value_);
 11.3901 +      Get_Error_Msg_For_Comp(plan_formula_p6_,check_p6_value_);
 11.3902 +      Get_Error_Msg_For_Comp(plan_formula_p7_,check_p7_value_);
 11.3903 +      Get_Error_Msg_For_Comp(plan_formula_p8_,check_p8_value_);
 11.3904 +      Get_Error_Msg_For_Comp(plan_formula_p9_,check_p9_value_);
 11.3905 +      Get_Error_Msg_For_Comp(plan_formula_p10_,check_p10_value_);
 11.3906 +      Get_Error_Msg_For_Comp(plan_formula_p11_,check_p11_value_);
 11.3907 +      Get_Error_Msg_For_Comp(plan_formula_p12_,check_p12_value_);
 11.3908 +
 11.3909 +      IF (period_count_ = 1) THEN
 11.3910 +         -- ifs_assert_safe samwlk 070515
 11.3911 +         EXECUTE IMMEDIATE 'select '||plan_formula_year_||','||plan_formula_p1_||' from dual'
 11.3912 +         INTO
 11.3913 +         formula_year_,formula_p1_;
 11.3914 +
 11.3915 +         formula_p2_ := NULL;
 11.3916 +         formula_p3_ := NULL;
 11.3917 +         formula_p4_ := NULL;
 11.3918 +         formula_p5_ := NULL;
 11.3919 +         formula_p6_ := NULL;
 11.3920 +         formula_p7_ := NULL;
 11.3921 +         formula_p8_ := NULL;
 11.3922 +         formula_p9_ := NULL;
 11.3923 +         formula_p10_ := NULL;
 11.3924 +         formula_p11_ := NULL;
 11.3925 +         formula_p12_ := NULL;
 11.3926 +      END IF;
 11.3927 +      IF (period_count_ = 2) THEN
 11.3928 +         -- ifs_assert_safe samwlk 070515
 11.3929 +         EXECUTE IMMEDIATE 'select '||plan_formula_year_||','||plan_formula_p1_||','||plan_formula_p2_||' from dual'
 11.3930 +         INTO
 11.3931 +         formula_year_,formula_p1_,formula_p2_;
 11.3932 +
 11.3933 +         formula_p3_ := NULL;
 11.3934 +         formula_p4_ := NULL;
 11.3935 +         formula_p5_ := NULL;
 11.3936 +         formula_p6_ := NULL;
 11.3937 +         formula_p7_ := NULL;
 11.3938 +         formula_p8_ := NULL;
 11.3939 +         formula_p9_ := NULL;
 11.3940 +         formula_p10_ := NULL;
 11.3941 +         formula_p11_ := NULL;
 11.3942 +         formula_p12_ := NULL;
 11.3943 +      END IF;
 11.3944 +      IF (period_count_ = 3) THEN
 11.3945 +         -- ifs_assert_safe samwlk 070515
 11.3946 +         EXECUTE IMMEDIATE 'select '||plan_formula_year_||','||plan_formula_p1_||','||plan_formula_p2_||','
 11.3947 +         ||plan_formula_p3_||' from dual'
 11.3948 +         INTO
 11.3949 +         formula_year_,formula_p1_,formula_p2_,formula_p3_;
 11.3950 +
 11.3951 +         formula_p4_ := NULL;
 11.3952 +         formula_p5_ := NULL;
 11.3953 +         formula_p6_ := NULL;
 11.3954 +         formula_p7_ := NULL;
 11.3955 +         formula_p8_ := NULL;
 11.3956 +         formula_p9_ := NULL;
 11.3957 +         formula_p10_ := NULL;
 11.3958 +         formula_p11_ := NULL;
 11.3959 +         formula_p12_ := NULL;
 11.3960 +      END IF;
 11.3961 +      IF (period_count_ = 4) THEN
 11.3962 +         -- ifs_assert_safe samwlk 070515
 11.3963 +         EXECUTE IMMEDIATE 'select '||plan_formula_year_||','||plan_formula_p1_||','||plan_formula_p2_||','
 11.3964 +         ||plan_formula_p3_||','||plan_formula_p4_||' from dual'
 11.3965 +         INTO
 11.3966 +         formula_year_,formula_p1_,formula_p2_,formula_p3_,formula_p4_;
 11.3967 +
 11.3968 +         formula_p5_ := NULL;
 11.3969 +         formula_p6_ := NULL;
 11.3970 +         formula_p7_ := NULL;
 11.3971 +         formula_p8_ := NULL;
 11.3972 +         formula_p9_ := NULL;
 11.3973 +         formula_p10_ := NULL;
 11.3974 +         formula_p11_ := NULL;
 11.3975 +         formula_p12_ := NULL;
 11.3976 +      END IF;
 11.3977 +      IF (period_count_ = 5) THEN
 11.3978 +         -- ifs_assert_safe samwlk 070515
 11.3979 +         EXECUTE IMMEDIATE 'select '||plan_formula_year_||','||plan_formula_p1_||','||plan_formula_p2_||','
 11.3980 +         ||plan_formula_p3_||','||plan_formula_p4_||','||plan_formula_p5_||' from dual'
 11.3981 +         INTO
 11.3982 +         formula_year_,formula_p1_,formula_p2_,formula_p3_,formula_p4_,formula_p5_;
 11.3983 +
 11.3984 +         formula_p6_ := NULL;
 11.3985 +         formula_p7_ := NULL;
 11.3986 +         formula_p8_ := NULL;
 11.3987 +         formula_p9_ := NULL;
 11.3988 +         formula_p10_ := NULL;
 11.3989 +         formula_p11_ := NULL;
 11.3990 +         formula_p12_ := NULL;
 11.3991 +      END IF;
 11.3992 +      IF (period_count_ = 6) THEN
 11.3993 +         -- ifs_assert_safe samwlk 070515
 11.3994 +         EXECUTE IMMEDIATE 'select '||plan_formula_year_||','||plan_formula_p1_||','||plan_formula_p2_||','
 11.3995 +         ||plan_formula_p3_||','||plan_formula_p4_||','||plan_formula_p5_||','||plan_formula_p6_||' from dual'
 11.3996 +         INTO
 11.3997 +         formula_year_,formula_p1_,formula_p2_,formula_p3_,formula_p4_,formula_p5_,formula_p6_;
 11.3998 +
 11.3999 +         formula_p7_ := NULL;
 11.4000 +         formula_p8_ := NULL;
 11.4001 +         formula_p9_ := NULL;
 11.4002 +         formula_p10_ := NULL;
 11.4003 +         formula_p11_ := NULL;
 11.4004 +         formula_p12_ := NULL;
 11.4005 +      END IF;
 11.4006 +      IF (period_count_ = 7) THEN
 11.4007 +         -- ifs_assert_safe samwlk 070515
 11.4008 +         EXECUTE IMMEDIATE 'select '||plan_formula_year_||','||plan_formula_p1_||','||plan_formula_p2_||','
 11.4009 +         ||plan_formula_p3_||','||plan_formula_p4_||','||plan_formula_p5_||','||plan_formula_p6_||','
 11.4010 +         ||plan_formula_p7_||' from dual'
 11.4011 +         INTO
 11.4012 +         formula_year_,formula_p1_,formula_p2_,formula_p3_,formula_p4_,formula_p5_,formula_p6_,formula_p7_;
 11.4013 +
 11.4014 +         formula_p8_ := NULL;
 11.4015 +         formula_p9_ := NULL;
 11.4016 +         formula_p10_ := NULL;
 11.4017 +         formula_p11_ := NULL;
 11.4018 +         formula_p12_ := NULL;
 11.4019 +      END IF;
 11.4020 +      IF (period_count_ = 8) THEN
 11.4021 +         -- ifs_assert_safe samwlk 070515
 11.4022 +         EXECUTE IMMEDIATE 'select '||plan_formula_year_||','||plan_formula_p1_||','||plan_formula_p2_||','
 11.4023 +         ||plan_formula_p3_||','||plan_formula_p4_||','||plan_formula_p5_||','||plan_formula_p6_||','
 11.4024 +         ||plan_formula_p7_||','||plan_formula_p8_||' from dual'
 11.4025 +         INTO
 11.4026 +         formula_year_,formula_p1_,formula_p2_,formula_p3_,formula_p4_,formula_p5_,formula_p6_,formula_p7_,
 11.4027 +         formula_p8_;
 11.4028 +
 11.4029 +         formula_p9_ := NULL;
 11.4030 +         formula_p10_ := NULL;
 11.4031 +         formula_p11_ := NULL;
 11.4032 +         formula_p12_ := NULL;
 11.4033 +      END IF;
 11.4034 +      IF (period_count_ = 9) THEN
 11.4035 +         -- ifs_assert_safe samwlk 070515
 11.4036 +         EXECUTE IMMEDIATE 'select '||plan_formula_year_||','||plan_formula_p1_||','||plan_formula_p2_||','
 11.4037 +         ||plan_formula_p3_||','||plan_formula_p4_||','||plan_formula_p5_||','||plan_formula_p6_||','
 11.4038 +         ||plan_formula_p7_||','||plan_formula_p8_||','||plan_formula_p9_||' from dual'
 11.4039 +         INTO
 11.4040 +         formula_year_,formula_p1_,formula_p2_,formula_p3_,formula_p4_,formula_p5_,formula_p6_,formula_p7_,
 11.4041 +         formula_p8_,formula_p9_;
 11.4042 +
 11.4043 +         formula_p10_ := NULL;
 11.4044 +         formula_p11_ := NULL;
 11.4045 +         formula_p12_ := NULL;
 11.4046 +      END IF;
 11.4047 +      IF (period_count_ = 10) THEN
 11.4048 +         -- ifs_assert_safe samwlk 070515
 11.4049 +         EXECUTE IMMEDIATE 'select '||plan_formula_year_||','||plan_formula_p1_||','||plan_formula_p2_||','
 11.4050 +         ||plan_formula_p3_||','||plan_formula_p4_||','||plan_formula_p5_||','||plan_formula_p6_||','
 11.4051 +         ||plan_formula_p7_||','||plan_formula_p8_||','||plan_formula_p9_||','||plan_formula_p10_||' from dual'
 11.4052 +         INTO
 11.4053 +         formula_year_,formula_p1_,formula_p2_,formula_p3_,formula_p4_,formula_p5_,formula_p6_,formula_p7_,
 11.4054 +         formula_p8_,formula_p9_,formula_p10_;
 11.4055 +
 11.4056 +         formula_p11_ := NULL;
 11.4057 +         formula_p12_ := NULL;
 11.4058 +      END IF;
 11.4059 +      IF (period_count_ = 11) THEN
 11.4060 +         -- ifs_assert_safe samwlk 070515
 11.4061 +         EXECUTE IMMEDIATE 'select '||plan_formula_year_||','||plan_formula_p1_||','||plan_formula_p2_||','
 11.4062 +         ||plan_formula_p3_||','||plan_formula_p4_||','||plan_formula_p5_||','||plan_formula_p6_||','
 11.4063 +         ||plan_formula_p7_||','||plan_formula_p8_||','||plan_formula_p9_||','||plan_formula_p10_||','
 11.4064 +         ||plan_formula_p11_||' from dual'
 11.4065 +         INTO
 11.4066 +         formula_year_,formula_p1_,formula_p2_,formula_p3_,formula_p4_,formula_p5_,formula_p6_,formula_p7_,
 11.4067 +         formula_p8_,formula_p9_,formula_p10_,formula_p11_;
 11.4068 +
 11.4069 +         formula_p12_ := NULL;
 11.4070 +      END IF;
 11.4071 +      IF (period_count_ = 12) THEN
 11.4072 +         -- ifs_assert_safe samwlk 070515
 11.4073 +         EXECUTE IMMEDIATE 'select '||plan_formula_year_||','||plan_formula_p1_||','||plan_formula_p2_||','
 11.4074 +         ||plan_formula_p3_||','||plan_formula_p4_||','||plan_formula_p5_||','||plan_formula_p6_||','
 11.4075 +         ||plan_formula_p7_||','||plan_formula_p8_||','||plan_formula_p9_||','||plan_formula_p10_||','
 11.4076 +         ||plan_formula_p11_||','||plan_formula_p12_||' from dual'
 11.4077 +         INTO
 11.4078 +         formula_year_,formula_p1_,formula_p2_,formula_p3_,formula_p4_,formula_p5_,formula_p6_,formula_p7_,
 11.4079 +         formula_p8_,formula_p9_,formula_p10_,formula_p11_,formula_p12_;
 11.4080 +      END IF;
 11.4081 +      UPDATE scorecard_input_value_tab
 11.4082 +         SET
 11.4083 +            year_value = formula_year_,
 11.4084 +            p1_value = formula_p1_,
 11.4085 +            p2_value = formula_p2_,
 11.4086 +            p3_value = formula_p3_,
 11.4087 +            p4_value = formula_p4_,
 11.4088 +            p5_value = formula_p5_,
 11.4089 +            p6_value = formula_p6_,
 11.4090 +            p7_value = formula_p7_,
 11.4091 +            p8_value = formula_p8_,
 11.4092 +            p9_value = formula_p9_,
 11.4093 +            p10_value = formula_p10_,
 11.4094 +            p11_value = formula_p11_,
 11.4095 +            p12_value = formula_p12_
 11.4096 +         WHERE
 11.4097 +            environment = environment_ AND
 11.4098 +            scorecard = scorecard_     AND
 11.4099 +            year = year_               AND
 11.4100 +            version = version_         AND
 11.4101 +            scorecard_object = measure_;
 11.4102 +      -- Bug 76573 Begin. Set the measure to planned state
 11.4103 +      Set_To_Planned(environment_, scorecard_, year_, version_, measure_);
 11.4104 +      -- Bug 76573 End
 11.4105 +      
 11.4106 +   ELSE
 11.4107 +       Error_SYS.Appl_General(lu_name_,'ERRPLANFOR : No Calculation formula is connected to the measure :P1 in Scorecard :P2',Scorecard_Measure_API.Get_Description(measure_),Scorecard_API.Get_Description(scorecard_,environment_));
 11.4108 +   END IF;
 11.4109 +
 11.4110 +END Calculate_Measures;
 11.4111 +PROCEDURE Update_Referred_Component (
 11.4112 +   check_reference_ IN OUT VARCHAR2,
 11.4113 +   environment_ IN VARCHAR2,
 11.4114 +   scorecard_ IN VARCHAR2,
 11.4115 +   year_ IN VARCHAR2,
 11.4116 +   version_ IN VARCHAR2,
 11.4117 +   scorecard_object_ IN VARCHAR2 )
 11.4118 +IS
 11.4119 +   rec_        SCORECARD_INPUT_VALUE_TAB%ROWTYPE;
 11.4120 +   CURSOR value_cur IS
 11.4121 +      SELECT year_value,p1_value,p2_value,p3_value,p4_value,p5_value,p6_value,p7_value,p8_value,p9_value,p10_value,
 11.4122 +      p11_value,p12_value
 11.4123 +      FROM scorecard_input_value_tab
 11.4124 +      WHERE environment = environment_
 11.4125 +      AND scorecard = scorecard_
 11.4126 +      AND year = year_
 11.4127 +      AND version = version_
 11.4128 +      AND scorecard_object = scorecard_object_;
 11.4129 +   CURSOR component_cur IS
 11.4130 +      SELECT level_id
 11.4131 +      FROM scorecard_structure_tab
 11.4132 +      WHERE environment = environment_
 11.4133 +      AND scorecard = scorecard_
 11.4134 +      AND planning_type = 'REFERENCE'
 11.4135 +      AND planning_reference = scorecard_object_
 11.4136 +      AND child_level_type = 'COMPONENT';
 11.4137 +      measure_format_        NUMBER;
 11.4138 +BEGIN
 11.4139 +   General_SYS.Init_Method(lu_name_, '&PKG', 'Update_Referred_Component');
 11.4140 +   FOR component_cur_ IN component_cur LOOP
 11.4141 +      check_reference_ := 'TRUE';
 11.4142 +      rec_ := Lock_By_Keys___(environment_,scorecard_,year_,version_,component_cur_.level_id);
 11.4143 +      FOR value_cur_ IN value_cur LOOP
 11.4144 +         measure_format_      := TO_NUMBER(Scorecard_Measure_API.Get_Measure_Format(component_cur_.level_id));
 11.4145 +         UPDATE scorecard_input_value_tab
 11.4146 +         SET year_value = value_cur_.year_value * measure_format_,
 11.4147 +             p1_value = value_cur_.p1_value     * measure_format_,
 11.4148 +             p2_value = value_cur_.p2_value     * measure_format_,
 11.4149 +             p3_value = value_cur_.p3_value     * measure_format_,
 11.4150 +             p4_value = value_cur_.p4_value     * measure_format_,
 11.4151 +             p5_value = value_cur_.p5_value     * measure_format_,
 11.4152 +             p6_value = value_cur_.p6_value     * measure_format_,
 11.4153 +             p7_value = value_cur_.p7_value     * measure_format_,
 11.4154 +             p8_value = value_cur_.p8_value     * measure_format_,
 11.4155 +             p9_value = value_cur_.p9_value     * measure_format_,
 11.4156 +             p10_value = value_cur_.p10_value   * measure_format_,
 11.4157 +             p11_value = value_cur_.p11_value   * measure_format_,
 11.4158 +             p12_value = value_cur_.p12_value   * measure_format_         
 11.4159 +         WHERE
 11.4160 +             environment = environment_ AND
 11.4161 +             scorecard = scorecard_     AND
 11.4162 +             year = year_               AND
 11.4163 +             version = version_         AND
 11.4164 +             scorecard_object = component_cur_.level_id;
 11.4165 +       END LOOP;
 11.4166 +       Set_To_Planned(environment_,scorecard_,year_,version_,component_cur_.level_id);
 11.4167 +   END LOOP;
 11.4168 +END Update_Referred_Component;
 11.4169 +PROCEDURE Delete_By_Passed_Value (
 11.4170 +   key_value_ IN VARCHAR2,
 11.4171 +   year_ IN VARCHAR2 )
 11.4172 +IS
 11.4173 +   dummy_ SCORECARD_INPUT_VALUE_TAB%ROWTYPE;
 11.4174 +   info_  VARCHAR2(2000);
 11.4175 +   --objversion_ VARCHAR2(2000);
 11.4176 +   CURSOR Get_rows IS
 11.4177 +      SELECT objid,objversion FROM scorecard_input_value
 11.4178 +      WHERE environment=key_value_
 11.4179 +      AND   year=year_ ;
 11.4180 +BEGIN
 11.4181 +   General_SYS.Init_Method(lu_name_, 'SCORECARD_INPUT_VALUE_API', 'Delete_By_Passed_Value');
 11.4182 +   FOR get_rec in Get_rows  loop
 11.4183 +     --  Delete___(get_rec.objid,get_rec);
 11.4184 +       Remove__ (info_ ,get_rec.objid ,get_rec.objversion,'DO' );
 11.4185 +   end loop;
 11.4186 +END Delete_By_Passed_Value;
 11.4187 +PROCEDURE Delete_Version_Passed (
 11.4188 +   environment_ IN VARCHAR2,
 11.4189 +   version_ IN VARCHAR2 )
 11.4190 +IS
 11.4191 +   info_  VARCHAR2(2000);
 11.4192 +   CURSOR Get_rows IS
 11.4193 +      SELECT objid,objversion FROM scorecard_input_value
 11.4194 +      WHERE  environment=environment_
 11.4195 +      AND    version=version_ ;
 11.4196 +
 11.4197 +BEGIN
 11.4198 +   General_SYS.Init_Method(lu_name_, 'SCORECARD_INPUT_VALUE_API', 'Delete_Version_passed');
 11.4199 +   FOR get_rec in Get_rows  loop
 11.4200 +       Remove__ (info_ ,get_rec.objid ,get_rec.objversion,'DO' );
 11.4201 +   end loop;
 11.4202 +END Delete_Version_Passed;
 11.4203 +PROCEDURE Delete_Scorecard_Passed (
 11.4204 +   environment_ IN VARCHAR2,
 11.4205 +   scorecard_ IN VARCHAR2 )
 11.4206 +IS
 11.4207 +
 11.4208 +   info_  VARCHAR2(2000);
 11.4209 +   CURSOR Get_rows IS
 11.4210 +      SELECT objid,objversion FROM scorecard_input_value
 11.4211 +      WHERE  environment=environment_
 11.4212 +      AND    scorecard=scorecard_ ;
 11.4213 +BEGIN
 11.4214 +   General_SYS.Init_Method(lu_name_, 'SCORECARD_INPUT_VALUE_API', 'Delete_Scorecard_passed');
 11.4215 +   FOR get_rec in Get_rows  loop
 11.4216 +       Remove__ (info_ ,get_rec.objid ,get_rec.objversion,'DO' );
 11.4217 +   end loop;
 11.4218 +END Delete_Scorecard_Passed;
 11.4219 +PROCEDURE Insert_Data (
 11.4220 +   env_ IN VARCHAR2,
 11.4221 +   scr_ IN VARCHAR2,
 11.4222 +   year_ IN VARCHAR2,
 11.4223 +   version_ IN VARCHAR2,
 11.4224 +   obj_ IN VARCHAR2,
 11.4225 +   type_ IN VARCHAR2,
 11.4226 +   p1_ IN VARCHAR2,
 11.4227 +   p2_ IN VARCHAR2,
 11.4228 +   p3_ IN VARCHAR2,
 11.4229 +   p4_ IN VARCHAR2,
 11.4230 +   p5_ IN VARCHAR2,
 11.4231 +   p6_ IN VARCHAR2,
 11.4232 +   p7_ IN VARCHAR2,
 11.4233 +   p8_ IN VARCHAR2,
 11.4234 +   p9_ IN VARCHAR2,
 11.4235 +   p10_ IN VARCHAR2,
 11.4236 +   p11_ IN VARCHAR2,
 11.4237 +   p12_ IN VARCHAR2 )
 11.4238 +IS
 11.4239 +    newrec_ SCORECARD_INPUT_VALUE_TAB%ROWTYPE;
 11.4240 +    objid_ VARCHAR2(2000);
 11.4241 +    objversion_ VARCHAR2(2000);
 11.4242 +    attr_  VARCHAR2(2000);
 11.4243 +
 11.4244 +BEGIN
 11.4245 +    General_SYS.Init_Method(lu_name_, '&PKG', 'Insert_Data');
 11.4246 +    newrec_.environment := env_;
 11.4247 +    newrec_.scorecard := scr_;
 11.4248 +    newrec_.year := year_;
 11.4249 +    newrec_.version := version_ ;
 11.4250 +    newrec_.scorecard_object := obj_;
 11.4251 +    newrec_.object_type := type_;
 11.4252 +    newrec_.p1_key := p1_;
 11.4253 +    newrec_.p2_key := p2_;
 11.4254 +    newrec_.p3_key := p3_;
 11.4255 +    newrec_.p4_key := p4_;
 11.4256 +    newrec_.p5_key := p5_;
 11.4257 +    newrec_.p6_key := p6_;
 11.4258 +    newrec_.p7_key := p7_;
 11.4259 +    newrec_.p8_key := p8_;
 11.4260 +    newrec_.p9_key := p9_;
 11.4261 +    newrec_.p10_key :=p10_;
 11.4262 +    newrec_.p11_key :=p11_;
 11.4263 +    newrec_.p12_key :=p12_;
 11.4264 +    newrec_.p12_key :=p12_;
 11.4265 +    newrec_.action :='TRUE';
 11.4266 +
 11.4267 +    Insert___(objid_, objversion_, newrec_, attr_);
 11.4268 +END Insert_Data;
 11.4269 +PROCEDURE Modify_Data (
 11.4270 +   p1_ IN VARCHAR2,
 11.4271 +   p2_ IN VARCHAR2,
 11.4272 +   p3_ IN VARCHAR2,
 11.4273 +   p4_ IN VARCHAR2,
 11.4274 +   p5_ IN VARCHAR2,
 11.4275 +   p6_ IN VARCHAR2,
 11.4276 +   p7_ IN VARCHAR2,
 11.4277 +   p8_ IN VARCHAR2,
 11.4278 +   p9_ IN VARCHAR2,
 11.4279 +   p10_ IN VARCHAR2,
 11.4280 +   p11_ IN VARCHAR2,
 11.4281 +   p12_ IN VARCHAR2,
 11.4282 +   env_ IN VARCHAR2,
 11.4283 +   scr_ IN VARCHAR2,
 11.4284 +   year_ IN VARCHAR2,
 11.4285 +   version_ IN VARCHAR2,
 11.4286 +   level_ IN VARCHAR2 )
 11.4287 +IS
 11.4288 +   objid_ VARCHAR2(2000);
 11.4289 +   objversion_ VARCHAR2(2000);
 11.4290 +   info_ VARCHAR2(32000);
 11.4291 +   attr_ VARCHAR2(32000);
 11.4292 +BEGIN
 11.4293 +   General_SYS.Init_Method(lu_name_, '&PKG', 'Modify_Data');
 11.4294 +   Get_Id_Version_By_Keys___(objid_,objversion_,env_ ,scr_,year_,version_,level_);
 11.4295 +   Client_SYS.Clear_Attr(attr_);
 11.4296 +   Client_SYS.Add_To_Attr('P1_KEY', p1_, attr_);
 11.4297 +   Client_SYS.Add_To_Attr('P2_KEY', p2_, attr_);
 11.4298 +   Client_SYS.Add_To_Attr('P3_KEY', p3_, attr_);
 11.4299 +   Client_SYS.Add_To_Attr('P4_KEY', p4_, attr_);
 11.4300 +   Client_SYS.Add_To_Attr('P5_KEY', p5_, attr_);
 11.4301 +   Client_SYS.Add_To_Attr('P6_KEY', p6_, attr_);
 11.4302 +   Client_SYS.Add_To_Attr('P7_KEY', p7_, attr_);
 11.4303 +   Client_SYS.Add_To_Attr('P8_KEY', p8_, attr_);
 11.4304 +   Client_SYS.Add_To_Attr('P9_KEY', p9_, attr_);
 11.4305 +   Client_SYS.Add_To_Attr('P10_KEY', p10_, attr_);
 11.4306 +   Client_SYS.Add_To_Attr('P11_KEY', p11_, attr_);
 11.4307 +   Client_SYS.Add_To_Attr('P12_KEY', p12_, attr_);
 11.4308 +   Client_SYS.Add_To_Attr('ACTION', 'TRUE',attr_);
 11.4309 +   Modify__(info_,objid_,objversion_,attr_,'DO');
 11.4310 +
 11.4311 +
 11.4312 +END Modify_Data;
 11.4313 +PROCEDURE Delete_Data (
 11.4314 +   env_ IN VARCHAR2,
 11.4315 +   scr_ IN VARCHAR2,
 11.4316 +   year_ IN VARCHAR2,
 11.4317 +   version_ IN VARCHAR2,
 11.4318 +   level_ IN VARCHAR2 )
 11.4319 +IS
 11.4320 +
 11.4321 +   objid_ VARCHAR2(2000);
 11.4322 +   objversion_ VARCHAR2(2000);
 11.4323 +   info_ VARCHAR2(32000);
 11.4324 +   attr_ VARCHAR2(32000);
 11.4325 +BEGIN
 11.4326 +   General_SYS.Init_Method(lu_name_, '&PKG', 'Delete_Data');
 11.4327 +   Get_Id_Version_By_Keys___(objid_,objversion_,env_ ,scr_,year_,version_,level_);
 11.4328 +   Remove__ (info_ ,objid_,objversion_,'DO' );
 11.4329 +END Delete_Data;
 11.4330 +PROCEDURE Scorecard_Inputs_By_Batch (
 11.4331 +   environment_ IN VARCHAR2,
 11.4332 +   scorecard_ IN VARCHAR2,
 11.4333 +   years_ IN VARCHAR2,
 11.4334 +   version_ IN VARCHAR2,
 11.4335 +   execution_ IN VARCHAR2 )
 11.4336 +IS
 11.4337 +   job_id_     NUMBER;
 11.4338 +   method_     VARCHAR2(32000);
 11.4339 +   attr_       VARCHAR2(32000);
 11.4340 +BEGIN
 11.4341 +   General_SYS.Init_Method(lu_name_, 'SCORECARD_INPUT_VALUE_API','Scorecard_Inputs_By_Batch');
 11.4342 +   Client_SYS.Clear_Attr(attr_);
 11.4343 +   Client_SYS.Add_To_Attr('ENVIRONMENT',environment_,attr_);
 11.4344 +   Client_SYS.Add_To_Attr('SCORECARD',scorecard_ ,attr_);
 11.4345 +   Client_SYS.Add_To_Attr('YEAR',years_,attr_);
 11.4346 +   Client_SYS.Add_To_Attr('VERSION',version_,attr_);
 11.4347 +   method_ := 'Scorecard_Input_Value_API.Start_Inputing_Scorecards('''''||attr_||''''')';
 11.4348 +   IF (execution_ != 'NOW') THEN
 11.4349 +      Batch_SYS.New_Job(job_id_,method_,execution_);
 11.4350 +   ELSE
 11.4351 +      Input_Scorecard_Data (attr_);
 11.4352 +   END IF;
 11.4353 +END Scorecard_Inputs_By_Batch;
 11.4354 +PROCEDURE Input_Scorecard_Data (
 11.4355 +   attr_ IN VARCHAR2 )
 11.4356 +IS
 11.4357 +
 11.4358 +   TYPE RefCurTyp IS REF CURSOR;
 11.4359 +   rcScr      RefCurTyp;
 11.4360 +   rcYear     RefCurTyp;
 11.4361 +   rcVer      RefCurTyp;
 11.4362 +   ssql_      varchar2(32000);
 11.4363 +   ssql2_     varchar2(32000);
 11.4364 +   ssql3_     varchar2(32000);
 11.4365 +   tempscr_   varchar2(20);
 11.4366 +   tempver_   varchar2(20);
 11.4367 +   tempyear_  varchar2(20);
 11.4368 +   env        VARCHAR2(10);
 11.4369 +   scorecard_ VARCHAR2(32000);
 11.4370 +   years_     VARCHAR2(2000);
 11.4371 +   version_   VARCHAR2(2000);
 11.4372 +   period1_   VARCHAR2(10);
 11.4373 +   period2_   VARCHAR2(10);
 11.4374 +   period3_   VARCHAR2(10);
 11.4375 +   period4_   VARCHAR2(10);
 11.4376 +   period5_   VARCHAR2(10);
 11.4377 +   period6_   VARCHAR2(10);
 11.4378 +   period7_   VARCHAR2(10);
 11.4379 +   period8_   VARCHAR2(10);
 11.4380 +   period9_   VARCHAR2(10);
 11.4381 +   period10_  VARCHAR2(10);
 11.4382 +   period11_  VARCHAR2(10);
 11.4383 +   period12_  VARCHAR2(10);
 11.4384 +   ExistEnv   VARCHAR2(10);
 11.4385 +   dummy2_    VARCHAR2(10);
 11.4386 +   dummy_               NUMBER;
 11.4387 +   scr_exist            NUMBER;
 11.4388 +   mea_exist            NUMBER;
 11.4389 +   mea_ver_exist        NUMBER;
 11.4390 +   mea_year_exist       NUMBER;
 11.4391 +   mea_year_conn_exist  NUMBER;
 11.4392 +   comp_exist           NUMBER;
 11.4393 +   comp_ver_exist       NUMBER;
 11.4394 +   comp_year_exist      NUMBER;
 11.4395 +   comp_year_conn_exist NUMBER;
 11.4396 +   del_mea_rec          NUMBER;
 11.4397 +   del_comp_rec         NUMBER;
 11.4398 +   insert_mea_rec       NUMBER;
 11.4399 +   insert_comp_rec      NUMBER;
 11.4400 +   rec_exists           NUMBER;
 11.4401 +   rec_exists2          NUMBER;
 11.4402 +   rec_not_exist        NUMBER;
 11.4403 +   rec_not_exist2       NUMBER;
 11.4404 +   rec_exists_del       NUMBER;
 11.4405 +   rec_exists_del2      NUMBER;
 11.4406 +
 11.4407 +   CURSOR get_year_conn(env_ varchar2, year_ varchar2) IS
 11.4408 +      SELECT year
 11.4409 +      FROM scorecard_period_tab
 11.4410 +      WHERE environment = env_
 11.4411 +      AND year = year_;
 11.4412 +
 11.4413 +   CURSOR get_mea(env_ varchar2, scr_ varchar2) IS
 11.4414 +      SELECT level_id
 11.4415 +      FROM scorecard_structure_tab
 11.4416 +      WHERE environment = env_
 11.4417 +      AND scorecard = scr_
 11.4418 +      AND child_level_type = 'MEASURE';
 11.4419 +
 11.4420 +   CURSOR get_comp(env_ varchar2, scr_ varchar2, mea_ varchar2) IS
 11.4421 +      SELECT level_id
 11.4422 +      FROM scorecard_structure_tab
 11.4423 +      WHERE environment = env_
 11.4424 +      AND scorecard = scr_
 11.4425 +      AND child_level_type = 'COMPONENT'
 11.4426 +      AND parent_id = mea_;
 11.4427 +
 11.4428 +   CURSOR chk_exist(env_ varchar2, scr_ varchar2, year_ varchar2, ver_ varchar2, scr_obj_ varchar2) IS
 11.4429 +      SELECT 1
 11.4430 +      FROM scorecard_input_value_tab
 11.4431 +      WHERE environment = env_
 11.4432 +      AND scorecard = scr_
 11.4433 +      AND year = year_
 11.4434 +      AND version = ver_
 11.4435 +      AND scorecard_object = scr_obj_;
 11.4436 +BEGIN
 11.4437 +     General_SYS.Init_Method(lu_name_, '&PKG', 'Input_Scorecard_Data');
 11.4438 +     env:=Client_SYS.Get_Item_Value('ENVIRONMENT',attr_);
 11.4439 +     scorecard_:= Client_SYS.Get_Item_Value('SCORECARD',attr_);
 11.4440 +     version_  := Client_SYS.Get_Item_Value('VERSION',attr_);
 11.4441 +     years_    := Client_SYS.Get_Item_Value('YEAR',attr_);
 11.4442 +     scorecard_:= Replace(scorecard_,'^','''');
 11.4443 +     version_  := Replace(version_,'^','''');
 11.4444 +     years_    := Replace(years_,'^','''');
 11.4445 +     scr_exist := 0;
 11.4446 +     mea_exist := 0;
 11.4447 +     mea_ver_exist        := 0;
 11.4448 +     mea_year_exist       := 0;
 11.4449 +     mea_year_conn_exist  := 0;
 11.4450 +     comp_exist           := 0;
 11.4451 +     comp_ver_exist       := 0;
 11.4452 +     comp_year_exist      := 0;
 11.4453 +     comp_year_conn_exist := 0;
 11.4454 +     del_mea_rec     := 0;
 11.4455 +     del_comp_rec    := 0;
 11.4456 +     insert_mea_rec  := 0;
 11.4457 +     insert_comp_rec := 0;
 11.4458 +     rec_exists      := 0;
 11.4459 +     rec_exists2     := 0;
 11.4460 +     rec_not_exist   := 0;
 11.4461 +     rec_not_exist2  := 0;
 11.4462 +     rec_exists_del  := 0;
 11.4463 +     rec_exists_del2 := 0;
 11.4464 +
 11.4465 +     IF scorecard_ IS null then
 11.4466 +         ssql_:='SELECT scorecard FROM scorecard_tab WHERE environment='|| '''' || env || '''' || ' AND (rowstate = '||'''Open''' || ' OR  rowstate = '||'''Published'''||')';
 11.4467 +     else
 11.4468 +         ssql_ := 'SELECT scorecard FROM scorecard_tab WHERE environment='|| '''' || env || '''' || ' AND SCORECARD IN (' ||  scorecard_ || ')' ;
 11.4469 +     end if;
 11.4470 +
 11.4471 +     if version_ IS null then
 11.4472 +         ssql2_:= 'SELECT version FROM measure_version_tab WHERE environment ='|| '''' || env || '''' || 'AND USE_VERSIONS = ' || '''TRUE''' || ' AND (VERSION NOT IN (' || '''ASS'''||','||'''IND'''||','||'''TRN'''||')) AND rowstate='|| '''Open''';
 11.4473 +     else
 11.4474 +         ssql2_:= 'SELECT version FROM measure_version_tab WHERE environment ='|| '''' || env || '''' || ' AND VERSION IN (' ||  version_ || ')' ;
 11.4475 +     end if;
 11.4476 +
 11.4477 +     if years_ IS null then
 11.4478 +         ssql3_:= 'SELECT year FROM environment_year_tab WHERE environment ='|| '''' || env || '''' ||' AND rowstate= '||'''Open''';
 11.4479 +     else
 11.4480 +         ssql3_:= 'SELECT year FROM environment_year_tab WHERE environment ='|| '''' || env || '''' || ' AND YEAR IN (' ||  years_ || ')' ;
 11.4481 +     end if;
 11.4482 +
 11.4483 +     -- ifs_assert_safe shsalk 20060117
 11.4484 +     open rcScr for ssql_;
 11.4485 +
 11.4486 +     LOOP
 11.4487 +         FETCH rcScr INTO tempscr_;
 11.4488 +         EXIT WHEN rcScr%NOTFOUND;
 11.4489 +         scr_exist := 1;
 11.4490 +
 11.4491 +         FOR meaNo IN get_mea(env, tempscr_) LOOP
 11.4492 +           -- ifs_assert_safe shsalk 20060117
 11.4493 +           open rcVer for ssql2_;
 11.4494 +           LOOP
 11.4495 +              FETCH rcVer INTO tempver_;
 11.4496 +              EXIT WHEN rcVer%NOTFOUND;
 11.4497 +              -- ifs_assert_safe shsalk 20060117
 11.4498 +              open rcYear for ssql3_;
 11.4499 +              LOOP
 11.4500 +                FETCH rcYear INTO tempyear_;
 11.4501 +                EXIT WHEN rcYear%NOTFOUND;
 11.4502 +                  Return_Periods(period1_,period2_,period3_,period4_,period5_,period6_,period7_,
 11.4503 +                                 period8_,period9_,period10_,period11_,period12_,env, tempyear_);
 11.4504 +
 11.4505 +                  IF (tempver_ != 'ASS') THEN
 11.4506 +
 11.4507 +                     OPEN get_year_conn(env, tempyear_);
 11.4508 +                     FETCH get_year_conn INTO dummy2_;
 11.4509 +                     IF (get_year_conn%FOUND) THEN
 11.4510 +                        rec_not_exist := 1;
 11.4511 +                     ELSE
 11.4512 +                        rec_not_exist := 0;
 11.4513 +                     END IF;
 11.4514 +                     CLOSE get_year_conn;
 11.4515 +
 11.4516 +                     IF (rec_not_exist = 1) THEN
 11.4517 +                        mea_year_conn_exist := 1;
 11.4518 +
 11.4519 +                        OPEN chk_exist(env, tempscr_, tempyear_, tempver_, meaNo.level_id);
 11.4520 +                        FETCH chk_exist INTO dummy_;
 11.4521 +                        IF (chk_exist%FOUND) THEN
 11.4522 +                           rec_exists := 1;
 11.4523 +                        ELSE
 11.4524 +                           rec_exists := 0;
 11.4525 +                        END IF;
 11.4526 +                        CLOSE chk_exist;
 11.4527 +
 11.4528 +                        IF (rec_exists = 1) THEN
 11.4529 +                            Modify_Data(period1_,period2_,period3_,period4_,period5_,period6_,
 11.4530 +                                        period7_,period8_,period9_,period10_,period11_,period12_,
 11.4531 +                                        env,tempscr_,tempyear_,tempver_,meaNo.level_id);
 11.4532 +                        ELSE
 11.4533 +                           Insert_Data(env,tempscr_,tempyear_,tempver_,meaNo.level_id,'MEASURE',
 11.4534 +                                       period1_,period2_,period3_,period4_,period5_,period6_,
 11.4535 +                                       period7_,period8_,period9_,period10_,period11_,period12_);
 11.4536 +                        END IF;
 11.4537 +                        Environment_Year_Api.Force_Open(env,tempyear_);
 11.4538 +                        Scorecard_Api.Force_Open(env,tempscr_);
 11.4539 +                        Measure_Version_Api.Force_Open(env,tempver_);
 11.4540 +                        insert_mea_rec := 1;
 11.4541 +
 11.4542 +                     ELSE
 11.4543 +
 11.4544 +                        OPEN chk_exist(env, tempscr_, tempyear_, tempver_, meaNo.level_id);
 11.4545 +                        FETCH chk_exist INTO dummy_;
 11.4546 +                        IF (chk_exist%FOUND) THEN
 11.4547 +                           rec_exists_del := 1;
 11.4548 +                        ELSE
 11.4549 +                           rec_exists_del:= 0;
 11.4550 +                        END IF;
 11.4551 +                        CLOSE chk_exist;
 11.4552 +
 11.4553 +                        IF (rec_exists_del = 1) THEN
 11.4554 +                           Delete_Data(env,tempscr_,tempyear_,tempver_,meaNo.level_id);
 11.4555 +                           del_mea_rec := 1;
 11.4556 +                        END IF;
 11.4557 +                     END IF;
 11.4558 +
 11.4559 +                  END IF;
 11.4560 +
 11.4561 +               END LOOP;
 11.4562 +               close rcYear;
 11.4563 +            END LOOP;
 11.4564 +             close rcVer;
 11.4565 +           END LOOP;
 11.4566 +
 11.4567 +         FOR meaNo IN get_mea(env, tempscr_) LOOP
 11.4568 +            FOR compNo IN get_comp(env, tempscr_, meaNo.level_id) LOOP
 11.4569 +               comp_exist := 1;
 11.4570 +               -- ifs_assert_safe shsalk 20060117
 11.4571 +               open rcVer for ssql2_;
 11.4572 +               LOOP
 11.4573 +                  FETCH rcVer INTO tempver_;
 11.4574 +                  EXIT WHEN rcVer%NOTFOUND;
 11.4575 +                  comp_ver_exist := 1;
 11.4576 +                  -- ifs_assert_safe shsalk 20060117
 11.4577 +                  open rcYear for ssql3_;
 11.4578 +                  LOOP
 11.4579 +                    FETCH rcYear INTO tempyear_;
 11.4580 +                    EXIT WHEN rcYear%NOTFOUND;
 11.4581 +                     comp_year_exist := 1;
 11.4582 +
 11.4583 +                     Return_Periods(period1_,period2_,period3_,period4_,period5_,period6_,period7_,
 11.4584 +                                    period8_,period9_,period10_,period11_,period12_,env, tempyear_);
 11.4585 +
 11.4586 +                     IF (tempver_ != 'ASS') THEN
 11.4587 +
 11.4588 +                        OPEN get_year_conn(env, tempyear_);
 11.4589 +                        FETCH get_year_conn INTO dummy2_;
 11.4590 +                        IF (get_year_conn%FOUND) THEN
 11.4591 +                           rec_not_exist2 := 1;
 11.4592 +                        ELSE
 11.4593 +                           rec_not_exist2 := 0;
 11.4594 +                        END IF;
 11.4595 +                        CLOSE get_year_conn;
 11.4596 +
 11.4597 +                        IF (rec_not_exist2 = 1) THEN
 11.4598 +                           comp_year_conn_exist := 1;
 11.4599 +
 11.4600 +                           OPEN chk_exist(env, tempscr_, tempyear_, tempver_, compNo.level_id);
 11.4601 +                           FETCH chk_exist INTO dummy_;
 11.4602 +                           IF (chk_exist%FOUND) THEN
 11.4603 +                              rec_exists2 := 1;
 11.4604 +                           ELSE
 11.4605 +                              rec_exists2 := 0;
 11.4606 +                           END IF;
 11.4607 +                           CLOSE chk_exist;
 11.4608 +
 11.4609 +                           IF (rec_exists2 = 1) THEN
 11.4610 +                              Modify_Data(period1_,period2_,period3_,period4_,period5_,period6_,
 11.4611 +                                          period7_,period8_,period9_,period10_,period11_,period12_,
 11.4612 +                                          env,tempscr_,tempyear_,tempver_,compNo.level_id);
 11.4613 +                           ELSE
 11.4614 +                              Insert_Data(env,tempscr_,tempyear_,tempver_,compNo.level_id,'COMPONENT',
 11.4615 +                                          period1_,period2_,period3_,period4_,period5_,period6_,
 11.4616 +                                          period7_,period8_,period9_,period10_,period11_,period12_);
 11.4617 +                           END IF;
 11.4618 +                           Environment_Year_Api.Force_Open(env,tempyear_);
 11.4619 +                           Scorecard_Api.Force_Open(env,tempscr_);
 11.4620 +                           Measure_Version_Api.Force_Open(env,tempver_);
 11.4621 +                           insert_comp_rec := 1;
 11.4622 +
 11.4623 +                        ELSE
 11.4624 +
 11.4625 +                           OPEN chk_exist(env, tempscr_, tempyear_, tempver_, compNo.level_id);
 11.4626 +                           FETCH chk_exist INTO dummy_;
 11.4627 +                           IF (chk_exist%FOUND) THEN
 11.4628 +                              rec_exists_del2 := 1;
 11.4629 +                           ELSE
 11.4630 +                              rec_exists_del2 := 0;
 11.4631 +                           END IF;
 11.4632 +                           CLOSE chk_exist;
 11.4633 +
 11.4634 +                           IF (rec_exists_del2 = 1) THEN
 11.4635 +                              Delete_Data(env,tempscr_,tempyear_,tempver_, compNo.level_id);
 11.4636 +                              del_comp_rec := 1;
 11.4637 +                           END IF;
 11.4638 +                        END IF;
 11.4639 +
 11.4640 +                     END IF;
 11.4641 +                  END LOOP;
 11.4642 +                  close rcYear;
 11.4643 +               END LOOP;
 11.4644 +                close rcVer;
 11.4645 +
 11.4646 +            END LOOP;
 11.4647 +         END LOOP;
 11.4648 +
 11.4649 +      END LOOP;
 11.4650 +      close rcScr;
 11.4651 +
 11.4652 +END Input_Scorecard_Data;
 11.4653 +
 11.4654 +PROCEDURE Start_Inputing_Scorecards (
 11.4655 +   attr_ IN VARCHAR2 )
 11.4656 +IS
 11.4657 +   new_attr_ VARCHAR2(32000) := attr_;
 11.4658 +   desc_     VARCHAR2(2000);
 11.4659 +BEGIN
 11.4660 +   General_SYS.Init_Method(lu_name_, '&PKG', 'Start_Inputing_Scorecards');
 11.4661 +   desc_ := Language_SYS.Translate_Constant (lu_name_, 'BGJOB_INPUTSSC:Update Scorecard Input Value Table.');
 11.4662 +   Transaction_SYS.Deferred_Call ('Scorecard_Input_Value_API.Input_Scorecard_Data',new_attr_, desc_);
 11.4663 +END Start_Inputing_Scorecards;
 11.4664 +PROCEDURE Hierachical_Distribution (
 11.4665 +   environment_ IN VARCHAR2,
 11.4666 +   scorecard_ IN VARCHAR2,
 11.4667 +   year_ IN VARCHAR2,
 11.4668 +   version_ IN VARCHAR2,
 11.4669 +   object_type_ IN VARCHAR2,
 11.4670 +   period_count_ IN NUMBER,
 11.4671 +   measure_ IN VARCHAR2 DEFAULT NULL )
 11.4672 +IS
 11.4673 +   CURSOR get_scorecard_objects IS
 11.4674 +   SELECT scorecard_object
 11.4675 +   FROM scorecard_input_value_tab
 11.4676 +   WHERE scorecard=scorecard_
 11.4677 +   AND environment=environment_
 11.4678 +   AND object_type=object_type_
 11.4679 +   AND year=year_
 11.4680 +   AND version=version_
 11.4681 +   AND action='TRUE';
 11.4682 +
 11.4683 +   CURSOR get_components(scorecard_id_  VARCHAR2) IS       -- Move to scorecard structure
 11.4684 +   SELECT level_id
 11.4685 +   FROM scorecard_structure
 11.4686 +   WHERE parent_id=measure_
 11.4687 +   AND parent_level_type_db='MEASURE'
 11.4688 +   AND scorecard=scorecard_id_
 11.4689 +   AND environment=environment_;
 11.4690 +
 11.4691 +   CURSOR get_child_scorecards IS         -- Move to scorecard
 11.4692 +   SELECT scorecard
 11.4693 +   FROM scorecard
 11.4694 +   WHERE parent=scorecard_
 11.4695 +   AND environment=environment_;
 11.4696 +
 11.4697 +   CURSOR check_component_selected (component_  VARCHAR2)IS
 11.4698 +   SELECT 1
 11.4699 +   FROM scorecard_input_value_tab
 11.4700 +   WHERE action='TRUE'
 11.4701 +   AND object_type='COMPONENT'
 11.4702 +   AND year=year_
 11.4703 +   AND version=version_
 11.4704 +   AND environment=environment_
 11.4705 +   AND scorecard=scorecard_
 11.4706 +   AND scorecard_object=component_;
 11.4707 +
 11.4708 +   TYPE component_arr_type           IS TABLE OF VARCHAR2(10)
 11.4709 +                                     INDEX BY BINARY_INTEGER;
 11.4710 +   component_arr_                    component_arr_type;
 11.4711 +   index_                            NUMBER;
 11.4712 +   parent_component_count_           NUMBER;
 11.4713 +   child_component_count_            NUMBER;
 11.4714 +   component_exist_                  BOOLEAN;
 11.4715 +   sel_component_arr_                component_arr_type;
 11.4716 +   sel_index_                        NUMBER;
 11.4717 +   temp_                             NUMBER;
 11.4718 +
 11.4719 +BEGIN
 11.4720 +   General_SYS.Init_Method(lu_name_, '&PKG', 'Hierachical_Distribution');
 11.4721 +   IF object_type_ = 'COMPONENT' THEN
 11.4722 +      -- Get measure components in parent
 11.4723 +      index_:=0;
 11.4724 +      sel_index_:=0;
 11.4725 +      FOR components_ IN get_components(scorecard_) LOOP
 11.4726 +         index_:=index_+1;
 11.4727 +         component_arr_(index_):=components_.level_id;
 11.4728 +         OPEN check_component_selected (components_.level_id);
 11.4729 +         FETCH check_component_selected INTO temp_;
 11.4730 +         IF check_component_selected%FOUND THEN
 11.4731 +            sel_index_:=sel_index_+1;
 11.4732 +            sel_component_arr_(sel_index_):=components_.level_id;
 11.4733 +         END IF;
 11.4734 +         CLOSE check_component_selected;
 11.4735 +      END LOOP;
 11.4736 +
 11.4737 +      IF index_>0 THEN
 11.4738 +         parent_component_count_:=index_;
 11.4739 +         FOR child_scorecards_ IN get_child_scorecards LOOP
 11.4740 +            child_component_count_:=0;
 11.4741 +            FOR components_ IN get_components(child_scorecards_.scorecard) LOOP
 11.4742 +               component_exist_:=FALSE;
 11.4743 +               FOR index_ IN 1 .. parent_component_count_ LOOP
 11.4744 +                  IF component_arr_(index_)=components_.level_id THEN
 11.4745 +                     component_exist_:=TRUE;
 11.4746 +                     EXIT;
 11.4747 +                  END IF;
 11.4748 +               END LOOP;
 11.4749 +               IF NOT component_exist_ THEN
 11.4750 +                  Error_SYS.Appl_General(lu_name_,'SAMESTRUCT1: Child scorecard :P1 does not contain component :P2 .',child_scorecards_.scorecard,components_.level_id);
 11.4751 +               END IF;
 11.4752 +               child_component_count_:=child_component_count_+1;
 11.4753 +            END LOOP;
 11.4754 +            IF child_component_count_!=parent_component_count_ THEN
 11.4755 +               Error_SYS.Appl_General(lu_name_,'SAMESTRUCT2: Child scorecard :P1 does not contain the same structure as parent.',child_scorecards_.scorecard);
 11.4756 +            END IF;
 11.4757 +         END LOOP;
 11.4758 +      ELSE
 11.4759 +         Error_SYS.Appl_General(lu_name_,'NOCOMPSEL1: Selected scorecard does not contain any components.');
 11.4760 +      END IF;
 11.4761 +
 11.4762 +      IF sel_index_>0 THEN
 11.4763 +         FOR index_ IN 1..sel_index_ LOOP
 11.4764 +            Distribute_Input_Values___(environment_,scorecard_,year_,version_,object_type_,period_count_,sel_component_arr_(index_));
 11.4765 +         END LOOP;
 11.4766 +      ELSE
 11.4767 +         Error_SYS.Appl_General(lu_name_,'NOCOMPSEL2: No components are selected for hierachical distribution.');
 11.4768 +      END IF;
 11.4769 +      FOR child_scorecards_ IN get_child_scorecards LOOP
 11.4770 +         Calculate_Measures (environment_,child_scorecards_.scorecard ,year_,version_,measure_,period_count_);
 11.4771 +         -- Bug 76573 Removed the call to Set_To_Planned() since it is called inside Calculate_Measures() method
 11.4772 +      END LOOP;
 11.4773 +   ELSE
 11.4774 +      FOR scorecard_objects_ IN get_scorecard_objects LOOP   -- fetch the measures that are selected in planning page
 11.4775 +         Distribute_Input_Values___(environment_,scorecard_,year_,version_,object_type_,period_count_,scorecard_objects_.scorecard_object);
 11.4776 +      END LOOP;
 11.4777 +   END IF;
 11.4778 +
 11.4779 +END Hierachical_Distribution;
 11.4780 +
 11.4781 +PROCEDURE Publish_Environment_Batch (
 11.4782 +   environment_ IN VARCHAR2,
 11.4783 +   schedule_ IN VARCHAR2 )
 11.4784 +IS
 11.4785 +   job_id_     NUMBER;
 11.4786 +   method_     VARCHAR2(2000);
 11.4787 +   attr_       VARCHAR2(32000);
 11.4788 +BEGIN
 11.4789 +   General_SYS.Init_Method(lu_name_, 'SCORECARD_INPUT_VALUE_API','Publish_Environment_Batch');
 11.4790 +   Client_SYS.Clear_Attr(attr_);
 11.4791 +   Client_SYS.Add_To_Attr('ENVIRONMENT',environment_,attr_);
 11.4792 +   --Start_Publish_Environments___(attr_);
 11.4793 +   method_ := 'Scorecard_Input_Value_API.Start_Publish_Environments__('''''||attr_||''''')';
 11.4794 +   IF (schedule_ != 'NOW') THEN
 11.4795 +      Batch_SYS.New_Job(job_id_,method_,schedule_);
 11.4796 +   ELSE
 11.4797 +      Start_Publish_Environments__(attr_);
 11.4798 +   END IF;
 11.4799 +END Publish_Environment_Batch;
 11.4800 +PROCEDURE Set_Publish_Scorecards (
 11.4801 +   environment_ IN VARCHAR2,
 11.4802 +   scorecard_ IN VARCHAR2 )
 11.4803 +IS
 11.4804 +   rec_    SCORECARD%ROWTYPE;
 11.4805 +   rec2_   SCORECARD_TAB%ROWTYPE;
 11.4806 +   attr_   VARCHAR2(2000);
 11.4807 +   info_   VARCHAR2(32000);
 11.4808 +   objver_ VARCHAR2(2000);
 11.4809 +
 11.4810 +BEGIN
 11.4811 +   General_SYS.Init_Method(lu_name_, '&PKG', 'Set_Publish_Scorecards');
 11.4812 +   Publish_Scorecard(environment_,scorecard_);
 11.4813 +   Client_SYS.Clear_Attr(attr_);
 11.4814 +   Scorecard_Api.Force_Publish__(info_,attr_,'DO',environment_,scorecard_);
 11.4815 +   Client_SYS.Clear_Attr(attr_);
 11.4816 +END Set_Publish_Scorecards;
 11.4817 +PROCEDURE Publish_Scorecard_Batch (
 11.4818 +   environment_ IN VARCHAR2,
 11.4819 +   scorecard_ IN VARCHAR2,
 11.4820 +   schedule_ IN VARCHAR2 )
 11.4821 +IS
 11.4822 +   job_id_     NUMBER;
 11.4823 +   method_     VARCHAR2(2000);
 11.4824 +   attr_       VARCHAR2(32000);
 11.4825 +
 11.4826 +BEGIN
 11.4827 +   General_SYS.Init_Method(lu_name_, 'SCORECARD_INPUT_VALUE_API','Publish_Scorecard_Batch');
 11.4828 +   Client_SYS.Clear_Attr(attr_);
 11.4829 +   Client_SYS.Add_To_Attr('ENVIRONMENT',environment_,attr_);
 11.4830 +   Client_SYS.Add_To_Attr('SCORECARD',scorecard_,attr_);
 11.4831 +   --Start_Publish_Environments___(attr_);
 11.4832 +   method_ := 'Scorecard_Input_Value_API.Start_Publish_Scorecards__('''''||attr_||''''')';
 11.4833 +   IF (schedule_ != 'NOW') THEN
 11.4834 +      Batch_SYS.New_Job(job_id_,method_,schedule_);
 11.4835 +   ELSE
 11.4836 +      Start_Publish_Scorecards__(attr_);
 11.4837 +   END IF;
 11.4838 +
 11.4839 +END Publish_Scorecard_Batch;
 11.4840 +PROCEDURE Hierarchical_Consolidation (
 11.4841 +   environment_ IN VARCHAR2,
 11.4842 +   scorecard_ IN VARCHAR2,
 11.4843 +   year_ IN VARCHAR2,
 11.4844 +   version_ IN VARCHAR2,
 11.4845 +   object_type_ IN VARCHAR2,
 11.4846 +   period_count_ IN NUMBER,
 11.4847 +   measure_ IN VARCHAR2 )
 11.4848 +IS
 11.4849 +   CURSOR get_scorecard_objects IS
 11.4850 +   SELECT scorecard_object
 11.4851 +   FROM scorecard_input_value_tab
 11.4852 +   WHERE scorecard=scorecard_
 11.4853 +   AND environment=environment_
 11.4854 +   AND object_type=object_type_
 11.4855 +   AND year=year_
 11.4856 +   AND version=version_
 11.4857 +   AND action='TRUE';
 11.4858 +
 11.4859 +   CURSOR get_components(scorecard_id_  VARCHAR2) IS       -- Move to scorecard structure
 11.4860 +   SELECT level_id
 11.4861 +   FROM scorecard_structure
 11.4862 +   WHERE parent_id=measure_
 11.4863 +   AND parent_level_type_db='MEASURE'
 11.4864 +   AND scorecard=scorecard_id_
 11.4865 +   AND environment=environment_;
 11.4866 +
 11.4867 +   CURSOR get_child_scorecards IS         -- Move to scorecard
 11.4868 +   SELECT scorecard
 11.4869 +   FROM scorecard
 11.4870 +   WHERE parent=scorecard_
 11.4871 +   AND environment=environment_;
 11.4872 +
 11.4873 +   CURSOR check_child_scorecards IS        --- Move to scorecard
 11.4874 +   SELECT 1
 11.4875 +   FROM scorecard
 11.4876 +   WHERE parent=scorecard_
 11.4877 +   AND environment=environment_;
 11.4878 +
 11.4879 +   CURSOR check_component_selected (component_  VARCHAR2)IS
 11.4880 +   SELECT 1
 11.4881 +   FROM scorecard_input_value_tab
 11.4882 +   WHERE action='TRUE'
 11.4883 +   AND object_type='COMPONENT'
 11.4884 +   AND year=year_
 11.4885 +   AND version=version_
 11.4886 +   AND environment=environment_
 11.4887 +   AND scorecard=scorecard_
 11.4888 +   AND scorecard_object=component_;
 11.4889 +
 11.4890 +   TYPE component_arr_type           IS TABLE OF VARCHAR2(10)
 11.4891 +                                     INDEX BY BINARY_INTEGER;
 11.4892 +   component_arr_                    component_arr_type;
 11.4893 +   index_                            NUMBER;
 11.4894 +   parent_component_count_           NUMBER;
 11.4895 +   child_component_count_            NUMBER;
 11.4896 +   component_exist_                  BOOLEAN;
 11.4897 +   sel_component_arr_                component_arr_type;
 11.4898 +   sel_index_                        NUMBER;
 11.4899 +   temp_                             NUMBER;
 11.4900 +   check_child_                      NUMBER;
 11.4901 +
 11.4902 +BEGIN
 11.4903 +   General_SYS.Init_Method(lu_name_, '&PKG', 'Hierarchical_Consolidation');
 11.4904 +   OPEN check_child_scorecards;
 11.4905 +      FETCH check_child_scorecards INTO check_child_;
 11.4906 +      IF (check_child_scorecards%NOTFOUND) THEN
 11.4907 +         CLOSE check_child_scorecards;
 11.4908 +         Error_SYS.Appl_General(lu_name_,'CHECHISC1: No child scorecards found for the scorecard :P1.',scorecard_);
 11.4909 +      END IF;
 11.4910 +   CLOSE check_child_scorecards;
 11.4911 +
 11.4912 +
 11.4913 +   IF object_type_ = 'COMPONENT' THEN
 11.4914 +      -- Get measure components in parent
 11.4915 +      index_:=0;
 11.4916 +      sel_index_:=0;
 11.4917 +      FOR components_ IN get_components(scorecard_) LOOP
 11.4918 +         index_:=index_+1;
 11.4919 +         component_arr_(index_):=components_.level_id;
 11.4920 +         OPEN check_component_selected (components_.level_id);
 11.4921 +         FETCH check_component_selected INTO temp_;
 11.4922 +         IF check_component_selected%FOUND THEN
 11.4923 +            sel_index_:=sel_index_+1;
 11.4924 +            sel_component_arr_(sel_index_):=components_.level_id;
 11.4925 +         END IF;
 11.4926 +         CLOSE check_component_selected;
 11.4927 +      END LOOP;
 11.4928 +
 11.4929 +      IF index_>0 THEN
 11.4930 +         parent_component_count_:=index_;
 11.4931 +         FOR child_scorecards_ IN get_child_scorecards LOOP
 11.4932 +            child_component_count_:=0;
 11.4933 +            FOR components_ IN get_components(child_scorecards_.scorecard) LOOP
 11.4934 +               component_exist_:=FALSE;
 11.4935 +               FOR index_ IN 1 .. parent_component_count_ LOOP
 11.4936 +                  IF component_arr_(index_)=components_.level_id THEN
 11.4937 +                     component_exist_:=TRUE;
 11.4938 +                     EXIT;
 11.4939 +                  END IF;
 11.4940 +               END LOOP;
 11.4941 +               IF NOT component_exist_ THEN
 11.4942 +                  Error_SYS.Appl_General(lu_name_,'SAMESTRUCT1: Child scorecard :P1 does not contain component :P2 .',child_scorecards_.scorecard,components_.level_id);
 11.4943 +               END IF;
 11.4944 +               child_component_count_:=child_component_count_+1;
 11.4945 +            END LOOP;
 11.4946 +            IF child_component_count_!=parent_component_count_ THEN
 11.4947 +               Error_SYS.Appl_General(lu_name_,'SAMESTRUCT2: Child scorecard :P1 does not contain the same structure as parent.',child_scorecards_.scorecard);
 11.4948 +            END IF;
 11.4949 +         END LOOP;
 11.4950 +      ELSE
 11.4951 +         Error_SYS.Appl_General(lu_name_,'NOCOMPSEL1: Selected scorecard does not contain any components.');
 11.4952 +      END IF;
 11.4953 +
 11.4954 +      IF sel_index_>0 THEN
 11.4955 +         FOR index_ IN 1..sel_index_ LOOP
 11.4956 +            Consolidate_Values(environment_,scorecard_,year_,version_,object_type_,period_count_,sel_component_arr_(index_));
 11.4957 +         END LOOP;
 11.4958 +         Calculate_Measures (environment_,scorecard_ ,year_,version_,measure_,period_count_);
 11.4959 +         -- Bug 76573 Removed the call to Set_To_Planned() since it is called inside Calculate_Measures() method
 11.4960 +      ELSE
 11.4961 +         Error_SYS.Appl_General(lu_name_,'NOCOMPSEL2: No components are selected for hierachical distribution.');
 11.4962 +      END IF;
 11.4963 +
 11.4964 +
 11.4965 +   ELSE
 11.4966 +
 11.4967 +      FOR scorecard_objects_ IN get_scorecard_objects LOOP   -- fetch the measures that are selected in planning page
 11.4968 +         Consolidate_Values(environment_,scorecard_,year_,version_,object_type_,period_count_,scorecard_objects_.scorecard_object);
 11.4969 +      END LOOP;
 11.4970 +
 11.4971 +   END IF;
 11.4972 +
 11.4973 +END Hierarchical_Consolidation;
 11.4974 +PROCEDURE Consolidate_Values (
 11.4975 +   environment_ IN VARCHAR2,
 11.4976 +   scorecard_ IN VARCHAR2,
 11.4977 +   year_ IN VARCHAR2,
 11.4978 +   version_ IN VARCHAR2,
 11.4979 +   object_type_ IN VARCHAR2,
 11.4980 +   period_count_ IN NUMBER,
 11.4981 +   scorecard_object_ IN VARCHAR2 )
 11.4982 +IS
 11.4983 +
 11.4984 +   year_value_                       NUMBER;
 11.4985 +   newrec_                           SCORECARD_INPUT_VALUE_TAB%ROWTYPE;
 11.4986 +   oldrec_                           SCORECARD_INPUT_VALUE_TAB%ROWTYPE;
 11.4987 +   objid_                            VARCHAR2(2000);
 11.4988 +   attr_                             VARCHAR2(2000);
 11.4989 +   objversion_                       VARCHAR2(2000);
 11.4990 +   child_count_                      NUMBER;
 11.4991 +   TYPE ValArrType                   IS TABLE OF NUMBER
 11.4992 +                                     INDEX BY BINARY_INTEGER;
 11.4993 +   period_val_arr_                   ValArrType;
 11.4994 +   temp_period_count_                NUMBER;
 11.4995 +   value_distribution_type_          VARCHAR2(20);
 11.4996 +   period_val_                       VARCHAR2(30);
 11.4997 +   child_scr_                        VARCHAR2(20);
 11.4998 +   temp_val_                         VARCHAR2(5);
 11.4999 +   temp_period_value_                NUMBER;
 11.5000 +
 11.5001 +
 11.5002 +   CURSOR get_child_scorecards IS        --- Move to scorecard
 11.5003 +      SELECT scorecard
 11.5004 +      FROM scorecard
 11.5005 +      WHERE parent=scorecard_
 11.5006 +      AND environment=environment_;
 11.5007 +
 11.5008 +   CURSOR get_open_child_scr IS
 11.5009 +      SELECT '1'
 11.5010 +      FROM scorecard
 11.5011 +      WHERE scorecard = child_scr_
 11.5012 +      AND environment=environment_
 11.5013 +      AND objstate NOT IN ('Open','Planned');
 11.5014 +
 11.5015 +
 11.5016 +   CURSOR get_total_period_val_ (period_value_  NUMBER) IS
 11.5017 +      SELECT SUM(DECODE(period_value_,1,p1_value,2,p2_value,3,p3_value,
 11.5018 +                                   4,p4_value,5,p5_value,6,p6_value,7,p7_value,
 11.5019 +                                   8,p8_value,9,p9_value,10,p10_value,11,p11_value,
 11.5020 +                                   12,p12_value))
 11.5021 +      FROM  scorecard_input_value_tab
 11.5022 +      WHERE environment= environment_
 11.5023 +      AND   scorecard IN (SELECT sc.scorecard
 11.5024 +                          FROM scorecard_tab sc
 11.5025 +                          WHERE sc.environment = environment_
 11.5026 +                          AND sc.parent = scorecard_
 11.5027 +                          AND (sc.scorecard IN (SELECT scorecard
 11.5028 +                                                FROM scorecard_user_access_tab
 11.5029 +                                                WHERE identity = (SELECT fnd_user
 11.5030 +                                                                  FROM   fnd_session)
 11.5031 +                                                AND environment=sc.environment
 11.5032 +                                                AND scorecard=sc.scorecard)
 11.5033 +                          OR sc.scorecard IN (SELECT scorecard
 11.5034 +                                           FROM scorecard_role_access_tab
 11.5035 +                                           WHERE environment=sc.environment
 11.5036 +                                           AND scorecard=sc.scorecard
 11.5037 +                                           AND role IN (SELECT oracle_role
 11.5038 +                                           FROM fnd_user_role_runtime
 11.5039 +                                           WHERE identity = (SELECT fnd_user
 11.5040 +                                                             FROM   fnd_session)))))
 11.5041 +      AND   year = year_
 11.5042 +      AND version = version_
 11.5043 +      AND scorecard_object = scorecard_object_
 11.5044 +      AND object_type_=object_type_;
 11.5045 +
 11.5046 +
 11.5047 +   CURSOR get_period_val_ (period_value_  NUMBER) IS
 11.5048 +      SELECT DECODE(period_value_,1,p1_value,2,p2_value,3,p3_value,
 11.5049 +                                   4,p4_value,5,p5_value,6,p6_value,7,p7_value,
 11.5050 +                                   8,p8_value,9,p9_value,10,p10_value,11,p1_value,
 11.5051 +                                   12,p12_value)
 11.5052 +      FROM  scorecard_input_value_tab
 11.5053 +      WHERE environment= environment_
 11.5054 +      AND   scorecard IN (SELECT sc.scorecard
 11.5055 +                          FROM scorecard_tab sc
 11.5056 +                          WHERE sc.environment = environment_
 11.5057 +                          AND sc.parent = scorecard_
 11.5058 +                          AND (sc.scorecard IN (SELECT scorecard
 11.5059 +                                                FROM scorecard_user_access_tab
 11.5060 +                                                WHERE identity = (SELECT fnd_user
 11.5061 +                                                                  FROM   fnd_session)
 11.5062 +                                                AND environment=sc.environment
 11.5063 +                                                AND scorecard=sc.scorecard)
 11.5064 +                          OR sc.scorecard IN (SELECT scorecard
 11.5065 +                                           FROM scorecard_role_access_tab
 11.5066 +                                           WHERE environment=sc.environment
 11.5067 +                                           AND scorecard=sc.scorecard
 11.5068 +                                           AND role IN (SELECT oracle_role
 11.5069 +                                           FROM fnd_user_role_runtime
 11.5070 +                                           WHERE identity = (SELECT fnd_user
 11.5071 +                                                             FROM   fnd_session)))))
 11.5072 +      AND   year = year_
 11.5073 +      AND version = version_
 11.5074 +      AND scorecard_object = scorecard_object_
 11.5075 +      AND object_type_=object_type_;
 11.5076 +
 11.5077 +BEGIN
 11.5078 +    General_SYS.Init_Method(lu_name_, '&PKG', 'Consolidate_Values');
 11.5079 +   year_value_ := 0;
 11.5080 +   --value_distribution_type_ := scorecard_Structure_api.Get_Value_Dist_Type_Db(scorecard_,scorecard_object_,environment_,object_type_);
 11.5081 +   value_distribution_type_ := measure_type_api.Encode(scorecard_Measure_api.Get_Measure_type(scorecard_object_));
 11.5082 +
 11.5083 +   IF value_distribution_type_ IS NULL THEN
 11.5084 +      IF object_type_='MEASURE' THEN
 11.5085 +         Error_SYS.Appl_General(lu_name_,'VALDIST1: Value distribution type must have a value for measure :P1 in parent scorecard :P2.',scorecard_object_,scorecard_);
 11.5086 +      ELSE
 11.5087 +         Error_SYS.Appl_General(lu_name_,'VALDIST2: Value distribution type must have a value for component :P1 in parent scorecard :P2.',scorecard_object_,scorecard_);
 11.5088 +      END IF;
 11.5089 +   END IF;
 11.5090 +
 11.5091 +
 11.5092 +   FOR child_scorecards_ IN get_child_scorecards LOOP  -- fetch the child scorecards
 11.5093 +
 11.5094 +      child_scr_ := child_scorecards_.scorecard;
 11.5095 +      OPEN get_open_child_scr;
 11.5096 +      FETCH get_open_child_scr INTO temp_val_;
 11.5097 +      CLOSE get_open_child_scr;
 11.5098 +
 11.5099 +      IF (temp_val_ = '1') THEN
 11.5100 +         Error_SYS.Appl_General(lu_name_,'TMPVAL: Not all scorecards in the hierarchy are opened for planning. Consolidation not possible.');
 11.5101 +      END IF;
 11.5102 +
 11.5103 +      IF NOT Check_Exist___(environment_,child_scorecards_.scorecard,year_,version_,scorecard_object_) THEN
 11.5104 +         Error_SYS.Appl_General(lu_name_,'INPVAL: Scorecard object :P1 does not exist in scorecard :P2.',scorecard_object_,child_scorecards_.scorecard);
 11.5105 +      END IF;
 11.5106 +
 11.5107 +   END LOOP;
 11.5108 +
 11.5109 +   FOR temp_period_count_ IN 1..period_count_ LOOP
 11.5110 +
 11.5111 +      OPEN get_period_val_(temp_period_count_);
 11.5112 +      LOOP
 11.5113 +            FETCH get_period_val_ INTO temp_period_value_;
 11.5114 +            EXIT WHEN get_period_val_%NOTFOUND;
 11.5115 +
 11.5116 +         IF (temp_period_value_ IS NULL) THEN
 11.5117 +            Error_SYS.Appl_General(lu_name_,'SCINPUTVALNO :  One of the child scorecard objects does not have values for the periods');
 11.5118 +         END IF;
 11.5119 +      END LOOP;
 11.5120 +      CLOSE get_period_val_;
 11.5121 +   END LOOP;
 11.5122 +
 11.5123 +
 11.5124 +   oldrec_:=Lock_By_Keys___(environment_,scorecard_,year_,version_,scorecard_object_);
 11.5125 +
 11.5126 +
 11.5127 +   period_val_arr_(1)  := oldrec_.p1_value;
 11.5128 +   period_val_arr_(2)  := oldrec_.p2_value;
 11.5129 +   period_val_arr_(3)  := oldrec_.p3_value;
 11.5130 +   period_val_arr_(4)  := oldrec_.p4_value;
 11.5131 +   period_val_arr_(5)  := oldrec_.p5_value;
 11.5132 +   period_val_arr_(6)  := oldrec_.p6_value;
 11.5133 +   period_val_arr_(7)  := oldrec_.p7_value;
 11.5134 +   period_val_arr_(8)  := oldrec_.p8_value;
 11.5135 +   period_val_arr_(9)  := oldrec_.p9_value;
 11.5136 +   period_val_arr_(10) := oldrec_.p10_value;
 11.5137 +   period_val_arr_(11) := oldrec_.p11_value;
 11.5138 +   period_val_arr_(12) := oldrec_.p12_value;
 11.5139 +
 11.5140 +   newrec_:=oldrec_;
 11.5141 +
 11.5142 +   IF (value_distribution_type_ = 'PERCENTAGE') THEN
 11.5143 +
 11.5144 +      child_count_:=Scorecard_API.Get_Child_Count(scorecard_,environment_);
 11.5145 +
 11.5146 +      FOR temp_period_count_ IN 1..period_count_ LOOP
 11.5147 +
 11.5148 +         OPEN get_total_period_val_ (temp_period_count_);
 11.5149 +         FETCH get_total_period_val_ INTO period_val_arr_(temp_period_count_);
 11.5150 +         period_val_arr_(temp_period_count_) := (period_val_arr_(temp_period_count_)/child_count_);
 11.5151 +         year_value_:=year_value_ +period_val_arr_(temp_period_count_);
 11.5152 +         CLOSE get_total_period_val_;
 11.5153 +
 11.5154 +      END LOOP;
 11.5155 +      year_value_:=year_value_ /period_count_;
 11.5156 +
 11.5157 +   ELSIF (value_distribution_type_ = 'VALUE') THEN
 11.5158 +
 11.5159 +      FOR temp_period_count_ IN 1..period_count_ LOOP
 11.5160 +
 11.5161 +         OPEN get_total_period_val_ (temp_period_count_);
 11.5162 +         FETCH get_total_period_val_ INTO period_val_arr_(temp_period_count_);
 11.5163 +         year_value_:=year_value_ +period_val_arr_(temp_period_count_);
 11.5164 +         CLOSE get_total_period_val_;
 11.5165 +
 11.5166 +      END LOOP;
 11.5167 +
 11.5168 +   END IF;
 11.5169 +
 11.5170 +   newrec_.year_value:=year_value_;
 11.5171 +   newrec_.p1_value :=period_val_arr_(1);
 11.5172 +   newrec_.p2_value :=period_val_arr_(2);
 11.5173 +   newrec_.p3_value :=period_val_arr_(3);
 11.5174 +   newrec_.p4_value :=period_val_arr_(4);
 11.5175 +   newrec_.p5_value :=period_val_arr_(5);
 11.5176 +   newrec_.p6_value :=period_val_arr_(6);
 11.5177 +   newrec_.p7_value :=period_val_arr_(7);
 11.5178 +   newrec_.p8_value :=period_val_arr_(8);
 11.5179 +   newrec_.p9_value :=period_val_arr_(9);
 11.5180 +   newrec_.p10_value:=period_val_arr_(10);
 11.5181 +   newrec_.p11_value:=period_val_arr_(11);
 11.5182 +   newrec_.p12_value:=period_val_arr_(12);
 11.5183 +
 11.5184 +   Update___(objid_,oldrec_,newrec_,attr_,objversion_,TRUE);
 11.5185 +   Scorecard_api.Set_To_Planned(environment_,scorecard_);
 11.5186 +   Scorecard_Input_Value_api.Set_To_Planned(environment_,scorecard_,year_,version_,scorecard_object_);
 11.5187 +END Consolidate_Values;
 11.5188 +PROCEDURE All_Hierarchical_Logic (
 11.5189 +   environment_ IN VARCHAR2,
 11.5190 +   scorecard_ IN VARCHAR2,
 11.5191 +   year_ IN VARCHAR2,
 11.5192 +   version_ IN VARCHAR2,
 11.5193 +   action_ IN VARCHAR2 )
 11.5194 +IS
 11.5195 +   comp_level_             VARCHAR2(5);
 11.5196 +   period_count_           NUMBER;
 11.5197 +   measures_               VARCHAR2(10);
 11.5198 +   scorecard_object_       VARCHAR2(10);
 11.5199 +   newrec_                 SCORECARD_INPUT_VALUE_TAB%ROWTYPE;
 11.5200 +   oldrec_                 SCORECARD_INPUT_VALUE_TAB%ROWTYPE;
 11.5201 +   attr_                   VARCHAR2(2000);
 11.5202 +   objid_                  VARCHAR2(2000);
 11.5203 +   objversion_             VARCHAR2(2000);
 11.5204 +   get_childs_             VARCHAR2(10);
 11.5205 +   child_exists_           VARCHAR2(10);
 11.5206 +
 11.5207 +
 11.5208 +   CURSOR get_scorecard_objects(scorecard_ VARCHAR2) IS
 11.5209 +      SELECT scorecard_object
 11.5210 +      FROM scorecard_input_value_tab
 11.5211 +      WHERE environment = environment_
 11.5212 +      AND scorecard = scorecard_
 11.5213 +      AND year = year_
 11.5214 +      AND version = version_;
 11.5215 +
 11.5216 +   CURSOR get_period_count IS
 11.5217 +     SELECT count(1)
 11.5218 +     FROM scorecard_period_tab
 11.5219 +     WHERE environment = environment_
 11.5220 +     AND year = year_;
 11.5221 +
 11.5222 +   CURSOR get_scorecard_measures(scorecard_ VARCHAR2) IS
 11.5223 +      SELECT level_id
 11.5224 +      FROM scorecard_structure_tab
 11.5225 +      WHERE environment = environment_
 11.5226 +      AND scorecard = scorecard_
 11.5227 +      AND child_level_type = 'MEASURE';
 11.5228 +
 11.5229 +   CURSOR get_childs IS
 11.5230 +      SELECT scorecard
 11.5231 +      FROM scorecard
 11.5232 +      WHERE environment = environment_
 11.5233 +      AND parent = scorecard_
 11.5234 +      AND objstate IN ('Open','Planned');
 11.5235 +
 11.5236 +   CURSOR get_childs_for_cons IS
 11.5237 +      SELECT scorecard
 11.5238 +      FROM   scorecard
 11.5239 +      WHERE  environment = environment_
 11.5240 +      START WITH parent = scorecard_
 11.5241 +      CONNECT BY parent = PRIOR scorecard
 11.5242 +      AND   environment = PRIOR environment
 11.5243 +      AND objstate IN ('Open','Planned')
 11.5244 +      ORDER BY level_sequence desc;
 11.5245 +
 11.5246 +BEGIN
 11.5247 +   General_SYS.Init_Method(lu_name_, '&PKG', 'All_Hierarchical_Logic');
 11.5248 +   child_exists_ := 'TRUE';
 11.5249 +   OPEN get_childs;
 11.5250 +   FETCH get_childs INTO get_childs_;
 11.5251 +   IF (get_childs%NOTFOUND) THEN
 11.5252 +      CLOSE get_childs;
 11.5253 +      child_exists_ := 'FALSE';
 11.5254 +   ELSE
 11.5255 +      CLOSE get_childs;
 11.5256 +   END IF;
 11.5257 +
 11.5258 +   IF (child_exists_ = 'TRUE') THEN
 11.5259 +
 11.5260 +      FOR get_scorecard_objects_ IN get_scorecard_objects(scorecard_) LOOP
 11.5261 +        scorecard_object_ := get_scorecard_objects_.scorecard_object;
 11.5262 +        oldrec_:=Lock_By_Keys___(environment_,scorecard_,year_,version_,scorecard_object_);
 11.5263 +        newrec_:=oldrec_;
 11.5264 +        newrec_.action:='TRUE';
 11.5265 +        Update___(objid_,oldrec_,newrec_,attr_,objversion_,TRUE);
 11.5266 +      END LOOP;
 11.5267 +
 11.5268 +      measures_ := null;
 11.5269 +      comp_level_ := scorecard_environment_api.Get_Component_Level(environment_ );
 11.5270 +
 11.5271 +      OPEN get_period_count;
 11.5272 +      FETCH get_period_count INTO period_count_;
 11.5273 +      CLOSE get_period_count;
 11.5274 +
 11.5275 +      IF (action_ = 'DISTRIBUTION') THEN
 11.5276 +         IF (comp_level_ = 'TRUE') THEN
 11.5277 +            FOR get_scorecard_measures_ IN get_scorecard_measures(scorecard_) LOOP
 11.5278 +                measures_ := get_scorecard_measures_.level_id;
 11.5279 +                Hierachical_Distribution(environment_,scorecard_,year_,version_ ,'COMPONENT',period_count_,measures_);
 11.5280 +            END LOOP;
 11.5281 +         ELSE
 11.5282 +            Hierachical_Distribution(environment_,scorecard_,year_,version_ ,'MEASURE',period_count_,measures_);
 11.5283 +         END IF;
 11.5284 +         FOR get_childs_ IN get_childs LOOP
 11.5285 +            All_Hierarchical_Logic(environment_,get_childs_.scorecard,year_,version_ ,action_);
 11.5286 +         END LOOP;
 11.5287 +
 11.5288 +      ELSIF (action_ = 'CONSOLIDATION') THEN
 11.5289 +         FOR get_childs_for_cons_ IN  get_childs_for_cons LOOP
 11.5290 +            FOR get_scorecard_objects_ IN get_scorecard_objects(get_childs_for_cons_.scorecard) LOOP
 11.5291 +                scorecard_object_ := get_scorecard_objects_.scorecard_object;
 11.5292 +                oldrec_:=Lock_By_Keys___(environment_,get_childs_for_cons_.scorecard,year_,version_,scorecard_object_);
 11.5293 +                newrec_:=oldrec_;
 11.5294 +                newrec_.action:='TRUE';
 11.5295 +                Update___(objid_,oldrec_,newrec_,attr_,objversion_,TRUE);
 11.5296 +            END LOOP;
 11.5297 +            IF (Scorecard_API.Get_Child_Count(get_childs_for_cons_.scorecard,environment_) >=1) THEN
 11.5298 +               IF (comp_level_ = 'TRUE') THEN
 11.5299 +                  FOR get_scorecard_measures_ IN get_scorecard_measures(get_childs_for_cons_.scorecard) LOOP
 11.5300 +                     measures_ := get_scorecard_measures_.level_id;
 11.5301 +                     Hierarchical_Consolidation(environment_,get_childs_for_cons_.scorecard,year_,version_ ,'COMPONENT',period_count_,measures_);
 11.5302 +                  END LOOP;
 11.5303 +               ELSE
 11.5304 +                  Hierarchical_Consolidation(environment_,get_childs_for_cons_.scorecard,year_,version_ ,'MEASURE',period_count_,measures_);
 11.5305 +               END IF;
 11.5306 +            END IF;
 11.5307 +         END LOOP;
 11.5308 +         -- for the selected scorecard
 11.5309 +         IF (Scorecard_API.Get_Child_Count(scorecard_,environment_) >=1) THEN
 11.5310 +            IF (comp_level_ = 'TRUE') THEN
 11.5311 +               FOR get_scorecard_measures_ IN get_scorecard_measures(scorecard_) LOOP
 11.5312 +                  measures_ := get_scorecard_measures_.level_id;
 11.5313 +                  Hierarchical_Consolidation(environment_,scorecard_,year_,version_ ,'COMPONENT',period_count_,measures_);
 11.5314 +               END LOOP;
 11.5315 +            ELSE
 11.5316 +               Hierarchical_Consolidation(environment_,scorecard_,year_,version_ ,'MEASURE',period_count_,measures_);
 11.5317 +            END IF;
 11.5318 +         END IF;
 11.5319 +      END IF;
 11.5320 +   END IF;
 11.5321 +END All_Hierarchical_Logic;
 11.5322 +PROCEDURE Call_Hierarchical_Logic (
 11.5323 +   attr_ IN VARCHAR2 )
 11.5324 +IS
 11.5325 +   environment_          Scorecard_Environment_Tab.environment%TYPE;
 11.5326 +   scorecard_            Scorecard_Tab.scorecard%TYPE;
 11.5327 +   year_                 VARCHAR2(20);
 11.5328 +   version_              VARCHAR2(20);
 11.5329 +   action_               VARCHAR2(30);
 11.5330 +BEGIN
 11.5331 +   General_SYS.Init_Method(lu_name_, '&PKG', 'Call_Hierarchical_Logic');
 11.5332 +   environment_         := Client_SYS.Get_Item_Value('ENVIRONMENT'       ,attr_);
 11.5333 +   scorecard_           := Client_SYS.Get_Item_Value('SCORECARD'         ,attr_);
 11.5334 +   year_                := Client_SYS.Get_Item_Value('YEAR'              ,attr_);
 11.5335 +   version_             := Client_SYS.Get_Item_Value('VERSION'           ,attr_);
 11.5336 +   action_              := Client_SYS.Get_Item_Value('ACTION'            ,attr_);
 11.5337 +   Scorecard_Input_Value_API.All_Hierarchical_Logic(environment_,scorecard_,year_,version_,action_);
 11.5338 +END Call_Hierarchical_Logic;
 11.5339 +PROCEDURE Start_Hierarchical_Logic (
 11.5340 +   attr_ IN VARCHAR2 )
 11.5341 +IS
 11.5342 +   new_attr_  VARCHAR2(2000) := attr_;
 11.5343 +   desc_         VARCHAR2(2000);
 11.5344 +BEGIN
 11.5345 +   General_SYS.Init_Method(lu_name_, '&PKG', 'Start_Hierarchical_Logic');
 11.5346 +   desc_ := Language_SYS.Translate_Constant (lu_name_, 'BGJOB_HR_LOGIC:Update Scorecard objects in the scorecard input value according to the hierarchical logic.');
 11.5347 +   Transaction_SYS.Deferred_Call ('Scorecard_Input_Value_API.Call_Hierarchical_Logic',new_attr_, desc_);
 11.5348 +END Start_Hierarchical_Logic;
 11.5349 +PROCEDURE Background_Hierarchical_Logic (
 11.5350 +   environment_ IN VARCHAR2,
 11.5351 +   scorecard_ IN VARCHAR2,
 11.5352 +   year_ IN VARCHAR2,
 11.5353 +   version_ IN VARCHAR2,
 11.5354 +   action_ IN VARCHAR2,
 11.5355 +   execution_plan_ IN VARCHAR2 )
 11.5356 +IS
 11.5357 +   job_id_             NUMBER;
 11.5358 +   method_             VARCHAR2(2000);
 11.5359 +   attr_               VARCHAR2(2000);
 11.5360 +BEGIN
 11.5361 +   General_SYS.Init_Method(lu_name_, 'Scorecard_Input_Value_API','Background_Hierarchical_Logic');
 11.5362 +   Client_SYS.Clear_Attr(attr_);
 11.5363 +   Client_SYS.Add_To_Attr('ENVIRONMENT',environment_,attr_);
 11.5364 +   Client_SYS.Add_To_Attr('SCORECARD',scorecard_ ,attr_);
 11.5365 +   Client_SYS.Add_To_Attr('YEAR',year_ ,attr_);
 11.5366 +   Client_SYS.Add_To_Attr('VERSION',version_ ,attr_);
 11.5367 +   Client_SYS.Add_To_Attr('ACTION',action_ ,attr_);
 11.5368 +   method_:='Scorecard_Input_Value_API.Start_Hierarchical_Logic_('''''||attr_||''''')';
 11.5369 +   IF (execution_plan_ != 'NOW') THEN
 11.5370 +      Batch_SYS.New_Job(job_id_,method_,execution_plan_);
 11.5371 +   ELSE
 11.5372 +      Start_Hierarchical_Logic(attr_);
 11.5373 +   END IF;
 11.5374 +END Background_Hierarchical_Logic;
 11.5375 +PROCEDURE Set_To_Planned (
 11.5376 +   environment_ IN VARCHAR2,
 11.5377 +   scorecard_ IN VARCHAR2,
 11.5378 +   year_ IN VARCHAR2,
 11.5379 +   version_ IN VARCHAR2,
 11.5380 +   scorecard_object_ IN VARCHAR2 )
 11.5381 +IS
 11.5382 +  rec_    SCORECARD_INPUT_VALUE%ROWTYPE;
 11.5383 +  rec2_   SCORECARD_INPUT_VALUE_TAB%ROWTYPE;
 11.5384 +  attr_   VARCHAR2(2000);
 11.5385 +  info_   VARCHAR2(32000);
 11.5386 +  objver_ VARCHAR2(2000);
 11.5387 +  CURSOR get_attr IS
 11.5388 +     SELECT *
 11.5389 +     FROM SCORECARD_INPUT_VALUE
 11.5390 +     WHERE environment=environment_
 11.5391 +     AND   scorecard=scorecard_
 11.5392 +     AND   year=year_
 11.5393 +     AND   version=version_
 11.5394 +     AND   scorecard_object=scorecard_object_;
 11.5395 +BEGIN
 11.5396 +   General_SYS.Init_Method(lu_name_, 'SCORECARD_INPUT_VALUE_API', 'Set_To_Planned');
 11.5397 +   OPEN get_attr;
 11.5398 +   FETCH get_attr INTO rec_;
 11.5399 +   CLOSE get_attr;
 11.5400 +   Client_SYS.Clear_Attr(attr_);
 11.5401 +   Client_SYS.Add_To_Attr ('OBJID', rec_.objid, attr_);
 11.5402 +   Client_SYS.Add_To_Attr ('OBJVERSION', rec_.objversion, attr_);
 11.5403 +   --rec2_:=Lock_By_Keys___(environment_,scorecard_,year_,version_,scorecard_object_);
 11.5404 +   --objver_:= to_char(rec2_.rowversion,'YYYYMMDDHH24MISS');
 11.5405 +   --Plan__(info_,rec_.objid,objver_,attr_,'DO');
 11.5406 +   Plan__(info_,rec_.objid,rec_.objversion,attr_,'DO');
 11.5407 +   Client_SYS.Clear_Attr(attr_);
 11.5408 +END Set_To_Planned;
 11.5409 +FUNCTION Get_Sco_Obj_State_Date (
 11.5410 +   environment_ IN VARCHAR2,
 11.5411 +   scorecard_ IN VARCHAR2,
 11.5412 +   measure_ IN VARCHAR2 ) RETURN DATE
 11.5413 +IS
 11.5414 +   temp_ &TABLE..mea_state_change_date%TYPE;
 11.5415 +   CURSOR get_attr IS
 11.5416 +      SELECT max(mea_state_change_date)
 11.5417 +      FROM &TABLE
 11.5418 +      WHERE environment = environment_
 11.5419 +      AND   scorecard = scorecard_
 11.5420 +      AND   scorecard_object = measure_;
 11.5421 +BEGIN
 11.5422 +   OPEN get_attr;
 11.5423 +   FETCH get_attr INTO temp_;
 11.5424 +   CLOSE get_attr;
 11.5425 +   RETURN temp_;
 11.5426 +END Get_Sco_Obj_State_Date;
 11.5427 +PROCEDURE Budget_And_Calculate (
 11.5428 +   components_not_used_ OUT VARCHAR2,
 11.5429 +   company_ IN VARCHAR2,
 11.5430 +   environment_ IN VARCHAR2,
 11.5431 +   scorecard_ IN VARCHAR2,
 11.5432 +   year_ IN VARCHAR2,
 11.5433 +   measure_ IN VARCHAR2,
 11.5434 +   version_ IN VARCHAR2,
 11.5435 +   budget_version_ IN VARCHAR2,
 11.5436 +   component_list_ IN VARCHAR2 )
 11.5437 +IS
 11.5438 +
 11.5439 +   TYPE RefCurTyp IS        REF CURSOR;
 11.5440 +   scorecard_input_rec_     RefCurTyp;
 11.5441 +   budget_period_rec_       RefCurTyp;
 11.5442 +   source_stmt_             VARCHAR2(2000);
 11.5443 +   code_part_str_           VARCHAR2(50);
 11.5444 +   code_part_values_        VARCHAR2(2000);
 11.5445 +   account_list_            VARCHAR2(2000);
 11.5446 +   component_rec_           SCORECARD_MEASURE_TAB%ROWTYPE;
 11.5447 +   period_val_              SCORECARD_PERIOD_TAB.PERIOD_MATCH_IDENTITY%TYPE;
 11.5448 +   temp_input_val_rec_      SCORECARD_INPUT_VALUE_TAB%ROWTYPE;
 11.5449 +   code_part_value_         VARCHAR2(20);
 11.5450 +   scr_code_part_           VARCHAR2(20);
 11.5451 +   in_values_               VARCHAR2(2000);
 11.5452 +   input_value_tab_stmt_    VARCHAR2(2000);
 11.5453 +   table_name_              VARCHAR2(50);
 11.5454 +   aggregated_value_        NUMBER;
 11.5455 +   budget_year_             NUMBER;
 11.5456 +   new_account_list_        VARCHAR2(2000);
 11.5457 +   replace_from_            VARCHAR2(1) ;
 11.5458 +   replace_with_            VARCHAR2(4);
 11.5459 +   count_period_            NUMBER;
 11.5460 +   TYPE PeriodMatchType     IS TABLE OF NUMBER
 11.5461 +                         INDEX BY BINARY_INTEGER;
 11.5462 +   per_match_identity_type_ PeriodMatchType;
 11.5463 +   newrec_                  SCORECARD_INPUT_VALUE_TAB%ROWTYPE;
 11.5464 +   oldrec_                  SCORECARD_INPUT_VALUE_TAB%ROWTYPE;
 11.5465 +   objid_                   VARCHAR2(2000);
 11.5466 +   attr_                    VARCHAR2(2000);
 11.5467 +   objversion_              VARCHAR2(2000);
 11.5468 +   is_visited_              BOOLEAN:=false;
 11.5469 +   field_separator_         CONSTANT VARCHAR2(1)  := chr(31);
 11.5470 +   i                        NUMBER;
 11.5471 +   count_                   NUMBER;
 11.5472 +   mea_type_                VARCHAR2(20);
 11.5473 +   total_value_             NUMBER;
 11.5474 +   avg_value_               NUMBER;
 11.5475 +
 11.5476 +CURSOR get_comp_details (comp_ VARCHAR2) IS
 11.5477 +   SELECT * FROM  SCORECARD_MEASURE_TAB
 11.5478 +   WHERE measure = comp_;
 11.5479 +
 11.5480 +CURSOR get_period_details IS
 11.5481 +   SELECT period_match_identity FROM  SCORECARD_PERIOD_TAB
 11.5482 +   WHERE Environment = environment_
 11.5483 +   AND   YEAR        = year_
 11.5484 +   ORDER BY end_date;
 11.5485 +
 11.5486 +CURSOR get_code_part IS
 11.5487 +   SELECT scorecard_code_part FROM SCORECARD_ENVIRONMENT_TAB
 11.5488 +   WHERE environment = environment_;
 11.5489 +
 11.5490 +
 11.5491 +BEGIN
 11.5492 +      General_SYS.Init_Method(lu_name_, 'Scorecard_Input_Value_API','Budget_And_Calculate');
 11.5493 +      replace_from_:=',';
 11.5494 +      replace_with_:=''',''';
 11.5495 +      count_period_ :=1;
 11.5496 +
 11.5497 +      in_values_:=Replace(component_list_,'^','''');
 11.5498 +
 11.5499 +      table_name_ :='SCORECARD_INPUT_VALUE_TAB';
 11.5500 +      input_value_tab_stmt_ :=  ' SELECT * FROM  ' || table_name_ ||
 11.5501 +                                ' WHERE  environment ='|| '''' ||environment_ || '''' ||
 11.5502 +                                ' AND    scorecard ='  ||'''' ||scorecard_   ||  '''' ||
 11.5503 +                                ' AND    year ='       ||'''' ||year_       || '''' ||
 11.5504 +                                ' AND    version ='    ||'''' || version_    || '''' ||
 11.5505 +                                ' AND    scorecard_object in (' || in_values_ || ')';
 11.5506 +
 11.5507 +      OPEN get_code_part;
 11.5508 +         FETCH get_code_part INTO scr_code_part_;
 11.5509 +      CLOSE get_code_part;
 11.5510 +
 11.5511 +      IF NOT scr_code_part_ IS NULL THEN
 11.5512 +         code_part_values_ := scorecard_attribute_api.Get_Value(environment_,scorecard_,'CODE_PART_VALUE');
 11.5513 +         code_part_values_:=Replace(code_part_values_,replace_from_,replace_with_);
 11.5514 +         code_part_str_ :=' AND CODE_' || scr_code_part_ || ' IN ( ' || '''' || code_part_values_ || '''' ||' )';
 11.5515 +      ELSE
 11.5516 +          code_part_str_ :='';
 11.5517 +      END IF;
 11.5518 +
 11.5519 +      -- since table_name_ is hardcoded we can set asserted
 11.5520 +      -- ifs_assert_safe shsalk 20060117
 11.5521 +      open scorecard_input_rec_ for input_value_tab_stmt_;
 11.5522 +
 11.5523 +      OPEN get_period_details;
 11.5524 +      LOOP
 11.5525 +         FETCH get_period_details INTO period_val_;
 11.5526 +         EXIT WHEN get_period_details%NOTFOUND;
 11.5527 +         per_match_identity_type_(count_period_):=period_val_;
 11.5528 +         count_period_ :=count_period_+1;
 11.5529 +      END LOOP;
 11.5530 +
 11.5531 +      CLOSE get_period_details;
 11.5532 +
 11.5533 +      count_:= count_period_ - 1 ;
 11.5534 +
 11.5535 +      LOOP
 11.5536 +         source_stmt_ :='SELECT ';
 11.5537 +
 11.5538 +         FETCH scorecard_input_rec_ INTO temp_input_val_rec_;
 11.5539 +         EXIT WHEN scorecard_input_rec_%NOTFOUND;
 11.5540 +
 11.5541 +         OPEN get_comp_details(temp_input_val_rec_.scorecard_object);
 11.5542 +           FETCH get_comp_details INTO component_rec_;
 11.5543 +         CLOSE get_comp_details;
 11.5544 +
 11.5545 +         -- check amount type
 11.5546 +         --'AMTBAL^CURBAL^QTYBAL^PROJBAL^PROJQTY^PRJCURBAL^';
 11.5547 +         IF component_rec_.amount_type = 'AMTBAL' THEN
 11.5548 +            source_stmt_ := source_stmt_ || 'SUM(DECODE(LOGICAL_ACCOUNT_TYPE,' || '''' ||'L' || '''' ||',' || '-AMOUNT' || ',' || '''' || 'R' || '''' ||  ',' ||'-AMOUNT' || ',' || 'AMOUNT'|| '))' || ',YEAR_PERIOD_KEY ';
 11.5549 +         ELSIF component_rec_.amount_type = 'CURBAL' THEN
 11.5550 +            source_stmt_ := source_stmt_ || 'SUM(DECODE(LOGICAL_ACCOUNT_TYPE,' || '''' ||'L' || '''' ||',' || '-THIRD_CURRENCY_AMOUNT' || ',' || '''' || 'R' || '''' ||  ',' ||'-THIRD_CURRENCY_AMOUNT' || ',' || 'THIRD_CURRENCY_AMOUNT'|| '))' || ',YEAR_PERIOD_KEY ';
 11.5551 +         ELSIF component_rec_.amount_type = 'QTYBAL' THEN
 11.5552 +            source_stmt_ := source_stmt_ || 'SUM(DECODE(LOGICAL_ACCOUNT_TYPE,' || '''' ||'L' || '''' ||',' || '-QUANTITY' || ',' || '''' || 'R' || '''' ||  ',' ||'-QUANTITY' || ',' || 'QUANTITY'|| '))' || ',YEAR_PERIOD_KEY ';
 11.5553 +         ELSIF component_rec_.amount_type = 'PROJBAL' THEN
 11.5554 +            source_stmt_ := source_stmt_ || 'SUM(DECODE(LOGICAL_ACCOUNT_TYPE,' || '''' ||'L' || '''' ||',' || '-AMOUNT' || ',' || '''' || 'R' || '''' ||  ',' ||'-AMOUNT' || ',' || 'AMOUNT'|| '))' || ',YEAR_PERIOD_KEY ';
 11.5555 +         ELSIF component_rec_.amount_type = 'PRJCURBAL' THEN
 11.5556 +            source_stmt_ := source_stmt_ || 'SUM(DECODE(LOGICAL_ACCOUNT_TYPE,' || '''' ||'L' || '''' ||',' || '-THIRD_CURRENCY_AMOUNT' || ',' || '''' || 'R' || '''' ||  ',' ||'-THIRD_CURRENCY_AMOUNT' || ',' || 'THIRD_CURRENCY_AMOUNT'|| '))' || ',YEAR_PERIOD_KEY ';
 11.5557 +         ELSIF component_rec_.amount_type = 'PROJQTY' THEN
 11.5558 +            source_stmt_ := source_stmt_ || 'SUM(DECODE(LOGICAL_ACCOUNT_TYPE,' || '''' ||'L' || '''' ||',' || '-QUANTITY' || ',' || '''' || 'R' || '''' ||  ',' ||'-QUANTITY' || ',' || 'QUANTITY'|| '))' || ',YEAR_PERIOD_KEY ';
 11.5559 +         END IF;
 11.5560 +
 11.5561 +         source_stmt_ :=source_stmt_ || ' FROM budget_period_amount_pub
 11.5562 +                        WHERE COMPANY=:c_company
 11.5563 +                        AND BUDGET_VERSION=:b_budget_Version
 11.5564 +                        AND BUDGET_YEAR=:b_budget_year';
 11.5565 +
 11.5566 +         source_stmt_ := source_stmt_ || code_part_str_ ;
 11.5567 +
 11.5568 +
 11.5569 +         -- Add ledger Id
 11.5570 +          source_stmt_ := source_stmt_ || ' AND LEDGER_ID=:l_ledger_id ' ;
 11.5571 +
 11.5572 +         -- Add account list
 11.5573 +         account_list_:=bp_measure_accounts_api.Get_Measure_Accounts(temp_input_val_rec_.scorecard_object);
 11.5574 +         IF NOT account_list_ IS null THEN
 11.5575 +            new_account_list_ := '''' || Replace(account_list_,replace_from_,replace_with_) || '''' ;
 11.5576 +            source_stmt_ := source_stmt_ || ' AND ACCOUNT IN ( ' || new_account_list_ || ')  ' ;
 11.5577 +         END IF;
 11.5578 +
 11.5579 +         -- check amount type
 11.5580 +         IF component_rec_.amount_type = 'PROJBAL'  OR component_rec_.amount_type = 'PROJQTY' OR component_rec_.amount_type ='PRJCURBAL' THEN
 11.5581 +            source_stmt_ := source_stmt_ || 'AND Project_Id IS NOT NULL';
 11.5582 +         END IF;
 11.5583 +         source_stmt_ := source_stmt_ || 'GROUP BY  year_period_key';
 11.5584 +
 11.5585 +         oldrec_:=scorecard_input_value_api.Lock_By_Keys___(environment_,scorecard_,year_,version_,temp_input_val_rec_.scorecard_object);
 11.5586 +         newrec_:=oldrec_;
 11.5587 +
 11.5588 +         -- Initialize field values
 11.5589 +
 11.5590 +         newrec_.p1_value  :=NULL;
 11.5591 +         newrec_.p2_value  :=NULL;
 11.5592 +         newrec_.p3_value  :=NULL;
 11.5593 +         newrec_.p4_value  :=NULL;
 11.5594 +         newrec_.p4_value  :=NULL;
 11.5595 +         newrec_.p5_value  :=NULL;
 11.5596 +         newrec_.p6_value  :=NULL;
 11.5597 +         newrec_.p7_value  :=NULL;
 11.5598 +         newrec_.p8_value  :=NULL;
 11.5599 +         newrec_.p9_value  :=NULL;
 11.5600 +         newrec_.p10_value :=NULL;
 11.5601 +         newrec_.p11_value :=NULL;
 11.5602 +         newrec_.p12_value :=NULL;
 11.5603 +
 11.5604 +         -- ifs_assert_safe shsalk 20060117
 11.5605 +         OPEN budget_period_rec_ FOR source_stmt_ USING company_,budget_version_,year_,component_rec_.ledger_id;
 11.5606 +         count_period_ :=1;
 11.5607 +         is_visited_:=false;
 11.5608 +         LOOP
 11.5609 +            FETCH budget_period_rec_ INTO aggregated_value_,budget_year_;
 11.5610 +               EXIT WHEN budget_period_rec_%NOTFOUND;
 11.5611 +
 11.5612 +            FOR i IN 1..count_ LOOP
 11.5613 +                IF budget_year_ = per_match_identity_type_(i) THEN
 11.5614 +                   count_period_:=i;
 11.5615 +                   EXIT;
 11.5616 +                END IF;
 11.5617 +            END LOOP;
 11.5618 +
 11.5619 +            CASE count_period_
 11.5620 +                   WHEN 1  THEN newrec_.p1_value :=aggregated_value_;
 11.5621 +                   WHEN 2  THEN newrec_.p2_value :=aggregated_value_;
 11.5622 +                   WHEN 3  THEN newrec_.p3_value :=aggregated_value_;
 11.5623 +                   WHEN 4  THEN newrec_.p4_value :=aggregated_value_;
 11.5624 +                   WHEN 5  THEN newrec_.p5_value :=aggregated_value_;
 11.5625 +                   WHEN 6  THEN newrec_.p6_value :=aggregated_value_;
 11.5626 +                   WHEN 7  THEN newrec_.p7_value :=aggregated_value_;
 11.5627 +                   WHEN 8  THEN newrec_.p8_value :=aggregated_value_;
 11.5628 +                   WHEN 9  THEN newrec_.p9_value :=aggregated_value_;
 11.5629 +                   WHEN 10 THEN newrec_.p10_value:=aggregated_value_;
 11.5630 +                   WHEN 11 THEN newrec_.p11_value:=aggregated_value_;
 11.5631 +                   WHEN 12 THEN newrec_.p12_value:=aggregated_value_;
 11.5632 +                   ELSE Error_SYS.Appl_General(lu_name_,'SCOINPUTVALLOADMES22: Invaild no of periods');
 11.5633 +            END CASE;
 11.5634 +
 11.5635 +            is_visited_:=true;
 11.5636 +
 11.5637 +         END LOOP;
 11.5638 +         CLOSE budget_period_rec_;
 11.5639 +
 11.5640 +         IF NOT is_visited_ THEN
 11.5641 +            components_not_used_:=components_not_used_|| scorecard_measure_api.Get_Description(temp_input_val_rec_.scorecard_object) || field_separator_;
 11.5642 +         END IF;
 11.5643 +
 11.5644 +         newrec_.budget_version:=budget_version_;
 11.5645 +
 11.5646 +         newrec_.p1_value :=NVL(newrec_.p1_value,0);
 11.5647 +         newrec_.p2_value :=NVL(newrec_.p2_value,0);
 11.5648 +         newrec_.p3_value :=NVL(newrec_.p3_value,0);
 11.5649 +         newrec_.p4_value :=NVL(newrec_.p4_value,0);
 11.5650 +         newrec_.p5_value :=NVL(newrec_.p5_value,0);
 11.5651 +         newrec_.p6_value :=NVL(newrec_.p6_value,0);
 11.5652 +         newrec_.p7_value :=NVL(newrec_.p7_value,0);
 11.5653 +         newrec_.p8_value :=NVL(newrec_.p8_value,0);
 11.5654 +         newrec_.p9_value :=NVL(newrec_.p9_value,0);
 11.5655 +         newrec_.p10_value:=NVL(newrec_.p10_value,0);
 11.5656 +         newrec_.p11_value:=NVL(newrec_.p11_value,0);
 11.5657 +         newrec_.p12_value:=NVL(newrec_.p12_value,0);
 11.5658 +
 11.5659 +         mea_type_ := scorecard_Measure_api.Get_Measure_Type_Db(temp_input_val_rec_.scorecard_object);
 11.5660 +         total_value_ := newrec_.p1_value+newrec_.p2_value+newrec_.p3_value+newrec_.p4_value+newrec_.p5_value+newrec_.p6_value+newrec_.p7_value+newrec_.p8_value+newrec_.p9_value+newrec_.p10_value+newrec_.p11_value+newrec_.p12_value;
 11.5661 +         IF mea_type_ = 'PERCENTAGE' THEN
 11.5662 +            avg_value_ := total_value_/count_;
 11.5663 +            newrec_.year_value := avg_value_;
 11.5664 +         ELSIF mea_type_ = 'VALUE' THEN
 11.5665 +            newrec_.year_value := total_value_;
 11.5666 +         END IF;
 11.5667 +         scorecard_input_value_api.Update___(objid_,oldrec_,newrec_,attr_,objversion_,TRUE);
 11.5668 +      END LOOP;
 11.5669 +      close scorecard_input_rec_;
 11.5670 +      scorecard_input_value_api.Calculate_Measures (environment_,scorecard_ ,year_,version_,measure_,12);
 11.5671 +END Budget_And_Calculate;
 11.5672 +
 11.5673 +PROCEDURE Get_Error_Msg_For_Comp (
 11.5674 +   plan_formula_ IN OUT VARCHAR2,
 11.5675 +   check_value_ IN VARCHAR2 )
 11.5676 +IS
 11.5677 +  invalid_comp_ NUMBER;
 11.5678 +BEGIN
 11.5679 +   General_SYS.Init_Method(lu_name_, '&PKG', 'Get_Error_Msg_For_Comp');
 11.5680 +   IF (check_value_ = 'TRUE') THEN
 11.5681 +      plan_formula_ := 'NULL';
 11.5682 +   ELSE
 11.5683 +      invalid_comp_ := INSTR(plan_formula_,'COMP', 1, 1);
 11.5684 +      IF invalid_comp_ <> 0 THEN
 11.5685 +         Error_SYS.Appl_General(lu_name_,'INPVALCOMPNFND: A component in Calculation formula is not found ');
 11.5686 +      END IF;
 11.5687 +   END IF;
 11.5688 +END Get_Error_Msg_For_Comp;
 11.5689 +PROCEDURE Return_Periods (
 11.5690 +   period1_ OUT VARCHAR2,
 11.5691 +   period2_ OUT VARCHAR2,
 11.5692 +   period3_ OUT VARCHAR2,
 11.5693 +   period4_ OUT VARCHAR2,
 11.5694 +   period5_ OUT VARCHAR2,
 11.5695 +   period6_ OUT VARCHAR2,
 11.5696 +   period7_ OUT VARCHAR2,
 11.5697 +   period8_ OUT VARCHAR2,
 11.5698 +   period9_ OUT VARCHAR2,
 11.5699 +   period10_ OUT VARCHAR2,
 11.5700 +   period11_ OUT VARCHAR2,
 11.5701 +   period12_ OUT VARCHAR2,
 11.5702 +   env_ IN VARCHAR2,
 11.5703 +   year_ IN VARCHAR2 )
 11.5704 +IS
 11.5705 +   per_no NUMBER;
 11.5706 +   period_ VARCHAR2(10);
 11.5707 +   CURSOR get_period IS
 11.5708 +      SELECT period
 11.5709 +      FROM   scorecard_period_tab
 11.5710 +      WHERE  environment = env_
 11.5711 +      AND    year = year_
 11.5712 +      ORDER BY end_date;
 11.5713 +
 11.5714 +   CURSOR get_periodCount IS
 11.5715 +      SELECT count (1)
 11.5716 +      FROM   scorecard_period_tab
 11.5717 +      WHERE  environment = env_
 11.5718 +      AND    year = year_;
 11.5719 +BEGIN
 11.5720 +   General_SYS.Init_Method(lu_name_, '&PKG', 'Return_Periods');
 11.5721 +   OPEN get_periodCount;
 11.5722 +   FETCH get_periodCount INTO per_no;
 11.5723 +   CLOSE get_periodCount;
 11.5724 +
 11.5725 +   OPEN get_period;
 11.5726 +   period1_  := null;
 11.5727 +   period2_  := null;
 11.5728 +   period3_  := null;
 11.5729 +   period4_  := null;
 11.5730 +   period5_  := null;
 11.5731 +   period6_  := null;
 11.5732 +   period7_  := null;
 11.5733 +   period8_  := null;
 11.5734 +   period9_  := null;
 11.5735 +   period10_ := null;
 11.5736 +   period11_ := null;
 11.5737 +   period12_ := null;
 11.5738 +
 11.5739 +   FOR i IN 1..per_no LOOP
 11.5740 +      FETCH get_period INTO period_;
 11.5741 +         IF (i = 1) THEN
 11.5742 +            period1_ := period_;
 11.5743 +         ELSIF (i = 2) THEN
 11.5744 +            period2_ := period_;
 11.5745 +         ELSIF (i = 3) THEN
 11.5746 +            period3_ := period_;
 11.5747 +         ELSIF (i = 4) THEN
 11.5748 +            period4_ := period_;
 11.5749 +         ELSIF (i = 5) THEN
 11.5750 +            period5_ := period_;
 11.5751 +         ELSIF (i = 6) THEN
 11.5752 +            period6_ := period_;
 11.5753 +         ELSIF (i = 7) THEN
 11.5754 +            period7_ := period_;
 11.5755 +         ELSIF (i = 8) THEN
 11.5756 +            period8_ := period_;
 11.5757 +         ELSIF (i = 9) THEN
 11.5758 +            period9_ := period_;
 11.5759 +         ELSIF (i = 10) THEN
 11.5760 +            period10_ := period_;
 11.5761 +         ELSIF (i = 11) THEN
 11.5762 +            period11_ := period_;
 11.5763 +         ELSIF (i = 12) THEN
 11.5764 +            period12_ := period_;
 11.5765 +         END IF;
 11.5766 +   END LOOP;
 11.5767 +   CLOSE get_period;
 11.5768 +
 11.5769 +END Return_Periods;
 11.5770 +PROCEDURE Import_Planned_Values(
 11.5771 +   environment_      IN VARCHAR2,
 11.5772 +   scorecard_        IN VARCHAR2,
 11.5773 +   p_year_           IN VARCHAR2,
 11.5774 +   version_          IN VARCHAR2,
 11.5775 +   scorecard_object_ IN VARCHAR2,
 11.5776 +   key_value_attr_   IN VARCHAR2)
 11.5777 +IS
 11.5778 +   year_        &TABLE..year%TYPE;
 11.5779 +   key_         &TABLE..p1_key%TYPE;
 11.5780 +   trans_value_ &TABLE..p1_value%TYPE;
 11.5781 +
 11.5782 +   ptr_         NUMBER;
 11.5783 +   name_        VARCHAR2(30);
 11.5784 +   column_      VARCHAR2(30);
 11.5785 +   value_       VARCHAR2(2000);
 11.5786 +   info_        VARCHAR2(2000);
 11.5787 +   objid_       VARCHAR2(2000);
 11.5788 +   objversion_  VARCHAR2(2000);
 11.5789 +   attr_        VARCHAR2(2000);
 11.5790 +
 11.5791 +   CURSOR get_update_record IS
 11.5792 +      SELECT objid, objversion
 11.5793 +      FROM   &VIEW
 11.5794 +      WHERE  environment      = environment_
 11.5795 +      AND    scorecard        = scorecard_
 11.5796 +      AND    year             = year_
 11.5797 +      AND    version          = version_
 11.5798 +      AND    scorecard_object = scorecard_object_;
 11.5799 +BEGIN
 11.5800 +   General_SYS.Init_Method(lu_name_, '&PKG', 'Import_Planned_Values');
 11.5801 +   ptr_ := NULL;
 11.5802 +
 11.5803 +   LOOP
 11.5804 +
 11.5805 +      WHILE ( Client_SYS.Get_Next_From_Attr(key_value_attr_, ptr_, name_, value_) ) LOOP
 11.5806 +
 11.5807 +         IF (name_ = 'KEY') THEN
 11.5808 +            key_  := value_;
 11.5809 +            year_ := Scorecard_Period_API.Get_Year(environment_,
 11.5810 +                                                   key_);
 11.5811 +         ELSIF (name_ = 'VALUE') THEN
 11.5812 +            trans_value_ := value_;
 11.5813 +            EXIT;
 11.5814 +         END IF;
 11.5815 +
 11.5816 +      END LOOP;
 11.5817 +
 11.5818 +      column_ := Find_Column___(environment_,
 11.5819 +                                scorecard_,
 11.5820 +                                year_,
 11.5821 +                                version_,
 11.5822 +                                scorecard_object_,
 11.5823 +                                key_);
 11.5824 +      OPEN  get_update_record;
 11.5825 +      FETCH get_update_record INTO objid_, objversion_;
 11.5826 +
 11.5827 +      IF ((get_update_record%FOUND) AND (column_ IS NOT NULL)) THEN
 11.5828 +         Client_SYS.Clear_Attr(attr_);
 11.5829 +         Client_SYS.Add_To_Attr(column_, trans_value_, attr_);
 11.5830 +         Client_SYS.Add_To_Attr('FROM_BUDPRO', 'TRUE', attr_);
 11.5831 +         Modify__(info_, objid_, objversion_, attr_, 'DO');
 11.5832 +         Calculate_Year_Value(environment_,
 11.5833 +                              scorecard_,
 11.5834 +                              year_,
 11.5835 +                              version_,
 11.5836 +                              scorecard_object_,
 11.5837 +                              'TRUE');
 11.5838 +         /*Calculate_Measures(environment_,
 11.5839 +                            scorecard_,
 11.5840 +                            year_,
 11.5841 +                            version_,
 11.5842 +                            scorecard_object_,
 11.5843 +                            12);*/
 11.5844 +      END IF;
 11.5845 +
 11.5846 +      CLOSE get_update_record;
 11.5847 +      EXIT WHEN NOT (Client_SYS.Get_Next_From_Attr(key_value_attr_, ptr_, name_, value_));
 11.5848 +
 11.5849 +   END LOOP;
 11.5850 +
 11.5851 +END Import_Planned_Values;
 11.5852 +
 11.5853 +PROCEDURE Calculate_Year_Value (
 11.5854 +   environment_  IN VARCHAR2,
 11.5855 +   scorecard_    IN VARCHAR2,
 11.5856 +   year_         IN VARCHAR2,
 11.5857 +   version_      IN VARCHAR2,
 11.5858 +   measure_      IN VARCHAR2,
 11.5859 +   from_budpro_ IN VARCHAR2 DEFAULT 'FALSE' )
 11.5860 +IS
 11.5861 +   total_        &TABLE..year_value%TYPE := 0;
 11.5862 +   measure_type_ scorecard_measure_tab.measure_type%TYPE;
 11.5863 +
 11.5864 +   objid_                   VARCHAR2(2000);
 11.5865 +   objversion_              VARCHAR2(2000);
 11.5866 +   info_                    VARCHAR2(2000);
 11.5867 +   attr_                    VARCHAR2(2000);
 11.5868 +   count_                   NUMBER := 0;
 11.5869 +   formula_p1_              NUMBER;
 11.5870 +   formula_p2_              NUMBER;
 11.5871 +   formula_p3_              NUMBER;
 11.5872 +   formula_p4_              NUMBER;
 11.5873 +   formula_p5_              NUMBER;
 11.5874 +   formula_p6_              NUMBER;
 11.5875 +   formula_p7_              NUMBER;
 11.5876 +   formula_p8_              NUMBER;
 11.5877 +   formula_p9_              NUMBER;
 11.5878 +   formula_p10_             NUMBER;
 11.5879 +   formula_p11_             NUMBER;
 11.5880 +   formula_p12_             NUMBER;
 11.5881 +
 11.5882 +   CURSOR    measure_value IS
 11.5883 +      SELECT objid,objversion,P1_Value,P2_Value,P3_Value,P4_Value,P5_Value,P6_Value,P7_Value,P8_Value,P9_Value,P10_Value,P11_Value,P12_Value
 11.5884 +      FROM   &VIEW
 11.5885 +      WHERE  environment      = environment_
 11.5886 +      AND    scorecard        = scorecard_
 11.5887 +      AND    year             = year_
 11.5888 +      AND    version          = version_
 11.5889 +      AND    scorecard_object = measure_;
 11.5890 +BEGIN
 11.5891 +   General_SYS.Init_Method(lu_name_, '&PKG', 'Calculate_Year_Value');
 11.5892 +   measure_type_ := Scorecard_measure_API.Get_Measure_Type_Db(measure_);
 11.5893 +   OPEN  measure_value;
 11.5894 +   FETCH measure_value INTO objid_, objversion_, formula_p1_, formula_p2_, formula_p3_, formula_p4_, formula_p5_,
 11.5895 +                            formula_p6_, formula_p7_, formula_p8_, formula_p9_, formula_p10_, formula_p11_, formula_p12_;
 11.5896 +   CLOSE measure_value;
 11.5897 +
 11.5898 +   IF (formula_p1_ IS NOT NULL) THEN
 11.5899 +      total_ := total_ + formula_p1_;
 11.5900 +      count_ := count_ + 1;
 11.5901 +   END IF;
 11.5902 +
 11.5903 +   IF (formula_p2_ IS NOT NULL) THEN
 11.5904 +      total_ := total_ + formula_p2_;
 11.5905 +      count_ := count_ + 1;
 11.5906 +   END IF;
 11.5907 +
 11.5908 +   IF (formula_p3_ IS NOT NULL) THEN
 11.5909 +      total_ := total_ + formula_p3_;
 11.5910 +      count_ := count_ + 1;
 11.5911 +   END IF;
 11.5912 +
 11.5913 +   IF (formula_p4_ IS NOT NULL) THEN
 11.5914 +      total_ := total_ + formula_p4_;
 11.5915 +      count_ := count_ + 1;
 11.5916 +   END IF;
 11.5917 +
 11.5918 +   IF (formula_p5_ IS NOT NULL) THEN
 11.5919 +      total_ := total_ + formula_p5_;
 11.5920 +      count_ := count_ + 1;
 11.5921 +   END IF;
 11.5922 +
 11.5923 +   IF (formula_p6_ IS NOT NULL) THEN
 11.5924 +      total_ := total_ + formula_p6_;
 11.5925 +      count_ := count_ + 1;
 11.5926 +   END IF;
 11.5927 +
 11.5928 +   IF (formula_p7_ IS NOT NULL) THEN
 11.5929 +      total_ := total_ + formula_p7_;
 11.5930 +      count_ := count_ + 1;
 11.5931 +   END IF;
 11.5932 +
 11.5933 +   IF (formula_p8_ IS NOT NULL) THEN
 11.5934 +      total_ := total_ + formula_p8_;
 11.5935 +      count_ := count_ + 1;
 11.5936 +   END IF;
 11.5937 +
 11.5938 +   IF (formula_p9_ IS NOT NULL) THEN
 11.5939 +      total_ := total_ + formula_p9_;
 11.5940 +      count_ := count_ + 1;
 11.5941 +   END IF;
 11.5942 +
 11.5943 +   IF (formula_p10_ IS NOT NULL) THEN
 11.5944 +      total_ := total_ + formula_p10_;
 11.5945 +      count_ := count_ + 1;
 11.5946 +   END IF;
 11.5947 +
 11.5948 +   IF (formula_p11_ IS NOT NULL) THEN
 11.5949 +      total_ := total_ + formula_p11_;
 11.5950 +      count_ := count_ + 1;
 11.5951 +   END IF;
 11.5952 +
 11.5953 +   IF (formula_p12_ IS NOT NULL) THEN
 11.5954 +      total_ := total_ + formula_p12_;
 11.5955 +      count_ := count_ + 1;
 11.5956 +   END IF;
 11.5957 +
 11.5958 +   IF (measure_type_ = 'PERCENTAGE' AND count_ > 0) THEN
 11.5959 +      total_ := total_ / count_;
 11.5960 +   ELSIF NOT(measure_type_ = 'VALUE') THEN
 11.5961 +      total_ := NULL;
 11.5962 +   END IF;
 11.5963 +
 11.5964 +   IF (total_ IS NOT NULL) THEN
 11.5965 +      Client_SYS.Clear_Attr(attr_);
 11.5966 +      Client_SYS.Add_To_Attr('YEAR_VALUE', total_, attr_);
 11.5967 +      Client_SYS.Add_To_Attr('FROM_BUDPRO', from_budpro_, attr_);
 11.5968 +      Modify__(info_, objid_, objversion_, attr_ , 'DO');
 11.5969 +   END IF;
 11.5970 +
 11.5971 +END Calculate_Year_Value;
 11.5972 +PROCEDURE Aggregate_Planned_Values(
 11.5973 +   environment_      IN VARCHAR2,
 11.5974 +   scorecard_        IN VARCHAR2,
 11.5975 +   year_             IN VARCHAR2,
 11.5976 +   version_          IN VARCHAR2,
 11.5977 +   scorecard_object_ IN VARCHAR2,
 11.5978 +   type_             IN VARCHAR2)
 11.5979 +IS
 11.5980 +   my_year_ &TABLE..year%TYPE;
 11.5981 +   num_     NUMBER;
 11.5982 +
 11.5983 +   CURSOR get_update_record IS
 11.5984 +      SELECT 1
 11.5985 +      FROM   &VIEW
 11.5986 +      WHERE  environment      = environment_
 11.5987 +      AND    scorecard        = scorecard_
 11.5988 +      AND    year             = year_
 11.5989 +      AND    version          = version_
 11.5990 +      AND    scorecard_object = scorecard_object_;
 11.5991 +BEGIN
 11.5992 +   General_SYS.Init_Method(lu_name_, '&PKG', 'Aggregate_Planned_Values');
 11.5993 +   OPEN  get_update_record;
 11.5994 +   FETCH get_update_record INTO num_;
 11.5995 +
 11.5996 +   IF (get_update_record%FOUND) THEN
 11.5997 +      my_year_ := Scorecard_Period_API.Get_Year(environment_,
 11.5998 +                                                year_);
 11.5999 +      Hierarchical_Consolidation(environment_,
 11.6000 +                                 scorecard_,
 11.6001 +                                 my_year_,
 11.6002 +                                 version_,
 11.6003 +                                 type_,
 11.6004 +                                 12,
 11.6005 +                                 scorecard_object_);
 11.6006 +      /*Calculate_Measures(environment_,
 11.6007 +                         scorecard_,
 11.6008 +                         year_,
 11.6009 +                         version_,
 11.6010 +                         scorecard_object_,
 11.6011 +                         12);*/
 11.6012 +   END IF;
 11.6013 +
 11.6014 +   CLOSE get_update_record;
 11.6015 +END Aggregate_Planned_Values;
 11.6016 +
 11.6017 +PROCEDURE Load_Planned_Values (
 11.6018 +   environment_ IN VARCHAR2,
 11.6019 +   scorecard_ IN VARCHAR2,
 11.6020 +   year_ IN VARCHAR2,
 11.6021 +   version_ IN VARCHAR2,
 11.6022 +   scorecard_object_ IN VARCHAR2,
 11.6023 +   from_ IN VARCHAR2,
 11.6024 +   period_count_ IN VARCHAR2 )
 11.6025 +IS
 11.6026 +   stmt_bp_call_ VARCHAR2(2000);
 11.6027 +   attr_         VARCHAR2(2000);
 11.6028 +   dummy_        VARCHAR2(2000);
 11.6029 +
 11.6030 +   TYPE GetTemplateNode IS REF CURSOR;
 11.6031 +   get_budpro           GetTemplateNode;
 11.6032 +   --Bug 66984 Begin
 11.6033 +   get_budpro_node      GetTemplateNode;
 11.6034 +   --Bug 66984 End
 11.6035 +   TYPE BudTemplateRec  IS RECORD (company VARCHAR2(60),
 11.6036 +                                   budget_process_id VARCHAR2(30),
 11.6037 +                                   budget_template_id VARCHAR2(60));
 11.6038 +   template_rec_        BudTemplateRec;
 11.6039 +   TYPE BudNodeRec      IS RECORD (company VARCHAR2(60),
 11.6040 +                                   budget_process_id VARCHAR2(30),
 11.6041 +                                   budget_structure_id VARCHAR2(90),
 11.6042 +                                   budget_node_id VARCHAR2(90));
 11.6043 +   node_rec_            BudNodeRec;
 11.6044 +
 11.6045 +   rec_                 &TABLE.%ROWTYPE;
 11.6046 +
 11.6047 +   CURSOR get_keys IS
 11.6048 +      SELECT *
 11.6049 +      FROM   &TABLE
 11.6050 +      WHERE  environment      = environment_
 11.6051 +      AND    scorecard        = scorecard_
 11.6052 +      AND    year             = year_
 11.6053 +      AND    version          = version_;
 11.6054 +BEGIN
 11.6055 +   General_SYS.Init_Method(lu_name_, '&PKG', 'Load_Planned_Values');
 11.6056 +
 11.6057 +   IF ( bp_installed_ ) THEN
 11.6058 +      Client_SYS.Clear_Attr(attr_);
 11.6059 +
 11.6060 +      OPEN  get_keys;
 11.6061 +      FETCH get_keys INTO rec_;
 11.6062 +      CLOSE get_keys;
 11.6063 +
 11.6064 +      Client_SYS.Add_To_Attr('FROM', from_, attr_);
 11.6065 +
 11.6066 +      IF (rec_.p1_key IS NOT NULL) THEN
 11.6067 +         Client_SYS.Add_To_Attr('P1_KEY', rec_.p1_key, attr_);
 11.6068 +      END IF;
 11.6069 +
 11.6070 +      IF (rec_.p2_key IS NOT NULL) THEN
 11.6071 +         Client_SYS.Add_To_Attr('P2_KEY', rec_.p2_key, attr_);
 11.6072 +      END IF;
 11.6073 +
 11.6074 +      IF (rec_.p3_key IS NOT NULL) THEN
 11.6075 +         Client_SYS.Add_To_Attr('P3_KEY', rec_.p3_key, attr_);
 11.6076 +      END IF;
 11.6077 +
 11.6078 +      IF (rec_.p4_key IS NOT NULL) THEN
 11.6079 +         Client_SYS.Add_To_Attr('P4_KEY', rec_.p4_key, attr_);
 11.6080 +      END IF;
 11.6081 +
 11.6082 +      IF (rec_.p5_key IS NOT NULL) THEN
 11.6083 +         Client_SYS.Add_To_Attr('P5_KEY', rec_.p5_key, attr_);
 11.6084 +      END IF;
 11.6085 +
 11.6086 +      IF (rec_.p6_key IS NOT NULL) THEN
 11.6087 +         Client_SYS.Add_To_Attr('P6_KEY', rec_.p6_key, attr_);
 11.6088 +      END IF;
 11.6089 +
 11.6090 +      IF (rec_.p7_key IS NOT NULL) THEN
 11.6091 +         Client_SYS.Add_To_Attr('P7_KEY', rec_.p7_key, attr_);
 11.6092 +      END IF;
 11.6093 +
 11.6094 +      IF (rec_.p8_key IS NOT NULL) THEN
 11.6095 +         Client_SYS.Add_To_Attr('P8_KEY', rec_.p8_key, attr_);
 11.6096 +      END IF;
 11.6097 +
 11.6098 +      IF (rec_.p9_key IS NOT NULL) THEN
 11.6099 +         Client_SYS.Add_To_Attr('P9_KEY', rec_.p9_key, attr_);
 11.6100 +      END IF;
 11.6101 +
 11.6102 +      IF (rec_.p10_key IS NOT NULL) THEN
 11.6103 +         Client_SYS.Add_To_Attr('P10_KEY', rec_.p10_key, attr_);
 11.6104 +      END IF;
 11.6105 +
 11.6106 +      IF (rec_.p11_key IS NOT NULL) THEN
 11.6107 +         Client_SYS.Add_To_Attr('P11_KEY', rec_.p11_key, attr_);
 11.6108 +      END IF;
 11.6109 +
 11.6110 +      IF (rec_.p12_key IS NOT NULL) THEN
 11.6111 +         Client_SYS.Add_To_Attr('P12_KEY', rec_.p12_key, attr_);
 11.6112 +      END IF;
 11.6113 +
 11.6114 +      IF (attr_ IS NOT NULL) THEN
 11.6115 +         attr_ := attr_ || scorecard_object_;
 11.6116 +      END IF;
 11.6117 +      -- Bug 66984 Begin,Added the line for Budget_Template_API.Is_Period_Matching() method call to stop loading values from templates which don't have matching periods
 11.6118 +      -- To handle multiple Budget Templates the single fetch was put inside a loop
 11.6119 +      stmt_bp_call_ := 'SELECT company, budget_process_id, budget_template_id
 11.6120 +                        FROM   budget_template_tab
 11.6121 +                        WHERE  scorecard = :scorecard
 11.6122 +                        AND    Budget_Process_API.Get_Environment(company,budget_process_id) = :environment
 11.6123 +                        AND    Budget_Template_API.Is_Period_Matching(company, budget_process_id, budget_template_id)= :value ';
 11.6124 +      
 11.6125 +      -- ifs_assert_safe iswalk 060111
 11.6126 +      OPEN  get_budpro FOR  stmt_bp_call_ USING scorecard_, environment_,'TRUE';
 11.6127 +      LOOP
 11.6128 +         FETCH get_budpro INTO template_rec_;
 11.6129 +         --Bug 66984 Begin,Added the if condition line and the else part
 11.6130 +         IF  get_budpro%FOUND THEN
 11.6131 +            IF ((template_rec_.company IS NULL) AND (attr_ IS NOT NULL)) THEN
 11.6132 +                stmt_bp_call_ := 'SELECT company, budget_process_id, budget_structure_id, budget_node_id
 11.6133 +                                  FROM   budget_node_tab
 11.6134 +                                  WHERE  scorecard = :scorecard
 11.6135 +                                  AND    Budget_Process_API.Get_Environment(company,
 11.6136 +                                                                     budget_process_id) = :environment';
 11.6137 +
 11.6138 +               -- ifs_assert_safe iswalk 060111
 11.6139 +               OPEN  get_budpro_node FOR  stmt_bp_call_ USING scorecard_, environment_;
 11.6140 +               FETCH get_budpro_node INTO node_rec_;
 11.6141 +               CLOSE get_budpro_node;
 11.6142 +
 11.6143 +               IF (node_rec_.company IS NOT NULL) THEN
 11.6144 +                  --Load the value from Budget Node
 11.6145 +                  dummy_ := 'NODE';
 11.6146 +                  stmt_bp_call_ := 'BEGIN
 11.6147 +                                    Budget_Node_API.Export_Planned_Values(:company,
 11.6148 +                                                                       :budget_process_id,
 11.6149 +                                                                       :budget_structure_id,
 11.6150 +                                                                       :budget_node_id,
 11.6151 +                                                                       :record_type,
 11.6152 +                                                                       :attr);
 11.6153 +                              END;';
 11.6154 +                  -- ifs_assert_safe iswalk 060111
 11.6155 +                  EXECUTE IMMEDIATE stmt_bp_call_ USING  IN node_rec_.company,
 11.6156 +                                                   IN node_rec_.budget_process_id,
 11.6157 +                                                   IN node_rec_.budget_structure_id,
 11.6158 +                                                   IN node_rec_.budget_node_id,
 11.6159 +                                                   IN dummy_,
 11.6160 +                                                   IN attr_;
 11.6161 +               ELSE
 11.6162 +                  Error_SYS.Appl_General(lu_name_, 'BUSPERSCOIPNOBUD: Selected scorecard object is not connected to any budget template or budget node');
 11.6163 +               END IF;
 11.6164 +            ELSIF (attr_ IS NOT NULL) THEN
 11.6165 +            --Load the value from Budget Template
 11.6166 +               stmt_bp_call_ := 'BEGIN
 11.6167 +                                 Budget_Template_API.Export_Planned_Values(:company,
 11.6168 +                                                                        :budget_process_id,
 11.6169 +                                                                        :budget_template_id,
 11.6170 +                                                                        :attr);
 11.6171 +                              END;';
 11.6172 +            -- ifs_assert_safe iswalk 060111
 11.6173 +               EXECUTE IMMEDIATE stmt_bp_call_ USING  IN template_rec_.company,
 11.6174 +                                                IN template_rec_.budget_process_id,
 11.6175 +                                                IN template_rec_.budget_template_id,
 11.6176 +                                                IN attr_;
 11.6177 +            END IF;
 11.6178 +            IF (attr_ IS NOT NULL) THEN
 11.6179 +               Import_Fin_Values(environment_,
 11.6180 +                                 scorecard_,
 11.6181 +                                 year_,
 11.6182 +                                 version_,
 11.6183 +                                 scorecard_object_);
 11.6184 +            END IF;
 11.6185 +         ELSE
 11.6186 +            CLOSE get_budpro;
 11.6187 +            EXIT;
 11.6188 +         END IF;
 11.6189 +         --Bug 66984 End
 11.6190 +      END LOOP;
 11.6191 +      --Bug 66984 End
 11.6192 +   END IF;
 11.6193 +      
 11.6194 +END Load_Planned_Values;
 11.6195 +
 11.6196 +FUNCTION Get_No_Of_Periods (
 11.6197 +   environment_ IN VARCHAR2,
 11.6198 +   scorecard_ IN VARCHAR2,
 11.6199 +   year_ IN VARCHAR2,
 11.6200 +   version_ IN VARCHAR2,
 11.6201 +   scorecard_object_ IN VARCHAR2 ) RETURN NUMBER
 11.6202 +IS
 11.6203 +   no_of_periods_ NUMBER  := 0;
 11.6204 +   rec_           &TABLE.%ROWTYPE;
 11.6205 +
 11.6206 +   CURSOR get_record IS
 11.6207 +      SELECT *
 11.6208 +      FROM   &TABLE
 11.6209 +      WHERE  environment      = environment_
 11.6210 +      AND    scorecard        = scorecard_
 11.6211 +      AND    year             = year_
 11.6212 +      AND    version          = version_
 11.6213 +      AND    scorecard_object = scorecard_object_;
 11.6214 +BEGIN
 11.6215 +   OPEN  get_record;
 11.6216 +   FETCH get_record INTO rec_;
 11.6217 +   CLOSE get_record;
 11.6218 +
 11.6219 +   IF (rec_.p1_key IS NOT NULL) THEN
 11.6220 +      no_of_periods_ := no_of_periods_ + 1;
 11.6221 +   END IF;
 11.6222 +
 11.6223 +   IF (rec_.p2_key IS NOT NULL) THEN
 11.6224 +      no_of_periods_ := no_of_periods_ + 1;
 11.6225 +   END IF;
 11.6226 +
 11.6227 +   IF (rec_.p3_key IS NOT NULL) THEN
 11.6228 +      no_of_periods_ := no_of_periods_ + 1;
 11.6229 +   END IF;
 11.6230 +
 11.6231 +   IF (rec_.p4_key IS NOT NULL) THEN
 11.6232 +      no_of_periods_ := no_of_periods_ + 1;
 11.6233 +   END IF;
 11.6234 +
 11.6235 +   IF (rec_.p5_key IS NOT NULL) THEN
 11.6236 +      no_of_periods_ := no_of_periods_ + 1;
 11.6237 +   END IF;
 11.6238 +
 11.6239 +   IF (rec_.p6_key IS NOT NULL) THEN
 11.6240 +      no_of_periods_ := no_of_periods_ + 1;
 11.6241 +   END IF;
 11.6242 +
 11.6243 +   IF (rec_.p7_key IS NOT NULL) THEN
 11.6244 +      no_of_periods_ := no_of_periods_ + 1;
 11.6245 +   END IF;
 11.6246 +
 11.6247 +   IF (rec_.p8_key IS NOT NULL) THEN
 11.6248 +      no_of_periods_ := no_of_periods_ + 1;
 11.6249 +   END IF;
 11.6250 +
 11.6251 +   IF (rec_.p9_key IS NOT NULL) THEN
 11.6252 +      no_of_periods_ := no_of_periods_ + 1;
 11.6253 +   END IF;
 11.6254 +
 11.6255 +   IF (rec_.p10_key IS NOT NULL) THEN
 11.6256 +      no_of_periods_ := no_of_periods_ + 1;
 11.6257 +   END IF;
 11.6258 +
 11.6259 +   IF (rec_.p11_key IS NOT NULL) THEN
 11.6260 +      no_of_periods_ := no_of_periods_ + 1;
 11.6261 +   END IF;
 11.6262 +
 11.6263 +   IF (rec_.p12_key IS NOT NULL) THEN
 11.6264 +      no_of_periods_ := no_of_periods_ + 1;
 11.6265 +   END IF;
 11.6266 +
 11.6267 +   RETURN no_of_periods_;
 11.6268 +END Get_No_Of_Periods;
 11.6269 +
 11.6270 +PROCEDURE Import_Fin_Values(
 11.6271 +   environment_ IN VARCHAR2,
 11.6272 +   scorecard_ IN VARCHAR2,
 11.6273 +   year_ IN VARCHAR2,
 11.6274 +   version_ IN VARCHAR2,
 11.6275 +   scorecard_object_ IN VARCHAR2)
 11.6276 +IS
 11.6277 +   TYPE GetTemplateNode IS REF CURSOR;
 11.6278 +   get_budpro           GetTemplateNode;
 11.6279 +   -- Bug 71089, Begin
 11.6280 +   get_measure_acc      GetTemplateNode;      
 11.6281 +   -- Bug 71089, End
 11.6282 +   TYPE BudTemplateRec  IS RECORD (company VARCHAR2(60),
 11.6283 +                                   budget_process_id VARCHAR2(30),
 11.6284 +                                   budget_template_id VARCHAR2(60));
 11.6285 +   template_rec_        BudTemplateRec;
 11.6286 +   TYPE BudNodeRec      IS RECORD (company VARCHAR2(60),
 11.6287 +                                   budget_process_id VARCHAR2(30),
 11.6288 +                                   budget_structure_id VARCHAR2(90),
 11.6289 +                                   budget_node_id VARCHAR2(90));
 11.6290 +   node_rec_            BudNodeRec;
 11.6291 +   TYPE Totals          IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
 11.6292 +
 11.6293 +   name_               VARCHAR2(30);
 11.6294 +   mea_name_           VARCHAR2(30);
 11.6295 +   value_              VARCHAR2(2000);
 11.6296 +   mea_value_          VARCHAR2(2000);
 11.6297 +   stmt_bp_call_       VARCHAR2(2000);
 11.6298 +   -- Bug 71089, Begin
 11.6299 +   stmt_bp_temp_call_  VARCHAR2(2000);
 11.6300 +   -- Bug 71089, End
 11.6301 +   attr_               VARCHAR2(2000);
 11.6302 +   current_            VARCHAR2(2000);
 11.6303 +   p_value_attr_       VARCHAR2(2000);
 11.6304 +   cum_val_attr_       VARCHAR2(4000);
 11.6305 +   info_               VARCHAR2(2000);
 11.6306 +   objversion_         VARCHAR2(2000);
 11.6307 +
 11.6308 +   measure_attr_       VARCHAR2(32000);
 11.6309 +   ptr_                NUMBER;
 11.6310 +   mea_ptr_            NUMBER;
 11.6311 +   totals_tab          Totals;
 11.6312 +
 11.6313 +   rec_                &VIEW.%ROWTYPE;
 11.6314 +   temp_rec_           &VIEW.%ROWTYPE;
 11.6315 +
 11.6316 +   -- Bug 68118, Begin
 11.6317 +   company_            VARCHAR2(20);
 11.6318 +   budget_process_id_  VARCHAR2(10) ;
 11.6319 +   budget_template_id_ VARCHAR2(20);
 11.6320 +   item_value_id_      VARCHAR2(20);
 11.6321 +   temp_measure_       VARCHAR2(10);
 11.6322 +   -- Bug 68118, End
 11.6323 +
 11.6324 +   CURSOR get_keys IS
 11.6325 +      SELECT *
 11.6326 +      FROM   &VIEW
 11.6327 +      WHERE  environment      = environment_
 11.6328 +      AND    scorecard        = scorecard_
 11.6329 +      AND    year             = year_
 11.6330 +      AND    version          = version_
 11.6331 +      AND    'AUTOFIN'        = Scorecard_Measure_API.Get_Measure_Update_Type_Db(scorecard_object);
 11.6332 +   CURSOR get_measure_accounts IS
 11.6333 +      SELECT account
 11.6334 +      FROM   bp_measure_accounts_tab
 11.6335 +      WHERE  measure = current_;
 11.6336 +     
 11.6337 +   -- Bug 68118, Begin
 11.6338 +   -- Bug 71089, Begin
 11.6339 +   -- The cursor get_measure_acc was removed 
 11.6340 +   -- Bug 71089, End
 11.6341 +   -- Bug 68118, End
 11.6342 +   
 11.6343 +BEGIN
 11.6344 +   General_SYS.Init_Method(lu_name_, '&PKG', 'Import_Fin_Values');
 11.6345 +
 11.6346 +   IF ( bp_installed_ ) THEN
 11.6347 +      Client_SYS.Clear_Attr(attr_);
 11.6348 +
 11.6349 +      -- Bug 71089, Begin
 11.6350 +      stmt_bp_temp_call_ := 'SELECT item_value_id 
 11.6351 +                             FROM   budget_template_row_tab
 11.6352 +                             WHERE  company = :company
 11.6353 +                             AND    budget_process_id = :budget_process_id
 11.6354 +                             AND    budget_template_id = :budget_template_id
 11.6355 +                             AND    item_value_id = :item_value_id';
 11.6356 +
 11.6357 +      -- ifs_assert_safe makrlk 080205
 11.6358 +      -- Bug 71089, End
 11.6359 +
 11.6360 +      OPEN  get_keys;
 11.6361 +      FETCH get_keys INTO temp_rec_;
 11.6362 +      CLOSE get_keys;
 11.6363 +
 11.6364 +      IF (temp_rec_.p1_key IS NOT NULL) THEN
 11.6365 +         temp_rec_.p1_key := Scorecard_Period_API.Get_Period_Match_Identity(environment_,
 11.6366 +                                                                            temp_rec_.p1_key);
 11.6367 +         Client_SYS.Add_To_Attr('P1_KEY',
 11.6368 +                                temp_rec_.p1_key,
 11.6369 +                                attr_);
 11.6370 +      END IF;
 11.6371 +
 11.6372 +      IF (temp_rec_.p2_key IS NOT NULL) THEN
 11.6373 +         temp_rec_.p2_key := Scorecard_Period_API.Get_Period_Match_Identity(environment_,
 11.6374 +                                                                            temp_rec_.p2_key);
 11.6375 +         Client_SYS.Add_To_Attr('P2_KEY',
 11.6376 +                                temp_rec_.p2_key,
 11.6377 +                                attr_);
 11.6378 +      END IF;
 11.6379 +
 11.6380 +      IF (temp_rec_.p3_key IS NOT NULL) THEN
 11.6381 +         temp_rec_.p3_key := Scorecard_Period_API.Get_Period_Match_Identity(environment_,
 11.6382 +                                                                            temp_rec_.p3_key);
 11.6383 +         Client_SYS.Add_To_Attr('P3_KEY',
 11.6384 +                                temp_rec_.p3_key,
 11.6385 +                                attr_);
 11.6386 +      END IF;
 11.6387 +
 11.6388 +      IF (temp_rec_.p4_key IS NOT NULL) THEN
 11.6389 +         temp_rec_.p4_key := Scorecard_Period_API.Get_Period_Match_Identity(environment_,
 11.6390 +                                                                            temp_rec_.p4_key);
 11.6391 +         Client_SYS.Add_To_Attr('P4_KEY',
 11.6392 +                                temp_rec_.p4_key,
 11.6393 +                                attr_);
 11.6394 +      END IF;
 11.6395 +
 11.6396 +      IF (temp_rec_.p5_key IS NOT NULL) THEN
 11.6397 +         temp_rec_.p5_key := Scorecard_Period_API.Get_Period_Match_Identity(environment_,
 11.6398 +                                                                            temp_rec_.p5_key);
 11.6399 +         Client_SYS.Add_To_Attr('P5_KEY',
 11.6400 +                                temp_rec_.p5_key,
 11.6401 +                                attr_);
 11.6402 +      END IF;
 11.6403 +
 11.6404 +      IF (temp_rec_.p6_key IS NOT NULL) THEN
 11.6405 +         temp_rec_.p6_key := Scorecard_Period_API.Get_Period_Match_Identity(environment_,
 11.6406 +                                                                            temp_rec_.p6_key);
 11.6407 +         Client_SYS.Add_To_Attr('P6_KEY',
 11.6408 +                                temp_rec_.p6_key,
 11.6409 +                                attr_);
 11.6410 +      END IF;
 11.6411 +
 11.6412 +      IF (temp_rec_.p7_key IS NOT NULL) THEN
 11.6413 +         temp_rec_.p7_key := Scorecard_Period_API.Get_Period_Match_Identity(environment_,
 11.6414 +                                                                            temp_rec_.p7_key);
 11.6415 +         Client_SYS.Add_To_Attr('P7_KEY',
 11.6416 +                                temp_rec_.p7_key,
 11.6417 +                                attr_);
 11.6418 +      END IF;
 11.6419 +
 11.6420 +      IF (temp_rec_.p8_key IS NOT NULL) THEN
 11.6421 +         temp_rec_.p8_key := Scorecard_Period_API.Get_Period_Match_Identity(environment_,
 11.6422 +                                                                            temp_rec_.p8_key);
 11.6423 +         Client_SYS.Add_To_Attr('P8_KEY',
 11.6424 +                                temp_rec_.p8_key,
 11.6425 +                                attr_);
 11.6426 +      END IF;
 11.6427 +
 11.6428 +      IF (temp_rec_.p9_key IS NOT NULL) THEN
 11.6429 +         temp_rec_.p9_key := Scorecard_Period_API.Get_Period_Match_Identity(environment_,
 11.6430 +                                                                            temp_rec_.p9_key);
 11.6431 +         Client_SYS.Add_To_Attr('P9_KEY',
 11.6432 +                                temp_rec_.p9_key,
 11.6433 +                                attr_);
 11.6434 +      END IF;
 11.6435 +
 11.6436 +      IF (temp_rec_.p10_key IS NOT NULL) THEN
 11.6437 +         temp_rec_.p10_key := Scorecard_Period_API.Get_Period_Match_Identity(environment_,
 11.6438 +                                                                             temp_rec_.p10_key);
 11.6439 +         Client_SYS.Add_To_Attr('P10_KEY',
 11.6440 +                                temp_rec_.p10_key,
 11.6441 +                                attr_);
 11.6442 +      END IF;
 11.6443 +
 11.6444 +      IF (temp_rec_.p11_key IS NOT NULL) THEN
 11.6445 +         temp_rec_.p11_key := Scorecard_Period_API.Get_Period_Match_Identity(environment_,
 11.6446 +                                                                             temp_rec_.p11_key);
 11.6447 +         Client_SYS.Add_To_Attr('P11_KEY',
 11.6448 +                                temp_rec_.p11_key,
 11.6449 +                                attr_);
 11.6450 +      END IF;
 11.6451 +
 11.6452 +      IF (temp_rec_.p12_key IS NOT NULL) THEN
 11.6453 +         temp_rec_.p12_key := Scorecard_Period_API.Get_Period_Match_Identity(environment_,
 11.6454 +                                                                             temp_rec_.p12_key);
 11.6455 +         Client_SYS.Add_To_Attr('P12_KEY',
 11.6456 +                                temp_rec_.p12_key,
 11.6457 +                                attr_);
 11.6458 +      END IF;
 11.6459 +
 11.6460 +      IF (attr_ IS NOT NULL) THEN
 11.6461 +
 11.6462 +         stmt_bp_call_ := 'SELECT company, budget_process_id, budget_template_id
 11.6463 +                           FROM   budget_template_tab
 11.6464 +                           WHERE  scorecard = :scorecard
 11.6465 +                           AND    Budget_Process_API.Get_Environment(company,
 11.6466 +                                                                     budget_process_id) = :environment';
 11.6467 +
 11.6468 +         -- ifs_assert_safe iswalk 060220
 11.6469 +         OPEN  get_budpro FOR  stmt_bp_call_ USING scorecard_, environment_;
 11.6470 +         FETCH get_budpro INTO template_rec_;
 11.6471 +         CLOSE get_budpro;
 11.6472 +
 11.6473 +         Client_SYS.Clear_Attr(measure_attr_); 
 11.6474 +         IF (template_rec_.company IS NOT NULL) THEN
 11.6475 +
 11.6476 +            FOR rec_ IN get_keys LOOP
 11.6477 +               Client_SYS.Clear_Attr(cum_val_attr_);
 11.6478 +
 11.6479 +               FOR i IN 0..11 LOOP
 11.6480 +                  totals_tab(i) := 0;
 11.6481 +               END LOOP;
 11.6482 +
 11.6483 +               current_ := rec_.scorecard_object;
 11.6484 +
 11.6485 +               Client_SYS.Add_To_Attr('OBJECT_ID',current_,measure_attr_); 
 11.6486 +               mea_ptr_ := NULL;
 11.6487 +
 11.6488 +               --the call has been made from busper side which means only selected measures should be updated
 11.6489 +               WHILE (Client_SYS.Get_Next_From_Attr(scorecard_object_, mea_ptr_, mea_name_, mea_value_)) LOOP
 11.6490 +
 11.6491 +                  IF (current_ = mea_value_) THEN
 11.6492 +                     --get the list of accounts connected to the current measure...
 11.6493 +                     FOR acc_rec_ IN get_measure_accounts LOOP
 11.6494 +                      -- Bug 68118, Begin
 11.6495 +                        company_            := template_rec_.company;
 11.6496 +                        budget_process_id_  := template_rec_.budget_process_id;
 11.6497 +                        budget_template_id_ := template_rec_.budget_template_id;
 11.6498 +                        item_value_id_      := acc_rec_.account; 
 11.6499 +                      
 11.6500 +                        -- Bug 71089, Begin. change the OPEN line
 11.6501 +                        -- ifs_assert_safe nsillk 20080318
 11.6502 +                        OPEN  get_measure_acc FOR stmt_bp_temp_call_ USING company_, budget_process_id_, budget_template_id_, item_value_id_;                      
 11.6503 +                        FETCH get_measure_acc INTO temp_measure_;
 11.6504 +                        CLOSE get_measure_acc;
 11.6505 +                        -- Bug 71089, End
 11.6506 +                        -- Bug 68118, End
 11.6507 +
 11.6508 +                        -- Bug 68118, Begin added IF condition
 11.6509 +
 11.6510 +                        IF (temp_measure_ = acc_rec_.account) THEN
 11.6511 +                           stmt_bp_call_ := 'BEGIN
 11.6512 +                                             :p_value_attr := Budget_Template_API.Get_Period_Fin_Values(:company,
 11.6513 +                                                                                                        :budget_process_id,
 11.6514 +                                                                                                        :budget_template_id,
 11.6515 +                                                                                                        :account,
 11.6516 +                                                                                                        :attr);
 11.6517 +                                          END;';
 11.6518 +                           -- ifs_assert_safe iswalk 060220
 11.6519 +                           EXECUTE IMMEDIATE stmt_bp_call_ USING  OUT p_value_attr_,
 11.6520 +                                                               IN  template_rec_.company,
 11.6521 +                                                               IN  template_rec_.budget_process_id,
 11.6522 +                                                               IN  template_rec_.budget_template_id,
 11.6523 +                                                               IN  acc_rec_.account,
 11.6524 +                                                               IN  attr_;
 11.6525 +                           cum_val_attr_ := cum_val_attr_ || p_value_attr_;
 11.6526 +                        END IF;
 11.6527 +                        -- Bug 68118, End the IF condition  
 11.6528 +                     END LOOP;
 11.6529 +                  END IF;
 11.6530 +
 11.6531 +               END LOOP;
 11.6532 +
 11.6533 +               --the call has been made from budpro side which means all measures should be updated
 11.6534 +               IF (scorecard_object_ IS NULL) THEN
 11.6535 +                  --get the list of accounts connected to the current measure...
 11.6536 +                  FOR acc_rec_ IN get_measure_accounts LOOP
 11.6537 +                     -- Bug 68118, Begin
 11.6538 +                     company_            := template_rec_.company;
 11.6539 +                     budget_process_id_  := template_rec_.budget_process_id;
 11.6540 +                     budget_template_id_ := template_rec_.budget_template_id;
 11.6541 +                     item_value_id_      := acc_rec_.account; 
 11.6542 +                      
 11.6543 +                     -- Bug 71089, Begin. change the OPEN line
 11.6544 +                     -- ifs_assert_safe nsillk 20080318
 11.6545 +                     OPEN  get_measure_acc FOR stmt_bp_temp_call_ USING company_, budget_process_id_, budget_template_id_, item_value_id_;                      
 11.6546 +                     FETCH get_measure_acc INTO temp_measure_;
 11.6547 +                     CLOSE get_measure_acc;
 11.6548 +                     -- Bug 71089, End
 11.6549 +                     -- Bug 68118, End
 11.6550 +
 11.6551 +                     -- Bug 68118, Begin added IF condition
 11.6552 +                     IF (temp_measure_ = acc_rec_.account) THEN
 11.6553 +                        stmt_bp_call_ := 'BEGIN
 11.6554 +                                          :p_value_attr := Budget_Template_API.Get_Period_Fin_Values(:company,
 11.6555 +                                                                                                     :budget_process_id,
 11.6556 +                                                                                                     :budget_template_id,
 11.6557 +                                                                                                     :account,
 11.6558 +                                                                                                     :attr);
 11.6559 +                                       END;';
 11.6560 +                        -- ifs_assert_safe iswalk 060220
 11.6561 +                        EXECUTE IMMEDIATE stmt_bp_call_ USING  OUT p_value_attr_,
 11.6562 +                                                            IN  template_rec_.company,
 11.6563 +                                                            IN  template_rec_.budget_process_id,
 11.6564 +                                                            IN  template_rec_.budget_template_id,
 11.6565 +                                                            IN  acc_rec_.account,
 11.6566 +                                                            IN  attr_;
 11.6567 +                        cum_val_attr_ := cum_val_attr_ || p_value_attr_;
 11.6568 +                     END IF;
 11.6569 +                     -- Bug 68118, End the IF condition
 11.6570 +
 11.6571 +                  END LOOP;
 11.6572 +               END IF;
 11.6573 +
 11.6574 +               IF (cum_val_attr_ IS NOT NULL) THEN
 11.6575 +
 11.6576 +                  ptr_ := NULL;
 11.6577 +
 11.6578 +                  WHILE (Client_SYS.Get_Next_From_Attr(cum_val_attr_, ptr_, name_, value_)) LOOP
 11.6579 +
 11.6580 +                     IF (temp_rec_.p1_key = name_) THEN
 11.6581 +                        totals_tab(0) := totals_tab(0) + Client_SYS.Attr_Value_To_Number(value_);
 11.6582 +                     END IF;
 11.6583 +
 11.6584 +                     IF (temp_rec_.p2_key = name_) THEN
 11.6585 +                        totals_tab(1) := totals_tab(1) + Client_SYS.Attr_Value_To_Number(value_);
 11.6586 +                     END IF;
 11.6587 +
 11.6588 +                     IF (temp_rec_.p3_key = name_) THEN
 11.6589 +                        totals_tab(2) := totals_tab(2) + Client_SYS.Attr_Value_To_Number(value_);
 11.6590 +                     END IF;
 11.6591 +
 11.6592 +                     IF (temp_rec_.p4_key = name_) THEN
 11.6593 +                        totals_tab(3) := totals_tab(3) + Client_SYS.Attr_Value_To_Number(value_);
 11.6594 +                     END IF;
 11.6595 +
 11.6596 +                     IF (temp_rec_.p5_key = name_) THEN
 11.6597 +                        totals_tab(4) := totals_tab(4) + Client_SYS.Attr_Value_To_Number(value_);
 11.6598 +                     END IF;
 11.6599 +
 11.6600 +                     IF (temp_rec_.p6_key = name_) THEN
 11.6601 +                        totals_tab(5) := totals_tab(5) + Client_SYS.Attr_Value_To_Number(value_);
 11.6602 +                     END IF;
 11.6603 +
 11.6604 +                     IF (temp_rec_.p7_key = name_) THEN
 11.6605 +                        totals_tab(6) := totals_tab(6) + Client_SYS.Attr_Value_To_Number(value_);
 11.6606 +                     END IF;
 11.6607 +
 11.6608 +                     IF (temp_rec_.p8_key = name_) THEN
 11.6609 +                        totals_tab(7) := totals_tab(7) + Client_SYS.Attr_Value_To_Number(value_);
 11.6610 +                     END IF;
 11.6611 +
 11.6612 +                     IF (temp_rec_.p9_key = name_) THEN
 11.6613 +                        totals_tab(8) := totals_tab(8) + Client_SYS.Attr_Value_To_Number(value_);
 11.6614 +                     END IF;
 11.6615 +
 11.6616 +                     IF (temp_rec_.p10_key = name_) THEN
 11.6617 +                        totals_tab(9) := totals_tab(9) + Client_SYS.Attr_Value_To_Number(value_);
 11.6618 +                     END IF;
 11.6619 +
 11.6620 +                     IF (temp_rec_.p11_key = name_) THEN
 11.6621 +                        totals_tab(10) := totals_tab(10) + Client_SYS.Attr_Value_To_Number(value_);
 11.6622 +                     END IF;
 11.6623 +
 11.6624 +                     IF (temp_rec_.p12_key = name_) THEN
 11.6625 +                        totals_tab(11) := totals_tab(11) + Client_SYS.Attr_Value_To_Number(value_);
 11.6626 +                     END IF;
 11.6627 +
 11.6628 +                  END LOOP;
 11.6629 +
 11.6630 +                  Client_SYS.Clear_Attr(cum_val_attr_);
 11.6631 +
 11.6632 +                  FOR i IN 0..11  LOOP
 11.6633 +
 11.6634 +                     -- Bug 68118, Begin remove the the IF condition
 11.6635 +                     Client_SYS.Add_To_Attr('P'|| (i + 1) || '_VALUE', totals_tab(i), cum_val_attr_);
 11.6636 +                     -- Bug 68118, End
 11.6637 +
 11.6638 +                  END LOOP;
 11.6639 +
 11.6640 +                  objversion_ := rec_.objversion;
 11.6641 +                  Client_SYS.Add_To_Attr('FROM_BUDPRO', 'TRUE', cum_val_attr_);
 11.6642 +                  Modify__(info_, rec_.objid, objversion_, cum_val_attr_, 'DO');
 11.6643 +                  Calculate_Year_Value(environment_,
 11.6644 +                                       scorecard_,
 11.6645 +                                       year_,
 11.6646 +                                       version_,
 11.6647 +                                       rec_.scorecard_object);
 11.6648 +
 11.6649 +               END IF;
 11.6650 +
 11.6651 +            END LOOP;
 11.6652 +
 11.6653 +         Calc_Measure_From_Budpro (environment_ ,scorecard_,measure_attr_);
 11.6654 +         END IF;
 11.6655 +
 11.6656 +      END IF;
 11.6657 +
 11.6658 +   END IF;
 11.6659 +END Import_Fin_Values;
 11.6660 +PROCEDURE Calc_Measure_From_Budpro (
 11.6661 +   environment_ IN VARCHAR2,
 11.6662 +   scorecard_   IN VARCHAR2,
 11.6663 +   comp_attr_   IN VARCHAR2 )
 11.6664 +IS
 11.6665 +   ptr_                  NUMBER;
 11.6666 +   count_                NUMBER;
 11.6667 +   period_count_         NUMBER;
 11.6668 +
 11.6669 +   name_                 VARCHAR2(30);
 11.6670 +   value_                VARCHAR2(2000);
 11.6671 +   level_type_val_       VARCHAR2(20);
 11.6672 +   measure_version_      VARCHAR2(30);
 11.6673 +
 11.6674 +   object_id_            scorecard_measure_tab.measure%TYPE;
 11.6675 +   level_type_           scorecard_structure_tab.child_level_type%TYPE;
 11.6676 +   year_                 scorecard_period_tab.year%TYPE;
 11.6677 +   budget_version_       measure_version_tab.version%TYPE;
 11.6678 +
 11.6679 +   CURSOR get_level_type IS
 11.6680 +      SELECT child_level_type
 11.6681 +      FROM   Scorecard_structure_tab
 11.6682 +      WHERE  environment        = environment_
 11.6683 +      AND    scorecard          = scorecard_
 11.6684 +      AND    level_id           = object_id_;
 11.6685 +
 11.6686 +   CURSOR get_measures_planform IS
 11.6687 +      SELECT level_id,measure_calc_formula
 11.6688 +      FROM   Scorecard_Structure_TAB
 11.6689 +      WHERE  environment        = environment_
 11.6690 +      AND    scorecard          = scorecard_
 11.6691 +      AND    measure_calc_formula IS NOT NULL;
 11.6692 +
 11.6693 +   CURSOR get_years IS
 11.6694 +      SELECT DISTINCT year
 11.6695 +      FROM   Scorecard_Period_TAB
 11.6696 +      WHERE  environment        = environment_;
 11.6697 +
 11.6698 +   CURSOR get_period_count IS
 11.6699 +      SELECT COUNT(period)
 11.6700 +      FROM   Scorecard_Period_TAB
 11.6701 +      WHERE  environment        = environment_
 11.6702 +      AND    year               = year_;
 11.6703 +
 11.6704 +    TYPE MeasuresTable IS TABLE OF VARCHAR2(2000) INDEX BY BINARY_INTEGER;
 11.6705 +    measures_tab        MeasuresTable ;
 11.6706 +
 11.6707 +
 11.6708 +
 11.6709 +BEGIN
 11.6710 +   General_SYS.Init_Method(lu_name_, '&PKG', 'Calc_Measure_From_Budpro');
 11.6711 +   ptr_ := NULL;
 11.6712 +
 11.6713 +   WHILE ( Client_SYS.Get_Next_From_Attr(comp_attr_, ptr_, name_, value_) ) LOOP
 11.6714 +      IF (name_ = 'OBJECT_ID') THEN
 11.6715 +         object_id_ := value_;
 11.6716 +      END IF;
 11.6717 +
 11.6718 +      OPEN  get_level_type;
 11.6719 +      FETCH get_level_type INTO level_type_;
 11.6720 +      CLOSE get_level_type;
 11.6721 +
 11.6722 +      IF(level_type_ = 'COMPONENT') THEN
 11.6723 +         count_ := 0;
 11.6724 +         FOR get_measures_planform_ IN get_measures_planform  LOOP
 11.6725 +           IF( INSTR(get_measures_planform_.measure_calc_formula,object_id_) > 0) THEN
 11.6726 +               measures_tab(count_) := get_measures_planform_.level_id;
 11.6727 +           END IF;
 11.6728 +         END LOOP;
 11.6729 +         budget_version_ := Scorecard_Environment_API.Get_Budget_Version(environment_);
 11.6730 +
 11.6731 +         IF( measures_tab.COUNT > 0 ) THEN
 11.6732 +
 11.6733 +            FOR x IN measures_tab.FIRST..measures_tab.LAST LOOP
 11.6734 +               FOR get_years_ IN get_years LOOP
 11.6735 +                  year_    := get_years_.year;
 11.6736 +
 11.6737 +                  OPEN  get_period_count;
 11.6738 +                  FETCH get_period_count INTO period_count_;
 11.6739 +                  CLOSE get_period_count;
 11.6740 +
 11.6741 +                  IF( Check_Exist___ (environment_,scorecard_,year_,budget_version_,measures_tab(x))) THEN
 11.6742 +                     Calculate_Measures (environment_,
 11.6743 +                                         scorecard_,
 11.6744 +                                         year_,
 11.6745 +                                         budget_version_,
 11.6746 +                                         measures_tab(x),
 11.6747 +                                         period_count_,
 11.6748 +                                         'TRUE' );
 11.6749 +                  END IF;
 11.6750 +               END LOOP;
 11.6751 +            END LOOP;
 11.6752 +         END IF;
 11.6753 +      END IF;
 11.6754 +   END LOOP;
 11.6755 +END Calc_Measure_From_Budpro;
 11.6756 +
 11.6757 +
 11.6758 +FUNCTION Get (
 11.6759 +   environment_ IN VARCHAR2,
 11.6760 +   scorecard_ IN VARCHAR2,
 11.6761 +   year_ IN VARCHAR2,
 11.6762 +   version_ IN VARCHAR2,
 11.6763 +   scorecard_object_ IN VARCHAR2 ) RETURN Public_Rec
 11.6764 +IS
 11.6765 +   temp_ Public_Rec;
 11.6766 +   CURSOR get_attr IS
 11.6767 +      SELECT action, mea_state_change_date
 11.6768 +      FROM &TABLE
 11.6769 +      WHERE environment = environment_
 11.6770 +      AND   scorecard = scorecard_
 11.6771 +      AND   year = year_
 11.6772 +      AND   version = version_
 11.6773 +      AND   scorecard_object = scorecard_object_;
 11.6774 +BEGIN
 11.6775 +   OPEN get_attr;
 11.6776 +   FETCH get_attr INTO temp_;
 11.6777 +   CLOSE get_attr;
 11.6778 +   RETURN temp_;
 11.6779 +END Get;
 11.6780 +-----------------------------------------------------------------------------
 11.6781 +-------------------- FOUNDATION1 METHODS ------------------------------------
 11.6782 +-----------------------------------------------------------------------------
 11.6783 +-- Init
 11.6784 +--   Dummy procedure that can be called at database startup to ensure that
 11.6785 +--   this package is loaded into memory for performance reasons only.
 11.6786 +-----------------------------------------------------------------------------
 11.6787 +
 11.6788 +PROCEDURE Init
 11.6789 +IS
 11.6790 +BEGIN
 11.6791 +   NULL;
 11.6792 +END Init;
 11.6793 +
 11.6794 +
 11.6795 +END &PKG;
 11.6796 +/
 11.6797 +SHOW ERROR
 11.6798 +
 11.6799 +UNDEFINE MODULE
 11.6800 +UNDEFINE LU
 11.6801 +UNDEFINE TABLE
 11.6802 +UNDEFINE VIEW
 11.6803 +UNDEFINE VIEW2
 11.6804 +UNDEFINE VIEW3
 11.6805 +UNDEFINE VIEW4
 11.6806 +UNDEFINE VIEW5
 11.6807 +UNDEFINE PKG
 11.6808 +UNDEFINE OBJID
 11.6809 +UNDEFINE OBJVERSION
 11.6810 +UNDEFINE OBJSTATE
 11.6811 +UNDEFINE OBJEVENTS
 11.6812 +UNDEFINE STATE
 11.6813 +-----------------------------------------------------------------------------
    12.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    12.2 +++ b/PLSQL/Lexer/test/unit/data/Trainer.apy	Wed May 15 23:04:20 2013 +0200
    12.3 @@ -0,0 +1,877 @@
    12.4 +-----------------------------------------------------------------------------
    12.5 +--
    12.6 +--  Logical unit: Trainer
    12.7 +--
    12.8 +--  Purpose:
    12.9 +--
   12.10 +--  IFS/Design Template Version 2.2
   12.11 +--
   12.12 +--  Date    Sign  History
   12.13 +--  ------  ----  -----------------------------------------------------------
   12.14 +--  040219  NIMULK  made compatible with unicode. Substr
   12.15 +--  010509  UlPe    Remove call to dbms
   12.16 +--  010509  UlPe    Changes of General_Sys.Init_Method (technical directive)
   12.17 +--  990426  ELZ     Changed to New Template (2.2.1)
   12.18 +--  981222  ELZ     Created.
   12.19 +-----------------------------------------------------------------------------
   12.20 +
   12.21 +DEFINE MODULE        = TRNADM
   12.22 +DEFINE LU            = Trainer
   12.23 +DEFINE TABLE         = TRAINER_TAB
   12.24 +DEFINE VIEW          = TRAINER
   12.25 +DEFINE VIEW_LOV1     = TRAINER_LOV1
   12.26 +DEFINE VIEW_LOV2     = TRAINER_LOV2
   12.27 +DEFINE PKG           = TRAINER_API
   12.28 +
   12.29 +DEFINE OBJID         = t.rowid
   12.30 +DEFINE OBJVERSION    = ltrim(lpad(to_char(t.rowversion),2000))
   12.31 +
   12.32 +-----------------------------------------------------------------------------
   12.33 +-------------------- VIEWS FOR SELECTS --------------------------------------
   12.34 +-----------------------------------------------------------------------------
   12.35 +
   12.36 +PROMPT Creating &VIEW view
   12.37 +
   12.38 +CREATE OR REPLACE FORCE VIEW &VIEW AS
   12.39 +SELECT t.person_id                    person_id,
   12.40 +       internal                       internal,
   12.41 +       p.name1                        fname,
   12.42 +       p.name4                        lname,
   12.43 +       training_institution_no        training_institution_no,
   12.44 +       Training_Institution_API.Decode(training_institution_no) training_institution_name,
   12.45 +       p.date_of_birth                date_of_birth,
   12.46 +       Person_Sex_API.Decode(p.sex)   sex,
   12.47 +       p.sex                          sex_db,
   12.48 +       remark                         remark,
   12.49 +       &OBJID                         objid,
   12.50 +       &OBJVERSION                    objversion
   12.51 +FROM   trainer_tab t, pers_tab p
   12.52 +WHERE  t.person_id = p.person_id
   12.53 +WITH   read only;
   12.54 +
   12.55 +COMMENT ON TABLE &VIEW
   12.56 +   IS 'LU=&LU^PROMPT=Trainer^MODULE=&MODULE^';
   12.57 +
   12.58 +COMMENT ON COLUMN &VIEW..person_id
   12.59 +   IS 'FLAGS=KMI-L^DATATYPE=STRING(20)/UPPERCASE^PROMPT=Person Id^REF=Pers^';
   12.60 +COMMENT ON COLUMN &VIEW..internal
   12.61 +   IS 'FLAGS=AMIUL^DATATYPE=STRING(1)^PROMPT=Internal^';
   12.62 +COMMENT ON COLUMN &VIEW..fname
   12.63 +   IS 'FLAGS=A-IUL^DATATYPE=STRING(40)^PROMPT=First Name^';
   12.64 +COMMENT ON COLUMN &VIEW..lname
   12.65 +   IS 'FLAGS=AMIUL^DATATYPE=STRING(40)^PROMPT=Last Name^';
   12.66 +COMMENT ON COLUMN &VIEW..training_institution_no
   12.67 +   IS 'FLAGS=A-IU-^DATATYPE=NUMBER^PROMPT=Training Institution No^REF=TrainingInstitution^';
   12.68 +COMMENT ON COLUMN &VIEW..training_institution_name
   12.69 +   IS 'FLAGS=A-IU-^DATATYPE=STRING(100)^PROMPT=Training Institution Name^';
   12.70 +COMMENT ON COLUMN &VIEW..date_of_birth
   12.71 +   IS 'FLAGS=A-IU-^DATATYPE=DATE/DATE^PROMPT=Date of Birth^';
   12.72 +COMMENT ON COLUMN &VIEW..sex
   12.73 +   IS 'FLAGS=A-IU-^DATATYPE=STRING(200)^PROMPT=Gender^REF=PersonSex^';
   12.74 +COMMENT ON COLUMN &VIEW..remark
   12.75 +   IS 'FLAGS=A-IU-^DATATYPE=STRING(2000)^PROMPT=Remark^';
   12.76 +
   12.77 +
   12.78 +PROMPT Creating &VIEW_LOV1 view
   12.79 +
   12.80 +CREATE OR REPLACE FORCE VIEW &VIEW_LOV1 AS
   12.81 +SELECT person_id                             person_id,
   12.82 +       Trainer_API.Get_Name(person_id)       name,
   12.83 +       Trainer_API.Get_Internal_External(internal)    internal_external
   12.84 +FROM   trainer_tab 
   12.85 +WITH   read only;
   12.86 +
   12.87 +COMMENT ON TABLE &VIEW_LOV1
   12.88 +   IS 'LU=&LU^PROMPT=Trainer^MODULE=&MODULE^SORT=Person_Id^';
   12.89 +
   12.90 +COMMENT ON COLUMN &VIEW_LOV1..person_id
   12.91 +   IS 'FLAGS=K---L^DATATYPE=STRING(20)/UPPERCASE^PROMPT=Person Id^';
   12.92 +COMMENT ON COLUMN &VIEW_LOV1..name
   12.93 +   IS 'FLAGS=A---L^DATATYPE=STRING(100)^PROMPT=Name^';
   12.94 +COMMENT ON COLUMN &VIEW_LOV1..internal_external
   12.95 +   IS 'FLAGS=A---L^DATATYPE=STRING(100)^PROMPT=Internal/External^';
   12.96 +
   12.97 +-----------------------------------------------------------------------------
   12.98 +-------------------- PACKAGES FOR METHODS -----------------------------------
   12.99 +-----------------------------------------------------------------------------
  12.100 +
  12.101 +PROMPT Creating &PKG implementation
  12.102 +
  12.103 +CREATE OR REPLACE PACKAGE BODY &PKG IS
  12.104 +
  12.105 +-----------------------------------------------------------------------------
  12.106 +-------------------- LU SPECIFIC IMPLEMENTATION METHOD DECLARATIONS ---------
  12.107 +-----------------------------------------------------------------------------
  12.108 +
  12.109 +-----------------------------------------------------------------------------
  12.110 +-------------------- IMPLEMENTATION BASE METHODS ----------------------------
  12.111 +-----------------------------------------------------------------------------
  12.112 +-- Lock_By_Id___
  12.113 +--    Client-support to lock a specific instance of the logical unit.
  12.114 +--
  12.115 +-- Lock_By_Keys___
  12.116 +--    Server support to lock a specific instance of the logical unit.
  12.117 +--
  12.118 +-- Get_Object_By_Id___
  12.119 +--    Get LU-record from the database with a specified object identity.
  12.120 +--
  12.121 +-- Get_Object_By_Keys___
  12.122 +--    Get LU-record from the database with specified key columns.
  12.123 +--
  12.124 +-- Check_Exist___
  12.125 +--    Check if a specific LU-instance already exist in the database.
  12.126 +--
  12.127 +-- Get_Id_Version_By_Keys___
  12.128 +--    Get the current OBJID and OBJVERSION for a specific LU-instance.
  12.129 +-----------------------------------------------------------------------------
  12.130 +FUNCTION Lock_By_Id___ (
  12.131 +   objid_      IN  VARCHAR2,
  12.132 +   objversion_ IN  VARCHAR2 ) RETURN &TABLE%ROWTYPE
  12.133 +IS
  12.134 +   row_changed EXCEPTION;
  12.135 +   row_deleted EXCEPTION;
  12.136 +   row_locked  EXCEPTION;
  12.137 +   PRAGMA      exception_init(row_locked, -0054);
  12.138 +   rec_        &TABLE%ROWTYPE;
  12.139 +   dummy_      NUMBER;
  12.140 +   CURSOR lock_control IS
  12.141 +      SELECT *
  12.142 +      FROM   &TABLE t
  12.143 +      WHERE  &OBJID = objid_
  12.144 +      AND    &OBJVERSION = objversion_
  12.145 +      FOR UPDATE NOWAIT;
  12.146 +   CURSOR exist_control IS
  12.147 +      SELECT 1
  12.148 +      FROM   &TABLE t
  12.149 +      WHERE  &OBJID = objid_;
  12.150 +BEGIN
  12.151 +   OPEN lock_control;
  12.152 +   FETCH lock_control INTO rec_;
  12.153 +   IF (lock_control%FOUND) THEN
  12.154 +      CLOSE lock_control;
  12.155 +      RETURN rec_;
  12.156 +   END IF;
  12.157 +   CLOSE lock_control;
  12.158 +   OPEN exist_control;
  12.159 +   FETCH exist_control INTO dummy_;
  12.160 +   IF (exist_control%FOUND) THEN
  12.161 +      CLOSE exist_control;
  12.162 +      RAISE row_changed;
  12.163 +   ELSE
  12.164 +      CLOSE exist_control;
  12.165 +      RAISE row_deleted;
  12.166 +   END IF;
  12.167 +EXCEPTION
  12.168 +   WHEN row_locked THEN
  12.169 +      Error_SYS.Record_Locked(lu_name_);
  12.170 +   WHEN row_changed THEN
  12.171 +      Error_SYS.Record_Modified(lu_name_);
  12.172 +   WHEN row_deleted THEN
  12.173 +      Error_SYS.Record_Removed(lu_name_);
  12.174 +END Lock_By_Id___;
  12.175 +
  12.176 +FUNCTION Lock_By_Keys___ (
  12.177 +   person_id_ IN VARCHAR2 ) RETURN &TABLE%ROWTYPE
  12.178 +IS
  12.179 +   row_deleted EXCEPTION;
  12.180 +   rec_        &TABLE%ROWTYPE;
  12.181 +   CURSOR lock_control IS
  12.182 +      SELECT *
  12.183 +      FROM  &TABLE
  12.184 +      WHERE person_id = person_id_
  12.185 +      FOR UPDATE;
  12.186 +BEGIN
  12.187 +   OPEN lock_control;
  12.188 +   FETCH lock_control INTO rec_;
  12.189 +   IF (lock_control%FOUND) THEN
  12.190 +      CLOSE lock_control;
  12.191 +      RETURN rec_;
  12.192 +   ELSE
  12.193 +      CLOSE lock_control;
  12.194 +      RAISE row_deleted;
  12.195 +   END IF;
  12.196 +EXCEPTION
  12.197 +   WHEN row_deleted THEN
  12.198 +      Error_SYS.Record_Removed(lu_name_);
  12.199 +END Lock_By_Keys___;
  12.200 +
  12.201 +FUNCTION Get_Object_By_Id___ (
  12.202 +   objid_ IN VARCHAR2 ) RETURN &TABLE%ROWTYPE
  12.203 +IS
  12.204 +   lu_rec_ &TABLE%ROWTYPE;
  12.205 +   CURSOR getrec IS
  12.206 +      SELECT *
  12.207 +      FROM   &TABLE t
  12.208 +      WHERE  &OBJID = objid_;
  12.209 +BEGIN
  12.210 +   OPEN getrec;
  12.211 +   FETCH getrec INTO lu_rec_;
  12.212 +   IF (getrec%NOTFOUND) THEN
  12.213 +      CLOSE getrec;
  12.214 +      Error_SYS.Record_Removed(lu_name_);
  12.215 +   END IF;
  12.216 +   CLOSE getrec;
  12.217 +   RETURN(lu_rec_);
  12.218 +END Get_Object_By_Id___;
  12.219 +
  12.220 +FUNCTION Get_Object_By_Keys___ (
  12.221 +   person_id_ IN VARCHAR2 ) RETURN &TABLE%ROWTYPE
  12.222 +IS
  12.223 +   lu_rec_ &TABLE%ROWTYPE;
  12.224 +   CURSOR getrec IS
  12.225 +      SELECT *
  12.226 +      FROM  &TABLE
  12.227 +      WHERE person_id = person_id_;
  12.228 +BEGIN
  12.229 +   OPEN getrec;
  12.230 +   FETCH getrec INTO lu_rec_;
  12.231 +   CLOSE getrec;
  12.232 +   RETURN(lu_rec_);
  12.233 +END Get_Object_By_Keys___;
  12.234 +
  12.235 +FUNCTION Check_Exist___ (
  12.236 +   person_id_ IN VARCHAR2 ) RETURN BOOLEAN
  12.237 +IS
  12.238 +   dummy_ NUMBER;
  12.239 +   CURSOR exist_control IS
  12.240 +      SELECT 1
  12.241 +      FROM   &TABLE
  12.242 +      WHERE person_id = person_id_;
  12.243 +BEGIN
  12.244 +   OPEN exist_control;
  12.245 +   FETCH exist_control INTO dummy_;
  12.246 +   IF (exist_control%FOUND) THEN
  12.247 +      CLOSE exist_control;
  12.248 +      RETURN(TRUE);
  12.249 +   END IF;
  12.250 +   CLOSE exist_control;
  12.251 +   RETURN(FALSE);
  12.252 +END Check_Exist___;
  12.253 +
  12.254 +PROCEDURE Get_Id_Version_By_Keys___ (
  12.255 +   objid_      IN OUT VARCHAR2,
  12.256 +   objversion_ IN OUT VARCHAR2,
  12.257 +   person_id_ IN VARCHAR2)
  12.258 +IS
  12.259 +   CURSOR get_version IS
  12.260 +   SELECT &OBJID, &OBJVERSION
  12.261 +      FROM  &TABLE t
  12.262 +      WHERE person_id = person_id_;
  12.263 +BEGIN
  12.264 +   OPEN get_version;
  12.265 +   FETCH get_version INTO objid_, objversion_;
  12.266 +   CLOSE get_version;
  12.267 +END Get_Id_Version_By_Keys___;
  12.268 +-----------------------------------------------------------------------------
  12.269 +-------------------- IMPLEMENTATION BASE METHODS FOR INSERT -----------------
  12.270 +-----------------------------------------------------------------------------
  12.271 +-- Prepare_Insert___
  12.272 +--    Set all default values for a new instance (ON-NEW-RECORD) of this
  12.273 +--    logical unit by calling procedure Add_Attr.
  12.274 +--
  12.275 +-- Unpack_Check_Insert___
  12.276 +--    Unpack the attribute list, check all attributes from the client
  12.277 +--    and generate all default values before creation of the new object.
  12.278 +--
  12.279 +-- Insert___
  12.280 +--    Insert a new LU-instance into the database and return the values
  12.281 +--    for OBJID and OBJVERSION.
  12.282 +-----------------------------------------------------------------------------
  12.283 +
  12.284 +PROCEDURE Prepare_Insert___ (
  12.285 +   attr_ IN OUT VARCHAR2 )
  12.286 +IS
  12.287 +BEGIN
  12.288 +   Client_SYS.Clear_Attr(attr_);
  12.289 +END Prepare_Insert___;
  12.290 +
  12.291 +
  12.292 +PROCEDURE Unpack_Check_Insert___ (
  12.293 +   attr_   IN OUT VARCHAR2,
  12.294 +   newrec_ IN OUT &TABLE%ROWTYPE,
  12.295 +   dummy_rec_ IN OUT Dummy_Rec )
  12.296 +IS
  12.297 +   ptr_           NUMBER;
  12.298 +   name_          VARCHAR2(30);
  12.299 +   value_         VARCHAR2(2000);
  12.300 +   name1_         VARCHAR2(200);
  12.301 +   name4_         VARCHAR2(200);
  12.302 +BEGIN
  12.303 +   ptr_ := NULL;
  12.304 +   WHILE (Client_SYS.Get_Next_From_Attr(attr_, ptr_, name_, value_)) LOOP
  12.305 +      IF (name_ = 'PERSON_ID') THEN
  12.306 +         newrec_.person_id := value_;
  12.307 +      ELSIF (name_ = 'INTERNAL') THEN
  12.308 +         newrec_.internal := value_;
  12.309 +      ELSIF (name_ = 'FNAME') THEN
  12.310 +         dummy_rec_.name1 := value_;
  12.311 +      ELSIF (name_ = 'LNAME') THEN
  12.312 +         dummy_rec_.name4 := value_;
  12.313 +      ELSIF (name_ = 'TRAINING_INSTITUTION_NAME') THEN
  12.314 +         newrec_.training_institution_no := Training_Institution_API.Encode(value_);
  12.315 +         IF (value_ IS NOT NULL) THEN
  12.316 +            Training_Institution_API.Exist(newrec_.training_institution_no);
  12.317 +         END IF;
  12.318 +      ELSIF (name_ = 'DATE_OF_BIRTH') THEN
  12.319 +         dummy_rec_.date_of_birth := Client_SYS.Attr_Value_To_Date(value_);
  12.320 +      ELSIF (name_ = 'SEX') THEN
  12.321 +         dummy_rec_.sex := Person_Sex_API.Encode(value_);
  12.322 +         IF (value_ IS NOT NULL) THEN
  12.323 +            Person_Sex_API.Exist(value_);
  12.324 +         END IF;
  12.325 +      ELSIF (name_ = 'REMARK') THEN
  12.326 +         newrec_.remark := value_;
  12.327 +      ELSE
  12.328 +         Error_SYS.Item_Not_Exist(lu_name_, name_, value_);
  12.329 +      END IF;
  12.330 +   END LOOP;
  12.331 +   Client_SYS.Clear_Attr(attr_);
  12.332 +   Error_SYS.Check_Not_Null(lu_name_, 'PERSON_ID', newrec_.person_id);
  12.333 +   IF (dummy_rec_.name1 IS NULL) OR (dummy_rec_.name4 IS NULL) THEN
  12.334 +      Pers_API.Get_Names(name1_, name4_, newrec_.person_id);
  12.335 +      IF (dummy_rec_.name1 IS NULL) THEN
  12.336 +         dummy_rec_.name1 := name1_;
  12.337 +      END IF;
  12.338 +      IF (dummy_rec_.name4 IS NULL) THEN
  12.339 +         dummy_rec_.name4 := name4_;
  12.340 +      END IF;
  12.341 +   END IF;
  12.342 +   Error_SYS.Check_Not_Null(lu_name_, 'LNAME', dummy_rec_.name4);
  12.343 +
  12.344 +   IF (dummy_rec_.date_of_birth IS NULL) THEN
  12.345 +      dummy_rec_.date_of_birth := Pers_API.Get_Date_Of_Birth(newrec_.person_id);
  12.346 +   END IF;
  12.347 +   IF (dummy_rec_.sex IS NULL) THEN
  12.348 +      dummy_rec_.sex := Person_Sex_API.Encode(Pers_API.Get_Sex(newrec_.person_id));
  12.349 +   END IF;
  12.350 +   Error_SYS.Check_Not_Null(lu_name_, 'INTERNAL', newrec_.internal);
  12.351 +   IF (newrec_.internal = '1') THEN
  12.352 +      IF (Trainer_API.Check_Person_Internal(newrec_.person_id) = 0) THEN
  12.353 +         Error_SYS.Item_General(lu_name_, 'INTERNAL', 'EXTTYPE: Type of the trainer should be External. ');
  12.354 +      END IF;
  12.355 +   ELSE
  12.356 +      IF (Trainer_API.Check_Person_Internal(newrec_.person_id) = 1) THEN
  12.357 +         Error_SYS.Item_General(lu_name_, 'INTERNAL', 'INTTYPE: Type of the trainer should be Internal. ');
  12.358 +      END IF;
  12.359 +   END IF;
  12.360 +
  12.361 +EXCEPTION
  12.362 +   WHEN value_error THEN
  12.363 +      Error_SYS.Item_Format(lu_name_, name_, value_);
  12.364 +END Unpack_Check_Insert___;
  12.365 +
  12.366 +
  12.367 +PROCEDURE Insert___ (
  12.368 +   objid_      OUT    VARCHAR2,
  12.369 +   objversion_ OUT    VARCHAR2,
  12.370 +   newrec_     IN OUT &TABLE%ROWTYPE,
  12.371 +   attr_       IN OUT VARCHAR2,
  12.372 +   dummy_rec_  IN Dummy_Rec,
  12.373 +   get_objid_  IN BOOLEAN DEFAULT TRUE)
  12.374 +IS
  12.375 +   temp_attr_    VARCHAR2(2000);
  12.376 +   CURSOR get_objid IS
  12.377 +      SELECT &OBJID
  12.378 +      FROM  &TABLE t
  12.379 +      WHERE person_id = newrec_.person_id;
  12.380 +BEGIN
  12.381 +   newrec_.rowversion := 1;
  12.382 +   objversion_ := to_char(newrec_.rowversion);
  12.383 +   INSERT
  12.384 +      INTO trainer_tab (
  12.385 +         person_id,
  12.386 +         internal,
  12.387 +         training_institution_no,
  12.388 +         remark,
  12.389 +         rowversion)
  12.390 +      VALUES (
  12.391 +         newrec_.person_id,
  12.392 +         newrec_.internal,
  12.393 +         newrec_.training_institution_no,
  12.394 +         newrec_.remark,
  12.395 +         newrec_.rowversion);
  12.396 +--
  12.397 +-- update person register
  12.398 +--
  12.399 +   Client_SYS.Clear_Attr(temp_attr_);
  12.400 +   Client_SYS.Add_To_Attr('PERSON_ID', newrec_.person_id, temp_attr_);
  12.401 +   Client_SYS.Add_To_Attr('NAME1', dummy_rec_.name1, temp_attr_);
  12.402 +   Client_SYS.Add_To_Attr('NAME4', dummy_rec_.name4, temp_attr_);
  12.403 +   Client_SYS.Add_To_Attr('SEX', Person_Sex_API.Decode(dummy_rec_.sex), temp_attr_);
  12.404 +   Client_SYS.Add_To_Attr('DATE_OF_BIRTH', dummy_rec_.date_of_birth, temp_attr_);
  12.405 +   Pers_API.New_Modify(temp_attr_);
  12.406 +
  12.407 +   IF (get_objid_) THEN
  12.408 +      OPEN get_objid;
  12.409 +      FETCH get_objid INTO objid_;
  12.410 +      CLOSE get_objid;
  12.411 +   END IF;   
  12.412 +EXCEPTION
  12.413 +   WHEN dup_val_on_index THEN
  12.414 +      Error_SYS.Record_Exist(lu_name_);
  12.415 +END Insert___;
  12.416 +
  12.417 +-----------------------------------------------------------------------------
  12.418 +-------------------- IMPLEMENTATION BASE METHODS FOR UPDATE -----------------
  12.419 +-----------------------------------------------------------------------------
  12.420 +-- Unpack_Check_Update___
  12.421 +--    Unpack the attribute list, check all attributes from the client
  12.422 +--    and generate all default values before modifying the object.
  12.423 +--
  12.424 +-- Update___
  12.425 +--    Update an existing LU-instance in the database and return the
  12.426 +--    the new OBJVERSION.
  12.427 +-----------------------------------------------------------------------------
  12.428 +
  12.429 +PROCEDURE Unpack_Check_Update___ (
  12.430 +   attr_   IN OUT VARCHAR2,
  12.431 +   newrec_ IN OUT &TABLE%ROWTYPE,
  12.432 +   objid_  IN     VARCHAR2,
  12.433 +   dummy_rec_ IN OUT Dummy_Rec )
  12.434 +IS
  12.435 +   ptr_   NUMBER;
  12.436 +   name_  VARCHAR2(30);
  12.437 +   value_ VARCHAR2(2000);
  12.438 +   name1_ VARCHAR2(200);
  12.439 +   name4_ VARCHAR2(200);
  12.440 +
  12.441 +BEGIN
  12.442 +   ptr_ := NULL;
  12.443 +   WHILE (Client_SYS.Get_Next_From_Attr(attr_, ptr_, name_, value_)) LOOP
  12.444 +      IF (name_ = 'PERSON_ID') THEN
  12.445 +         Error_SYS.Item_Update(lu_name_, 'PERSON_ID');
  12.446 +      ELSIF (name_ = 'INTERNAL') THEN
  12.447 +         newrec_.internal := value_;
  12.448 +      ELSIF (name_ = 'FNAME') THEN
  12.449 +         dummy_rec_.name1 := value_;
  12.450 +      ELSIF (name_ = 'LNAME') THEN
  12.451 +         dummy_rec_.name4 := value_;
  12.452 +      ELSIF (name_ = 'TRAINING_INSTITUTION_NAME') THEN
  12.453 +         newrec_.training_institution_no := Training_institution_API.Encode(value_);
  12.454 +         IF (value_ IS NOT NULL) THEN
  12.455 +            Training_Institution_API.Exist(newrec_.training_institution_no);
  12.456 +         END IF;
  12.457 +      ELSIF (name_ = 'DATE_OF_BIRTH') THEN
  12.458 +         dummy_rec_.date_of_birth := Client_SYS.Attr_Value_To_Date(value_);
  12.459 +      ELSIF (name_ = 'SEX') THEN
  12.460 +         dummy_rec_.sex := Person_Sex_API.Encode(value_);
  12.461 +         IF (value_ IS NOT NULL) THEN
  12.462 +            Person_Sex_API.Exist(value_);
  12.463 +         END IF;
  12.464 +      ELSIF (name_ = 'REMARK') THEN
  12.465 +         newrec_.remark := value_;
  12.466 +      ELSE
  12.467 +         Error_SYS.Item_Not_Exist(lu_name_, name_, value_);
  12.468 +      END IF;
  12.469 +   END LOOP;
  12.470 +   Client_SYS.Clear_Attr(attr_);
  12.471 +   IF (dummy_rec_.name1 IS NULL) OR (dummy_rec_.name4 IS NULL) THEN
  12.472 +      Pers_API.Get_Names(name1_, name4_, newrec_.person_id);
  12.473 +      IF (dummy_rec_.name1 IS NULL) THEN
  12.474 +         dummy_rec_.name1 := name1_;
  12.475 +      END IF;
  12.476 +      IF (dummy_rec_.name4 IS NULL) THEN
  12.477 +         dummy_rec_.name4 := name4_;
  12.478 +      END IF;
  12.479 +   END IF;
  12.480 +   Error_SYS.Check_Not_Null(lu_name_, 'LNAME', dummy_rec_.name4);
  12.481 +
  12.482 +   IF (dummy_rec_.date_of_birth IS NULL) THEN
  12.483 +      dummy_rec_.date_of_birth := Pers_API.Get_Date_Of_Birth(newrec_.person_id);
  12.484 +   END IF;
  12.485 +   IF (dummy_rec_.sex IS NULL) THEN
  12.486 +      dummy_rec_.sex := Person_Sex_API.Encode(Pers_API.Get_Sex(newrec_.person_id));
  12.487 +   END IF;
  12.488 +   Error_SYS.Check_Not_Null(lu_name_, 'INTERNAL', newrec_.internal);
  12.489 +   IF (newrec_.internal = '1') THEN
  12.490 +      IF (Trainer_API.Check_Person_Internal(newrec_.person_id) = 0) THEN
  12.491 +         Error_SYS.Item_General(lu_name_, 'INTERNAL', 'EXTTYPE: Type of the trainer should be External. ');
  12.492 +      END IF;
  12.493 +   ELSE
  12.494 +      IF (Trainer_API.Check_Person_Internal(newrec_.person_id) = 1) THEN
  12.495 +         Error_SYS.Item_General(lu_name_, 'INTERNAL', 'INTTYPE: Type of the trainer should be Internal. ');
  12.496 +      END IF;
  12.497 +   END IF;
  12.498 +EXCEPTION
  12.499 +   WHEN value_error THEN
  12.500 +      Error_SYS.Item_Format(lu_name_, name_, value_);
  12.501 +END Unpack_Check_Update___;
  12.502 +
  12.503 +
  12.504 +PROCEDURE Update___ (
  12.505 +   objid_      IN     VARCHAR2,
  12.506 +   oldrec_     IN     &TABLE%ROWTYPE,
  12.507 +   newrec_     IN OUT &TABLE%ROWTYPE,
  12.508 +   attr_       IN OUT VARCHAR2,
  12.509 +   objversion_ IN OUT VARCHAR2,
  12.510 +   dummy_rec_   IN Dummy_Rec,
  12.511 +   by_keys_    IN     BOOLEAN DEFAULT FALSE )
  12.512 +IS
  12.513 +   temp_attr_    VARCHAR2(2000);
  12.514 +BEGIN
  12.515 +   newrec_.rowversion := newrec_.rowversion + 1;
  12.516 +   objversion_ := to_char(newrec_.rowversion);
  12.517 +   IF by_keys_ THEN
  12.518 +      UPDATE trainer_tab t
  12.519 +         SET person_id = newrec_.person_id,
  12.520 +             internal = newrec_.internal,
  12.521 +             training_institution_no = newrec_.training_institution_no,
  12.522 +             remark = newrec_.remark,
  12.523 +             rowversion = newrec_.rowversion
  12.524 +         WHERE person_id = newrec_.person_id;
  12.525 +   ELSE
  12.526 +      UPDATE trainer_tab t
  12.527 +         SET person_id = newrec_.person_id,
  12.528 +             internal = newrec_.internal,
  12.529 +             training_institution_no = newrec_.training_institution_no,
  12.530 +             remark = newrec_.remark,
  12.531 +             rowversion = newrec_.rowversion
  12.532 +         WHERE &OBJID = objid_;
  12.533 +   END IF;
  12.534 +
  12.535 +      --
  12.536 +      -- update person register
  12.537 +      --
  12.538 +      Client_SYS.Clear_Attr(temp_attr_);
  12.539 +      Client_SYS.Add_To_Attr('PERSON_ID', newrec_.person_id, temp_attr_);
  12.540 +      Client_SYS.Add_To_Attr('NAME1', dummy_rec_.name1, temp_attr_);
  12.541 +      Client_SYS.Add_To_Attr('NAME4', dummy_rec_.name4, temp_attr_);
  12.542 +      Client_SYS.Add_To_Attr('SEX', Person_Sex_API.Decode(dummy_rec_.sex), temp_attr_);
  12.543 +      Client_SYS.Add_To_Attr('DATE_OF_BIRTH', dummy_rec_.date_of_birth, temp_attr_);
  12.544 +      Pers_API.New_Modify(temp_attr_);
  12.545 +
  12.546 +EXCEPTION
  12.547 +      WHEN dup_val_on_index THEN
  12.548 +         Error_SYS.Record_Exist(lu_name_);
  12.549 +   END Update___;
  12.550 +
  12.551 +-----------------------------------------------------------------------------
  12.552 +-------------------- IMPLEMENTATION BASE METHODS FOR DELETE -----------------
  12.553 +-----------------------------------------------------------------------------
  12.554 +-- Check_Delete___
  12.555 +--    Checks whether a specific LU-record may be removed or not.
  12.556 +--    The procedure should check business rules like attribute values
  12.557 +--    as well as database constraints (defined or not).
  12.558 +--
  12.559 +-- Delete___
  12.560 +--    Deletion of the specific LU-object from the database.
  12.561 +-----------------------------------------------------------------------------
  12.562 +
  12.563 +PROCEDURE Check_Delete___ (
  12.564 +   remrec_ IN &TABLE%ROWTYPE )
  12.565 +IS
  12.566 +   key_ VARCHAR2(2000);
  12.567 +BEGIN
  12.568 +   key_ := remrec_.person_id || '^';
  12.569 +   Reference_SYS.Check_Restricted_Delete(lu_name_, key_);
  12.570 +END Check_Delete___;
  12.571 +
  12.572 +
  12.573 +PROCEDURE Delete___ (
  12.574 +   objid_  IN VARCHAR2,
  12.575 +   remrec_ IN &TABLE%ROWTYPE,
  12.576 +   by_keys_ IN BOOLEAN DEFAULT FALSE )
  12.577 +IS
  12.578 +   key_ VARCHAR2(2000);
  12.579 +   newrec_ &TABLE%ROWTYPE;
  12.580 +BEGIN
  12.581 +   key_ := remrec_.person_id || '^';
  12.582 +   Reference_SYS.Do_Cascade_Delete(lu_name_, key_);
  12.583 +   IF (by_keys_) THEN
  12.584 +      newrec_ := remrec_;
  12.585 +      DELETE FROM &TABLE
  12.586 +         WHERE person_id = newrec_.person_id;
  12.587 +   ELSE
  12.588 +      DELETE
  12.589 +         FROM  trainer_tab t
  12.590 +         WHERE &OBJID = objid_;
  12.591 +   END IF;
  12.592 +END Delete___;
  12.593 +
  12.594 +-----------------------------------------------------------------------------
  12.595 +-------------------- PRIVATE BASE METHODS -----------------------------------
  12.596 +-----------------------------------------------------------------------------
  12.597 +-- Lock__
  12.598 +--    Client-support to lock a specific instance of the logical unit.
  12.599 +--
  12.600 +-- New__
  12.601 +--    Client-support interface to create LU instances.
  12.602 +--       action_ = 'PREPARE'
  12.603 +--          Default values and handle of information to client.
  12.604 +--          The default values are set in procedure Prepare_Insert___.
  12.605 +--       action_ = 'CHECK'
  12.606 +--          Check all attributes before creating new object and handle of
  12.607 +--          information to client. The attribute list is unpacked, checked
  12.608 +--          and prepared (defaults) in procedure Unpack_Check_Insert___.
  12.609 +--       action_ = 'DO'
  12.610 +--          Creation of new instances of the logical unit and handle of
  12.611 +--          information to client. The attribute list is unpacked, checked
  12.612 +--          and prepared (defaults) in procedure Unpack_Check_Insert___
  12.613 +--          before calling procedure Insert___.
  12.614 +--
  12.615 +-- Modify__
  12.616 +--    Client-support interface to modify attributes for LU instances.
  12.617 +--       action_ = 'CHECK'
  12.618 +--          Check all attributes before modifying an existing object and
  12.619 +--          handle of information to client. The attribute list is unpacked,
  12.620 +--          checked and prepared(defaults) in procedure Unpack_Check_Update___.
  12.621 +--       action_ = 'DO'
  12.622 +--          Modification of an existing instance of the logical unit. The
  12.623 +--          procedure unpacks the attributes, checks all values before
  12.624 +--          procedure Update___ is called.
  12.625 +--
  12.626 +-- Remove__
  12.627 +--    Client-support interface to remove LU instances.
  12.628 +--       action_ = 'CHECK'
  12.629 +--          Check whether a specific LU-instance may be removed or not.
  12.630 +--          The procedure fetches the complete record by calling procedure
  12.631 +--          Get_Record___. Then the check is made by calling procedure
  12.632 +--          Check_Delete___.
  12.633 +--       action_ = 'DO'
  12.634 +--          Remove an existing instance of the logical unit. The procedure
  12.635 +--          fetches the complete LU-record, checks for a delete and then
  12.636 +--          deletes the record by calling procedure Delete___.
  12.637 +-----------------------------------------------------------------------------
  12.638 +
  12.639 +PROCEDURE Lock__ (
  12.640 +   info_       OUT VARCHAR2,
  12.641 +   objid_      IN  VARCHAR2,
  12.642 +   objversion_ IN  VARCHAR2 )
  12.643 +IS
  12.644 +   dummy_ &TABLE%ROWTYPE;
  12.645 +BEGIN
  12.646 +   General_SYS.Init_Method(lu_name_, '&PKG', 'Lock__');
  12.647 +   dummy_ := Lock_By_Id___(objid_, objversion_);
  12.648 +   info_ := Client_SYS.Get_All_Info;
  12.649 +END Lock__;
  12.650 +
  12.651 +
  12.652 +PROCEDURE New__ (
  12.653 +   info_       OUT    VARCHAR2,
  12.654 +   objid_      OUT    VARCHAR2,
  12.655 +   objversion_ OUT    VARCHAR2,
  12.656 +   attr_       IN OUT VARCHAR2,
  12.657 +   action_     IN     VARCHAR2 )
  12.658 +IS
  12.659 +   newrec_ &TABLE%ROWTYPE;
  12.660 +   dummy_rec_ Dummy_Rec;
  12.661 +BEGIN
  12.662 +   General_SYS.Init_Method(lu_name_, '&PKG', 'New__');
  12.663 +   IF (action_ = 'PREPARE') THEN
  12.664 +      Prepare_Insert___(attr_);
  12.665 +   ELSIF (action_ = 'CHECK') THEN
  12.666 +      Unpack_Check_Insert___(attr_, newrec_,dummy_rec_);
  12.667 +   ELSIF (action_ = 'DO') THEN
  12.668 +      Unpack_Check_Insert___(attr_, newrec_,dummy_rec_);
  12.669 +      Insert___(objid_, objversion_, newrec_, attr_,dummy_rec_);
  12.670 +   END IF;
  12.671 +   info_ := Client_SYS.Get_All_Info;
  12.672 +END New__;
  12.673 +
  12.674 +
  12.675 +PROCEDURE Modify__ (
  12.676 +   info_       OUT    VARCHAR2,
  12.677 +   objid_      IN     VARCHAR2,
  12.678 +   objversion_ IN OUT VARCHAR2,
  12.679 +   attr_       IN OUT VARCHAR2,
  12.680 +   action_     IN     VARCHAR2 )
  12.681 +IS
  12.682 +   oldrec_ &TABLE%ROWTYPE;
  12.683 +   newrec_ &TABLE%ROWTYPE;
  12.684 +   dummy_rec_ Dummy_Rec;
  12.685 +BEGIN
  12.686 +   General_SYS.Init_Method(lu_name_, '&PKG', 'Modify__');
  12.687 +   IF (action_ = 'CHECK') THEN
  12.688 +      newrec_ := Get_Object_By_Id___(objid_);
  12.689 +      Unpack_Check_Update___(attr_, newrec_, objid_,dummy_rec_);
  12.690 +   ELSIF (action_ = 'DO') THEN
  12.691 +      oldrec_ := Lock_By_Id___(objid_, objversion_);
  12.692 +      newrec_ := oldrec_;
  12.693 +      Unpack_Check_Update___(attr_, newrec_, objid_,dummy_rec_);
  12.694 +      Update___(objid_, oldrec_, newrec_, attr_, objversion_,dummy_rec_);
  12.695 +   END IF;
  12.696 +   info_ := Client_SYS.Get_All_Info;
  12.697 +END Modify__;
  12.698 +
  12.699 +
  12.700 +PROCEDURE Remove__ (
  12.701 +   info_       OUT VARCHAR2,
  12.702 +   objid_      IN  VARCHAR2,
  12.703 +   objversion_ IN  VARCHAR2,
  12.704 +   action_     IN  VARCHAR2 )
  12.705 +IS
  12.706 +   remrec_ &TABLE%ROWTYPE;
  12.707 +BEGIN
  12.708 +   General_SYS.Init_Method(lu_name_, '&PKG', 'Remove__');
  12.709 +   IF (action_ = 'CHECK') THEN
  12.710 +      remrec_ := Get_Object_By_Id___(objid_);
  12.711 +      Check_Delete___(remrec_);
  12.712 +   ELSIF (action_ = 'DO') THEN
  12.713 +      remrec_ := Lock_By_Id___(objid_, objversion_);
  12.714 +      Check_Delete___(remrec_);
  12.715 +      Delete___(objid_, remrec_);
  12.716 +   END IF;
  12.717 +   info_ := Client_SYS.Get_All_Info;
  12.718 +END Remove__;
  12.719 +
  12.720 +-----------------------------------------------------------------------------
  12.721 +-------------------- PUBLIC BASE METHODS ------------------------------------
  12.722 +-----------------------------------------------------------------------------
  12.723 +-- Exist
  12.724 +--   Checks if given pointer (e.g. primary key) to an instance of this
  12.725 +--   logical unit exists. If not an exception will be raised.
  12.726 +-----------------------------------------------------------------------------
  12.727 +
  12.728 +PROCEDURE Exist (
  12.729 +   person_id_ IN VARCHAR2 )
  12.730 +IS
  12.731 +BEGIN
  12.732 +   General_SYS.Init_Method(lu_name_, '&PKG', 'Exist', TRUE);
  12.733 +   IF (NOT Check_Exist___(person_id_)) THEN
  12.734 +      Error_SYS.Record_Not_Exist(lu_name_);
  12.735 +   END IF;
  12.736 +END Exist;
  12.737 +
  12.738 +-----------------------------------------------------------------------------
  12.739 +-------------------- LU SPECIFIC IMPLEMENTATION METHODS ---------------------
  12.740 +-----------------------------------------------------------------------------
  12.741 +
  12.742 +-----------------------------------------------------------------------------
  12.743 +-------------------- LU SPECIFIC PRIVATE METHODS ----------------------------
  12.744 +-----------------------------------------------------------------------------
  12.745 +
  12.746 +
  12.747 +-----------------------------------------------------------------------------
  12.748 +-------------------- LU SPECIFIC PROTECTED METHODS --------------------------
  12.749 +-----------------------------------------------------------------------------
  12.750 +
  12.751 +
  12.752 +-----------------------------------------------------------------------------
  12.753 +-------------------- LU SPECIFIC PUBLIC METHODS -----------------------------
  12.754 +-----------------------------------------------------------------------------
  12.755 +
  12.756 +FUNCTION Get_Training_Institution_Name (
  12.757 +   person_id_ IN VARCHAR2 ) RETURN VARCHAR2
  12.758 +IS
  12.759 +   temp_ &TABLE..training_institution_no%TYPE;
  12.760 +   CURSOR get_attr IS
  12.761 +      SELECT training_institution_no
  12.762 +      FROM &TABLE
  12.763 +      WHERE person_id = person_id_;
  12.764 +BEGIN
  12.765 +   OPEN get_attr;
  12.766 +   FETCH get_attr INTO temp_;
  12.767 +   CLOSE get_attr;
  12.768 +   RETURN Training_Institution_API.Decode(temp_);
  12.769 +END Get_Training_Institution_Name;
  12.770 +
  12.771 +
  12.772 +FUNCTION Get_Fname (
  12.773 +   person_id_ IN VARCHAR2 ) RETURN VARCHAR2
  12.774 +IS
  12.775 +BEGIN
  12.776 +   RETURN Pers_Api.Get_Name1(person_id_);
  12.777 +END Get_Fname;
  12.778 +
  12.779 +
  12.780 +FUNCTION Get_Lname (
  12.781 +   person_id_ IN VARCHAR2 ) RETURN VARCHAR2
  12.782 +IS
  12.783 +BEGIN
  12.784 +   RETURN Pers_Api.Get_Name4(person_id_);
  12.785 +END Get_Lname;
  12.786 +
  12.787 +FUNCTION Get_Name (
  12.788 +   person_id_ IN VARCHAR2 ) RETURN VARCHAR2
  12.789 +IS
  12.790 +BEGIN
  12.791 +   RETURN Pers_Api.Get_Name(person_id_,'FIRST');
  12.792 +END Get_Name;
  12.793 +
  12.794 +FUNCTION Check_Person_Internal(
  12.795 +   person_id_  IN VARCHAR2 ) RETURN VARCHAR2
  12.796 +IS
  12.797 +BEGIN
  12.798 +   RETURN Company_Person_API.Check_Person_Internal(person_id_);
  12.799 +END Check_Person_Internal;
  12.800 +
  12.801 +FUNCTION Get_Internal_External(
  12.802 +   internal_ IN VARCHAR2) RETURN VARCHAR2
  12.803 +IS
  12.804 +
  12.805 +BEGIN
  12.806 +   IF (internal_ = '0') THEN
  12.807 +      RETURN Relationship_Type_API.Decode(internal_ + 2);
  12.808 +   ELSIF (internal_ = '1') THEN
  12.809 +      RETURN Relationship_Type_API.Decode(internal_);
  12.810 +   END IF;
  12.811 +   RETURN null;
  12.812 +END Get_Internal_External;
  12.813 +
  12.814 +FUNCTION Replace_Person_Id (
  12.815 +   new_person_id_ IN VARCHAR2,
  12.816 +   old_person_id_ IN VARCHAR2 ) RETURN VARCHAR2
  12.817 +IS
  12.818 +   CURSOR get_pers IS
  12.819 +      SELECT &OBJID, &OBJVERSION
  12.820 +      FROM &TABLE t
  12.821 +      WHERE person_id = old_person_id_;
  12.822 +   objid_       VARCHAR2(2000);
  12.823 +   objversion_  VARCHAR2(2000);
  12.824 +   oldrec_ &TABLE%ROWTYPE;
  12.825 +BEGIN
  12.826 +   General_SYS.Init_Method(lu_name_, '&PKG', 'Replace_Person_Id');
  12.827 +   IF (new_person_id_ = old_person_id_) THEN
  12.828 +      RETURN 'TRUE';
  12.829 +   END IF;
  12.830 +   IF (Check_Exist___(new_person_id_) = TRUE) THEN
  12.831 +      RETURN 'FALSE';
  12.832 +   END IF;
  12.833 +   OPEN get_pers;
  12.834 +   FETCH get_pers INTO objid_, objversion_;
  12.835 +   WHILE (get_pers%FOUND) LOOP
  12.836 +      oldrec_ := Lock_By_Id___(objid_, objversion_);
  12.837 +      UPDATE trainer_tab t
  12.838 +      SET person_id = new_person_id_,
  12.839 +          rowversion = rowversion + 1
  12.840 +      WHERE &OBJID = objid_;
  12.841 +      FETCH get_pers INTO objid_, objversion_;
  12.842 +   END LOOP;
  12.843 +   CLOSE get_pers;
  12.844 +
  12.845 +   RETURN 'TRUE';
  12.846 +END Replace_Person_Id;
  12.847 +-----------------------------------------------------------------------------
  12.848 +-------------------- FOUNDATION1 METHODS ------------------------------------
  12.849 +-----------------------------------------------------------------------------
  12.850 +-- Init
  12.851 +--   Dummy procedure that can be called at database startup to ensure that
  12.852 +--   this package is loaded into memory for performance reasons only.
  12.853 +-----------------------------------------------------------------------------
  12.854 +
  12.855 +PROCEDURE Init
  12.856 +IS
  12.857 +BEGIN
  12.858 +   NULL;
  12.859 +END Init;
  12.860 +
  12.861 +
  12.862 +END &PKG;
  12.863 +/
  12.864 +SHOW ERROR
  12.865 +
  12.866 +-----------------------------------------------------------------------------
  12.867 +
  12.868 +
  12.869 +
  12.870 +UNDEFINE MODULE
  12.871 +UNDEFINE LU
  12.872 +UNDEFINE TABLE
  12.873 +UNDEFINE VIEW
  12.874 +UNDEFINE VIEW_LOV1
  12.875 +UNDEFINE VIEW_LOV2
  12.876 +UNDEFINE PKG
  12.877 +UNDEFINE OBJID
  12.878 +UNDEFINE OBJVERSION
  12.879 +
  12.880 +
    13.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    13.2 +++ b/PLSQL/Lexer/test/unit/data/expected/080617_75132_fndbas.cdb.structure	Wed May 15 23:04:20 2013 +0200
    13.3 @@ -0,0 +1,7 @@
    13.4 +COMMENT
    13.5 +BEGIN_END
    13.6 +DECLARE_END
    13.7 +IF
    13.8 +DECLARE_END
    13.9 +IF
   13.10 +BEGIN_END
    14.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    14.2 +++ b/PLSQL/Lexer/test/unit/data/expected/081114_78488_VMOSFA.cdb.structure	Wed May 15 23:04:20 2013 +0200
    14.3 @@ -0,0 +1,3 @@
    14.4 +COMMENT
    14.5 +COMMENT
    14.6 +TABLE_COMMENT
    15.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    15.2 +++ b/PLSQL/Lexer/test/unit/data/expected/Dictionary.apy.structure	Wed May 15 23:04:20 2013 +0200
    15.3 @@ -0,0 +1,657 @@
    15.4 +COMMENT
    15.5 +COMMENT
    15.6 +PACKAGE_BODY
    15.7 +COMMENT
    15.8 +FUNCTION_DEF
    15.9 +COMMENT
   15.10 +FUNCTION_IMPL
   15.11 +WHILE_LOOP
   15.12 +IF
   15.13 +FUNCTION_IMPL
   15.14 +CURSOR
   15.15 +COMMENT
   15.16 +COMMENT
   15.17 +COMMENT
   15.18 +COMMENT
   15.19 +COMMENT
   15.20 +COMMENT
   15.21 +COMMENT
   15.22 +COMMENT
   15.23 +COMMENT
   15.24 +COMMENT
   15.25 +COMMENT
   15.26 +COMMENT
   15.27 +COMMENT
   15.28 +COMMENT
   15.29 +COMMENT
   15.30 +COMMENT
   15.31 +COMMENT
   15.32 +COMMENT
   15.33 +COMMENT
   15.34 +COMMENT
   15.35 +CURSOR
   15.36 +COMMENT
   15.37 +CURSOR
   15.38 +COMMENT
   15.39 +CURSOR
   15.40 +COMMENT
   15.41 +CURSOR
   15.42 +COMMENT
   15.43 +CURSOR
   15.44 +COMMENT
   15.45 +CURSOR
   15.46 +PROCEDURE_IMPL
   15.47 +IF
   15.48 +IF
   15.49 +IF
   15.50 +IF
   15.51 +IF
   15.52 +IF
   15.53 +PROCEDURE_IMPL
   15.54 +CURSOR
   15.55 +PROCEDURE_IMPL
   15.56 +CURSOR
   15.57 +PROCEDURE_IMPL
   15.58 +IF
   15.59 +COMMENT
   15.60 +COMMENT
   15.61 +STATEMENT
   15.62 +PROCEDURE_IMPL
   15.63 +COMMENT
   15.64 +IF
   15.65 +IF
   15.66 +COMMENT
   15.67 +FOR_LOOP
   15.68 +COMMENT
   15.69 +COMMENT
   15.70 +IF
   15.71 +BEGIN_END
   15.72 +COMMENT
   15.73 +IF
   15.74 +COMMENT
   15.75 +IF
   15.76 +COMMENT
   15.77 +FOR_LOOP
   15.78 +COMMENT
   15.79 +COMMENT
   15.80 +IF
   15.81 +BEGIN_END
   15.82 +COMMENT
   15.83 +IF
   15.84 +COMMENT
   15.85 +COMMENT
   15.86 +IF
   15.87 +FOR_LOOP
   15.88 +PROCEDURE_IMPL
   15.89 +CURSOR
   15.90 +FUNCTION_IMPL
   15.91 +STATEMENT
   15.92 +FUNCTION_IMPL
   15.93 +IF
   15.94 +IF
   15.95 +STATEMENT
   15.96 +WHILE_LOOP
   15.97 +IF
   15.98 +WHILE_LOOP
   15.99 +IF
  15.100 +IF
  15.101 +IF
  15.102 +IF
  15.103 +COMMENT
  15.104 +COMMENT
  15.105 +STATEMENT
  15.106 +FOR_LOOP
  15.107 +COMMENT
  15.108 +PROCEDURE_IMPL
  15.109 +CURSOR
  15.110 +FUNCTION_IMPL
  15.111 +STATEMENT
  15.112 +IF
  15.113 +IF
  15.114 +STATEMENT
  15.115 +IF
  15.116 +IF
  15.117 +BEGIN_END
  15.118 +COMMENT
  15.119 +FOR_LOOP
  15.120 +LOOP
  15.121 +IF
  15.122 +FOR_LOOP
  15.123 +IF
  15.124 +IF
  15.125 +COMMENT
  15.126 +STATEMENT
  15.127 +FOR_LOOP
  15.128 +COMMENT
  15.129 +PROCEDURE_IMPL
  15.130 +CURSOR
  15.131 +FUNCTION_IMPL
  15.132 +COMMENT
  15.133 +IF
  15.134 +IF
  15.135 +STATEMENT
  15.136 +IF
  15.137 +IF
  15.138 +BEGIN_END
  15.139 +COMMENT
  15.140 +FOR_LOOP
  15.141 +LOOP
  15.142 +STATEMENT
  15.143 +FOR_LOOP
  15.144 +COMMENT
  15.145 +PROCEDURE_IMPL
  15.146 +WHILE_LOOP
  15.147 +PROCEDURE_IMPL
  15.148 +STATEMENT
  15.149 +IF
  15.150 +STATEMENT
  15.151 +COMMENT
  15.152 +COMMENT
  15.153 +STATEMENT
  15.154 +COMMENT
  15.155 +COMMENT
  15.156 +COMMENT
  15.157 +STATEMENT
  15.158 +COMMENT
  15.159 +STATEMENT
  15.160 +PROCEDURE_IMPL
  15.161 +COMMENT
  15.162 +COMMENT
  15.163 +IF
  15.164 +IF
  15.165 +COMMENT
  15.166 +COMMENT
  15.167 +IF
  15.168 +STATEMENT
  15.169 +IF
  15.170 +STATEMENT
  15.171 +IF
  15.172 +STATEMENT
  15.173 +IF
  15.174 +STATEMENT
  15.175 +COMMENT
  15.176 +COMMENT
  15.177 +COMMENT
  15.178 +IF
  15.179 +IF
  15.180 +IF
  15.181 +STATEMENT
  15.182 +STATEMENT
  15.183 +PROCEDURE_IMPL
  15.184 +CURSOR
  15.185 +CURSOR
  15.186 +COMMENT
  15.187 +COMMENT
  15.188 +COMMENT
  15.189 +IF
  15.190 +COMMENT
  15.191 +COMMENT
  15.192 +IF
  15.193 +COMMENT
  15.194 +STATEMENT
  15.195 +COMMENT
  15.196 +IF
  15.197 +FOR_LOOP
  15.198 +COMMENT
  15.199 +IF
  15.200 +IF
  15.201 +BEGIN_END
  15.202 +COMMENT
  15.203 +BEGIN_END
  15.204 +STATEMENT
  15.205 +FOR_LOOP
  15.206 +COMMENT
  15.207 +PROCEDURE_IMPL
  15.208 +COMMENT
  15.209 +CURSOR
  15.210 +COMMENT
  15.211 +CURSOR
  15.212 +COMMENT
  15.213 +COMMENT
  15.214 +IF
  15.215 +IF
  15.216 +STATEMENT
  15.217 +IF
  15.218 +STATEMENT
  15.219 +COMMENT
  15.220 +IF
  15.221 +FOR_LOOP
  15.222 +FOR_LOOP
  15.223 +IF
  15.224 +FOR_LOOP
  15.225 +COMMENT
  15.226 +IF
  15.227 +IF
  15.228 +COMMENT
  15.229 +COMMENT
  15.230 +IF
  15.231 +COMMENT
  15.232 +COMMENT
  15.233 +BEGIN_END
  15.234 +IF
  15.235 +STATEMENT
  15.236 +IF
  15.237 +STATEMENT
  15.238 +FOR_LOOP
  15.239 +COMMENT
  15.240 +PROCEDURE_IMPL
  15.241 +CURSOR
  15.242 +CURSOR
  15.243 +COMMENT
  15.244 +COMMENT
  15.245 +COMMENT
  15.246 +IF
  15.247 +COMMENT
  15.248 +COMMENT
  15.249 +IF
  15.250 +COMMENT
  15.251 +STATEMENT
  15.252 +COMMENT
  15.253 +COMMENT
  15.254 +COMMENT
  15.255 +IF
  15.256 +FOR_LOOP
  15.257 +COMMENT
  15.258 +IF
  15.259 +IF
  15.260 +COMMENT
  15.261 +COMMENT
  15.262 +BEGIN_END
  15.263 +STATEMENT
  15.264 +FOR_LOOP
  15.265 +PROCEDURE_IMPL
  15.266 +CURSOR
  15.267 +CURSOR
  15.268 +CURSOR
  15.269 +CURSOR
  15.270 +COMMENT
  15.271 +COMMENT
  15.272 +COMMENT
  15.273 +IF
  15.274 +COMMENT
  15.275 +COMMENT
  15.276 +IF
  15.277 +COMMENT
  15.278 +STATEMENT
  15.279 +COMMENT
  15.280 +COMMENT
  15.281 +COMMENT
  15.282 +IF
  15.283 +FOR_LOOP
  15.284 +IF
  15.285 +IF
  15.286 +COMMENT
  15.287 +COMMENT
  15.288 +BEGIN_END
  15.289 +STATEMENT
  15.290 +FOR_LOOP
  15.291 +COMMENT
  15.292 +COMMENT
  15.293 +COMMENT
  15.294 +COMMENT
  15.295 +IF
  15.296 +IF
  15.297 +COMMENT
  15.298 +COMMENT
  15.299 +COMMENT
  15.300 +IF
  15.301 +COMMENT
  15.302 +FOR_LOOP
  15.303 +COMMENT
  15.304 +IF
  15.305 +IF
  15.306 +COMMENT
  15.307 +BEGIN_END
  15.308 +STATEMENT
  15.309 +IF
  15.310 +STATEMENT
  15.311 +COMMENT
  15.312 +COMMENT
  15.313 +COMMENT
  15.314 +IF
  15.315 +IF
  15.316 +COMMENT
  15.317 +COMMENT
  15.318 +COMMENT
  15.319 +COMMENT
  15.320 +STATEMENT
  15.321 +COMMENT
  15.322 +COMMENT
  15.323 +COMMENT
  15.324 +IF
  15.325 +COMMENT
  15.326 +COMMENT
  15.327 +COMMENT
  15.328 +COMMENT
  15.329 +COMMENT
  15.330 +COMMENT
  15.331 +COMMENT
  15.332 +IF
  15.333 +IF
  15.334 +COMMENT
  15.335 +COMMENT
  15.336 +IF
  15.337 +IF
  15.338 +COMMENT
  15.339 +IF
  15.340 +COMMENT
  15.341 +IF
  15.342 +IF
  15.343 +IF
  15.344 +COMMENT
  15.345 +IF
  15.346 +IF
  15.347 +COMMENT
  15.348 +COMMENT
  15.349 +COMMENT
  15.350 +IF
  15.351 +COMMENT
  15.352 +COMMENT
  15.353 +IF
  15.354 +COMMENT
  15.355 +COMMENT
  15.356 +COMMENT
  15.357 +COMMENT
  15.358 +COMMENT
  15.359 +FOR_LOOP
  15.360 +FOR_LOOP
  15.361 +COMMENT
  15.362 +IF
  15.363 +IF
  15.364 +IF
  15.365 +IF
  15.366 +COMMENT
  15.367 +COMMENT
  15.368 +IF
  15.369 +COMMENT
  15.370 +IF
  15.371 +IF
  15.372 +COMMENT
  15.373 +COMMENT
  15.374 +COMMENT
  15.375 +COMMENT
  15.376 +COMMENT
  15.377 +COMMENT
  15.378 +COMMENT
  15.379 +COMMENT
  15.380 +COMMENT
  15.381 +COMMENT
  15.382 +IF
  15.383 +COMMENT
  15.384 +COMMENT
  15.385 +IF
  15.386 +COMMENT
  15.387 +IF
  15.388 +STATEMENT
  15.389 +FOR_LOOP
  15.390 +IF
  15.391 +IF
  15.392 +IF
  15.393 +IF
  15.394 +IF
  15.395 +IF
  15.396 +COMMENT
  15.397 +COMMENT
  15.398 +COMMENT
  15.399 +IF
  15.400 +COMMENT
  15.401 +COMMENT
  15.402 +COMMENT
  15.403 +STATEMENT
  15.404 +STATEMENT
  15.405 +STATEMENT
  15.406 +STATEMENT
  15.407 +STATEMENT
  15.408 +COMMENT
  15.409 +COMMENT
  15.410 +COMMENT
  15.411 +COMMENT
  15.412 +COMMENT
  15.413 +STATEMENT
  15.414 +COMMENT
  15.415 +COMMENT
  15.416 +COMMENT
  15.417 +COMMENT
  15.418 +COMMENT
  15.419 +STATEMENT
  15.420 +COMMENT
  15.421 +COMMENT
  15.422 +COMMENT
  15.423 +COMMENT
  15.424 +STATEMENT
  15.425 +COMMENT
  15.426 +COMMENT
  15.427 +COMMENT
  15.428 +COMMENT
  15.429 +COMMENT
  15.430 +COMMENT
  15.431 +PROCEDURE_IMPL
  15.432 +CURSOR
  15.433 +COMMENT
  15.434 +COMMENT
  15.435 +COMMENT
  15.436 +COMMENT
  15.437 +COMMENT
  15.438 +COMMENT
  15.439 +COMMENT
  15.440 +FOR_LOOP
  15.441 +IF
  15.442 +COMMENT
  15.443 +COMMENT
  15.444 +COMMENT
  15.445 +PROCEDURE_IMPL
  15.446 +PROCEDURE_IMPL
  15.447 +PROCEDURE_IMPL
  15.448 +FUNCTION_IMPL
  15.449 +CURSOR
  15.450 +IF
  15.451 +FOR_LOOP
  15.452 +PROCEDURE_IMPL
  15.453 +FUNCTION_IMPL
  15.454 +CURSOR
  15.455 +IF
  15.456 +FOR_LOOP
  15.457 +PROCEDURE_IMPL
  15.458 +CURSOR
  15.459 +CURSOR
  15.460 +IF
  15.461 +IF
  15.462 +IF
  15.463 +FOR_LOOP
  15.464 +PROCEDURE_IMPL
  15.465 +CURSOR
  15.466 +IF
  15.467 +FOR_LOOP
  15.468 +FUNCTION_IMPL
  15.469 +FUNCTION_IMPL
  15.470 +COMMENT
  15.471 +COMMENT
  15.472 +FUNCTION_IMPL
  15.473 +COMMENT
  15.474 +COMMENT
  15.475 +IF
  15.476 +IF
  15.477 +FUNCTION_IMPL
  15.478 +COMMENT
  15.479 +COMMENT
  15.480 +FOR_LOOP
  15.481 +IF
  15.482 +IF
  15.483 +COMMENT
  15.484 +IF
  15.485 +IF
  15.486 +COMMENT
  15.487 +FUNCTION_IMPL
  15.488 +COMMENT
  15.489 +COMMENT
  15.490 +COMMENT
  15.491 +IF
  15.492 +IF
  15.493 +COMMENT
  15.494 +IF
  15.495 +COMMENT
  15.496 +FUNCTION_IMPL
  15.497 +CURSOR
  15.498 +FUNCTION_IMPL
  15.499 +CURSOR
  15.500 +COMMENT
  15.501 +IF
  15.502 +FUNCTION_IMPL
  15.503 +CURSOR
  15.504 +IF
  15.505 +COMMENT
  15.506 +PROCEDURE_IMPL
  15.507 +COMMENT
  15.508 +CURSOR
  15.509 +CURSOR
  15.510 +COMMENT
  15.511 +COMMENT
  15.512 +IF
  15.513 +COMMENT
  15.514 +FOR_LOOP
  15.515 +IF
  15.516 +COMMENT
  15.517 +BEGIN_END
  15.518 +COMMENT
  15.519 +IF
  15.520 +COMMENT
  15.521 +PROCEDURE_IMPL
  15.522 +CURSOR
  15.523 +COMMENT
  15.524 +IF
  15.525 +FOR_LOOP
  15.526 +COMMENT
  15.527 +PROCEDURE_IMPL
  15.528 +CURSOR
  15.529 +FOR_LOOP
  15.530 +PROCEDURE_IMPL
  15.531 +CURSOR
  15.532 +IF
  15.533 +FOR_LOOP
  15.534 +COMMENT
  15.535 +PROCEDURE_IMPL
  15.536 +CURSOR
  15.537 +IF
  15.538 +FOR_LOOP
  15.539 +COMMENT
  15.540 +PROCEDURE_IMPL
  15.541 +CURSOR
  15.542 +IF
  15.543 +FOR_LOOP
  15.544 +COMMENT
  15.545 +PROCEDURE_IMPL
  15.546 +CURSOR
  15.547 +FOR_LOOP
  15.548 +COMMENT
  15.549 +COMMENT
  15.550 +PROCEDURE_IMPL
  15.551 +PROCEDURE_IMPL
  15.552 +PROCEDURE_IMPL
  15.553 +PROCEDURE_IMPL
  15.554 +CURSOR
  15.555 +CURSOR
  15.556 +IF
  15.557 +IF
  15.558 +IF
  15.559 +IF
  15.560 +COMMENT
  15.561 +COMMENT
  15.562 +FUNCTION_IMPL
  15.563 +CURSOR
  15.564 +FUNCTION_IMPL
  15.565 +CURSOR
  15.566 +CURSOR
  15.567 +IF
  15.568 +IF
  15.569 +IF
  15.570 +FUNCTION_IMPL
  15.571 +CURSOR
  15.572 +CURSOR
  15.573 +IF
  15.574 +IF
  15.575 +IF
  15.576 +FUNCTION_IMPL
  15.577 +CURSOR
  15.578 +FUNCTION_IMPL
  15.579 +CURSOR
  15.580 +COMMENT
  15.581 +IF
  15.582 +IF
  15.583 +IF
  15.584 +IF
  15.585 +FUNCTION_IMPL
  15.586 +CURSOR
  15.587 +COMMENT
  15.588 +IF
  15.589 +IF
  15.590 +IF
  15.591 +IF
  15.592 +FUNCTION_IMPL
  15.593 +CURSOR
  15.594 +COMMENT
  15.595 +IF
  15.596 +IF
  15.597 +IF
  15.598 +IF
  15.599 +FUNCTION_IMPL
  15.600 +CURSOR
  15.601 +COMMENT
  15.602 +IF
  15.603 +IF
  15.604 +IF
  15.605 +IF
  15.606 +FUNCTION_IMPL
  15.607 +CURSOR
  15.608 +IF
  15.609 +IF
  15.610 +FUNCTION_IMPL
  15.611 +IF
  15.612 +IF
  15.613 +FUNCTION_IMPL
  15.614 +IF
  15.615 +IF
  15.616 +FUNCTION_IMPL
  15.617 +IF
  15.618 +IF
  15.619 +FUNCTION_IMPL
  15.620 +IF
  15.621 +IF
  15.622 +FUNCTION_IMPL
  15.623 +IF
  15.624 +IF
  15.625 +FUNCTION_IMPL
  15.626 +CURSOR
  15.627 +IF
  15.628 +COMMENT
  15.629 +IF
  15.630 +COMMENT
  15.631 +FUNCTION_IMPL
  15.632 +CURSOR
  15.633 +IF
  15.634 +COMMENT
  15.635 +IF
  15.636 +COMMENT
  15.637 +FUNCTION_IMPL
  15.638 +CURSOR
  15.639 +IF
  15.640 +COMMENT
  15.641 +IF
  15.642 +COMMENT
  15.643 +FUNCTION_IMPL
  15.644 +CURSOR
  15.645 +IF
  15.646 +COMMENT
  15.647 +IF
  15.648 +COMMENT
  15.649 +FUNCTION_IMPL
  15.650 +CURSOR
  15.651 +IF
  15.652 +COMMENT
  15.653 +IF
  15.654 +IF
  15.655 +COMMENT
  15.656 +PROCEDURE_IMPL
  15.657 +FUNCTION_IMPL
  15.658 +COMMENT
  15.659 +PROCEDURE_IMPL
  15.660 +COMMENT
    16.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    16.2 +++ b/PLSQL/Lexer/test/unit/data/expected/FavoriteSchedules.apy.structure	Wed May 15 23:04:20 2013 +0200
    16.3 @@ -0,0 +1,88 @@
    16.4 +COMMENT
    16.5 +COMMENT
    16.6 +VIEW
    16.7 +TABLE_COMMENT
    16.8 +COLUMN_COMMENT
    16.9 +COMMENT
   16.10 +PACKAGE_BODY
   16.11 +COMMENT
   16.12 +COMMENT
   16.13 +FUNCTION_IMPL
   16.14 +CURSOR
   16.15 +CURSOR
   16.16 +IF
   16.17 +IF
   16.18 +IF
   16.19 +FUNCTION_IMPL
   16.20 +CURSOR
   16.21 +IF
   16.22 +IF
   16.23 +FUNCTION_IMPL
   16.24 +CURSOR
   16.25 +IF
   16.26 +FUNCTION_IMPL
   16.27 +CURSOR
   16.28 +FUNCTION_IMPL
   16.29 +CURSOR
   16.30 +IF
   16.31 +PROCEDURE_IMPL
   16.32 +CURSOR
   16.33 +COMMENT
   16.34 +PROCEDURE_IMPL
   16.35 +PROCEDURE_IMPL
   16.36 +WHILE_LOOP
   16.37 +IF
   16.38 +IF
   16.39 +IF
   16.40 +IF
   16.41 +IF
   16.42 +IF
   16.43 +PROCEDURE_IMPL
   16.44 +STATEMENT
   16.45 +COMMENT
   16.46 +PROCEDURE_IMPL
   16.47 +WHILE_LOOP
   16.48 +IF
   16.49 +IF
   16.50 +IF
   16.51 +IF
   16.52 +IF
   16.53 +IF
   16.54 +PROCEDURE_IMPL
   16.55 +IF
   16.56 +STATEMENT
   16.57 +IF
   16.58 +STATEMENT
   16.59 +COMMENT
   16.60 +PROCEDURE_IMPL
   16.61 +PROCEDURE_IMPL
   16.62 +STATEMENT
   16.63 +COMMENT
   16.64 +PROCEDURE_IMPL
   16.65 +PROCEDURE_IMPL
   16.66 +IF
   16.67 +IF
   16.68 +IF
   16.69 +PROCEDURE_IMPL
   16.70 +IF
   16.71 +IF
   16.72 +PROCEDURE_IMPL
   16.73 +IF
   16.74 +IF
   16.75 +COMMENT
   16.76 +PROCEDURE_IMPL
   16.77 +IF
   16.78 +COMMENT
   16.79 +COMMENT
   16.80 +COMMENT
   16.81 +COMMENT
   16.82 +PROCEDURE_IMPL
   16.83 +IF
   16.84 +IF
   16.85 +IF
   16.86 +IF
   16.87 +FUNCTION_IMPL
   16.88 +IF
   16.89 +COMMENT
   16.90 +PROCEDURE_IMPL
   16.91 +COMMENT
    17.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    17.2 +++ b/PLSQL/Lexer/test/unit/data/expected/FndEvent.api.structure	Wed May 15 23:04:20 2013 +0200
    17.3 @@ -0,0 +1,23 @@
    17.4 +COMMENT
    17.5 +PACKAGE
    17.6 +COMMENT
    17.7 +PROCEDURE_DEF
    17.8 +PROCEDURE_DEF
    17.9 +PROCEDURE_DEF
   17.10 +PROCEDURE_DEF
   17.11 +COMMENT
   17.12 +PROCEDURE_DEF
   17.13 +COMMENT
   17.14 +PROCEDURE_DEF
   17.15 +COMMENT
   17.16 +COMMENT
   17.17 +FUNCTION_DEF
   17.18 +FUNCTION_DEF
   17.19 +PROCEDURE_DEF
   17.20 +PROCEDURE_DEF
   17.21 +PROCEDURE_DEF
   17.22 +PROCEDURE_DEF
   17.23 +FUNCTION_DEF
   17.24 +COMMENT
   17.25 +PROCEDURE_DEF
   17.26 +COMMENT
    18.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    18.2 +++ b/PLSQL/Lexer/test/unit/data/expected/FndEvent.apy.structure	Wed May 15 23:04:20 2013 +0200
    18.3 @@ -0,0 +1,255 @@
    18.4 +COMMENT
    18.5 +COMMENT
    18.6 +VIEW
    18.7 +TABLE_COMMENT
    18.8 +COLUMN_COMMENT
    18.9 +COMMENT
   18.10 +PACKAGE_BODY
   18.11 +COMMENT
   18.12 +PROCEDURE_DEF
   18.13 +PROCEDURE_DEF
   18.14 +FUNCTION_DEF
   18.15 +PROCEDURE_DEF
   18.16 +PROCEDURE_DEF
   18.17 +FUNCTION_DEF
   18.18 +COMMENT
   18.19 +FUNCTION_IMPL
   18.20 +CURSOR
   18.21 +CURSOR
   18.22 +IF
   18.23 +IF
   18.24 +IF
   18.25 +FUNCTION_IMPL
   18.26 +CURSOR
   18.27 +IF
   18.28 +IF
   18.29 +FUNCTION_IMPL
   18.30 +CURSOR
   18.31 +IF
   18.32 +FUNCTION_IMPL
   18.33 +CURSOR
   18.34 +FUNCTION_IMPL
   18.35 +CURSOR
   18.36 +IF
   18.37 +PROCEDURE_IMPL
   18.38 +CURSOR
   18.39 +COMMENT
   18.40 +PROCEDURE_IMPL
   18.41 +PROCEDURE_IMPL
   18.42 +WHILE_LOOP
   18.43 +IF
   18.44 +IF
   18.45 +IF
   18.46 +IF
   18.47 +IF
   18.48 +IF
   18.49 +IF
   18.50 +IF
   18.51 +IF
   18.52 +IF
   18.53 +IF
   18.54 +IF
   18.55 +IF
   18.56 +IF
   18.57 +IF
   18.58 +IF
   18.59 +IF
   18.60 +IF
   18.61 +IF
   18.62 +IF
   18.63 +IF
   18.64 +IF
   18.65 +IF
   18.66 +PROCEDURE_IMPL
   18.67 +COMMENT
   18.68 +IF
   18.69 +COMMENT
   18.70 +STATEMENT
   18.71 +COMMENT
   18.72 +IF
   18.73 +IF
   18.74 +COMMENT
   18.75 +PROCEDURE_IMPL
   18.76 +WHILE_LOOP
   18.77 +IF
   18.78 +IF
   18.79 +IF
   18.80 +IF
   18.81 +IF
   18.82 +IF
   18.83 +IF
   18.84 +IF
   18.85 +IF
   18.86 +IF
   18.87 +IF
   18.88 +IF
   18.89 +IF
   18.90 +IF
   18.91 +IF
   18.92 +IF
   18.93 +IF
   18.94 +IF
   18.95 +IF
   18.96 +IF
   18.97 +IF
   18.98 +IF
   18.99 +IF
  18.100 +PROCEDURE_IMPL
  18.101 +CURSOR
  18.102 +IF
  18.103 +IF
  18.104 +COMMENT
  18.105 +IF
  18.106 +STATEMENT
  18.107 +IF
  18.108 +STATEMENT
  18.109 +COMMENT
  18.110 +IF
  18.111 +IF
  18.112 +IF
  18.113 +COMMENT
  18.114 +PROCEDURE_IMPL
  18.115 +PROCEDURE_IMPL
  18.116 +STATEMENT
  18.117 +COMMENT
  18.118 +IF
  18.119 +COMMENT
  18.120 +PROCEDURE_IMPL
  18.121 +PROCEDURE_IMPL
  18.122 +IF
  18.123 +IF
  18.124 +IF
  18.125 +PROCEDURE_IMPL
  18.126 +IF
  18.127 +IF
  18.128 +PROCEDURE_IMPL
  18.129 +IF
  18.130 +IF
  18.131 +COMMENT
  18.132 +PROCEDURE_IMPL
  18.133 +IF
  18.134 +COMMENT
  18.135 +PROCEDURE_IMPL
  18.136 +COMMENT
  18.137 +IF
  18.138 +IF
  18.139 +IF
  18.140 +PROCEDURE_IMPL
  18.141 +COMMENT
  18.142 +CURSOR
  18.143 +COMMENT
  18.144 +FUNCTION_IMPL
  18.145 +COMMENT
  18.146 +FUNCTION_IMPL
  18.147 +CASE
  18.148 +CASE
  18.149 +CASE
  18.150 +COMMENT
  18.151 +FUNCTION_IMPL
  18.152 +IF
  18.153 +COMMENT
  18.154 +LOOP
  18.155 +COMMENT
  18.156 +IF
  18.157 +COMMENT
  18.158 +IF
  18.159 +COMMENT
  18.160 +COMMENT
  18.161 +FUNCTION_IMPL
  18.162 +IF
  18.163 +COMMENT
  18.164 +IF
  18.165 +LOOP
  18.166 +IF
  18.167 +COMMENT
  18.168 +IF
  18.169 +COMMENT
  18.170 +IF
  18.171 +IF
  18.172 +COMMENT
  18.173 +COMMENT
  18.174 +FUNCTION_IMPL
  18.175 +COMMENT
  18.176 +CURSOR
  18.177 +IF
  18.178 +COMMENT
  18.179 +FOR_LOOP
  18.180 +IF
  18.181 +IF
  18.182 +IF
  18.183 +CASE
  18.184 +CASE
  18.185 +COMMENT
  18.186 +IF
  18.187 +IF
  18.188 +CASE
  18.189 +COMMENT
  18.190 +FOR_LOOP
  18.191 +IF
  18.192 +IF
  18.193 +IF
  18.194 +IF
  18.195 +COMMENT
  18.196 +IF
  18.197 +IF
  18.198 +IF
  18.199 +IF
  18.200 +COMMENT
  18.201 +FUNCTION_IMPL
  18.202 +CASE
  18.203 +CASE
  18.204 +CASE
  18.205 +PROCEDURE_IMPL
  18.206 +COMMENT
  18.207 +IF
  18.208 +IF
  18.209 +IF
  18.210 +PROCEDURE_IMPL
  18.211 +COMMENT
  18.212 +FUNCTION_IMPL
  18.213 +COMMENT
  18.214 +PROCEDURE_IMPL
  18.215 +CURSOR
  18.216 +COMMENT
  18.217 +COMMENT
  18.218 +IF
  18.219 +COMMENT
  18.220 +COMMENT
  18.221 +COMMENT
  18.222 +COMMENT
  18.223 +COMMENT
  18.224 +COMMENT
  18.225 +FOR_LOOP
  18.226 +COMMENT
  18.227 +COMMENT
  18.228 +FUNCTION_IMPL
  18.229 +CURSOR
  18.230 +FUNCTION_IMPL
  18.231 +CURSOR
  18.232 +IF
  18.233 +IF
  18.234 +PROCEDURE_IMPL
  18.235 +IF
  18.236 +STATEMENT
  18.237 +IF
  18.238 +IF
  18.239 +PROCEDURE_IMPL
  18.240 +IF
  18.241 +STATEMENT
  18.242 +IF
  18.243 +STATEMENT
  18.244 +IF
  18.245 +STATEMENT
  18.246 +PROCEDURE_IMPL
  18.247 +IF
  18.248 +STATEMENT
  18.249 +STATEMENT
  18.250 +PROCEDURE_IMPL
  18.251 +STATEMENT
  18.252 +IF
  18.253 +STATEMENT
  18.254 +FUNCTION_IMPL
  18.255 +CURSOR
  18.256 +COMMENT
  18.257 +PROCEDURE_IMPL
  18.258 +COMMENT
    19.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    19.2 +++ b/PLSQL/Lexer/test/unit/data/expected/IdentityPayInfo.apy.structure	Wed May 15 23:04:20 2013 +0200
    19.3 @@ -0,0 +1,453 @@
    19.4 +COMMENT
    19.5 +COMMENT
    19.6 +VIEW
    19.7 +TABLE_COMMENT
    19.8 +COLUMN_COMMENT
    19.9 +COMMENT
   19.10 +VIEW
   19.11 +TABLE_COMMENT
   19.12 +COLUMN_COMMENT
   19.13 +COMMENT
   19.14 +COMMENT
   19.15 +VIEW
   19.16 +TABLE_COMMENT
   19.17 +COLUMN_COMMENT
   19.18 +COMMENT
   19.19 +COMMENT
   19.20 +VIEW
   19.21 +TABLE_COMMENT
   19.22 +COLUMN_COMMENT
   19.23 +COMMENT
   19.24 +COMMENT
   19.25 +VIEW
   19.26 +TABLE_COMMENT
   19.27 +COLUMN_COMMENT
   19.28 +COMMENT
   19.29 +COMMENT
   19.30 +VIEW
   19.31 +TABLE_COMMENT
   19.32 +COLUMN_COMMENT
   19.33 +COMMENT
   19.34 +VIEW
   19.35 +TABLE_COMMENT
   19.36 +COLUMN_COMMENT
   19.37 +VIEW
   19.38 +TABLE_COMMENT
   19.39 +COLUMN_COMMENT
   19.40 +COMMENT
   19.41 +VIEW
   19.42 +TABLE_COMMENT
   19.43 +COLUMN_COMMENT
   19.44 +COMMENT
   19.45 +VIEW
   19.46 +TABLE_COMMENT
   19.47 +COLUMN_COMMENT
   19.48 +VIEW
   19.49 +TABLE_COMMENT
   19.50 +COLUMN_COMMENT
   19.51 +VIEW
   19.52 +TABLE_COMMENT
   19.53 +COLUMN_COMMENT
   19.54 +COMMENT
   19.55 +PACKAGE_BODY
   19.56 +COMMENT
   19.57 +PROCEDURE_DEF
   19.58 +FUNCTION_DEF
   19.59 +PROCEDURE_DEF
   19.60 +PROCEDURE_DEF
   19.61 +PROCEDURE_DEF
   19.62 +PROCEDURE_DEF
   19.63 +PROCEDURE_DEF
   19.64 +COMMENT
   19.65 +FUNCTION_IMPL
   19.66 +CURSOR
   19.67 +CURSOR
   19.68 +IF
   19.69 +IF
   19.70 +IF
   19.71 +FUNCTION_IMPL
   19.72 +CURSOR
   19.73 +IF
   19.74 +IF
   19.75 +FUNCTION_IMPL
   19.76 +CURSOR
   19.77 +IF
   19.78 +FUNCTION_IMPL
   19.79 +CURSOR
   19.80 +FUNCTION_IMPL
   19.81 +CURSOR
   19.82 +IF
   19.83 +PROCEDURE_IMPL
   19.84 +CURSOR
   19.85 +COMMENT
   19.86 +PROCEDURE_IMPL
   19.87 +COMMENT
   19.88 +IF
   19.89 +IF
   19.90 +PROCEDURE_IMPL
   19.91 +WHILE_LOOP
   19.92 +IF
   19.93 +IF
   19.94 +IF
   19.95 +IF
   19.96 +IF
   19.97 +IF
   19.98 +IF
   19.99 +IF
  19.100 +IF
  19.101 +IF
  19.102 +IF
  19.103 +IF
  19.104 +IF
  19.105 +IF
  19.106 +IF
  19.107 +IF
  19.108 +IF
  19.109 +IF
  19.110 +IF
  19.111 +IF
  19.112 +IF
  19.113 +IF
  19.114 +IF
  19.115 +IF
  19.116 +IF
  19.117 +IF
  19.118 +IF
  19.119 +IF
  19.120 +IF
  19.121 +IF
  19.122 +IF
  19.123 +IF
  19.124 +IF
  19.125 +IF
  19.126 +IF
  19.127 +IF
  19.128 +IF
  19.129 +IF
  19.130 +IF
  19.131 +IF
  19.132 +IF
  19.133 +IF
  19.134 +IF
  19.135 +IF
  19.136 +IF
  19.137 +IF
  19.138 +IF
  19.139 +IF
  19.140 +IF
  19.141 +IF
  19.142 +IF
  19.143 +IF
  19.144 +IF
  19.145 +PROCEDURE_IMPL
  19.146 +CURSOR
  19.147 +STATEMENT
  19.148 +COMMENT
  19.149 +PROCEDURE_IMPL
  19.150 +WHILE_LOOP
  19.151 +IF
  19.152 +IF
  19.153 +IF
  19.154 +IF
  19.155 +IF
  19.156 +IF
  19.157 +IF
  19.158 +IF
  19.159 +IF
  19.160 +IF
  19.161 +IF
  19.162 +IF
  19.163 +IF
  19.164 +IF
  19.165 +IF
  19.166 +IF
  19.167 +IF
  19.168 +IF
  19.169 +IF
  19.170 +IF
  19.171 +IF
  19.172 +IF
  19.173 +IF
  19.174 +IF
  19.175 +IF
  19.176 +IF
  19.177 +IF
  19.178 +IF
  19.179 +IF
  19.180 +IF
  19.181 +IF
  19.182 +IF
  19.183 +IF
  19.184 +IF
  19.185 +IF
  19.186 +IF
  19.187 +IF
  19.188 +IF
  19.189 +IF
  19.190 +IF
  19.191 +IF
  19.192 +IF
  19.193 +IF
  19.194 +IF
  19.195 +IF
  19.196 +IF
  19.197 +IF
  19.198 +IF
  19.199 +IF
  19.200 +IF
  19.201 +IF
  19.202 +IF
  19.203 +IF
  19.204 +PROCEDURE_IMPL
  19.205 +IF
  19.206 +STATEMENT
  19.207 +IF
  19.208 +STATEMENT
  19.209 +COMMENT
  19.210 +PROCEDURE_IMPL
  19.211 +PROCEDURE_IMPL
  19.212 +STATEMENT
  19.213 +COMMENT
  19.214 +PROCEDURE_IMPL
  19.215 +PROCEDURE_IMPL
  19.216 +IF
  19.217 +IF
  19.218 +IF
  19.219 +PROCEDURE_IMPL
  19.220 +IF
  19.221 +IF
  19.222 +PROCEDURE_IMPL
  19.223 +IF
  19.224 +IF
  19.225 +COMMENT
  19.226 +PROCEDURE_IMPL
  19.227 +IF
  19.228 +COMMENT
  19.229 +IF
  19.230 +COMMENT
  19.231 +COMMENT
  19.232 +IF
  19.233 +COMMENT
  19.234 +IF
  19.235 +PROCEDURE_IMPL
  19.236 +IF
  19.237 +IF
  19.238 +IF
  19.239 +COMMENT
  19.240 +PROCEDURE_IMPL
  19.241 +IF
  19.242 +FUNCTION_IMPL
  19.243 +CURSOR
  19.244 +IF
  19.245 +PROCEDURE_IMPL
  19.246 +CURSOR
  19.247 +CURSOR
  19.248 +CURSOR
  19.249 +FOR_LOOP
  19.250 +IF
  19.251 +IF
  19.252 +IF
  19.253 +FOR_LOOP
  19.254 +IF
  19.255 +IF
  19.256 +IF
  19.257 +FOR_LOOP
  19.258 +IF
  19.259 +IF
  19.260 +IF
  19.261 +PROCEDURE_IMPL
  19.262 +CURSOR
  19.263 +COMMENT
  19.264 +CURSOR
  19.265 +COMMENT
  19.266 +IF
  19.267 +IF
  19.268 +IF
  19.269 +FOR_LOOP
  19.270 +IF
  19.271 +IF
  19.272 +IF
  19.273 +IF
  19.274 +IF
  19.275 +IF
  19.276 +IF
  19.277 +IF
  19.278 +IF
  19.279 +IF
  19.280 +IF
  19.281 +IF
  19.282 +IF
  19.283 +IF
  19.284 +IF
  19.285 +IF
  19.286 +COMMENT
  19.287 +COMMENT
  19.288 +IF
  19.289 +PROCEDURE_IMPL
  19.290 +CURSOR
  19.291 +CURSOR
  19.292 +IF
  19.293 +IF
  19.294 +IF
  19.295 +FOR_LOOP
  19.296 +STATEMENT
  19.297 +COMMENT
  19.298 +COMMENT
  19.299 +IF
  19.300 +PROCEDURE_IMPL
  19.301 +CURSOR
  19.302 +FOR_LOOP
  19.303 +COMMENT
  19.304 +PROCEDURE_IMPL
  19.305 +CURSOR
  19.306 +FOR_LOOP
  19.307 +PROCEDURE_IMPL
  19.308 +CURSOR
  19.309 +FOR_LOOP
  19.310 +PROCEDURE_IMPL
  19.311 +CURSOR
  19.312 +FOR_LOOP
  19.313 +PROCEDURE_IMPL
  19.314 +CURSOR
  19.315 +FOR_LOOP
  19.316 +FUNCTION_IMPL
  19.317 +CURSOR
  19.318 +FOR_LOOP
  19.319 +FUNCTION_IMPL
  19.320 +CURSOR
  19.321 +FOR_LOOP
  19.322 +COMMENT
  19.323 +COMMENT
  19.324 +FUNCTION_IMPL
  19.325 +FUNCTION_IMPL
  19.326 +FUNCTION_IMPL
  19.327 +FUNCTION_IMPL
  19.328 +FUNCTION_IMPL
  19.329 +FUNCTION_IMPL
  19.330 +CURSOR
  19.331 +FUNCTION_IMPL
  19.332 +CURSOR
  19.333 +IF
  19.334 +FUNCTION_IMPL
  19.335 +CURSOR
  19.336 +FUNCTION_IMPL
  19.337 +CURSOR
  19.338 +FUNCTION_IMPL
  19.339 +STATEMENT
  19.340 +FUNCTION_IMPL
  19.341 +CURSOR
  19.342 +FUNCTION_IMPL
  19.343 +CURSOR
  19.344 +IF
  19.345 +FUNCTION_IMPL
  19.346 +IF
  19.347 +FUNCTION_IMPL
  19.348 +CURSOR
  19.349 +IF
  19.350 +FUNCTION_IMPL
  19.351 +CURSOR
  19.352 +FUNCTION_IMPL
  19.353 +CURSOR
  19.354 +IF
  19.355 +FUNCTION_IMPL
  19.356 +CURSOR
  19.357 +IF
  19.358 +FUNCTION_IMPL
  19.359 +CURSOR
  19.360 +IF
  19.361 +FUNCTION_IMPL
  19.362 +CURSOR
  19.363 +IF
  19.364 +FUNCTION_IMPL
  19.365 +CURSOR
  19.366 +IF
  19.367 +FUNCTION_IMPL
  19.368 +CURSOR
  19.369 +IF
  19.370 +FUNCTION_IMPL
  19.371 +FUNCTION_IMPL
  19.372 +FUNCTION_IMPL
  19.373 +FUNCTION_IMPL
  19.374 +CURSOR
  19.375 +IF
  19.376 +FUNCTION_IMPL
  19.377 +CURSOR
  19.378 +FUNCTION_IMPL
  19.379 +CURSOR
  19.380 +PROCEDURE_IMPL
  19.381 +CURSOR
  19.382 +IF
  19.383 +IF
  19.384 +PROCEDURE_IMPL
  19.385 +PROCEDURE_IMPL
  19.386 +IF
  19.387 +IF
  19.388 +IF
  19.389 +IF
  19.390 +IF
  19.391 +IF
  19.392 +IF
  19.393 +IF
  19.394 +FUNCTION_IMPL
  19.395 +CURSOR
  19.396 +IF
  19.397 +PROCEDURE_IMPL
  19.398 +CURSOR
  19.399 +CURSOR
  19.400 +IF
  19.401 +COMMENT
  19.402 +IF
  19.403 +IF
  19.404 +COMMENT
  19.405 +IF
  19.406 +IF
  19.407 +IF
  19.408 +IF
  19.409 +PROCEDURE_IMPL
  19.410 +CURSOR
  19.411 +FOR_LOOP
  19.412 +STATEMENT
  19.413 +PROCEDURE_IMPL
  19.414 +CURSOR
  19.415 +FOR_LOOP
  19.416 +COMMENT
  19.417 +STATEMENT
  19.418 +COMMENT
  19.419 +PROCEDURE_IMPL
  19.420 +CURSOR
  19.421 +CURSOR
  19.422 +FOR_LOOP
  19.423 +COMMENT
  19.424 +STATEMENT
  19.425 +COMMENT
  19.426 +FOR_LOOP
  19.427 +STATEMENT
  19.428 +PROCEDURE_IMPL
  19.429 +CURSOR
  19.430 +FOR_LOOP
  19.431 +COMMENT
  19.432 +STATEMENT
  19.433 +COMMENT
  19.434 +FUNCTION_IMPL
  19.435 +CURSOR
  19.436 +IF
  19.437 +PROCEDURE_IMPL
  19.438 +IF
  19.439 +COMMENT
  19.440 +FUNCTION_IMPL
  19.441 +CURSOR
  19.442 +IF
  19.443 +PROCEDURE_IMPL
  19.444 +IF
  19.445 +IF
  19.446 +IF
  19.447 +IF
  19.448 +FUNCTION_IMPL
  19.449 +CURSOR
  19.450 +IF
  19.451 +FUNCTION_IMPL
  19.452 +IF
  19.453 +COMMENT
  19.454 +PROCEDURE_IMPL
  19.455 +COMMENT
  19.456 +COMMENT
    20.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    20.2 +++ b/PLSQL/Lexer/test/unit/data/expected/InstallationSite.apy.structure	Wed May 15 23:04:20 2013 +0200
    20.3 @@ -0,0 +1,106 @@
    20.4 +COMMENT
    20.5 +COMMENT
    20.6 +VIEW
    20.7 +TABLE_COMMENT
    20.8 +COLUMN_COMMENT
    20.9 +VIEW
   20.10 +TABLE_COMMENT
   20.11 +COLUMN_COMMENT
   20.12 +COMMENT
   20.13 +PACKAGE_BODY
   20.14 +COMMENT
   20.15 +COMMENT
   20.16 +FUNCTION_IMPL
   20.17 +CURSOR
   20.18 +CURSOR
   20.19 +IF
   20.20 +IF
   20.21 +IF
   20.22 +FUNCTION_IMPL
   20.23 +CURSOR
   20.24 +IF
   20.25 +IF
   20.26 +FUNCTION_IMPL
   20.27 +CURSOR
   20.28 +IF
   20.29 +FUNCTION_IMPL
   20.30 +CURSOR
   20.31 +FUNCTION_IMPL
   20.32 +CURSOR
   20.33 +IF
   20.34 +PROCEDURE_IMPL
   20.35 +CURSOR
   20.36 +COMMENT
   20.37 +PROCEDURE_IMPL
   20.38 +PROCEDURE_IMPL
   20.39 +IF
   20.40 +WHILE_LOOP
   20.41 +IF
   20.42 +IF
   20.43 +IF
   20.44 +IF
   20.45 +IF
   20.46 +IF
   20.47 +PROCEDURE_IMPL
   20.48 +IF
   20.49 +IF
   20.50 +STATEMENT
   20.51 +STATEMENT
   20.52 +COMMENT
   20.53 +COMMENT
   20.54 +PROCEDURE_IMPL
   20.55 +IF
   20.56 +WHILE_LOOP
   20.57 +IF
   20.58 +IF
   20.59 +IF
   20.60 +IF
   20.61 +IF
   20.62 +IF
   20.63 +PROCEDURE_IMPL
   20.64 +IF
   20.65 +IF
   20.66 +IF
   20.67 +STATEMENT
   20.68 +IF
   20.69 +STATEMENT
   20.70 +COMMENT
   20.71 +COMMENT
   20.72 +PROCEDURE_IMPL
   20.73 +PROCEDURE_IMPL
   20.74 +STATEMENT
   20.75 +COMMENT
   20.76 +COMMENT
   20.77 +PROCEDURE_IMPL
   20.78 +PROCEDURE_IMPL
   20.79 +IF
   20.80 +IF
   20.81 +IF
   20.82 +PROCEDURE_IMPL
   20.83 +IF
   20.84 +IF
   20.85 +PROCEDURE_IMPL
   20.86 +IF
   20.87 +IF
   20.88 +COMMENT
   20.89 +PROCEDURE_IMPL
   20.90 +IF
   20.91 +COMMENT
   20.92 +COMMENT
   20.93 +FUNCTION_IMPL
   20.94 +CURSOR
   20.95 +IF
   20.96 +IF
   20.97 +COMMENT
   20.98 +FUNCTION_IMPL
   20.99 +CURSOR
  20.100 +CURSOR
  20.101 +IF
  20.102 +IF
  20.103 +IF
  20.104 +IF
  20.105 +IF
  20.106 +COMMENT
  20.107 +COMMENT
  20.108 +PROCEDURE_IMPL
  20.109 +COMMENT
    21.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    21.2 +++ b/PLSQL/Lexer/test/unit/data/expected/OpPersDiaryCalculation.apy.structure	Wed May 15 23:04:20 2013 +0200
    21.3 @@ -0,0 +1,203 @@
    21.4 +COMMENT
    21.5 +COMMENT
    21.6 +PACKAGE_BODY
    21.7 +COMMENT
    21.8 +COMMENT
    21.9 +COMMENT
   21.10 +PROCEDURE_DEF
   21.11 +PROCEDURE_DEF
   21.12 +PROCEDURE_DEF
   21.13 +PROCEDURE_DEF
   21.14 +PROCEDURE_DEF
   21.15 +PROCEDURE_DEF
   21.16 +PROCEDURE_DEF
   21.17 +PROCEDURE_DEF
   21.18 +PROCEDURE_DEF
   21.19 +PROCEDURE_DEF
   21.20 +COMMENT
   21.21 +PROCEDURE_IMPL
   21.22 +COMMENT
   21.23 +COMMENT
   21.24 +COMMENT
   21.25 +IF
   21.26 +IF
   21.27 +FOR_LOOP
   21.28 +IF
   21.29 +COMMENT
   21.30 +COMMENT
   21.31 +COMMENT
   21.32 +WHILE_LOOP
   21.33 +FOR_LOOP
   21.34 +IF
   21.35 +FOR_LOOP
   21.36 +IF
   21.37 +IF
   21.38 +IF
   21.39 +FOR_LOOP
   21.40 +IF
   21.41 +FOR_LOOP
   21.42 +IF
   21.43 +IF
   21.44 +IF
   21.45 +IF
   21.46 +COMMENT
   21.47 +IF
   21.48 +FOR_LOOP
   21.49 +IF
   21.50 +COMMENT
   21.51 +IF
   21.52 +FOR_LOOP
   21.53 +IF
   21.54 +IF
   21.55 +PROCEDURE_IMPL
   21.56 +CURSOR
   21.57 +FOR_LOOP
   21.58 +IF
   21.59 +FOR_LOOP
   21.60 +IF
   21.61 +COMMENT
   21.62 +FOR_LOOP
   21.63 +FOR_LOOP
   21.64 +PROCEDURE_IMPL
   21.65 +IF
   21.66 +COMMENT
   21.67 +COMMENT
   21.68 +COMMENT
   21.69 +FOR_LOOP
   21.70 +IF
   21.71 +FOR_LOOP
   21.72 +IF
   21.73 +FOR_LOOP
   21.74 +IF
   21.75 +COMMENT
   21.76 +COMMENT
   21.77 +COMMENT
   21.78 +IF
   21.79 +FOR_LOOP
   21.80 +IF
   21.81 +COMMENT
   21.82 +COMMENT
   21.83 +COMMENT
   21.84 +FOR_LOOP
   21.85 +IF
   21.86 +COMMENT
   21.87 +COMMENT
   21.88 +COMMENT
   21.89 +WHILE_LOOP
   21.90 +FOR_LOOP
   21.91 +IF
   21.92 +IF
   21.93 +IF
   21.94 +IF
   21.95 +WHILE_LOOP
   21.96 +FOR_LOOP
   21.97 +IF
   21.98 +IF
   21.99 +IF
  21.100 +IF
  21.101 +PROCEDURE_IMPL
  21.102 +CURSOR
  21.103 +CURSOR
  21.104 +COMMENT
  21.105 +CURSOR
  21.106 +COMMENT
  21.107 +COMMENT
  21.108 +COMMENT
  21.109 +IF
  21.110 +IF
  21.111 +IF
  21.112 +IF
  21.113 +IF
  21.114 +COMMENT
  21.115 +COMMENT
  21.116 +COMMENT
  21.117 +COMMENT
  21.118 +COMMENT
  21.119 +COMMENT
  21.120 +FOR_LOOP
  21.121 +IF
  21.122 +FOR_LOOP
  21.123 +IF
  21.124 +IF
  21.125 +IF
  21.126 +COMMENT
  21.127 +IF
  21.128 +COMMENT
  21.129 +IF
  21.130 +IF
  21.131 +IF
  21.132 +IF
  21.133 +IF
  21.134 +IF
  21.135 +IF
  21.136 +PROCEDURE_IMPL
  21.137 +CURSOR
  21.138 +IF
  21.139 +IF
  21.140 +FOR_LOOP
  21.141 +CASE
  21.142 +CASE
  21.143 +CASE
  21.144 +FOR_LOOP
  21.145 +IF
  21.146 +IF
  21.147 +IF
  21.148 +IF
  21.149 +PROCEDURE_IMPL
  21.150 +IF
  21.151 +STATEMENT
  21.152 +PROCEDURE_IMPL
  21.153 +IF
  21.154 +STATEMENT
  21.155 +PROCEDURE_IMPL
  21.156 +IF
  21.157 +COMMENT
  21.158 +IF
  21.159 +STATEMENT
  21.160 +COMMENT
  21.161 +PROCEDURE_IMPL
  21.162 +IF
  21.163 +COMMENT
  21.164 +IF
  21.165 +STATEMENT
  21.166 +COMMENT
  21.167 +PROCEDURE_IMPL
  21.168 +FOR_LOOP
  21.169 +IF
  21.170 +IF
  21.171 +STATEMENT
  21.172 +COMMENT
  21.173 +COMMENT
  21.174 +COMMENT
  21.175 +COMMENT
  21.176 +IF
  21.177 +COMMENT
  21.178 +PROCEDURE_IMPL
  21.179 +COMMENT
  21.180 +COMMENT
  21.181 +COMMENT
  21.182 +COMMENT
  21.183 +COMMENT
  21.184 +COMMENT
  21.185 +COMMENT
  21.186 +COMMENT
  21.187 +COMMENT
  21.188 +COMMENT
  21.189 +COMMENT
  21.190 +COMMENT
  21.191 +COMMENT
  21.192 +COMMENT
  21.193 +COMMENT
  21.194 +IF
  21.195 +IF
  21.196 +IF
  21.197 +IF
  21.198 +IF
  21.199 +IF
  21.200 +FUNCTION_IMPL
  21.201 +COMMENT
  21.202 +COMMENT
  21.203 +COMMENT
  21.204 +PROCEDURE_IMPL
  21.205 +COMMENT
  21.206 +COMMENT
    22.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    22.2 +++ b/PLSQL/Lexer/test/unit/data/expected/ScorecardInputValue.apy.structure	Wed May 15 23:04:20 2013 +0200
    22.3 @@ -0,0 +1,953 @@
    22.4 +COMMENT
    22.5 +COMMENT
    22.6 +VIEW
    22.7 +TABLE_COMMENT
    22.8 +COLUMN_COMMENT
    22.9 +VIEW
   22.10 +TABLE_COMMENT
   22.11 +COLUMN_COMMENT
   22.12 +VIEW
   22.13 +TABLE_COMMENT
   22.14 +COLUMN_COMMENT
   22.15 +COMMENT
   22.16 +VIEW
   22.17 +TABLE_COMMENT
   22.18 +COMMENT
   22.19 +COMMENT
   22.20 +VIEW
   22.21 +TABLE_COMMENT
   22.22 +COLUMN_COMMENT
   22.23 +COMMENT
   22.24 +COMMENT
   22.25 +COMMENT
   22.26 +PACKAGE_BODY
   22.27 +COMMENT
   22.28 +COMMENT
   22.29 +PROCEDURE_DEF
   22.30 +COMMENT
   22.31 +PROCEDURE_DEF
   22.32 +FUNCTION_DEF
   22.33 +COMMENT
   22.34 +FUNCTION_IMPL
   22.35 +CURSOR
   22.36 +CURSOR
   22.37 +IF
   22.38 +IF
   22.39 +IF
   22.40 +FUNCTION_IMPL
   22.41 +CURSOR
   22.42 +IF
   22.43 +IF
   22.44 +FUNCTION_IMPL
   22.45 +CURSOR
   22.46 +IF
   22.47 +FUNCTION_IMPL
   22.48 +CURSOR
   22.49 +FUNCTION_IMPL
   22.50 +CURSOR
   22.51 +IF
   22.52 +PROCEDURE_IMPL
   22.53 +CURSOR
   22.54 +COMMENT
   22.55 +PROCEDURE_IMPL
   22.56 +STATEMENT
   22.57 +PROCEDURE_IMPL
   22.58 +IF
   22.59 +IF
   22.60 +IF
   22.61 +IF
   22.62 +IF
   22.63 +IF
   22.64 +IF
   22.65 +IF
   22.66 +IF
   22.67 +IF
   22.68 +PROCEDURE_IMPL
   22.69 +PROCEDURE_IMPL
   22.70 +COMMENT
   22.71 +FUNCTION_IMPL
   22.72 +FUNCTION_IMPL
   22.73 +PROCEDURE_IMPL
   22.74 +FUNCTION_IMPL
   22.75 +IF
   22.76 +IF
   22.77 +IF
   22.78 +IF
   22.79 +PROCEDURE_IMPL
   22.80 +COMMENT
   22.81 +PROCEDURE_IMPL
   22.82 +PROCEDURE_IMPL
   22.83 +WHILE_LOOP
   22.84 +IF
   22.85 +IF
   22.86 +IF
   22.87 +IF
   22.88 +IF
   22.89 +IF
   22.90 +IF
   22.91 +IF
   22.92 +IF
   22.93 +IF
   22.94 +IF
   22.95 +IF
   22.96 +IF
   22.97 +IF
   22.98 +IF
   22.99 +IF
  22.100 +IF
  22.101 +IF
  22.102 +IF
  22.103 +IF
  22.104 +IF
  22.105 +IF
  22.106 +IF
  22.107 +IF
  22.108 +IF
  22.109 +IF
  22.110 +IF
  22.111 +IF
  22.112 +IF
  22.113 +IF
  22.114 +IF
  22.115 +IF
  22.116 +IF
  22.117 +IF
  22.118 +IF
  22.119 +IF
  22.120 +PROCEDURE_IMPL
  22.121 +STATEMENT
  22.122 +COMMENT
  22.123 +PROCEDURE_IMPL
  22.124 +WHILE_LOOP
  22.125 +IF
  22.126 +IF
  22.127 +IF
  22.128 +IF
  22.129 +IF
  22.130 +IF
  22.131 +IF
  22.132 +IF
  22.133 +IF
  22.134 +IF
  22.135 +IF
  22.136 +IF
  22.137 +IF
  22.138 +IF
  22.139 +IF
  22.140 +IF
  22.141 +IF
  22.142 +IF
  22.143 +IF
  22.144 +IF
  22.145 +IF
  22.146 +IF
  22.147 +IF
  22.148 +IF
  22.149 +IF
  22.150 +IF
  22.151 +IF
  22.152 +IF
  22.153 +IF
  22.154 +IF
  22.155 +IF
  22.156 +IF
  22.157 +IF
  22.158 +IF
  22.159 +IF
  22.160 +IF
  22.161 +IF
  22.162 +IF
  22.163 +IF
  22.164 +IF
  22.165 +IF
  22.166 +IF
  22.167 +IF
  22.168 +IF
  22.169 +IF
  22.170 +IF
  22.171 +IF
  22.172 +IF
  22.173 +IF
  22.174 +IF
  22.175 +PROCEDURE_IMPL
  22.176 +IF
  22.177 +STATEMENT
  22.178 +IF
  22.179 +STATEMENT
  22.180 +COMMENT
  22.181 +PROCEDURE_IMPL
  22.182 +PROCEDURE_IMPL
  22.183 +STATEMENT
  22.184 +COMMENT
  22.185 +PROCEDURE_IMPL
  22.186 +PROCEDURE_IMPL
  22.187 +IF
  22.188 +IF
  22.189 +IF
  22.190 +PROCEDURE_IMPL
  22.191 +IF
  22.192 +IF
  22.193 +PROCEDURE_IMPL
  22.194 +IF
  22.195 +IF
  22.196 +COMMENT
  22.197 +PROCEDURE_IMPL
  22.198 +IF
  22.199 +COMMENT
  22.200 +PROCEDURE_IMPL
  22.201 +COMMENT
  22.202 +PROCEDURE_IMPL
  22.203 +CURSOR
  22.204 +CURSOR
  22.205 +CURSOR
  22.206 +CURSOR
  22.207 +STATEMENT
  22.208 +IF
  22.209 +IF
  22.210 +IF
  22.211 +COMMENT
  22.212 +FOR_LOOP
  22.213 +IF
  22.214 +FOR_LOOP
  22.215 +IF
  22.216 +IF
  22.217 +IF
  22.218 +IF
  22.219 +IF
  22.220 +FOR_LOOP
  22.221 +IF
  22.222 +IF
  22.223 +IF
  22.224 +IF
  22.225 +FOR_LOOP
  22.226 +IF
  22.227 +IF
  22.228 +IF
  22.229 +IF
  22.230 +IF
  22.231 +IF
  22.232 +BEGIN_END
  22.233 +BEGIN_END
  22.234 +IF
  22.235 +FOR_LOOP
  22.236 +IF
  22.237 +IF
  22.238 +FOR_LOOP
  22.239 +IF
  22.240 +IF
  22.241 +IF
  22.242 +IF
  22.243 +FOR_LOOP
  22.244 +IF
  22.245 +IF
  22.246 +IF
  22.247 +IF
  22.248 +IF
  22.249 +IF
  22.250 +BEGIN_END
  22.251 +BEGIN_END
  22.252 +IF
  22.253 +FOR_LOOP
  22.254 +PROCEDURE_IMPL
  22.255 +FUNCTION_IMPL
  22.256 +CURSOR
  22.257 +FOR_LOOP
  22.258 +IF
  22.259 +IF
  22.260 +IF
  22.261 +IF
  22.262 +IF
  22.263 +IF
  22.264 +IF
  22.265 +IF
  22.266 +IF
  22.267 +IF
  22.268 +IF
  22.269 +IF
  22.270 +COMMENT
  22.271 +PROCEDURE_IMPL
  22.272 +IF
  22.273 +IF
  22.274 +IF
  22.275 +IF
  22.276 +IF
  22.277 +PROCEDURE_IMPL
  22.278 +IF
  22.279 +IF
  22.280 +IF
  22.281 +IF
  22.282 +IF
  22.283 +IF
  22.284 +IF
  22.285 +IF
  22.286 +IF
  22.287 +PROCEDURE_IMPL
  22.288 +COMMENT
  22.289 +CURSOR
  22.290 +COMMENT
  22.291 +CURSOR
  22.292 +FOR_LOOP
  22.293 +IF
  22.294 +IF
  22.295 +IF
  22.296 +IF
  22.297 +IF
  22.298 +IF
  22.299 +IF
  22.300 +IF
  22.301 +IF
  22.302 +IF
  22.303 +IF
  22.304 +IF
  22.305 +IF
  22.306 +COMMENT
  22.307 +IF
  22.308 +IF
  22.309 +PROCEDURE_IMPL
  22.310 +PROCEDURE_IMPL
  22.311 +PROCEDURE_IMPL
  22.312 +PROCEDURE_IMPL
  22.313 +PROCEDURE_IMPL
  22.314 +IF
  22.315 +IF
  22.316 +COMMENT
  22.317 +COMMENT
  22.318 +FUNCTION_IMPL
  22.319 +CURSOR
  22.320 +FUNCTION_IMPL
  22.321 +COMMENT
  22.322 +CURSOR
  22.323 +CURSOR
  22.324 +IF
  22.325 +COMMENT
  22.326 +FOR_LOOP
  22.327 +FUNCTION_IMPL
  22.328 +CURSOR
  22.329 +FUNCTION_IMPL
  22.330 +CURSOR
  22.331 +FUNCTION_IMPL
  22.332 +CURSOR
  22.333 +PROCEDURE_IMPL
  22.334 +STATEMENT
  22.335 +CURSOR
  22.336 +CURSOR
  22.337 +COMMENT
  22.338 +COMMENT
  22.339 +COMMENT
  22.340 +IF
  22.341 +IF
  22.342 +IF
  22.343 +IF
  22.344 +LOOP
  22.345 +IF
  22.346 +IF
  22.347 +IF
  22.348 +IF
  22.349 +IF
  22.350 +IF
  22.351 +IF
  22.352 +IF
  22.353 +IF
  22.354 +IF
  22.355 +IF
  22.356 +IF
  22.357 +IF
  22.358 +IF
  22.359 +IF
  22.360 +IF
  22.361 +IF
  22.362 +IF
  22.363 +COMMENT
  22.364 +IF
  22.365 +COMMENT
  22.366 +FOR_LOOP
  22.367 +IF
  22.368 +IF
  22.369 +IF
  22.370 +IF
  22.371 +IF
  22.372 +IF
  22.373 +IF
  22.374 +IF
  22.375 +IF
  22.376 +IF
  22.377 +IF
  22.378 +IF
  22.379 +FOR_LOOP
  22.380 +IF
  22.381 +STATEMENT
  22.382 +IF
  22.383 +STATEMENT
  22.384 +IF
  22.385 +STATEMENT
  22.386 +IF
  22.387 +STATEMENT
  22.388 +IF
  22.389 +STATEMENT
  22.390 +IF
  22.391 +STATEMENT
  22.392 +IF
  22.393 +STATEMENT
  22.394 +IF
  22.395 +STATEMENT
  22.396 +IF
  22.397 +STATEMENT
  22.398 +IF
  22.399 +STATEMENT
  22.400 +IF
  22.401 +STATEMENT
  22.402 +IF
  22.403 +STATEMENT
  22.404 +PROCEDURE_IMPL
  22.405 +IF
  22.406 +IF
  22.407 +IF
  22.408 +IF
  22.409 +IF
  22.410 +IF
  22.411 +IF
  22.412 +STATEMENT
  22.413 +IF
  22.414 +IF
  22.415 +IF
  22.416 +STATEMENT
  22.417 +IF
  22.418 +STATEMENT
  22.419 +IF
  22.420 +STATEMENT
  22.421 +IF
  22.422 +STATEMENT
  22.423 +IF
  22.424 +STATEMENT
  22.425 +IF
  22.426 +STATEMENT
  22.427 +IF
  22.428 +STATEMENT
  22.429 +IF
  22.430 +STATEMENT
  22.431 +IF
  22.432 +STATEMENT
  22.433 +IF
  22.434 +STATEMENT
  22.435 +IF
  22.436 +STATEMENT
  22.437 +IF
  22.438 +STATEMENT
  22.439 +IF
  22.440 +IF
  22.441 +STATEMENT
  22.442 +IF
  22.443 +STATEMENT
  22.444 +IF
  22.445 +STATEMENT
  22.446 +IF
  22.447 +STATEMENT
  22.448 +IF
  22.449 +STATEMENT
  22.450 +IF
  22.451 +STATEMENT
  22.452 +IF
  22.453 +STATEMENT
  22.454 +IF
  22.455 +STATEMENT
  22.456 +IF
  22.457 +STATEMENT
  22.458 +IF
  22.459 +STATEMENT
  22.460 +IF
  22.461 +STATEMENT
  22.462 +IF
  22.463 +STATEMENT
  22.464 +IF
  22.465 +IF
  22.466 +STATEMENT
  22.467 +PROCEDURE_IMPL
  22.468 +IF
  22.469 +PROCEDURE_IMPL
  22.470 +CURSOR
  22.471 +FOR_LOOP
  22.472 +IF
  22.473 +IF
  22.474 +IF
  22.475 +PROCEDURE_IMPL
  22.476 +CURSOR
  22.477 +CURSOR
  22.478 +CURSOR
  22.479 +IF
  22.480 +FOR_LOOP
  22.481 +IF
  22.482 +IF
  22.483 +IF
  22.484 +IF
  22.485 +IF
  22.486 +IF
  22.487 +IF
  22.488 +IF
  22.489 +IF
  22.490 +IF
  22.491 +IF
  22.492 +IF
  22.493 +IF
  22.494 +IF
  22.495 +IF
  22.496 +COMMENT
  22.497 +IF
  22.498 +COMMENT
  22.499 +IF
  22.500 +COMMENT
  22.501 +IF
  22.502 +COMMENT
  22.503 +IF
  22.504 +COMMENT
  22.505 +IF
  22.506 +COMMENT
  22.507 +IF
  22.508 +COMMENT
  22.509 +IF
  22.510 +COMMENT
  22.511 +IF
  22.512 +COMMENT
  22.513 +IF
  22.514 +COMMENT
  22.515 +IF
  22.516 +COMMENT
  22.517 +IF
  22.518 +COMMENT
  22.519 +STATEMENT
  22.520 +COMMENT
  22.521 +COMMENT
  22.522 +IF
  22.523 +PROCEDURE_IMPL
  22.524 +CURSOR
  22.525 +CURSOR
  22.526 +FOR_LOOP
  22.527 +FOR_LOOP
  22.528 +STATEMENT
  22.529 +PROCEDURE_IMPL
  22.530 +COMMENT
  22.531 +CURSOR
  22.532 +FOR_LOOP
  22.533 +COMMENT
  22.534 +PROCEDURE_IMPL
  22.535 +CURSOR
  22.536 +FOR_LOOP
  22.537 +PROCEDURE_IMPL
  22.538 +CURSOR
  22.539 +FOR_LOOP
  22.540 +PROCEDURE_IMPL
  22.541 +PROCEDURE_IMPL
  22.542 +PROCEDURE_IMPL
  22.543 +PROCEDURE_IMPL
  22.544 +IF
  22.545 +IF
  22.546 +PROCEDURE_IMPL
  22.547 +CURSOR
  22.548 +CURSOR
  22.549 +CURSOR
  22.550 +CURSOR
  22.551 +IF
  22.552 +IF
  22.553 +IF
  22.554 +IF
  22.555 +IF
  22.556 +IF
  22.557 +COMMENT
  22.558 +FOR_LOOP
  22.559 +FOR_LOOP
  22.560 +COMMENT
  22.561 +FOR_LOOP
  22.562 +COMMENT
  22.563 +FOR_LOOP
  22.564 +IF
  22.565 +IF
  22.566 +IF
  22.567 +IF
  22.568 +IF
  22.569 +IF
  22.570 +IF
  22.571 +IF
  22.572 +IF
  22.573 +IF
  22.574 +IF
  22.575 +IF
  22.576 +FOR_LOOP
  22.577 +FOR_LOOP
  22.578 +COMMENT
  22.579 +FOR_LOOP
  22.580 +COMMENT
  22.581 +FOR_LOOP
  22.582 +IF
  22.583 +IF
  22.584 +IF
  22.585 +IF
  22.586 +IF
  22.587 +IF
  22.588 +IF
  22.589 +IF
  22.590 +IF
  22.591 +IF
  22.592 +IF
  22.593 +IF
  22.594 +PROCEDURE_IMPL
  22.595 +PROCEDURE_IMPL
  22.596 +CURSOR
  22.597 +CURSOR
  22.598 +CURSOR
  22.599 +CURSOR
  22.600 +STATEMENT
  22.601 +IF
  22.602 +COMMENT
  22.603 +FOR_LOOP
  22.604 +IF
  22.605 +IF
  22.606 +FOR_LOOP
  22.607 +FOR_LOOP
  22.608 +FOR_LOOP
  22.609 +IF
  22.610 +IF
  22.611 +IF
  22.612 +IF
  22.613 +IF
  22.614 +FOR_LOOP
  22.615 +IF
  22.616 +FOR_LOOP
  22.617 +COMMENT
  22.618 +IF
  22.619 +FOR_LOOP
  22.620 +PROCEDURE_IMPL
  22.621 +COMMENT
  22.622 +IF
  22.623 +IF
  22.624 +PROCEDURE_IMPL
  22.625 +PROCEDURE_IMPL
  22.626 +COMMENT
  22.627 +IF
  22.628 +IF
  22.629 +PROCEDURE_IMPL
  22.630 +CURSOR
  22.631 +CURSOR
  22.632 +CURSOR
  22.633 +CURSOR
  22.634 +CURSOR
  22.635 +STATEMENT
  22.636 +IF
  22.637 +IF
  22.638 +COMMENT
  22.639 +FOR_LOOP
  22.640 +IF
  22.641 +IF
  22.642 +FOR_LOOP
  22.643 +FOR_LOOP
  22.644 +FOR_LOOP
  22.645 +IF
  22.646 +IF
  22.647 +IF
  22.648 +IF
  22.649 +IF
  22.650 +FOR_LOOP
  22.651 +COMMENT
  22.652 +IF
  22.653 +IF
  22.654 +FOR_LOOP
  22.655 +PROCEDURE_IMPL
  22.656 +STATEMENT
  22.657 +CURSOR
  22.658 +CURSOR
  22.659 +CURSOR
  22.660 +CURSOR
  22.661 +COMMENT
  22.662 +IF
  22.663 +IF
  22.664 +IF
  22.665 +FOR_LOOP
  22.666 +IF
  22.667 +IF
  22.668 +FOR_LOOP
  22.669 +LOOP
  22.670 +IF
  22.671 +IF
  22.672 +FOR_LOOP
  22.673 +IF
  22.674 +FOR_LOOP
  22.675 +PROCEDURE_IMPL
  22.676 +CURSOR
  22.677 +CURSOR
  22.678 +CURSOR
  22.679 +CURSOR
  22.680 +CURSOR
  22.681 +IF
  22.682 +IF
  22.683 +IF
  22.684 +FOR_LOOP
  22.685 +IF
  22.686 +IF
  22.687 +FOR_LOOP
  22.688 +IF
  22.689 +FOR_LOOP
  22.690 +IF
  22.691 +FOR_LOOP
  22.692 +FOR_LOOP
  22.693 +IF
  22.694 +IF
  22.695 +FOR_LOOP
  22.696 +IF
  22.697 +COMMENT
  22.698 +IF
  22.699 +IF
  22.700 +FOR_LOOP
  22.701 +IF
  22.702 +PROCEDURE_IMPL
  22.703 +PROCEDURE_IMPL
  22.704 +PROCEDURE_IMPL
  22.705 +IF
  22.706 +IF
  22.707 +PROCEDURE_IMPL
  22.708 +CURSOR
  22.709 +COMMENT
  22.710 +COMMENT
  22.711 +COMMENT
  22.712 +FUNCTION_IMPL
  22.713 +CURSOR
  22.714 +PROCEDURE_IMPL
  22.715 +STATEMENT
  22.716 +CURSOR
  22.717 +CURSOR
  22.718 +CURSOR
  22.719 +IF
  22.720 +IF
  22.721 +COMMENT
  22.722 +COMMENT
  22.723 +FOR_LOOP
  22.724 +LOOP
  22.725 +COMMENT
  22.726 +COMMENT
  22.727 +IF
  22.728 +IF
  22.729 +IF
  22.730 +IF
  22.731 +IF
  22.732 +IF
  22.733 +COMMENT
  22.734 +COMMENT
  22.735 +IF
  22.736 +COMMENT
  22.737 +IF
  22.738 +COMMENT
  22.739 +COMMENT
  22.740 +FOR_LOOP
  22.741 +FOR_LOOP
  22.742 +IF
  22.743 +CASE
  22.744 +CASE
  22.745 +CASE
  22.746 +CASE
  22.747 +CASE
  22.748 +CASE
  22.749 +CASE
  22.750 +CASE
  22.751 +CASE
  22.752 +CASE
  22.753 +CASE
  22.754 +CASE
  22.755 +CASE
  22.756 +IF
  22.757 +IF
  22.758 +IF
  22.759 +PROCEDURE_IMPL
  22.760 +IF
  22.761 +IF
  22.762 +IF
  22.763 +PROCEDURE_IMPL
  22.764 +CURSOR
  22.765 +CURSOR
  22.766 +FOR_LOOP
  22.767 +IF
  22.768 +IF
  22.769 +IF
  22.770 +IF
  22.771 +IF
  22.772 +IF
  22.773 +IF
  22.774 +IF
  22.775 +IF
  22.776 +IF
  22.777 +IF
  22.778 +IF
  22.779 +PROCEDURE_IMPL
  22.780 +CURSOR
  22.781 +LOOP
  22.782 +WHILE_LOOP
  22.783 +IF
  22.784 +IF
  22.785 +IF
  22.786 +COMMENT
  22.787 +PROCEDURE_IMPL
  22.788 +CURSOR
  22.789 +IF
  22.790 +IF
  22.791 +IF
  22.792 +IF
  22.793 +IF
  22.794 +IF
  22.795 +IF
  22.796 +IF
  22.797 +IF
  22.798 +IF
  22.799 +IF
  22.800 +IF
  22.801 +IF
  22.802 +IF
  22.803 +IF
  22.804 +PROCEDURE_IMPL
  22.805 +CURSOR
  22.806 +IF
  22.807 +COMMENT
  22.808 +PROCEDURE_IMPL
  22.809 +COMMENT
  22.810 +COMMENT
  22.811 +CURSOR
  22.812 +IF
  22.813 +IF
  22.814 +IF
  22.815 +IF
  22.816 +IF
  22.817 +IF
  22.818 +IF
  22.819 +IF
  22.820 +IF
  22.821 +IF
  22.822 +IF
  22.823 +IF
  22.824 +IF
  22.825 +IF
  22.826 +COMMENT
  22.827 +COMMENT
  22.828 +COMMENT
  22.829 +FOR_LOOP
  22.830 +COMMENT
  22.831 +IF
  22.832 +IF
  22.833 +COMMENT
  22.834 +IF
  22.835 +COMMENT
  22.836 +COMMENT
  22.837 +IF
  22.838 +IF
  22.839 +COMMENT
  22.840 +COMMENT
  22.841 +IF
  22.842 +IF
  22.843 +COMMENT
  22.844 +COMMENT
  22.845 +FUNCTION_IMPL
  22.846 +CURSOR
  22.847 +IF
  22.848 +IF
  22.849 +IF
  22.850 +IF
  22.851 +IF
  22.852 +IF
  22.853 +IF
  22.854 +IF
  22.855 +IF
  22.856 +IF
  22.857 +IF
  22.858 +IF
  22.859 +PROCEDURE_IMPL
  22.860 +COMMENT
  22.861 +COMMENT
  22.862 +COMMENT
  22.863 +COMMENT
  22.864 +COMMENT
  22.865 +COMMENT
  22.866 +CURSOR
  22.867 +CURSOR
  22.868 +COMMENT
  22.869 +COMMENT
  22.870 +COMMENT
  22.871 +COMMENT
  22.872 +COMMENT
  22.873 +IF
  22.874 +COMMENT
  22.875 +COMMENT
  22.876 +COMMENT
  22.877 +IF
  22.878 +IF
  22.879 +IF
  22.880 +IF
  22.881 +IF
  22.882 +IF
  22.883 +IF
  22.884 +IF
  22.885 +IF
  22.886 +IF
  22.887 +IF
  22.888 +IF
  22.889 +IF
  22.890 +COMMENT
  22.891 +IF
  22.892 +FOR_LOOP
  22.893 +FOR_LOOP
  22.894 +COMMENT
  22.895 +WHILE_LOOP
  22.896 +IF
  22.897 +COMMENT
  22.898 +FOR_LOOP
  22.899 +COMMENT
  22.900 +COMMENT
  22.901 +COMMENT
  22.902 +COMMENT
  22.903 +COMMENT
  22.904 +COMMENT
  22.905 +IF
  22.906 +COMMENT
  22.907 +COMMENT
  22.908 +COMMENT
  22.909 +IF
  22.910 +COMMENT
  22.911 +FOR_LOOP
  22.912 +COMMENT
  22.913 +COMMENT
  22.914 +COMMENT
  22.915 +COMMENT
  22.916 +COMMENT
  22.917 +COMMENT
  22.918 +IF
  22.919 +COMMENT
  22.920 +COMMENT
  22.921 +IF
  22.922 +WHILE_LOOP
  22.923 +IF
  22.924 +IF
  22.925 +IF
  22.926 +IF
  22.927 +IF
  22.928 +IF
  22.929 +IF
  22.930 +IF
  22.931 +IF
  22.932 +IF
  22.933 +IF
  22.934 +IF
  22.935 +FOR_LOOP
  22.936 +COMMENT
  22.937 +COMMENT
  22.938 +PROCEDURE_IMPL
  22.939 +CURSOR
  22.940 +CURSOR
  22.941 +CURSOR
  22.942 +CURSOR
  22.943 +WHILE_LOOP
  22.944 +IF
  22.945 +IF
  22.946 +FOR_LOOP
  22.947 +IF
  22.948 +IF
  22.949 +FOR_LOOP
  22.950 +FOR_LOOP
  22.951 +IF
  22.952 +FUNCTION_IMPL
  22.953 +CURSOR
  22.954 +COMMENT
  22.955 +PROCEDURE_IMPL
  22.956 +COMMENT
    23.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    23.2 +++ b/PLSQL/Lexer/test/unit/data/expected/Trainer.apy.structure	Wed May 15 23:04:20 2013 +0200
    23.3 @@ -0,0 +1,136 @@
    23.4 +COMMENT
    23.5 +COMMENT
    23.6 +VIEW
    23.7 +TABLE_COMMENT
    23.8 +COLUMN_COMMENT
    23.9 +VIEW
   23.10 +TABLE_COMMENT
   23.11 +COLUMN_COMMENT
   23.12 +COMMENT
   23.13 +PACKAGE_BODY
   23.14 +COMMENT
   23.15 +COMMENT
   23.16 +FUNCTION_IMPL
   23.17 +CURSOR
   23.18 +CURSOR
   23.19 +IF
   23.20 +IF
   23.21 +IF
   23.22 +FUNCTION_IMPL
   23.23 +CURSOR
   23.24 +IF
   23.25 +IF
   23.26 +FUNCTION_IMPL
   23.27 +CURSOR
   23.28 +IF
   23.29 +FUNCTION_IMPL
   23.30 +CURSOR
   23.31 +FUNCTION_IMPL
   23.32 +CURSOR
   23.33 +IF
   23.34 +PROCEDURE_IMPL
   23.35 +CURSOR
   23.36 +COMMENT
   23.37 +PROCEDURE_IMPL
   23.38 +PROCEDURE_IMPL
   23.39 +WHILE_LOOP
   23.40 +IF
   23.41 +IF
   23.42 +IF
   23.43 +IF
   23.44 +IF
   23.45 +IF
   23.46 +IF
   23.47 +IF
   23.48 +IF
   23.49 +IF
   23.50 +IF
   23.51 +IF
   23.52 +IF
   23.53 +IF
   23.54 +IF
   23.55 +IF
   23.56 +IF
   23.57 +IF
   23.58 +IF
   23.59 +IF
   23.60 +PROCEDURE_IMPL
   23.61 +CURSOR
   23.62 +STATEMENT
   23.63 +COMMENT
   23.64 +IF
   23.65 +COMMENT
   23.66 +PROCEDURE_IMPL
   23.67 +WHILE_LOOP
   23.68 +IF
   23.69 +IF
   23.70 +IF
   23.71 +IF
   23.72 +IF
   23.73 +IF
   23.74 +IF
   23.75 +IF
   23.76 +IF
   23.77 +IF
   23.78 +IF
   23.79 +IF
   23.80 +IF
   23.81 +IF
   23.82 +IF
   23.83 +IF
   23.84 +IF
   23.85 +IF
   23.86 +IF
   23.87 +IF
   23.88 +PROCEDURE_IMPL
   23.89 +IF
   23.90 +STATEMENT
   23.91 +IF
   23.92 +STATEMENT
   23.93 +COMMENT
   23.94 +COMMENT
   23.95 +COMMENT
   23.96 +COMMENT
   23.97 +PROCEDURE_IMPL
   23.98 +PROCEDURE_IMPL
   23.99 +IF
  23.100 +STATEMENT
  23.101 +IF
  23.102 +STATEMENT
  23.103 +COMMENT
  23.104 +PROCEDURE_IMPL
  23.105 +PROCEDURE_IMPL
  23.106 +IF
  23.107 +IF
  23.108 +IF
  23.109 +PROCEDURE_IMPL
  23.110 +IF
  23.111 +IF
  23.112 +PROCEDURE_IMPL
  23.113 +IF
  23.114 +IF
  23.115 +COMMENT
  23.116 +PROCEDURE_IMPL
  23.117 +IF
  23.118 +COMMENT
  23.119 +COMMENT
  23.120 +COMMENT
  23.121 +COMMENT
  23.122 +FUNCTION_IMPL
  23.123 +CURSOR
  23.124 +FUNCTION_IMPL
  23.125 +FUNCTION_IMPL
  23.126 +FUNCTION_IMPL
  23.127 +FUNCTION_IMPL
  23.128 +FUNCTION_IMPL
  23.129 +IF
  23.130 +IF
  23.131 +FUNCTION_IMPL
  23.132 +CURSOR
  23.133 +IF
  23.134 +IF
  23.135 +WHILE_LOOP
  23.136 +STATEMENT
  23.137 +COMMENT
  23.138 +PROCEDURE_IMPL
  23.139 +COMMENT
    24.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    24.2 +++ b/PLSQL/Lexer/test/unit/data/expected/fndbas_ora.cre.structure	Wed May 15 23:04:20 2013 +0200
    24.3 @@ -0,0 +1,18 @@
    24.4 +COMMENT
    24.5 +COMMENT
    24.6 +STATEMENT
    24.7 +STATEMENT
    24.8 +STATEMENT
    24.9 +STATEMENT
   24.10 +STATEMENT
   24.11 +COMMENT
   24.12 +STATEMENT
   24.13 +COMMENT
   24.14 +TRIGGER
   24.15 +STATEMENT
   24.16 +STATEMENT
   24.17 +COMMENT
   24.18 +BEGIN_END
   24.19 +COMMENT
   24.20 +IF
   24.21 +IF
    25.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    25.2 +++ b/PLSQL/Lexer/test/unit/data/expected/person.ins.structure	Wed May 15 23:04:20 2013 +0200
    25.3 @@ -0,0 +1,76 @@
    25.4 +COMMENT
    25.5 +BEGIN_END
    25.6 +STATEMENT
    25.7 +DECLARE_END
    25.8 +IF
    25.9 +COMMENT
   25.10 +BEGIN_END
   25.11 +STATEMENT
   25.12 +DECLARE_END
   25.13 +CURSOR
   25.14 +STATEMENT
   25.15 +IF
   25.16 +STATEMENT
   25.17 +LOOP
   25.18 +STATEMENT
   25.19 +STATEMENT
   25.20 +IF
   25.21 +STATEMENT
   25.22 +BEGIN_END
   25.23 +STATEMENT
   25.24 +DECLARE_END
   25.25 +COMMENT
   25.26 +COMMENT
   25.27 +COMMENT
   25.28 +COMMENT
   25.29 +COMMENT
   25.30 +DECLARE_END
   25.31 +COMMENT
   25.32 +COMMENT
   25.33 +COMMENT
   25.34 +COMMENT
   25.35 +COMMENT
   25.36 +DECLARE_END
   25.37 +COMMENT
   25.38 +DECLARE_END
   25.39 +CURSOR
   25.40 +STATEMENT
   25.41 +IF
   25.42 +STATEMENT
   25.43 +BEGIN_END
   25.44 +PROCEDURE_IMPL
   25.45 +CURSOR
   25.46 +IF
   25.47 +STATEMENT
   25.48 +DECLARE_END
   25.49 +STATEMENT
   25.50 +BEGIN_END
   25.51 +DECLARE_END
   25.52 +CURSOR
   25.53 +IF
   25.54 +STATEMENT
   25.55 +STATEMENT
   25.56 +STATEMENT
   25.57 +STATEMENT
   25.58 +STATEMENT
   25.59 +STATEMENT
   25.60 +BEGIN_END
   25.61 +DECLARE_END
   25.62 +CURSOR
   25.63 +IF
   25.64 +STATEMENT
   25.65 +STATEMENT
   25.66 +STATEMENT
   25.67 +STATEMENT
   25.68 +STATEMENT
   25.69 +STATEMENT
   25.70 +STATEMENT
   25.71 +STATEMENT
   25.72 +STATEMENT
   25.73 +STATEMENT
   25.74 +STATEMENT
   25.75 +COMMENT
   25.76 +DECLARE_END
   25.77 +COMMENT
   25.78 +COMMENT
   25.79 +COMMENT
    26.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    26.2 +++ b/PLSQL/Lexer/test/unit/data/expected/sys_IalObjectSlave.api.structure	Wed May 15 23:04:20 2013 +0200
    26.3 @@ -0,0 +1,16 @@
    26.4 +COMMENT
    26.5 +PACKAGE
    26.6 +COMMENT
    26.7 +COMMENT
    26.8 +COMMENT
    26.9 +PROCEDURE_DEF
   26.10 +PROCEDURE_DEF
   26.11 +PROCEDURE_DEF
   26.12 +PROCEDURE_DEF
   26.13 +PROCEDURE_DEF
   26.14 +PROCEDURE_DEF
   26.15 +FUNCTION_DEF
   26.16 +PROCEDURE_DEF
   26.17 +COMMENT
   26.18 +PROCEDURE_DEF
   26.19 +COMMENT
    27.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    27.2 +++ b/PLSQL/Lexer/test/unit/data/expected/sys_IalObjectSlave.apy.structure	Wed May 15 23:04:20 2013 +0200
    27.3 @@ -0,0 +1,69 @@
    27.4 +COMMENT
    27.5 +COMMENT
    27.6 +PACKAGE_BODY
    27.7 +COMMENT
    27.8 +FUNCTION_DEF
    27.9 +FUNCTION_DEF
   27.10 +FUNCTION_DEF
   27.11 +FUNCTION_DEF
   27.12 +COMMENT
   27.13 +FUNCTION_IMPL
   27.14 +CURSOR
   27.15 +FUNCTION_IMPL
   27.16 +CURSOR
   27.17 +IF
   27.18 +IF
   27.19 +FUNCTION_IMPL
   27.20 +CURSOR
   27.21 +FUNCTION_IMPL
   27.22 +CURSOR
   27.23 +IF
   27.24 +COMMENT
   27.25 +COMMENT
   27.26 +COMMENT
   27.27 +PROCEDURE_IMPL
   27.28 +COMMENT
   27.29 +COMMENT
   27.30 +PROCEDURE_IMPL
   27.31 +CURSOR
   27.32 +IF
   27.33 +FOR_LOOP
   27.34 +IF
   27.35 +FOR_LOOP
   27.36 +PROCEDURE_IMPL
   27.37 +CURSOR
   27.38 +CURSOR
   27.39 +FOR_LOOP
   27.40 +IF
   27.41 +IF
   27.42 +FOR_LOOP
   27.43 +IF
   27.44 +COMMENT
   27.45 +IF
   27.46 +COMMENT
   27.47 +PROCEDURE_IMPL
   27.48 +PROCEDURE_IMPL
   27.49 +PROCEDURE_IMPL
   27.50 +CURSOR
   27.51 +IF
   27.52 +COMMENT
   27.53 +COMMENT
   27.54 +IF
   27.55 +IF
   27.56 +IF
   27.57 +COMMENT
   27.58 +FUNCTION_IMPL
   27.59 +CURSOR
   27.60 +CURSOR
   27.61 +FOR_LOOP
   27.62 +IF
   27.63 +PROCEDURE_IMPL
   27.64 +CURSOR
   27.65 +FOR_LOOP
   27.66 +COMMENT
   27.67 +COMMENT
   27.68 +IF
   27.69 +COMMENT
   27.70 +COMMENT
   27.71 +PROCEDURE_IMPL
   27.72 +COMMENT
    28.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    28.2 +++ b/PLSQL/Lexer/test/unit/data/expected/test.api.structure	Wed May 15 23:04:20 2013 +0200
    28.3 @@ -0,0 +1,7 @@
    28.4 +COMMENT
    28.5 +BEGIN_END
    28.6 +PACKAGE
    28.7 +COMMENT
    28.8 +FUNCTION_DEF
    28.9 +PROCEDURE_DEF
   28.10 +COMMENT
    29.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    29.2 +++ b/PLSQL/Lexer/test/unit/data/expected/test.apy.structure	Wed May 15 23:04:20 2013 +0200
    29.3 @@ -0,0 +1,17 @@
    29.4 +COMMENT
    29.5 +VIEW
    29.6 +TABLE_COMMENT
    29.7 +COLUMN_COMMENT
    29.8 +PACKAGE_BODY
    29.9 +COMMENT
   29.10 +PROCEDURE_DEF
   29.11 +FUNCTION_DEF
   29.12 +PROCEDURE_IMPL
   29.13 +IF
   29.14 +COMMENT
   29.15 +FUNCTION_IMPL
   29.16 +CURSOR
   29.17 +COMMENT
   29.18 +PROCEDURE_IMPL
   29.19 +BEGIN_END
   29.20 +COMMENT
    30.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    30.2 +++ b/PLSQL/Lexer/test/unit/data/expected/test.upg.structure	Wed May 15 23:04:20 2013 +0200
    30.3 @@ -0,0 +1,17 @@
    30.4 +JAVA_SOURCE
    30.5 +DECLARE_END
    30.6 +CURSOR
    30.7 +STATEMENT
    30.8 +IF
    30.9 +STATEMENT
   30.10 +STATEMENT
   30.11 +CASE
   30.12 +CASE
   30.13 +CASE
   30.14 +CASE
   30.15 +CASE
   30.16 +CASE
   30.17 +CASE
   30.18 +TRIGGER
   30.19 +STATEMENT
   30.20 +STATEMENT
    31.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    31.2 +++ b/PLSQL/Lexer/test/unit/data/expected/test1.apy.structure	Wed May 15 23:04:20 2013 +0200
    31.3 @@ -0,0 +1,53 @@
    31.4 +VIEW
    31.5 +DECLARE_END
    31.6 +CURSOR
    31.7 +PROCEDURE_IMPL
    31.8 +STATEMENT
    31.9 +STATEMENT
   31.10 +IF
   31.11 +FOR_LOOP
   31.12 +BEGIN_END
   31.13 +DECLARE_END
   31.14 +STATEMENT
   31.15 +CASE
   31.16 +STATEMENT
   31.17 +STATEMENT
   31.18 +STATEMENT
   31.19 +STATEMENT
   31.20 +CASE
   31.21 +CASE
   31.22 +CASE
   31.23 +CASE
   31.24 +VIEW
   31.25 +TABLE_COMMENT
   31.26 +DECLARE_END
   31.27 +DECLARE_END
   31.28 +CURSOR
   31.29 +STATEMENT
   31.30 +IF
   31.31 +STATEMENT
   31.32 +STATEMENT
   31.33 +BEGIN_END
   31.34 +STATEMENT
   31.35 +VIEW
   31.36 +VIEW
   31.37 +TRIGGER
   31.38 +STATEMENT
   31.39 +STATEMENT
   31.40 +BEGIN_END
   31.41 +COMMENT
   31.42 +IF
   31.43 +IF
   31.44 +TRIGGER
   31.45 +STATEMENT
   31.46 +COMMENT
   31.47 +FUNCTION_IMPL
   31.48 +STATEMENT
   31.49 +STATEMENT
   31.50 +CASE
   31.51 +CASE
   31.52 +CASE
   31.53 +CASE
   31.54 +CASE
   31.55 +CASE
   31.56 +CASE
    32.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    32.2 +++ b/PLSQL/Lexer/test/unit/data/expected/test2.apy.structure	Wed May 15 23:04:20 2013 +0200
    32.3 @@ -0,0 +1,154 @@
    32.4 +PROCEDURE_IMPL
    32.5 +COMMENT
    32.6 +CURSOR
    32.7 +CURSOR
    32.8 +COMMENT
    32.9 +FOR_LOOP
   32.10 +COMMENT
   32.11 +COMMENT
   32.12 +COMMENT
   32.13 +COMMENT
   32.14 +COMMENT
   32.15 +IF
   32.16 +IF
   32.17 +COMMENT
   32.18 +COMMENT
   32.19 +IF
   32.20 +COMMENT
   32.21 +COMMENT
   32.22 +IF
   32.23 +COMMENT
   32.24 +IF
   32.25 +COMMENT
   32.26 +IF
   32.27 +COMMENT
   32.28 +IF
   32.29 +IF
   32.30 +IF
   32.31 +IF
   32.32 +COMMENT
   32.33 +IF
   32.34 +IF
   32.35 +IF
   32.36 +FOR_LOOP
   32.37 +COMMENT
   32.38 +COMMENT
   32.39 +IF
   32.40 +COMMENT
   32.41 +COMMENT
   32.42 +COMMENT
   32.43 +IF
   32.44 +IF
   32.45 +COMMENT
   32.46 +COMMENT
   32.47 +COMMENT
   32.48 +IF
   32.49 +COMMENT
   32.50 +IF
   32.51 +COMMENT
   32.52 +COMMENT
   32.53 +COMMENT
   32.54 +IF
   32.55 +IF
   32.56 +IF
   32.57 +IF
   32.58 +IF
   32.59 +IF
   32.60 +COMMENT
   32.61 +IF
   32.62 +COMMENT
   32.63 +IF
   32.64 +COMMENT
   32.65 +IF
   32.66 +IF
   32.67 +COMMENT
   32.68 +COMMENT
   32.69 +COMMENT
   32.70 +COMMENT
   32.71 +COMMENT
   32.72 +IF
   32.73 +IF
   32.74 +FOR_LOOP
   32.75 +IF
   32.76 +IF
   32.77 +IF
   32.78 +COMMENT
   32.79 +FOR_LOOP
   32.80 +COMMENT
   32.81 +IF
   32.82 +WHILE_LOOP
   32.83 +IF
   32.84 +COMMENT
   32.85 +IF
   32.86 +COMMENT
   32.87 +IF
   32.88 +IF
   32.89 +IF
   32.90 +COMMENT
   32.91 +IF
   32.92 +IF
   32.93 +IF
   32.94 +IF
   32.95 +IF
   32.96 +IF
   32.97 +COMMENT
   32.98 +IF
   32.99 +IF
  32.100 +COMMENT
  32.101 +IF
  32.102 +COMMENT
  32.103 +IF
  32.104 +IF
  32.105 +IF
  32.106 +IF
  32.107 +COMMENT
  32.108 +IF
  32.109 +IF
  32.110 +IF
  32.111 +IF
  32.112 +IF
  32.113 +IF
  32.114 +IF
  32.115 +IF
  32.116 +COMMENT
  32.117 +IF
  32.118 +IF
  32.119 +IF
  32.120 +IF
  32.121 +COMMENT
  32.122 +COMMENT
  32.123 +IF
  32.124 +COMMENT
  32.125 +COMMENT
  32.126 +IF
  32.127 +IF
  32.128 +IF
  32.129 +IF
  32.130 +IF
  32.131 +IF
  32.132 +IF
  32.133 +COMMENT
  32.134 +COMMENT
  32.135 +IF
  32.136 +COMMENT
  32.137 +COMMENT
  32.138 +COMMENT
  32.139 +FOR_LOOP
  32.140 +IF
  32.141 +IF
  32.142 +IF
  32.143 +COMMENT
  32.144 +IF
  32.145 +IF
  32.146 +COMMENT
  32.147 +COMMENT
  32.148 +FOR_LOOP
  32.149 +IF
  32.150 +COMMENT
  32.151 +COMMENT
  32.152 +COMMENT
  32.153 +COMMENT
  32.154 +COMMENT
  32.155 +COMMENT
  32.156 +COMMENT
  32.157 +COMMENT
    33.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    33.2 +++ b/PLSQL/Lexer/test/unit/data/expected/txtser.ins.structure	Wed May 15 23:04:20 2013 +0200
    33.3 @@ -0,0 +1,13 @@
    33.4 +COMMENT
    33.5 +JAVA_SOURCE
    33.6 +COMMENT
    33.7 +DECLARE_END
    33.8 +CURSOR
    33.9 +COMMENT
   33.10 +IF
   33.11 +COMMENT
   33.12 +IF
   33.13 +COMMENT
   33.14 +COMMENT
   33.15 +COMMENT
   33.16 +IF
    34.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    34.2 +++ b/PLSQL/Lexer/test/unit/data/fndbas_ora.cre	Wed May 15 23:04:20 2013 +0200
    34.3 @@ -0,0 +1,83 @@
    34.4 +--------------------------------------------------------------------------------------
    34.5 +-- File : fndbas_ora.cre
    34.6 +-- 
    34.7 +--------------------------------------------------------------------------------------
    34.8 +
    34.9 +-- CREATE tables and indexes
   34.10 +
   34.11 +CREATE TABLE &AO..X_ACTIVITY_GRANT_FILTER_TAB
   34.12 +(
   34.13 +   PERMISSION_SET_ID             VARCHAR2(30)        NOT NULL,
   34.14 +   ACTIVITY_NAME                 VARCHAR2(100)       NOT NULL,
   34.15 +   FILTER_ID                     VARCHAR2(100)       NOT NULL,
   34.16 +   GRANTED_FILTER_TYPE           VARCHAR2(100)       NOT NULL
   34.17 +)
   34.18 +TABLESPACE &fnd_data
   34.19 +/
   34.20 +ALTER TABLE &AO..X_ACTIVITY_GRANT_FILTER_TAB
   34.21 +   ADD (CONSTRAINT X_ACTIVITY_GRANT_FILTER_PK PRIMARY KEY (FILTER_ID, PERMISSION_SET_ID, ACTIVITY_NAME)
   34.22 +          USING INDEX
   34.23 +          TABLESPACE &fnd_index
   34.24 +       )
   34.25 +/
   34.26 +
   34.27 +CREATE TABLE &AO..X_FNDDR_ACTIVITY_ENT_USAGE_TAB
   34.28 +(
   34.29 +   USAGE                         VARCHAR2(100),
   34.30 +   ENTITY_ID                     VARCHAR2(100),
   34.31 +   ORDINAL                       NUMBER,
   34.32 +   ACTIVITY_ID                   VARCHAR2(100),
   34.33 +   WORKSPACE_ID                  VARCHAR2(100)
   34.34 +)
   34.35 +TABLESPACE &fnd_data
   34.36 +/
   34.37 +ALTER TABLE &AO..X_FNDDR_ACTIVITY_ENT_USAGE_TAB
   34.38 +   ADD (CONSTRAINT X_FNDDR_ACTIVITY_ENT_USEAGE_PK PRIMARY KEY (ACTIVITY_ID, ORDINAL, WORKSPACE_ID)
   34.39 +          USING INDEX
   34.40 +          TABLESPACE &fnd_index
   34.41 +       )
   34.42 +/
   34.43 +CREATE INDEX &AO..X_FNDDR_ACTIVITY_ENT_USEAGE_FK
   34.44 +   ON &AO..X_FNDDR_ACTIVITY_ENT_USAGE_TAB (ENTITY_ID, WORKSPACE_ID)
   34.45 +   TABLESPACE &fnd_index
   34.46 +/
   34.47 +
   34.48 +-- CREATE sequence
   34.49 +
   34.50 +CREATE SEQUENCE &AO..X_Ext_File_Batch_Param_Seq;
   34.51 +
   34.52 +-- CREATE trigger
   34.53 +
   34.54 +create or replace trigger &AO..x_vmogss_base_usermap_change
   34.55 +  after insert or update or delete on &AO..vmo_base_gss_usermap_change
   34.56 +  referencing old as oldrec new as newrec
   34.57 +  for each row
   34.58 +begin
   34.59 +  if updating or inserting then
   34.60 +    insert into &AO..vmo_base_gss_scope(gss_id, created, source_tbl, source_info) values(:newrec.gss_id, sysdate, 'VMO_BASE_GSS_USERMAP_CHANGE', :newrec.gss_id);
   34.61 +  end if;
   34.62 +end x_vmogss_base_usermap_change;
   34.63 +/
   34.64 +
   34.65 +-- CREATE trigger dynamically
   34.66 +
   34.67 +BEGIN
   34.68 +EXECUTE IMMEDIATE('create or replace trigger &AO..x_vmogss_base_sync_scope
   34.69 +  after insert on &AO..vmo_base_sync_scope
   34.70 +  referencing old as oldrec new as newrec
   34.71 +  for each row
   34.72 +begin
   34.73 +  if inserting then
   34.74 +    insert into &AO..vmo_base_gss_scope(gss_id, created, source_tbl, source_info) values(''ALL_GSS_ID'', sysdate, :newrec.tablename, :newrec.guid);
   34.75 +  end if;
   34.76 +end x_vmogss_base_sync_scope;');
   34.77 +EXCEPTION
   34.78 +    WHEN OTHERS THEN
   34.79 +        -- OK if ORA -00942: table or view does not exist
   34.80 +        IF INSTR(SQLERRM,'-00942') != 0 THEN NULL;
   34.81 +        ELSE raise_application_error ( -20000, SQLERRM ); 
   34.82 +        END IF;  
   34.83 +END;
   34.84 +/
   34.85 +
   34.86 +
    35.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    35.2 +++ b/PLSQL/Lexer/test/unit/data/person.ins	Wed May 15 23:04:20 2013 +0200
    35.3 @@ -0,0 +1,481 @@
    35.4 +-----------------------------------------------------------------------------
    35.5 +--  Module: PERSON
    35.6 +--
    35.7 +--  File:   PERSON.INS
    35.8 +--
    35.9 +--  IFS/Design Template Version 2.0.0
   35.10 +--
   35.11 +--  Date    Sign     History
   35.12 +--  ------  ----     -----------------------------------------------------------
   35.13 +--  080425  Deidlk   Bug 73297, Added the property codes EMPPREFIX and EMPMASK to PROPERTY_RULE_TAB
   35.14 +--  070525  Cprilk   B145522,Modified the DATA_TYPE_DB of property code 'EMPLOYEEID'.
   35.15 +--  070418  Cprilk   B142452,Added data in to PROTECTED_INFORMATION_TAB.
   35.16 +--  070409  Cprilk   Call 142241,Added property code 'EMPLOYEEID'
   35.17 +--  070320  Nueklk   Insert data into Marital_Status_Tab
   35.18 +--  061003  ChBalk   Bug 58601, Modified hardcoded date values to Database_SYS.get_first_calendar_date
   35.19 +--                   and Database_SYS.get_last_calendar_date.
   35.20 +--  040921  HiMa  Made CompanyPerson LU DOCMAN aware.
   35.21 +--  030717  Lara  Added property rule 'Allow Access to Myself'
   35.22 +--  030717  Rasi  Added property rule 'Transfer Employee Information to Biz API'
   35.23 +--  000404  WaPe  Added data insert to employee_name_configurator_tab
   35.24 +--  000222  Shir  Removed batch job for User_Access_API.Generate_Access
   35.25 +--  000215  Shir  Added code to update companies from finance to HR
   35.26 +--  000127  WaPe  Corrected the methods OBJECT_PROPERTY_API.add_value and ATTRIBUTE_DEFINITION_API.Set_Length
   35.27 +--  000124  Ravi  Called methods OBJECT_PROPERTY_API.add_value and ATTRIBUTE_DEFINITION_API.Set_Length 
   35.28 +--  991201  Shir  Added default value authority_time_tab
   35.29 +--  991201  Shir  Created a batch job for User_Access_API.Generate_Access
   35.30 +--  991201  Shir  Created
   35.31 +--  ------  ----  -----------------------------------------------------------
   35.32 +
   35.33 +
   35.34 +BEGIN
   35.35 +INSERT 
   35.36 +   INTO authority_time_tab
   35.37 +      (Time_stamp,
   35.38 +       rowversion)
   35.39 +       VALUES
   35.40 +       (sysdate,
   35.41 +       sysdate);
   35.42 +END;
   35.43 +/
   35.44 +DECLARE
   35.45 + val_   VARCHAR2(1000);
   35.46 +BEGIN
   35.47 + val_ := Object_Property_API.Get_Value('PersonCompany','*','All HR Modules 2001');
   35.48 + IF (val_ is NULL or val_='Yes,No') THEN -- old bug Yes,No means Yes
   35.49 +   OBJECT_PROPERTY_API.Set_Value('PersonCompany','*','All HR Modules 2001','Yes');  
   35.50 + END IF;
   35.51 +END;
   35.52 +/
   35.53 +-- Transfer companies from finance to hr
   35.54 +PROMPT *******************************************************************
   35.55 +PROMPT Insert companies defined in IFS Financials into IFS Human Resources
   35.56 +PROMPT *******************************************************************
   35.57 +
   35.58 +BEGIN
   35.59 +INSERT INTO person_company_tab (
   35.60 +   company_id, parent_company, create_cost_center, rowversion )
   35.61 +   SELECT DISTINCT
   35.62 +      company,'0','0',1
   35.63 +   FROM company_finance_tab
   35.64 +   WHERE company NOT IN
   35.65 +               (SELECT DISTINCT company_id
   35.66 +                FROM   person_company_tab);
   35.67 +END;
   35.68 +/
   35.69 +DECLARE
   35.70 +   CURSOR check_exits(company_id_ VARCHAR2,emp_no_ VARCHAR2)IS
   35.71 +      SELECT 1             
   35.72 +      FROM company_person_tab
   35.73 +      WHERE company_id = company_id_
   35.74 +      AND emp_no = emp_no_;
   35.75 +   temp_ NUMBER;   
   35.76 +BEGIN
   35.77 +FOR rec_ IN (SELECT * FROM company_emp_tab) LOOP
   35.78 +   OPEN check_exits(rec_.company,rec_.employee_id);
   35.79 +   FETCH check_exits INTO temp_;
   35.80 +   IF (check_exits%NOTFOUND) THEN
   35.81 +      INSERT INTO company_person_tab(company_id,emp_no,master_employment,operator,rowversion)
   35.82 +      VALUES (rec_.company,rec_.employee_id,'0',User,rec_.rowversion);  
   35.83 +   END IF; 
   35.84 +   CLOSE check_exits;     
   35.85 +END LOOP;
   35.86 +END;
   35.87 +/
   35.88 +DECLARE
   35.89 +   CURSOR check_exits(person_id_ VARCHAR2) IS
   35.90 +      SELECT 1             
   35.91 +      FROM pers_tab
   35.92 +      WHERE person_id = person_id_;
   35.93 +      temp_ NUMBER;
   35.94 +
   35.95 +BEGIN
   35.96 +   FOR rec_ IN (SELECT * FROM  person_info_tab) LOOP
   35.97 +      OPEN check_exits(rec_.person_id);
   35.98 +      FETCH check_exits INTO temp_;
   35.99 +      IF (check_exits%NOTFOUND) THEN
  35.100 +            INSERT INTO pers_tab(person_id,have_child,external_display_name,rowversion)
  35.101 +            VALUES (rec_.person_id,'0',rec_.name,1);   
  35.102 +       END IF;       
  35.103 +       CLOSE check_exits;     
  35.104 +   END LOOP;
  35.105 +END;
  35.106 +/
  35.107 +BEGIN
  35.108 +INSERT INTO employee_name_configurator_tab
  35.109 + (first_name_int_seq_no, 
  35.110 +  last_name_int_seq_no, 
  35.111 +  first_name_ext_seq_no,
  35.112 +  last_name_ext_seq_no, 
  35.113 +  rowversion)
  35.114 +SELECT 1, 2,1, 2,1 FROM DUAL
  35.115 +WHERE NOT EXISTS
  35.116 +(SELECT 1 FROM employee_name_configurator_tab);
  35.117 +END;
  35.118 +/
  35.119 +commit
  35.120 +/
  35.121 +DECLARE
  35.122 +   attr_ VARCHAR2(2000);
  35.123 +BEGIN
  35.124 +   ---
  35.125 +   Client_SYS.Clear_Attr(attr_);
  35.126 +   Client_SYS.Add_To_Attr('PROPERTY_CODE',     'EMPBIZAPI', attr_);
  35.127 +   Client_SYS.Add_To_Attr('DATA_TYPE_DB',            '1', attr_);           -- String
  35.128 +   Client_SYS.Add_To_Attr('LENGTH',                   3 , attr_);
  35.129 +   Client_SYS.Add_To_Attr('MULTIPLE_INSTANCES_ALLOWED', 'FALSE' , attr_);
  35.130 +   Client_SYS.Add_To_Attr('USE_LOV_FOR_VALIDATION', '1' , attr_);             
  35.131 +   Client_SYS.Add_To_Attr('PROPERTY_OBJECT_DB',      '1', attr_);           -- Company
  35.132 +   Client_SYS.Add_To_Attr('DEFAULT_DESCRIPTION', 
  35.133 +                            'Employee Details BizAPI', attr_);
  35.134 +   Property_Rule_API.New_Modify(attr_);
  35.135 +   Commit; 
  35.136 +   ---
  35.137 +   Client_SYS.Clear_Attr(attr_);
  35.138 +   Client_SYS.Add_To_Attr('PROPERTY_CODE', 'EMPBIZAPI', attr_);
  35.139 +   Client_SYS.Add_To_Attr('PROPERTY_VALUE', 'YES', attr_); 
  35.140 +   Client_SYS.Add_To_Attr('DESCRIPTION', 'Transfer employee information', attr_);
  35.141 +   -- Bug 58601, Modified hardcoded date values to Database_SYS.get_first_calendar_date and get_last_calendar_date.
  35.142 +   Client_SYS.Add_To_Attr('VALID_FROM', Database_SYS.get_first_calendar_date, attr_);
  35.143 +   Client_SYS.Add_To_Attr('VALID_TO', Database_SYS.get_last_calendar_date, attr_);
  35.144 +   Property_Value_API.New_Modify(attr_);
  35.145 +   Commit;
  35.146 +   ---
  35.147 +   Client_SYS.Clear_Attr(attr_);
  35.148 +   Client_SYS.Add_To_Attr('PROPERTY_CODE', 'EMPBIZAPI', attr_);
  35.149 +   Client_SYS.Add_To_Attr('PROPERTY_VALUE', 'NO', attr_);
  35.150 +   Client_SYS.Add_To_Attr('DESCRIPTION', 'Do not transfer employee information', attr_);
  35.151 +   -- Bug 58601, Modified hardcoded date values to Database_SYS.get_first_calendar_date and get_last_calendar_date.
  35.152 +   Client_SYS.Add_To_Attr('VALID_FROM', Database_SYS.get_first_calendar_date, attr_);
  35.153 +   Client_SYS.Add_To_Attr('VALID_TO', Database_SYS.get_last_calendar_date, attr_);
  35.154 +   Property_Value_API.New_Modify(attr_);  
  35.155 +   Commit;
  35.156 +END;
  35.157 +/
  35.158 +commit;
  35.159 +
  35.160 +DECLARE
  35.161 +   attr_ VARCHAR2(2000);
  35.162 +BEGIN
  35.163 +   ---
  35.164 +   Client_SYS.Clear_Attr(attr_);
  35.165 +   Client_SYS.Add_To_Attr('PROPERTY_CODE',     'SELFACCESS', attr_);
  35.166 +   Client_SYS.Add_To_Attr('DATA_TYPE_DB',            '1', attr_);           -- String
  35.167 +   Client_SYS.Add_To_Attr('LENGTH',                   3 , attr_);
  35.168 +   Client_SYS.Add_To_Attr('MULTIPLE_INSTANCES_ALLOWED', 'FALSE' , attr_);             
  35.169 +   Client_SYS.Add_To_Attr('USE_LOV_FOR_VALIDATION', '1' , attr_);
  35.170 +   Client_SYS.Add_To_Attr('PROPERTY_OBJECT_DB',      '1', attr_);           -- Company
  35.171 +   Client_SYS.Add_To_Attr('DEFAULT_DESCRIPTION', 
  35.172 +                            'Allow Access to Myself', attr_);
  35.173 +   Property_Rule_API.New_Modify(attr_);
  35.174 +   Commit; 
  35.175 +   ---
  35.176 +   Client_SYS.Clear_Attr(attr_);
  35.177 +   Client_SYS.Add_To_Attr('PROPERTY_CODE', 'SELFACCESS', attr_);
  35.178 +   Client_SYS.Add_To_Attr('PROPERTY_VALUE', 'YES', attr_); 
  35.179 +   Client_SYS.Add_To_Attr('DESCRIPTION', 'Access to Myself', attr_);
  35.180 +   -- Bug 58601, Modified hardcoded date values to Database_SYS.get_first_calendar_date and get_last_calendar_date.
  35.181 +   Client_SYS.Add_To_Attr('VALID_FROM', Database_SYS.get_first_calendar_date, attr_);
  35.182 +   Client_SYS.Add_To_Attr('VALID_TO', Database_SYS.get_last_calendar_date, attr_);
  35.183 +   Property_Value_API.New_Modify(attr_);
  35.184 +   Commit;
  35.185 +   ---
  35.186 +   Client_SYS.Clear_Attr(attr_);
  35.187 +   Client_SYS.Add_To_Attr('PROPERTY_CODE', 'SELFACCESS', attr_);
  35.188 +   Client_SYS.Add_To_Attr('PROPERTY_VALUE', 'NO', attr_);
  35.189 +   Client_SYS.Add_To_Attr('DESCRIPTION', 'No Access to Myself', attr_);
  35.190 +   -- Bug 58601, Modified hardcoded date values to Database_SYS.get_first_calendar_date and get_last_calendar_date.
  35.191 +   Client_SYS.Add_To_Attr('VALID_FROM', Database_SYS.get_first_calendar_date, attr_);
  35.192 +   Client_SYS.Add_To_Attr('VALID_TO', Database_SYS.get_last_calendar_date, attr_);
  35.193 +   Property_Value_API.New_Modify(attr_);  
  35.194 +   Commit;
  35.195 +END;
  35.196 +/
  35.197 +commit;
  35.198 +
  35.199 +DECLARE
  35.200 +   attr_ VARCHAR2(2000);
  35.201 +BEGIN
  35.202 +   ---
  35.203 +   Client_SYS.Clear_Attr(attr_);
  35.204 +   Client_SYS.Add_To_Attr('PROPERTY_CODE',     'EMPLOYEEID', attr_);
  35.205 +   Client_SYS.Add_To_Attr('DATA_TYPE_DB',            '2', attr_);           -- Number
  35.206 +   Client_SYS.Add_To_Attr('LENGTH',                   10 , attr_);
  35.207 +   Client_SYS.Add_To_Attr('MULTIPLE_INSTANCES_ALLOWED', 'FALSE' , attr_);             
  35.208 +   Client_SYS.Add_To_Attr('USE_LOV_FOR_VALIDATION', '0' , attr_);
  35.209 +   Client_SYS.Add_To_Attr('PROPERTY_OBJECT_DB',      '1', attr_);           -- Company
  35.210 +   Client_SYS.Add_To_Attr('DEFAULT_DESCRIPTION', 
  35.211 +                            'Next Employee ID', attr_);
  35.212 +   Property_Rule_API.New_Modify(attr_);
  35.213 +   Commit; 
  35.214 +END;
  35.215 +/
  35.216 +Commit; 
  35.217 +
  35.218 +DECLARE
  35.219 +   CURSOR check_comp_exist(company_id_ VARCHAR2) IS
  35.220 +      SELECT 1             
  35.221 +      FROM employee_status_tab
  35.222 +      WHERE company_id = company_id_
  35.223 +        AND seq_no     = 1;
  35.224 +   chk_comp_exist_ NUMBER;
  35.225 +BEGIN
  35.226 +   FOR get_company_ IN (SELECT DISTINCT company_id FROM person_company_tab) LOOP
  35.227 +      OPEN check_comp_exist(get_company_.company_id);
  35.228 +      FETCH check_comp_exist INTO chk_comp_exist_;
  35.229 +      IF (check_comp_exist%NOTFOUND) THEN
  35.230 +         INSERT INTO EMPLOYEE_STATUS_TAB(company_id, seq_no, employee_status, active, status_obsolete, rowversion)
  35.231 +         VALUES (get_company_.company_id, 1, '*', 'TRUE', 'FALSE', 1); 
  35.232 +      END IF;
  35.233 +      CLOSE check_comp_exist;   
  35.234 +   END LOOP;
  35.235 +END;
  35.236 +/
  35.237 +BEGIN
  35.238 +   Module_Translate_Attr_Util_API.Insert_Prog_Translation( 'PERSON', 'EmployeeStatus', 'TRUE', 'True');
  35.239 +   Module_Translate_Attr_Util_API.Insert_Prog_Translation( 'PERSON', 'EmployeeStatus', 'FALSE', 'False');
  35.240 +   
  35.241 +   Module_Translate_Attr_Util_API.Insert_Prog_Translation( 'PERSON', 'WizardConfiguration', 'TRUE', 'True');
  35.242 +   Module_Translate_Attr_Util_API.Insert_Prog_Translation( 'PERSON', 'WizardConfiguration', 'FALSE', 'False');
  35.243 +   
  35.244 +   Module_Translate_Attr_Util_API.Insert_Prog_Translation( 'PERSON', 'CompanyPosition', 'TRUE', 'True');
  35.245 +   Module_Translate_Attr_Util_API.Insert_Prog_Translation( 'PERSON', 'CompanyPosition', 'FALSE', 'False');
  35.246 +                                            
  35.247 +END;
  35.248 +/
  35.249 +commit
  35.250 +/
  35.251 +prompt Insert data into PERSON_DOCUMENT_TAB
  35.252 +
  35.253 +
  35.254 +prompt creating temporary procedure for insert
  35.255 +
  35.256 +CREATE OR REPLACE procedure Temp_Person_Document_Default(document_ VARCHAR2, 
  35.257 +                                                         description_ VARCHAR2,
  35.258 +                                                         active_    VARCHAR2, 
  35.259 +                                                         rcruit_document_type_ VARCHAR2)
  35.260 +IS
  35.261 +   CURSOR existdoc(c_document_ IN VARCHAR2) IS
  35.262 +      SELECT 1
  35.263 +      FROM person_word_document_tab
  35.264 +      WHERE document = c_document_;
  35.265 +   exist_  NUMBER;
  35.266 +BEGIN
  35.267 +   OPEN existdoc(document_);
  35.268 +   FETCH existdoc INTO exist_;
  35.269 +   IF existdoc%NOTFOUND THEN
  35.270 +      INSERT
  35.271 +      INTO person_word_document_tab(
  35.272 +         document,
  35.273 +         description,
  35.274 +         active,
  35.275 +         person_document_type,
  35.276 +         inc_comp_data,
  35.277 +         inc_emp_data,
  35.278 +         inc_salary_data,
  35.279 +         inc_free_field_data,
  35.280 +         rowversion)
  35.281 +      VALUES (
  35.282 +         document_,
  35.283 +         description_,
  35.284 +         'TRUE',
  35.285 +         rcruit_document_type_,
  35.286 +         'TRUE',
  35.287 +         'TRUE',
  35.288 +         'TRUE',
  35.289 +         'TRUE',
  35.290 +         SYSDATE);
  35.291 +      Module_Translate_Attr_Util_API.Insert_Prog_Translation( 
  35.292 +                                            'PERSON', 
  35.293 +                                            'PersonWordDocument',
  35.294 +                                            document_,
  35.295 +                                            description_);  
  35.296 +   END IF;
  35.297 +   CLOSE existdoc;
  35.298 +END Temp_Person_Document_Default;
  35.299 +/
  35.300 +DECLARE
  35.301 +   document_type_     VARCHAR2(1) := '5';
  35.302 +BEGIN
  35.303 +
  35.304 +Temp_Person_Document_Default('Certificate of Employmenten.doc'	, 'Certificate of Employment - English', '1', document_type_);
  35.305 +
  35.306 +END;
  35.307 +/
  35.308 +COMMIT;
  35.309 +
  35.310 +
  35.311 +prompt dropping temporary procedure
  35.312 +
  35.313 +DROP PROCEDURE Temp_Person_Document_Default;
  35.314 +
  35.315 +
  35.316 +BEGIN
  35.317 +   Object_Connection_SYS.Disable_Logical_Unit('CompanyPerson');
  35.318 +   Object_Connection_SYS.Enable_Logical_Unit('CompanyPerson', 'DocReferenceObject^', 'COMPANY_PERSON_ALL', 'COMPANY_PERSON_API');
  35.319 +END;
  35.320 +/
  35.321 +COMMIT;
  35.322 +
  35.323 +
  35.324 +prompt ************************************************************************
  35.325 +prompt Insert data into Marital_Status_Tab
  35.326 +prompt ************************************************************************
  35.327 +
  35.328 +DECLARE
  35.329 +   CURSOR check_exits IS
  35.330 +      SELECT 1
  35.331 +      FROM marital_status_tab
  35.332 +      WHERE marital_status = 'MARRIED';
  35.333 +   temp_          NUMBER;
  35.334 +   married_seq_   NUMBER;
  35.335 +   unmarried_seq_ NUMBER;
  35.336 +   widower_seq_   NUMBER;
  35.337 +BEGIN
  35.338 +   OPEN check_exits;
  35.339 +   FETCH check_exits INTO temp_;
  35.340 +   IF (check_exits%NOTFOUND) THEN
  35.341 +      SELECT MARITAL_STATUS_ID.NEXTVAL INTO married_seq_ FROM dual;	
  35.342 +      INSERT
  35.343 +         INTO marital_status_tab (
  35.344 +            marital_status,
  35.345 +            marital_status_id,
  35.346 +            system_defined,
  35.347 +            rowversion)
  35.348 +         VALUES (
  35.349 +            'MARRIED',
  35.350 +            married_seq_,
  35.351 +            'TRUE',
  35.352 +            1);
  35.353 +   
  35.354 +         Module_Translate_Attr_Util_API.Insert_Prog_Translation( 'PERSON',
  35.355 +                                                'MaritalStatus',
  35.356 +                                                'MARRIED',
  35.357 +                                                'Married');
  35.358 +   
  35.359 +         SELECT MARITAL_STATUS_ID.NEXTVAL INTO unmarried_seq_ FROM dual;	
  35.360 +         INSERT
  35.361 +            INTO marital_status_tab (
  35.362 +               marital_status,
  35.363 +               marital_status_id,
  35.364 +               system_defined,
  35.365 +               rowversion)
  35.366 +            VALUES (
  35.367 +               'UNMARRIED',
  35.368 +               unmarried_seq_,
  35.369 +               'TRUE',
  35.370 +               1);
  35.371 +   
  35.372 +            Module_Translate_Attr_Util_API.Insert_Prog_Translation( 'PERSON',
  35.373 +                                                   'MaritalStatus',
  35.374 +                                                   'UNMARRIED',
  35.375 +                                                   'Unmarried');
  35.376 +   						
  35.377 +         SELECT MARITAL_STATUS_ID.NEXTVAL INTO widower_seq_ FROM dual;	
  35.378 +         INSERT
  35.379 +            INTO marital_status_tab (
  35.380 +               marital_status,
  35.381 +               marital_status_id,
  35.382 +               system_defined,
  35.383 +               rowversion)
  35.384 +            VALUES (
  35.385 +               'WIDOW(ER)',
  35.386 +               widower_seq_,
  35.387 +               'TRUE',
  35.388 +               1);
  35.389 +   
  35.390 +            Module_Translate_Attr_Util_API.Insert_Prog_Translation( 'PERSON',
  35.391 +                                                   'MaritalStatus',
  35.392 +                                                   'WIDOW(ER)',
  35.393 +                                                   'Widow(er)');	
  35.394 +      END IF;
  35.395 +      CLOSE check_exits;   
  35.396 +END;
  35.397 +/
  35.398 +COMMIT;
  35.399 +
  35.400 +PROMPT ADD Translations
  35.401 +BEGIN
  35.402 +   Module_Translate_Attr_Util_API.Insert_Prog_Translation( 'PERSON', 'MaritalStatus', 'TRUE', 'True');
  35.403 +   Module_Translate_Attr_Util_API.Insert_Prog_Translation( 'PERSON', 'MaritalStatus', 'FALSE', 'False');
  35.404 +END;
  35.405 +/
  35.406 +COMMIT;
  35.407 +/
  35.408 +prompt ************************************************************************
  35.409 +prompt Insert data into PROTECTED_INFORMATION_TAB
  35.410 +prompt ************************************************************************
  35.411 +
  35.412 +DECLARE
  35.413 +   CURSOR check_exits IS
  35.414 +      SELECT 1             
  35.415 +      FROM protected_information_tab
  35.416 +      WHERE protected_field = 'Personal Communication Methods';
  35.417 +   temp_ NUMBER;   
  35.418 +BEGIN 
  35.419 +   OPEN check_exits;
  35.420 +   FETCH check_exits INTO temp_;
  35.421 +   IF (check_exits%NOTFOUND) THEN     
  35.422 +     INSERT INTO protected_information_tab(Protected_Field,Protected_Value,Rowversion)
  35.423 +     VALUES ('Personal Address','TRUE',SYSDATE);
  35.424 +     INSERT INTO protected_information_tab(Protected_Field,Protected_Value,Rowversion)
  35.425 +     VALUES ('Country','TRUE',SYSDATE); 
  35.426 +     INSERT INTO protected_information_tab(Protected_Field,Protected_Value,Rowversion)
  35.427 +     VALUES ('Personal Communication Methods','TRUE',SYSDATE);
  35.428 +     INSERT INTO protected_information_tab(Protected_Field,Protected_Value,Rowversion)
  35.429 +     VALUES ('Date of Birth','FALSE',SYSDATE);  
  35.430 +     INSERT INTO protected_information_tab(Protected_Field,Protected_Value,Rowversion)
  35.431 +     VALUES ('Place of Birth','FALSE',SYSDATE);
  35.432 +     INSERT INTO protected_information_tab(Protected_Field,Protected_Value,Rowversion)
  35.433 +     VALUES ('Citizen Of','FALSE',SYSDATE);  
  35.434 +     INSERT INTO protected_information_tab(Protected_Field,Protected_Value,Rowversion)
  35.435 +     VALUES ('Insurance Id','FALSE',SYSDATE);
  35.436 +     INSERT INTO protected_information_tab(Protected_Field,Protected_Value,Rowversion)
  35.437 +     VALUES ('Gender','FALSE',SYSDATE);  
  35.438 +     INSERT INTO protected_information_tab(Protected_Field,Protected_Value,Rowversion)
  35.439 +     VALUES ('Blood Type','FALSE',SYSDATE); 
  35.440 +     INSERT INTO protected_information_tab(Protected_Field,Protected_Value,Rowversion)
  35.441 +     VALUES ('Marital Status','FALSE',SYSDATE); 
  35.442 +     INSERT INTO protected_information_tab(Protected_Field,Protected_Value,Rowversion)
  35.443 +     VALUES ('Have Children','FALSE',SYSDATE);      
  35.444 +   END IF; 
  35.445 +   CLOSE check_exits;  
  35.446 +END;
  35.447 +/
  35.448 +COMMIT;
  35.449 +
  35.450 +--Bug 73297, Start
  35.451 +PROMPT ************************************************************************
  35.452 +PROMPT Insert data INTO PROPERTY_RULE_TAB - Enhanced Automatic Employee Numbering 
  35.453 +PROMPT ************************************************************************
  35.454 +
  35.455 +DECLARE
  35.456 +   attr_ VARCHAR2(2000);
  35.457 +BEGIN
  35.458 +   ---
  35.459 +   Client_SYS.Clear_Attr(attr_);
  35.460 +   Client_SYS.Add_To_Attr('PROPERTY_CODE', 'EMPMASK', attr_);
  35.461 +   Client_SYS.Add_To_Attr('DATA_TYPE_DB', '1', attr_);                   -- String
  35.462 +   Client_SYS.Add_To_Attr('LENGTH', 15 , attr_);
  35.463 +   Client_SYS.Add_To_Attr('MULTIPLE_INSTANCES_ALLOWED', 'FALSE' , attr_);             
  35.464 +   Client_SYS.Add_To_Attr('USE_LOV_FOR_VALIDATION', '0' , attr_);
  35.465 +   Client_SYS.Add_To_Attr('PROPERTY_OBJECT_DB', '1', attr_);             -- Company
  35.466 +   Client_SYS.Add_To_Attr('DEFAULT_DESCRIPTION', 'Automatic Employee Numbering Mask', attr_);
  35.467 +   Property_Rule_API.New_Modify(attr_);
  35.468 +   COMMIT;
  35.469 +   
  35.470 +   ---
  35.471 +   Client_SYS.Clear_Attr(attr_);
  35.472 +   Client_SYS.Add_To_Attr('PROPERTY_CODE', 'EMPPREFIX', attr_);
  35.473 +   Client_SYS.Add_To_Attr('DATA_TYPE_DB', '1', attr_);                   -- String
  35.474 +   Client_SYS.Add_To_Attr('LENGTH', 10 , attr_);
  35.475 +   Client_SYS.Add_To_Attr('MULTIPLE_INSTANCES_ALLOWED', 'FALSE' , attr_);             
  35.476 +   Client_SYS.Add_To_Attr('USE_LOV_FOR_VALIDATION', '0' , attr_);
  35.477 +   Client_SYS.Add_To_Attr('PROPERTY_OBJECT_DB', '1', attr_);             -- Company
  35.478 +   Client_SYS.Add_To_Attr('DEFAULT_DESCRIPTION', 'Automatic Employee Numbering Prefix  ', attr_);
  35.479 +   Property_Rule_API.New_Modify(attr_);
  35.480 +   COMMIT;
  35.481 +END;
  35.482 +/
  35.483 +COMMIT;
  35.484 +--Bug 73297, End
    36.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    36.2 +++ b/PLSQL/Lexer/test/unit/data/sys_IalObjectSlave.api	Wed May 15 23:04:20 2013 +0200
    36.3 @@ -0,0 +1,82 @@
    36.4 +-----------------------------------------------------------------------------
    36.5 +--
    36.6 +--  Logical unit: IalObjectSlave
    36.7 +--
    36.8 +--  IFS/Design Template Version 2.2
    36.9 +--
   36.10 +--  Date    Sign  History
   36.11 +--  ------  ----  -----------------------------------------------------------
   36.12 +--  990301  MANY  Project Invader for IAL (ToDo #3177).
   36.13 +--  030131  ROOD  Removed unused public interfaces (Bug#35022).
   36.14 +--  030225  ROOD  Changed module to FNDBAS (ToDo#4149).
   36.15 +-----------------------------------------------------------------------------
   36.16 +
   36.17 +DEFINE MODULE        = FNDBAS
   36.18 +DEFINE LU            = IalObjectSlave
   36.19 +DEFINE PKG           = IAL_OBJECT_SLAVE_API
   36.20 +
   36.21 +
   36.22 +
   36.23 +PROMPT Creating &INFO_OWNER..&PKG specification
   36.24 +
   36.25 +CREATE OR REPLACE PACKAGE &INFO_OWNER..&PKG IS
   36.26 +
   36.27 +module_  CONSTANT VARCHAR2(25) := '&MODULE';
   36.28 +lu_name_ CONSTANT VARCHAR2(25) := '&LU';
   36.29 +
   36.30 +-----------------------------------------------------------------------------
   36.31 +-------------------- LU SPECIFIC PRIVATE METHODS ----------------------------
   36.32 +-----------------------------------------------------------------------------
   36.33 +
   36.34 +
   36.35 +-----------------------------------------------------------------------------
   36.36 +-------------------- LU SPECIFIC PROTECTED METHODS --------------------------
   36.37 +-----------------------------------------------------------------------------
   36.38 +
   36.39 +
   36.40 +-----------------------------------------------------------------------------
   36.41 +-------------------- LU SPECIFIC PUBLIC METHODS -----------------------------
   36.42 +-----------------------------------------------------------------------------
   36.43 +
   36.44 +PROCEDURE Exec_Ddl_Statement (
   36.45 +   stmt_        IN VARCHAR2 );
   36.46 +
   36.47 +PROCEDURE Enumerate_Column_Info (
   36.48 +   attr_ OUT VARCHAR2,
   36.49 +   name_ IN  VARCHAR2 );
   36.50 +
   36.51 +PROCEDURE Enumerate_Index_Info (
   36.52 +   index_list_ OUT VARCHAR2,
   36.53 +   name_       IN  VARCHAR2 );
   36.54 +
   36.55 +PROCEDURE Add_Index (
   36.56 +   name_        IN VARCHAR2,
   36.57 +   column_name_ IN VARCHAR2 );
   36.58 +
   36.59 +PROCEDURE Remove_Index (
   36.60 +   name_        IN VARCHAR2,
   36.61 +   column_name_ IN VARCHAR2 );
   36.62 +
   36.63 +PROCEDURE Get_Object_Info (
   36.64 +   attr_    OUT VARCHAR2,
   36.65 +   name_    IN  VARCHAR2 );
   36.66 +
   36.67 +FUNCTION Check_Index (
   36.68 +   name_        IN VARCHAR2,
   36.69 +   column_name_ IN VARCHAR2 ) RETURN VARCHAR2;
   36.70 +
   36.71 +PROCEDURE Get_Table_Info (
   36.72 +   table_info_ OUT VARCHAR2,
   36.73 +   name_       IN  VARCHAR2 );
   36.74 +
   36.75 +-----------------------------------------------------------------------------
   36.76 +-------------------- FOUNDATION1 METHODS ------------------------------------
   36.77 +-----------------------------------------------------------------------------
   36.78 +
   36.79 +PROCEDURE Init;
   36.80 +
   36.81 +END &PKG;
   36.82 +/
   36.83 +SHOW ERROR
   36.84 +
   36.85 +-----------------------------------------------------------------------------
    37.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    37.2 +++ b/PLSQL/Lexer/test/unit/data/sys_IalObjectSlave.apy	Wed May 15 23:04:20 2013 +0200
    37.3 @@ -0,0 +1,376 @@
    37.4 +-----------------------------------------------------------------------------
    37.5 +--
    37.6 +--  Logical unit: IalObjectSlave
    37.7 +--
    37.8 +--  Purpose:
    37.9 +--
   37.10 +--  IFS/Design Template Version 2.2
   37.11 +--
   37.12 +--  Date    Sign  History
   37.13 +--  ------  ----  -----------------------------------------------------------
   37.14 +--  990301  MANY  Project Invader for IAL (ToDo #3177).
   37.15 +--  990301  ERFO  Corrected table name paramters for Add/Remove_Index.
   37.16 +--  990322  MANY  Implemented partial replication (ToDo #3222).
   37.17 +--  030113  ROOD  Made Get_Table_Info handle locally managed tablespaces (Bug#35022).
   37.18 +--  030130  ROOD  Handling for locally managed tablespaces for indexes too (Bug#35022).
   37.19 +--                Removed unused public interfaces. Added implementation help methods.
   37.20 +--                Some other implementation modifications. 
   37.21 +--  030225  ROOD  Changed module to FNDBAS (ToDo#4149).
   37.22 +--  090107  HASP  Increased length of indexes_ variable in Enumerate_Index_Info method (Bug#79640).
   37.23 +--  090817  NABA  Certified the assert safe for dynamic SQLs (Bug#84218)
   37.24 +-----------------------------------------------------------------------------
   37.25 +
   37.26 +DEFINE MODULE        = FNDBAS
   37.27 +DEFINE LU            = IalObjectSlave
   37.28 +DEFINE PKG           = IAL_OBJECT_SLAVE_API
   37.29 +
   37.30 +-----------------------------------------------------------------------------
   37.31 +-------------------- PACKAGES FOR METHODS -----------------------------------
   37.32 +-----------------------------------------------------------------------------
   37.33 +
   37.34 +PROMPT Creating &INFO_OWNER..&PKG implementation
   37.35 +
   37.36 +CREATE OR REPLACE PACKAGE BODY &INFO_OWNER..&PKG IS
   37.37 +
   37.38 +-----------------------------------------------------------------------------
   37.39 +-------------------- LU SPECIFIC IMPLEMENTATION METHOD DECLARATIONS ---------
   37.40 +-----------------------------------------------------------------------------
   37.41 +
   37.42 +FUNCTION Is_Locally_Managed___ (
   37.43 +   tablespace_ IN VARCHAR2 ) RETURN BOOLEAN;
   37.44 +
   37.45 +FUNCTION Is_Column_Indexed___ (
   37.46 +   name_        IN VARCHAR2,
   37.47 +   column_name_ IN VARCHAR2 ) RETURN VARCHAR2;
   37.48 +
   37.49 +FUNCTION Get_Column_Id___ (
   37.50 +   table_name_  IN VARCHAR2,
   37.51 +   column_name_ IN VARCHAR2 ) RETURN VARCHAR2;
   37.52 +
   37.53 +FUNCTION Table_Exist___ (
   37.54 +   table_name_ IN VARCHAR2 ) RETURN BOOLEAN;
   37.55 +
   37.56 +-----------------------------------------------------------------------------
   37.57 +-------------------- LU SPECIFIC IMPLEMENTATION METHODS ---------------------
   37.58 +-----------------------------------------------------------------------------
   37.59 +
   37.60 +FUNCTION Is_Locally_Managed___ (
   37.61 +   tablespace_ IN VARCHAR2 ) RETURN BOOLEAN
   37.62 +IS
   37.63 +   extent_management_ VARCHAR2(10);
   37.64 +
   37.65 +   CURSOR get_extent_management IS
   37.66 +      SELECT extent_management
   37.67 +      FROM   user_tablespaces
   37.68 +      WHERE  tablespace_name = tablespace_;
   37.69 +BEGIN
   37.70 +   OPEN get_extent_management;
   37.71 +   FETCH get_extent_management INTO extent_management_;
   37.72 +   CLOSE get_extent_management;
   37.73 +   RETURN extent_management_ = 'LOCAL';
   37.74 +END Is_Locally_Managed___;
   37.75 +
   37.76 +FUNCTION Is_Column_Indexed___ (
   37.77 +   name_        IN VARCHAR2,
   37.78 +   column_name_ IN VARCHAR2 ) RETURN VARCHAR2
   37.79 +IS
   37.80 +   column_id_  VARCHAR2(10) := Get_Column_Id___(name_||'_TAB', column_name_);
   37.81 +   dummy_      NUMBER;
   37.82 +   found_      VARCHAR2(5);
   37.83 +
   37.84 +   CURSOR get_index(index_name_ IN VARCHAR2) IS
   37.85 +      SELECT 1
   37.86 +      FROM user_indexes
   37.87 +      WHERE index_name = index_name_;
   37.88 +
   37.89 +BEGIN
   37.90 +   OPEN get_index(name_||'_X'||column_id_);
   37.91 +   FETCH get_index INTO dummy_;
   37.92 +   IF get_index%FOUND THEN
   37.93 +      found_ := 'TRUE';
   37.94 +   ELSE
   37.95 +      found_ := 'FALSE';
   37.96 +   END IF;
   37.97 +   CLOSE get_index;
   37.98 +   RETURN found_;
   37.99 +END Is_Column_Indexed___;
  37.100 +
  37.101 +FUNCTION Get_Column_Id___ (
  37.102 +   table_name_  IN VARCHAR2,
  37.103 +   column_name_ IN VARCHAR2 ) RETURN VARCHAR2
  37.104 +IS
  37.105 +   id_ NUMBER;
  37.106 +
  37.107 +   CURSOR get_id IS
  37.108 +      SELECT column_id
  37.109 +      FROM   user_tab_columns
  37.110 +      WHERE  table_name = table_name_
  37.111 +      AND    column_name = column_name_;
  37.112 +BEGIN
  37.113 +   OPEN get_id;
  37.114 +   FETCH get_id INTO id_;
  37.115 +   CLOSE get_id;
  37.116 +   RETURN to_char(id_);
  37.117 +END Get_Column_Id___;
  37.118 +
  37.119 +FUNCTION Table_Exist___ (
  37.120 +   table_name_ IN VARCHAR2 ) RETURN BOOLEAN
  37.121 +IS
  37.122 +   dummy_  NUMBER;
  37.123 +
  37.124 +   CURSOR exist_control IS
  37.125 +   SELECT 1
  37.126 +   FROM user_tables
  37.127 +   WHERE table_name = table_name_;
  37.128 +BEGIN
  37.129 +   OPEN exist_control;
  37.130 +   FETCH exist_control INTO dummy_;
  37.131 +   IF exist_control%FOUND THEN
  37.132 +      CLOSE exist_control;
  37.133 +      RETURN (TRUE);
  37.134 +   END IF;
  37.135 +   CLOSE exist_control;
  37.136 +   RETURN (FALSE);
  37.137 +END Table_Exist___;
  37.138 +
  37.139 +-----------------------------------------------------------------------------
  37.140 +-------------------- LU SPECIFIC PRIVATE METHODS ----------------------------
  37.141 +-----------------------------------------------------------------------------
  37.142 +
  37.143 +
  37.144 +-----------------------------------------------------------------------------
  37.145 +-------------------- LU SPECIFIC PROTECTED METHODS --------------------------
  37.146 +-----------------------------------------------------------------------------
  37.147 +
  37.148 +
  37.149 +-----------------------------------------------------------------------------
  37.150 +-------------------- LU SPECIFIC PUBLIC METHODS -----------------------------
  37.151 +-----------------------------------------------------------------------------
  37.152 +
  37.153 +PROCEDURE Exec_Ddl_Statement (
  37.154 +   stmt_        IN VARCHAR2 )
  37.155 +IS
  37.156 +BEGIN
  37.157 +   -- Safe as package is in IAL Owner schema
  37.158 +   -- ifs_assert_safe nabalk 20090817
  37.159 +   EXECUTE IMMEDIATE stmt_;
  37.160 +END Exec_Ddl_Statement;
  37.161 +
  37.162 +PROCEDURE Enumerate_Column_Info (
  37.163 +   attr_ OUT VARCHAR2,
  37.164 +   name_ IN  VARCHAR2 )
  37.165 +IS
  37.166 +   out_attr_   VARCHAR2(19000);
  37.167 +   tmp_attr_   VARCHAR2(32000);
  37.168 +   table_name_ VARCHAR2(30) := name_||'_TAB';
  37.169 +   view_name_  VARCHAR2(30) := name_||'_IAL';
  37.170 +
  37.171 +   CURSOR get_column_info(table_or_view_name_ IN VARCHAR2) IS
  37.172 +      SELECT * FROM user_tab_columns
  37.173 +      WHERE  table_name = table_or_view_name_;
  37.174 +BEGIN
  37.175 +   IF Table_Exist___(table_name_) THEN
  37.176 +      FOR rec_ IN get_column_info(table_name_) LOOP
  37.177 +         tmp_attr_ := NULL;
  37.178 +         tmp_attr_ := tmp_attr_ || 'NAME' || chr(31) || rec_.column_name || chr(30);
  37.179 +         tmp_attr_ := tmp_attr_ || 'DATATYPE' || chr(31) || rec_.data_type || chr(30);
  37.180 +         tmp_attr_ := tmp_attr_ || 'INDEXED' || chr(31) || Is_Column_Indexed___(name_, rec_.column_name) || chr(30);
  37.181 +         out_attr_ := out_attr_ || tmp_attr_ ||chr(29);
  37.182 +      END LOOP;
  37.183 +   ELSE
  37.184 +      FOR rec_ IN get_column_info(view_name_) LOOP
  37.185 +         tmp_attr_ := NULL;
  37.186 +         tmp_attr_ := tmp_attr_ || 'NAME' || chr(31) || rec_.column_name || chr(30);
  37.187 +         tmp_attr_ := tmp_attr_ || 'DATATYPE' || chr(31) || rec_.data_type || chr(30);
  37.188 +         tmp_attr_ := tmp_attr_ || 'INDEXED' || chr(31) || 'FALSE' || chr(30);
  37.189 +         out_attr_ := out_attr_ || tmp_attr_ ||chr(29);
  37.190 +      END LOOP;
  37.191 +   END IF;
  37.192 +   attr_ := out_attr_;
  37.193 +END Enumerate_Column_Info;
  37.194 +
  37.195 +PROCEDURE Enumerate_Index_Info (
  37.196 +   index_list_ OUT VARCHAR2,
  37.197 +   name_       IN  VARCHAR2 )
  37.198 +IS
  37.199 +   indexes_           VARCHAR2(32000);
  37.200 +   index_             VARCHAR2(2000);
  37.201 +   col_list_          VARCHAR2(400);
  37.202 +   delim_             VARCHAR2(1);
  37.203 +   table_name_        VARCHAR2(30) := name_ || '_TAB';
  37.204 +
  37.205 +   CURSOR get_index_info IS
  37.206 +      SELECT * 
  37.207 +      FROM user_indexes
  37.208 +      WHERE  table_name = table_name_;
  37.209 +
  37.210 +   CURSOR get_columns(index_name_ IN VARCHAR2) IS
  37.211 +      SELECT column_name 
  37.212 +      FROM user_ind_columns
  37.213 +      WHERE  index_name = index_name_
  37.214 +      ORDER BY column_position;
  37.215 +BEGIN
  37.216 +   FOR ind_ IN get_index_info LOOP
  37.217 +      IF (ind_.uniqueness = 'UNIQUE') THEN
  37.218 +         index_ := 'CREATE UNIQUE INDEX ' || ind_.index_name || ' ON ' || ind_.table_name || '(';
  37.219 +      ELSE
  37.220 +         index_ := 'CREATE INDEX ' || ind_.index_name || ' ON ' || ind_.table_name || '(';
  37.221 +      END IF;
  37.222 +      col_list_ := NULL;
  37.223 +      delim_ := NULL;
  37.224 +      FOR col_ IN get_columns(ind_.index_name) LOOP
  37.225 +         col_list_ := col_list_ || delim_ || col_.column_name;
  37.226 +         delim_ := ',';
  37.227 +      END LOOP;
  37.228 +      IF (col_list_ IS NOT NULL) THEN -- Can a index have zero columns? Well, just in case...
  37.229 +         index_ := index_ || col_list_ || ') TABLESPACE ' || ind_.tablespace_name || ' ';
  37.230 +         -- Statements only necessary if not locally managed tablespace
  37.231 +         IF NOT Is_Locally_Managed___(ind_.tablespace_name) THEN
  37.232 +            index_ := index_ || 'INITRANS ' || ind_.ini_trans || ' ';
  37.233 +            index_ := index_ || 'MAXTRANS ' || ind_.max_trans || ' ';
  37.234 +            index_ := index_ || 'PCTFREE ' || ind_.pct_free || ' ';
  37.235 +            index_ := index_ || 'STORAGE (INITIAL ' || ind_.initial_extent || ' NEXT ' || ind_.next_extent || ' ';
  37.236 +            index_ := index_ || 'MINEXTENTS ' || ind_.min_extents || ' MAXEXTENTS ' || ind_.max_extents || ' ';
  37.237 +            index_ := index_ || 'PCTINCREASE ' || ind_.pct_increase || ' FREELISTS ' || ind_.freelists || ' ';
  37.238 +            index_ := index_ || 'FREELIST GROUPS ' || ind_.freelist_groups || ')';
  37.239 +         END IF;
  37.240 +         -- Add this index to the list for all indexes
  37.241 +         indexes_ := indexes_ || index_ || chr(31);
  37.242 +      END IF;
  37.243 +   END LOOP;
  37.244 +   index_list_ := indexes_;
  37.245 +END Enumerate_Index_Info;
  37.246 +
  37.247 +PROCEDURE Add_Index (
  37.248 +   name_        IN VARCHAR2,
  37.249 +   column_name_ IN VARCHAR2 )
  37.250 +IS
  37.251 +   column_id_  VARCHAR2(10) := Get_Column_Id___(name_||'_TAB', column_name_);
  37.252 +BEGIN
  37.253 +   Exec_Ddl_Statement('CREATE INDEX '||name_||'_X'||column_id_||' ON '||name_||'_TAB ('||column_name_||')');
  37.254 +END Add_Index;
  37.255 +
  37.256 +PROCEDURE Remove_Index (
  37.257 +   name_        IN VARCHAR2,
  37.258 +   column_name_ IN VARCHAR2 )
  37.259 +IS
  37.260 +   column_id_  VARCHAR2(10) := Get_Column_Id___(name_||'_TAB', column_name_);
  37.261 +BEGIN
  37.262 +   Exec_Ddl_Statement('DROP INDEX '||name_||'_X'||column_id_);
  37.263 +END Remove_Index;
  37.264 +
  37.265 +PROCEDURE Get_Object_Info (
  37.266 +   attr_    OUT VARCHAR2,
  37.267 +   name_    IN  VARCHAR2 )
  37.268 +IS
  37.269 +   tmp_attr_   VARCHAR2(100) := NULL;
  37.270 +   dummy_      NUMBER;
  37.271 +   table_name_ VARCHAR2(30) := name_||'_TAB';
  37.272 +
  37.273 +   CURSOR find_objdate_column IS
  37.274 +      SELECT 1
  37.275 +      FROM user_tab_columns
  37.276 +      WHERE table_name = table_name_
  37.277 +      AND   column_name = 'OBJDATE';
  37.278 +BEGIN
  37.279 +   IF Table_Exist___(table_name_) THEN
  37.280 +      -- Add table name
  37.281 +      tmp_attr_ := tmp_attr_ || 'TABLE_NAME' || chr(31) || table_name_ || chr(30);
  37.282 +      
  37.283 +      -- Add info about objdate column
  37.284 +      OPEN find_objdate_column;
  37.285 +      FETCH find_objdate_column INTO dummy_;
  37.286 +      IF find_objdate_column%FOUND THEN
  37.287 +         tmp_attr_ := tmp_attr_ || 'OBJDATE' || chr(31) || 'TRUE' || chr(30);
  37.288 +      ELSE
  37.289 +         tmp_attr_ := tmp_attr_ || 'OBJDATE' || chr(31) || 'FALSE' || chr(30);
  37.290 +      END IF;
  37.291 +      CLOSE find_objdate_column;
  37.292 +   ELSE
  37.293 +      -- If no table exist, then no objdate column will exist either...
  37.294 +      tmp_attr_ := tmp_attr_ || 'OBJDATE' || chr(31) || 'FALSE' || chr(30);
  37.295 +   END IF;
  37.296 +   attr_ := tmp_attr_;
  37.297 +END Get_Object_Info;
  37.298 +
  37.299 +FUNCTION Check_Index (
  37.300 +   name_        IN VARCHAR2,
  37.301 +   column_name_ IN VARCHAR2 ) RETURN VARCHAR2
  37.302 +IS
  37.303 +   dummy_      NUMBER;
  37.304 +   table_name_ VARCHAR2(30) := name_ || '_TAB';
  37.305 +
  37.306 +   CURSOR get_indexes IS
  37.307 +      SELECT index_name
  37.308 +      FROM user_indexes
  37.309 +      WHERE table_name = table_name_;
  37.310 +
  37.311 +   CURSOR find_index_column(index_name_ IN VARCHAR2) IS
  37.312 +      SELECT 1
  37.313 +      FROM user_ind_columns
  37.314 +      WHERE index_name = index_name_
  37.315 +      AND column_name = column_name_;
  37.316 +BEGIN
  37.317 +   FOR rec_ IN get_indexes LOOP
  37.318 +      OPEN find_index_column(rec_.index_name);
  37.319 +      FETCH find_index_column INTO dummy_;
  37.320 +      IF find_index_column%FOUND THEN -- There is an index on this column that is probably better.
  37.321 +         CLOSE find_index_column;
  37.322 +         RETURN 'FALSE';
  37.323 +      END IF;
  37.324 +      CLOSE find_index_column;
  37.325 +   END LOOP;
  37.326 +   RETURN ('TRUE');
  37.327 +END Check_Index;
  37.328 +
  37.329 +PROCEDURE Get_Table_Info (
  37.330 +   table_info_ OUT VARCHAR2,
  37.331 +   name_       IN  VARCHAR2 )
  37.332 +IS
  37.333 +   table_             VARCHAR2(2000);
  37.334 +
  37.335 +   CURSOR get_table_information(table_name_ IN VARCHAR2) IS
  37.336 +      SELECT *
  37.337 +      FROM user_tables
  37.338 +      WHERE  table_name = table_name_;
  37.339 +BEGIN
  37.340 +   FOR tab_ IN get_table_information(name_ || '_TAB') LOOP
  37.341 +      -- Initial statement
  37.342 +      table_ := 'CREATE TABLE ' || tab_.table_name;
  37.343 +      table_ := table_ || ' TABLESPACE ' || tab_.tablespace_name;
  37.344 +      -- Statements only necessary if not locally managed tablespace
  37.345 +      IF NOT Is_Locally_Managed___(tab_.tablespace_name) THEN
  37.346 +         table_ := table_ || ' INITRANS ' || tab_.ini_trans;
  37.347 +         table_ := table_ || ' MAXTRANS ' || tab_.max_trans;
  37.348 +         table_ := table_ || ' PCTFREE ' || tab_.pct_free;
  37.349 +         table_ := table_ || ' STORAGE (INITIAL ' || tab_.initial_extent || ' NEXT ' || tab_.next_extent;
  37.350 +         table_ := table_ || ' MINEXTENTS ' || tab_.min_extents || ' MAXEXTENTS ' || tab_.max_extents;
  37.351 +         table_ := table_ || ' PCTINCREASE ' || tab_.pct_increase || ' FREELISTS ' || tab_.freelists;
  37.352 +         table_ := table_ || ' FREELIST GROUPS ' || tab_.freelist_groups || ')';
  37.353 +      END IF;
  37.354 +      -- Final statement
  37.355 +      table_ := table_ || ' AS (SELECT * FROM ' || name_ || '_IAL)';
  37.356 +   END LOOP;
  37.357 +   table_info_ := table_;
  37.358 +END Get_Table_Info;
  37.359 +
  37.360 +-----------------------------------------------------------------------------
  37.361 +-------------------- FOUNDATION1 METHODS ------------------------------------
  37.362 +-----------------------------------------------------------------------------
  37.363 +-- Init
  37.364 +--   Dummy procedure that can be called at database startup to ensure that
  37.365 +--   this package is loaded into memory for performance reasons only.
  37.366 +-----------------------------------------------------------------------------
  37.367 +
  37.368 +PROCEDURE Init
  37.369 +IS
  37.370 +BEGIN
  37.371 +   NULL;
  37.372 +END Init;
  37.373 +
  37.374 +
  37.375 +END &PKG;
  37.376 +/
  37.377 +SHOW ERROR
  37.378 +
  37.379 +-----------------------------------------------------------------------------
    38.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    38.2 +++ b/PLSQL/Lexer/test/unit/data/test.api	Wed May 15 23:04:20 2013 +0200
    38.3 @@ -0,0 +1,1 @@
    38.4 +-----------------------------------------------------------------------------
    38.5 --
    38.6 --  Logical unit: Formula
    38.7 --
    38.8 --  IFS/Design Template Version 2.5
    38.9 --
   38.10 --  Date    Sign    History
   38.11 --  ------  ------  ---------------------------------------------------------
   38.12 -----------------------------------------------------------------------------
   38.13 
   38.14 DEFINE MODULE        = APPSRV
   38.15 DEFINE LU            = Formula
   38.16 DEFINE PKG           = FORMULA_API
   38.17 
   38.18 PROMPT Creating &PKG context
   38.19 
   38.20 BEGIN
   38.21    Installation_SYS.Create_Context('&LU'||'_CTX', 'DOMAIN_SYS', NULL, 'GLOBALLY', TRUE);
   38.22 END;
   38.23 /
   38.24 
   38.25 PROMPT Creating &PKG specification
   38.26 
   38.27 CREATE OR REPLACE PACKAGE &PKG IS
   38.28 
   38.29 TYPE Public_Rec IS RECORD
   38.30    (description FORMULA_TAB.description%TYPE,
   38.31     formula_uom FORMULA_TAB.formula_uom%TYPE,
   38.32     uom_description FORMULA_TAB.uom_description%TYPE);
   38.33 
   38.34 -----------------------------------------------------------------------------
   38.35 -------------------- PRIVATE FINITE STATE MACHINE ---------------------------
   38.36 -----------------------------------------------------------------------------
   38.37 
   38.38 FUNCTION Finite_State_Decode__ (
   38.39    db_state_ IN VARCHAR2 ) RETURN VARCHAR2;
   38.40 PRAGMA restrict_references(Finite_State_Decode__, WNDS, TRUST);
   38.41 
   38.42 PROCEDURE Enumerate_States_Db__ (
   38.43    db_values_ OUT VARCHAR2);
   38.44 
   38.45 -----------------------------------------------------------------------------
   38.46 -------------------- LU SPECIFIC PUBLIC METHODS -----------------------------
   38.47 -----------------------------------------------------------------------------
   38.48 
   38.49 END &PKG;
   38.50 /
   38.51 SHOW ERROR
   38.52 
   38.53 UNDEFINE MODULE
   38.54 UNDEFINE LU
   38.55 UNDEFINE PKG
   38.56 \ No newline at end of file
    39.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    39.2 +++ b/PLSQL/Lexer/test/unit/data/test.apy	Wed May 15 23:04:20 2013 +0200
    39.3 @@ -0,0 +1,129 @@
    39.4 +-----------------------------------------------------------------------------
    39.5 +--
    39.6 +--  Logical unit: Formula
    39.7 +--
    39.8 +--  Purpose:
    39.9 +--
   39.10 +--  IFS/Design Template Version 2.5
   39.11 +--
   39.12 +--  Date    Sign    History
   39.13 +--  ------  ------  ---------------------------------------------------------
   39.14 +-----------------------------------------------------------------------------
   39.15 +
   39.16 +DEFINE MODULE        = APPSRV
   39.17 +DEFINE LU            = Formula
   39.18 +DEFINE TABLE         = FORMULA_TAB
   39.19 +DEFINE VIEW          = FORMULA
   39.20 +DEFINE PKG           = FORMULA_API
   39.21 +
   39.22 +DEFINE OBJID         = rowid
   39.23 +DEFINE OBJVERSION    = "ltrim(lpad(to_char(rowversion,'YYYYMMDDHH24MISS'),2000))"
   39.24 +DEFINE OBJSTATE      = rowstate
   39.25 +DEFINE OBJEVENTS     = &PKG..Finite_State_Events__(&OBJSTATE)
   39.26 +DEFINE STATE         = &PKG..Finite_State_Decode__(&OBJSTATE)
   39.27 +
   39.28 +PROMPT Creating &VIEW view
   39.29 +
   39.30 +CREATE OR REPLACE VIEW &VIEW AS
   39.31 +SELECT formula_id                     formula_id,
   39.32 +       description                    description,
   39.33 +       formula_uom                    formula_uom,
   39.34 +       uom_description                uom_description,
   39.35 +       &OBJID                         objid,
   39.36 +       &OBJVERSION                    objversion,
   39.37 +       &OBJSTATE                      objstate,
   39.38 +       &OBJEVENTS                     objevents,
   39.39 +       &STATE                         state
   39.40 +FROM   formula_tab
   39.41 +WITH   read only;
   39.42 +
   39.43 +COMMENT ON TABLE &VIEW
   39.44 +   IS 'LU=&LU^PROMPT=Formula^MODULE=&MODULE^';
   39.45 +
   39.46 +COMMENT ON COLUMN &VIEW..formula_id
   39.47 +   IS 'FLAGS=KMI-L^DATATYPE=STRING(30)/UPPERCASE^PROMPT=Formula Id^';
   39.48 +COMMENT ON COLUMN &VIEW..description
   39.49 +   IS 'FLAGS=AMIUL^DATATYPE=STRING(100)^PROMPT=Description^';
   39.50 +COMMENT ON COLUMN &VIEW..formula_uom
   39.51 +   IS 'FLAGS=AMIUL^DATATYPE=STRING(30)^PROMPT=Formula Uom^REF=IsoUnit/NOCHECK^';
   39.52 +COMMENT ON COLUMN &VIEW..uom_description
   39.53 +   IS 'FLAGS=AMIUL^DATATYPE=STRING(200)^PROMPT=Uom Description^';
   39.54 +
   39.55 +PROMPT Creating &PKG implementation
   39.56 +
   39.57 +CREATE OR REPLACE PACKAGE BODY &PKG IS
   39.58 +
   39.59 +state_separator_   CONSTANT VARCHAR2(1)   := Client_SYS.field_separator_;
   39.60 +
   39.61 +-----------------------------------------------------------------------------
   39.62 +-------------------- LU SPECIFIC IMPLEMENTATION METHOD DECLARATIONS ---------
   39.63 +-----------------------------------------------------------------------------
   39.64 +
   39.65 +PROCEDURE Check_Formula_State___ (
   39.66 +   rec_  IN OUT &TABLE%ROWTYPE,
   39.67 +   attr_ IN OUT VARCHAR2 );
   39.68 +
   39.69 +FUNCTION Get_Db_Values___ RETURN VARCHAR2 DETERMINISTIC;
   39.70 +
   39.71 +PROCEDURE Exist (
   39.72 +   formula_id_ IN VARCHAR2 )
   39.73 +IS
   39.74 +BEGIN
   39.75 +   General_SYS.Init_Method(lu_name_, '&PKG', 'Exist', TRUE);
   39.76 +   IF (NOT Check_Exist___(formula_id_)) THEN
   39.77 +      Error_SYS.Record_Not_Exist(lu_name_);
   39.78 +   END IF;
   39.79 +END Exist;
   39.80 +
   39.81 +/**Example block comment inside a package spec**/
   39.82 +
   39.83 +FUNCTION Get (
   39.84 +   formula_id_ IN VARCHAR2 ) RETURN Public_Rec
   39.85 +IS
   39.86 +   temp_ Public_Rec;
   39.87 +   CURSOR get_attr IS
   39.88 +      SELECT description, formula_uom, uom_description
   39.89 +      FROM &TABLE
   39.90 +      WHERE formula_id = formula_id_;
   39.91 +BEGIN
   39.92 +   OPEN get_attr;
   39.93 +   FETCH get_attr INTO temp_;
   39.94 +   CLOSE get_attr;
   39.95 +   RETURN temp_;
   39.96 +END Get;
   39.97 +
   39.98 +-----------------------------------------------------------------------------
   39.99 +-------------------- FOUNDATION1 METHODS ------------------------------------
  39.100 +-----------------------------------------------------------------------------
  39.101 +-- Init
  39.102 +--   Dummy procedure that can be called at database startup to ensure that
  39.103 +--   this package is loaded into memory for performance reasons only.
  39.104 +-----------------------------------------------------------------------------
  39.105 +
  39.106 +PROCEDURE Init
  39.107 +IS
  39.108 +BEGIN
  39.109 +   Domain_SYS.Load_State(lu_name_, Get_Client_Values___, Get_Db_Values___);
  39.110 +END Init;
  39.111 +
  39.112 +END &PKG;
  39.113 +/
  39.114 +SHOW ERROR
  39.115 +
  39.116 +
  39.117 +BEGIN
  39.118 +   FORMULA_API.Language_Refreshed;
  39.119 +END;
  39.120 +/
  39.121 +
  39.122 +UNDEFINE MODULE
  39.123 +UNDEFINE LU
  39.124 +UNDEFINE TABLE
  39.125 +UNDEFINE VIEW
  39.126 +UNDEFINE PKG
  39.127 +UNDEFINE OBJID
  39.128 +UNDEFINE OBJVERSION
  39.129 +UNDEFINE OBJSTATE
  39.130 +UNDEFINE OBJEVENTS
  39.131 +UNDEFINE STATE
  39.132 +-----------------------------------------------------------------------------
  39.133 \ No newline at end of file
    40.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    40.2 +++ b/PLSQL/Lexer/test/unit/data/test.upg	Wed May 15 23:04:20 2013 +0200
    40.3 @@ -0,0 +1,254 @@
    40.4 +create or replace java source named "AvQuery" as
    40.5 +
    40.6 +  import java.util.*;
    40.7 +
    40.8 +  class WordData {
    40.9 +    String text;
   40.10 +    String fieldName;
   40.11 +    }
   40.12 +
   40.13 +  public class AvQuery {
   40.14 +
   40.15 +  static Vector reqWords = new Vector();
   40.16 +  static Vector optWords = new Vector();
   40.17 +  static Vector notWords = new Vector();
   40.18 +
   40.19 +  public static final int required  = 1;
   40.20 +  public static final int optional  = 2;
   40.21 +  public static final int notwanted = 3;
   40.22 +
   40.23 +  public static String translate (String input) {
   40.24 +    processString(input);
   40.25 +    return getQuery();
   40.26 +    }
   40.27 +
   40.28 +  private static void addWord (String word, int wordType, String field) {
   40.29 +
   40.30 +    WordData wd = new WordData();
   40.31 +
   40.32 +    wd.text = word;
   40.33 +    wd.fieldName = field;
   40.34 +
   40.35 +    switch (wordType) {
   40.36 +    case required:
   40.37 +      reqWords.addElement(wd);
   40.38 +      break;
   40.39 +    case optional:
   40.40 +      optWords.addElement(wd);
   40.41 +      break;
   40.42 +    case notwanted:
   40.43 +      notWords.addElement(wd);
   40.44 +      break;
   40.45 +    }
   40.46 +  }
   40.47 +
   40.48 +  public static void processString (String input) {
   40.49 +    int p = 0;
   40.50 +    int pp;
   40.51 +    int startWord;
   40.52 +    int flag;
   40.53 +    String theWord;
   40.54 +    String fieldName;
   40.55 +
   40.56 +
   40.57 +    reqWords = new Vector();
   40.58 +    optWords = new Vector();
   40.59 +    notWords = new Vector();
   40.60 +
   40.61 +    while (true) {       // Loop over all words
   40.62 +
   40.63 +      startWord = p;
   40.64 +      while (p < input.length() && input.charAt(p) != ' ') {
   40.65 +        // Check for quoted phrase
   40.66 +        if (input.charAt(p) == '"') {   // Quote - skip to next or end
   40.67 +          p++;  // skip the actual quote
   40.68 +          while (p < input.length() && input.charAt(p) != '"') {
   40.69 +            p++;
   40.70 +            }
   40.71 +          if (p < input.length()) p++;   // Skip the final quote if found
   40.72 +          }
   40.73 +        else {
   40.74 +          p++;
   40.75 +          }
   40.76 +        }
   40.77 +
   40.78 +      // Got a word. Check for required/not wanted flags (+-)
   40.79 +
   40.80 +      theWord = input.substring(startWord, p);
   40.81 +
   40.82 +      flag = optional;
   40.83 +      fieldName = "";
   40.84 +
   40.85 +      if (theWord.charAt(0) == '+') {
   40.86 +        flag = required;
   40.87 +        theWord = theWord.substring(1);
   40.88 +        }
   40.89 +
   40.90 +      else if (theWord.charAt(0) == '-') {
   40.91 +        flag = notwanted;
   40.92 +        theWord = theWord.substring(1);
   40.93 +        }
   40.94 +
   40.95 +      // Replace * wild cards with %
   40.96 +
   40.97 +      theWord = theWord.replace('*', '%');
   40.98 +
   40.99 +      // Find field indicator ":"
  40.100 +
  40.101 +      pp = theWord.indexOf(":");
  40.102 +      if (pp > 0) {
  40.103 +        fieldName = theWord.substring(0, pp);
  40.104 +        theWord = theWord.substring(pp+1, theWord.length());
  40.105 +        }
  40.106 +
  40.107 +      addWord(theWord, flag, fieldName);
  40.108 +
  40.109 +      p++;
  40.110 +      if (p >= input.length()) break;
  40.111 +      }
  40.112 +    }
  40.113 +
  40.114 +  // Get word gets a single word from the "words" vector,
  40.115 +  //  surrounds it in braces (to avoid reserved words)
  40.116 +  //  and attaches a WITHIN clause if appropriate.
  40.117 +
  40.118 +  private static String getWord (Vector words, int pos) {
  40.119 +
  40.120 +    String ts = "{" + ((WordData) words.elementAt(pos)).text + "}";
  40.121 +    if (((WordData)words.elementAt(pos)).fieldName.length() > 0) {
  40.122 +      ts += " WITHIN " + ((WordData)words.elementAt(pos)).fieldName;
  40.123 +      }
  40.124 +    return ts;
  40.125 +    }
  40.126 +
  40.127 +
  40.128 +  // getQuery returns a formatted, ready-to-run ConText query.
  40.129 +  // In order to satisfy the altavista syntax, we have to generate
  40.130 +  // the following query:
  40.131 +
  40.132 +  //  ( req1 & req2 & ... reqN)
  40.133 +  //   | ( (req1 & req2 & .. reqN)*10*10
  40.134 +  //       & (req1, req2 , ... reqN , opt1 , opt2 , ... optN) )
  40.135 +  //   NOT (not1 | not2 | ... notN)
  40.136 +
  40.137 +  public static String getQuery () {
  40.138 +    String tempString = "";
  40.139 +
  40.140 +    String boolOp = "";   //  AND, OR, NOT operator
  40.141 +    int reqCount;         //  Count of required words
  40.142 +    int optCount;         //  Count of optional words
  40.143 +    int notCount;         //  Count of not wanted words
  40.144 +    int i;                //  Loop control
  40.145 +
  40.146 +    boolOp = "";
  40.147 +    reqCount = reqWords.size();
  40.148 +    optCount = optWords.size();
  40.149 +    notCount = notWords.size();
  40.150 +
  40.151 +    if (reqWords.size() > 0) {
  40.152 +      // Required words - first time
  40.153 +
  40.154 +      tempString = "((";
  40.155 +      for (i = 0; i < reqCount; i++) {
  40.156 +        tempString += boolOp + getWord(reqWords,i);
  40.157 +        boolOp = " & ";
  40.158 +        }
  40.159 +
  40.160 +      if (reqCount > 0 && optCount > 0) {
  40.161 +        tempString += ") | ";
  40.162 +        tempString += "((";
  40.163 +        // Required words - second time (anded with optional words)
  40.164 +        boolOp = "";
  40.165 +        for (i = 0; i < reqCount; i++) {
  40.166 +          tempString += boolOp + getWord(reqWords,i);
  40.167 +          boolOp = " & ";
  40.168 +          }
  40.169 +        tempString += ")*10*10";
  40.170 +
  40.171 +        tempString += " & (";
  40.172 +
  40.173 +        // Required words - third time as part of accumulate
  40.174 +        boolOp = "";
  40.175 +        for (i = 0; i < reqCount; i++) {
  40.176 +          tempString += boolOp + getWord(reqWords,i);
  40.177 +          // tempString += "*2";// Uncomment to double weight of required words
  40.178 +          boolOp = " , ";
  40.179 +          }
  40.180 +        }
  40.181 +      }
  40.182 +    else
  40.183 +      tempString = "(";
  40.184 +
  40.185 +    // Optional words
  40.186 +    // Don't reset boolOp
  40.187 +    for (i = 0; i < optCount; i++) {
  40.188 +      tempString += boolOp + getWord(optWords,i);
  40.189 +      boolOp = " , ";  // Accumulate
  40.190 +      }
  40.191 +
  40.192 +    if (reqCount > 0)
  40.193 +      if (optCount > 0 )
  40.194 +        tempString += ")) )";
  40.195 +      else
  40.196 +        tempString += ")) ";
  40.197 +    else
  40.198 +      tempString += ")";
  40.199 +
  40.200 +    if (tempString.length() > 0)
  40.201 +      boolOp = " NOT ";
  40.202 +    else
  40.203 +      boolOp = "";
  40.204 +
  40.205 +    for (i = 0; i < notCount; i++) {
  40.206 +      tempString += boolOp + getWord(notWords,i);
  40.207 +      boolOp = " NOT ";
  40.208 +      }
  40.209 +    return tempString;
  40.210 +  }
  40.211 +}
  40.212 +/
  40.213 +
  40.214 +DECLARE
  40.215 +   CURSOR check_exits(company_id_ VARCHAR2,emp_no_ VARCHAR2)IS
  40.216 +      SELECT 1             
  40.217 +      FROM company_person_tab
  40.218 +      WHERE company_id = company_id_
  40.219 +      AND emp_no = emp_no_;
  40.220 +   temp_ NUMBER;   
  40.221 +BEGIN
  40.222 +FOR rec_ IN (SELECT * FROM company_emp_tab) LOOP
  40.223 +   OPEN check_exits(rec_.company,rec_.employee_id);
  40.224 +   FETCH check_exits INTO temp_;
  40.225 +   IF (check_exits%NOTFOUND) THEN
  40.226 +      INSERT INTO company_person_tab(company_id,emp_no,master_employment,operator,rowversion)
  40.227 +      VALUES (rec_.company,rec_.employee_id,'0',User,rec_.rowversion);  
  40.228 +   END IF; 
  40.229 +   CLOSE check_exits;     
  40.230 +END LOOP;
  40.231 +END;
  40.232 +/
  40.233 +
  40.234 +UPDATE search_domain_attribute_tab
  40.235 +SET    model_datatype = CASE datatype
  40.236 +                           WHEN 'VARCHAR2' THEN 'TEXT'
  40.237 +                           WHEN 'CHAR' THEN 'TEXT'
  40.238 +                           WHEN 'NUMBER' THEN 'NUMBER'
  40.239 +                           WHEN 'DATE' THEN 'DATE'
  40.240 +                           WHEN 'CLOB' THEN 'LONG_TEXT'
  40.241 +                           WHEN 'BLOB' THEN 'BINARY'
  40.242 +                           ELSE 'TEXT'
  40.243 +                        END
  40.244 +WHERE  model_datatype IS NULL
  40.245 +/
  40.246 +
  40.247 +
  40.248 +create or replace trigger vmogss_base_tablerestrict_tr
  40.249 +  after insert or update on vmo_base_tablerestriction
  40.250 +  referencing old as oldrec new as newrec
  40.251 +  for each row
  40.252 +begin
  40.253 +  if updating or inserting then
  40.254 +    insert into vmo_base_gss_scope(gss_id, created, source_tbl, source_info) values('ALL_GSS_ID', sysdate,  'VMO_BASE_TABLERESTRICTION', :newrec.idrole);
  40.255 +  end if;
  40.256 +end vmogss_base_tablerestrict_tr;
  40.257 +/
  40.258 \ No newline at end of file
    41.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    41.2 +++ b/PLSQL/Lexer/test/unit/data/test1.apy	Wed May 15 23:04:20 2013 +0200
    41.3 @@ -0,0 +1,338 @@
    41.4 +PROMPT Creating &VIEW view
    41.5 +CREATE OR REPLACE VIEW &VIEW AS
    41.6 +SELECT s.sid                               sid,
    41.7 +       s.audsid                            audsid,
    41.8 +       u.identity                          fnd_user,
    41.9 +       s.osuser                            os_user,
   41.10 +       s.username                          oracle_user,
   41.11 +       s.machine                           machine,
   41.12 +       s.program                           program,
   41.13 +       s.module                            package,
   41.14 +       s.action                            method,
   41.15 +       logon_time                          log_on_time,
   41.16 +       s.status                            status,
   41.17 +       decode(s.status, 'ACTIVE', SYSDATE, sysdate - last_call_et/(24*3600)) last_query,
   41.18 +       nvl(f.info, '!FNDBAS.SESSION.INFO') info,
   41.19 +       s.serial#                           serial_no,
   41.20 +       Fnd_Session_API.Get_Sql_Statement(s.sql_address, s.sql_hash_value, s.sql_id) sql_statement,
   41.21 +       Fnd_Session_API.Get_Sql_Statement(s.prev_sql_addr, s.prev_hash_value, s.prev_sql_id) previous_sql_statement
   41.22 +FROM   &TABLE1 s, &TABLE2 f, &TABLE3 u
   41.23 +       WHERE   rtrim(substr(s.client_info, 1, 30)) = u.identity
   41.24 +       AND     s.audsid  = f.session_id (+)
   41.25 +       AND     s.audsid != 0
   41.26 +WITH   read only;
   41.27 +
   41.28 +DECLARE
   41.29 +   CURSOR Insert_Module_Data IS
   41.30 +   SELECT *
   41.31 +   FROM MODULE_TAB;
   41.32 +
   41.33 +PROCEDURE Insert_data(module_ VARCHAR2,module_name_ VARCHAR2) IS
   41.34 +
   41.35 +   tmp_attribute_key_   VARCHAR2(120);
   41.36 +   newrec_              LANGUAGE_SYS_TAB%ROWTYPE;
   41.37 +   lu_                  VARCHAR2(120) :='Module';
   41.38 +   path_                VARCHAR2(500);
   41.39 +   base_module_         VARCHAR2(120) :='FNDBAS';
   41.40 +
   41.41 +BEGIN
   41.42 +   tmp_attribute_key_ := Replace (module_, '^','~');
   41.43 +   newrec_.main_type := 'LU';
   41.44 +   newrec_.type := 'Basic Data';
   41.45 +   newrec_.path := lu_||'_'||base_module_||'.'||module_;
   41.46 +   path_ := newrec_.path;
   41.47 +   newrec_.attribute := 'Text';
   41.48 +      DECLARE
   41.49 +      BEGIN
   41.50 +         INSERT
   41.51 +            INTO language_sys_tab (
   41.52 +            main_type,
   41.53 +            type,
   41.54 +            path,
   41.55 +            attribute,
   41.56 +            lang_code,
   41.57 +            module,
   41.58 +            text,
   41.59 +            installation_text,
   41.60 +            system_defined,
   41.61 +            term_usage_version_id,
   41.62 +            bulk,
   41.63 +            rowversion)
   41.64 +         VALUES (
   41.65 +            newrec_.main_type,
   41.66 +            newrec_.type,
   41.67 +            newrec_.path,
   41.68 +            newrec_.attribute,
   41.69 +            'PROG',
   41.70 +            base_module_,
   41.71 +            module_name_,
   41.72 +            module_name_,
   41.73 +            'FALSE',
   41.74 +            NULL,
   41.75 +            0,
   41.76 +            SYSDATE);
   41.77 +      EXCEPTION
   41.78 +         WHEN dup_val_on_index THEN
   41.79 +            UPDATE language_sys_tab
   41.80 +            SET main_type = newrec_.main_type,
   41.81 +                type = newrec_.type,
   41.82 +                path = newrec_.path,
   41.83 +                attribute = newrec_.attribute,
   41.84 +                lang_code = 'PROG',
   41.85 +                module = base_module_,
   41.86 +                text = module_name_,
   41.87 +                installation_text = module_name_,
   41.88 +                system_defined = 'FALSE',
   41.89 +                rowversion = SYSDATE
   41.90 +            WHERE main_type = newrec_.main_type
   41.91 +            AND   type = newrec_.type
   41.92 +            AND   path = newrec_.path
   41.93 +            AND   attribute = newrec_.attribute
   41.94 +            AND   lang_code = 'PROG';
   41.95 +
   41.96 +         WHEN OTHERS THEN
   41.97 +            NULL;
   41.98 +         END;
   41.99 +
  41.100 +
  41.101 +END Insert_data;
  41.102 +
  41.103 +
  41.104 +BEGIN
  41.105 +   IF NOT Installation_SYS.Is_Db_Patch_Registered('FNDBAS', '70745') THEN
  41.106 +      FOR rec_ IN Insert_Module_Data LOOP
  41.107 +         Insert_data(rec_.module,rec_.name);
  41.108 +      END LOOP;
  41.109 +   END IF;
  41.110 +   Installation_SYS.Register_Db_Patch('FNDBAS', '70745','Insert Basic Data Transations for Module Name');
  41.111 +   COMMIT;
  41.112 +END;
  41.113 +/
  41.114 +
  41.115 +EXEC Installation_SYS.Log_Detail_Time_Stamp('ORDER', '100512_90590_ORDER.cdb', 'Timestamp_2');
  41.116 +PROMPT Updating the value of column SHIP_ADDR_NO in CUSTOMER_ORDER_DELIVERY_TAB
  41.117 +BEGIN
  41.118 +    IF (NOT Database_SYS.Is_Db_Patch_Registered('ORDER', 90590)) THEN
  41.119 +       DECLARE
  41.120 +          column_       Database_SYS.ColRec;
  41.121 +          table_name_   VARCHAR2(30) := 'CUSTOMER_ORDER_DELIVERY_TAB';
  41.122 +
  41.123 +       BEGIN
  41.124 +
  41.125 +          UPDATE customer_order_delivery_tab cod
  41.126 +             SET cod.ship_addr_no = (CASE WHEN (cod.delnote_no IS NOT NULL) THEN
  41.127 +                                             (SELECT codn.ship_addr_no
  41.128 +                                                 FROM  customer_order_deliv_note_tab codn
  41.129 +                                              WHERE codn.delnote_no = cod.delnote_no)
  41.130 +                                          WHEN (cod.delnote_no IS NULL AND cod.shipment_id IS NOT NULL) THEN
  41.131 +                                             (SELECT ship.ship_addr_no
  41.132 +                                                 FROM shipment_tab ship
  41.133 +                                              WHERE ship.shipment_id = cod.shipment_id)
  41.134 +                                          ELSE
  41.135 +                                             (SELECT col.ship_addr_no
  41.136 +                                                 FROM customer_order_line_tab col
  41.137 +                                              WHERE col.order_no     = cod.order_no
  41.138 +                                              AND   col.line_no      = cod.line_no
  41.139 +                                              AND   col.rel_no       = cod.rel_no
  41.140 +                                              AND   col.line_item_no = cod.line_item_no)
  41.141 +                                    END)
  41.142 +             WHERE cod.ship_addr_no IS NULL;
  41.143 +       END;
  41.144 +       Database_SYS.Register_Db_Patch('ORDER', 90590, 'Adding column SHIP_ADDR_NO into CUSTOMER_ORDER_DELIVERY_TAB');
  41.145 +    END IF;
  41.146 +END;
  41.147 +/
  41.148 +COMMIT;
  41.149 +
  41.150 +exec Installation_SYS.Log_Detail_Time_Stamp('ORDER','1340.upg','Timestamp_14');
  41.151 +PROMPT Updating the value of D3, DELIVERY_DATE in INVOICE_TAB.
  41.152 +UPDATE INVOICE_TAB
  41.153 +   SET D3            =   CASE
  41.154 +                            WHEN CREATOR = 'CUSTOMER_ORDER_INV_HEAD_API' THEN
  41.155 +                               DELIVERY_DATE
  41.156 +                            ELSE
  41.157 +                               D3
  41.158 +                         END,
  41.159 +       DELIVERY_DATE =   CASE
  41.160 +                            WHEN CREATOR = 'CUSTOMER_ORDER_INV_HEAD_API' AND INVOICE_TYPE NOT IN('CUSTORDDEB','CUSTCOLDEB','SELFBILLDEB','SELFBILLCRE','CUSTORDCRE','CUSTCOLCRE','CUSTCOLCOR','CUSTORDCOR') THEN
  41.161 +                               NULL
  41.162 +                            ELSE
  41.163 +                               DELIVERY_DATE
  41.164 +                         END;
  41.165 +ROLLBACK;
  41.166 +
  41.167 +PROMPT Creating &VIEW._DEF view
  41.168 +
  41.169 +CREATE OR REPLACE VIEW &VIEW._DEF AS
  41.170 +SELECT doc_class                      doc_class,
  41.171 +       Language_Text_API.Decode(doc_name)  doc_name,
  41.172 +       doc_name                       db_doc_name,
  41.173 +       &OBJID                         objid,
  41.174 +       &OBJVERSION                    objversion
  41.175 +FROM   doc_class_tab
  41.176 +WHERE   DOC_CLASS > ' '
  41.177 +WITH   read only;
  41.178 +
  41.179 +COMMENT ON TABLE &VIEW._DEF
  41.180 +   IS 'LU=&LU^PROMPT=Document Class^MODULE=&MODULE^';
  41.181 +
  41.182 +DECLARE
  41.183 +   execution_date_     DATE := SYSDATE + 30/86400;
  41.184 +BEGIN
  41.185 +    NULL;
  41.186 +END;
  41.187 +
  41.188 +DECLARE
  41.189 +   CURSOR check_exits(company_id_ VARCHAR2,emp_no_ VARCHAR2)IS
  41.190 +      SELECT 1
  41.191 +      FROM company_person_tab
  41.192 +      WHERE company_id = company_id_
  41.193 +      AND emp_no = emp_no_;
  41.194 +   temp_ NUMBER;
  41.195 +BEGIN
  41.196 +FOR rec_ IN (SELECT * FROM company_emp_tab) LOOP
  41.197 +   OPEN check_exits(rec_.company,rec_.employee_id);
  41.198 +   FETCH check_exits INTO temp_;
  41.199 +   IF (check_exits%NOTFOUND) THEN
  41.200 +      INSERT INTO company_person_tab(company_id,emp_no,master_employment,operator,rowversion)
  41.201 +      VALUES (rec_.company,rec_.employee_id,'0',User,rec_.rowversion);
  41.202 +   END IF;
  41.203 +   CLOSE check_exits;
  41.204 +END LOOP;
  41.205 +END;
  41.206 +/
  41.207 +
  41.208 +PROMPT dropping temporary procedure
  41.209 +
  41.210 +DROP PROCEDURE Temp_Person_Document_Default;
  41.211 +
  41.212 +BEGIN
  41.213 +   Object_Connection_SYS.Disable_Logical_Unit('CompanyPerson');
  41.214 +   Object_Connection_SYS.Enable_Logical_Unit('CompanyPerson', 'DocReferenceObject^', 'COMPANY_PERSON_ALL', 'COMPANY_PERSON_API');
  41.215 +END;
  41.216 +/
  41.217 +
  41.218 +CREATE  UNIQUE INDEX Report_Grouping_Detail_Ux ON Report_Grouping_Detail_Tab
  41.219 +   ( company,
  41.220 +     internal_key )
  41.221 +   TABLESPACE &FINREP_INDEX
  41.222 +   STORAGE
  41.223 +      ( INITIAL &FINREP_LARGE_IX
  41.224 +);
  41.225 +
  41.226 +CREATE VIEW &MODULE_VIEW1
  41.227 +( ORDER_NO, RELEASE_NO, SEQUENCE_NO, LINE_ITEM_NO, PART_NO, CONTRACT, CONFIGURATION_ID ,
  41.228 +LOCATION_NO, LOT_BATCH_NO, SERIAL_NO, WAIV_DEV_REJ_NO, ENG_CHG_LEVEL, ACTIVITY_SEQ,
  41.229 +QTY_ASSIGNED, LAST_ACTIVITY_DATE)
  41.230 +AS
  41.231 +SELECT
  41.232 +  ' ', ' ', ' ', 0,' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 0, 0, SYSDATE
  41.233 + FROM DUAL WHERE 1 = 2
  41.234 +/
  41.235 +
  41.236 +CREATE OR REPLACE VIEW &VIEW3 AS
  41.237 +SELECT contract                       contract,
  41.238 +       work_center_no                 work_center_no,
  41.239 +       work_day                       work_day,
  41.240 +       Work_Center_Int_API.Get_Work_Center_Prod_Line(contract,work_center_no) production_line,
  41.241 +       Work_Center_Int_API.Get_Department_No(contract,work_center_no) department,
  41.242 +       Shop_Order_Operation_Int_API.Planned_Load(work_day,contract,work_center_no) planned,
  41.243 +       Shop_Order_Operation_Int_API.Released_Load(work_day,contract,work_center_no) released,
  41.244 +       nvl(Crp_Mach_Op_Load_Util_API.Get_Work_Center_Load(contract,work_center_no, work_day, work_day),0) requisitioned,
  41.245 +       nvl(Crp_Mach_Op_Load_Util_API.Get_W_C_Dop_Load(contract,work_center_no, work_day, work_day),0) unreleased_dop,
  41.246 +       nvl(CRP_MACH_OP_LOAD_UTIL_API.Get_Crp_Capac_Workday(contract,work_center_no, work_day),0) wc_cap,
  41.247 +       nvl((nvl(Crp_Mach_Op_Load_Util_API.Get_Work_Center_Load(contract,work_center_no, work_day, work_day),0)
  41.248 +       + nvl(Crp_Mach_Op_Load_Util_API.Get_W_C_Dop_Load(contract,work_center_no, work_day, work_day),0)
  41.249 +       + Shop_Order_Operation_Int_API.Planned_Load(work_day,contract,work_center_no)
  41.250 +       + Shop_Order_Operation_Int_API.Released_Load(work_day,contract,work_center_no))
  41.251 +       / DECODE(Work_Center_Capacity_API.Get_Range_Avail_Capacity(contract,work_center_no, work_day, work_day), 0, .00001,
  41.252 +         CRP_MACH_OP_LOAD_UTIL_API.Get_Crp_Capac_Workday(contract,work_center_no, work_day)) * 100,0) load_pct,
  41.253 +       objid                          objid,
  41.254 +       objversion                     objversion
  41.255 +FROM   CRP_MACH_OP_LOAD2;
  41.256 +
  41.257 +CREATE TRIGGER VMOL_BASE_FIELDDEPVALUES_TIB BEFORE INSERT ON
  41.258 +   VMOL_BASE_FIELDDEPVALUES REFERENCING OLD AS OLDREC NEW AS NEWREC FOR EACH ROW
  41.259 +   BEGIN
  41.260 +      SELECT VMOL_ID_SEQ.NEXTVAL INTO :NEWREC.ID_ FROM DUAL;
  41.261 +   END;
  41.262 +/
  41.263 +
  41.264 +BEGIN
  41.265 +EXECUTE IMMEDIATE('
  41.266 +    create sequence vmo_gss_usermap_seq
  41.267 +    minvalue 1
  41.268 +    nomaxvalue
  41.269 +    start with 1
  41.270 +    increment by 1
  41.271 +    nocache
  41.272 +    order
  41.273 +');
  41.274 +EXCEPTION
  41.275 +    WHEN OTHERS THEN
  41.276 +        --OK if ORA -00955: name is already used by an existing object
  41.277 +        IF INSTR(SQLERRM,'-00955') != 0 THEN NULL;
  41.278 +        ELSE raise_application_error ( -20000, SQLERRM );
  41.279 +        END IF;
  41.280 +END;
  41.281 +/
  41.282 +
  41.283 +create or replace trigger VMO_BASE_GSS_SYNCED_RECORDS_TR before
  41.284 +insert or update
  41.285 +on VMO_BASE_GSS_SYNCED_RECORDS referencing old as oldrec new as newrec for each row
  41.286 +
  41.287 +--This trigger is only used to make sure that an old version of GSS still can be tested
  41.288 +--against this database after this database has been upgraded to version 3.15.1.15
  41.289 +--Reason is that GSS_USER is part of the primary key and is not set by previous versions.
  41.290 +
  41.291 +declare
  41.292 +
  41.293 +  FUNCTION GET_GSS_USER (
  41.294 +    GSS_ID_ in VARCHAR2,
  41.295 +    VMO_TABLE_ in VARCHAR2,
  41.296 +    GSS_TABLE_ in VARCHAR2,
  41.297 +    VMO_USER_ in VARCHAR2
  41.298 +    ) RETURN VARCHAR2 IS
  41.299 +
  41.300 +    GSS_USER_ VARCHAR2(32);
  41.301 +
  41.302 +  BEGIN
  41.303 +      SELECT U.GSS_USER INTO GSS_USER_
  41.304 +      FROM   VMO_BASE_GSS_USERMAP U
  41.305 +      WHERE  U.GSS_ID    = GSS_ID_
  41.306 +        AND  U.VMO_TABLE = VMO_TABLE_
  41.307 +        AND  U.GSS_TABLE = GSS_TABLE_
  41.308 +        AND  U.VMO_USER  = VMO_USER_
  41.309 +        AND  U.ACTIVE = 1;
  41.310 +
  41.311 +    RETURN  GSS_USER_;
  41.312 +
  41.313 +    EXCEPTION WHEN OTHERS THEN
  41.314 +        RETURN NULL; --Should not be happen in working configuration.
  41.315 +
  41.316 +  END GET_GSS_USER;
  41.317 +
  41.318 +begin
  41.319 +
  41.320 +  IF :newREC.GSS_USER IS NULL THEN
  41.321 +    :newREC.GSS_USER := GET_GSS_USER(:newREC.GSS_ID, :newREC.VMO_TABLE, :newREC.GSS_TABLE, :newREC.IDUSER);
  41.322 +  END IF;
  41.323 +
  41.324 +end;
  41.325 +/
  41.326 +
  41.327 +
  41.328 +UPDATE search_domain_attribute_tab
  41.329 +SET    model_datatype = CASE datatype
  41.330 +                           WHEN 'VARCHAR2' THEN 'TEXT'
  41.331 +                           WHEN 'CHAR' THEN 'TEXT'
  41.332 +                           WHEN 'NUMBER' THEN 'NUMBER'
  41.333 +                           WHEN 'DATE' THEN 'DATE'
  41.334 +                           WHEN 'CLOB' THEN 'LONG_TEXT'
  41.335 +                           WHEN 'BLOB' THEN 'BINARY'
  41.336 +                           ELSE 'TEXT'
  41.337 +                        END
  41.338 +WHERE  model_datatype IS NULL
  41.339 +/
  41.340 +
  41.341 +
    42.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    42.2 +++ b/PLSQL/Lexer/test/unit/data/test2.apy	Wed May 15 23:04:20 2013 +0200
    42.3 @@ -0,0 +1,916 @@
    42.4 +
    42.5 +PROCEDURE Evaluate_Level___ (
    42.6 +   evaluation_rec_        IN OUT evaluation_record,
    42.7 +   eval_log_rec_          IN OUT config_evaluation_api.evaluation_log_record,
    42.8 +   complete_eval_log_rec_ IN OUT config_evaluation_api.complete_evaluation_log_record,
    42.9 +   parent_part_           IN VARCHAR2 )
   42.10 +IS
   42.11 +   operation_rec_              Routing_Int_API.operation_record;
   42.12 +   oper_work_guide_rec_        Routing_Int_API.oper_work_guide_record;
   42.13 +   oper_tool_rec_              Routing_Int_API.oper_tool_record;
   42.14 +   component_rec_              Manuf_Structure_Int_API.component_record;
   42.15 +   comp_work_guide_rec_        Manuf_Structure_Int_API.comp_work_guide_record;
   42.16 +   config_spec_rec_            Config_Evaluation_API.eval_config_spec_record;
   42.17 +   parent_supply_rec_          interim_order_tab%ROWTYPE;
   42.18 +   --
   42.19 +   oper_valid_                 BOOLEAN;
   42.20 +   supply_interim_order_no_    interim_order_tab.interim_order_no%TYPE;
   42.21 +   configurable_               VARCHAR2(20);
   42.22 +   dop_part_                   VARCHAR2(20);
   42.23 +   part_type_code_             VARCHAR2(20);
   42.24 +   comp_bom_type_db_           VARCHAR2(20);
   42.25 +   comp_bom_type_              VARCHAR2(200);
   42.26 +   comp_eng_chg_level_         manuf_structure_tab.eng_chg_level%TYPE;
   42.27 +   structure_alternative_no_   manuf_struct_alternate_tab.alternative_no%TYPE;
   42.28 +   comp_struct_alternative_no_ manuf_struct_alternate_tab.alternative_no%TYPE;
   42.29 +   comp_routing_revision_      routing_head_tab.routing_revision%TYPE;
   42.30 +   routing_alternative_no_     routing_alternate_tab.alternative_no%TYPE;
   42.31 +   comp_rout_alternative_no_   routing_alternate_tab.alternative_no%TYPE;
   42.32 +
   42.33 +
   42.34 +   e_row_                      NUMBER;
   42.35 +   comp_alt_state_             manuf_struct_alternate_tab.rowstate%TYPE;
   42.36 +   comp_rout_alt_state_        routing_alternate_tab.rowstate%TYPE;
   42.37 +   get_comp_flag_              BOOLEAN;
   42.38 +   qty_avail_                  NUMBER;
   42.39 +   primary_comp_qty_           NUMBER;
   42.40 +   phatom_part_exist_          BOOLEAN;
   42.41 +   parent_interim_order_no_    VARCHAR2(12);
   42.42 +   Parent_part_mrp_Code_       VARCHAR2(2);
   42.43 +
   42.44 +
   42.45 +   multi_site_part_exist_      BOOLEAN := FALSE;
   42.46 +   stmt_                       VARCHAR2(2000);
   42.47 +   check_source_               VARCHAR2(5) := 'FALSE';
   42.48 +
   42.49 +   interim_required_date_      Date;--interim_demand_head_tab.required_date%TYPE;
   42.50 +   interim_start_date_         interim_order_tab.start_date%TYPE;
   42.51 +   parent_supply_date_         interim_order_tab.supply_date%TYPE;
   42.52 +   parent_start_date_          interim_order_tab.start_date%TYPE;
   42.53 +   parent_order_no_            interim_order_tab.interim_order_no%TYPE;
   42.54 +   line_item_no_               interim_order_component_tab.line_item_no%TYPE;
   42.55 +   calendar_id_                work_time_calendar_tab.calendar_id%TYPE;
   42.56 +   leadtime_offset_            NUMBER;
   42.57 +   operation_no_               NUMBER;
   42.58 +   found_                      BOOLEAN;
   42.59 +
   42.60 +   CURSOR get_line_item_no(interim_header_ IN VARCHAR2,interim_order_no_ IN VARCHAR2) IS
   42.61 +      SELECT leadtime_offset,line_item_no, supply_interim_order_no
   42.62 +      FROM   interim_order_component_tab
   42.63 +      WHERE  interim_header_id = interim_header_
   42.64 +      AND    interim_order_no = interim_order_no_;
   42.65 +   CURSOR get_parent_supply IS
   42.66 +      SELECT *
   42.67 +      FROM   interim_order_tab
   42.68 +      WHERE  interim_header_id = evaluation_rec_.interim_header_id
   42.69 +      AND    interim_structure_level = evaluation_rec_.current_level;
   42.70 +BEGIN
   42.71 +   General_SYS.Init_Method(lu_name_, '&PKG', 'Evaluate_Level___',TRUE);
   42.72 +
   42.73 +-- FOR-LOOP #1: Loop thru interim order records inserted by calling method.
   42.74 +   FOR parent_supply_ IN get_parent_supply LOOP
   42.75 +      -- Set parent_supply_rec_ as Parent_supply_
   42.76 +      parent_supply_rec_ := parent_supply_;
   42.77 +      --
   42.78 +      configurable_ := Part_Catalog_API.Get_Configurable_Db(parent_supply_.part_no);
   42.79 +      --
   42.80 +      dop_part_ := Inventory_Part_Planning_API.Get_Order_Requisition_Db(
   42.81 +                      parent_supply_.contract,
   42.82 +                      parent_supply_.part_no);
   42.83 +      --
   42.84 +      part_type_code_ := Inventory_Part_API.Get_type_code_Db(parent_supply_.contract,
   42.85 +                                                             parent_supply_.part_no);
   42.86 +
   42.87 +    dbms_output.put_line('-----> parent supply part no =  ' ||parent_supply_.part_no );
   42.88 +    dbms_output.put_line('---> before ctp planned = .... '|| evaluation_rec_.ctp_planned);
   42.89 +      --
   42.90 +      IF (part_type_code_ IN ( '1','2')) THEN
   42.91 +         comp_bom_type_db_ := 'M';
   42.92 +      ELSIF (part_type_code_ IN ('3', '4')) THEN
   42.93 +         comp_bom_type_db_ := 'P';
   42.94 +      END IF;
   42.95 +      comp_bom_type_ := Shop_Ord_Code_API.Decode(comp_bom_type_db_);
   42.96 +      --
   42.97 +-- begin CTP
   42.98 +      dbms_output.put_line('---> before ctp part struct level = .... '|| parent_supply_.interim_structure_level);
   42.99 +
  42.100 +-- If ctp planned, check multi-site and if true, create interim demand.
  42.101 +      multi_site_part_exist_ := FALSE;
  42.102 +      IF evaluation_rec_.ctp_planned = 1 AND
  42.103 +         --parent_supply_.interim_structure_level > 0 AND
  42.104 +         part_type_code_ IN ('3','4') THEN
  42.105 +
  42.106 +       -- check for multi-site supplies...
  42.107 +         dbms_output.put_line('---> before check_source installed = .... ');
  42.108 +         check_source_ := 'FALSE';
  42.109 +         IF Dictionary_SYS.Logical_Unit_Is_Installed('SupplySourcePartManager') THEN
  42.110 +            stmt_ := 'BEGIN :check_source := Supply_Source_Part_Manager_API.Is_Part_Internally_Sourced(:contract, :part_no); END;';
  42.111 +            -- ifs_assert_safe pemase 20051221
  42.112 +            EXECUTE IMMEDIATE stmt_
  42.113 +            USING OUT check_source_,
  42.114 +                   IN parent_supply_.contract,
  42.115 +                   IN parent_supply_.part_no;
  42.116 +         END IF;
  42.117 +         dbms_output.put_line('---> check source  = '|| check_source_);
  42.118 +
  42.119 +         IF check_source_ = 'TRUE'  THEN
  42.120 +            multi_site_part_exist_ := TRUE;
  42.121 +
  42.122 +            Interim_Ctp_Manager_API.Create_Child_Interim_Demand(evaluation_rec_.interim_header_id,
  42.123 +                                                               parent_supply_.interim_order_no,
  42.124 +                                                               parent_supply_.part_no,
  42.125 +                                                               parent_supply_.configuration_id,
  42.126 +                                                               parent_supply_.supply_date,
  42.127 +                                                               parent_supply_.supply_qty,
  42.128 +                                                               evaluation_rec_.interim_demand_usage_type_db,
  42.129 +                                                               evaluation_rec_.identity1,
  42.130 +                                                               evaluation_rec_.identity2,
  42.131 +                                                               evaluation_rec_.identity3,
  42.132 +                                                               evaluation_rec_.identity4,
  42.133 +                                                               NULL, -- lot_batch_no_
  42.134 +                                                               NULL, -- serial_begin
  42.135 +                                                               NULL, -- serial_end
  42.136 +                                                               'COMPANY OWNED', -- part_ownership
  42.137 +                                                               NULL, -- owning_customer_no_
  42.138 +                                                               parent_supply_.interim_structure_level,
  42.139 +                                                               evaluation_rec_.ctp_level
  42.140 +                                                               );
  42.141 +
  42.142 +         END IF; -- check_source = TRUE
  42.143 +
  42.144 +      END IF; -- IF evaluation_rec_.ctp_planned = 1  AND parent_supply_.interim_structure_level > 0 THEN
  42.145 +
  42.146 +-- No further evaluation if multisite part.
  42.147 +    IF NOT multi_site_part_exist_ THEN
  42.148 +       dbms_output.put_line('---> not multi site  part  = ');
  42.149 +
  42.150 +-- IF-ELSIF #1: If configured/manufactured or DOP requistion/manufactured,
  42.151 +-- get buildable manuf structure revision.
  42.152 +      IF ((configurable_ = 'CONFIGURED') AND (part_type_code_ = '1')) OR
  42.153 +         ((dop_part_ = 'D') AND (part_type_code_ = '1')) THEN
  42.154 +         IF (evaluation_rec_.alternate_status = 'Buildable') THEN
  42.155 +            comp_eng_chg_level_ := NULL;
  42.156 +            comp_struct_alternative_no_ := NULL;
  42.157 +
  42.158 +            IF Manuf_Part_Attribute_API.Get_Structure_Effectivity(parent_supply_.contract, parent_supply_.part_no)
  42.159 +               = Effectivity_Control_API.Decode('SERIAL') THEN
  42.160 +
  42.161 +               Manuf_Structure_Util_API.Get_Buildable_Date_Alt (comp_eng_chg_level_,
  42.162 +                                                               comp_struct_alternative_no_,
  42.163 +                                                               parent_supply_.contract,
  42.164 +                                                               parent_supply_.part_no,
  42.165 +                                                               comp_bom_type_,
  42.166 +                                                               parent_supply_.start_date );
  42.167 +
  42.168 +
  42.169 +            ELSE
  42.170 +               Manuf_Structure_Int_API.Get_Buildable_Alternative (comp_eng_chg_level_,
  42.171 +                                                               comp_struct_alternative_no_,
  42.172 +                                                               parent_supply_.contract,
  42.173 +                                                               parent_supply_.part_no,
  42.174 +                                                               comp_bom_type_,
  42.175 +                                                               parent_supply_.start_date,
  42.176 +                                                               evaluation_rec_.serial_begin,
  42.177 +                                                               evaluation_rec_.serial_end );
  42.178 +            END IF;
  42.179 +
  42.180 +         END IF;
  42.181 +         evaluation_rec_.configuration_id := parent_supply_.configuration_id;
  42.182 +         config_spec_rec_ := NULL;
  42.183 +         config_spec_rec_.spec_row_count := 0;
  42.184 +
  42.185 +-- Retrieve configured part routing if manufactured part.
  42.186 +         IF (comp_bom_type_db_ = 'M') THEN
  42.187 +            Config_Evaluation_API.Determine_Routing (routing_alternative_no_,
  42.188 +                                                     parent_supply_.routing_revision,
  42.189 +                                                     operation_rec_,
  42.190 +                                                     oper_work_guide_rec_,
  42.191 +                                                     oper_tool_rec_,
  42.192 +                                                     config_spec_rec_,
  42.193 +                                                     complete_eval_log_rec_,
  42.194 +                                                     eval_log_rec_,
  42.195 +                                                     parent_supply_.contract,
  42.196 +                                                     parent_supply_.part_no,
  42.197 +                                                     parent_supply_.start_date,
  42.198 +                                                     parent_supply_.order_code,
  42.199 +                                                     evaluation_rec_.alternate_status,
  42.200 +                                                     evaluation_rec_.configuration_id );
  42.201 +            IF (NVL(operation_rec_.operation_row_count,0) > 0) THEN
  42.202 +               IF (routing_alternative_no_ IS NOT NULL) THEN
  42.203 +
  42.204 +                  FOR ops IN 1..operation_rec_.operation_row_count LOOP
  42.205 +                     dbms_output.Put_Line('>>>>>> ' ||operation_rec_.operation_no_tab(ops) || operation_rec_.mach_run_factor_tab(ops));
  42.206 +                  END LOOP;
  42.207 +                  -- Note; Set Routing_alternative on InterimOrder After DetermineRouting
  42.208 +                  Interim_Order_API.Set_Rout_Rev_Alternative__(evaluation_rec_.interim_header_id,
  42.209 +                                                               parent_supply_.interim_order_no,
  42.210 +                                                               parent_supply_.routing_revision,
  42.211 +                                                               routing_alternative_no_ );
  42.212 +                  --
  42.213 +                  IF (NOT Routing_Int_API.Is_Routing_Buildable(parent_supply_.contract,
  42.214 +                                                               parent_supply_.part_no,
  42.215 +                                                               parent_supply_.routing_revision,
  42.216 +                                                               comp_bom_type_,
  42.217 +                                                               routing_alternative_no_)) THEN
  42.218 +                     Set_Rout_Rev_Alt_Warning___ (complete_eval_log_rec_,
  42.219 +                                                  parent_supply_.contract,
  42.220 +                                                  parent_supply_.part_no,
  42.221 +                                                  parent_supply_.routing_revision,
  42.222 +                                                  routing_alternative_no_,
  42.223 +                                                  comp_bom_type_db_);
  42.224 +                  END IF;
  42.225 +                  --
  42.226 +               END IF;
  42.227 +            END IF;
  42.228 +            -- Note; Create Operations that is evaluated
  42.229 +            Create_Interim_Routing___ (operation_rec_,
  42.230 +                                       oper_work_guide_rec_,
  42.231 +                                       oper_tool_rec_,
  42.232 +                                       evaluation_rec_.interim_header_id,
  42.233 +                                       parent_supply_.interim_order_no);
  42.234 +
  42.235 +         END IF;   -- of IF (comp_bom_type_db_ = 'M') THEN
  42.236 +         -- Correct the top order start date before determine the structure
  42.237 +         IF parent_supply_.interim_order_no ='1'  THEN
  42.238 +            Interim_Order_API.Set_Interim_Order_Dates__ (evaluation_rec_.interim_header_id,
  42.239 +                                                         parent_supply_.interim_order_no,
  42.240 +                                                         parent_supply_.supply_date);
  42.241 +            parent_start_date_ := interim_order_api.get_start_date( evaluation_rec_.interim_header_id, parent_supply_.interim_order_no);
  42.242 +         ELSE
  42.243 +            parent_start_date_ := parent_supply_.start_date;
  42.244 +         END IF;
  42.245 +
  42.246 +-- Retrieve the components for configured part.
  42.247 +         Config_Evaluation_API.Determine_Structure (structure_alternative_no_,
  42.248 +                                                    parent_supply_.eng_chg_level,
  42.249 +                                                    component_rec_,
  42.250 +                                                    comp_work_guide_rec_,
  42.251 +                                                    config_spec_rec_,
  42.252 +                                                    complete_eval_log_rec_,
  42.253 +                                                    eval_log_rec_,
  42.254 +                                                    evaluation_rec_.contract,
  42.255 +                                                    parent_supply_.part_no,
  42.256 +                                                    parent_start_date_,
  42.257 +                                                    parent_supply_.supply_qty,
  42.258 +                                                    parent_supply_.order_code,
  42.259 +                                                    evaluation_rec_.alternate_status,
  42.260 +                                                    evaluation_rec_.configuration_id );
  42.261 +         --
  42.262 +         -- Note; Set Structure_alternative on InterimOrder After DetermineStructure
  42.263 +         IF (structure_alternative_no_ IS NOT NULL) THEN
  42.264 +            Interim_Order_API.Set_Struct_Alternative_No__(evaluation_rec_.interim_header_id,
  42.265 +                                                          parent_supply_.interim_order_no,
  42.266 +                                                          structure_alternative_no_ );
  42.267 +         END IF;
  42.268 +
  42.269 +-- IF-ELSIF #1: Else if not configured part, get routing and manuf structure.
  42.270 +      ELSIF (Part_Catalog_API.Get_Configurable_Db(evaluation_rec_.part_no) = 'NOT CONFIGURED') THEN
  42.271 +         -- Note; If interim demand head part is not configured then do normal explosion
  42.272 +         -- Note; otherwise only explode Configured and manufactured Dop parts.
  42.273 +         evaluation_rec_.configuration_id := NULL;
  42.274 +         config_spec_rec_ := NULL;
  42.275 +         config_spec_rec_.spec_row_count := 0;
  42.276 +
  42.277 +-- Get routing revision and alternate for non-configured manufactured part.
  42.278 +         comp_routing_revision_ := NULL;
  42.279 +         comp_rout_alternative_no_ := NULL;
  42.280 +         IF (comp_bom_type_db_ = 'M') THEN
  42.281 +            IF (evaluation_rec_.alternate_status = 'Buildable') THEN
  42.282 +               Routing_Int_API.Get_Buildable_Alternative( comp_routing_revision_,
  42.283 +                                                          comp_rout_alternative_no_,
  42.284 +                                                          parent_supply_.contract,
  42.285 +                                                          parent_supply_.part_no,
  42.286 +                                                          comp_bom_type_,
  42.287 +                                                          parent_supply_.start_date,
  42.288 +                                                          evaluation_rec_.serial_begin,
  42.289 +                                                          evaluation_rec_.serial_end );
  42.290 +
  42.291 +               IF comp_routing_revision_ IS NULL THEN
  42.292 +                   Error_Sys.Record_General(lu_name_, 'NOBUILDALTFOUND: No Buildable routing revision/alternative exists for part :P1 site :P2 on the date :P3.'
  42.293 +                                           ,parent_supply_.part_no,parent_supply_.contract,parent_supply_.start_date);
  42.294 +               END IF ;
  42.295 +            ELSE
  42.296 +
  42.297 +               Routing_Int_API.Get_Any_Revision_Alternative( comp_routing_revision_,
  42.298 +                                                             comp_rout_alternative_no_,
  42.299 +                                                             comp_rout_alt_state_,
  42.300 +                                                             parent_supply_.contract,
  42.301 +                                                             parent_supply_.part_no,
  42.302 +                                                             evaluation_rec_.mfg_order_code,
  42.303 +                                                             parent_supply_.start_date,
  42.304 +                                                             evaluation_rec_.serial_begin,
  42.305 +                                                             evaluation_rec_.serial_end );
  42.306 +
  42.307 +              IF comp_routing_revision_ IS NULL THEN
  42.308 +                 Error_Sys.Record_General(lu_name_, 'NOREVALTFOUND: No Tentative/Plannable/Buildable structure revision/alternative exists for part :P1 site :P2 on the date :P3.'
  42.309 +                                         ,parent_supply_.part_no,parent_supply_.contract,parent_supply_.start_date);
  42.310 +              END IF ;
  42.311 +            END IF;
  42.312 +
  42.313 +            Manuf_Structure_Int_API.Get_Buildable_Alternative(comp_eng_chg_level_,
  42.314 +                                                              comp_struct_alternative_no_,
  42.315 +                                                              parent_supply_.contract,
  42.316 +                                                              parent_supply_.part_no,
  42.317 +                                                              comp_bom_type_,
  42.318 +                                                              parent_supply_.start_date,
  42.319 +                                                              evaluation_rec_.serial_begin,
  42.320 +                                                              evaluation_rec_.serial_end );
  42.321 +            IF comp_struct_alternative_no_ IS NULL THEN
  42.322 +               Error_Sys.Record_General(lu_name_, 'NOBUILDSTRUCTFOUND: No Buildable Structure/Alternate exists for part :P1 site :P2 on the date :P3 .',
  42.323 +                                        parent_supply_.part_no, parent_supply_.contract, parent_supply_.start_date);
  42.324 +            END IF;
  42.325 +         -- Get routing revision and alternate for non-configured purchased part.
  42.326 +         ELSIF (comp_bom_type_db_ = 'P') THEN
  42.327 +            comp_routing_revision_ := Routing_Int_API.Get_Revision_By_Date (parent_supply_.contract,
  42.328 +                                                                            parent_supply_.part_no,
  42.329 +                                                                            comp_bom_type_,
  42.330 +                                                                            parent_supply_.start_date );
  42.331 +         END IF;   -- of IF (comp_bom_type_db_ = 'M') THEN
  42.332 +
  42.333 +-- If manufactured, retrieve routing operations for non-configured part.
  42.334 +         IF (comp_bom_type_db_ = 'M') THEN
  42.335 +            Routing_Int_API.Determine_Mfgstd_Routing (operation_rec_,
  42.336 +                                                      oper_work_guide_rec_,
  42.337 +                                                      oper_tool_rec_,
  42.338 +                                                      parent_supply_.contract,
  42.339 +                                                      parent_supply_.part_no,
  42.340 +                                                      NVL(comp_routing_revision_,parent_supply_.routing_revision),
  42.341 +                                                      Shop_Ord_Code_API.Decode(parent_supply_.order_code),
  42.342 +                                                      NVL(comp_rout_alternative_no_,parent_supply_.routing_alternative_no));
  42.343 +            --
  42.344 +            IF (NVL(operation_rec_.operation_row_count,0) > 0) THEN
  42.345 +               IF (comp_rout_alternative_no_ IS NOT NULL) THEN
  42.346 +                  -- Note; Set Routing_alternative on InterimOrder After DetermineRouting
  42.347 +                  Interim_Order_API.Set_Rout_Rev_Alternative__(evaluation_rec_.interim_header_id,
  42.348 +                                                               parent_supply_.interim_order_no,
  42.349 +                                                               comp_routing_revision_,
  42.350 +                                                               comp_rout_alternative_no_ );
  42.351 +               END IF;
  42.352 +            END IF;
  42.353 +
  42.354 +            -- Note; Create Operations that is evaluated
  42.355 +            Create_Interim_Routing___ (operation_rec_,
  42.356 +                                       oper_work_guide_rec_,
  42.357 +                                       oper_tool_rec_,
  42.358 +                                       evaluation_rec_.interim_header_id,
  42.359 +                                       parent_supply_.interim_order_no);
  42.360 +         END IF;
  42.361 +
  42.362 +-- Retrieve components for non-configured part.
  42.363 +         Manuf_Structure_Int_API.Determine_Mfgstd_Structure (component_rec_,
  42.364 +                                                             comp_work_guide_rec_,
  42.365 +                                                             parent_supply_.contract,
  42.366 +                                                             parent_supply_.part_no,
  42.367 +                                                             parent_supply_.eng_chg_level,
  42.368 +                                                             Shop_Ord_Code_API.Decode(parent_supply_.order_code),
  42.369 +                                                             parent_supply_.structure_alternative_no,
  42.370 +                                                             parent_supply_.start_date,
  42.371 +                                                             parent_supply_.supply_qty);
  42.372 +      END IF;  -- of IF ((configurable_ = 'CONFIGURED') AND (part_type_code_ = '1')) OR...
  42.373 +-- End of IF-ELSIF #1
  42.374 +
  42.375 +      calendar_id_ := Site_Api.Get_Manuf_Calendar_Id(evaluation_rec_.contract);
  42.376 +
  42.377 +-- If top-level order, set dates from there, else calculate from top-level order.
  42.378 +      IF parent_supply_.interim_order_no ='1' THEN
  42.379 +         Interim_Order_API.Set_Interim_Order_Dates__ ( evaluation_rec_.interim_header_id,
  42.380 +           parent_supply_.interim_order_no, parent_supply_.supply_date);
  42.381 +         parent_start_date_  := Interim_Order_API.Get_Start_Date( evaluation_rec_.interim_header_id, parent_supply_.interim_order_no);
  42.382 +      ELSE
  42.383 +         parent_order_no_    := interim_order_api.get_parent_interim_order_no( evaluation_rec_.interim_header_id, parent_supply_.interim_order_no);
  42.384 +         parent_supply_date_ := interim_order_api.get_supply_date( evaluation_rec_.interim_header_id, parent_order_no_);
  42.385 +         parent_start_date_  := interim_order_api.get_start_date( evaluation_rec_.interim_header_id, parent_order_no_);
  42.386 +
  42.387 +         FOR component_line_item_rec_ IN get_line_item_no(evaluation_rec_.interim_header_id, parent_order_no_) LOOP
  42.388 +            IF  (component_line_item_rec_.supply_interim_order_no = parent_supply_.interim_order_no) THEN
  42.389 +               line_item_no_ :=  component_line_item_rec_.line_item_no;
  42.390 +               leadtime_offset_ := component_line_item_rec_.leadtime_offset;
  42.391 +            END IF;
  42.392 +         END LOOP;
  42.393 +         IF (leadtime_offset_ > 0) THEN
  42.394 +            interim_required_date_ := work_time_calendar_api.get_next_work_day(calendar_id_, calculate_start_date__(evaluation_rec_.contract,parent_supply_date_ , leadtime_offset_));
  42.395 +            interim_required_date_ := Greatest(interim_required_date_, parent_start_date_);
  42.396 +         ELSE
  42.397 +            interim_required_date_ := parent_start_date_;
  42.398 +         END IF;
  42.399 +         Interim_Order_API.Set_Interim_Order_Dates__(evaluation_rec_.interim_header_id,
  42.400 +           parent_supply_.interim_order_no,
  42.401 +           Work_time_Calendar_API.Get_Previous_Work_Day(calendar_id_,interim_required_date_));
  42.402 +      END IF;
  42.403 +
  42.404 +-- FOR-LOOP #2: Loop thru retrieved component records.
  42.405 +      FOR i IN 1..NVL(component_rec_.comp_row_count,0) LOOP
  42.406 +         evaluation_rec_.interim_supply_date := parent_supply_.supply_date;
  42.407 +         part_type_code_ := Inventory_Part_API.Get_type_code_Db(component_rec_.contract_tab(i),
  42.408 +                                                                component_rec_.component_part_tab(i));
  42.409 +
  42.410 +         calendar_id_ := Site_Api.Get_Manuf_Calendar_Id(component_rec_.contract_tab(i));
  42.411 +
  42.412 +         configurable_ := Part_Catalog_API.Get_Configurable_Db(component_rec_.component_part_tab(i));
  42.413 +
  42.414 +         dop_part_ := Inventory_Part_Planning_API.Get_Order_Requisition_Db(
  42.415 +                         component_rec_.contract_tab(i),
  42.416 +                         component_rec_.component_part_tab(i));
  42.417 +
  42.418 +         comp_routing_revision_ := NULL;
  42.419 +         comp_rout_alternative_no_ := NULL;
  42.420 +
  42.421 +-- If by-product component line, then create warning and ignore.
  42.422 +         IF (component_rec_.qty_per_assembly_tab(i) < 0) THEN
  42.423 +             e_row_ := NVL(complete_eval_log_rec_.warning.warning_row_count,0) + 1;
  42.424 +             complete_eval_log_rec_.warning.warning_row_count  := e_row_;
  42.425 +
  42.426 +             complete_eval_log_rec_.warning.explosion_row_type_db(e_row_) := 'PartRevision';
  42.427 +             complete_eval_log_rec_.warning.contract(e_row_)                 := component_rec_.contract_tab(i);
  42.428 +             complete_eval_log_rec_.warning.part_no(e_row_)                  := parent_part_;
  42.429 +             complete_eval_log_rec_.warning.eng_chg_level(e_row_)            := NULL;
  42.430 +             complete_eval_log_rec_.warning.routing_revision(e_row_)         := NULL;
  42.431 +             complete_eval_log_rec_.warning.bom_type_db(e_row_)              := NULL;
  42.432 +             complete_eval_log_rec_.warning.routing_alternative_no(e_row_)   := NULL;
  42.433 +             complete_eval_log_rec_.warning.operation_id(e_row_)             := NULL;
  42.434 +             complete_eval_log_rec_.warning.routing_guideline_no(e_row_)     := NULL;
  42.435 +             complete_eval_log_rec_.warning.tool_sequence(e_row_)            := NULL;
  42.436 +             complete_eval_log_rec_.warning.structure_alternative_no(e_row_) := NULL;
  42.437 +             complete_eval_log_rec_.warning.line_item_no(e_row_)             := NULL;
  42.438 +             complete_eval_log_rec_.warning.structure_guideline_no(e_row_)   := NULL;
  42.439 +             complete_eval_log_rec_.warning.action_id(e_row_)                := NULL;
  42.440 +             complete_eval_log_rec_.warning.action_line_no(e_row_)           := NULL;
  42.441 +             complete_eval_log_rec_.warning.condition_id(e_row_)             := NULL;
  42.442 +             complete_eval_log_rec_.warning.condition_line_no(e_row_)        := NULL;
  42.443 +             complete_eval_log_rec_.warning.formula_id(e_row_)               := NULL;
  42.444 +
  42.445 +             complete_eval_log_rec_.warning.warning_message(e_row_)          :=
  42.446 +                Language_SYS.Translate_Constant(lu_name_, 'IOMNOBYPRODUCTS: Component part :P1 as a by-product is not handled by DOP. Hence ignored.',
  42.447 +                  Fnd_Session_API.Get_Language, component_rec_.component_part_tab(i));
  42.448 +         END IF;  -- of IF (component_rec_.qty_per_assembly_tab(i) < 0) THEN...
  42.449 +
  42.450 +         phatom_part_exist_ := FALSE;
  42.451 +         parent_interim_order_no_ := parent_supply_.interim_order_no;
  42.452 +         WHILE (parent_interim_order_no_ > 0) and (NOT phatom_part_exist_ ) LOOP
  42.453 +            parent_part_mrp_code_ := Inventory_Part_Planning_API.Get_Mrp_Order_Code(evaluation_rec_.contract,Interim_Order_Api.Get_Part_No(parent_supply_.interim_header_id,parent_interim_order_no_));
  42.454 +            IF parent_part_mrp_code_ = 'P' then
  42.455 +               phatom_part_exist_ := TRUE;
  42.456 +            END IF;
  42.457 +            parent_interim_order_no_ := Interim_Order_Api.Get_Parent_Interim_Order_No(parent_supply_.interim_header_id,parent_interim_order_no_);
  42.458 +         END LOOP;
  42.459 +
  42.460 +-- If expense component line, then create warning and ignore.
  42.461 +         IF (part_type_code_ = '6') THEN
  42.462 +            e_row_ := NVL(complete_eval_log_rec_.warning.warning_row_count,0) + 1;
  42.463 +            complete_eval_log_rec_.warning.warning_row_count := e_row_;
  42.464 +
  42.465 +            complete_eval_log_rec_.warning.explosion_row_type_db(e_row_) := 'ExpensePart';
  42.466 +            complete_eval_log_rec_.warning.contract(e_row_)                 := component_rec_.contract_tab(i);
  42.467 +            complete_eval_log_rec_.warning.part_no(e_row_)                  := component_rec_.component_part_tab(i);
  42.468 +            complete_eval_log_rec_.warning.eng_chg_level(e_row_)            := NULL;
  42.469 +            complete_eval_log_rec_.warning.routing_revision(e_row_)         := NULL;
  42.470 +            complete_eval_log_rec_.warning.bom_type_db(e_row_)              := NULL;
  42.471 +            complete_eval_log_rec_.warning.routing_alternative_no(e_row_)   := NULL;
  42.472 +            complete_eval_log_rec_.warning.operation_id(e_row_)             := NULL;
  42.473 +            complete_eval_log_rec_.warning.routing_guideline_no(e_row_)     := NULL;
  42.474 +            complete_eval_log_rec_.warning.tool_sequence(e_row_)            := NULL;
  42.475 +            complete_eval_log_rec_.warning.structure_alternative_no(e_row_) := NULL;
  42.476 +            complete_eval_log_rec_.warning.line_item_no(e_row_)             := NULL;
  42.477 +            complete_eval_log_rec_.warning.structure_guideline_no(e_row_)   := NULL;
  42.478 +            complete_eval_log_rec_.warning.action_id(e_row_)                := NULL;
  42.479 +            complete_eval_log_rec_.warning.action_line_no(e_row_)           := NULL;
  42.480 +            complete_eval_log_rec_.warning.condition_id(e_row_)             := NULL;
  42.481 +            complete_eval_log_rec_.warning.condition_line_no(e_row_)        := NULL;
  42.482 +            complete_eval_log_rec_.warning.formula_id(e_row_)               := NULL;
  42.483 +
  42.484 +            complete_eval_log_rec_.warning.warning_message(e_row_)          :=
  42.485 +               Language_SYS.Translate_Constant(lu_name_, 'IOMINVPARTTYPE: Component part :P1 with part type Expense is not handled by DOP. Hence ignored.',
  42.486 +                 Fnd_Session_API.Get_Language, component_rec_.component_part_tab(i));
  42.487 +
  42.488 +-- Else if not phantom parent part, process.
  42.489 +         ELSIF (parent_interim_order_no_ = 0) THEN
  42.490 +            IF (part_type_code_ IN ( '1','2')) THEN
  42.491 +               comp_bom_type_db_ := 'M';
  42.492 +            ELSIF (part_type_code_ IN ('3', '4')) THEN
  42.493 +               comp_bom_type_db_ := 'P';
  42.494 +            END IF;
  42.495 +            comp_bom_type_ := Shop_Ord_Code_API.Decode(comp_bom_type_db_);
  42.496 +
  42.497 +-- IF-ELSE #4 If phantom/blow-thru, process.
  42.498 +            IF (component_rec_.mrp_order_code_tab(i) IN ('P','K') AND
  42.499 +             (part_type_code_ = '1')) THEN
  42.500 +               operation_no_:=component_rec_.comp_operation_no_tab(i);
  42.501 +               get_comp_flag_ := TRUE;
  42.502 +               IF component_rec_.mrp_order_code_tab(i) = 'P' THEN
  42.503 +                   qty_avail_ :=
  42.504 +                   inventory_part_in_stock_api.Get_Inventory_Qty_Onhand( component_rec_.contract_tab(i),   component_rec_.component_part_tab(i), NULL) -
  42.505 +                   inventory_part_in_stock_api.Get_Inventory_Qty_Reserved( component_rec_.contract_tab(i),component_rec_.component_part_tab(i), NULL)-
  42.506 +                   inventory_part_in_stock_api.Get_Inventory_Qty_Rejected( component_rec_.contract_tab(i), component_rec_.component_part_tab(i),NULL, NULL);
  42.507 +
  42.508 +                   primary_comp_qty_ := (((( component_rec_.qty_required_tab(i))
  42.509 +                                         / (1 - ( component_rec_.shrinkage_factor_tab(i) / 100)))
  42.510 +                                         +  component_rec_.component_scrap_tab(i)));
  42.511 +                   IF (qty_avail_ >=  primary_comp_qty_ ) OR (component_rec_.consumption_item_db_tab(i) = 'Not Consumed') THEN
  42.512 +                      get_comp_flag_ := FALSE;
  42.513 +                   ELSE
  42.514 +                      get_comp_flag_ := TRUE;
  42.515 +                   END IF;
  42.516 +               END IF;
  42.517 +
  42.518 +               IF get_comp_flag_ = TRUE THEN
  42.519 +                    Process_Evaluate_Phantom___ (evaluation_rec_,
  42.520 +                                                 parent_supply_rec_,
  42.521 +                                                 config_spec_rec_,
  42.522 +                                                 eval_log_rec_,
  42.523 +                                                 complete_eval_log_rec_,
  42.524 +                                                 component_rec_.contract_tab(i),
  42.525 +                                                 component_rec_.component_part_tab(i),
  42.526 +                                                 component_rec_.date_required_tab(i),
  42.527 +                                                 component_rec_.qty_required_tab(i),
  42.528 +                                                 comp_bom_type_db_,
  42.529 +                                                 evaluation_rec_.alternate_status,
  42.530 +                                                 component_rec_.configuration_id_tab(i),
  42.531 +                                                 operation_no_);
  42.532 +               ELSIF  get_comp_flag_ = FALSE THEN
  42.533 +                  interim_required_date_ := Work_time_Calendar_API.Get_Previous_Work_Day(calendar_id_,interim_order_api.get_start_date(evaluation_rec_.interim_header_id,parent_supply_.interim_order_no));
  42.534 +                  interim_start_date_ := Least( interim_required_date_,
  42.535 +                                                 component_rec_.date_required_tab(i) );
  42.536 +                  supply_interim_order_no_ := NULL;
  42.537 +                  Interim_Order_API.New(supply_interim_order_no_,
  42.538 +                                        evaluation_rec_.interim_header_id,
  42.539 +                                        parent_supply_.interim_order_no,
  42.540 +                                        evaluation_rec_.next_level,
  42.541 +                                        component_rec_.contract_tab(i),
  42.542 +                                        component_rec_.component_part_tab(i),
  42.543 +                                        component_rec_.qty_required_tab(i),
  42.544 +                                        interim_required_date_,
  42.545 +                                        interim_start_date_,
  42.546 +                                        comp_eng_chg_level_,
  42.547 +                                        comp_bom_type_db_,
  42.548 +                                        comp_struct_alternative_no_,
  42.549 +                                        comp_routing_revision_,
  42.550 +                                        comp_rout_alternative_no_,
  42.551 +                                        component_rec_.promise_planned_db_tab(i),
  42.552 +                                        component_rec_.configuration_id_tab(i),
  42.553 +                                        NULL,
  42.554 +                                        evaluation_rec_.part_ownership,
  42.555 +                                        evaluation_rec_.owning_customer_no );
  42.556 +                  Trace_SYS.Message('Supply created for : '||component_rec_.component_part_tab(i));
  42.557 +                  evaluation_rec_.line_item_no := NVL(evaluation_rec_.line_item_no,0) + 1;
  42.558 +     -- Create InterimOrderComponent
  42.559 +                  Interim_Order_Component_API.New(evaluation_rec_.line_item_no,
  42.560 +                                                  evaluation_rec_.interim_header_id,
  42.561 +                                                  parent_supply_.interim_order_no,
  42.562 +                                                  evaluation_rec_.line_item_no,
  42.563 +                                                  evaluation_rec_.contract,
  42.564 +                                                  component_rec_.component_part_tab(i),
  42.565 +                                                  supply_interim_order_no_,
  42.566 +                                                  component_rec_.qty_required_tab(i),
  42.567 +                                                  interim_required_date_,
  42.568 +                                                  component_rec_.qty_per_assembly_tab(i),
  42.569 +                                                  component_rec_.component_scrap_tab(i),
  42.570 +                                                  component_rec_.shrinkage_factor_tab(i),
  42.571 +                                                  component_rec_.comp_operation_no_tab(i),
  42.572 +                                                  component_rec_.leadtime_offset_tab(i),
  42.573 +                                                  component_rec_.consumption_item_db_tab(i),
  42.574 +                                                  evaluation_rec_.line_item_no,
  42.575 +                                                  component_rec_.issue_to_loc_tab(i),
  42.576 +                                                  component_rec_.draw_pos_no_tab(i),
  42.577 +                                                  component_rec_.note_text_tab(i),
  42.578 +                                                  component_rec_.configuration_id_tab(i) );
  42.579 +                  Trace_SYS.Message('Component created for : '||component_rec_.component_part_tab(i));
  42.580 +               END IF;  -- of IF get_comp_flag_ = TRUE THEN
  42.581 +
  42.582 +               IF (evaluation_rec_.single_level_explosion = 0) THEN
  42.583 +                  evaluation_rec_.orders_exist_to_evaluate := TRUE;
  42.584 +               ELSE
  42.585 +                  evaluation_rec_.orders_exist_to_evaluate := FALSE;
  42.586 +               END IF;
  42.587 +
  42.588 +-- IF-ELSE #4 Else process non-phantom/blow-thru part.
  42.589 +            ELSE
  42.590 +               -- If ctp planned record check for orders to evaluate.
  42.591 +               IF evaluation_rec_.ctp_planned = 1 THEN
  42.592 +                  IF configurable_ = 'CONFIGURED' THEN
  42.593 +                     IF part_type_code_ IN ('3','4') THEN
  42.594 +                        IF Dictionary_SYS.Logical_Unit_Is_Installed('SupplySourcePartManager') THEN
  42.595 +                           stmt_ := 'BEGIN
  42.596 +                                       :check_source := Supply_Source_Part_Manager_API.Is_Part_Internally_Sourced(:contract, :part_no);
  42.597 +                                     END;';
  42.598 +                           -- ifs_assert_safe pemase 20051221
  42.599 +                           EXECUTE IMMEDIATE stmt_
  42.600 +                              USING OUT check_source_,
  42.601 +                                     IN evaluation_rec_.contract,
  42.602 +                                     IN component_rec_.component_part_tab(i);
  42.603 +                        END IF;
  42.604 +
  42.605 +                        IF check_source_ = 'TRUE'  THEN
  42.606 +                           evaluation_rec_.orders_exist_to_evaluate := TRUE;
  42.607 +                        ELSE
  42.608 +                           evaluation_rec_.orders_exist_to_evaluate := FALSE;
  42.609 +                        END IF;
  42.610 +                     ELSE
  42.611 +                        IF (evaluation_rec_.single_level_explosion = 0) THEN
  42.612 +                           evaluation_rec_.orders_exist_to_evaluate := TRUE;
  42.613 +                        ELSE
  42.614 +                           evaluation_rec_.orders_exist_to_evaluate := FALSE;
  42.615 +                        END IF;
  42.616 +                     END IF;
  42.617 +                  ELSE
  42.618 +                     IF (evaluation_rec_.single_level_explosion = 0) THEN
  42.619 +                        evaluation_rec_.orders_exist_to_evaluate := TRUE;
  42.620 +                     ELSE
  42.621 +                        evaluation_rec_.orders_exist_to_evaluate := FALSE;
  42.622 +                     END IF;
  42.623 +                  END IF;
  42.624 +               -- Not ctp planned, check for orders to evaluate.
  42.625 +               ELSE
  42.626 +                  IF ((configurable_ = 'CONFIGURED') AND (part_type_code_ = '1')) OR
  42.627 +                     ((dop_part_ = 'D') AND (part_type_code_ = '1')) THEN
  42.628 +
  42.629 +                     IF (evaluation_rec_.single_level_explosion = 0) THEN
  42.630 +                        evaluation_rec_.orders_exist_to_evaluate := TRUE;
  42.631 +                     ELSE
  42.632 +                        evaluation_rec_.orders_exist_to_evaluate := FALSE;
  42.633 +                     END IF;
  42.634 +
  42.635 +                  END IF;
  42.636 +               END IF;   -- of IF evaluation_rec_.ctp_planned = 1 THEN..ELSE..
  42.637 +
  42.638 +               interim_required_date_ := Work_time_Calendar_API.Get_Previous_Work_Day(calendar_id_,parent_start_date_);
  42.639 +
  42.640 +               interim_start_date_ := Least( interim_required_date_,
  42.641 +                                             component_rec_.date_required_tab(i) );
  42.642 +
  42.643 +               supply_interim_order_no_ := NULL;
  42.644 +
  42.645 +               -- Note; Create InterimOrder
  42.646 +               -- Note; Get revision and alternate both for routing and structure
  42.647 +               comp_eng_chg_level_ := NULL;
  42.648 +               comp_struct_alternative_no_ := NULL;
  42.649 +
  42.650 +               IF (comp_bom_type_db_ = 'M') THEN
  42.651 +                  -- Note; For Component part even tentative alternative is allowed as a leaf.
  42.652 +                  -- Note; Component as a leaf will always be 'Tentative'
  42.653 +
  42.654 +                  IF Manuf_Part_Attribute_API.Get_Structure_Effectivity(component_rec_.contract_tab(i), component_rec_.component_part_tab(i))
  42.655 +                     = Effectivity_Control_API.Decode('SERIAL') THEN
  42.656 +                     Manuf_Structure_Util_API.Get_Any_Date_Revision_Alt(comp_eng_chg_level_,
  42.657 +                                                                       comp_struct_alternative_no_,
  42.658 +                                                                       comp_alt_state_,
  42.659 +                                                                       component_rec_.contract_tab(i),
  42.660 +                                                                       component_rec_.component_part_tab(i),
  42.661 +                                                                       comp_bom_type_,
  42.662 +                                                                       interim_required_date_ );
  42.663 +
  42.664 +                     e_row_ := NVL(complete_eval_log_rec_.warning.warning_row_count,0) + 1;
  42.665 +                     complete_eval_log_rec_.warning.warning_row_count := e_row_;
  42.666 +
  42.667 +                     complete_eval_log_rec_.warning.explosion_row_type_db(e_row_) := 'PartRevision';
  42.668 +                     complete_eval_log_rec_.warning.contract(e_row_)                 := component_rec_.contract_tab(i);
  42.669 +                     complete_eval_log_rec_.warning.part_no(e_row_)                  := component_rec_.component_part_tab(i);
  42.670 +                     complete_eval_log_rec_.warning.eng_chg_level(e_row_)            := NULL;
  42.671 +                     complete_eval_log_rec_.warning.routing_revision(e_row_)         := NULL;
  42.672 +                     complete_eval_log_rec_.warning.bom_type_db(e_row_)              := NULL;
  42.673 +                     complete_eval_log_rec_.warning.routing_alternative_no(e_row_)   := NULL;
  42.674 +                     complete_eval_log_rec_.warning.operation_id(e_row_)             := NULL;
  42.675 +                     complete_eval_log_rec_.warning.routing_guideline_no(e_row_)     := NULL;
  42.676 +                     complete_eval_log_rec_.warning.tool_sequence(e_row_)            := NULL;
  42.677 +                     complete_eval_log_rec_.warning.structure_alternative_no(e_row_) := NULL;
  42.678 +                     complete_eval_log_rec_.warning.line_item_no(e_row_)             := NULL;
  42.679 +                     complete_eval_log_rec_.warning.structure_guideline_no(e_row_)   := NULL;
  42.680 +                     complete_eval_log_rec_.warning.action_id(e_row_)                := NULL;
  42.681 +                     complete_eval_log_rec_.warning.action_line_no(e_row_)           := NULL;
  42.682 +                     complete_eval_log_rec_.warning.condition_id(e_row_)             := NULL;
  42.683 +                     complete_eval_log_rec_.warning.condition_line_no(e_row_)        := NULL;
  42.684 +                     complete_eval_log_rec_.warning.formula_id(e_row_)               := NULL;
  42.685 +
  42.686 +                     complete_eval_log_rec_.warning.warning_message(e_row_)          :=
  42.687 +                        Language_SYS.Translate_Constant(lu_name_, 'STRUCTSERIALEFF: Component part :P1 uses serial structure effectivity which is not handled. Date effectivity is used instead.',
  42.688 +                                                        Fnd_Session_API.Get_Language,
  42.689 +                                                        component_rec_.component_part_tab(i));
  42.690 +
  42.691 +
  42.692 +                  ELSE
  42.693 +                     Manuf_Structure_Int_API.Get_Any_Revision_Alternative(comp_eng_chg_level_,
  42.694 +                                                                       comp_struct_alternative_no_,
  42.695 +                                                                       comp_alt_state_,
  42.696 +                                                                       component_rec_.contract_tab(i),
  42.697 +                                                                       component_rec_.component_part_tab(i),
  42.698 +                                                                       comp_bom_type_,
  42.699 +                                                                       interim_required_date_,
  42.700 +                                                                       evaluation_rec_.serial_begin,
  42.701 +                                                                       evaluation_rec_.serial_end );
  42.702 +
  42.703 +                     IF (evaluation_rec_.alternate_status = 'Buildable') THEN
  42.704 +                        Routing_Int_API.Get_Buildable_Alternative( comp_routing_revision_,
  42.705 +                                                          comp_rout_alternative_no_,
  42.706 +                                                          component_rec_.contract_tab(i),
  42.707 +                                                          component_rec_.component_part_tab(i),
  42.708 +                                                          comp_bom_type_,
  42.709 +                                                          interim_required_date_,
  42.710 +                                                          evaluation_rec_.serial_begin,
  42.711 +                                                          evaluation_rec_.serial_end );
  42.712 +
  42.713 +                        IF comp_routing_revision_ IS NULL THEN
  42.714 +                           Error_Sys.Record_General(lu_name_, 'NOBUILDALTFOUND: No Buildable routing revision/alternative exists for part :P1 site :P2 on the date :P3.'
  42.715 +                                               ,component_rec_.component_part_tab(i),component_rec_.contract_tab(i),interim_required_date_);
  42.716 +                        END IF ;
  42.717 +
  42.718 +                     ELSE
  42.719 +                        Routing_Int_API.Get_Any_Revision_Alternative( comp_routing_revision_,
  42.720 +                                                             comp_rout_alternative_no_,
  42.721 +                                                             comp_rout_alt_state_,
  42.722 +                                                             component_rec_.contract_tab(i),
  42.723 +                                                             component_rec_.component_part_tab(i),
  42.724 +                                                             comp_bom_type_,
  42.725 +                                                             interim_required_date_,
  42.726 +                                                             evaluation_rec_.serial_begin,
  42.727 +                                                             evaluation_rec_.serial_end );
  42.728 +
  42.729 +                        IF comp_routing_revision_ IS NULL THEN
  42.730 +                           Error_Sys.Record_General(lu_name_, 'NOREVALTFOUND: No Tentative/Plannable/Buildable structure revision/alternative exists for part :P1 site :P2 on the date :P3.'
  42.731 +                                           ,component_rec_.component_part_tab(i),component_rec_.contract_tab(i),interim_required_date_);
  42.732 +                        END IF ;
  42.733 +
  42.734 +                     END IF;
  42.735 +                  END IF; -- = Effectivity_Control_API.Decode('SERIAL') THEN
  42.736 +
  42.737 +               ELSIF (comp_bom_type_db_ = 'P') THEN
  42.738 +
  42.739 +                  comp_eng_chg_level_ := Part_Revision_API.Get_Revision_By_Date (component_rec_.contract_tab(i),
  42.740 +                                                                                 component_rec_.component_part_tab(i),
  42.741 +                                                                                 interim_required_date_);
  42.742 +                  -- Bug 77319, start
  42.743 +                  Calculate_Purch_Dates___ (interim_required_date_,
  42.744 +                                            interim_start_date_,
  42.745 +                                            evaluation_rec_,
  42.746 +                                            component_rec_.contract_tab(i),
  42.747 +                                            component_rec_.component_part_tab(i),
  42.748 +                                            parent_supply_.interim_order_no,
  42.749 +                                            component_rec_.leadtime_offset_tab(i));
  42.750 +                  -- Bug 77319, end
  42.751 +               END IF; --IF (comp_bom_type_db_ = 'M') THEN
  42.752 +
  42.753 +               IF (comp_eng_chg_level_ IS NULL) THEN
  42.754 +                  -- Note; Set a error message for part revision being null for component
  42.755 +                  e_row_ := NVL(complete_eval_log_rec_.error.error_row_count,0) + 1;
  42.756 +                  complete_eval_log_rec_.error.error_row_count  := e_row_;
  42.757 +
  42.758 +                  complete_eval_log_rec_.error.explosion_row_type_db(e_row_) := 'PartRevision';
  42.759 +                  complete_eval_log_rec_.error.contract(e_row_)                 := component_rec_.contract_tab(i);
  42.760 +                  complete_eval_log_rec_.error.part_no(e_row_)                  := component_rec_.component_part_tab(i);
  42.761 +                  complete_eval_log_rec_.error.eng_chg_level(e_row_)            := NULL;
  42.762 +                  complete_eval_log_rec_.error.routing_revision(e_row_)         := NULL;
  42.763 +                  complete_eval_log_rec_.error.bom_type_db(e_row_)              := NULL;
  42.764 +                  complete_eval_log_rec_.error.routing_alternative_no(e_row_)   := NULL;
  42.765 +                  complete_eval_log_rec_.error.operation_id(e_row_)             := NULL;
  42.766 +                  complete_eval_log_rec_.error.routing_guideline_no(e_row_)     := NULL;
  42.767 +                  complete_eval_log_rec_.error.tool_sequence(e_row_)            := NULL;
  42.768 +                  complete_eval_log_rec_.error.structure_alternative_no(e_row_) := NULL;
  42.769 +                  complete_eval_log_rec_.error.line_item_no(e_row_)             := NULL;
  42.770 +                  complete_eval_log_rec_.error.structure_guideline_no(e_row_)   := NULL;
  42.771 +                  complete_eval_log_rec_.error.action_id(e_row_)                := NULL;
  42.772 +                  complete_eval_log_rec_.error.action_line_no(e_row_)           := NULL;
  42.773 +                  complete_eval_log_rec_.error.condition_id(e_row_)             := NULL;
  42.774 +                  complete_eval_log_rec_.error.condition_line_no(e_row_)        := NULL;
  42.775 +                  complete_eval_log_rec_.error.formula_id(e_row_)               := NULL;
  42.776 +
  42.777 +                  complete_eval_log_rec_.error.error_message(e_row_)            :=
  42.778 +                     Language_SYS.Translate_Constant(lu_name_, 'IOMNOREV: Part revision does not exist for component part :P1 contract :P2 required date :P3',
  42.779 +                       Fnd_Session_API.Get_Language,
  42.780 +                       component_rec_.component_part_tab(i),
  42.781 +                       component_rec_.contract_tab(i),
  42.782 +                       interim_required_date_);
  42.783 +               END IF;  -- of IF (comp_eng_chg_level_ IS NULL) THEN
  42.784 +               --
  42.785 +               --
  42.786 +               found_:=FALSE;
  42.787 +               FOR j IN 1..NVL(operation_rec_.operation_row_count,0) LOOP
  42.788 +                  IF (component_rec_.comp_operation_no_tab(i)=operation_rec_.operation_no_tab(j)) THEN
  42.789 +                     found_ := TRUE;
  42.790 +                     EXIT;
  42.791 +                  END IF;
  42.792 +               END LOOP;
  42.793 +               IF (NOT found_) THEN
  42.794 +                  component_rec_.comp_operation_no_tab(i):=NULL;
  42.795 +               END IF;
  42.796 +
  42.797 +               IF (component_rec_.comp_operation_no_tab(i) IS NOT NULL) THEN
  42.798 +                  Validate_Oper_On_Comp___(oper_valid_,
  42.799 +                                           complete_eval_log_rec_,
  42.800 +                                           operation_rec_,
  42.801 +                                           component_rec_.contract_tab(i),
  42.802 +                                           component_rec_.component_part_tab(i),
  42.803 +                                           component_rec_.line_item_no_tab(i),
  42.804 +                                           component_rec_.comp_operation_no_tab(i),
  42.805 +                                           parent_supply_.eng_chg_level,
  42.806 +                                           parent_supply_.structure_alternative_no,
  42.807 +                                           parent_supply_.order_code,
  42.808 +                                           parent_supply_.routing_revision,
  42.809 +                                           parent_supply_.routing_alternative_no,
  42.810 +                                           parent_part_);
  42.811 +               END IF;
  42.812 +               --
  42.813 +               IF ( ( (component_rec_.comp_operation_no_tab(i) IS NULL) OR
  42.814 +                      ( (component_rec_.comp_operation_no_tab(i) IS NOT NULL) AND
  42.815 +                        (oper_valid_) ) ) AND
  42.816 +                    ( (component_rec_.qty_per_assembly_tab(i) > 0) OR
  42.817 +                      (component_rec_.consumption_item_db_tab(i) = 'Not Consumed') ) ) THEN
  42.818 +                  IF component_rec_.consumption_item_db_tab(i) = 'Not Consumed' THEN
  42.819 +                     component_rec_.qty_required_tab(i) := 0;
  42.820 +                  END IF;
  42.821 +                  Interim_Order_API.New(supply_interim_order_no_,
  42.822 +                                        evaluation_rec_.interim_header_id,
  42.823 +                                        parent_supply_.interim_order_no,
  42.824 +                                        evaluation_rec_.next_level,
  42.825 +                                        component_rec_.contract_tab(i),
  42.826 +                                        component_rec_.component_part_tab(i),
  42.827 +                                        component_rec_.qty_required_tab(i),
  42.828 +                                        interim_required_date_,
  42.829 +                                        interim_start_date_,
  42.830 +                                        comp_eng_chg_level_,
  42.831 +                                        comp_bom_type_db_,
  42.832 +                                        comp_struct_alternative_no_,
  42.833 +                                        comp_routing_revision_,
  42.834 +                                        comp_rout_alternative_no_,
  42.835 +                                        component_rec_.promise_planned_db_tab(i),
  42.836 +                                        component_rec_.configuration_id_tab(i),
  42.837 +                                        NULL,
  42.838 +                                        evaluation_rec_.part_ownership,
  42.839 +                                        evaluation_rec_.owning_customer_no );
  42.840 +
  42.841 +                  evaluation_rec_.line_item_no := NVL(evaluation_rec_.line_item_no,0) + 1;
  42.842 +
  42.843 +                  -- Note; Create InterimOrderComponent
  42.844 +                  Interim_Order_Component_API.New(evaluation_rec_.line_item_no,
  42.845 +                                                  evaluation_rec_.interim_header_id,
  42.846 +                                                  parent_supply_.interim_order_no,
  42.847 +                                                  evaluation_rec_.line_item_no,
  42.848 +                                                  evaluation_rec_.contract,
  42.849 +                                                  component_rec_.component_part_tab(i),
  42.850 +                                                  supply_interim_order_no_,
  42.851 +                                                  component_rec_.qty_required_tab(i),
  42.852 +                                                  interim_required_date_,
  42.853 +                                                  component_rec_.qty_per_assembly_tab(i),
  42.854 +                                                  component_rec_.component_scrap_tab(i),
  42.855 +                                                  component_rec_.shrinkage_factor_tab(i),
  42.856 +                                                  component_rec_.comp_operation_no_tab(i),
  42.857 +                                                  component_rec_.leadtime_offset_tab(i),
  42.858 +                                                  component_rec_.consumption_item_db_tab(i),
  42.859 +                                                  evaluation_rec_.line_item_no,
  42.860 +                                                  component_rec_.issue_to_loc_tab(i),
  42.861 +                                                  component_rec_.draw_pos_no_tab(i),
  42.862 +                                                  component_rec_.note_text_tab(i),
  42.863 +                                                  component_rec_.configuration_id_tab(i),
  42.864 +                                                  NULL,
  42.865 +                                                  evaluation_rec_.part_ownership,
  42.866 +                                                  evaluation_rec_.owning_customer_no );
  42.867 +
  42.868 +                  -- Note; Create InterimCompWorkGuide
  42.869 +                  FOR j IN 1..comp_work_guide_rec_.comp_work_guide_count LOOP
  42.870 +                     IF (component_rec_.line_item_no_tab(i) = comp_work_guide_rec_.comp_line_item_no_tab(j)) THEN
  42.871 +                        --
  42.872 +                        Interim_Comp_Work_Guide_API.NEW(comp_work_guide_rec_.comp_guideline_no_tab(j),
  42.873 +                                                        evaluation_rec_.interim_header_id,
  42.874 +                                                        parent_supply_.interim_order_no,
  42.875 +                                                        evaluation_rec_.line_item_no, -- component_rec_.line_item_no_tab(i),
  42.876 +                                                        comp_work_guide_rec_.comp_guideline_seq_tab(j),
  42.877 +                                                        comp_work_guide_rec_.comp_guideline_desc_tab(j),
  42.878 +                                                        comp_work_guide_rec_.comp_guideline_text_tab(j),
  42.879 +                                                        comp_work_guide_rec_.comp_guideline_type_tab(j),
  42.880 +                                                        comp_work_guide_rec_.x_coordinate_tab(j),
  42.881 +                                                        comp_work_guide_rec_.y_coordinate_tab(j),
  42.882 +                                                        comp_work_guide_rec_.z_coordinate_tab(j),
  42.883 +                                                        comp_work_guide_rec_.reference_qty_tab(j) );
  42.884 +                     END IF;
  42.885 +                  END LOOP;   -- comp_work_guide_rec loop
  42.886 +               END IF; -- of IF ( ( (component_rec_.comp_operation_no_tab(i) IS NULL) OR
  42.887 +
  42.888 +            END IF;  -- of IF (component_rec_.mrp_order_code_tab(i) IN ('P','K') AND
  42.889 +-- End IF-ELSE #4
  42.890 +
  42.891 +         END IF;  -- of IF (part_type_code_ = '6') THEN..ELSIF (NOT phatom_part_exist_) THEN..
  42.892 +
  42.893 +      END LOOP;
  42.894 +-- End FOR-LOOP #2: Loop thru retrieved component records.
  42.895 +
  42.896 +   END IF;  --of IF NOT multi_site_part_exist_ THEN
  42.897 +
  42.898 +-- Note; Initialize all records for the next interim order
  42.899 +      operation_rec_       := NULL;
  42.900 +      operation_rec_.operation_row_count := 0;
  42.901 +      oper_work_guide_rec_ := NULL;
  42.902 +      oper_work_guide_rec_.oper_work_guide_row_count := 0;
  42.903 +      oper_tool_rec_       := NULL;
  42.904 +      oper_tool_rec_.oper_tool_row_count := 0;
  42.905 +      component_rec_       := NULL;
  42.906 +      component_rec_.comp_row_count := 0;
  42.907 +      comp_work_guide_rec_ := NULL;
  42.908 +      comp_work_guide_rec_.comp_work_guide_count := 0;
  42.909 +      config_spec_rec_     := NULL;
  42.910 +      config_spec_rec_.spec_row_count := 0;
  42.911 +      --
  42.912 +      evaluation_rec_.line_item_no := 0;
  42.913 +      -- Bug 74483, start
  42.914 +      comp_eng_chg_level_ := NULL;
  42.915 +      comp_struct_alternative_no_ := NULL;
  42.916 +      -- Bug 74483, end
  42.917 +   END LOOP;
  42.918 +-- End FOR-LOOP #1: Loop thru interim order records inserted by calling method.
  42.919 +END Evaluate_Level___;
  42.920 \ No newline at end of file
    43.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    43.2 +++ b/PLSQL/Lexer/test/unit/data/txtser.ins	Wed May 15 23:04:20 2013 +0200
    43.3 @@ -0,0 +1,322 @@
    43.4 +-----------------------------------------------------------------------------
    43.5 +--
    43.6 +-- File: txtser.ins
    43.7 +--
    43.8 +-- Purpose: Creates the Java Implementation of AltaVista Search. (The Source comes from Oracle).
    43.9 +--          Creates Schedules for Index Synchronization AND Optimization.
   43.10 +--
   43.11 +--  Date    Sign  History
   43.12 +--  ------  ----  -----------------------------------------------------------
   43.13 +--  040701  NiSilk Version 1.0.0 Created.
   43.14 +--  040713  ChCrlk Removed input values for parameter "parameters_" in method call to Batch_SYS.New_Batch_Schedule.
   43.15 +--  041203  ChCrlk Add statements to create datastore preferences and content indexes
   43.16 +--  050110  ChCrlk Modified creation of datastore preferences.
   43.17 +--  050125  Nifrse  Moved the Oracle Text indexes from CALLKS to PCM and CALLC modules.
   43.18 +--  070410  NIJALK Bug 64641, Added check on scheduled tasks to avoid duplicates. 
   43.19 +--  070621  ILSOLK Merged Bug Id 64641.
   43.20 +-----------------------------------------------------------------------------
   43.21 +
   43.22 +set define off
   43.23 +
   43.24 +create or replace java source named "AvQuery" as 
   43.25 +
   43.26 +  import java.util.*;
   43.27 +
   43.28 +  class WordData {
   43.29 +    String text;
   43.30 +    String fieldName;
   43.31 +    }
   43.32 +
   43.33 +  public class AvQuery {
   43.34 +
   43.35 +  static Vector reqWords = new Vector();
   43.36 +  static Vector optWords = new Vector();
   43.37 +  static Vector notWords = new Vector();
   43.38 +
   43.39 +  public static final int required  = 1;
   43.40 +  public static final int optional  = 2;
   43.41 +  public static final int notwanted = 3;
   43.42 +
   43.43 +  public static String translate (String input) {
   43.44 +    processString(input);
   43.45 +    return getQuery();
   43.46 +    }
   43.47 +
   43.48 +  private static void addWord (String word, int wordType, String field) {
   43.49 +
   43.50 +    WordData wd = new WordData();
   43.51 +
   43.52 +    wd.text = word;
   43.53 +    wd.fieldName = field;
   43.54 +
   43.55 +    switch (wordType) {
   43.56 +    case required:
   43.57 +      reqWords.addElement(wd);
   43.58 +      break;
   43.59 +    case optional:
   43.60 +      optWords.addElement(wd);
   43.61 +      break;
   43.62 +    case notwanted:
   43.63 +      notWords.addElement(wd);
   43.64 +      break;
   43.65 +    }
   43.66 +  }
   43.67 +
   43.68 +  public static void processString (String input) {
   43.69 +    int p = 0;
   43.70 +    int pp;
   43.71 +    int startWord;
   43.72 +    int flag;
   43.73 +    String theWord;
   43.74 +    String fieldName;
   43.75 +
   43.76 +
   43.77 +    reqWords = new Vector();
   43.78 +    optWords = new Vector();
   43.79 +    notWords = new Vector();
   43.80 +
   43.81 +    while (true) {       // Loop over all words
   43.82 +
   43.83 +      startWord = p;
   43.84 +      while (p < input.length() && input.charAt(p) != ' ') {
   43.85 +        // Check for quoted phrase
   43.86 +        if (input.charAt(p) == '"') {   // Quote - skip to next or end
   43.87 +          p++;  // skip the actual quote
   43.88 +          while (p < input.length() && input.charAt(p) != '"') {
   43.89 +            p++;
   43.90 +            }
   43.91 +          if (p < input.length()) p++;   // Skip the final quote if found
   43.92 +          }
   43.93 +        else {
   43.94 +          p++;
   43.95 +          }
   43.96 +        }
   43.97 +
   43.98 +      // Got a word. Check for required/not wanted flags (+-)
   43.99 +
  43.100 +      theWord = input.substring(startWord, p);
  43.101 +
  43.102 +      flag = optional;
  43.103 +      fieldName = "";
  43.104 +
  43.105 +      if (theWord.charAt(0) == '+') {
  43.106 +        flag = required;
  43.107 +        theWord = theWord.substring(1);
  43.108 +        }
  43.109 +
  43.110 +      else if (theWord.charAt(0) == '-') {
  43.111 +        flag = notwanted;
  43.112 +        theWord = theWord.substring(1);
  43.113 +        }
  43.114 +
  43.115 +      // Replace * wild cards with %
  43.116 +
  43.117 +      theWord = theWord.replace('*', '%');
  43.118 +
  43.119 +      // Find field indicator ":"
  43.120 +
  43.121 +      pp = theWord.indexOf(":");
  43.122 +      if (pp > 0) {
  43.123 +        fieldName = theWord.substring(0, pp);
  43.124 +        theWord = theWord.substring(pp+1, theWord.length());
  43.125 +        }
  43.126 +
  43.127 +      addWord(theWord, flag, fieldName);
  43.128 +
  43.129 +      p++;
  43.130 +      if (p >= input.length()) break;
  43.131 +      }
  43.132 +    }
  43.133 +
  43.134 +  // Get word gets a single word from the "words" vector,
  43.135 +  //  surrounds it in braces (to avoid reserved words)
  43.136 +  //  and attaches a WITHIN clause if appropriate.
  43.137 +
  43.138 +  private static String getWord (Vector words, int pos) {
  43.139 +
  43.140 +    String ts = "{" + ((WordData) words.elementAt(pos)).text + "}";
  43.141 +    if (((WordData)words.elementAt(pos)).fieldName.length() > 0) {
  43.142 +      ts += " WITHIN " + ((WordData)words.elementAt(pos)).fieldName;
  43.143 +      }
  43.144 +    return ts;
  43.145 +    }
  43.146 +
  43.147 +
  43.148 +  // getQuery returns a formatted, ready-to-run ConText query.
  43.149 +  // In order to satisfy the altavista syntax, we have to generate
  43.150 +  // the following query:
  43.151 +
  43.152 +  //  ( req1 & req2 & ... reqN)
  43.153 +  //   | ( (req1 & req2 & .. reqN)*10*10
  43.154 +  //       & (req1, req2 , ... reqN , opt1 , opt2 , ... optN) )
  43.155 +  //   NOT (not1 | not2 | ... notN)
  43.156 +
  43.157 +  public static String getQuery () {
  43.158 +    String tempString = "";
  43.159 +
  43.160 +    String boolOp = "";   //  AND, OR, NOT operator
  43.161 +    int reqCount;         //  Count of required words
  43.162 +    int optCount;         //  Count of optional words
  43.163 +    int notCount;         //  Count of not wanted words
  43.164 +    int i;                //  Loop control
  43.165 +
  43.166 +    boolOp = "";
  43.167 +    reqCount = reqWords.size();
  43.168 +    optCount = optWords.size();
  43.169 +    notCount = notWords.size();
  43.170 +
  43.171 +    if (reqWords.size() > 0) {
  43.172 +      // Required words - first time
  43.173 +
  43.174 +      tempString = "((";
  43.175 +      for (i = 0; i < reqCount; i++) {
  43.176 +        tempString += boolOp + getWord(reqWords,i);
  43.177 +        boolOp = " & ";
  43.178 +        }
  43.179 +
  43.180 +      if (reqCount > 0 && optCount > 0) {
  43.181 +        tempString += ") | ";
  43.182 +        tempString += "((";
  43.183 +        // Required words - second time (anded with optional words)
  43.184 +        boolOp = "";
  43.185 +        for (i = 0; i < reqCount; i++) {
  43.186 +          tempString += boolOp + getWord(reqWords,i);
  43.187 +          boolOp = " & ";
  43.188 +          }
  43.189 +        tempString += ")*10*10";
  43.190 +
  43.191 +        tempString += " & (";
  43.192 +
  43.193 +        // Required words - third time as part of accumulate
  43.194 +        boolOp = "";
  43.195 +        for (i = 0; i < reqCount; i++) {
  43.196 +          tempString += boolOp + getWord(reqWords,i);
  43.197 +          // tempString += "*2";// Uncomment to double weight of required words
  43.198 +          boolOp = " , ";
  43.199 +          }
  43.200 +        }
  43.201 +      }
  43.202 +    else
  43.203 +      tempString = "(";
  43.204 +
  43.205 +    // Optional words
  43.206 +    // Don't reset boolOp
  43.207 +    for (i = 0; i < optCount; i++) {
  43.208 +      tempString += boolOp + getWord(optWords,i);
  43.209 +      boolOp = " , ";  // Accumulate
  43.210 +      }
  43.211 +
  43.212 +    if (reqCount > 0)
  43.213 +      if (optCount > 0 )
  43.214 +        tempString += ")) )";
  43.215 +      else
  43.216 +        tempString += ")) ";
  43.217 +    else
  43.218 +      tempString += ")";
  43.219 +
  43.220 +    if (tempString.length() > 0) 
  43.221 +      boolOp = " NOT ";
  43.222 +    else
  43.223 +      boolOp = "";
  43.224 +
  43.225 +    for (i = 0; i < notCount; i++) {
  43.226 +      tempString += boolOp + getWord(notWords,i);
  43.227 +      boolOp = " NOT ";
  43.228 +      }
  43.229 +    return tempString;
  43.230 +  }
  43.231 +}
  43.232 +/
  43.233 +
  43.234 +
  43.235 +-- Creation of Schedules
  43.236 +
  43.237 +Prompt Creating Schedules for Index Synchronization AND Optimization
  43.238 +DECLARE
  43.239 +   schedule_id_        NUMBER;
  43.240 +   action_             VARCHAR2(200); 
  43.241 +   description_        VARCHAR2(200);
  43.242 +   execution_date_     DATE := SYSDATE + 30/86400;
  43.243 +   plan_               VARCHAR2(200);
  43.244 +   msg_                VARCHAR2(2000);
  43.245 +   schedule_method_id_ NUMBER;
  43.246 +   start_date_         DATE := SYSDATE;
  43.247 +   dummy_              NUMBER;               
  43.248 +
  43.249 +   CURSOR check_exist IS
  43.250 +   SELECT 1
  43.251 +   FROM BATCH_SCHEDULE_TAB
  43.252 +   WHERE SCHEDULE_NAME = description_;
  43.253 +   	
  43.254 +BEGIN     
  43.255 +   --------------- Sync Index
  43.256 +   action_ := 'Text_Search_Indexer_API.Sync_Index';       
  43.257 +   description_ := 'Synchronize Context Indexes';
  43.258 +   plan_ := 'EVERY 00:10'; 
  43.259 +   
  43.260 +   OPEN check_exist;
  43.261 +   FETCH check_exist INTO dummy_;
  43.262 +   IF (check_exist%NOTFOUND) THEN
  43.263 +      msg_ := Message_SYS.Construct('');
  43.264 +      Message_SYS.Add_Attribute (msg_, 'METHOD_NAME', 'Text_Search_Indexer_API.Sync_Index');
  43.265 +      Message_SYS.Add_Attribute (msg_, 'DESCRIPTION', 'Synchronize Context Indexes');
  43.266 +      Message_SYS.Add_Attribute (msg_, 'MODULE', 'TXTSER');
  43.267 +      Message_SYS.Add_Attribute (msg_, 'SINGLE_EXECUTION_DB', 'FALSE');
  43.268 +      Message_SYS.Add_Attribute (msg_, 'ARGUMENT_TYPE_DB', 'ATTRIBUTE');
  43.269 +      Batch_SYS.Register_Batch_Schedule_Method (schedule_method_id_, msg_);
  43.270 +      Batch_SYS.New_Batch_Schedule (schedule_id_, execution_date_, start_date_, NULL, description_, action_, 'TRUE', plan_);
  43.271 +   END IF;
  43.272 +   CLOSE check_exist;
  43.273 +
  43.274 +   
  43.275 +
  43.276 +   --------------- Optimize Index
  43.277 +   action_ := 'Text_Search_Indexer_API.Optimize_Index';       
  43.278 +   description_ := 'Optimize Context Indexes';
  43.279 +   plan_ := 'WEEKLY ON sun AT 00:00';
  43.280 +   schedule_method_id_ := NULL;
  43.281 +   
  43.282 +   OPEN check_exist;
  43.283 +   FETCH check_exist INTO dummy_;
  43.284 +   IF (check_exist%NOTFOUND) THEN
  43.285 +      msg_ := Message_SYS.Construct('');
  43.286 +      Message_SYS.Add_Attribute (msg_, 'METHOD_NAME', 'Text_Search_Indexer_API.Optimize_Index');
  43.287 +      Message_SYS.Add_Attribute (msg_, 'DESCRIPTION', 'Optimize Context Indexes');
  43.288 +      Message_SYS.Add_Attribute (msg_, 'MODULE', 'TXTSER');
  43.289 +      Message_SYS.Add_Attribute (msg_, 'SINGLE_EXECUTION_DB', 'FALSE');
  43.290 +      Message_SYS.Add_Attribute (msg_, 'ARGUMENT_TYPE_DB', 'ATTRIBUTE');
  43.291 +      Batch_SYS.Register_Batch_Schedule_Method (schedule_method_id_, msg_);
  43.292 +      Batch_SYS.New_Batch_Schedule (schedule_id_, execution_date_, start_date_, NULL, description_, action_, 'TRUE', plan_);
  43.293 +   END IF;
  43.294 +   CLOSE check_exist;
  43.295 +   
  43.296 +   ---------------- Delete old Search Results         
  43.297 +   -- To run Text_Search_API.Delete_Old_Results with a value for save_days that 
  43.298 +   -- isn't default, create a parameters_ string to pass to New_Batch_Schedule.
  43.299 +   action_ := 'Text_Search_API.Delete_Old_Results';       
  43.300 +   description_ := 'Delete old Text Search Results';
  43.301 +   plan_ := 'DAILY AT 00:00';
  43.302 +   schedule_method_id_ := NULL;
  43.303 +  
  43.304 +   OPEN check_exist;
  43.305 +   FETCH check_exist INTO dummy_;
  43.306 +   IF (check_exist%NOTFOUND) THEN
  43.307 +      msg_ := Message_SYS.Construct('');
  43.308 +      Message_SYS.Add_Attribute (msg_, 'METHOD_NAME', 'Text_Search_API.Delete_Old_Results');
  43.309 +      Message_SYS.Add_Attribute (msg_, 'DESCRIPTION', 'Delete old Text Search Results');
  43.310 +      Message_SYS.Add_Attribute (msg_, 'MODULE', 'TXTSER');
  43.311 +      Message_SYS.Add_Attribute (msg_, 'SINGLE_EXECUTION_DB', 'FALSE');
  43.312 +      Message_SYS.Add_Attribute (msg_, 'ARGUMENT_TYPE_DB', 'ATTRIBUTE');
  43.313 +      Batch_SYS.Register_Batch_Schedule_Method (schedule_method_id_, msg_);
  43.314 +      Batch_SYS.New_Batch_Schedule (schedule_id_,execution_date_, start_date_, NULL, description_, action_, 'TRUE', plan_);
  43.315 +   END IF;
  43.316 +   CLOSE check_exist;
  43.317 +
  43.318 + END;
  43.319 +/
  43.320 +
  43.321 +COMMIT;
  43.322 +/
  43.323 +
  43.324 +
  43.325 +
    44.1 --- a/PLSQL/Lexer/test/unit/src/org/netbeans/modules/plsql/lexer/080617_75132_fndbas.cdb	Wed May 15 16:07:35 2013 +0200
    44.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    44.3 @@ -1,70 +0,0 @@
    44.4 ---  --------------------------------------------------------------------------
    44.5 ---  File    :  080617_75132_Fndbas.cdb
    44.6 ---
    44.7 ---  Function: Adds performance indexes to tables related to BI services templates.
    44.8 ---            Old temporary template data is also removed.
    44.9 ---
   44.10 ---  NOTE    : Due to the fact the the customers might have sone or all these
   44.11 ---            indexes but with other names, the creation is done is separate blocks
   44.12 ---            and not in single one.
   44.13 ---
   44.14 ---  --------------------------------------------------------------------------
   44.15 ---  DATE     BY      NOTES
   44.16 ---  ------   -----   ---------------------------------------------------------
   44.17 ---  080617   LALISE  Created.
   44.18 ---  --------------------------------------------------------------------------
   44.19 -
   44.20 -SET SERVEROUTPUT ON SIZE 32000;
   44.21 -
   44.22 -BEGIN
   44.23 -   &AO..Installation_SYS.Log_Detail_Time_Stamp('FNDBAS','080617_75132_FNDBAS.cdb','Timestamp_1');
   44.24 -END;
   44.25 -/
   44.26 -
   44.27 -
   44.28 -PROMPT Add index on column template_id in table Dsod_Tab
   44.29 -DECLARE
   44.30 -   columns_       &AO..Installation_SYS.ColumnTabType ;
   44.31 -   table_name_    VARCHAR2(30) := 'DSOD_TAB';
   44.32 -   index_name_    VARCHAR2(30) := 'DSOD_IX1';
   44.33 -BEGIN
   44.34 -   IF NOT &AO..Installation_SYS.Is_Db_Patch_Registered('FNDBAS', 75132) THEN
   44.35 -      &AO..Installation_SYS.Set_Table_Column (columns_ , 'TEMPLATE_ID');
   44.36 -      &AO..Installation_SYS.Create_Index ( table_name_,
   44.37 -                                      index_name_,
   44.38 -                                      columns_,
   44.39 -                                      'N',
   44.40 -                                      '&FND_INDEX');
   44.41 -      &AO..Installation_SYS.Reset_Column_Table(columns_);
   44.42 -   END IF;
   44.43 -END;
   44.44 -/
   44.45 -
   44.46 -PROMPT Add index on column template_id in table Dsod_Set_Tab
   44.47 -DECLARE
   44.48 -   columns_       &AO..Installation_SYS.ColumnTabType ;
   44.49 -   table_name_    VARCHAR2(30) := 'DSOD_SET_TAB';
   44.50 -   index_name_    VARCHAR2(30) := 'DSOD_SET_IX1';
   44.51 -BEGIN
   44.52 -   IF NOT &AO..Installation_SYS.Is_Db_Patch_Registered('FNDBAS', 75132) THEN
   44.53 -      &AO..Installation_SYS.Set_Table_Column (columns_ , 'TEMPLATE_ID');
   44.54 -      &AO..Installation_SYS.Create_Index ( table_name_,
   44.55 -                                      index_name_,
   44.56 -                                      columns_,
   44.57 -                                      'N',
   44.58 -                                      '&FND_INDEX');
   44.59 -      &AO..Installation_SYS.Reset_Column_Table(columns_);
   44.60 -   END IF;
   44.61 -END;
   44.62 -/
   44.63 -
   44.64 -
   44.65 -BEGIN
   44.66 -   &AO..Installation_SYS.Log_Detail_Time_Stamp('FNDBAS','080617_75132_FNDBAS.cdb','Done');
   44.67 -END;
   44.68 -/
   44.69 -
   44.70 -PROMPT SCRIPT 080617_75132_FNDBAS.cdb COMPLETED
   44.71 -
   44.72 -
   44.73 -SET SERVEROUTPUT OFF
    45.1 --- a/PLSQL/Lexer/test/unit/src/org/netbeans/modules/plsql/lexer/081114_78488_VMOSFA.cdb	Wed May 15 16:07:35 2013 +0200
    45.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    45.3 @@ -1,22 +0,0 @@
    45.4 -------------------------------------------------------------------------------------
    45.5 ---
    45.6 ---  Module  : VMOSFA
    45.7 ---
    45.8 ---  File    : 081114_78488_VMOSFA.cdb
    45.9 ---
   45.10 ---  Date    Sign     History
   45.11 ---  ------  ------   ---------------------------------------------------------------
   45.12 ---  081114  maabse   Bug 78488: Comment is missing on the views VMO_BASE_SYNC_PACKAGE_VIEW and VMO_BASE_SYNC_TRIGGER_VIEW
   45.13 -------------------------------------------------------------------------------------
   45.14 -
   45.15 -PROMPT Starting 081114_78488_VMOSFA.cdb
   45.16 -
   45.17 -----------------------------------------------------------------------------------------------------------------------
   45.18 -
   45.19 -COMMENT ON TABLE VMO_BASE_SYNC_PACKAGE_VIEW IS 'LU=vmobaseview^PROMPT=Internal base view in Sales and Marketing^MODULE=VMOSFA^'
   45.20 -/
   45.21 -COMMENT ON TABLE VMO_BASE_SYNC_TRIGGER_VIEW IS 'LU=vmobaseview^PROMPT=Internal base view in Sales and Marketing^MODULE=VMOSFA^'
   45.22 -/
   45.23 -
   45.24 -PROMPT Finished with 081114_78488_VMOSFA.cdb
   45.25 -
    46.1 --- a/PLSQL/Lexer/test/unit/src/org/netbeans/modules/plsql/lexer/Dictionary.apy	Wed May 15 16:07:35 2013 +0200
    46.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    46.3 @@ -1,3130 +0,0 @@
    46.4 ------------------------------------------------------------------------------
    46.5 ---
    46.6 ---  Package: Dictionary_SYS
    46.7 ---
    46.8 ---  Purpose: This package creates system services for logical unit dictionary.
    46.9 ---           The services includes dictionary searches of various kinds and
   46.10 ---           decoding routines for comment strings.
   46.11 ---
   46.12 ---  IFS/Design Template Version 2.3
   46.13 ---
   46.14 ---  Date    Sign  History
   46.15 ---  ------  ----  -----------------------------------------------------------
   46.16 ---  950823  STLA  Created.
   46.17 ---  950901  STLA  Corrected fetch of enumerated lu list.
   46.18 ---  950901  STLA  Searches methods from user_source instead of sys.argument$.
   46.19 ---  950904  ERFO  Separator fetched from Client_SYS and standard changes.
   46.20 ---  950905  ERFO  Rearrangements in method orders, change headings...
   46.21 ---  950905  ERFO  Changed separator character in Enumerate_Logical_Units_
   46.22 ---                and Enumerate_Data_Items_.
   46.23 ---  950911  STLA  Removed last call to sys.argument$
   46.24 ---  950912  STLA  Added funtion to get item prompt
   46.25 ---  950912  STLA  Modified fetch of views and packages belonging to a LU
   46.26 ---  950915  STLA  Added funtion to get lu view for list of values
   46.27 ---  950926  STLA  Removed picture option from DATATYPE comments
   46.28 ---  950927  STLA  Added method to fetch list of system services
   46.29 ---  950928  STLA  Added method to fetch description for logical unit
   46.30 ---  950928  STLA  Added method to fetch list of domains (eg IIDs)
   46.31 ---  951005  STLA  Added backwards compatibility for Get_Lu_View_
   46.32 ---                Added method Get_Logical_Unit_Ref_Methods_
   46.33 ---  951005  BOIS  Corrected into variable length in Get_View_Logical_Unit_
   46.34 ---  951006  ERFO  Removed method Get_View_Logical_Unit_
   46.35 ---  951006  STLA  Made Generate_<_Comment_ generate dummy comment if
   46.36 ---                database column is not found.
   46.37 ---  951006  STLA  Added foreign key methods to Enumerate_Data_Items_
   46.38 ---                Removed reference to Client_SYS.field_separator_
   46.39 ---  951030  STLA  Corrected Get_Logical_Unit_Ref_Methods_ returning
   46.40 ---                incorrect enumerate syntax.
   46.41 ---  951030  STLA  Added pragma restict_references for att methods
   46.42 ---  951030  STLA  Corrected Enumerate_Domains_ uninitialized variable
   46.43 ---  951030  STLA  Added method Get_Logical_Unit_Method_
   46.44 ---  951030  DAJO  Added method Get_System_Service_Properties_ for
   46.45 ---                system service translation support.
   46.46 ---  951101  ERFO  Added work-around BIGCHAR2 for Enumerate_Data_Items_
   46.47 ---                and Enumerate_Logical_Units_.
   46.48 ---  951208  STLA  Corrected method Get_Data_Item_Properties_ (Bug #283).
   46.49 ---  960110  STLA  Added overloaded version of Get_Logical_Unit_Properties_
   46.50 ---                so that grant/revoke tool can operate efficiently.
   46.51 ---  960111  STLA  Use of 32730 as max length for long VARCHAR2 (Bug #325).
   46.52 ---  960111  ERFO  Added method Activate_Language_Refresh_ to support
   46.53 ---                language setting changes on the fly (Idea #326).
   46.54 ---  960225  ERFO  Added new module property methods to support the module
   46.55 ---                concept within the LU-dictionary (Idea #409).
   46.56 ---  960319  ERFO  Added extra method for logical unit properties to support
   46.57 ---                new features within system service Document_SYS (Idea #463).
   46.58 ---  960325  ERFO  Added methods for internal dictionary storage to support
   46.59 ---                performance needs from IFS/Security (Idea #452).
   46.60 ---  960326  ERFO  Added new parent/child property methods to support relations
   46.61 ---                between parent and children for logical units (Idea #410).
   46.62 ---  960326  ERFO  Add cache techniques in LU-dictionary by sending an extra
   46.63 ---                in parameter which tells if the cached value, stored in a
   46.64 ---                package global may be used or not (Idea #466).
   46.65 ---  960401  ERFO  Split this package into two for deployment reasons.
   46.66 ---  960402  ERFO  Changed cursor in method Get_Logical_Unit_Parent_ as a
   46.67 ---                work-around due to a PL/SQL bug in Oracle 7.1.
   46.68 ---  960404  ERFO  Two new facilities in method Comment_Value_ to support NULL-
   46.69 ---                values in a comment string and to support ambigous key names
   46.70 ---                in a comment sting to support IFS/Info Services.
   46.71 ---  960404  ERFO  Changes to be ORACLE 7.3 compliant (Bug #473).
   46.72 ---  960415  ERFO  Changes in method Enumerate_Data_Items to retrieve package
   46.73 ---                name information by using name conventions instead of using
   46.74 ---                the LU-dictionary for optimal performance in the dialog for
   46.75 ---                Foundation Properties (Idea #491).
   46.76 ---  960429  ERFO  Changes in old method Enumerate_System_Services_ and added
   46.77 ---                PRAGMA-option WNPS where possible.
   46.78 ---  960503  STLA  Make Get_Data_Item_Properties_ do exception when column
   46.79 ---                not found.
   46.80 ---  960506  ERFO  Added dummy parameter to method Rebuild_Dictionary_Storage.
   46.81 ---                Removed use of field separator in beginning of the package
   46.82 ---                and view list columns in Rebuild_Dictionary_Storage and
   46.83 ---                added a special filter for company styled global keys.
   46.84 ---                Added parent child relationship by name convention for
   46.85 ---                IID-domains and ordinary logical units.
   46.86 ---  960508  ERFO  Added implementation method Method_Security_Enabled__ to
   46.87 ---                ensure correct security handle of package methods.
   46.88 ---  960517  ERFO  Fixed BIGCHAR2 problem by changing to VARCHAR2 (Bug #607).
   46.89 ---                Changed representation and logic in dictionary help table
   46.90 ---                to support very big logical units (Bug #611).
   46.91 ---                Added method Init to the list of non-security methods.
   46.92 ---  960528  ERFO  Changed order of close cursor in help method.
   46.93 ---  960610  ERFO  Changes in method Enum_Modules_ not to be case-sensitive
   46.94 ---                in the short name of the module identity (Bug #663).
   46.95 ---  960612  ERFO  Rearrangements and performance improvements in method
   46.96 ---                Rebuild_Dictionary_Storage_ to support all kinds of PL/SQL
   46.97 ---                without depending on too much name conventions in the way of
   46.98 ---                using the language (Bug #664).
   46.99 ---  960819  ERFO  Changes in Activate_Language_Refresh_ to improve performance
  46.100 ---                when searching for translation candidates (Idea #746).
  46.101 ---  960826  ERFO  Increased size of method variable in the implementation
  46.102 ---                of Rebuild_Dictionary_Storage_ (Bug #768).
  46.103 ---  960827  MANY  Changes in Enumerate_System_Services_, now performs a distinct
  46.104 ---                list of services (Bug #769).
  46.105 ---                Changes in Get_System_Service_Properties_, now returns a list
  46.106 ---                of packages (Bug #769).
  46.107 ---  960911  ERFO  Added error handling for occasions when using illegal module
  46.108 ---                name in logical unit source code package header (Idea #790).
  46.109 ---  960916  ERFO  Decreased result set for all cursor against package globals
  46.110 ---                in the view USER_SOURCE for optimal performance (Idea #798).
  46.111 ---  960919  ERFO  Rearrangements in Rebuild_Dictionary_Storage concerning
  46.112 ---                methods without any parameters.
  46.113 ---  961028  MANY  Changes in several locations, including Rebuild_Dictionary_Storage
  46.114 ---                and Get_Logical_Unit_Properties to ensure that reports are treated
  46.115 ---                correctly within the dictionary.
  46.116 ---  961029  ERFO  Added method Get_Logical_Unit_Keys_ to retrieve key names and/or
  46.117 ---                values for a specific logical unit instance (Idea #845).
  46.118 ---  961029  ERFO  Even more performance improvements in LU-dictionary (Idea #798)
  46.119 ---                and adjustments in Rebuild_Dictionary_Storage_.
  46.120 ---  961116  ERFO  Ensure that the conversion methods between db and client
  46.121 ---                names does not result in any exception (Bug #859).
  46.122 ---  961117  ERFO  Removed method Lock__ from being security aware.
  46.123 ---  961118  ERFO  Solve problem with naming conflicts in IFS/Accounting Rules.
  46.124 ---  961125  ERFO  Language change on the fly for client state values and added
  46.125 ---                state methods in function Method_Security_Enabled___.
  46.126 ---  961128  ERFO  Add filter to remove Foundation1 modules from IFS/Security
  46.127 ---                and corrected view problem in Get_Logical_Unit_Ref_Methods.
  46.128 ---  970122  ERFO  Solved problem with timestamp on the security cache after
  46.129 ---                that the Foundation1-modules being removed (Bug #944).
  46.130 ---  970127  ERFO  Illegal OR-statement in Get_Lov_View_ corrected to avoid
  46.131 ---                returning view connected to IFS/Info Services (Bug #957).
  46.132 ---  970212  ERFO  Correction in Get_Lu_Prompt_ to choose the first view
  46.133 ---                found instead of choosing the last one (Bug #977).
  46.134 ---  970213  ERFO  Add refresh of document dictionary info (Bug #985).
  46.135 ---  970403  ERFO  Removed third parameter in method Comment_Value_.
  46.136 ---  970424  ERFO  Changes in method Enumerate_Data_Items_ to include
  46.137 ---                more functions in the pseudo column list (Bug #1035).
  46.138 ---  970507  ERFO  Removed unused methods from the package (ToDo #1107).
  46.139 ---  970725  DOZE  Added method Get_Logical_Unit_Tables_ for history (ToDo #1109).
  46.140 ---  970825  ERFO  Re-installed Foundation1 modules in dictionary cache.
  46.141 ---  970826  ERFO  Solved problem in Rebuild_Dictionary_Storage_ when having
  46.142 ---                LU reference definitions longer than 100 bytes (Bug #1610).
  46.143 ---  971022  ERFO  Refresh only be run as application owner (ToDo #1286).
  46.144 ---                Removed additional refresh of Document_SYS cache.
  46.145 ---  971124  ERFO  Changes in Generate_Function_Comment___ to get correct
  46.146 ---                function data type to Foundation1 Properties (Bug #718).
  46.147 ---  971218  ERFO  String length is changed from 20 to 200 in method
  46.148 ---                Generate_Default_Comment to solve IID limits.
  46.149 ---  971218  ERFO  Added method Get_Data_Source_Properties__ and method
  46.150 ---                Get_Data_Item_Properties__ supporting the new SORT-flag
  46.151 ---                for view order-by clauses (ToDo #1633).
  46.152 ---  980211  DOZE  Added method Enum_Table_Columns_ for IFS/Design (ToDo #1867).
  46.153 ---  980418  ERFO  Correction in Activate_Language_Refresh_ (Bug #2365).
  46.154 ---  980504  ERFO  Oracle8-compliance in exception handle (Bug #2412).
  46.155 ---  980505  MANY  Correction in Activate_Language_Refresh_ (Bug #2365), continue
  46.156 ---                looping when error in specific package until all are finished.
  46.157 ---  980211  DOZE  Changed Enum_Table_Columns_ (Bug #2569).
  46.158 ---  980909  MANY  Changed Activate_Language_Refresh_ to only refresh packages
  46.159 ---                that are actually initiated within the active session (Bug #2685)
  46.160 ---  980915  ERFO  Reinstalled old version of Activate_Language_Refresh (Bug #2685).
  46.161 ---  981013  ERFO  Added method Enumerate_Logical_Units__ and reorganization
  46.162 ---                in Rose-model and model properties (ToDo #2774).
  46.163 ---  981207  DOZE  Removed part of Enumerate_Data_Items_ (Bug #2918)
  46.164 ---  990216  ERFO  Correction in Method_Security_Enabled___ to ensure that no
  46.165 ---                methods will be removed from the security tool (Bug #3141).
  46.166 ---  990222  ERFO  Yoshimura: Changes in Rebuild_Dictionary_Storage_ (ToDo #3160).
  46.167 ---  990428  ERFO  Rebuild performance and logical bug fixes (Bug #3333).
  46.168 ---  990605  ERFO  Change cursor in Activate_Language_Refresh_ (Bug #3411).
  46.169 ---  990805  ERFO  Added column METHOD_LIST2 to include large LU:s (ToDo #3365).
  46.170 ---  990922  ERFO  Added method Exist_Db in cursor in Rebuild (Bug #3590).
  46.171 ---  991005  DOZE  Translation between "Ifs Currency" and "IFS Currency" (Bug #3575)
  46.172 ---  000301  ERFO  Added cursor for pragma-methods in Rebuild-logic (Todo #3846).
  46.173 ---  000405  ERFO  Added resolve-operation for Security 2001 (ToDo #3846).
  46.174 ---  000522  ROOD  Performance improvements in Rebuild_Dictionary_Storage_.  (ToDo #3894).
  46.175 ---  000823  ROOD  Added condition for appowner in Get_Logical_Unit_Tables_ (ToDo #3919).
  46.176 ---  001211  ERFO  Added view FND_TAB_COMMENTS and use it in this package (Bug #18619).
  46.177 ---  001214  ERFO  Removed ACCRUL-specific code in Rebuild-procedure (ToDo #3973).
  46.178 ---  010926  ROOD  Added check not null on inparameters in most get-methods (Bug#22111).
  46.179 ---  011014  ROOD  Made Rebuild_Dictionary_Storage_ ignore case and comments (Bug#25453).
  46.180 ---  011122  ROOD  Added view FND_COL_COMMENTS and used it in this package (Bug #26328).
  46.181 ---  020115  ROOD  Moved views to api-file to avoid installation dependencies (Bug #26328).
  46.182 ---  020527  ROOD  Added group by statements to work around Oracle bug in
  46.183 ---                Rebuild_Dictionary_Storage_ (Bug#29242).
  46.184 ---  020628  ROOD  Corrected usage of General_SYS.Init_Method (ToDo#4087).
  46.185 ---  030212  ROOD  Changed module to FNDBAS (ToDo#4149).
  46.186 ---  030317  ROOD  Replaced General_SYS.Get_Database_Properties with
  46.187 ---                Database_SYS.Get_Database_Properties (ToDo#4143).
  46.188 ---  030502  ROOD  Enabled dictionary information for system services (ToD0#4259).
  46.189 ---  030613  ROOD  Rebuilt the Get_Logical_Unit_Properties_xx methods (ToDo#4162).
  46.190 ---  030623  ROOD  Added public methods for runtime dictionary information support.
  46.191 ---                These methods replace equivalents in Transaction_SYS (ToDo#4162)
  46.192 ---  030819  ROOD  Trimmed whitespaces to the right for methods with pragma
  46.193 ---                in method Rebuild_Dictionary_Storage_ (ToDo#4160).
  46.194 ---  030931  HAAR  Obsoleted method Activate_Language_Refresh_ (ToDo#4305).
  46.195 ---  040407  HAAR  Unicode bulk changes,
  46.196 ---                extended define variable length in Get_Logical_Unit_Keys_ (F1PR408B).
  46.197 ---  040507  HAAR  Added Get_Logical_Unit and Get_Logical_Unit_ (F1PR419).
  46.198 ---  040607  ROOD  Added views for dictionary information (F1PR413).
  46.199 ---  040609  HAAR  Changes in Rebuild_Dictionary_Storage_ due to changed behavior in Oracle10g (Bug#44668).
  46.200 ---  040617  ROOD  Removed obsolete interfaces and restructured the implementation.
  46.201 ---                Moved all methods needed in Design-time to new system service
  46.202 ---                Design_SYS (F1PR413).
  46.203 ---  040907  ROOD  Increased the amount of information stored in the dictionary cache, regarding
  46.204 ---                view comments etc. Used new information in implementation.
  46.205 ---                Changed interface Get_Item_Prompt_, renamed Get_Main_View to Get_Base_View,
  46.206 ---                removed Get_Lov_View_ (F1PR413).
  46.207 ---  040908  ROOD  Increased the length for column_reference and added exception handling
  46.208 ---                for extraction of view column comments (F1PR413).
  46.209 ---  040910  ROOD  Changed default values for when column prompts couldn't be evaluated (F1PR413).
  46.210 ---  040916  ROOD  Avoided partial delete of column values if not necessary and other
  46.211 ---                performance improvements (F1PR413).
  46.212 ---  040923  ROOD  Added refresh mode. Made Get_Base_View_ public (F1PR413).
  46.213 ---  041025  ROOD  Modified date comparison in Rebuild_Dictionary_Storage_ and
  46.214 ---                Check_Dictionary_Storage_ to workaround date problems with Unicode (Call#119047).
  46.215 ---  041221  ROOD  Rewrote major parts of Rebuild_Dictionary_Storage_ to add more information
  46.216 ---                into LU dictionary and to improve performance (F1PR413).
  46.217 ---  041228	ROOD  Moved all views to api-file to indicate that they are public (F1PR413).
  46.218 ---  050105  ROOD  Changed values for view type in dictionary_sys_view_tab (F1PR413).
  46.219 ---  050111  JORA  Added view (dictionary_sys_state_event) for states  (F1PR413).
  46.220 ---  050117  JORA  Added view (dictionary_sys_state_trans) for states transitions (F1PR413).
  46.221 ---  050128  JORA  Moved lu_sub_type from  dictionary_sys_tab
  46.222 ---                to dictionary_sys_package_tab (F1PR413).
  46.223 ---  050310  HAAR  Added printout for LU names longer than 25 characters (F1PR480).
  46.224 ---  050408  JORA  Added assertion for dynamic SQL.  (F1PR481)
  46.225 ---  050513  JORA  Added Rebuild_State_Machine___. (F1PR413D)
  46.226 ---  050520  JORA  Added Get_No_Overloads, Get_No_Arguments, Get_Min_No_Arguments,
  46.227 ---                Get_Max_No_Arguments, Get_Argument_Type  (ESCHND-F1).
  46.228 ---  050706  HAAR  Removed depricated functions moved to Design_SYS (Bug#52284).
  46.229 ---                Enum_Modules_, Get_Logical_Unit_Properties_, Get_Data_Source_Properties_
  46.230 ---                Get_Data_Item_Properties_, Get_Logical_Unit_Method_ and Enum_Table_Columns_.
  46.231 ---  050818  JORA  Improved error msg for Rebuild_State_Machine___.
  46.232 ---  050830  JORA  Improved performace of Rebuild_Dictionary_Storage.
  46.233 ---  051003  HAAR  Changed Enum_Module_Logical_Units_ to include system services (F1PR843).
  46.234 ---  051110  HAAR  Added new argument to Enumerate_Logical_Units__.
  46.235 ---  051110  HAAR  Enum_Module_All_Logical_Units_ and Get_Logical_Unit_Properties2__ added (F1PR843).
  46.236 ---  051111  HAAR  Changed so that the follwoing methods are treated as PRAGMA methods:
  46.237 ---                LOCK__, LANGUAGE_REFRESHED, INIT, FINITE_STATE_DECODE__, ENUMERATE_STATES__,
  46.238 ---                FINITE_STATE_EVENTS__, ENUMERATE_EVENTS__, 'ENUMERATE', 'EXIST', 'EXIST_DB' (F1PR483).
  46.239 ---  051128  HAAR  Removed duplicate state values.
  46.240 ---  060105  UTGULK Annotated Sql injection.
  46.241 ---  060130  HAAR  Value error in Rebuild_Dictionary_Storage_ (Call 131508).
  46.242 ---  060426  HAAR  Added support for query against ROWSTATE instead of STATE when possible (Bug#57581).
  46.243 ---  060428  HAAR  Fixed problem in Rebuild_Dictionary_Storage_ when using Oracle 10.2.0.2 (Bug#57648).
  46.244 ---  070111  HAAR  Reroute xxx_Is_Installed methods to Database_SYS methods during Installation.
  46.245 ---                Added method Set_Installation_Mode (Bug#61829).
  46.246 ---  080208  HAAR  Added update of Cache Management when refreshing the cache (Bug#71136).
  46.247 ---  080304  HAAR  Some changes in refresh of cache (Bug#72156):
  46.248 ---                - Packages with errors or used for test can cause our tools to refresh all the time.
  46.249 ---                - Only consider packages with extension _API, _RPI and _SYS.
  46.250 ---                - Make error texts available in out parameter.
  46.251 ---                - Search Domain packages are not considered during the refresh of the Dictionary cache.
  46.252 ---                - Return errors in CLOB out variable.
  46.253 ---  080901  HASPLK Correcetd method Clientnametodbname to work with 30 characters long View names.
  46.254 ---  090309  HASPLK Added method Get_Installation_Mode (Bug#81092).
  46.255 ---  090312  HAAR  Changed so that Check_Method_From_View___ loops over all packages. (Bug#81246).
  46.256 ---                Changed so that ordering of packages in dictionary_sys_package_tab always is sorted in _API , _RPI, _SYS.
  46.257 ---  100324  UsRa  Changed Rebuild_Dictionary_Storage___ to include a new way to locate the base view of an LU (Bug#89730).
  46.258 ---  100531  ChMu  Changed Refresh_Domain_State_Info___ and Tokenize_Lists___.(Bug#90304-Correction not to Patched into Next Core)  
  46.259 ---  100531  GeGu  Modified Rebuild_Dictionary_Storage___ clear the middle tire cache as well
  46.260 ---  100603  ChMu  Modified Tokenize_Lists___ to remove '||' from domain/state information
  46.261 ------------------------------------------------------------------------------
  46.262 ---
  46.263 ---  Contents:  Property fetching routines for run-time use (private)
  46.264 ---             Naming conversions for client versus database object names
  46.265 ---             Comment decoding routines for LU-dictionary
  46.266 ---             Prompt fetching routines, mainly used for localization
  46.267 ---             Property fetching routines for run-time use (protected)
  46.268 ---             Runtime performance refreshment routines
  46.269 ---             Property fetching routines for design-time use (Depreciated)
  46.270 ---             Public runtime methods for dictionary information support
  46.271 ---
  46.272 ------------------------------------------------------------------------------
  46.273 -
  46.274 -DEFINE MODULE        = FNDBAS
  46.275 -DEFINE SERVICE       = Dictionary
  46.276 -DEFINE PKG           = DICTIONARY_SYS
  46.277 -
  46.278 ------------------------------------------------------------------------------
  46.279 --------------------- PACKAGES FOR METHODS -----------------------------------
  46.280 ------------------------------------------------------------------------------
  46.281 -
  46.282 -PROMPT Creating &PKG implementation
  46.283 -
  46.284 -CREATE OR REPLACE PACKAGE BODY &PKG IS
  46.285 -
  46.286 -TYPE lu_struct_type IS TABLE OF VARCHAR2(32000) INDEX BY BINARY_INTEGER;
  46.287 -TYPE object_array IS TABLE OF VARCHAR2(30) INDEX BY BINARY_INTEGER;
  46.288 -
  46.289 -field_separator_ CONSTANT VARCHAR2(1)     := Client_SYS.field_separator_;
  46.290 -record_separator_ CONSTANT VARCHAR2(1)    := Client_SYS.record_separator_;
  46.291 -text_separator_  CONSTANT VARCHAR2(1)     := Client_SYS.text_separator_;
  46.292 -
  46.293 -installation_     BOOLEAN                 := FALSE;
  46.294 -
  46.295 ------------------------------------------------------------------------------
  46.296 --------------------- SERVICE SPECIFIC IMPLEMENTATION METHOD DECLARATIONS ----
  46.297 ------------------------------------------------------------------------------
  46.298 -
  46.299 -FUNCTION Check_Method_From_View___ (
  46.300 -   view_name_      IN  VARCHAR2,
  46.301 -   method_name_    IN  VARCHAR2 ) RETURN VARCHAR2;
  46.302 -
  46.303 ------------------------------------------------------------------------------
  46.304 --------------------- SERVICE SPECIFIC IMPLEMENTATION METHODS ----------------
  46.305 ------------------------------------------------------------------------------
  46.306 -
  46.307 -FUNCTION Check_Method_From_View___ (
  46.308 -   view_name_      IN  VARCHAR2,
  46.309 -   method_name_    IN  VARCHAR2 ) RETURN VARCHAR2
  46.310 -IS
  46.311 -   lu_name_               VARCHAR2(30);
  46.312 -   package_list_          VARCHAR2(2000);
  46.313 -   package_name_          VARCHAR2(30);
  46.314 -   index_                 NUMBER;
  46.315 -BEGIN
  46.316 -   lu_name_      := Get_Logical_Unit(view_name_, 'VIEW');
  46.317 -   package_list_ := Get_Logical_Unit_Packages__(lu_name_);
  46.318 -   index_        := instr(package_list_, field_separator_);
  46.319 -   WHILE (index_ > 0) LOOP
  46.320 -      package_name_ := Substr(package_list_, 1, index_ - 1);
  46.321 -      package_list_ := Substr(package_list_, index_ + 1);
  46.322 -      IF (Method_Is_Installed(package_name_, method_name_)) THEN
  46.323 -         RETURN(package_name_||'.'||method_name_);
  46.324 -      END IF;
  46.325 -      index_ := instr(package_list_, field_separator_);
  46.326 -   END LOOP;
  46.327 -   RETURN(NULL);
  46.328 -END Check_Method_From_View___;
  46.329 -
  46.330 -FUNCTION Rebuild_Dictionary_Storage___ (
  46.331 -   dummy_        IN NUMBER,
  46.332 -   refresh_mode_ IN VARCHAR2 DEFAULT 'PARTIAL',
  46.333 -   write_clob_   IN BOOLEAN  DEFAULT FALSE ) RETURN CLOB
  46.334 -IS
  46.335 -   refresh_all_      BOOLEAN := refresh_mode_ = 'FULL';
  46.336 -   refresh_views_    BOOLEAN := refresh_mode_ IN ('VIEWS', 'PARTIAL', 'LIGHT');
  46.337 -   refresh_pkgs_     BOOLEAN := refresh_mode_ IN ('PACKAGES', 'PARTIAL', 'LIGHT');
  46.338 -   rebuild_needed_   NUMBER;
  46.339 -   last_update_      DATE;
  46.340 -   start_time_       DATE;
  46.341 -   packages_         object_array;
  46.342 -   methods_          object_array;
  46.343 -   views_            object_array;
  46.344 -
  46.345 -   pkg_lu_name_      VARCHAR2(30);
  46.346 -   pkg_module_       VARCHAR2(6);
  46.347 -   pkg_lu_type_      VARCHAR2(1);
  46.348 -   pkg_lu_sub_type_  VARCHAR2(1);
  46.349 -   pkg_index_        NUMBER;
  46.350 -
  46.351 -   method_           VARCHAR2(100);
  46.352 -
  46.353 -   view_lu_name_     VARCHAR2(30);
  46.354 -   view_module_      VARCHAR2(6);
  46.355 -   view_prompt_      VARCHAR2(200);
  46.356 -   view_comment_     VARCHAR2(2000);
  46.357 -   view_index_       NUMBER;
  46.358 -   base_view_        BOOLEAN;
  46.359 -
  46.360 -   error_text_       CLOB;
  46.361 -
  46.362 -   TYPE domain_states_array IS TABLE OF VARCHAR2(120) INDEX BY BINARY_INTEGER;
  46.363 -   db_values_        domain_states_array;
  46.364 -   client_values_    domain_states_array;
  46.365 -
  46.366 -   TYPE complete_value_array IS TABLE OF dictionary_sys_domain_tab%ROWTYPE INDEX BY BINARY_INTEGER; -- same as dictionary_sys_state_tab...
  46.367 -   complete_values_  complete_value_array;
  46.368 -
  46.369 -   TYPE state_event_array IS TABLE OF dictionary_sys_state_event_tab%ROWTYPE INDEX BY BINARY_INTEGER;
  46.370 -   state_event_values_  state_event_array;
  46.371 -
  46.372 -   CURSOR get_last_update IS
  46.373 -      SELECT MAX(rowversion)
  46.374 -      FROM dictionary_sys_tab;
  46.375 -
  46.376 -   --
  46.377 -   -- LAST_DDL_TIME:
  46.378 -   --    The timestamp for the last DDL change (including GRANT and REVOKE) to the object.
  46.379 -   --    Format is VARCHAR2(19)...
  46.380 -   --
  46.381 -   -- TIMESTAMP
  46.382 -   --    The timestamp for the specification of the object.
  46.383 -   --    Format is DATE.
  46.384 -   --
  46.385 -   -- VIEWS:
  46.386 -   --    TIMESTAMP for a view is not updated unless the code of the view is modified.
  46.387 -   --
  46.388 -   -- PACKAGES:
  46.389 -   --    TIMESTAMP for a packages is updated as soon as the package code is recompiled.
  46.390 -   --
  46.391 -   -- This is the reason why different criteria is used for views and for packages.
  46.392 -   -- It is necessary that views are refreshed after they have been recompiled,
  46.393 -   -- even if the code has not been modified, since the information is in the comments.
  46.394 -   --
  46.395 -
  46.396 -   -- Packages to update (timestamp has changed since last update)
  46.397 -   CURSOR get_pkgs_to_update(last_cache_update_ IN DATE) IS
  46.398 -      SELECT object_name
  46.399 -      FROM user_objects
  46.400 -      WHERE object_type = 'PACKAGE BODY'
  46.401 -      AND substr(object_name, -4) IN ('_API', '_RPI', '_SYS')
  46.402 -      AND timestamp > to_char(last_cache_update_, 'YYYY-MM-DD:HH24:MI:SS')
  46.403 -      ORDER BY substr(object_name, -3); -- The ordering should be API, RPI, SYS
  46.404 -
  46.405 -   -- Views to update (last_ddl_time has changed since last update)
  46.406 -   CURSOR get_views_to_update(last_cache_update_ IN DATE) IS
  46.407 -      SELECT object_name
  46.408 -      FROM user_objects
  46.409 -      WHERE object_type = 'VIEW'
  46.410 -      AND last_ddl_time > last_cache_update_
  46.411 -      ORDER BY created;
  46.412 -
  46.413 -   -- All packages (used when doing a full refresh for performance reasons)
  46.414 -   CURSOR get_all_pkgs IS
  46.415 -      SELECT object_name
  46.416 -      FROM user_objects
  46.417 -      WHERE object_type = 'PACKAGE'
  46.418 -      AND substr(object_name, -4) IN ('_API', '_RPI', '_SYS')
  46.419 -      ORDER BY substr(object_name, -3); -- The ordering should be API, RPI, SYS
  46.420 -
  46.421 -   -- All view (used when doing a full refresh for performance reasons)
  46.422 -   CURSOR get_all_views IS
  46.423 -      SELECT object_name
  46.424 -      FROM user_objects
  46.425 -      WHERE object_type = 'VIEW'
  46.426 -      ORDER BY created;
  46.427 -
  46.428 -   -- Package information
  46.429 -   CURSOR get_package_info(package_name_ IN VARCHAR2) IS
  46.430 -      SELECT substr(text,
  46.431 -                    instr(text,'''')+1,
  46.432 -                    instr(text,'''',instr(text,'''')+1)-instr(text,'''')-1) global,
  46.433 -             upper(substr(ltrim(text), 1, 1)) gtype
  46.434 -      FROM   user_source
  46.435 -      WHERE  type = 'PACKAGE'
  46.436 -      AND    name = package_name_
  46.437 -      AND    (text LIKE '%lu_name_%:=%''%''%' OR text LIKE '%module_%:=%''%''%' OR text LIKE '%service_%:=%''%''%' OR text LIKE '%domain_%:=%''%''%')
  46.438 -      AND    text NOT LIKE '--%'
  46.439 -      AND    text NOT LIKE '%/%*%'
  46.440 -      AND    text NOT LIKE '%*%/'
  46.441 -      AND    line BETWEEN 2 AND 6
  46.442 -      ORDER BY line;
  46.443 -
  46.444 -   -- View information
  46.445 -   CURSOR get_view_comments(view_name_ IN VARCHAR2) IS
  46.446 -      SELECT comments
  46.447 -      FROM   fnd_tab_comments
  46.448 -      WHERE  table_type = 'VIEW'
  46.449 -      AND    table_name = view_name_;
  46.450 -
  46.451 -   PROCEDURE Write_Error_Text___ (
  46.452 -      clob_     IN OUT NOCOPY CLOB,
  46.453 -      text_     IN            VARCHAR2,
  46.454 -      new_line_ IN            BOOLEAN DEFAULT TRUE )
  46.455 -   IS
  46.456 -   BEGIN
  46.457 -      IF write_clob_ THEN
  46.458 -         IF new_line_ THEN
  46.459 -            clob_ := clob_ || chr(10) || text_;
  46.460 -         ELSE
  46.461 -            clob_ := clob_ || text_;
  46.462 -         END IF;
  46.463 -      ELSE
  46.464 -         IF new_line_ THEN
  46.465 -            dbms_output.put_line(text_);
  46.466 -         ELSE
  46.467 -            dbms_output.put(text_);
  46.468 -         END IF;
  46.469 -      END IF;
  46.470 -   END Write_Error_Text___;
  46.471 -
  46.472 -
  46.473 -   PROCEDURE Get_Next_Pkg_Index___ (
  46.474 -      lu_name_        IN VARCHAR2,
  46.475 -      next_pkg_index_ OUT NUMBER )
  46.476 -   IS
  46.477 -      CURSOR next_index IS
  46.478 -         SELECT nvl(MAX(package_index), 0) + 1
  46.479 -         FROM dictionary_sys_package_tab
  46.480 -         WHERE lu_name = lu_name_;
  46.481 -   BEGIN
  46.482 -      OPEN next_index;
  46.483 -      FETCH next_index INTO next_pkg_index_;
  46.484 -      CLOSE next_index;
  46.485 -   END Get_Next_Pkg_Index___;
  46.486 -
  46.487 -   PROCEDURE Get_Next_View_Index___ (
  46.488 -      lu_name_         IN VARCHAR2,
  46.489 -      next_view_index_ OUT NUMBER )
  46.490 -   IS
  46.491 -      CURSOR next_index IS
  46.492 -         SELECT nvl(MAX(view_index), 0) + 1
  46.493 -         FROM dictionary_sys_view_tab
  46.494 -         WHERE lu_name = lu_name_;
  46.495 -   BEGIN
  46.496 -      OPEN next_index;
  46.497 -      FETCH next_index INTO next_view_index_;
  46.498 -      CLOSE next_index;
  46.499 -   END Get_Next_View_Index___;
  46.500 -
  46.501 -   PROCEDURE Handle_Possible_State_Pkg___(
  46.502 -      lu_name_     IN VARCHAR2,
  46.503 -      method_name_ IN VARCHAR2 )
  46.504 -   IS
  46.505 -   BEGIN
  46.506 -      IF method_name_ = 'Finite_State_Events__' THEN
  46.507 -         -- Set global variable
  46.508 -         pkg_lu_sub_type_ := 'S';
  46.509 -         -- Update main dictionary information
  46.510 -         UPDATE dictionary_sys_package_tab
  46.511 -            SET package_type = pkg_lu_sub_type_
  46.512 -            WHERE lu_name = lu_name_;
  46.513 -      END IF;
  46.514 -   END Handle_Possible_State_Pkg___;
  46.515 -
  46.516 -   PROCEDURE Fill_List_Array___ (
  46.517 -      info_type_       IN VARCHAR2,
  46.518 -      lu_name_         IN VARCHAR2,
  46.519 -      package_name_    IN VARCHAR2,
  46.520 -      db_values_       IN OUT domain_states_array,
  46.521 -      client_values_   IN OUT domain_states_array,
  46.522 -      complete_values_ OUT complete_value_array )
  46.523 -   IS
  46.524 -      stmt_   VARCHAR2(200);
  46.525 -      error_  BOOLEAN := FALSE;
  46.526 -      domain_ BOOLEAN := info_type_ = 'domain';
  46.527 -      client_count_ NUMBER;
  46.528 -      db_count_     NUMBER;
  46.529 -   BEGIN
  46.530 -      -- Check for incorrectness in number of values and remove redundant information if it occurs
  46.531 -      IF db_values_.COUNT != client_values_.COUNT THEN
  46.532 -         client_count_ := client_values_.COUNT;
  46.533 -         db_count_ := db_values_.COUNT;
  46.534 -         IF db_count_ > client_count_ THEN
  46.535 -            -- Missing client values
  46.536 -            Assert_SYS.Assert_Is_Package(package_name_);
  46.537 -            stmt_ := 'BEGIN :client_value_ := '||package_name_||'.Decode(:db_value_); END;';
  46.538 -            FOR i IN Nvl(db_values_.FIRST, 0)..Nvl(db_values_.LAST, -1) LOOP
  46.539 -               -- Try to find more values by calling standard interfaces for domains,
  46.540 -               -- else fill out the array if it is still incomplete...
  46.541 -               IF domain_ THEN
  46.542 -                  BEGIN
  46.543 -                     -- ifs_assert_safe utgulk 20060105
  46.544 -                     EXECUTE IMMEDIATE stmt_ USING OUT client_values_(i), IN db_values_(i);
  46.545 -                  EXCEPTION
  46.546 -                     WHEN OTHERS THEN
  46.547 -                        client_values_(i) := 'Value not defined!';
  46.548 -                        error_ := TRUE;
  46.549 -                  END;
  46.550 -               ELSE
  46.551 -                  -- Can't find the values for other types than domains...
  46.552 -                  client_values_(i) := 'Value not defined!';
  46.553 -                  error_ := TRUE;
  46.554 -               END IF;
  46.555 -
  46.556 -            END LOOP;
  46.557 -         ELSE
  46.558 -            -- Missing db values
  46.559 -            Assert_SYS.Assert_Is_Package(package_name_);
  46.560 -            stmt_ := 'BEGIN :db_value_ := '||package_name_||'.Encode(:client_value_); END;';
  46.561 -            FOR i IN Nvl(client_values_.FIRST,0)..Nvl(client_values_.LAST,-1) LOOP
  46.562 -               -- Try to find more values by calling standard interfaces for domains,
  46.563 -               -- else fill out the array if it is still incomplete...
  46.564 -               IF domain_ THEN
  46.565 -                  BEGIN
  46.566 -                     -- ifs_assert_safe utgulk 20060105
  46.567 -                     EXECUTE IMMEDIATE stmt_ USING OUT db_values_(i), IN client_values_(i);
  46.568 -                  EXCEPTION
  46.569 -                     WHEN OTHERS THEN
  46.570 -                        db_values_(i) := 'VALUE NOT DEFINED!';
  46.571 -                        error_ := TRUE;
  46.572 -                  END;
  46.573 -               ELSE
  46.574 -                  -- Can't find the values for other types than domains...
  46.575 -                  db_values_(i) := 'VALUE NOT DEFINED!';
  46.576 -                  error_ := TRUE;
  46.577 -               END IF;
  46.578 -            END LOOP;
  46.579 -         END IF;
  46.580 -         -- Log information if values could not be determined...
  46.581 -         IF error_ THEN
  46.582 -            Write_Error_Text___ (error_text_, '   '||Rpad(Get_Logical_Unit_Module(lu_name_),6)||':Inconsistency between client values and db values for '||info_type_||' package '||package_name_||'!', FALSE);
  46.583 -            Write_Error_Text___ (error_text_, '          '||to_char(db_count_)||' db values and '||to_char(client_count_)||' client values was found!');
  46.584 -         END IF;
  46.585 -      END IF;
  46.586 -      FOR i IN Nvl(db_values_.FIRST,0)..Nvl(db_values_.LAST,-1) LOOP
  46.587 -         complete_values_(i).lu_name      := lu_name_;
  46.588 -         complete_values_(i).package_name := package_name_;
  46.589 -         complete_values_(i).db_value     := db_values_(i);
  46.590 -         complete_values_(i).client_value := client_values_(i);
  46.591 -         complete_values_(i).rowversion   := SYSDATE;
  46.592 -      END LOOP;
  46.593 -   END Fill_List_Array___;
  46.594 -
  46.595 -   PROCEDURE Rebuild_State_Machine___(full_mode_ BOOLEAN DEFAULT TRUE) IS
  46.596 -
  46.597 -      last_update_ DATE DEFAULT NULL;
  46.598 -
  46.599 -      CURSOR state_mach IS
  46.600 -         SELECT decode(upper(regexp_substr(a.text,'[[:alpha:]]+_')) ,
  46.601 -                   'STATE_','START',
  46.602 -                   'EVENT_','EVENT',
  46.603 -                   'FINITE_','END',
  46.604 -                   NULL) TYPE,
  46.605 -               regexp_substr(a.text,'''[[:alpha:]|[:space:]]+''') WHAT,
  46.606 -               a.NAME PACKAGE
  46.607 -         FROM USER_SOURCE A, USER_OBJECTS O
  46.608 -         WHERE EXISTS (SELECT 1 FROM DICTIONARY_SYS_STATE_TAB D WHERE D.PACKAGE_NAME = O.OBJECT_NAME)
  46.609 -           AND A.NAME = O.OBJECT_NAME
  46.610 -           AND A.TYPE = 'PACKAGE BODY'
  46.611 -           AND O.OBJECT_TYPE   = 'PACKAGE'
  46.612 -           AND TO_DATE(timestamp,'RRRR-MM-DD:HH24:MI:SS') > last_update_
  46.613 -           AND regexp_like(a.text,'(state_[[:space:]]*(=|(IS)))|(event_[[:space:]]*(=|(IS)))|(Finite_State_Set___\(rec_,)','i')
  46.614 -         ORDER BY a.name, a.line ASC;
  46.615 -
  46.616 -      TYPE state_machine_type IS TABLE OF state_mach%ROWTYPE INDEX BY PLS_INTEGER;
  46.617 -      TYPE dic_state_mach_type IS TABLE OF dictionary_sys_state_mach_tab%ROWTYPE INDEX BY BINARY_INTEGER;
  46.618 -
  46.619 -      bulk_errors   EXCEPTION;
  46.620 -      PRAGMA EXCEPTION_INIT(bulk_errors, -24381);
  46.621 -
  46.622 -      state_machine     state_machine_type;
  46.623 -      model             dic_state_mach_type;
  46.624 -      start_mode        VARCHAR2(30);
  46.625 -      in_state_transistion  BOOLEAN := FALSE;
  46.626 -      error_count_          NUMBER;
  46.627 -      j                 PLS_INTEGER;
  46.628 -      i                 PLS_INTEGER;
  46.629 -      position_      NUMBER;
  46.630 -
  46.631 -      FUNCTION Get_Lu_Name_(
  46.632 -            package_name_ VARCHAR2) RETURN VARCHAR2
  46.633 -         IS
  46.634 -            tmp_ VARCHAR2(60) DEFAULT NULL;
  46.635 -         BEGIN
  46.636 -            SELECT lu_name INTO tmp_
  46.637 -               FROM dictionary_sys_package_tab
  46.638 -               WHERE package_name= package_name_;
  46.639 -            RETURN tmp_;
  46.640 -         EXCEPTION
  46.641 -            WHEN OTHERS THEN
  46.642 -               Write_Error_Text___ (error_text_, '          Failed to find LU name for package '||package_name_);
  46.643 -               RETURN NULL;
  46.644 -         END get_lu_name_;
  46.645 -
  46.646 -         FUNCTION trim_str(str_ VARCHAR2) RETURN VARCHAR2
  46.647 -         IS
  46.648 -         BEGIN
  46.649 -              RETURN SUBSTR(str_,2, length(str_)-2);
  46.650 -         END;
  46.651 -
  46.652 -
  46.653 -   BEGIN
  46.654 -      IF full_mode_ THEN
  46.655 -         last_update_:= SYSDATE-1000;
  46.656 -      ELSE
  46.657 -         SELECT NVL(MAX(updated),SYSDATE-1000) INTO last_update_ FROM dictionary_sys_state_mach_tab;
  46.658 -      END IF;
  46.659 -      OPEN state_mach;
  46.660 -      FETCH state_mach BULK COLLECT INTO state_machine;
  46.661 -      CLOSE state_mach;
  46.662 -      j := 1;
  46.663 -      i:=2;
  46.664 -      WHILE i < state_machine.LAST  LOOP
  46.665 -         IF state_machine(i-1).type ='START' AND state_machine(i).type = 'EVENT' THEN
  46.666 -            in_state_transistion:= TRUE;
  46.667 -            start_mode:=trim_str(state_machine(i-1).what);
  46.668 -             WHILE  in_state_transistion AND i+1 <= state_machine.LAST LOOP
  46.669 -               IF state_machine(i).type='EVENT' AND
  46.670 -                  state_machine(i+1).type='END' AND
  46.671 -                  trim_str(state_machine(i).what) IS NOT NULL THEN
  46.672 -                  model(j).start_state:=start_mode;
  46.673 -                  model(j).event:=trim_str(state_machine(i).what);
  46.674 -                  model(j).end_state:=trim_str(state_machine(i+1).what);
  46.675 -                  model(j).package_name:=state_machine(i).PACKAGE;
  46.676 -                  model(j).lu_name:= get_lu_name_(state_machine(i).PACKAGE);
  46.677 -                  model(j).updated:=SYSDATE;
  46.678 -                  model(j).rowversion:=SYSDATE;
  46.679 -                  i:=i+2;
  46.680 -                  j:=j+1;
  46.681 -               ELSIF state_machine(i).type!='START' AND i < state_machine.LAST THEN
  46.682 -                  i:=i+1;
  46.683 -               ELSE
  46.684 -                  in_state_transistion:=FALSE;
  46.685 -                  i:=i+1;
  46.686 -               END IF;
  46.687 -            END LOOP;
  46.688 -         ELSE
  46.689 -            i:=i+1;
  46.690 -         END IF;
  46.691 -      END LOOP;
  46.692 ---  This line only used when debugging
  46.693 ---      FOR k IN model.FIRST..model.LAST LOOP
  46.694 ---          Write_Error_Text___ (error_text_, model(k).package_name||':'||model(k).start_state||'->'||model(k).event||'->'||model(k).end_state);
  46.695 ---      END LOOP;
  46.696 -       BEGIN
  46.697 -            -- ifs_assert_safe pemase 20060215
  46.698 -            EXECUTE IMMEDIATE 'truncate table dictionary_sys_state_mach_tab';
  46.699 -            Write_Error_Text___ (error_text_, '   -------------------------------------------------------------');
  46.700 -            Write_Error_Text___ (error_text_, '   Dictionary Cache is being updated with '||model.count ||' state machine entrie(s).');
  46.701 -            Write_Error_Text___ (error_text_, '   -------------------------------------------------------------');
  46.702 -            FORALL k IN NVL(model.FIRST,0)..NVL(model.LAST,-1) SAVE EXCEPTIONS
  46.703 -               INSERT INTO dictionary_sys_state_mach_tab VALUES model(k);
  46.704 -         EXCEPTION
  46.705 -            WHEN bulk_errors THEN
  46.706 -               error_count_ := SQL%BULK_EXCEPTIONS.COUNT;
  46.707 -               Write_Error_Text___ (error_text_, '   '||to_char(error_count_)||' problem(s) when inserting dictionary state machine information.');
  46.708 -               FOR i IN 1..error_count_ LOOP
  46.709 -                  position_ := SQL%BULK_EXCEPTIONS(i).ERROR_INDEX;
  46.710 ---                  Write_Error_Text___ (error_text_, '   Position number '||to_char(position_));
  46.711 -                  Write_Error_Text___ (error_text_, '   '||Rpad(Get_Logical_Unit_Module(model(position_).lu_name),6)||':Error ' || SQLERRM(-SQL%BULK_EXCEPTIONS(i).ERROR_CODE)||', ', FALSE);
  46.712 -                  Write_Error_Text___ (error_text_, 'lu_name='||model(position_).lu_name||', ', FALSE);
  46.713 -                  Write_Error_Text___ (error_text_, 'package_name='||model(position_).package_name||', ', FALSE);
  46.714 -                  Write_Error_Text___ (error_text_, 'start_state='||model(position_).start_state||', ', FALSE);
  46.715 -                  Write_Error_Text___ (error_text_, 'event='||model(position_).event||', ', FALSE);
  46.716 -                  Write_Error_Text___ (error_text_, 'end_state='||model(position_).end_state);
  46.717 -               END LOOP;
  46.718 -         END;
  46.719 -   EXCEPTION
  46.720 -      WHEN OTHERS THEN
  46.721 -           Write_Error_Text___ (error_text_, '   '||dbms_utility.format_error_backtrace);
  46.722 -   END  Rebuild_State_Machine___;
  46.723 -
  46.724 -
  46.725 -   PROCEDURE Rebuild_All_State_Event___(full_mode_ BOOLEAN DEFAULT TRUE) IS
  46.726 -
  46.727 -      last_update_ DATE DEFAULT NULL;
  46.728 -
  46.729 -      CURSOR  get_events IS
  46.730 -         SELECT regexp_substr(text,'([[:alpha:]]+\^){1,}') event, name
  46.731 -         FROM USER_SOURCE A, USER_OBJECTS O
  46.732 -         WHERE EXISTS (SELECT 1 FROM DICTIONARY_SYS_STATE_TAB D WHERE D.PACKAGE_NAME = O.OBJECT_NAME)
  46.733 -           AND A.NAME = O.OBJECT_NAME
  46.734 -           AND A.TYPE = 'PACKAGE BODY'
  46.735 -           AND O.OBJECT_TYPE   = 'PACKAGE'
  46.736 -           AND TO_DATE(timestamp,'RRRR-MM-DD:HH24:MI:SS') > last_update_
  46.737 -           AND regexp_like(text, '^[[:space:]]{0,}db_events_[[:space:]]{0,}:=');
  46.738 -
  46.739 -      TYPE state_array IS TABLE OF get_events%ROWTYPE INDEX BY BINARY_INTEGER;
  46.740 -      TYPE event_array IS TABLE OF VARCHAR(40) INDEX BY PLS_INTEGER;
  46.741 -      state_events_        state_array ;
  46.742 -      state_event_values_  state_event_array;
  46.743 -      event_array_         event_array;
  46.744 -
  46.745 -      stmt_          VARCHAR2(100);
  46.746 -      match_         INTEGER;
  46.747 -      counter_       INTEGER;
  46.748 -      event_idx_     INTEGER;
  46.749 -      event_         VARCHAR2(32);
  46.750 -      error_count_   NUMBER;
  46.751 -      position_      NUMBER;
  46.752 -      dup_event_val_ BOOLEAN;
  46.753 -
  46.754 -
  46.755 -      bulk_errors   EXCEPTION;
  46.756 -      PRAGMA EXCEPTION_INIT(bulk_errors, -24381);
  46.757 -
  46.758 -      FUNCTION Get_Lu_Name_(
  46.759 -         package_name_ VARCHAR2) RETURN VARCHAR2
  46.760 -      IS
  46.761 -         tmp_ VARCHAR2(60) DEFAULT NULL;
  46.762 -      BEGIN
  46.763 -         SELECT lu_name INTO tmp_
  46.764 -            FROM dictionary_sys_package_tab
  46.765 -            WHERE package_name= package_name_;
  46.766 -         RETURN tmp_;
  46.767 -      EXCEPTION
  46.768 -         WHEN OTHERS THEN
  46.769 -            Write_Error_Text___ (error_text_, '          Failed to find LU name for package '||package_name_);
  46.770 -            RETURN NULL;
  46.771 -      END get_lu_name_;
  46.772 -
  46.773 -   BEGIN
  46.774 -
  46.775 -      IF full_mode_ THEN
  46.776 -         last_update_:= SYSDATE-1000;
  46.777 -      ELSE
  46.778 -         SELECT NVL(MAX(updated),SYSDATE-1000) INTO last_update_ FROM dictionary_sys_state_mach_tab;
  46.779 -      END IF;
  46.780 -
  46.781 -      OPEN get_events;
  46.782 -      FETCH get_events BULK COLLECT INTO state_events_;
  46.783 -      IF SQL%NOTFOUND THEN
  46.784 -         Write_Error_Text___ (error_text_, '   No state events found.');
  46.785 -         CLOSE get_events;
  46.786 -         RETURN;
  46.787 -      ELSE
  46.788 -         BEGIN
  46.789 -            -- ifs_assert_safe pemase 20060215
  46.790 -            EXECUTE IMMEDIATE 'TRUNCATE TABLE dictionary_sys_state_event_tab';
  46.791 -         EXCEPTION
  46.792 -            WHEN OTHERS THEN
  46.793 -               Write_Error_Text___ (error_text_, '   Failed to truncate dictionary_sys_state_event_tab.');
  46.794 -               Write_Error_Text___ (error_text_, '   '||dbms_utility.format_error_backtrace);
  46.795 -               RETURN;
  46.796 -         END;
  46.797 -      END IF;
  46.798 -      CLOSE get_events;
  46.799 -      Write_Error_Text___ (error_text_, '   -------------------------------------------------------------');
  46.800 -      Write_Error_Text___ (error_text_, '   Dictionary Cache is fetching State Events');
  46.801 -      Write_Error_Text___ (error_text_, '   -------------------------------------------------------------');
  46.802 -      counter_:=1;
  46.803 -      FOR i IN Nvl(state_events_.FIRST,0)..Nvl(state_events_.LAST,-1) LOOP
  46.804 -         match_:=1;
  46.805 -         event_idx_:=1;
  46.806 -         event_array_.DELETE;
  46.807 -         LOOP
  46.808 -            dup_event_val_:= FALSE;
  46.809 -            event_:=REGEXP_SUBSTR(state_events_(i).event,'([[:alpha:]|[:digit:]|[:blank:]]+\^)', 1, match_);
  46.810 -            EXIT WHEN event_ IS NULL;
  46.811 -            IF event_idx_!=1 THEN
  46.812 -               dup_event_val_:= FALSE;
  46.813 -               FOR j IN Nvl(event_array_.FIRST,0)..Nvl(event_array_.LAST,-1) LOOP
  46.814 -                  IF event_array_(j)=event_ THEN
  46.815 -                     dup_event_val_:= TRUE;
  46.816 -                     EXIT;
  46.817 -                  END IF;
  46.818 -               END LOOP;
  46.819 -            END IF;
  46.820 -            IF NOT dup_event_val_ THEN
  46.821 -               event_array_(event_idx_):=event_;
  46.822 -               state_event_values_(counter_).lu_name:=get_lu_name_(state_events_(i).name);
  46.823 -               state_event_values_(counter_).package_name:=state_events_(i).name;
  46.824 -               state_event_values_(counter_).event:=substr(event_,1,length(event_)-1);
  46.825 -               state_event_values_(counter_).rowversion:=SYSDATE;
  46.826 -               counter_:=counter_+1;
  46.827 -               event_idx_:=event_idx_+1;
  46.828 ---            ELSE
  46.829 ---               Write_Error_Text___ (error_text_, '   '||Rpad(Get_Logical_Unit_Module(get_lu_name_(state_events_(i).name)),6)||':Skipping duplicate event ('||substr(event_,1,length(event_)-1)||') for LU:'||get_lu_name_(state_events_(i).name));
  46.830 -            END IF;
  46.831 -            match_:=match_+1;
  46.832 -         END LOOP;
  46.833 -      END LOOP;
  46.834 -
  46.835 -      BEGIN
  46.836 -         Write_Error_Text___ (error_text_, '   -------------------------------------------------------------');
  46.837 -         Write_Error_Text___ (error_text_, '   Dictionary Cache is being updated with '||state_event_values_.count ||' State Events');
  46.838 -         Write_Error_Text___ (error_text_, '   -------------------------------------------------------------');
  46.839 -         FORALL j IN Nvl(state_event_values_.FIRST, 0)..Nvl(state_event_values_.LAST, -1) SAVE EXCEPTIONS
  46.840 -            INSERT INTO dictionary_sys_state_event_tab VALUES state_event_values_(j);
  46.841 -      EXCEPTION
  46.842 -         WHEN bulk_errors THEN
  46.843 -            error_count_ := SQL%BULK_EXCEPTIONS.COUNT;
  46.844 -            Write_Error_Text___ (error_text_, '   '||to_char(error_count_)||' problem(s) when inserting dictionary state event information.');
  46.845 -            FOR i IN 1..error_count_ LOOP
  46.846 -               position_ := SQL%BULK_EXCEPTIONS(i).ERROR_INDEX;
  46.847 ---               Write_Error_Text___ (error_text_, '   Position number '||to_char(position_));
  46.848 -               Write_Error_Text___ (error_text_, '   '||Rpad(Get_Logical_Unit_Module(state_event_values_(position_).lu_name),6)||':Error ' || SQLERRM(-SQL%BULK_EXCEPTIONS(i).ERROR_CODE)||', ', FALSE);
  46.849 -               Write_Error_Text___ (error_text_, 'lu_name='||nvl(state_event_values_(position_).lu_name, 'NULL')||', ', FALSE);
  46.850 -               Write_Error_Text___ (error_text_, 'package_name='||nvl(state_event_values_(position_).package_name, 'NULL')||', ', FALSE);
  46.851 -               Write_Error_Text___ (error_text_, 'event='||nvl(state_event_values_(position_).event, 'NULL'));
  46.852 -            END LOOP;
  46.853 -         WHEN OTHERS THEN
  46.854 -            Write_Error_Text___ (error_text_, '   Failed to truncate dictionary_sys_state_event_tab.');
  46.855 -            Write_Error_Text___ (error_text_, '   '||dbms_utility.format_error_backtrace);
  46.856 -      END;
  46.857 -
  46.858 -   EXCEPTION
  46.859 -      WHEN OTHERS THEN
  46.860 -         Write_Error_Text___ (error_text_, '   Failed to rebuild dictionary_sys_state_event_tab.');
  46.861 -         Write_Error_Text___ (error_text_, '   '||dbms_utility.format_error_backtrace);
  46.862 -   END Rebuild_All_State_Event___;
  46.863 -
  46.864 -
  46.865 -
  46.866 -   PROCEDURE Rebuild_State_Transitions___(full_mode_ BOOLEAN DEFAULT TRUE) IS
  46.867 -
  46.868 -      last_update_ DATE DEFAULT NULL;
  46.869 -
  46.870 -      match_         INTEGER;
  46.871 -      counter_       INTEGER;
  46.872 -      allowed_event_ VARCHAR2(32);
  46.873 -      state_trans_   VARCHAR2(130);
  46.874 -      error_count_   NUMBER;
  46.875 -      position_      NUMBER;
  46.876 -
  46.877 -      bulk_errors   EXCEPTION;
  46.878 -      PRAGMA EXCEPTION_INIT(bulk_errors, -24381);
  46.879 -
  46.880 -      CURSOR get_state_events_
  46.881 -      IS
  46.882 -      SELECT lu_name, package_name, db_state
  46.883 -         FROM dictionary_sys_state_tab d, user_objects o
  46.884 -         WHERE d.package_name = o.object_name
  46.885 -         AND   o.object_type = 'PACKAGE BODY'
  46.886 -           AND TO_DATE(o.timestamp,'RRRR-MM-DD:HH24:MI:SS') > last_update_;
  46.887 -
  46.888 -      TYPE state_array IS TABLE OF get_state_events_%ROWTYPE INDEX BY BINARY_INTEGER;
  46.889 -      state_list_      state_array;
  46.890 -
  46.891 -      TYPE state_trans_array IS TABLE OF dictionary_sys_state_trans_tab%ROWTYPE INDEX BY BINARY_INTEGER;
  46.892 -      state_trans_values_  state_trans_array;
  46.893 -
  46.894 -      FUNCTION Get_Allowed_State_Trans (
  46.895 -                                         pkg_name_ VARCHAR2,
  46.896 -                                         state_ VARCHAR2)
  46.897 -         RETURN VARCHAR2
  46.898 -         IS
  46.899 -         stmt_    VARCHAR2(200);
  46.900 -         events_  VARCHAR2(200);
  46.901 -      BEGIN
  46.902 -         Assert_SYS.Assert_Is_Package(pkg_name_);
  46.903 -         stmt_:='BEGIN :events:='||pkg_name_||'.Finite_State_Events__(:state); END;';
  46.904 -         -- ifs_assert_safe utgulk 20060105
  46.905 -         EXECUTE IMMEDIATE stmt_ USING IN OUT   events_, state_ ;
  46.906 -         RETURN events_;
  46.907 -      EXCEPTION
  46.908 -         WHEN OTHERS THEN
  46.909 -            Write_Error_Text___ (error_text_, '   '||Rpad(Get_Logical_Unit_Module(Get_Logical_Unit(pkg_name_, 'PACKAGE')),6)||':Failed to fetch events for package '||pkg_name_||' and state '||state_);
  46.910 -            RETURN NULL;
  46.911 -      END Get_Allowed_State_Trans;
  46.912 -
  46.913 -   BEGIN
  46.914 -
  46.915 -      IF full_mode_ THEN
  46.916 -         last_update_:= SYSDATE-1000;
  46.917 -      ELSE
  46.918 -         SELECT NVL(MAX(to_date(timestamp, 'RRRR-MM-DD:HH24:MI:SS')),SYSDATE-1000) INTO last_update_
  46.919 -            FROM dictionary_sys_state_tab d, user_objects o
  46.920 -            WHERE d.package_name = o.object_name
  46.921 -            AND o.object_type = 'PACKAGE BODY';
  46.922 -      END IF;
  46.923 -
  46.924 -      OPEN get_state_events_;
  46.925 -      FETCH get_state_events_ BULK COLLECT INTO state_list_;
  46.926 -      IF SQL%NOTFOUND THEN
  46.927 -         Write_Error_Text___ (error_text_, '   No state transitions found.');
  46.928 -         CLOSE get_state_events_;
  46.929 -         RETURN;
  46.930 -      ELSE
  46.931 -         BEGIN
  46.932 -            -- ifs_assert_safe pemase 20060215
  46.933 -            EXECUTE IMMEDIATE 'TRUNCATE TABLE dictionary_sys_state_trans_tab';
  46.934 -         EXCEPTION
  46.935 -            WHEN OTHERS THEN
  46.936 -               Write_Error_Text___ (error_text_, '   Failed to truncate dictionary_sys_state_trans_tab.');
  46.937 -               Write_Error_Text___ (error_text_, '   '||dbms_utility.format_error_backtrace);
  46.938 -               RETURN;
  46.939 -         END;
  46.940 -      END IF;
  46.941 -      CLOSE get_state_events_;
  46.942 -      counter_:=1;
  46.943 -      FOR i IN Nvl(state_list_.FIRST,0)..Nvl(state_list_.LAST,-1) LOOP
  46.944 -         state_trans_:=Get_Allowed_State_Trans(state_list_(i).package_name, state_list_(i).db_state);
  46.945 -         match_:=1;
  46.946 -         LOOP
  46.947 -            allowed_event_:=REGEXP_SUBSTR(state_trans_,'([[:alpha:]|[:digit:]|[:blank:]]+\^)', 1, match_);
  46.948 -            EXIT WHEN allowed_event_ IS NULL;
  46.949 -            state_trans_values_(counter_).lu_name:=state_list_(i).lu_name;
  46.950 -            state_trans_values_(counter_).package_name:=state_list_(i).package_name;
  46.951 -            state_trans_values_(counter_).state:=state_list_(i).db_state;
  46.952 -            state_trans_values_(counter_).allowed_event:=substr(allowed_event_,1,length(allowed_event_)-1);
  46.953 -            state_trans_values_(counter_).rowversion:=SYSDATE;
  46.954 -            match_:=match_+1;
  46.955 -            counter_:=counter_+1;
  46.956 -         END LOOP;
  46.957 -      END LOOP;
  46.958 -
  46.959 -      BEGIN
  46.960 -         Write_Error_Text___ (error_text_, '   -------------------------------------------------------------');
  46.961 -         Write_Error_Text___ (error_text_, '   Dictionary Cache is being updated with '||state_trans_values_.count ||' State Transitions');
  46.962 -         Write_Error_Text___ (error_text_, '   -------------------------------------------------------------');
  46.963 -         FORALL j IN Nvl(state_trans_values_.FIRST,0)..Nvl(state_trans_values_.LAST,-1) SAVE EXCEPTIONS
  46.964 -            INSERT INTO dictionary_sys_state_trans_tab VALUES state_trans_values_(j);
  46.965 -      EXCEPTION
  46.966 -         WHEN bulk_errors THEN
  46.967 -            error_count_ := SQL%BULK_EXCEPTIONS.COUNT;
  46.968 -            Write_Error_Text___ (error_text_, '   '||to_char(error_count_)||' problem(s) when inserting dictionary state transition information.');
  46.969 -            FOR i IN 1..error_count_ LOOP
  46.970 -               position_ := SQL%BULK_EXCEPTIONS(i).ERROR_INDEX;
  46.971 ---               Write_Error_Text___ (error_text_, '   Position number '||to_char(position_));
  46.972 -               Write_Error_Text___ (error_text_, '   '||Rpad(Get_Logical_Unit_Module(state_trans_values_(position_).lu_name),6)||':Error ' || SQLERRM(-SQL%BULK_EXCEPTIONS(i).ERROR_CODE)||', ', FALSE);
  46.973 -               Write_Error_Text___ (error_text_, 'lu_name='||nvl(state_trans_values_(position_).lu_name, 'NULL')||', ', FALSE);
  46.974 -               Write_Error_Text___ (error_text_, 'package_name='||nvl(state_trans_values_(position_).package_name, 'NULL')||', ', FALSE);
  46.975 -               Write_Error_Text___ (error_text_, 'state='||nvl(state_trans_values_(position_).state, 'NULL')||', ', FALSE);
  46.976 -               Write_Error_Text___ (error_text_, 'allowed_event='||nvl(state_trans_values_(position_).allowed_event, 'NULL'));
  46.977 -            END LOOP;
  46.978 -      END;
  46.979 -
  46.980 -   EXCEPTION
  46.981 -      WHEN OTHERS THEN
  46.982 -         Write_Error_Text___ (error_text_, '   Failed to rebuild dictionary_sys_state_trans_tab.');
  46.983 -         Write_Error_Text___ (error_text_, '   '||dbms_utility.format_error_backtrace);
  46.984 -   END Rebuild_State_Transitions___;
  46.985 -
  46.986 -   PROCEDURE Tokenize_Lists___ (
  46.987 -      value_list_ IN VARCHAR2,
  46.988 -      values_     IN OUT domain_states_array )
  46.989 -   IS
  46.990 -      i_        NUMBER      := 0;
  46.991 -      pos_      NUMBER      := 1;
  46.992 -      end_pos_  NUMBER      := 1;
  46.993 -      sep_      VARCHAR2(1) := Client_SYS.text_separator_;
  46.994 -      len_      NUMBER      := length(value_list_);
  46.995 -      ind_      NUMBER      := Nvl(values_.LAST+1,0);
  46.996 -      temp_     VARCHAR2(120);
  46.997 -   BEGIN
  46.998 -      end_pos_ := instr(value_list_, sep_, 1, i_ + 1);
  46.999 -      WHILE end_pos_ < len_ AND end_pos_ != 0 LOOP
 46.1000 -         BEGIN
 46.1001 -            temp_ := REPLACE(substr(value_list_, pos_, end_pos_ - pos_),'''||''','');
 46.1002 -            values_(ind_) := REPLACE(temp_,''' || ''',''); 
 46.1003 -         EXCEPTION
 46.1004 -            WHEN value_error THEN
 46.1005 -               values_(ind_) := 'ERROR!!!';
 46.1006 -         END;
 46.1007 -         pos_ := end_pos_ + 1;
 46.1008 -         i_ := i_ + 1;
 46.1009 -         ind_:=ind_+1;
 46.1010 -         end_pos_ := instr(value_list_, sep_, 1, i_ + 1);
 46.1011 -      END LOOP;
 46.1012 -   END Tokenize_Lists___;
 46.1013 -
 46.1014 -   PROCEDURE Insert_Package_Information___ (
 46.1015 -      lu_name_      IN VARCHAR2,
 46.1016 -      module_       IN VARCHAR2,
 46.1017 -      package_name_ IN VARCHAR2,
 46.1018 -      lu_type_      IN VARCHAR2,
 46.1019 -      lu_sub_type_  IN VARCHAR2 )
 46.1020 -   IS
 46.1021 -      package_index_ NUMBER;
 46.1022 -   BEGIN
 46.1023 -      BEGIN
 46.1024 -         INSERT INTO dictionary_sys_tab
 46.1025 -            (lu_name, module, lu_type, rowversion)
 46.1026 -         VALUES
 46.1027 -            (lu_name_, module_, lu_type_, SYSDATE);
 46.1028 -         IF length(lu_name_) > 25 THEN
 46.1029 -            Write_Error_Text___ (error_text_, '   '||rpad(module_,6)||':LU Name '||nvl(lu_name_, 'NULL')||' is longer than 25 characters, this is not allowed.');
 46.1030 -         END IF;
 46.1031 -      EXCEPTION
 46.1032 -         WHEN dup_val_on_index THEN
 46.1033 -            UPDATE dictionary_sys_tab
 46.1034 -               SET rowversion = SYSDATE,
 46.1035 -                   module = module_,
 46.1036 -                   lu_type = lu_type_
 46.1037 -               WHERE lu_name = lu_name_;
 46.1038 -         WHEN OTHERS THEN
 46.1039 -            Write_Error_Text___ (error_text_, '   '||rpad(module_,6)||':Undefined problem when inserting LU dictionary information for package '||package_name_||', ', FALSE);
 46.1040 -            Write_Error_Text___ (error_text_, 'LU Name='||nvl(lu_name_, 'NULL')||', ', FALSE);
 46.1041 -            Write_Error_Text___ (error_text_, 'LU Type='||nvl(lu_type_, 'NULL'));
 46.1042 -      END;
 46.1043 -      -- Insert and if already existing then update.
 46.1044 -      -- This is more efficient when performing a full refresh!
 46.1045 -      BEGIN
 46.1046 -         Get_Next_Pkg_Index___(lu_name_, package_index_);
 46.1047 -         INSERT INTO dictionary_sys_package_tab
 46.1048 -            (lu_name, package_name, package_index, package_type, rowversion)
 46.1049 -         VALUES
 46.1050 -            (lu_name_, package_name_, package_index_, lu_sub_type_, SYSDATE);
 46.1051 -         --
 46.1052 -         --  Fix problems with LU that has more than one _API package (e.g. for state handling).
 46.1053 -         --
 46.1054 -         UPDATE Dictionary_Sys_Package_Tab
 46.1055 -            SET package_index = 0
 46.1056 -          WHERE lu_name IN (SELECT lu_name
 46.1057 -                              FROM Dictionary_Sys_Package_Tab
 46.1058 -                             WHERE package_name LIKE '%_API'
 46.1059 -                          GROUP BY lu_name
 46.1060 -                            HAVING count(*) > 1)
 46.1061 -            AND package_name = Upper(Regexp_Replace(lu_name,
 46.1062 -                                           '([a-z])([A-Z])',
 46.1063 -                                           '\1_\2',
 46.1064 -                                           1,
 46.1065 -                                           0,
 46.1066 -                                           'c') || '_API')
 46.1067 -            AND package_index != 1;
 46.1068 -          --
 46.1069 -      EXCEPTION
 46.1070 -         WHEN dup_val_on_index THEN
 46.1071 -            UPDATE dictionary_sys_package_tab
 46.1072 -               SET rowversion = SYSDATE
 46.1073 -               WHERE lu_name = lu_name_
 46.1074 -               AND   package_name = package_name_;
 46.1075 -         WHEN OTHERS THEN
 46.1076 -            Write_Error_Text___ (error_text_, '   '||Rpad(Get_Logical_Unit_Module(lu_name_),6)||':Undefined problem when inserting dictionary information for package '||package_name_||', ', FALSE);
 46.1077 -            Write_Error_Text___ (error_text_, 'LU Name='||nvl(lu_name_, 'NULL')||', ', FALSE);
 46.1078 -            Write_Error_Text___ (error_text_, 'Package Name='||nvl(package_name_, 'NULL')||', ', FALSE);
 46.1079 -            Write_Error_Text___ (error_text_, 'Package Index='||nvl(to_char(pkg_index_), 'NULL')||', ', FALSE);
 46.1080 -            Write_Error_Text___ (error_text_, 'Package Type='||nvl(lu_sub_type_, 'NULL'));
 46.1081 -      END;
 46.1082 -   END Insert_Package_Information___;
 46.1083 -
 46.1084 -   PROCEDURE Insert_View_Information___(
 46.1085 -      lu_name_      IN VARCHAR2,
 46.1086 -      module_       IN VARCHAR2,
 46.1087 -      view_name_    IN VARCHAR2,
 46.1088 -      view_prompt_  IN VARCHAR2 )
 46.1089 -   IS
 46.1090 -      base_view_  BOOLEAN;
 46.1091 -      view_index_ NUMBER;
 46.1092 -      view_type_  VARCHAR2(1);
 46.1093 -      lu_prompt_  VARCHAR2(200);
 46.1094 -   BEGIN
 46.1095 -      -- Find the base view according to naming conventions...
 46.1096 -      -- (Other possible base views are handled at the end of the process)
 46.1097 -      IF view_name_ =  Clientnametodbname_(lu_name_) THEN
 46.1098 -         lu_prompt_ := view_prompt_;
 46.1099 -         base_view_ := TRUE;
 46.1100 -      ELSE
 46.1101 -         lu_prompt_ := NULL;
 46.1102 -         base_view_ := FALSE;
 46.1103 -      END IF;
 46.1104 -      -- Insert into dictionary_sys_tab. It is likely this entry already exist (from package information),
 46.1105 -      -- then only updating the prompt and rowversion is more efficent.
 46.1106 -      IF base_view_ THEN
 46.1107 -         UPDATE dictionary_sys_tab
 46.1108 -            SET rowversion = SYSDATE,
 46.1109 -                lu_prompt = lu_prompt_
 46.1110 -            WHERE lu_name = lu_name_;
 46.1111 -         IF SQL%NOTFOUND THEN
 46.1112 -            INSERT INTO dictionary_sys_tab
 46.1113 -               (lu_name, module, lu_prompt, rowversion)
 46.1114 -            VALUES
 46.1115 -               (lu_name_, module_, lu_prompt_, SYSDATE);
 46.1116 -         END IF;
 46.1117 -      ELSE
 46.1118 -         UPDATE dictionary_sys_tab
 46.1119 -            SET rowversion = SYSDATE
 46.1120 -            WHERE lu_name = lu_name_;
 46.1121 -         IF SQL%NOTFOUND THEN
 46.1122 -            INSERT INTO dictionary_sys_tab
 46.1123 -               (lu_name, module, rowversion)
 46.1124 -            VALUES
 46.1125 -               (lu_name_, module_, SYSDATE);
 46.1126 -         END IF;
 46.1127 -      END IF;
 46.1128 -      -- Insert into dictionary_sys_view_tab
 46.1129 -      -- Insert and if already existing then update.
 46.1130 -      -- This is more efficient when performing a full refresh!
 46.1131 -      BEGIN
 46.1132 -         Get_Next_View_Index___(lu_name_, view_index_);
 46.1133 -         IF base_view_ THEN
 46.1134 -            view_type_ := 'B';
 46.1135 -         ELSIF substr(view_name_, -4) = '_REP' THEN
 46.1136 -            view_type_ := 'R';
 46.1137 -         ELSE
 46.1138 -            view_type_ := 'A';
 46.1139 -         END IF;
 46.1140 -         INSERT INTO dictionary_sys_view_tab
 46.1141 -            (lu_name, view_name, view_type, view_prompt, view_index, rowversion)
 46.1142 -         VALUES
 46.1143 -            (lu_name_, view_name_, view_type_, view_prompt_, view_index_, SYSDATE);
 46.1144 -      EXCEPTION
 46.1145 -         WHEN dup_val_on_index THEN
 46.1146 -            UPDATE dictionary_sys_view_tab
 46.1147 -               SET view_type = view_type_,
 46.1148 -                   view_prompt = view_prompt_,
 46.1149 -                   rowversion = SYSDATE
 46.1150 -               WHERE lu_name = lu_name_
 46.1151 -               AND view_name = view_name_;
 46.1152 -         WHEN OTHERS THEN
 46.1153 -            Write_Error_Text___ (error_text_, '   '||Rpad(module_,6)||':Undefined problem when inserting dictionary information for view '||view_name_||', ', FALSE);
 46.1154 -            Write_Error_Text___ (error_text_, 'LU Name='||nvl(lu_name_, 'NULL')||', ', FALSE);
 46.1155 -            Write_Error_Text___ (error_text_, 'View Name='||nvl(view_name_, 'NULL')||', ', FALSE);
 46.1156 -            Write_Error_Text___ (error_text_, 'View Prompt='||nvl(view_prompt_, 'NULL')||', ', FALSE);
 46.1157 -            Write_Error_Text___ (error_text_, 'View Index='||nvl(to_char(view_index_), 'NULL')||', ');
 46.1158 -      END;
 46.1159 -   END Insert_View_Information___;
 46.1160 -
 46.1161 -   PROCEDURE Refresh_View_Columns___ (
 46.1162 -      all_views_  IN BOOLEAN,
 46.1163 -      start_time_ IN DATE )
 46.1164 -   IS
 46.1165 -      CURSOR get_view_columns IS
 46.1166 -         SELECT u.table_name view_name, u.column_name column_name, c.comments comments, u.column_id column_id
 46.1167 -         FROM   user_tab_columns u, fnd_col_comments c
 46.1168 -         WHERE  u.table_name = c.table_name
 46.1169 -         AND    u.column_name = c.column_name
 46.1170 -         ORDER BY u.table_name, u.column_name;
 46.1171 -
 46.1172 -      CURSOR get_new_view_columns IS
 46.1173 -         SELECT u.table_name view_name, u.column_name column_name, c.comments comments, u.column_id column_id
 46.1174 -         FROM   user_tab_columns u, fnd_col_comments c, dictionary_sys_view_tab v
 46.1175 -         WHERE  u.table_name = c.table_name
 46.1176 -         AND    u.table_name = v.view_name
 46.1177 -         AND    u.column_name = c.column_name
 46.1178 -         AND    v.rowversion >= start_time_
 46.1179 -         ORDER BY u.table_name, u.column_name;
 46.1180 -
 46.1181 -      column_flags_ VARCHAR2(5);
 46.1182 -      lu_name_      VARCHAR2(30);
 46.1183 -      prev_view_    VARCHAR2(30) := 'NIL';
 46.1184 -      n_            NUMBER := 0;
 46.1185 -      position_     NUMBER;
 46.1186 -      error_count_  NUMBER;
 46.1187 -      bulk_errors   EXCEPTION;
 46.1188 -      PRAGMA EXCEPTION_INIT(bulk_errors, -24381);
 46.1189 -
 46.1190 -      TYPE view_column_array IS TABLE OF get_view_columns%ROWTYPE INDEX BY BINARY_INTEGER;
 46.1191 -      view_columns_ view_column_array;
 46.1192 -
 46.1193 -      TYPE complete_array IS TABLE OF dictionary_sys_view_column_tab%ROWTYPE INDEX BY BINARY_INTEGER;
 46.1194 -      complete_columns_ complete_array;
 46.1195 -   BEGIN
 46.1196 -      --
 46.1197 -      -- Fetch view column information and delete old information
 46.1198 -      --
 46.1199 -      IF all_views_ THEN
 46.1200 -         OPEN get_view_columns;
 46.1201 -         FETCH get_view_columns BULK COLLECT INTO view_columns_;
 46.1202 -         CLOSE get_view_columns;
 46.1203 -         -- Remove all old information
 46.1204 -         -- ifs_assert_safe pemase 20060215
 46.1205 -         EXECUTE IMMEDIATE 'TRUNCATE TABLE dictionary_sys_view_column_tab';
 46.1206 -      ELSE
 46.1207 -         OPEN get_new_view_columns;
 46.1208 -         FETCH get_new_view_columns BULK COLLECT INTO view_columns_;
 46.1209 -         CLOSE get_new_view_columns;
 46.1210 -         -- Remove old information for all of the methods that is being updated
 46.1211 -         DELETE FROM dictionary_sys_view_column_tab c
 46.1212 -            WHERE EXISTS (SELECT 1
 46.1213 -                          FROM dictionary_sys_view_tab v
 46.1214 -                          WHERE v.view_name = c.view_name
 46.1215 -                          AND v.rowversion >= start_time_);
 46.1216 -      END IF;
 46.1217 -
 46.1218 -      -- Process all of the view column information
 46.1219 -      IF view_columns_.COUNT > 0 THEN
 46.1220 -         FOR i IN Nvl(view_columns_.FIRST,0)..Nvl(view_columns_.LAST,-1) LOOP
 46.1221 -            -- Find the lu name for the view if view has changed
 46.1222 -            IF (prev_view_ <> view_columns_(i).view_name) THEN
 46.1223 -               lu_name_ := Get_Logical_Unit(view_columns_(i).view_name, 'VIEW');
 46.1224 -               prev_view_ := view_columns_(i).view_name;
 46.1225 -            END IF;
 46.1226 -            IF lu_name_ IS NOT NULL THEN
 46.1227 -               BEGIN
 46.1228 -                  complete_columns_(n_).lu_name          := lu_name_;
 46.1229 -                  complete_columns_(n_).view_name        := view_columns_(i).view_name;
 46.1230 -                  complete_columns_(n_).column_name      := view_columns_(i).column_name;
 46.1231 -                  complete_columns_(n_).column_index     := view_columns_(i).column_id;
 46.1232 -                  complete_columns_(n_).rowversion       := SYSDATE;
 46.1233 -                  complete_columns_(n_).column_datatype  := Comment_Value_('DATATYPE',view_columns_(i).comments);
 46.1234 -                  complete_columns_(n_).column_prompt    := Comment_Value_('PROMPT',view_columns_(i).comments);
 46.1235 -                  complete_columns_(n_).column_reference := Comment_Value_('REF',view_columns_(i).comments);
 46.1236 -                  column_flags_                          := Comment_Value_('FLAGS',view_columns_(i).comments);
 46.1237 -                  complete_columns_(n_).type_flag        := substr(column_flags_,1,1);
 46.1238 -                  complete_columns_(n_).required_flag    := substr(column_flags_,2,1);
 46.1239 -                  complete_columns_(n_).insert_flag      := substr(column_flags_,3,1);
 46.1240 -                  complete_columns_(n_).update_flag      := substr(column_flags_,4,1);
 46.1241 -                  complete_columns_(n_).lov_flag         := substr(column_flags_,5,1);
 46.1242 -               EXCEPTION
 46.1243 -                  WHEN OTHERS THEN
 46.1244 -                     Write_Error_Text___ (error_text_, '   ??????:Incorrect comments for view column '||view_columns_(i).view_name||'.'||view_columns_(i).column_name);
 46.1245 -                     complete_columns_(n_).column_datatype  := NULL;
 46.1246 -                     complete_columns_(n_).column_prompt    := NULL;
 46.1247 -                     complete_columns_(n_).column_reference := NULL;
 46.1248 -                     complete_columns_(n_).type_flag        := NULL;
 46.1249 -                     complete_columns_(n_).required_flag    := NULL;
 46.1250 -                     complete_columns_(n_).insert_flag      := NULL;
 46.1251 -                     complete_columns_(n_).update_flag      := NULL;
 46.1252 -                     complete_columns_(n_).lov_flag         := NULL;
 46.1253 -               END;
 46.1254 -               n_ := n_ + 1;
 46.1255 -            END IF;
 46.1256 -         END LOOP;
 46.1257 -
 46.1258 -         -- Insert all the values into dictionary_sys_view_column_tab
 46.1259 -         BEGIN
 46.1260 -            FORALL j IN Nvl(complete_columns_.FIRST,0)..Nvl(complete_columns_.LAST,-1) SAVE EXCEPTIONS
 46.1261 -               INSERT INTO dictionary_sys_view_column_tab VALUES complete_columns_(j);
 46.1262 -         EXCEPTION
 46.1263 -            WHEN bulk_errors THEN
 46.1264 -               error_count_ := SQL%BULK_EXCEPTIONS.COUNT;
 46.1265 -               Write_Error_Text___ (error_text_, '   '||to_char(error_count_)||' problem(s) when inserting dictionary view column information!');
 46.1266 -               FOR i IN 1..error_count_ LOOP
 46.1267 -                  position_ := SQL%BULK_EXCEPTIONS(i).ERROR_INDEX;
 46.1268 -                  Write_Error_Text___ (error_text_, '   '||Rpad(Get_Logical_Unit_Module(complete_columns_(position_).lu_name),6)||':Error ' || SQLERRM(-SQL%BULK_EXCEPTIONS(i).ERROR_CODE)||', ', FALSE);
 46.1269 -                  Write_Error_Text___ (error_text_, 'Lu Name='||nvl(complete_columns_(position_).lu_name, 'NULL')||', ', FALSE);
 46.1270 -                  Write_Error_Text___ (error_text_, 'View Name='||nvl(complete_columns_(position_).view_name, 'NULL')||', ', FALSE);
 46.1271 -                  Write_Error_Text___ (error_text_, 'Column Name='||nvl(complete_columns_(position_).column_name, 'NULL'));
 46.1272 -               END LOOP;
 46.1273 -         END;
 46.1274 -      END IF;
 46.1275 -   END Refresh_View_Columns___;
 46.1276 -
 46.1277 -   -- Handles both domain and state information, behaves different depending on info_type
 46.1278 -   PROCEDURE Refresh_Domain_State_Info___ (
 46.1279 -      info_type_    IN VARCHAR2,
 46.1280 -      lu_name_      IN VARCHAR2,
 46.1281 -      package_name_ IN VARCHAR2 )
 46.1282 -   IS
 46.1283 -      -- Domain information
 46.1284 -      CURSOR get_domain_info(package_name_ IN VARCHAR2,list_type_ VARCHAR2) IS
 46.1285 -         SELECT ltrim(rtrim(substr(text, instr(text, '''')+ 1) )) list_values,line
 46.1286 -         FROM   user_source t
 46.1287 -         WHERE  type = 'PACKAGE BODY'
 46.1288 -         AND    name = package_name_
 46.1289 -         AND    text NOT LIKE '--%'
 46.1290 -         AND    text NOT LIKE '%/%*%'
 46.1291 -         AND    text NOT LIKE '%*%/'
 46.1292 -         AND line BETWEEN (SELECT MIN(line) 
 46.1293 -                           FROM   user_source x
 46.1294 -                           WHERE  type = 'PACKAGE BODY'
 46.1295 -                           AND    name = package_name_
 46.1296 -                           AND    x.text LIKE '%'||list_type_||'%:=%''%''%') 
 46.1297 -                     AND 
 46.1298 -                          (SELECT MIN(line) 
 46.1299 -                           FROM user_source y 
 46.1300 -                           WHERE  type = 'PACKAGE BODY'
 46.1301 -                           AND    y.name = package_name_
 46.1302 -                           AND y.text LIKE '%;%'
 46.1303 -                           AND y.line >= (SELECT min(line) 
 46.1304 -                                          FROM   user_source
 46.1305 -                                          WHERE  type = 'PACKAGE BODY'
 46.1306 -                                          AND    name = package_name_
 46.1307 -                                          AND    text LIKE '%'||list_type_||'%:=%''%''%'));   
 46.1308 -
 46.1309 -  
 46.1310 -      -- State information
 46.1311 -      CURSOR get_state_info(package_name_ IN VARCHAR2) IS
 46.1312 -         SELECT ltrim(rtrim(substr(text, 1, instr(text, 'CONSTANT') - 1))) list_type, ltrim(rtrim(substr(text, instr(text, '''')+ 1) )) list_values
 46.1313 -         FROM   user_source
 46.1314 -         WHERE  type = 'PACKAGE BODY'
 46.1315 -         AND    name = package_name_
 46.1316 -         AND    (text LIKE '%db_state_list_%:=%''%''%' OR text LIKE '%client_state_list_%:=%''%''%')
 46.1317 -         AND    text NOT LIKE '--%'
 46.1318 -         AND    text NOT LIKE '%/%*%'
 46.1319 -         AND    text NOT LIKE '%*%/';
 46.1320 ---         AND    line BETWEEN 2 AND 11;
 46.1321 -
 46.1322 -      refresh_domain_ BOOLEAN := info_type_ = 'domain';
 46.1323 -      position_       NUMBER;
 46.1324 -      error_count_    NUMBER;
 46.1325 -      bulk_errors     EXCEPTION;
 46.1326 -      PRAGMA EXCEPTION_INIT(bulk_errors, -24381);        
 46.1327 -      list_type_    VARCHAR2(100);
 46.1328 -
 46.1329 -      TYPE domain_array IS TABLE OF get_domain_info%ROWTYPE INDEX BY BINARY_INTEGER;
 46.1330 -      list_ domain_array;
 46.1331 -   BEGIN
 46.1332 -      -- Delete old values (they can only exist if this is not a full refresh)
 46.1333 -      IF NOT refresh_all_ THEN
 46.1334 -         IF refresh_domain_ THEN
 46.1335 -            DELETE FROM dictionary_sys_domain_tab
 46.1336 -               WHERE lu_name = lu_name_
 46.1337 -               AND package_name = package_name_;
 46.1338 -         ELSE
 46.1339 -            DELETE FROM dictionary_sys_state_tab
 46.1340 -               WHERE lu_name = lu_name_
 46.1341 -               AND package_name = package_name_;
 46.1342 -         END IF;
 46.1343 -      END IF;
 46.1344 -
 46.1345 -      -- Clear variables
 46.1346 -      db_values_.DELETE;
 46.1347 -      client_values_.DELETE;
 46.1348 -      complete_values_.DELETE;
 46.1349 -
 46.1350 -      IF refresh_domain_ THEN
 46.1351 -
 46.1352 -         OPEN get_domain_info(package_name_,'db_value_list_');
 46.1353 -         FETCH get_domain_info BULK COLLECT INTO list_;
 46.1354 -         CLOSE get_domain_info;
 46.1355 -
 46.1356 -         FOR j_ IN Nvl(list_.FIRST,0)..Nvl(list_.LAST,-1) LOOP
 46.1357 -            Tokenize_Lists___(list_(j_).list_values, db_values_);
 46.1358 -         END LOOP;
 46.1359 -
 46.1360 -         list_.DELETE;
 46.1361 -         OPEN get_domain_info(package_name_,'client_value_list_');
 46.1362 -         FETCH get_domain_info BULK COLLECT INTO list_;
 46.1363 -         CLOSE get_domain_info;
 46.1364 -
 46.1365 -         FOR j_ IN Nvl(list_.FIRST,0)..Nvl(list_.LAST,-1) LOOP
 46.1366 -            Tokenize_Lists___(list_(j_).list_values, client_values_);
 46.1367 -         END LOOP;
 46.1368 -      ELSE
 46.1369 -         FOR list IN get_state_info(package_name_) LOOP
 46.1370 -            -- Break down the list into single values in an array
 46.1371 -            IF list.list_type = 'db_state_list_' THEN
 46.1372 -               Tokenize_Lists___(list.list_values, db_values_);
 46.1373 -            ELSIF list.list_type = 'client_state_list_' THEN
 46.1374 -               Tokenize_Lists___(list.list_values, client_values_);
 46.1375 -            END IF;
 46.1376 -         END LOOP;
 46.1377 -         -- Get state events
 46.1378 -         -- translate db values to an PL/SQL collection
 46.1379 -
 46.1380 -      END IF;
 46.1381 -
 46.1382 -      IF db_values_.count > 0 THEN
 46.1383 -         -- Fill the result array with the rest of the necessary information
 46.1384 -         Fill_List_Array___(info_type_, lu_name_, package_name_, db_values_, client_values_, complete_values_);
 46.1385 -
 46.1386 -         -- Insert all of the values into dictionary_sys_domain_tab
 46.1387 -         BEGIN
 46.1388 -            IF refresh_domain_ THEN
 46.1389 -               FORALL j IN Nvl(complete_values_.FIRST,0)..Nvl(complete_values_.LAST,-1) SAVE EXCEPTIONS
 46.1390 -                  INSERT INTO dictionary_sys_domain_tab VALUES complete_values_(j);
 46.1391 -            ELSE
 46.1392 -               FORALL j IN Nvl(complete_values_.FIRST,0)..Nvl(complete_values_.LAST,-1) SAVE EXCEPTIONS
 46.1393 -                  INSERT INTO dictionary_sys_state_tab VALUES complete_values_(j);
 46.1394 -            END IF;
 46.1395 -         EXCEPTION
 46.1396 -            WHEN bulk_errors THEN
 46.1397 -               error_count_ := SQL%BULK_EXCEPTIONS.COUNT;
 46.1398 -               Write_Error_Text___ (error_text_, '   '||to_char(error_count_)||' problem(s) when inserting dictionary information for '||info_type_||' package '||package_name_||'!');
 46.1399 -               FOR i IN 1..error_count_ LOOP
 46.1400 -                  position_ := SQL%BULK_EXCEPTIONS(i).ERROR_INDEX - 1;
 46.1401 ---                  Write_Error_Text___ (error_text_, '   Position number '||to_char(position_));
 46.1402 -                  Write_Error_Text___ (error_text_, '   '||Rpad(Get_Logical_Unit_Module(lu_name_),6)||':Error ' || SQLERRM(-SQL%BULK_EXCEPTIONS(i).ERROR_CODE)||', ', FALSE);
 46.1403 -                  Write_Error_Text___ (error_text_, 'Db Value='||nvl(complete_values_(position_).db_value, 'NULL')||', ', FALSE);
 46.1404 -                  Write_Error_Text___ (error_text_, 'Client Value='||nvl(complete_values_(position_).client_value, 'NULL'));
 46.1405 -               END LOOP;
 46.1406 -         END;
 46.1407 -      END IF;
 46.1408 -   END Refresh_Domain_State_Info___;
 46.1409 -
 46.1410 -   PROCEDURE Refresh_Method_Arguments___ (
 46.1411 -      all_methods_  IN BOOLEAN,
 46.1412 -      start_time_   IN DATE )
 46.1413 -   IS
 46.1414 -      CURSOR get_met_arguments IS
 46.1415 -         SELECT package_name, object_name method_name, argument_name, position, data_type, in_out, nvl(to_number(overload), 0) overload
 46.1416 -         FROM user_arguments
 46.1417 -         WHERE package_name IS NOT NULL
 46.1418 -         AND argument_name IS NOT NULL
 46.1419 -         AND data_type IS NOT NULL
 46.1420 -         AND data_level = 0
 46.1421 -         ORDER BY package_name, object_name;
 46.1422 -
 46.1423 -      CURSOR get_new_met_arguments IS
 46.1424 -         SELECT ua.package_name, ua.object_name method_name, ua.argument_name, ua.position, ua.data_type, ua.in_out, nvl(to_number(ua.overload), 0) overload
 46.1425 -         FROM user_arguments ua, dictionary_sys_package_tab p
 46.1426 -         WHERE ua.package_name IS NOT NULL
 46.1427 -         AND ua.argument_name IS NOT NULL
 46.1428 -         AND ua.data_type IS NOT NULL
 46.1429 -         AND ua.data_level = 0
 46.1430 -         AND ua.package_name = p.package_name
 46.1431 -         AND p.rowversion >= start_time_
 46.1432 -         ORDER BY ua.package_name, ua.object_name;
 46.1433 -
 46.1434 -      lu_name_     VARCHAR2(30);
 46.1435 -      prev_pkg_    VARCHAR2(30) := 'NIL';
 46.1436 -      n_           NUMBER := 0;
 46.1437 -      position_    NUMBER;
 46.1438 -      error_count_ NUMBER;
 46.1439 -      bulk_errors  EXCEPTION;
 46.1440 -      PRAGMA EXCEPTION_INIT(bulk_errors, -24381);
 46.1441 -
 46.1442 -      TYPE met_argument_array IS TABLE OF get_met_arguments%ROWTYPE INDEX BY BINARY_INTEGER;
 46.1443 -      met_arguments met_argument_array;
 46.1444 -
 46.1445 -      TYPE complete_array IS TABLE OF dictionary_sys_argument_tab%ROWTYPE INDEX BY BINARY_INTEGER;
 46.1446 -      all_arguments_ complete_array;
 46.1447 -   BEGIN
 46.1448 -      --
 46.1449 -      -- Fetch method argument information and delete old information
 46.1450 -      --
 46.1451 -      IF all_methods_ THEN
 46.1452 -         OPEN get_met_arguments;
 46.1453 -         FETCH get_met_arguments BULK COLLECT INTO met_arguments;
 46.1454 -         CLOSE get_met_arguments;
 46.1455 -         -- Remove all old information
 46.1456 -         -- ifs_assert_safe pemase 20060215
 46.1457 -         EXECUTE IMMEDIATE 'TRUNCATE TABLE dictionary_sys_argument_tab';
 46.1458 -      ELSE
 46.1459 -         OPEN get_new_met_arguments;
 46.1460 -         FETCH get_new_met_arguments BULK COLLECT INTO met_arguments;
 46.1461 -         CLOSE get_new_met_arguments;
 46.1462 -         -- Remove old information for all of the methods that is being updated
 46.1463 -         DELETE FROM dictionary_sys_argument_tab a
 46.1464 -            WHERE EXISTS (SELECT 1
 46.1465 -                          FROM dictionary_sys_package_tab p
 46.1466 -                          WHERE a.package_name = p.package_name
 46.1467 -                          AND p.rowversion >= start_time_);
 46.1468 -      END IF;
 46.1469 -      --
 46.1470 -      -- Process method argument information
 46.1471 -      --
 46.1472 -      IF met_arguments.COUNT > 0 THEN
 46.1473 -         FOR i IN Nvl(met_arguments.FIRST,0)..Nvl(met_arguments.LAST,-1) LOOP
 46.1474 -            -- Find the lu name for the package if package has changed
 46.1475 -            IF (prev_pkg_ <> met_arguments(i).package_name) THEN
 46.1476 -               lu_name_ := Get_Logical_Unit(met_arguments(i).package_name, 'PACKAGE');
 46.1477 -               prev_pkg_ := met_arguments(i).package_name;
 46.1478 -            END IF;
 46.1479 -            IF lu_name_ IS NOT NULL THEN
 46.1480 -               -- Insert the values into the complete array
 46.1481 -               all_arguments_(n_).lu_name           := lu_name_;
 46.1482 -               all_arguments_(n_).package_name      := met_arguments(i).package_name;
 46.1483 -               all_arguments_(n_).method_name       := met_arguments(i).method_name;
 46.1484 -               all_arguments_(n_).argument_name     := met_arguments(i).argument_name;
 46.1485 -               all_arguments_(n_).argument_index    := met_arguments(i).position;
 46.1486 -               all_arguments_(n_).argument_datatype := met_arguments(i).data_type;
 46.1487 -               all_arguments_(n_).argument_type     := met_arguments(i).in_out;
 46.1488 -               all_arguments_(n_).overload          := met_arguments(i).overload;
 46.1489 -               all_arguments_(n_).rowversion        := SYSDATE;
 46.1490 -               n_ := n_ + 1;
 46.1491 -            END IF;
 46.1492 -         END LOOP;
 46.1493 -
 46.1494 -         -- Insert all the values into dictionary_sys_argument_tab
 46.1495 -         BEGIN
 46.1496 -            FORALL j IN Nvl(all_arguments_.FIRST,0)..Nvl(all_arguments_.LAST,-1) SAVE EXCEPTIONS
 46.1497 -               INSERT INTO dictionary_sys_argument_tab VALUES all_arguments_(j);
 46.1498 -         EXCEPTION
 46.1499 -            WHEN bulk_errors THEN
 46.1500 -               error_count_ := SQL%BULK_EXCEPTIONS.COUNT;
 46.1501 -               Write_Error_Text___ (error_text_, '   '||to_char(error_count_)||' problem(s) when inserting dictionary method argument information!');
 46.1502 -               FOR i IN 1..error_count_ LOOP
 46.1503 -                  position_ := SQL%BULK_EXCEPTIONS(i).ERROR_INDEX;
 46.1504 -                  Write_Error_Text___ (error_text_, '   '||Rpad(Get_Logical_Unit_Module(all_arguments_(position_).lu_name),6)||':Error ' || SQLERRM(-SQL%BULK_EXCEPTIONS(i).ERROR_CODE)||', ', FALSE);
 46.1505 -                  Write_Error_Text___ (error_text_, 'Lu Name='||nvl(all_arguments_(position_).lu_name, 'NULL')||', ', FALSE);
 46.1506 -                  Write_Error_Text___ (error_text_, 'Package Name='||nvl(all_arguments_(position_).package_name, 'NULL')||', ', FALSE);
 46.1507 -                  Write_Error_Text___ (error_text_, 'Method Name='||nvl(all_arguments_(position_).method_name, 'NULL')||', ', FALSE);
 46.1508 -                  Write_Error_Text___ (error_text_, 'Argument Name='||nvl(all_arguments_(position_).argument_name, 'NULL'));
 46.1509 -               END LOOP;
 46.1510 -         END;
 46.1511 -
 46.1512 -      END IF;
 46.1513 -   END Refresh_Method_Arguments___;
 46.1514 -
 46.1515 -   PROCEDURE Refresh_Methods___ (
 46.1516 -      all_methods_  IN BOOLEAN,
 46.1517 -      start_time_   IN DATE )
 46.1518 -   IS
 46.1519 -      CURSOR get_methods IS
 46.1520 -         SELECT p.object_name pkg, procedure_name met
 46.1521 -         FROM  user_procedures p
 46.1522 -         WHERE substr(object_name, -4) IN ('_API', '_RPI', '_SYS')
 46.1523 -         AND   procedure_name IS NOT NULL
 46.1524 -         GROUP BY procedure_name, object_name
 46.1525 -         ORDER BY object_name;
 46.1526 -
 46.1527 -      CURSOR get_pragma_methods IS
 46.1528 -         SELECT name pkg,
 46.1529 -                rtrim(ltrim(replace(replace(replace(
 46.1530 -                   upper(substr(text,1,instr(text,',') - 1 ))
 46.1531 -                   ,'(',''),'PRAGMA',''),'RESTRICT_REFERENCES',''))) met
 46.1532 -         FROM  user_source
 46.1533 -         WHERE type = 'PACKAGE'
 46.1534 -         AND   upper(text) LIKE '%PRAGMA%(%,%WNDS%'
 46.1535 -         AND   text NOT LIKE '--%'
 46.1536 -         ORDER BY name;
 46.1537 -
 46.1538 -      CURSOR get_new_methods IS
 46.1539 -         SELECT ua.object_name pkg, ua.procedure_name met
 46.1540 -         FROM  user_procedures ua, dictionary_sys_package_tab p
 46.1541 -         WHERE substr(object_name, -4) IN ('_API', '_RPI', '_SYS')
 46.1542 -         AND   p.package_name = ua.object_name
 46.1543 -         AND   procedure_name IS NOT NULL
 46.1544 -         AND   p.rowversion >= start_time_
 46.1545 -         GROUP BY ua.object_name, ua.procedure_name
 46.1546 -         ORDER BY ua.object_name;
 46.1547 -
 46.1548 -      CURSOR get_new_pragma_methods IS
 46.1549 -         SELECT u.name pkg,
 46.1550 -                rtrim(ltrim(replace(replace(replace(
 46.1551 -                   upper(substr(u.text,1,instr(u.text,',') - 1 ))
 46.1552 -                   ,'(',''),'PRAGMA',''),'RESTRICT_REFERENCES',''))) met
 46.1553 -         FROM  user_source u, dictionary_sys_package_tab p
 46.1554 -         WHERE u.type = 'PACKAGE'
 46.1555 -         AND   upper(u.text) LIKE '%PRAGMA%(%,%WNDS%'
 46.1556 -         AND   u.text NOT LIKE '--%'
 46.1557 -         AND   u.name = p.package_name
 46.1558 -         AND   p.rowversion >= start_time_
 46.1559 -         ORDER BY name;
 46.1560 -
 46.1561 -      lu_name_     VARCHAR2(30);
 46.1562 -      prev_pkg_    VARCHAR2(30) := 'NIL';
 46.1563 -      n_           NUMBER := 0;
 46.1564 -      position_    NUMBER;
 46.1565 -      error_count_ NUMBER;
 46.1566 -      bulk_errors  EXCEPTION;
 46.1567 -      PRAGMA EXCEPTION_INIT(bulk_errors, -24381);
 46.1568 -
 46.1569 -      TYPE method_array IS TABLE OF get_methods%ROWTYPE INDEX BY BINARY_INTEGER;
 46.1570 -      methods_ method_array;
 46.1571 -
 46.1572 -      TYPE complete_array IS TABLE OF dictionary_sys_method_tab%ROWTYPE INDEX BY BINARY_INTEGER;
 46.1573 -      complete_methods_ complete_array;
 46.1574 -   BEGIN
 46.1575 -      --
 46.1576 -      -- Fetch method information and delete old information
 46.1577 -      --
 46.1578 -      IF all_methods_ THEN
 46.1579 -         OPEN get_methods;
 46.1580 -         FETCH get_methods BULK COLLECT INTO methods_;
 46.1581 -         CLOSE get_methods;
 46.1582 -         -- Remove all old information for methods
 46.1583 -         -- ifs_assert_safe pemase 20060215
 46.1584 -         EXECUTE IMMEDIATE 'TRUNCATE TABLE dictionary_sys_method_tab';
 46.1585 -      ELSE
 46.1586 -         OPEN get_new_methods;
 46.1587 -         FETCH get_new_methods BULK COLLECT INTO methods_;
 46.1588 -         CLOSE get_new_methods;
 46.1589 -         -- Remove old information for all of the methods that is being updated
 46.1590 -         DELETE FROM dictionary_sys_method_tab m
 46.1591 -            WHERE EXISTS (SELECT 1
 46.1592 -                          FROM dictionary_sys_package_tab p
 46.1593 -                          WHERE p.package_name = m.package_name
 46.1594 -                          AND p.rowversion >= start_time_);
 46.1595 -      END IF;
 46.1596 -      --
 46.1597 -      -- Process method information
 46.1598 -      --
 46.1599 -      IF methods_.COUNT > 0 THEN
 46.1600 -         FOR i IN Nvl(methods_.FIRST,0)..Nvl(methods_.LAST,-1) LOOP
 46.1601 -            IF (prev_pkg_ <> methods_(i).pkg) THEN
 46.1602 -               lu_name_ := Get_Logical_Unit(methods_(i).pkg, 'PACKAGE');
 46.1603 -               prev_pkg_ := methods_(i).pkg;
 46.1604 -            END IF;
 46.1605 -            IF lu_name_ IS NOT NULL THEN
 46.1606 -               method_ := replace(initcap(replace(methods_(i).met,'_',' ')),' ','_');
 46.1607 -               -- Insert the values into the complete array
 46.1608 -               complete_methods_(n_).lu_name      := lu_name_;
 46.1609 -               complete_methods_(n_).package_name := methods_(i).pkg;
 46.1610 -               complete_methods_(n_).method_name  := method_;
 46.1611 -               complete_methods_(n_).method_type  := 'N';
 46.1612 -               complete_methods_(n_).rowversion   := SYSDATE;
 46.1613 -               n_ := n_ + 1;
 46.1614 -            END IF;
 46.1615 -         END LOOP;
 46.1616 -
 46.1617 -         -- Insert all the values into dictionary_sys_method_tab
 46.1618 -         BEGIN
 46.1619 -            FORALL j IN Nvl(complete_methods_.FIRST,0)..Nvl(complete_methods_.LAST,-1) SAVE EXCEPTIONS
 46.1620 -               INSERT INTO dictionary_sys_method_tab VALUES complete_methods_(j);
 46.1621 -         EXCEPTION
 46.1622 -            WHEN bulk_errors THEN
 46.1623 -               error_count_ := SQL%BULK_EXCEPTIONS.COUNT;
 46.1624 -               Write_Error_Text___ (error_text_, '   '||to_char(error_count_)||' problem(s) when inserting dictionary method information!');
 46.1625 -               FOR i IN 1..error_count_ LOOP
 46.1626 -                  position_ := SQL%BULK_EXCEPTIONS(i).ERROR_INDEX;
 46.1627 -                  Write_Error_Text___ (error_text_, '   '||Rpad(Get_Logical_Unit_Module(complete_methods_(position_).lu_name),6)||':Error ' || SQLERRM(-SQL%BULK_EXCEPTIONS(i).ERROR_CODE)||', ', FALSE);
 46.1628 -                  Write_Error_Text___ (error_text_, 'Lu Name='||nvl(complete_methods_(position_).lu_name, 'NULL')||', ', FALSE);
 46.1629 -                  Write_Error_Text___ (error_text_, 'Package Name='||nvl(complete_methods_(position_).package_name, 'NULL')||', ', FALSE);
 46.1630 -                  Write_Error_Text___ (error_text_, 'Method Name='||nvl(complete_methods_(position_).method_name, 'NULL'));
 46.1631 -               END LOOP;
 46.1632 -         END;
 46.1633 -      END IF;
 46.1634 -
 46.1635 -      -- Clear arrays
 46.1636 -      methods_.DELETE;
 46.1637 -      complete_methods_.DELETE;
 46.1638 -
 46.1639 -      --
 46.1640 -      -- Fetch pragma method information
 46.1641 -      --
 46.1642 -      IF all_methods_ THEN
 46.1643 -         OPEN get_pragma_methods;
 46.1644 -         FETCH get_pragma_methods BULK COLLECT INTO methods_;
 46.1645 -         CLOSE get_pragma_methods;
 46.1646 -      ELSE
 46.1647 -         OPEN get_new_pragma_methods;
 46.1648 -         FETCH get_new_pragma_methods BULK COLLECT INTO methods_;
 46.1649 -         CLOSE get_new_pragma_methods;
 46.1650 -      END IF;
 46.1651 -      --
 46.1652 -      -- Process pragma method information
 46.1653 -      --
 46.1654 -      IF methods_.COUNT > 0 THEN
 46.1655 -         -- Initiate sub type
 46.1656 -         pkg_lu_sub_type_ := 'N';
 46.1657 -         FOR i IN Nvl(methods_.FIRST,0)..Nvl(methods_.LAST,-1) LOOP
 46.1658 -            -- Find the name of the LU for every new package
 46.1659 -            IF (prev_pkg_ <> methods_(i).pkg) THEN
 46.1660 -               lu_name_ := Get_Logical_Unit(methods_(i).pkg, 'PACKAGE');
 46.1661 -               prev_pkg_ := methods_(i).pkg;
 46.1662 -            END IF;
 46.1663 -            IF lu_name_ IS NOT NULL THEN
 46.1664 -               method_ := replace(initcap(replace(methods_(i).met,'_',' ')),' ','_');
 46.1665 -               -- Update the record in dictionary_sys_method_tab
 46.1666 -               BEGIN
 46.1667 -                  UPDATE dictionary_sys_method_tab
 46.1668 -                     SET method_type = 'P',
 46.1669 -                         rowversion = SYSDATE
 46.1670 -                     WHERE lu_name = lu_name_
 46.1671 -                     AND   package_name = methods_(i).pkg
 46.1672 -                     AND   method_name = method_;
 46.1673 -                  IF SQL%NOTFOUND THEN
 46.1674 -                     INSERT INTO dictionary_sys_method_tab
 46.1675 -                        (lu_name, package_name, method_name, method_type, rowversion)
 46.1676 -                     VALUES
 46.1677 -                        (lu_name_, methods_(i).pkg, method_, 'P', SYSDATE);
 46.1678 -                  END IF;
 46.1679 -               EXCEPTION
 46.1680 -                  WHEN OTHERS THEN
 46.1681 -                     Write_Error_Text___ (error_text_, '   '||Rpad(Get_Logical_Unit_Module(lu_name_),6)||':Undefined problem when inserting dictionary information for PRAGMA-method '||method_||' in package '||methods_(i).pkg||', ', FALSE);
 46.1682 -                     Write_Error_Text___ (error_text_, 'Lu Name='||nvl(lu_name_, 'NULL')||', ', FALSE);
 46.1683 -                     Write_Error_Text___ (error_text_, 'Package Name='||nvl(methods_(i).pkg, 'NULL')||', ', FALSE);
 46.1684 -                     Write_Error_Text___ (error_text_, 'Method Name='||nvl(method_, 'NULL'));
 46.1685 -               END;
 46.1686 -               -- Handle if current package contains a state machine (identified by a specific PRAGMA method)
 46.1687 -               -- This call set the global variable pkg_lu_sub_type
 46.1688 -               Handle_Possible_State_Pkg___(lu_name_, method_);
 46.1689 -               -- Fetch and insert state information if current package contains a state machine
 46.1690 -               IF pkg_lu_sub_type_ = 'S' THEN
 46.1691 -                  IF (refresh_mode_ != 'LIGHT') THEN
 46.1692 -                     Refresh_Domain_State_Info___('state', lu_name_, methods_(i).pkg);
 46.1693 -                  END IF;
 46.1694 -                  -- Reset the sub_type to avoid multiple unnecessary searches
 46.1695 -                  pkg_lu_sub_type_ := 'N';
 46.1696 -               END IF;
 46.1697 -            END IF;
 46.1698 -         END LOOP;
 46.1699 -      END IF;
 46.1700 -      --
 46.1701 -      -- Update special handled methods to PRAGMA (Read-only) methods
 46.1702 -      --
 46.1703 -      UPDATE dictionary_sys_method_tab t
 46.1704 -         SET method_type = 'P'
 46.1705 -       WHERE upper(t.method_name)
 46.1706 -          IN ('ENUMERATE',
 46.1707 -              'EXIST',
 46.1708 -              'EXIST_DB',
 46.1709 -              'LOCK__',
 46.1710 -              'LANGUAGE_REFRESHED',
 46.1711 -              'INIT',
 46.1712 -              'FINITE_STATE_DECODE__',
 46.1713 -              'FINITE_STATE_ENCODE__',
 46.1714 -              'ENUMERATE_STATES__',
 46.1715 -              'FINITE_STATE_EVENTS__',
 46.1716 -              'ENUMERATE_EVENTS__');
 46.1717 -   END Refresh_Methods___;
 46.1718 -
 46.1719 -BEGIN
 46.1720 -   General_SYS.Init_Method(service_, '&PKG', 'Rebuild_Dictionary_Storage_');
 46.1721 -   Write_Error_Text___ (error_text_, '-------------------------------------------------------------');
 46.1722 -   Write_Error_Text___ (error_text_, 'Dictionary Cache started');
 46.1723 -   Write_Error_Text___ (error_text_, '-------------------------------------------------------------');
 46.1724 -   --
 46.1725 -   -- Validate refresh mode before proceeding
 46.1726 -   --
 46.1727 -   IF refresh_mode_ IS NULL OR refresh_mode_ NOT IN ('FULL', 'PARTIAL', 'VIEWS', 'PACKAGES', 'LIGHT') THEN
 46.1728 -      Error_SYS.Appl_General(service_, 'INVALIDMODE: Invalid Refresh Mode! Mode should be one of the values [:P1]', 'FULL, PARTIAL, VIEWS, PACKAGES');
 46.1729 -   END IF;
 46.1730 -   --
 46.1731 -   -- If a refresh is not necessary and a full refresh is not ordered, abort immediately...
 46.1732 -   -- This is more effecient than doing a complete search for packages and views.
 46.1733 -   --
 46.1734 -   -- In this procedure Dbms_Output should be used instead of Trace_SYS to enable
 46.1735 -   -- traces during installation time.
 46.1736 -   --
 46.1737 -   IF NOT refresh_all_ THEN
 46.1738 -      Check_Dictionary_Storage_(rebuild_needed_);
 46.1739 -      IF rebuild_needed_ = 0 THEN
 46.1740 -         Write_Error_Text___ (error_text_, 'Dictionary Cache is already up-to-date.');
 46.1741 -         RETURN(error_text_);
 46.1742 -      END IF;
 46.1743 -
 46.1744 -      -- Find last update time
 46.1745 -      OPEN get_last_update;
 46.1746 -      FETCH get_last_update INTO last_update_;
 46.1747 -      CLOSE get_last_update;
 46.1748 -
 46.1749 -      -- Set full refresh mode if no dictionary data exist
 46.1750 -      IF last_update_ IS NULL THEN
 46.1751 -         refresh_all_ := TRUE;
 46.1752 -      END IF;
 46.1753 -   END IF;
 46.1754 -
 46.1755 -   IF refresh_all_ THEN
 46.1756 -      Write_Error_Text___ (error_text_, 'Full Refresh of Dictionary Cache!');
 46.1757 -
 46.1758 -      -- Fetch the objects to update
 46.1759 -      OPEN get_all_pkgs;
 46.1760 -      FETCH get_all_pkgs BULK COLLECT INTO packages_;
 46.1761 -      CLOSE get_all_pkgs;
 46.1762 -
 46.1763 -      OPEN get_all_views;
 46.1764 -      FETCH get_all_views BULK COLLECT INTO views_;
 46.1765 -      CLOSE get_all_views;
 46.1766 -   ELSE
 46.1767 -      -- Spool information about what "mode" is used
 46.1768 -      IF refresh_views_ AND refresh_pkgs_ THEN
 46.1769 -         Write_Error_Text___ (error_text_, 'Partial Refresh of Dictionary Cache!');
 46.1770 -      ELSIF refresh_pkgs_ THEN
 46.1771 -         Write_Error_Text___ (error_text_, 'Partial Refresh of Dictionary Cache only for packages!');
 46.1772 -      ELSIF refresh_views_ THEN
 46.1773 -         Write_Error_Text___ (error_text_, 'Partial Refresh of Dictionary Cache only for views!');
 46.1774 -      END IF;
 46.1775 -      Write_Error_Text___ (error_text_, 'Last Update of Dictionary Cache occured at '||to_char(last_update_, 'YYYY-MM-DD HH24:MI:SS'));
 46.1776 -
 46.1777 -      -- Fetch the objects to update
 46.1778 -      IF refresh_pkgs_ THEN
 46.1779 -         OPEN get_pkgs_to_update(last_update_);
 46.1780 -         FETCH get_pkgs_to_update BULK COLLECT INTO packages_;
 46.1781 -         CLOSE get_pkgs_to_update;
 46.1782 -      END IF;
 46.1783 -
 46.1784 -      IF refresh_views_ THEN
 46.1785 -         OPEN get_views_to_update(last_update_);
 46.1786 -         FETCH get_views_to_update BULK COLLECT INTO views_;
 46.1787 -         CLOSE get_views_to_update;
 46.1788 -      END IF;
 46.1789 -   END IF;
 46.1790 -   --
 46.1791 -   -- Refresh package and method information
 46.1792 -   --
 46.1793 -   Write_Error_Text___ (error_text_, '   -------------------------------------------------------------');
 46.1794 -   Write_Error_Text___ (error_text_, '   Dictionary Cache is being updated for '||to_char(packages_.count)||' Packages');
 46.1795 -   Write_Error_Text___ (error_text_, '   -------------------------------------------------------------');
 46.1796 -   IF packages_.COUNT > 0 THEN
 46.1797 -      -- Save start date for package refresh
 46.1798 -      start_time_ := SYSDATE;
 46.1799 -      -- Remove old information if full refresh
 46.1800 -      IF refresh_all_ THEN
 46.1801 -         -- ifs_assert_safe pemase 20060215
 46.1802 -         EXECUTE IMMEDIATE 'TRUNCATE TABLE dictionary_sys_tab';
 46.1803 -         -- ifs_assert_safe pemase 20060215
 46.1804 -         EXECUTE IMMEDIATE 'TRUNCATE TABLE dictionary_sys_package_tab';
 46.1805 -         -- ifs_assert_safe pemase 20060215
 46.1806 -         EXECUTE IMMEDIATE 'TRUNCATE TABLE dictionary_sys_domain_tab';
 46.1807 -         -- ifs_assert_safe pemase 20060215
 46.1808 -         EXECUTE IMMEDIATE 'TRUNCATE TABLE dictionary_sys_state_tab';
 46.1809 -         -- ifs_assert_safe pemase 20060215
 46.1810 -         EXECUTE IMMEDIATE 'TRUNCATE TABLE dictionary_sys_state_event_tab';
 46.1811 -      END IF;
 46.1812 -
 46.1813 -      FOR i IN Nvl(packages_.FIRST,0)..Nvl(packages_.LAST,-1) LOOP
 46.1814 -         pkg_module_      := NULL;
 46.1815 -         pkg_lu_name_     := NULL;
 46.1816 -         pkg_lu_type_     := NULL;
 46.1817 -         pkg_lu_sub_type_ := 'N';
 46.1818 -         FOR pkg_info IN get_package_info(packages_(i)) LOOP
 46.1819 -            -- Investigate module, lu name and sub type of the lu
 46.1820 -            IF (pkg_info.gtype = 'M') THEN
 46.1821 -               pkg_module_ := substr(pkg_info.global, 1, 6);
 46.1822 -            ELSIF pkg_info.gtype IN ('L', 'S') THEN
 46.1823 -               pkg_lu_name_ := pkg_info.global;
 46.1824 -               pkg_lu_type_ := pkg_info.gtype;
 46.1825 -            ELSIF pkg_info.gtype = 'D' THEN
 46.1826 -               pkg_lu_sub_type_ := pkg_info.gtype;
 46.1827 -            END IF;
 46.1828 -         END LOOP;
 46.1829 -         IF pkg_lu_name_ IS NOT NULL AND pkg_module_ IS NOT NULL THEN
 46.1830 -            -- Insert the information into the dictionary
 46.1831 -            Insert_Package_Information___(pkg_lu_name_,
 46.1832 -                                          pkg_module_,
 46.1833 -                                          packages_(i),
 46.1834 -                                          pkg_lu_type_,
 46.1835 -                                          pkg_lu_sub_type_);
 46.1836 -
 46.1837 -            -- Refresh domain or state information depending on sub type of the LU (stored in global variable)
 46.1838 -            IF pkg_lu_sub_type_ = 'D' THEN
 46.1839 -               -- Refresh domain information if this is identified as an IID package
 46.1840 -               IF (refresh_mode_ != 'LIGHT') THEN
 46.1841 -                  Refresh_Domain_State_Info___('domain', pkg_lu_name_, packages_(i));
 46.1842 -               END IF;
 46.1843 -            END IF;
 46.1844 -         ELSE
 46.1845 -            Write_Error_Text___ (error_text_, '   ??????:Missing Module- or LU-information for package '||packages_(i)||'! Make sure that correct package globals exist for '||packages_(i));
 46.1846 -         END IF;
 46.1847 -      END LOOP;
 46.1848 -      --
 46.1849 -      -- Refresh methods once all packages are updated
 46.1850 -      --
 46.1851 -      Refresh_Methods___(refresh_all_, start_time_);
 46.1852 -      --
 46.1853 -      -- Refresh arguments for methods once all methods are updated
 46.1854 -      --
 46.1855 -      Refresh_Method_Arguments___(refresh_all_, start_time_);
 46.1856 -
 46.1857 -/* Commented for now, since the code has several bugs. Maybe corrected in future Service Pack
 46.1858 -      IF (refresh_mode_ != 'LIGHT') THEN
 46.1859 -         IF refresh_all_ THEN
 46.1860 -            Rebuild_All_State_Event___(TRUE);
 46.1861 -            Rebuild_State_Transitions___(TRUE);
 46.1862 -            Rebuild_State_Machine___(TRUE);
 46.1863 -         ELSE
 46.1864 -            Rebuild_All_State_Event___(FALSE);
 46.1865 -            Rebuild_State_Transitions___(FALSE);
 46.1866 -            Rebuild_State_Machine___(FALSE);
 46.1867 -         END IF;
 46.1868 -      END IF;
 46.1869 -*/
 46.1870 -   END IF;
 46.1871 -   --
 46.1872 -   -- Refresh view information
 46.1873 -   --
 46.1874 -   Write_Error_Text___ (error_text_, '   -------------------------------------------------------------');
 46.1875 -   Write_Error_Text___ (error_text_, '   Dictionary Cache is being updated for '||to_char(views_.count)||' Views');
 46.1876 -   Write_Error_Text___ (error_text_, '   -------------------------------------------------------------');
 46.1877 -   IF views_.COUNT > 0 THEN
 46.1878 -      -- Save start date for view refresh
 46.1879 -      start_time_ := SYSDATE;
 46.1880 -      -- Remove old information if full refresh
 46.1881 -      IF refresh_all_ THEN
 46.1882 -         -- ifs_assert_safe pemase 20060215
 46.1883 -         EXECUTE IMMEDIATE 'TRUNCATE TABLE dictionary_sys_view_tab';
 46.1884 -      ELSE
 46.1885 -         FORALL j IN Nvl(views_.FIRST,0)..Nvl(views_.LAST,-1)
 46.1886 -            DELETE FROM dictionary_sys_view_tab
 46.1887 -               WHERE view_name = views_(j);
 46.1888 -      END IF;
 46.1889 -
 46.1890 -      FOR i IN Nvl(views_.FIRST,0)..Nvl(views_.LAST,-1) LOOP
 46.1891 -         OPEN get_view_comments(views_(i));
 46.1892 -         FETCH get_view_comments INTO view_comment_;
 46.1893 -         CLOSE get_view_comments;
 46.1894 -         view_module_  := NULL;
 46.1895 -         view_lu_name_ := NULL;
 46.1896 -         view_module_  := upper(substr(Dictionary_SYS.Comment_Value_('MODULE', view_comment_), 1, 6));
 46.1897 -         IF view_module_ = 'IGNORE' THEN
 46.1898 -            view_lu_name_ := 'IGNORE';
 46.1899 -         END IF;
 46.1900 -         IF view_lu_name_ IS NULL THEN
 46.1901 -            view_lu_name_ := Dictionary_SYS.Comment_Value_('LU', view_comment_);
 46.1902 -            IF view_lu_name_ IS NULL THEN
 46.1903 -               view_lu_name_ := Dictionary_SYS.Comment_Value_('SERVICE', view_comment_);
 46.1904 -            END IF;
 46.1905 -         END IF;
 46.1906 -         view_prompt_  := Dictionary_SYS.Comment_Value_('PROMPT', view_comment_);
 46.1907 -         IF view_module_ IS NOT NULL AND view_lu_name_ IS NOT NULL THEN
 46.1908 -            IF view_module_ != 'IGNORE' THEN
 46.1909 -               Insert_View_Information___(view_lu_name_,
 46.1910 -                                          view_module_,
 46.1911 -                                          views_(i),
 46.1912 -                                          view_prompt_);
 46.1913 -            END IF;
 46.1914 -         ELSE
 46.1915 -            Write_Error_Text___ (error_text_, '   ??????:Missing Module- or LU-information for view '||views_(i)||'! Make sure that correct view comments exist for '||views_(i));
 46.1916 -         END IF;
 46.1917 -      END LOOP;
 46.1918 -      --
 46.1919 -      -- Refresh view columns once all view are updated
 46.1920 -      --
 46.1921 -      Refresh_View_Columns___(refresh_all_, start_time_);
 46.1922 -
 46.1923 -   END IF;
 46.1924 -
 46.1925 -   IF NOT refresh_all_ THEN
 46.1926 -      --
 46.1927 -      -- Delete information for objects no longer in the database
 46.1928 -      --
 46.1929 -      DELETE FROM dictionary_sys_package_tab p
 46.1930 -         WHERE NOT EXISTS (SELECT 1
 46.1931 -                           FROM user_objects o
 46.1932 -                           WHERE o.object_type = 'PACKAGE'
 46.1933 -                           AND p.package_name = o.object_name);
 46.1934 -
 46.1935 -      DELETE FROM dictionary_sys_method_tab m
 46.1936 -         WHERE NOT EXISTS (SELECT 1
 46.1937 -                           FROM dictionary_sys_package_tab p
 46.1938 -                           WHERE m.package_name = p.package_name);
 46.1939 -
 46.1940 -      DELETE FROM dictionary_sys_view_tab v
 46.1941 -         WHERE NOT EXISTS (SELECT 1
 46.1942 -                           FROM user_objects o
 46.1943 -                           WHERE o.object_type = 'VIEW'
 46.1944 -                           AND v.view_name = o.object_name);
 46.1945 -
 46.1946 -      DELETE FROM dictionary_sys_view_column_tab c
 46.1947 -         WHERE NOT EXISTS (SELECT 1
 46.1948 -                           FROM dictionary_sys_view_tab v
 46.1949 -                           WHERE v.lu_name = c.lu_name
 46.1950 -                           AND v.view_name = c.view_name);
 46.1951 -
 46.1952 -      DELETE FROM dictionary_sys_tab l
 46.1953 -         WHERE NOT EXISTS (SELECT 1
 46.1954 -                           FROM dictionary_sys_package_tab p
 46.1955 -                           WHERE p.lu_name = l.lu_name
 46.1956 -                           UNION
 46.1957 -                           SELECT 1
 46.1958 -                           FROM dictionary_sys_view_tab v
 46.1959 -                           WHERE v.lu_name = l.lu_name);
 46.1960 -   END IF;
 46.1961 -
 46.1962 -   --
 46.1963 -   -- Attempt 1:
 46.1964 -   -- At this point we have the basic information about the dictionary
 46.1965 -   -- but some base views are missing. This is the first method to fix it.
 46.1966 -   --
 46.1967 -   UPDATE dictionary_sys_view_tab
 46.1968 -      SET view_type = 'B'
 46.1969 -    WHERE lu_name NOT IN ( SELECT lu_name
 46.1970 -                             FROM dictionary_sys_view_tab
 46.1971 -                            WHERE view_type = 'B' )
 46.1972 -      AND view_name IN   ( SELECT view_name
 46.1973 -                             FROM dictionary_sys_view_tab    dv,
 46.1974 -                                  dictionary_sys_package_tab dp
 46.1975 -                            WHERE dv.lu_name = dp.lu_name
 46.1976 -                              AND ( dv.view_name || '_API') = dp.package_name );
 46.1977 -
 46.1978 -   --
 46.1979 -   -- Attempt 2:
 46.1980 -   -- Set the first view as base view for Logical Units that does not yet have been
 46.1981 -   -- assigned any base view according to naming standard rules.
 46.1982 -   --
 46.1983 -   UPDATE dictionary_sys_view_tab
 46.1984 -      SET view_type = 'B'
 46.1985 -      WHERE lu_name NOT IN (SELECT lu_name
 46.1986 -                            FROM dictionary_sys_view_tab
 46.1987 -                            WHERE view_type = 'B')
 46.1988 -      AND view_index = 1;
 46.1989 -   --
 46.1990 -   -- Set prompts for all Logical Units that didn't have a clearly defined view with a prompt.
 46.1991 -   -- Create the prompt from the Logical Unit name.
 46.1992 -   --
 46.1993 -   UPDATE dictionary_sys_tab
 46.1994 -      SET lu_prompt = replace(initcap(Dictionary_SYS.Clientnametodbname_(lu_name)),'_',' ')
 46.1995 -   WHERE lu_prompt IS NULL;
 46.1996 -
 46.1997 -   Cache_Management_API.Refresh_Cache('Dictionary');
 46.1998 -   
 46.1999 -   --
 46.2000 -   -- Call activity ManageApplicationServerCache.ClearDataDictionaryCache
 46.2001 -   --
 46.2002 -   DECLARE
 46.2003 -      record_  PLSQLAP_Record_API.type_record_;
 46.2004 -   BEGIN
 46.2005 -      record_ := PLSQLAP_Record_API.New_Record('');
 46.2006 -      PLSQLAP_Server_API.Invoke_Record_('ManageApplicationServerCache', 'ClearDataDictionaryCache', record_);
 46.2007 -      PLSQLAP_Record_API.Clear_Record(record_);
 46.2008 -   EXCEPTION
 46.2009 -      WHEN OTHERS THEN
 46.2010 -         NULL; -- Don't stop if error occurs
 46.2011 -         PLSQLAP_Record_API.Clear_Record(record_);
 46.2012 -   END;
 46.2013 -
 46.2014 -   Write_Error_Text___ (error_text_, '-------------------------------------------------------------');
 46.2015 -   Write_Error_Text___ (error_text_, 'Dictionary Cache finished');
 46.2016 -   Write_Error_Text___ (error_text_, '-------------------------------------------------------------');
 46.2017 -   RETURN(error_text_);
 46.2018 -
 46.2019 -END Rebuild_Dictionary_Storage___;
 46.2020 -
 46.2021 -
 46.2022 ------------------------------------------------------------------------------
 46.2023 --------------------- SERVICE SPECIFIC PRIVATE METHODS -----------------------
 46.2024 ------------------------------------------------------------------------------
 46.2025 -
 46.2026 ------------------------------------------------------------------------------
 46.2027 --- Property fetching routines for run-time use (private)
 46.2028 ------------------------------------------------------------------------------
 46.2029 -
 46.2030 --- Modified implementation to use dictionary cache. Designtime version moved to Design_SYS
 46.2031 -PROCEDURE Enumerate_Logical_Units__ (
 46.2032 -   lu_list1_ OUT VARCHAR2,
 46.2033 -   lu_list2_ OUT VARCHAR2,
 46.2034 -   lu_list3_ OUT VARCHAR2,
 46.2035 -   lu_list4_ OUT VARCHAR2 )
 46.2036 -IS
 46.2037 -   temp_  lu_struct_type;
 46.2038 -   limit_ NUMBER := 31000;
 46.2039 -   n_     NUMBER := 1;
 46.2040 -
 46.2041 -   CURSOR units IS
 46.2042 -      SELECT lu_name
 46.2043 -      FROM   dictionary_sys_tab
 46.2044 -      WHERE lu_type = 'L'
 46.2045 -      ORDER BY lu_name;
 46.2046 -BEGIN
 46.2047 -   --
 46.2048 -   -- Init used elements
 46.2049 -   --
 46.2050 -   temp_(1) := NULL;
 46.2051 -   temp_(2) := NULL;
 46.2052 -   temp_(3) := NULL;
 46.2053 -   temp_(4) := NULL;
 46.2054 -   --
 46.2055 -   -- Fetch all packages and views associated with a logical unit
 46.2056 -   -- Convert to client naming and append to list
 46.2057 -   --
 46.2058 -   FOR unit IN units LOOP
 46.2059 -      temp_(n_) := temp_(n_)||unit.lu_name||field_separator_;
 46.2060 -      IF (length(temp_(n_)) > limit_) THEN
 46.2061 -         n_ := n_ + 1;
 46.2062 -      END IF;
 46.2063 -   END LOOP;
 46.2064 -   --
 46.2065 -   -- Return complete lists
 46.2066 -   --
 46.2067 -   lu_list1_ := temp_(1);
 46.2068 -   lu_list2_ := temp_(2);
 46.2069 -   lu_list3_ := temp_(3);
 46.2070 -   lu_list4_ := temp_(4);
 46.2071 -END Enumerate_Logical_Units__;
 46.2072 -
 46.2073 -PROCEDURE Get_Logical_Unit_Properties__ (
 46.2074 -   lu_name_        IN  VARCHAR2,
 46.2075 -   view_list_      OUT VARCHAR2,
 46.2076 -   package_list_   OUT VARCHAR2,
 46.2077 -   method_list_    OUT VARCHAR2,
 46.2078 -   all_methods_    IN  VARCHAR2 DEFAULT 'TRUE' )
 46.2079 -IS
 46.2080 -BEGIN
 46.2081 -   Get_Logical_Unit_Views__(lu_name_, view_list_);
 46.2082 -   Get_Logical_Unit_Packages__(lu_name_, package_list_);
 46.2083 -   Get_Logical_Unit_Methods__(lu_name_, method_list_, all_methods_);
 46.2084 -END Get_Logical_Unit_Properties__;
 46.2085 -
 46.2086 -PROCEDURE Get_Logical_Unit_Properties2__ (
 46.2087 -   lu_name_        IN  VARCHAR2,
 46.2088 -   view_list_      OUT VARCHAR2,
 46.2089 -   package_list_   OUT VARCHAR2,
 46.2090 -   method_list_    OUT VARCHAR2,
 46.2091 -   all_methods_    IN  VARCHAR2 DEFAULT 'TRUE' )
 46.2092 -IS
 46.2093 -BEGIN
 46.2094 -   Get_Logical_Unit_Views__(lu_name_, view_list_);
 46.2095 -   Get_Logical_Unit_Packages__(lu_name_, package_list_);
 46.2096 -   Get_LU_Method_Types__(lu_name_, method_list_);
 46.2097 -END Get_Logical_Unit_Properties2__;
 46.2098 -
 46.2099 -PROCEDURE Get_Logical_Unit_Views__ (
 46.2100 -   lu_name_        IN  VARCHAR2,
 46.2101 -   view_list_      OUT VARCHAR2 )
 46.2102 -IS
 46.2103 -BEGIN
 46.2104 -   view_list_ := Get_Logical_Unit_Views__(lu_name_);
 46.2105 -END Get_Logical_Unit_Views__;
 46.2106 -
 46.2107 -FUNCTION Get_Logical_Unit_Views__ (
 46.2108 -   lu_name_        IN  VARCHAR2) RETURN VARCHAR2
 46.2109 -IS
 46.2110 -   view_array_     object_array;
 46.2111 -   view_list_      VARCHAR2(4000);
 46.2112 -
 46.2113 -   CURSOR get_lu_views IS
 46.2114 -      SELECT view_name
 46.2115 -      FROM dictionary_sys_view_tab
 46.2116 -      WHERE lu_name = lu_name_
 46.2117 -      ORDER BY view_index;
 46.2118 -BEGIN
 46.2119 -   OPEN  get_lu_views;
 46.2120 -   FETCH get_lu_views BULK COLLECT INTO view_array_;
 46.2121 -   CLOSE get_lu_views;
 46.2122 -   IF view_array_.count > 0 THEN
 46.2123 -      FOR i IN Nvl(view_array_.first, 0)..Nvl(view_array_.last, -1) LOOP
 46.2124 -         view_list_ := view_list_||view_array_(i)||field_separator_;
 46.2125 -      END LOOP;
 46.2126 -   END IF;
 46.2127 -   RETURN view_list_;
 46.2128 -END Get_Logical_Unit_Views__;
 46.2129 -
 46.2130 -PROCEDURE Get_Logical_Unit_Packages__ (
 46.2131 -   lu_name_        IN  VARCHAR2,
 46.2132 -   package_list_   OUT VARCHAR2 )
 46.2133 -IS
 46.2134 -BEGIN
 46.2135 -   package_list_ := Get_Logical_Unit_Packages__(lu_name_);
 46.2136 -END Get_Logical_Unit_Packages__;
 46.2137 -
 46.2138 -
 46.2139 -FUNCTION Get_Logical_Unit_Packages__ (
 46.2140 -   lu_name_        IN  VARCHAR2 ) RETURN VARCHAR2
 46.2141 -IS
 46.2142 -   package_array_  object_array;
 46.2143 -   package_list_   VARCHAR2(4000);
 46.2144 -
 46.2145 -   CURSOR get_lu_packages IS
 46.2146 -      SELECT package_name
 46.2147 -      FROM dictionary_sys_package_tab
 46.2148 -      WHERE lu_name = lu_name_
 46.2149 -      ORDER BY package_index;
 46.2150 -BEGIN
 46.2151 -   OPEN  get_lu_packages;
 46.2152 -   FETCH get_lu_packages BULK COLLECT INTO package_array_;
 46.2153 -   CLOSE get_lu_packages;
 46.2154 -   IF package_array_.count > 0 THEN
 46.2155 -      FOR i IN Nvl(package_array_.first, 0)..Nvl(package_array_.last, -1) LOOP
 46.2156 -         package_list_ := package_list_||package_array_(i)||field_separator_;
 46.2157 -      END LOOP;
 46.2158 -   END IF;
 46.2159 -   RETURN package_list_;
 46.2160 -END Get_Logical_Unit_Packages__;
 46.2161 -
 46.2162 -PROCEDURE Get_Logical_Unit_Methods__ (
 46.2163 -   lu_name_        IN  VARCHAR2,
 46.2164 -   method_list_    OUT VARCHAR2,
 46.2165 -   all_methods_    IN  VARCHAR2 DEFAULT 'TRUE' )
 46.2166 -IS
 46.2167 -   method_array_  object_array;
 46.2168 -   package_array_ object_array;
 46.2169 -
 46.2170 -   CURSOR get_all_lu_methods IS
 46.2171 -      SELECT package_name, method_name
 46.2172 -      FROM dictionary_sys_method_tab
 46.2173 -      WHERE lu_name = lu_name_
 46.2174 -      ORDER BY package_name;
 46.2175 -
 46.2176 -   CURSOR get_lu_methods IS
 46.2177 -      SELECT package_name, method_name
 46.2178 -      FROM dictionary_sys_method_tab
 46.2179 -      WHERE lu_name = lu_name_
 46.2180 -      AND method_type = 'N'
 46.2181 -      ORDER BY package_name;
 46.2182 -
 46.2183 -BEGIN
 46.2184 -   IF all_methods_ = 'TRUE' THEN
 46.2185 -      OPEN get_all_lu_methods;
 46.2186 -      FETCH get_all_lu_methods BULK COLLECT INTO package_array_, method_array_;
 46.2187 -      CLOSE get_all_lu_methods;
 46.2188 -   ELSE
 46.2189 -      OPEN get_lu_methods;
 46.2190 -      FETCH get_lu_methods BULK COLLECT INTO package_array_, method_array_;
 46.2191 -      CLOSE get_lu_methods;
 46.2192 -   END IF;
 46.2193 -
 46.2194 -   IF method_array_.count > 0 THEN
 46.2195 -      FOR lu_methods IN Nvl(method_array_.first, 0)..Nvl(method_array_.last, -1) LOOP
 46.2196 -         method_list_ := method_list_||package_array_(lu_methods)||'.'||method_array_(lu_methods)||field_separator_;
 46.2197 -      END LOOP;
 46.2198 -   END IF;
 46.2199 -END Get_Logical_Unit_Methods__;
 46.2200 -
 46.2201 -PROCEDURE Get_LU_Method_Types__ (
 46.2202 -   lu_name_        IN  VARCHAR2,
 46.2203 -   method_list_    OUT VARCHAR2 )
 46.2204 -IS
 46.2205 -   method_array_  object_array;
 46.2206 -   package_array_ object_array;
 46.2207 -   type_array_    object_array;
 46.2208 -
 46.2209 -   CURSOR get_all_lu_methods IS
 46.2210 -      SELECT package_name, method_name, method_type
 46.2211 -      FROM dictionary_sys_method_tab
 46.2212 -      WHERE lu_name = lu_name_
 46.2213 -      ORDER BY package_name;
 46.2214 -
 46.2215 -BEGIN
 46.2216 -   OPEN get_all_lu_methods;
 46.2217 -   FETCH get_all_lu_methods BULK COLLECT INTO package_array_, method_array_, type_array_;
 46.2218 -   CLOSE get_all_lu_methods;
 46.2219 -
 46.2220 -   IF method_array_.count > 0 THEN
 46.2221 -      FOR lu_methods IN Nvl(method_array_.first, 0)..Nvl(method_array_.last, -1) LOOP
 46.2222 -         method_list_ := method_list_||package_array_(lu_methods)||'.'||method_array_(lu_methods)||field_separator_||type_array_(lu_methods)||record_separator_;
 46.2223 -      END LOOP;
 46.2224 -   END IF;
 46.2225 -END Get_LU_Method_Types__;
 46.2226 -
 46.2227 -FUNCTION Get_State_Encode_Method__ (
 46.2228 -   view_name_      IN  VARCHAR2 ) RETURN VARCHAR2
 46.2229 -IS
 46.2230 -BEGIN
 46.2231 -   RETURN(Check_Method_From_View___(view_name_, 'FINITE_STATE_ENCODE__'));
 46.2232 -END Get_State_Encode_Method__;
 46.2233 -
 46.2234 -FUNCTION Get_State_Enumerate_Method__ (
 46.2235 -   view_name_      IN  VARCHAR2 ) RETURN VARCHAR2
 46.2236 -IS
 46.2237 -BEGIN
 46.2238 -   RETURN(Check_Method_From_View___(view_name_, 'ENUMERATE_STATES__'));
 46.2239 -END Get_State_Enumerate_Method__;
 46.2240 -
 46.2241 ------------------------------------------------------------------------------
 46.2242 --------------------- SERVICE SPECIFIC PROTECTED METHODS ---------------------
 46.2243 ------------------------------------------------------------------------------
 46.2244 -
 46.2245 ------------------------------------------------------------------------------
 46.2246 --- Naming conversions for client versus database object names
 46.2247 ------------------------------------------------------------------------------
 46.2248 -
 46.2249 -FUNCTION Dbnametoclientname_ (
 46.2250 -   db_name_ IN VARCHAR2 ) RETURN VARCHAR2
 46.2251 -IS
 46.2252 -   cnt_  NUMBER;
 46.2253 -BEGIN
 46.2254 -   -- Find number of trailing underscores
 46.2255 -   cnt_ := length(db_name_) - length(rtrim(db_name_,'_'));
 46.2256 -   -- Return client name with leading underscores
 46.2257 -   IF (cnt_ = 1) THEN
 46.2258 -      RETURN('_'||replace(initcap(db_name_),'_',''));
 46.2259 -   ELSIF (cnt_ = 2) THEN
 46.2260 -      RETURN('__'||replace(initcap(db_name_),'_',''));
 46.2261 -   END IF;
 46.2262 -   RETURN(replace(initcap(db_name_),'_',''));
 46.2263 -EXCEPTION
 46.2264 -   WHEN OTHERS THEN
 46.2265 -      RETURN(NULL);
 46.2266 -END DbNameToClientName_;
 46.2267 -
 46.2268 -
 46.2269 -FUNCTION Clientnametodbname_ (
 46.2270 -   client_name_ IN VARCHAR2 ) RETURN VARCHAR2
 46.2271 -IS
 46.2272 -   cnt_   NUMBER;
 46.2273 -   index_ NUMBER;
 46.2274 -   temp_  VARCHAR2(30);
 46.2275 -   char_  VARCHAR2(1);
 46.2276 -BEGIN
 46.2277 -   -- Find number of leading underscores
 46.2278 -   cnt_ := length(client_name_) - length(ltrim(client_name_,'_'));
 46.2279 -   -- Add intermediate underscores where needed
 46.2280 -   FOR index_ IN cnt_+1..length(client_name_) LOOP
 46.2281 -      char_ := substr(client_name_,index_,1);
 46.2282 -      IF (char_ between 'A' and 'Z')  AND (temp_ IS NOT NULL) THEN
 46.2283 -         temp_ := temp_||'_'||char_;
 46.2284 -      ELSE
 46.2285 -         temp_ := temp_||char_;
 46.2286 -      END IF;
 46.2287 -   END LOOP;
 46.2288 -   -- Return database name with trailing underscores
 46.2289 -   IF (cnt_ = 1) THEN
 46.2290 -      RETURN(ltrim(upper(temp_),'_')||'__');
 46.2291 -   ELSIF (cnt_ = 2) THEN
 46.2292 -      RETURN(ltrim(upper(temp_),'_')||'__');
 46.2293 -   END IF;
 46.2294 -   RETURN(ltrim(upper(temp_),'_'));
 46.2295 -EXCEPTION
 46.2296 -   WHEN OTHERS THEN
 46.2297 -      RETURN(NULL);
 46.2298 -END ClientNameToDbName_;
 46.2299 -
 46.2300 ------------------------------------------------------------------------------
 46.2301 --- Comment decoding routines for LU-dictionary
 46.2302 ------------------------------------------------------------------------------
 46.2303 -
 46.2304 -FUNCTION Comment_Value_ (
 46.2305 -   name_    IN VARCHAR2,
 46.2306 -   comment_ IN VARCHAR2 ) RETURN VARCHAR2
 46.2307 -IS
 46.2308 -   nlen_ NUMBER;
 46.2309 -   from_ NUMBER;
 46.2310 -   to_   NUMBER;
 46.2311 -BEGIN
 46.2312 -   -- Find keyword name position within comment
 46.2313 -   nlen_ := length(name_);
 46.2314 -   -- New fix to support ambigous names in report definitions in IFS/Info Services
 46.2315 -   from_ := instr(upper('^'||comment_), '^'||name_||'=');
 46.2316 -   -- If found, return value from comment
 46.2317 -   IF (from_ > 0) THEN
 46.2318 -      to_ := instr(comment_, '^', from_);
 46.2319 -      IF ( to_ = 0 ) THEN
 46.2320 -        to_ := length(comment_) + 1;
 46.2321 -      END IF;
 46.2322 -      RETURN(substr(comment_, from_+nlen_+1, to_-from_-nlen_-1));
 46.2323 -   -- If not found, return null value
 46.2324 -   ELSE
 46.2325 -      RETURN(NULL);
 46.2326 -   END IF;
 46.2327 -END Comment_Value_;
 46.2328 -
 46.2329 ------------------------------------------------------------------------------
 46.2330 --- Prompt fetching routines, mainly used for localization
 46.2331 ------------------------------------------------------------------------------
 46.2332 -
 46.2333 -FUNCTION Get_View_Prompt_ (
 46.2334 -   view_name_        IN VARCHAR2 ) RETURN VARCHAR2
 46.2335 -IS
 46.2336 -   prompt_ VARCHAR2(200);
 46.2337 -   CURSOR get_prompt IS
 46.2338 -      SELECT view_prompt
 46.2339 -      FROM   dictionary_sys_view_tab
 46.2340 -      WHERE  view_name = view_name_;
 46.2341 -BEGIN
 46.2342 -   OPEN get_prompt;
 46.2343 -   FETCH get_prompt INTO prompt_;
 46.2344 -   CLOSE get_prompt;
 46.2345 -   RETURN prompt_;
 46.2346 -END Get_View_Prompt_;
 46.2347 -
 46.2348 -FUNCTION Get_Lu_Prompt_ (
 46.2349 -   lu_name_        IN VARCHAR2 ) RETURN VARCHAR2
 46.2350 -IS
 46.2351 -   prompt_              VARCHAR2(200);
 46.2352 -   CURSOR get_prompt IS
 46.2353 -      SELECT lu_prompt
 46.2354 -      FROM   dictionary_sys_tab
 46.2355 -      WHERE  lu_name = lu_name_;
 46.2356 -BEGIN
 46.2357 -   -- Check that inparameters make sense before proceeding.
 46.2358 -   IF lu_name_ IS NULL THEN
 46.2359 -      RETURN NULL;
 46.2360 -   END IF;
 46.2361 -
 46.2362 -   OPEN get_prompt;
 46.2363 -   FETCH get_prompt INTO prompt_;
 46.2364 -   CLOSE get_prompt;
 46.2365 -   RETURN prompt_;
 46.2366 -END Get_Lu_Prompt_;
 46.2367 -
 46.2368 -FUNCTION Get_Item_Prompt_ (
 46.2369 -   lu_name_        IN VARCHAR2,
 46.2370 -   view_name_      IN VARCHAR2,
 46.2371 -   item_name_      IN VARCHAR2 ) RETURN VARCHAR2
 46.2372 -IS
 46.2373 -   view_   VARCHAR2(30) := view_name_;
 46.2374 -   prompt_ dictionary_sys_view_column_tab.column_prompt%TYPE;
 46.2375 -
 46.2376 -   CURSOR get_prompt IS
 46.2377 -      SELECT column_prompt
 46.2378 -      FROM   dictionary_sys_view_column_tab
 46.2379 -      WHERE lu_name = lu_name_
 46.2380 -      AND view_name = view_
 46.2381 -      AND column_name = item_name_;
 46.2382 -BEGIN
 46.2383 -   IF (view_ IS NULL) THEN
 46.2384 -      view_ := ClientNameToDbName_(lu_name_);
 46.2385 -   END IF;
 46.2386 -   OPEN get_prompt;
 46.2387 -   FETCH get_prompt INTO prompt_;
 46.2388 -   CLOSE get_prompt;
 46.2389 -   RETURN prompt_;
 46.2390 -END Get_Item_Prompt_;
 46.2391 -
 46.2392 ------------------------------------------------------------------------------
 46.2393 --- Property fetching routines for run-time use (protected)
 46.2394 ------------------------------------------------------------------------------
 46.2395 -
 46.2396 -PROCEDURE Get_Logical_Unit_Keys_ (
 46.2397 -   name_list_  OUT VARCHAR2,
 46.2398 -   value_list_ OUT VARCHAR2,
 46.2399 -   lu_name_    IN  VARCHAR2,
 46.2400 -   objid_      IN  VARCHAR2 DEFAULT NULL )
 46.2401 -IS
 46.2402 -   dummy_     NUMBER;
 46.2403 -   stmt_      VARCHAR2(2000);
 46.2404 -   view_      VARCHAR2(30);
 46.2405 -   temp_list_ VARCHAR2(32000);
 46.2406 -
 46.2407 -   -- To check that the suggested base view actually contain an objid...
 46.2408 -   CURSOR find_objid (lu_name_ IN VARCHAR2, view_name_ IN VARCHAR2) IS
 46.2409 -      SELECT 1
 46.2410 -      FROM   dictionary_sys_view_column_tab
 46.2411 -      WHERE  lu_name = lu_name_
 46.2412 -      AND    view_name = view_name_
 46.2413 -      AND    column_name = 'OBJID';
 46.2414 -
 46.2415 -   CURSOR get_keys (view_name_ IN VARCHAR2) IS
 46.2416 -      SELECT column_name
 46.2417 -      FROM dictionary_sys_view_column_tab
 46.2418 -      WHERE lu_name = lu_name_
 46.2419 -      AND view_name = view_name_
 46.2420 -      AND type_flag IN ('P','K')
 46.2421 -      ORDER BY column_index;
 46.2422 -BEGIN
 46.2423 -   General_SYS.Init_Method(service_, '&PKG', 'Get_Logical_Unit_Keys_');
 46.2424 -
 46.2425 -   name_list_  := NULL;
 46.2426 -   value_list_ := NULL;
 46.2427 -   -- Fetch the view name from LU-dictionary
 46.2428 -   view_ := Get_Base_View(lu_name_);
 46.2429 -   -- Verify that this view contains an objid
 46.2430 -   OPEN find_objid(lu_name_, view_);
 46.2431 -   FETCH find_objid INTO dummy_;
 46.2432 -   IF find_objid%FOUND THEN
 46.2433 -      CLOSE find_objid;
 46.2434 -      -- View found, fetch the keys!
 46.2435 -      FOR keyrec IN get_keys(view_) LOOP
 46.2436 -         temp_list_ := temp_list_||keyrec.column_name||text_separator_;
 46.2437 -      END LOOP;
 46.2438 -      name_list_ := temp_list_;
 46.2439 -      IF (objid_ IS NOT NULL) THEN
 46.2440 -         -- Fetch instance key information by using dynamic SQL
 46.2441 -         BEGIN
 46.2442 -            temp_list_ := substr(temp_list_, 1, length(temp_list_) - 1);
 46.2443 -            temp_list_ := REPLACE(temp_list_, text_separator_, '||''^''||')||'||''^''';
 46.2444 -            stmt_ := 'SELECT '|| temp_list_ ||' FROM '||view_||' WHERE OBJID = :objid_';
 46.2445 -            Assert_SYS.Assert_Is_View(view_);
 46.2446 -            -- ifs_assert_safe utgulk 20060105
 46.2447 -            EXECUTE IMMEDIATE stmt_ INTO value_list_ USING objid_;
 46.2448 -        EXCEPTION
 46.2449 -           WHEN OTHERS THEN
 46.2450 -              value_list_ := NULL;
 46.2451 -         END;
 46.2452 -      END IF;
 46.2453 -   ELSE
 46.2454 -      CLOSE find_objid;
 46.2455 -   END IF;
 46.2456 -END Get_Logical_Unit_Keys_;
 46.2457 -
 46.2458 --- Could not completely rely on cached information, since table information is not extracted to the cache
 46.2459 -PROCEDURE Get_Logical_Unit_Tables_ (
 46.2460 -   table_list_ OUT VARCHAR2,
 46.2461 -   lu_name_    IN  VARCHAR2 )
 46.2462 -IS
 46.2463 -   view_name_ VARCHAR2(30);
 46.2464 -   app_owner_ VARCHAR2(30);
 46.2465 -   CURSOR view_tables IS
 46.2466 -      SELECT nvl(referenced_name,'') name
 46.2467 -         FROM   user_dependencies
 46.2468 -         WHERE  referenced_owner = app_owner_
 46.2469 -         AND    referenced_type = 'TABLE'
 46.2470 -         AND    name = view_name_
 46.2471 -         AND    type = 'VIEW'
 46.2472 -         UNION
 46.2473 -         SELECT nvl(referenced_name,'') name
 46.2474 -         FROM   user_dependencies
 46.2475 -         WHERE  referenced_owner = app_owner_
 46.2476 -         AND    referenced_type = 'TABLE'
 46.2477 -         AND    name = view_name_||'_API'
 46.2478 -         AND    type = 'PACKAGE BODY'
 46.2479 -         UNION
 46.2480 -         SELECT nvl(table_name,'') name
 46.2481 -         FROM user_tables
 46.2482 -         WHERE table_name = view_name_||'_TAB';
 46.2483 -BEGIN
 46.2484 -   -- Check that inparameters make sense before proceeding.
 46.2485 -   IF lu_name_ IS NULL THEN
 46.2486 -      RETURN;
 46.2487 -   END IF;
 46.2488 -
 46.2489 -   app_owner_ := Fnd_Session_API.Get_App_Owner;
 46.2490 -   view_name_ := Get_Base_View(lu_name_);
 46.2491 -   FOR t IN view_tables LOOP
 46.2492 -      table_list_ := table_list_||t.name||field_separator_;
 46.2493 -   END LOOP;
 46.2494 -END Get_Logical_Unit_Tables_;
 46.2495 -
 46.2496 --- Introduced new method and implemented to use dictionary cache.
 46.2497 -PROCEDURE Enum_Modules_ (
 46.2498 -   module_list_ OUT VARCHAR2 )
 46.2499 -IS
 46.2500 -   CURSOR modules IS
 46.2501 -      SELECT DISTINCT module
 46.2502 -      FROM   dictionary_sys_tab
 46.2503 -      ORDER BY module;
 46.2504 -BEGIN
 46.2505 -   FOR module IN modules LOOP
 46.2506 -      module_list_ := module_list_||module.module||field_separator_;
 46.2507 -   END LOOP;
 46.2508 -END Enum_Modules_;
 46.2509 -
 46.2510 -PROCEDURE Enum_Module_Names_ (
 46.2511 -   module_list_ OUT VARCHAR2,
 46.2512 -   name_list_   OUT VARCHAR2 )
 46.2513 -IS
 46.2514 -   module_array_  object_array;
 46.2515 -   name_array_    lu_struct_type;
 46.2516 -
 46.2517 -   CURSOR modules IS
 46.2518 -      SELECT module, name
 46.2519 -      FROM   module_tab
 46.2520 -      ORDER BY name;
 46.2521 -BEGIN
 46.2522 -   OPEN  modules;
 46.2523 -   FETCH modules BULK COLLECT INTO module_array_, name_array_;
 46.2524 -   CLOSE modules;
 46.2525 -   IF module_array_.count > 0 THEN
 46.2526 -      FOR i IN Nvl(module_array_.first, 0)..Nvl(module_array_.last, -1) LOOP
 46.2527 -         module_list_ := module_list_||module_array_(i)||field_separator_;
 46.2528 -         name_list_   := name_list_||name_array_(i)||field_separator_;
 46.2529 -      END LOOP;
 46.2530 -   END IF;
 46.2531 -END Enum_Module_Names_;
 46.2532 -
 46.2533 --- Modified implementation to use dictionary cache. Designtime version moved to Design_SYS
 46.2534 -PROCEDURE Enum_Module_All_Logical_Units_ (
 46.2535 -   lu_list_ OUT VARCHAR2,
 46.2536 -   module_  IN  VARCHAR2 )
 46.2537 -IS
 46.2538 -   lu_array_  object_array;
 46.2539 -
 46.2540 -   CURSOR units IS
 46.2541 -      SELECT lu_name
 46.2542 -      FROM   dictionary_sys_tab
 46.2543 -      WHERE  module = module_
 46.2544 -      AND lu_type IN ('L', 'S')
 46.2545 -      ORDER BY lu_name;
 46.2546 -BEGIN
 46.2547 -   OPEN  units;
 46.2548 -   FETCH units BULK COLLECT INTO lu_array_;
 46.2549 -   CLOSE units;
 46.2550 -   IF lu_array_.count > 0 THEN
 46.2551 -      FOR i IN Nvl(lu_array_.first, 0)..Nvl(lu_array_.last, -1) LOOP
 46.2552 -         lu_list_ := lu_list_||lu_array_(i)||field_separator_;
 46.2553 -      END LOOP;
 46.2554 -   END IF;
 46.2555 -END Enum_Module_All_Logical_Units_;
 46.2556 -
 46.2557 --- Modified implementation to use dictionary cache. Designtime version moved to Design_SYS
 46.2558 -PROCEDURE Enum_Module_Logical_Units_ (
 46.2559 -   lu_list_ OUT VARCHAR2,
 46.2560 -   module_  IN  VARCHAR2 )
 46.2561 -IS
 46.2562 -   lu_array_  object_array;
 46.2563 -
 46.2564 -   CURSOR units IS
 46.2565 -      SELECT lu_name
 46.2566 -      FROM   dictionary_sys_tab
 46.2567 -      WHERE  module = module_
 46.2568 -      AND lu_type = 'L'
 46.2569 -      ORDER BY lu_name;
 46.2570 -BEGIN
 46.2571 -   OPEN  units;
 46.2572 -   FETCH units BULK COLLECT INTO lu_array_;
 46.2573 -   CLOSE units;
 46.2574 -   IF lu_array_.count > 0 THEN
 46.2575 -      FOR i IN Nvl(lu_array_.first, 0)..Nvl(lu_array_.last, -1) LOOP
 46.2576 -         lu_list_ := lu_list_||lu_array_(i)||field_separator_;
 46.2577 -      END LOOP;
 46.2578 -   END IF;
 46.2579 -END Enum_Module_Logical_Units_;
 46.2580 -
 46.2581 --- Modified implementation using dictionary cache.
 46.2582 -PROCEDURE Enum_Module_System_Services_ (
 46.2583 -   sys_list_ OUT VARCHAR2,
 46.2584 -   module_   IN  VARCHAR2 )
 46.2585 -IS
 46.2586 -   CURSOR units IS
 46.2587 -      SELECT lu_name
 46.2588 -      FROM   dictionary_sys_tab
 46.2589 -      WHERE  module = module_
 46.2590 -      AND lu_type = 'S'
 46.2591 -      ORDER BY lu_name;
 46.2592 -BEGIN
 46.2593 -   FOR unit IN units LOOP
 46.2594 -      sys_list_ := sys_list_||unit.lu_name||field_separator_;
 46.2595 -   END LOOP;
 46.2596 -END Enum_Module_System_Services_;
 46.2597 -
 46.2598 ------------------------------------------------------------------------------
 46.2599 --- Runtime performance refreshment routines
 46.2600 ------------------------------------------------------------------------------
 46.2601 -
 46.2602 --- Obsolete!
 46.2603 -PROCEDURE Activate_Language_Refresh_
 46.2604 -IS
 46.2605 -BEGIN
 46.2606 -   General_SYS.Init_Method(service_, '&PKG', 'Activate_Language_Refresh_');
 46.2607 -   Error_SYS.Appl_General(service_, 'LANGERR: The method Activate_Language_Refresh_ (Change Server Language) is obsolete. Please log on again to change language.');
 46.2608 -END Activate_Language_Refresh_;
 46.2609 -
 46.2610 -PROCEDURE Rebuild_Dictionary_Storage_ (
 46.2611 -   dummy_        IN NUMBER,
 46.2612 -   refresh_mode_ IN VARCHAR2 DEFAULT 'PARTIAL' )
 46.2613 -IS
 46.2614 -   error_text_ CLOB;
 46.2615 -BEGIN
 46.2616 -   error_text_ := Rebuild_Dictionary_Storage___(dummy_, refresh_mode_, FALSE);
 46.2617 -END Rebuild_Dictionary_Storage_;
 46.2618 -
 46.2619 -PROCEDURE Rebuild_Dictionary_Storage_ (
 46.2620 -   error_text_   IN OUT NOCOPY CLOB,
 46.2621 -   dummy_        IN NUMBER,
 46.2622 -   refresh_mode_ IN VARCHAR2 DEFAULT 'PARTIAL' )
 46.2623 -IS
 46.2624 -BEGIN
 46.2625 -   error_text_ := Rebuild_Dictionary_Storage___(dummy_, refresh_mode_, TRUE);
 46.2626 -END Rebuild_Dictionary_Storage_;
 46.2627 -
 46.2628 -PROCEDURE Check_Dictionary_Storage_ (
 46.2629 -   rebuild_needed_ OUT NUMBER )
 46.2630 -IS
 46.2631 -   dummy_       NUMBER;
 46.2632 -   last_update_ DATE;
 46.2633 -
 46.2634 -   CURSOR get_last_update IS
 46.2635 -      SELECT max(rowversion)
 46.2636 -      FROM dictionary_sys_tab;
 46.2637 -
 46.2638 -   CURSOR get_objects(last_cache_update_ IN DATE) IS
 46.2639 -      SELECT 1
 46.2640 -      FROM user_objects
 46.2641 -      WHERE (object_type LIKE 'PACKAGE%'
 46.2642 -         AND timestamp > to_char(last_cache_update_, 'RRRR-MM-DD:HH24:MI:SS')
 46.2643 -         AND substr(object_name, -4) IN ('_API', '_RPI', '_SYS'))
 46.2644 -      OR    (object_type IN ('VIEW')
 46.2645 -         AND last_ddl_time > last_cache_update_);
 46.2646 -BEGIN
 46.2647 -   OPEN get_last_update;
 46.2648 -   FETCH get_last_update INTO last_update_;
 46.2649 -   IF (last_update_ IS NULL) THEN
 46.2650 -      rebuild_needed_ := 1;               -- Return TRUE
 46.2651 -   ELSE
 46.2652 -      OPEN get_objects(last_update_);
 46.2653 -      FETCH get_objects INTO dummy_;
 46.2654 -      IF (get_objects%NOTFOUND) THEN
 46.2655 -         rebuild_needed_ := 0;            -- Return FALSE
 46.2656 -      ELSE
 46.2657 -         rebuild_needed_ := 1;            -- Return TRUE
 46.2658 -      END IF;
 46.2659 -      CLOSE get_objects;
 46.2660 -   END IF;
 46.2661 -   CLOSE get_last_update;
 46.2662 -END Check_Dictionary_Storage_;
 46.2663 -
 46.2664 ------------------------------------------------------------------------------
 46.2665 --------------------- SERVICE SPECIFIC PUBLIC METHODS ------------------------
 46.2666 ------------------------------------------------------------------------------
 46.2667 -
 46.2668 ------------------------------------------------------------------------------
 46.2669 --- Public runtime methods for dictionary information support
 46.2670 ------------------------------------------------------------------------------
 46.2671 -
 46.2672 -FUNCTION Get_Base_View (
 46.2673 -   lu_name_        IN VARCHAR2 ) RETURN VARCHAR2
 46.2674 -IS
 46.2675 -   temp_ VARCHAR2(30);
 46.2676 -   CURSOR get_view IS
 46.2677 -      SELECT view_name
 46.2678 -      FROM   dictionary_sys_view_tab
 46.2679 -      WHERE lu_name = lu_name_
 46.2680 -      AND view_type = 'B';
 46.2681 -BEGIN
 46.2682 -   OPEN get_view;
 46.2683 -   FETCH get_view INTO temp_;
 46.2684 -   CLOSE get_view;
 46.2685 -   RETURN temp_;
 46.2686 -END Get_Base_View;
 46.2687 -
 46.2688 -FUNCTION Get_Component (
 46.2689 -   object_name_ IN VARCHAR2,
 46.2690 -   object_type_ IN VARCHAR2 ) RETURN VARCHAR2
 46.2691 -IS
 46.2692 -   component_ VARCHAR2(6);
 46.2693 -   CURSOR get_pkg_component IS
 46.2694 -      SELECT d.module
 46.2695 -      FROM   dictionary_sys_tab d, dictionary_sys_package_tab p
 46.2696 -      WHERE  p.package_name = upper(object_name_)
 46.2697 -      AND    p.lu_name = d.lu_name;
 46.2698 -
 46.2699 -   CURSOR get_view_component IS
 46.2700 -      SELECT d.module
 46.2701 -      FROM   dictionary_sys_tab d, dictionary_sys_view_tab v
 46.2702 -      WHERE  v.view_name = upper(object_name_)
 46.2703 -      AND    v.lu_name = d.lu_name;
 46.2704 -BEGIN
 46.2705 -   IF upper(object_type_) = 'PACKAGE' THEN
 46.2706 -      OPEN get_pkg_component;
 46.2707 -      FETCH get_pkg_component INTO component_;
 46.2708 -      CLOSE get_pkg_component;
 46.2709 -   ELSIF upper(object_type_) = 'VIEW' THEN
 46.2710 -      OPEN get_view_component;
 46.2711 -      FETCH get_view_component INTO component_;
 46.2712 -      CLOSE get_view_component;
 46.2713 -   ELSE
 46.2714 -      component_ := NULL;
 46.2715 -   END IF;
 46.2716 -   RETURN component_;
 46.2717 -END Get_Component;
 46.2718 -
 46.2719 -FUNCTION Get_Logical_Unit (
 46.2720 -   object_name_ IN VARCHAR2,
 46.2721 -   object_type_ IN VARCHAR2 ) RETURN VARCHAR2
 46.2722 -IS
 46.2723 -   lu_name_ VARCHAR2(30);
 46.2724 -   CURSOR get_pkg_lu IS
 46.2725 -      SELECT lu_name
 46.2726 -      FROM   dictionary_sys_package_tab
 46.2727 -      WHERE  package_name = upper(object_name_);
 46.2728 -
 46.2729 -   CURSOR get_view_lu IS
 46.2730 -      SELECT lu_name
 46.2731 -      FROM   dictionary_sys_view_tab
 46.2732 -      WHERE  view_name = upper(object_name_);
 46.2733 -BEGIN
 46.2734 -   IF upper(object_type_) = 'PACKAGE' THEN
 46.2735 -      OPEN get_pkg_lu;
 46.2736 -      FETCH get_pkg_lu INTO lu_name_;
 46.2737 -      CLOSE get_pkg_lu;
 46.2738 -   ELSIF upper(object_type_) = 'VIEW' THEN
 46.2739 -      OPEN get_view_lu;
 46.2740 -      FETCH get_view_lu INTO lu_name_;
 46.2741 -      CLOSE get_view_lu;
 46.2742 -   ELSE
 46.2743 -      lu_name_ := NULL;
 46.2744 -   END IF;
 46.2745 -   RETURN lu_name_;
 46.2746 -END Get_Logical_Unit;
 46.2747 -
 46.2748 -FUNCTION Get_Logical_Unit_Module (
 46.2749 -   lu_name_ IN VARCHAR2 ) RETURN VARCHAR2
 46.2750 -IS
 46.2751 -   module_ VARCHAR2(6);
 46.2752 -   CURSOR get_module IS
 46.2753 -      SELECT module
 46.2754 -      FROM   dictionary_sys_lu
 46.2755 -      WHERE  lu_name = lu_name_;
 46.2756 -BEGIN
 46.2757 -   OPEN  get_module;
 46.2758 -   FETCH get_module INTO module_;
 46.2759 -   CLOSE get_module;
 46.2760 -   RETURN module_;
 46.2761 -END Get_Logical_Unit_Module;
 46.2762 -
 46.2763 -FUNCTION Package_Is_Installed (
 46.2764 -   package_name_ IN VARCHAR2 ) RETURN BOOLEAN
 46.2765 -IS
 46.2766 -   dummy_ NUMBER;
 46.2767 -   CURSOR get_pkg IS
 46.2768 -      SELECT 1
 46.2769 -      FROM   dictionary_sys_package_tab
 46.2770 -      WHERE  package_name = upper(package_name_);
 46.2771 -BEGIN
 46.2772 -   -- Reroute to Database_SYS during installation
 46.2773 -   IF installation_ THEN
 46.2774 -      RETURN(Database_SYS.Package_Exist(package_name_));
 46.2775 -   ELSE
 46.2776 -      OPEN  get_pkg;
 46.2777 -      FETCH get_pkg INTO dummy_;
 46.2778 -      IF (get_pkg%FOUND) THEN
 46.2779 -         CLOSE get_pkg;
 46.2780 -         RETURN TRUE;
 46.2781 -      ELSE
 46.2782 -         CLOSE get_pkg;
 46.2783 -         RETURN FALSE;
 46.2784 -      END IF;
 46.2785 -   END IF;
 46.2786 -END Package_Is_Installed;
 46.2787 -
 46.2788 -FUNCTION Method_Is_Installed (
 46.2789 -   package_name_ IN VARCHAR2,
 46.2790 -   method_name_  IN VARCHAR2 ) RETURN BOOLEAN
 46.2791 -IS
 46.2792 -   dummy_ NUMBER;
 46.2793 -   CURSOR get_method IS
 46.2794 -      SELECT 1
 46.2795 -      FROM   dictionary_sys_method_tab
 46.2796 -      WHERE  package_name = upper(package_name_)
 46.2797 -      AND    method_name  = initcap(method_name_);
 46.2798 -BEGIN
 46.2799 -   -- Reroute to Database_SYS during installation
 46.2800 -   IF installation_ THEN
 46.2801 -      RETURN(Database_SYS.Method_Exist(package_name_, method_name_));
 46.2802 -   ELSE
 46.2803 -      OPEN  get_method;
 46.2804 -      FETCH get_method INTO dummy_;
 46.2805 -      IF (get_method%FOUND) THEN
 46.2806 -         CLOSE get_method;
 46.2807 -         RETURN TRUE;
 46.2808 -      ELSE
 46.2809 -         CLOSE get_method;
 46.2810 -         RETURN FALSE;
 46.2811 -      END IF;
 46.2812 -   END IF;
 46.2813 -END Method_Is_Installed;
 46.2814 -
 46.2815 -FUNCTION View_Is_Installed (
 46.2816 -   view_name_ IN VARCHAR2 ) RETURN BOOLEAN
 46.2817 -IS
 46.2818 -   dummy_ NUMBER;
 46.2819 -   CURSOR get_view IS
 46.2820 -      SELECT 1
 46.2821 -      FROM   dictionary_sys_view_tab
 46.2822 -      WHERE  view_name = upper(view_name_);
 46.2823 -BEGIN
 46.2824 -   -- Reroute to Database_SYS during installation
 46.2825 -   IF installation_ THEN
 46.2826 -      RETURN(Database_SYS.View_Exist(view_name_));
 46.2827 -   ELSE
 46.2828 -      OPEN  get_view;
 46.2829 -      FETCH get_view INTO dummy_;
 46.2830 -      IF (get_view%FOUND) THEN
 46.2831 -         CLOSE get_view;
 46.2832 -         RETURN TRUE;
 46.2833 -      ELSE
 46.2834 -         CLOSE get_view;
 46.2835 -         RETURN FALSE;
 46.2836 -      END IF;
 46.2837 -   END IF;
 46.2838 -END View_Is_Installed;
 46.2839 -
 46.2840 -FUNCTION Logical_Unit_Is_Installed (
 46.2841 -   lu_name_ IN VARCHAR2 ) RETURN BOOLEAN
 46.2842 -IS
 46.2843 -   dummy_          NUMBER;
 46.2844 -   CURSOR get_lu IS
 46.2845 -      SELECT 1
 46.2846 -      FROM   dictionary_sys_tab
 46.2847 -      WHERE  lu_name = lu_name_;
 46.2848 -BEGIN
 46.2849 -   -- Reroute to Database_SYS during installation
 46.2850 -   IF installation_ THEN
 46.2851 -      RETURN(Database_SYS.Package_Exist(Clientnametodbname_(lu_name_)||'_API'));
 46.2852 -   ELSE
 46.2853 -      OPEN  get_lu;
 46.2854 -      FETCH get_lu INTO dummy_;
 46.2855 -      IF (get_lu%FOUND) THEN
 46.2856 -         CLOSE get_lu;
 46.2857 -         RETURN TRUE;
 46.2858 -      ELSE
 46.2859 -         CLOSE get_lu;
 46.2860 -         RETURN FALSE;
 46.2861 -      END IF;
 46.2862 -   END IF;
 46.2863 -END Logical_Unit_Is_Installed;
 46.2864 -
 46.2865 -FUNCTION Component_Is_Installed (
 46.2866 -   component_ IN VARCHAR2,
 46.2867 -   version_   IN VARCHAR2 DEFAULT NULL ) RETURN BOOLEAN
 46.2868 -IS
 46.2869 -   dummy_ NUMBER;
 46.2870 -   CURSOR get_component IS
 46.2871 -      SELECT 1
 46.2872 -      FROM   module
 46.2873 -      WHERE  module = upper(component_)
 46.2874 -      AND    upper(version) LIKE nvl(upper(version_), '%');
 46.2875 -BEGIN
 46.2876 -   OPEN  get_component;
 46.2877 -   FETCH get_component INTO dummy_;
 46.2878 -   IF (get_component%FOUND) THEN
 46.2879 -      CLOSE get_component;
 46.2880 -      RETURN TRUE;
 46.2881 -   ELSE
 46.2882 -      CLOSE get_component;
 46.2883 -      RETURN FALSE;
 46.2884 -   END IF;
 46.2885 -END Component_Is_Installed;
 46.2886 -
 46.2887 -FUNCTION Package_Is_Installed_Num (
 46.2888 -   package_name_ IN VARCHAR2 ) RETURN NUMBER
 46.2889 -IS
 46.2890 -BEGIN
 46.2891 -   IF Package_Is_Installed(package_name_) THEN
 46.2892 -      RETURN (1);
 46.2893 -   ELSE
 46.2894 -      RETURN (0);
 46.2895 -   END IF;
 46.2896 -END Package_Is_Installed_Num;
 46.2897 -
 46.2898 -FUNCTION Method_Is_Installed_Num (
 46.2899 -   package_name_ IN VARCHAR2,
 46.2900 -   method_name_  IN VARCHAR2 ) RETURN NUMBER
 46.2901 -IS
 46.2902 -BEGIN
 46.2903 -   IF Method_Is_Installed(package_name_, method_name_) THEN
 46.2904 -      RETURN (1);
 46.2905 -   ELSE
 46.2906 -      RETURN (0);
 46.2907 -   END IF;
 46.2908 -END Method_Is_Installed_Num;
 46.2909 -
 46.2910 -FUNCTION View_Is_Installed_Num (
 46.2911 -   view_name_ IN VARCHAR2 ) RETURN NUMBER
 46.2912 -IS
 46.2913 -BEGIN
 46.2914 -   IF View_Is_Installed(view_name_) THEN
 46.2915 -      RETURN (1);
 46.2916 -   ELSE
 46.2917 -      RETURN (0);
 46.2918 -   END IF;
 46.2919 -END View_Is_Installed_Num;
 46.2920 -
 46.2921 -FUNCTION Logical_Unit_Is_Installed_Num (
 46.2922 -   lu_name_ IN VARCHAR2 ) RETURN NUMBER
 46.2923 -IS
 46.2924 -BEGIN
 46.2925 -   IF Logical_Unit_Is_Installed(lu_name_) THEN
 46.2926 -      RETURN (1);
 46.2927 -   ELSE
 46.2928 -      RETURN (0);
 46.2929 -   END IF;
 46.2930 -END Logical_Unit_Is_Installed_Num;
 46.2931 -
 46.2932 -FUNCTION Component_Is_Installed_Num (
 46.2933 -   component_ IN VARCHAR2,
 46.2934 -   version_   IN VARCHAR2 DEFAULT NULL ) RETURN NUMBER
 46.2935 -IS
 46.2936 -BEGIN
 46.2937 -   IF Component_Is_Installed(component_, version_) THEN
 46.2938 -      RETURN (1);
 46.2939 -   ELSE
 46.2940 -      RETURN (0);
 46.2941 -   END IF;
 46.2942 -END Component_Is_Installed_Num;
 46.2943 -
 46.2944 -FUNCTION Get_No_Overloads(package_name_ VARCHAR2,
 46.2945 -                          method_name_  VARCHAR2) RETURN NUMBER
 46.2946 -IS
 46.2947 -   CURSOR get_no_overloads_ IS
 46.2948 -      SELECT MAX(overload)
 46.2949 -      FROM dictionary_sys_argument_tab
 46.2950 -      WHERE package_name = package_name_
 46.2951 -        AND method_name = method_name_;
 46.2952 -
 46.2953 -      count_      NUMBER;
 46.2954 -BEGIN
 46.2955 -   count_:=NULL;
 46.2956 -   IF package_name_ IS NULL OR method_name_ IS NULL THEN
 46.2957 ---      Error_SYS.Appl_General(service_, 'NON_EXISTING_METHOD: [:P1,:P2] method is non existing method', package_name_, method_name_);
 46.2958 -      RETURN NULL;
 46.2959 -   END IF;
 46.2960 -   OPEN get_no_overloads_;
 46.2961 -   FETCH get_no_overloads_ INTO count_;
 46.2962 -   IF get_no_overloads_%NOTFOUND THEN
 46.2963 ---      Error_SYS.Appl_General(service_, 'NON_EXISTING_METHOD: [:P1,:P2] method is non existing method', package_name_, method_name_);
 46.2964 -      RETURN NULL;
 46.2965 -   END IF;
 46.2966 -   CLOSE get_no_overloads_;
 46.2967 -   RETURN count_;
 46.2968 -END Get_No_Overloads;
 46.2969 -
 46.2970 -FUNCTION Get_No_Arguments(package_name_ VARCHAR2,
 46.2971 -                          method_name_  VARCHAR2) RETURN  NUMBER
 46.2972 -IS
 46.2973 -   CURSOR get_no_args_ IS
 46.2974 -      SELECT count(*) no_args
 46.2975 -      FROM dictionary_sys_argument_tab
 46.2976 -      WHERE package_name = package_name_
 46.2977 -        AND method_name = method_name_
 46.2978 -      GROUP BY package_name, method_name,overload;
 46.2979 -
 46.2980 -      count_      NUMBER;
 46.2981 -BEGIN
 46.2982 -   count_:=NULL;
 46.2983 -   IF package_name_ IS NULL OR method_name_ IS NULL THEN
 46.2984 ---      Error_SYS.Appl_General(service_, 'NON_EXISTING_METHOD: [:P1,:P2] method is non existing method', package_name_, method_name_);
 46.2985 -      RETURN NULL;
 46.2986 -   END IF;
 46.2987 -   OPEN get_no_args_;
 46.2988 -   FETCH get_no_args_ INTO count_;
 46.2989 -   IF get_no_args_%NOTFOUND THEN
 46.2990 ---      Error_SYS.Appl_General(service_, 'NON_EXISTING_METHOD: [:P1,:P2] method is non existing method', package_name_, method_name_);
 46.2991 -      RETURN NULL;
 46.2992 -   END IF;
 46.2993 -   CLOSE get_no_args_;
 46.2994 -   RETURN count_;
 46.2995 -END Get_No_Arguments;
 46.2996 -
 46.2997 -FUNCTION Get_Min_No_Arguments(package_name_ VARCHAR2,
 46.2998 -                              method_name_  VARCHAR2) RETURN NUMBER
 46.2999 -IS
 46.3000 -   CURSOR get_min_no_args_ IS
 46.3001 -      SELECT MIN(no_args)
 46.3002 -      FROM (SELECT package_name, method_name, count(*) no_args
 46.3003 -            FROM dictionary_sys_argument_tab
 46.3004 -            GROUP BY package_name, method_name)
 46.3005 -      WHERE package_name = package_name_
 46.3006 -        AND method_name = method_name_;
 46.3007 -
 46.3008 -      count_      NUMBER;
 46.3009 -BEGIN
 46.3010 -   count_:=NULL;
 46.3011 -   IF package_name_ IS NULL OR method_name_ IS NULL THEN
 46.3012 ---      Error_SYS.Appl_General(service_, 'NON_EXISTING_METHOD: [:P1,:P2] method is non existing method', package_name_, method_name_);
 46.3013 -      RETURN NULL;
 46.3014 -   END IF;
 46.3015 -   OPEN get_min_no_args_;
 46.3016 -   FETCH get_min_no_args_ INTO count_;
 46.3017 -   IF get_min_no_args_%NOTFOUND THEN
 46.3018 ---      Error_SYS.Appl_General(service_, 'NON_EXISTING_METHOD: [:P1,:P2] method is non existing method', package_name_, method_name_);
 46.3019 -      RETURN NULL;
 46.3020 -   END IF;
 46.3021 -   CLOSE get_min_no_args_;
 46.3022 -   RETURN count_;
 46.3023 -END Get_Min_No_Arguments;
 46.3024 -
 46.3025 -FUNCTION Get_Max_No_Arguments(package_name_ VARCHAR2,
 46.3026 -                              method_name_  VARCHAR2) RETURN NUMBER
 46.3027 -IS
 46.3028 -   CURSOR get_max_no_args_ IS
 46.3029 -      SELECT MAX(no_args)
 46.3030 -      FROM (SELECT package_name, method_name, count(*) no_args
 46.3031 -            FROM dictionary_sys_argument_tab
 46.3032 -            GROUP BY package_name, method_name)
 46.3033 -      WHERE package_name = package_name_
 46.3034 -        AND method_name = method_name_;
 46.3035 -
 46.3036 -      count_      NUMBER;
 46.3037 -BEGIN
 46.3038 -   count_:=NULL;
 46.3039 -   IF package_name_ IS NULL OR method_name_ IS NULL THEN
 46.3040 -      --Error_SYS.Appl_General(service_, 'NON_EXISTING_METHOD: [:P1,:P2] method is non existing method', package_name_, method_name_);
 46.3041 -      RETURN NULL;
 46.3042 -   END IF;
 46.3043 -   OPEN get_max_no_args_;
 46.3044 -   FETCH get_max_no_args_ INTO count_;
 46.3045 -   IF get_max_no_args_%NOTFOUND THEN
 46.3046 -      --Error_SYS.Appl_General(service_, 'NON_EXISTING_METHOD: [:P1,:P2] method is non existing method', package_name_, method_name_);
 46.3047 -      RETURN NULL;
 46.3048 -   END IF;
 46.3049 -   CLOSE get_max_no_args_;
 46.3050 -   RETURN count_;
 46.3051 -END Get_Max_No_Arguments;
 46.3052 -
 46.3053 -FUNCTION Get_Argument_Type(package_name_ VARCHAR2,
 46.3054 -                           method_name_  VARCHAR2,
 46.3055 -                           arg_pos_      NUMBER) RETURN VARCHAR2
 46.3056 -IS
 46.3057 -   CURSOR get_arg_type_ IS
 46.3058 -      SELECT argument_datatype
 46.3059 -      FROM dictionary_sys_argument_tab
 46.3060 -      WHERE package_name = package_name_
 46.3061 -        AND method_name = method_name_
 46.3062 -        AND argument_index = arg_pos_;
 46.3063 -
 46.3064 -      type_      dictionary_sys_argument_tab.argument_datatype%TYPE;
 46.3065 -BEGIN
 46.3066 -   type_:=NULL;
 46.3067 -   IF package_name_ IS NULL OR method_name_ IS NULL THEN
 46.3068 -      --Error_SYS.Appl_General(service_, 'NON_EXISTING_METHOD: [:P1,:P2] method is non existing method', package_name_, method_name_);
 46.3069 -      RETURN NULL;
 46.3070 -   END IF;
 46.3071 -   IF Get_No_Overloads(package_name_, method_name_) > 1 THEN
 46.3072 -      RETURN NULL;
 46.3073 -   END IF;
 46.3074 -   OPEN get_arg_type_;
 46.3075 -   FETCH get_arg_type_ INTO type_;
 46.3076 -   IF get_arg_type_%NOTFOUND THEN
 46.3077 -      --Error_SYS.Appl_General(service_, 'NON_EXISTING_METHOD: [:P1,:P2] method is non existing method', package_name_, method_name_);
 46.3078 -      RETURN NULL;
 46.3079 -   END IF;
 46.3080 -   CLOSE get_arg_type_;
 46.3081 -   RETURN type_;
 46.3082 -END Get_Argument_Type;
 46.3083 -
 46.3084 -PROCEDURE Set_Installation_Mode (
 46.3085 -   installation_mode_ IN BOOLEAN DEFAULT FALSE )
 46.3086 -IS
 46.3087 -BEGIN
 46.3088 -   General_SYS.Init_Method(service_, '&PKG', 'Set_Installation_Mode');
 46.3089 -   installation_ := installation_mode_;
 46.3090 -END Set_Installation_Mode;
 46.3091 -
 46.3092 -FUNCTION Get_Installation_Mode RETURN BOOLEAN
 46.3093 -IS
 46.3094 -BEGIN
 46.3095 -   General_SYS.Init_Method(service_, '&PKG', 'Get_Installation_Mode');
 46.3096 -   RETURN(installation_);
 46.3097 -END Get_Installation_Mode;
 46.3098 -
 46.3099 ------------------------------------------------------------------------------
 46.3100 --------------------- FOUNDATION1 METHODS ------------------------------------
 46.3101 ------------------------------------------------------------------------------
 46.3102 --- Init
 46.3103 ---   Dummy procedure that can be called at database startup to ensure that
 46.3104 ---   this package is loaded into memory for performance reasons only.
 46.3105 ------------------------------------------------------------------------------
 46.3106 -
 46.3107 -PROCEDURE Init
 46.3108 -IS
 46.3109 -BEGIN
 46.3110 -   NULL;
 46.3111 -END Init;
 46.3112 -
 46.3113 -
 46.3114 -END &PKG;
 46.3115 -/
 46.3116 -SHOW ERROR
 46.3117 -
 46.3118 -UNDEFINE MODULE
 46.3119 -UNDEFINE SERVICE
 46.3120 -UNDEFINE PKG
 46.3121 -UNDEFINE VIEW
 46.3122 -UNDEFINE VIEW2
 46.3123 -UNDEFINE VIEW3
 46.3124 -UNDEFINE VIEW4
 46.3125 -UNDEFINE VIEW5
 46.3126 -UNDEFINE VIEW6
 46.3127 -UNDEFINE VIEW7
 46.3128 -UNDEFINE VIEW8
 46.3129 -UNDEFINE VIEW9
 46.3130 -UNDEFINE OBJID
 46.3131 ------------------------------------------------------------------------------
 46.3132 -
 46.3133 -
    47.1 --- a/PLSQL/Lexer/test/unit/src/org/netbeans/modules/plsql/lexer/FavoriteSchedules.apy	Wed May 15 16:07:35 2013 +0200
    47.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    47.3 @@ -1,712 +0,0 @@
    47.4 ------------------------------------------------------------------------------
    47.5 ---
    47.6 ---  Logical unit: FavoriteSchedules
    47.7 ---
    47.8 ---  Purpose:
    47.9 ---
   47.10 ---  IFS/Design Template Version 2.3
   47.11 ---
   47.12 ---  Date    Sign    History
   47.13 ---  ------  ------  ---------------------------------------------------------
   47.14 ---  050224  VYPELK  Created
   47.15 ------------------------------------------------------------------------------
   47.16 -
   47.17 -DEFINE MODULE        = WRKSCH
   47.18 -DEFINE LU            = FavoriteSchedules
   47.19 -DEFINE TABLE         = FAVORITE_SCHEDULES_TAB
   47.20 -DEFINE VIEW          = FAVORITE_SCHEDULES
   47.21 -DEFINE PKG           = FAVORITE_SCHEDULES_API
   47.22 -
   47.23 -DEFINE OBJID         = rowid
   47.24 -DEFINE OBJVERSION    = to_char(rowversion)
   47.25 -
   47.26 ------------------------------------------------------------------------------
   47.27 --------------------- VIEWS FOR SELECTS --------------------------------------
   47.28 ------------------------------------------------------------------------------
   47.29 -
   47.30 -PROMPT Creating &VIEW view
   47.31 -
   47.32 -CREATE OR REPLACE FORCE VIEW &VIEW AS
   47.33 -SELECT identity                       identity,
   47.34 -       schedule_type                  schedule_type,
   47.35 -       schedule_code                  schedule_code,
   47.36 -       company_id                     company_id,
   47.37 -       wage_class                     wage_class,
   47.38 -       &OBJID                         objid,
   47.39 -       &OBJVERSION                    objversion
   47.40 -FROM   favorite_schedules_tab
   47.41 -WITH   read only;
   47.42 -
   47.43 -COMMENT ON TABLE &VIEW
   47.44 -   IS 'LU=&LU^PROMPT=Favorite Schedules^MODULE=&MODULE^';
   47.45 -
   47.46 -COMMENT ON COLUMN &VIEW..identity
   47.47 -   IS 'FLAGS=PMI--^DATATYPE=STRING(30)/UPPERCASE^PROMPT=Identity^REF=ApplicationUser^';
   47.48 -COMMENT ON COLUMN &VIEW..schedule_type
   47.49 -   IS 'FLAGS=KMI-L^DATATYPE=STRING(10)^PROMPT=Schedule Type^';
   47.50 -COMMENT ON COLUMN &VIEW..schedule_code
   47.51 -   IS 'FLAGS=KMI--^DATATYPE=STRING(10)^PROMPT=Schedule Code^';
   47.52 -COMMENT ON COLUMN &VIEW..company_id
   47.53 -   IS 'FLAGS=KMI-L^DATATYPE=STRING(20)/UPPERCASE^PROMPT=Company ID^';
   47.54 -COMMENT ON COLUMN &VIEW..wage_class
   47.55 -   IS 'FLAGS=KMI-L^DATATYPE=STRING(10)/UPPERCASE^PROMPT=Wage Class^REF=WageClass(company_id)^';
   47.56 -
   47.57 ------------------------------------------------------------------------------
   47.58 --------------------- PACKAGES FOR METHODS -----------------------------------
   47.59 ------------------------------------------------------------------------------
   47.60 -
   47.61 -PROMPT Creating &PKG implementation
   47.62 -
   47.63 -CREATE OR REPLACE PACKAGE BODY &PKG IS
   47.64 -
   47.65 ------------------------------------------------------------------------------
   47.66 --------------------- LU SPECIFIC IMPLEMENTATION METHOD DECLARATIONS ---------
   47.67 ------------------------------------------------------------------------------
   47.68 -
   47.69 -
   47.70 ------------------------------------------------------------------------------
   47.71 --------------------- IMPLEMENTATION BASE METHODS ----------------------------
   47.72 ------------------------------------------------------------------------------
   47.73 --- Lock_By_Id___
   47.74 ---    Client-support to lock a specific instance of the logical unit.
   47.75 ---
   47.76 --- Lock_By_Keys___
   47.77 ---    Server support to lock a specific instance of the logical unit.
   47.78 ---
   47.79 --- Get_Object_By_Id___
   47.80 ---    Get LU-record from the database with a specified object identity.
   47.81 ---
   47.82 --- Get_Object_By_Keys___
   47.83 ---    Get LU-record from the database with specified key columns.
   47.84 ---
   47.85 --- Check_Exist___
   47.86 ---    Check if a specific LU-instance already exist in the database.
   47.87 ---
   47.88 --- Get_Id_Version_By_Keys___
   47.89 ---    Get the current OBJID and OBJVERSION for a specific LU-instance.
   47.90 ------------------------------------------------------------------------------
   47.91 -
   47.92 -FUNCTION Lock_By_Id___ (
   47.93 -   objid_      IN  VARCHAR2,
   47.94 -   objversion_ IN  VARCHAR2 ) RETURN &TABLE%ROWTYPE
   47.95 -IS
   47.96 -   row_changed EXCEPTION;
   47.97 -   row_deleted EXCEPTION;
   47.98 -   row_locked  EXCEPTION;
   47.99 -   PRAGMA      exception_init(row_locked, -0054);
  47.100 -   rec_        &TABLE%ROWTYPE;
  47.101 -   dummy_      NUMBER;
  47.102 -   CURSOR lock_control IS
  47.103 -      SELECT *
  47.104 -      FROM   &TABLE
  47.105 -      WHERE  &OBJID = objid_
  47.106 -      AND    &OBJVERSION = objversion_
  47.107 -      FOR UPDATE NOWAIT;
  47.108 -   CURSOR exist_control IS
  47.109 -      SELECT 1
  47.110 -      FROM   &TABLE
  47.111 -      WHERE  &OBJID = objid_;
  47.112 -BEGIN
  47.113 -   OPEN lock_control;
  47.114 -   FETCH lock_control INTO rec_;
  47.115 -   IF (lock_control%FOUND) THEN
  47.116 -      CLOSE lock_control;
  47.117 -      RETURN rec_;
  47.118 -   END IF;
  47.119 -   CLOSE lock_control;
  47.120 -   OPEN exist_control;
  47.121 -   FETCH exist_control INTO dummy_;
  47.122 -   IF (exist_control%FOUND) THEN
  47.123 -      CLOSE exist_control;
  47.124 -      RAISE row_changed;
  47.125 -   ELSE
  47.126 -      CLOSE exist_control;
  47.127 -      RAISE row_deleted;
  47.128 -   END IF;
  47.129 -EXCEPTION
  47.130 -   WHEN row_locked THEN
  47.131 -      Error_SYS.Record_Locked(lu_name_);
  47.132 -   WHEN row_changed THEN
  47.133 -      Error_SYS.Record_Modified(lu_name_);
  47.134 -   WHEN row_deleted THEN
  47.135 -      Error_SYS.Record_Removed(lu_name_);
  47.136 -END Lock_By_Id___;
  47.137 -
  47.138 -FUNCTION Lock_By_Keys___ (
  47.139 -   identity_ IN VARCHAR2,
  47.140 -   schedule_type_ IN VARCHAR2,
  47.141 -   schedule_code_ IN VARCHAR2,
  47.142 -   company_id_ IN VARCHAR2,
  47.143 -   wage_class_ IN VARCHAR2 ) RETURN &TABLE%ROWTYPE
  47.144 -IS
  47.145 -   row_deleted EXCEPTION;
  47.146 -   rec_        &TABLE%ROWTYPE;
  47.147 -   CURSOR lock_control IS
  47.148 -      SELECT *
  47.149 -      FROM  &TABLE
  47.150 -      WHERE identity = identity_
  47.151 -      AND   schedule_type = schedule_type_
  47.152 -      AND   schedule_code = schedule_code_
  47.153 -      AND   company_id = company_id_
  47.154 -      AND   wage_class = wage_class_
  47.155 -      FOR UPDATE;
  47.156 -BEGIN
  47.157 -   OPEN lock_control;
  47.158 -   FETCH lock_control INTO rec_;
  47.159 -   IF (lock_control%FOUND) THEN
  47.160 -      CLOSE lock_control;
  47.161 -      RETURN rec_;
  47.162 -   ELSE
  47.163 -      CLOSE lock_control;
  47.164 -      RAISE row_deleted;
  47.165 -   END IF;
  47.166 -EXCEPTION
  47.167 -   WHEN row_deleted THEN
  47.168 -      Error_SYS.Record_Removed(lu_name_);
  47.169 -END Lock_By_Keys___;
  47.170 -
  47.171 -FUNCTION Get_Object_By_Id___ (
  47.172 -   objid_ IN VARCHAR2 ) RETURN &TABLE%ROWTYPE
  47.173 -IS
  47.174 -   lu_rec_ &TABLE%ROWTYPE;
  47.175 -   CURSOR getrec IS
  47.176 -      SELECT *
  47.177 -      FROM   &TABLE
  47.178 -      WHERE  &OBJID = objid_;
  47.179 -BEGIN
  47.180 -   OPEN getrec;
  47.181 -   FETCH getrec INTO lu_rec_;
  47.182 -   IF (getrec%NOTFOUND) THEN
  47.183 -      CLOSE getrec;
  47.184 -      Error_SYS.Record_Removed(lu_name_);
  47.185 -   END IF;
  47.186 -   CLOSE getrec;
  47.187 -   RETURN(lu_rec_);
  47.188 -END Get_Object_By_Id___;
  47.189 -
  47.190 -
  47.191 -FUNCTION Get_Object_By_Keys___ (
  47.192 -   identity_ IN VARCHAR2,
  47.193 -   schedule_type_ IN VARCHAR2,
  47.194 -   schedule_code_ IN VARCHAR2,
  47.195 -   company_id_ IN VARCHAR2,
  47.196 -   wage_class_ IN VARCHAR2 ) RETURN &TABLE%ROWTYPE
  47.197 -IS
  47.198 -   lu_rec_ &TABLE%ROWTYPE;
  47.199 -   CURSOR getrec IS
  47.200 -      SELECT *
  47.201 -      FROM  &TABLE
  47.202 -      WHERE identity = identity_
  47.203 -      AND   schedule_type = schedule_type_
  47.204 -      AND   schedule_code = schedule_code_
  47.205 -      AND   company_id = company_id_
  47.206 -      AND   wage_class = wage_class_;
  47.207 -BEGIN
  47.208 -   OPEN getrec;
  47.209 -   FETCH getrec INTO lu_rec_;
  47.210 -   CLOSE getrec;
  47.211 -   RETURN(lu_rec_);
  47.212 -END Get_Object_By_Keys___;
  47.213 -
  47.214 -FUNCTION Check_Exist___ (
  47.215 -   identity_ IN VARCHAR2,
  47.216 -   schedule_type_ IN VARCHAR2,
  47.217 -   schedule_code_ IN VARCHAR2,
  47.218 -   company_id_ IN VARCHAR2,
  47.219 -   wage_class_ IN VARCHAR2 ) RETURN BOOLEAN
  47.220 -IS
  47.221 -   dummy_ NUMBER;
  47.222 -   CURSOR exist_control IS
  47.223 -      SELECT 1
  47.224 -      FROM   &TABLE
  47.225 -      WHERE identity = identity_
  47.226 -      AND   schedule_type = schedule_type_
  47.227 -      AND   schedule_code = schedule_code_
  47.228 -      AND   company_id = company_id_
  47.229 -      AND   wage_class = wage_class_;
  47.230 -BEGIN
  47.231 -   OPEN exist_control;
  47.232 -   FETCH exist_control INTO dummy_;
  47.233 -   IF (exist_control%FOUND) THEN
  47.234 -      CLOSE exist_control;
  47.235 -      RETURN(TRUE);
  47.236 -   END IF;
  47.237 -   CLOSE exist_control;
  47.238 -   RETURN(FALSE);
  47.239 -END Check_Exist___;
  47.240 -
  47.241 -PROCEDURE Get_Id_Version_By_Keys___ (
  47.242 -   objid_      IN OUT VARCHAR2,
  47.243 -   objversion_ IN OUT VARCHAR2,
  47.244 -   identity_ IN VARCHAR2,
  47.245 -   schedule_type_ IN VARCHAR2,
  47.246 -   schedule_code_ IN VARCHAR2,
  47.247 -   company_id_ IN VARCHAR2,
  47.248 -   wage_class_ IN VARCHAR2)
  47.249 -IS
  47.250 -   CURSOR get_version IS
  47.251 -   SELECT &OBJID, &OBJVERSION
  47.252 -      FROM  &TABLE
  47.253 -      WHERE identity = identity_
  47.254 -      AND   schedule_type = schedule_type_
  47.255 -      AND   schedule_code = schedule_code_
  47.256 -      AND   company_id = company_id_
  47.257 -      AND   wage_class = wage_class_;
  47.258 -BEGIN
  47.259 -   OPEN get_version;
  47.260 -   FETCH get_version INTO objid_, objversion_;
  47.261 -   CLOSE get_version;
  47.262 -END Get_Id_Version_By_Keys___;
  47.263 -
  47.264 ------------------------------------------------------------------------------
  47.265 --------------------- IMPLEMENTATION BASE METHODS FOR INSERT -----------------
  47.266 ------------------------------------------------------------------------------
  47.267 --- Prepare_Insert___
  47.268 ---    Set all default values for a new instance (ON-NEW-RECORD) of this
  47.269 ---    logical unit by calling procedure Add_Attr.
  47.270 ---
  47.271 --- Unpack_Check_Insert___
  47.272 ---    Unpack the attribute list, check all attributes from the client
  47.273 ---    and generate all default values before creation of the new object.
  47.274 ---
  47.275 --- Insert___
  47.276 ---    Insert a new LU-instance into the database and return the values
  47.277 ---    for OBJID and OBJVERSION.
  47.278 ------------------------------------------------------------------------------
  47.279 -
  47.280 -PROCEDURE Prepare_Insert___ (
  47.281 -   attr_ IN OUT VARCHAR2 )
  47.282 -IS
  47.283 -BEGIN
  47.284 -   Client_SYS.Clear_Attr(attr_);
  47.285 -END Prepare_Insert___;
  47.286 -
  47.287 -
  47.288 -PROCEDURE Unpack_Check_Insert___ (
  47.289 -   attr_   IN OUT VARCHAR2,
  47.290 -   newrec_ IN OUT &TABLE%ROWTYPE )
  47.291 -IS
  47.292 -   ptr_   NUMBER;
  47.293 -   name_  VARCHAR2(30);
  47.294 -   value_ VARCHAR2(2000);
  47.295 -BEGIN
  47.296 -   ptr_ := NULL;
  47.297 -   WHILE (Client_SYS.Get_Next_From_Attr(attr_, ptr_, name_, value_)) LOOP
  47.298 -      IF (name_ = 'IDENTITY') THEN
  47.299 -         newrec_.identity := value_;
  47.300 -         Application_User_API.Exist(newrec_.identity);
  47.301 -      ELSIF (name_ = 'SCHEDULE_TYPE') THEN
  47.302 -         newrec_.schedule_type := value_;
  47.303 -      ELSIF (name_ = 'SCHEDULE_CODE') THEN
  47.304 -         newrec_.schedule_code := value_;
  47.305 -      ELSIF (name_ = 'COMPANY_ID') THEN
  47.306 -         newrec_.company_id := value_;
  47.307 -      ELSIF (name_ = 'WAGE_CLASS') THEN
  47.308 -         newrec_.wage_class := value_;
  47.309 -         Wage_Class_API.Exist(newrec_.company_id, newrec_.wage_class);
  47.310 -      ELSE
  47.311 -         Error_SYS.Item_Not_Exist(lu_name_, name_, value_);
  47.312 -      END IF;
  47.313 -   END LOOP;
  47.314 -   Client_SYS.Clear_Attr(attr_);
  47.315 -   Error_SYS.Check_Not_Null(lu_name_, 'IDENTITY', newrec_.identity);
  47.316 -   Error_SYS.Check_Not_Null(lu_name_, 'SCHEDULE_TYPE', newrec_.schedule_type);
  47.317 -   Error_SYS.Check_Not_Null(lu_name_, 'SCHEDULE_CODE', newrec_.schedule_code);
  47.318 -   Error_SYS.Check_Not_Null(lu_name_, 'COMPANY_ID', newrec_.company_id);
  47.319 -   Error_SYS.Check_Not_Null(lu_name_, 'WAGE_CLASS', newrec_.wage_class);
  47.320 -EXCEPTION
  47.321 -   WHEN value_error THEN
  47.322 -      Error_SYS.Item_Format(lu_name_, name_, value_);
  47.323 -END Unpack_Check_Insert___;
  47.324 -
  47.325 -
  47.326 -PROCEDURE Insert___ (
  47.327 -   objid_      OUT    VARCHAR2,
  47.328 -   objversion_ OUT    VARCHAR2,
  47.329 -   newrec_     IN OUT &TABLE%ROWTYPE,
  47.330 -   attr_       IN OUT VARCHAR2 )
  47.331 -IS
  47.332 -BEGIN
  47.333 -   newrec_.rowversion := 1;
  47.334 -   objversion_ := to_char(newrec_.rowversion);
  47.335 -   INSERT
  47.336 -      INTO favorite_schedules_tab (
  47.337 -         identity,
  47.338 -         schedule_type,
  47.339 -         schedule_code,
  47.340 -         company_id,
  47.341 -         wage_class,
  47.342 -         rowversion)
  47.343 -      VALUES (
  47.344 -         newrec_.identity,
  47.345 -         newrec_.schedule_type,
  47.346 -         newrec_.schedule_code,
  47.347 -         newrec_.company_id,
  47.348 -         newrec_.wage_class,
  47.349 -         newrec_.rowversion)
  47.350 -   RETURNING &OBJID INTO objid_;
  47.351 -EXCEPTION
  47.352 -   WHEN dup_val_on_index THEN
  47.353 -      Error_SYS.Record_Exist(lu_name_);
  47.354 -END Insert___;
  47.355 -
  47.356 ------------------------------------------------------------------------------
  47.357 --------------------- IMPLEMENTATION BASE METHODS FOR UPDATE -----------------
  47.358 ------------------------------------------------------------------------------
  47.359 --- Unpack_Check_Update___
  47.360 ---    Unpack the attribute list, check all attributes from the client
  47.361 ---    and generate all default values before modifying the object.
  47.362 ---
  47.363 --- Update___
  47.364 ---    Update an existing LU-instance in the database and return the
  47.365 ---    the new OBJVERSION.
  47.366 ------------------------------------------------------------------------------
  47.367 -
  47.368 -PROCEDURE Unpack_Check_Update___ (
  47.369 -   attr_   IN OUT VARCHAR2,
  47.370 -   newrec_ IN OUT &TABLE%ROWTYPE,
  47.371 -   objid_  IN     VARCHAR2 )
  47.372 -IS
  47.373 -   ptr_   NUMBER;
  47.374 -   name_  VARCHAR2(30);
  47.375 -   value_ VARCHAR2(2000);
  47.376 -BEGIN
  47.377 -   ptr_ := NULL;
  47.378 -   WHILE (Client_SYS.Get_Next_From_Attr(attr_, ptr_, name_, value_)) LOOP
  47.379 -      IF (name_ = 'IDENTITY') THEN
  47.380 -         Error_SYS.Item_Update(lu_name_, 'IDENTITY');
  47.381 -      ELSIF (name_ = 'SCHEDULE_TYPE') THEN
  47.382 -         Error_SYS.Item_Update(lu_name_, 'SCHEDULE_TYPE');
  47.383 -      ELSIF (name_ = 'SCHEDULE_CODE') THEN
  47.384 -         Error_SYS.Item_Update(lu_name_, 'SCHEDULE_CODE');
  47.385 -      ELSIF (name_ = 'COMPANY_ID') THEN
  47.386 -         Error_SYS.Item_Update(lu_name_, 'COMPANY_ID');
  47.387 -      ELSIF (name_ = 'WAGE_CLASS') THEN
  47.388 -         Error_SYS.Item_Update(lu_name_, 'WAGE_CLASS');
  47.389 -      ELSE
  47.390 -         Error_SYS.Item_Not_Exist(lu_name_, name_, value_);
  47.391 -      END IF;
  47.392 -   END LOOP;
  47.393 -   Client_SYS.Clear_Attr(attr_);
  47.394 -EXCEPTION
  47.395 -   WHEN value_error THEN
  47.396 -      Error_SYS.Item_Format(lu_name_, name_, value_);
  47.397 -END Unpack_Check_Update___;
  47.398 -
  47.399 -
  47.400 -PROCEDURE Update___ (
  47.401 -   objid_      IN     VARCHAR2,
  47.402 -   oldrec_     IN     &TABLE%ROWTYPE,
  47.403 -   newrec_     IN OUT &TABLE%ROWTYPE,
  47.404 -   attr_       IN OUT VARCHAR2,
  47.405 -   objversion_ IN OUT VARCHAR2,
  47.406 -   by_keys_    IN BOOLEAN DEFAULT FALSE )
  47.407 -IS
  47.408 -BEGIN
  47.409 -   newrec_.rowversion := newrec_.rowversion + 1;
  47.410 -   objversion_ := to_char(newrec_.rowversion);
  47.411 -   IF by_keys_ THEN
  47.412 -      UPDATE favorite_schedules_tab
  47.413 -      SET identity = newrec_.identity,
  47.414 -          schedule_type = newrec_.schedule_type,
  47.415 -          schedule_code = newrec_.schedule_code,
  47.416 -          company_id = newrec_.company_id,
  47.417 -          wage_class = newrec_.wage_class,
  47.418 -          rowversion = newrec_.rowversion
  47.419 -      WHERE identity = newrec_.identity
  47.420 -      AND   schedule_type = newrec_.schedule_type
  47.421 -      AND   schedule_code = newrec_.schedule_code
  47.422 -      AND   company_id = newrec_.company_id
  47.423 -      AND   wage_class = newrec_.wage_class;
  47.424 -   ELSE
  47.425 -      UPDATE favorite_schedules_tab
  47.426 -      SET identity = newrec_.identity,
  47.427 -          schedule_type = newrec_.schedule_type,
  47.428 -          schedule_code = newrec_.schedule_code,
  47.429 -          company_id = newrec_.company_id,
  47.430 -          wage_class = newrec_.wage_class,
  47.431 -          rowversion = newrec_.rowversion
  47.432 -      WHERE &OBJID = objid_;
  47.433 -   END IF;
  47.434 -EXCEPTION
  47.435 -   WHEN dup_val_on_index THEN
  47.436 -      Error_SYS.Record_Exist(lu_name_);
  47.437 -END Update___;
  47.438 -
  47.439 ------------------------------------------------------------------------------
  47.440 --------------------- IMPLEMENTATION BASE METHODS FOR DELETE -----------------
  47.441 ------------------------------------------------------------------------------
  47.442 --- Check_Delete___
  47.443 ---    Checks whether a specific LU-record may be removed or not.
  47.444 ---    The procedure should check business rules like attribute values
  47.445 ---    as well as database constraints (defined or not).
  47.446 ---
  47.447 --- Delete___
  47.448 ---    Deletion of the specific LU-object from the database.
  47.449 ------------------------------------------------------------------------------
  47.450 -
  47.451 -PROCEDURE Check_Delete___ (
  47.452 -   remrec_ IN &TABLE%ROWTYPE )
  47.453 -IS
  47.454 -   key_ VARCHAR2(2000);
  47.455 -BEGIN
  47.456 -   key_ := remrec_.identity || '^' || remrec_.schedule_type || '^' || remrec_.schedule_code || '^' || remrec_.company_id || '^' || remrec_.wage_class || '^';
  47.457 -   Reference_SYS.Check_Restricted_Delete(lu_name_, key_);
  47.458 -END Check_Delete___;
  47.459 -
  47.460 -
  47.461 -PROCEDURE Delete___ (
  47.462 -   objid_  IN VARCHAR2,
  47.463 -   remrec_ IN &TABLE%ROWTYPE )
  47.464 -IS
  47.465 -   key_ VARCHAR2(2000);
  47.466 -BEGIN
  47.467 -   key_ := remrec_.identity || '^' || remrec_.schedule_type || '^' || remrec_.schedule_code || '^' || remrec_.company_id || '^' || remrec_.wage_class || '^';
  47.468 -   Reference_SYS.Do_Cascade_Delete(lu_name_, key_);
  47.469 -   DELETE
  47.470 -      FROM  favorite_schedules_tab
  47.471 -      WHERE &OBJID = objid_;
  47.472 -END Delete___;
  47.473 -
  47.474 ------------------------------------------------------------------------------
  47.475 --------------------- PRIVATE BASE METHODS -----------------------------------
  47.476 ------------------------------------------------------------------------------
  47.477 --- Lock__
  47.478 ---    Client-support to lock a specific instance of the logical unit.
  47.479 ---
  47.480 --- New__
  47.481 ---    Client-support interface to create LU instances.
  47.482 ---       action_ = 'PREPARE'
  47.483 ---          Default values and handle of information to client.
  47.484 ---          The default values are set in procedure Prepare_Insert___.
  47.485 ---       action_ = 'CHECK'
  47.486 ---          Check all attributes before creating new object and handle of
  47.487 ---          information to client. The attribute list is unpacked, checked
  47.488 ---          and prepared (defaults) in procedure Unpack_Check_Insert___.
  47.489 ---       action_ = 'DO'
  47.490 ---          Creation of new instances of the logical unit and handle of
  47.491 ---          information to client. The attribute list is unpacked, checked
  47.492 ---          and prepared (defaults) in procedure Unpack_Check_Insert___
  47.493 ---          before calling procedure Insert___.
  47.494 ---
  47.495 --- Modify__
  47.496 ---    Client-support interface to modify attributes for LU instances.
  47.497 ---       action_ = 'CHECK'
  47.498 ---          Check all attributes before modifying an existing object and
  47.499 ---          handle of information to client. The attribute list is unpacked,
  47.500 ---          checked and prepared(defaults) in procedure Unpack_Check_Update___.
  47.501 ---       action_ = 'DO'
  47.502 ---          Modification of an existing instance of the logical unit. The
  47.503 ---          procedure unpacks the attributes, checks all values before
  47.504 ---          procedure Update___ is called.
  47.505 ---
  47.506 --- Remove__
  47.507 ---    Client-support interface to remove LU instances.
  47.508 ---       action_ = 'CHECK'
  47.509 ---          Check whether a specific LU-instance may be removed or not.
  47.510 ---          The procedure fetches the complete record by calling procedure
  47.511 ---          Get_Object_By_Id___. Then the check is made by calling procedure
  47.512 ---          Check_Delete___.
  47.513 ---       action_ = 'DO'
  47.514 ---          Remove an existing instance of the logical unit. The procedure
  47.515 ---          fetches the complete LU-record, checks for a delete and then
  47.516 ---          deletes the record by calling procedure Delete___.
  47.517 ------------------------------------------------------------------------------
  47.518 -
  47.519 -PROCEDURE Lock__ (
  47.520 -   info_       OUT VARCHAR2,
  47.521 -   objid_      IN  VARCHAR2,
  47.522 -   objversion_ IN  VARCHAR2 )
  47.523 -IS
  47.524 -   dummy_ &TABLE%ROWTYPE;
  47.525 -BEGIN
  47.526 -   General_SYS.Init_Method(lu_name_, '&PKG', 'Lock__');
  47.527 -   dummy_ := Lock_By_Id___(objid_, objversion_);
  47.528 -   info_ := Client_SYS.Get_All_Info;
  47.529 -END Lock__;
  47.530 -
  47.531 -
  47.532 -PROCEDURE New__ (
  47.533 -   info_       OUT    VARCHAR2,
  47.534 -   objid_      OUT    VARCHAR2,
  47.535 -   objversion_ OUT    VARCHAR2,
  47.536 -   attr_       IN OUT VARCHAR2,
  47.537 -   action_     IN     VARCHAR2 )
  47.538 -IS
  47.539 -   newrec_ &TABLE%ROWTYPE;
  47.540 -BEGIN
  47.541 -   General_SYS.Init_Method(lu_name_, '&PKG', 'New__');
  47.542 -   IF (action_ = 'PREPARE') THEN
  47.543 -      Prepare_Insert___(attr_);
  47.544 -   ELSIF (action_ = 'CHECK') THEN
  47.545 -      Unpack_Check_Insert___(attr_, newrec_);
  47.546 -   ELSIF (action_ = 'DO') THEN
  47.547 -      Unpack_Check_Insert___(attr_, newrec_);
  47.548 -      Insert___(objid_, objversion_, newrec_, attr_);
  47.549 -   END IF;
  47.550 -   info_ := Client_SYS.Get_All_Info;
  47.551 -END New__;
  47.552 -
  47.553 -
  47.554 -PROCEDURE Modify__ (
  47.555 -   info_       OUT    VARCHAR2,
  47.556 -   objid_      IN     VARCHAR2,
  47.557 -   objversion_ IN OUT VARCHAR2,
  47.558 -   attr_       IN OUT VARCHAR2,
  47.559 -   action_     IN     VARCHAR2 )
  47.560 -IS
  47.561 -   oldrec_ &TABLE%ROWTYPE;
  47.562 -   newrec_ &TABLE%ROWTYPE;
  47.563 -BEGIN
  47.564 -   General_SYS.Init_Method(lu_name_, '&PKG', 'Modify__');
  47.565 -   IF (action_ = 'CHECK') THEN
  47.566 -      newrec_ := Get_Object_By_Id___(objid_);
  47.567 -      Unpack_Check_Update___(attr_, newrec_, objid_);
  47.568 -   ELSIF (action_ = 'DO') THEN
  47.569 -      oldrec_ := Lock_By_Id___(objid_, objversion_);
  47.570 -      newrec_ := oldrec_;
  47.571 -      Unpack_Check_Update___(attr_, newrec_, objid_);
  47.572 -      Update___(objid_, oldrec_, newrec_, attr_, objversion_);
  47.573 -   END IF;
  47.574 -   info_ := Client_SYS.Get_All_Info;
  47.575 -END Modify__;
  47.576 -
  47.577 -
  47.578 -PROCEDURE Remove__ (
  47.579 -   info_       OUT VARCHAR2,
  47.580 -   objid_      IN  VARCHAR2,
  47.581 -   objversion_ IN  VARCHAR2,
  47.582 -   action_     IN  VARCHAR2 )
  47.583 -IS
  47.584 -   remrec_ &TABLE%ROWTYPE;
  47.585 -BEGIN
  47.586 -   General_SYS.Init_Method(lu_name_, '&PKG', 'Remove__');
  47.587 -   IF (action_ = 'CHECK') THEN
  47.588 -      remrec_ := Get_Object_By_Id___(objid_);
  47.589 -      Check_Delete___(remrec_);
  47.590 -   ELSIF (action_ = 'DO') THEN
  47.591 -      remrec_ := Lock_By_Id___(objid_, objversion_);
  47.592 -      Check_Delete___(remrec_);
  47.593 -      Delete___(objid_, remrec_);
  47.594 -   END IF;
  47.595 -   info_ := Client_SYS.Get_All_Info;
  47.596 -END Remove__;
  47.597 -
  47.598 ------------------------------------------------------------------------------
  47.599 --------------------- PUBLIC BASE METHODS ------------------------------------
  47.600 ------------------------------------------------------------------------------
  47.601 --- Exist
  47.602 ---   Checks if given pointer (e.g. primary key) to an instance of this
  47.603 ---   logical unit exists. If not an exception will be raised.
  47.604 ------------------------------------------------------------------------------
  47.605 -
  47.606 -PROCEDURE Exist (
  47.607 -   identity_ IN VARCHAR2,
  47.608 -   schedule_type_ IN VARCHAR2,
  47.609 -   schedule_code_ IN VARCHAR2,
  47.610 -   company_id_ IN VARCHAR2,
  47.611 -   wage_class_ IN VARCHAR2 )
  47.612 -IS
  47.613 -BEGIN
  47.614 -   General_SYS.Init_Method(lu_name_, '&PKG', 'Exist', TRUE);
  47.615 -   IF (NOT Check_Exist___(identity_, schedule_type_, schedule_code_, company_id_, wage_class_)) THEN
  47.616 -      Error_SYS.Record_Not_Exist(lu_name_);
  47.617 -   END IF;
  47.618 -END Exist;
  47.619 -
  47.620 ------------------------------------------------------------------------------
  47.621 --------------------- LU SPECIFIC IMPLEMENTATION METHODS ---------------------
  47.622 ------------------------------------------------------------------------------
  47.623 -
  47.624 -
  47.625 ------------------------------------------------------------------------------
  47.626 --------------------- LU SPECIFIC PRIVATE METHODS ----------------------------
  47.627 ------------------------------------------------------------------------------
  47.628 -
  47.629 -
  47.630 ------------------------------------------------------------------------------
  47.631 --------------------- LU SPECIFIC PROTECTED METHODS --------------------------
  47.632 ------------------------------------------------------------------------------
  47.633 -
  47.634 -
  47.635 ------------------------------------------------------------------------------
  47.636 --------------------- LU SPECIFIC PUBLIC METHODS -----------------------------
  47.637 ------------------------------------------------------------------------------
  47.638 -
  47.639 -PROCEDURE Add_Remove (
  47.640 -   identity_ IN VARCHAR2,
  47.641 -   schedule_type_ IN VARCHAR2,
  47.642 -   schedule_code_ IN VARCHAR2,
  47.643 -   company_id_ IN VARCHAR2,
  47.644 -   wage_class_ IN VARCHAR2,
  47.645 -   favorite_  IN NUMBER )
  47.646 -IS
  47.647 -   info_            VARCHAR2(1000);
  47.648 -   objid_           FAVORITE_SCHEDULES.objid%TYPE;
  47.649 -   objversion_      FAVORITE_SCHEDULES.objversion%TYPE;
  47.650 -   attr_            VARCHAR2(1000);
  47.651 -BEGIN
  47.652 -   General_SYS.Init_Method(lu_name_, '&PKG', 'Add_Remove');
  47.653 -   IF favorite_ = 1 THEN
  47.654 -      IF (NOT Check_Exist___(identity_, schedule_type_, schedule_code_, company_id_, wage_class_)) THEN
  47.655 -         Client_SYS.Clear_Attr(attr_);
  47.656 -         Client_SYS.Add_To_Attr('COMPANY_ID', company_id_, attr_);
  47.657 -         Client_SYS.Add_To_Attr('WAGE_CLASS', wage_class_, attr_);
  47.658 -         Client_SYS.Add_To_Attr('IDENTITY', identity_, attr_);
  47.659 -         Client_SYS.Add_To_Attr('SCHEDULE_TYPE', schedule_type_, attr_);
  47.660 -         Client_SYS.Add_To_Attr('SCHEDULE_CODE', schedule_code_, attr_);
  47.661 -         New__( info_, objid_, objversion_, attr_, 'DO');
  47.662 -      END IF;
  47.663 -   ELSE
  47.664 -      IF (Check_Exist___(identity_, schedule_type_, schedule_code_, company_id_, wage_class_)) THEN
  47.665 -         Get_Id_Version_By_Keys___(objid_, objversion_, identity_, schedule_type_, schedule_code_, company_id_, wage_class_);
  47.666 -         Remove__(info_, objid_, objversion_, 'DO');
  47.667 -      END IF;
  47.668 -   END IF;
  47.669 -
  47.670 -END Add_Remove;
  47.671 -
  47.672 -
  47.673 -FUNCTION Get_Favorite (
  47.674 -   identity_ IN VARCHAR2,
  47.675 -   schedule_type_ IN VARCHAR2,
  47.676 -   schedule_code_ IN VARCHAR2,
  47.677 -   company_id_ IN VARCHAR2,
  47.678 -   wage_class_ IN VARCHAR2 ) RETURN NUMBER
  47.679 -IS
  47.680 -BEGIN
  47.681 -   IF (Check_Exist___(identity_, schedule_type_, schedule_code_, company_id_, wage_class_)) THEN
  47.682 -      RETURN 1;
  47.683 -   END IF;
  47.684 -   RETURN 0;
  47.685 -END Get_Favorite;
  47.686 -
  47.687 ------------------------------------------------------------------------------
  47.688 --------------------- FOUNDATION1 METHODS ------------------------------------
  47.689 ------------------------------------------------------------------------------
  47.690 --- Init
  47.691 ---   Dummy procedure that can be called at database startup to ensure that
  47.692 ---   this package is loaded into memory for performance reasons only.
  47.693 ------------------------------------------------------------------------------
  47.694 -
  47.695 -PROCEDURE Init
  47.696 -IS
  47.697 -BEGIN
  47.698 -   NULL;
  47.699 -END Init;
  47.700 -
  47.701 -
  47.702 -END &PKG;
  47.703 -/
  47.704 -SHOW ERROR
  47.705 -
  47.706 -UNDEFINE MODULE
  47.707 -UNDEFINE LU
  47.708 -UNDEFINE TABLE
  47.709 -UNDEFINE VIEW
  47.710 -UNDEFINE PKG
  47.711 -
  47.712 -UNDEFINE OBJID
  47.713 -UNDEFINE OBJVERSION
  47.714 -
  47.715 ------------------------------------------------------------------------------
    48.1 --- a/PLSQL/Lexer/test/unit/src/org/netbeans/modules/plsql/lexer/FndEvent.api	Wed May 15 16:07:35 2013 +0200
    48.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    48.3 @@ -1,147 +0,0 @@
    48.4 ------------------------------------------------------------------------------
    48.5 ---
    48.6 ---  Logical unit: FndEvent
    48.7 ---
    48.8 ---  IFS/Design Template Version 2.3
    48.9 ---
   48.10 ---  Date    Sign  History
   48.11 ---  ------  ----  -----------------------------------------------------------
   48.12 ---  971009  ERFO  Reviewed for Foundation1 Release 2.0.0 (ToDo #1676).
   48.13 ---  030212  ROOD  Changed module to FNDBAS (ToDo#4149).
   48.14 ---  070212  HAAR  Added support for Custom Defined Events (Bugg#61780).
   48.15 ---  090114  HAAR  Added methods for Export/Import Export__ and Register_Custom_Event (Bug#79673).
   48.16 ------------------------------------------------------------------------------
   48.17 -
   48.18 -DEFINE MODULE        = FNDBAS
   48.19 -DEFINE LU            = FndEvent
   48.20 -DEFINE PKG           = FND_EVENT_API
   48.21 -
   48.22 -
   48.23 -PROMPT Creating &AO..&PKG specification
   48.24 -
   48.25 -CREATE OR REPLACE PACKAGE &AO..&PKG IS
   48.26 -
   48.27 -module_  CONSTANT VARCHAR2(25) := '&MODULE';
   48.28 -lu_name_ CONSTANT VARCHAR2(25) := '&LU';
   48.29 -
   48.30 -TYPE Public_Rec IS RECORD
   48.31 -   (event_description FND_EVENT_TAB.event_description%TYPE,
   48.32 -    event_enable FND_EVENT_TAB.event_enable%TYPE);
   48.33 -
   48.34 ------------------------------------------------------------------------------
   48.35 --------------------- PRIVATE BASE METHODS -----------------------------------
   48.36 ------------------------------------------------------------------------------
   48.37 -
   48.38 -PROCEDURE Lock__ (
   48.39 -   info_       OUT VARCHAR2,
   48.40 -   objid_      IN  VARCHAR2,
   48.41 -   objversion_ IN  VARCHAR2 );
   48.42 -
   48.43 -PROCEDURE New__ (
   48.44 -   info_       OUT    VARCHAR2,
   48.45 -   objid_      OUT    VARCHAR2,
   48.46 -   objversion_ OUT    VARCHAR2,
   48.47 -   attr_       IN OUT VARCHAR2,
   48.48 -   action_     IN     VARCHAR2 );
   48.49 -
   48.50 -PROCEDURE Modify__ (
   48.51 -   info_       OUT    VARCHAR2,
   48.52 -   objid_      IN     VARCHAR2,
   48.53 -   objversion_ IN OUT VARCHAR2,
   48.54 -   attr_       IN OUT VARCHAR2,
   48.55 -   action_     IN     VARCHAR2 );
   48.56 -
   48.57 -PROCEDURE Remove__ (
   48.58 -   info_       OUT VARCHAR2,
   48.59 -   objid_      IN  VARCHAR2,
   48.60 -   objversion_ IN  VARCHAR2,
   48.61 -   action_     IN  VARCHAR2 );
   48.62 -
   48.63 ------------------------------------------------------------------------------
   48.64 --------------------- PUBLIC BASE METHODS ------------------------------------
   48.65 ------------------------------------------------------------------------------
   48.66 -
   48.67 -PROCEDURE Exist (
   48.68 -   event_lu_name_ IN VARCHAR2,
   48.69 -   event_id_      IN VARCHAR2 );
   48.70 -
   48.71 ------------------------------------------------------------------------------
   48.72 --------------------- LU SPECIFIC PRIVATE METHODS ----------------------------
   48.73 ------------------------------------------------------------------------------
   48.74 -
   48.75 -PROCEDURE Export__ (
   48.76 -   string_        OUT VARCHAR2,
   48.77 -   event_lu_name_ IN  VARCHAR2,
   48.78 -   event_id_      IN  VARCHAR2 );
   48.79 -
   48.80 ------------------------------------------------------------------------------
   48.81 --------------------- LU SPECIFIC PROTECTED METHODS --------------------------
   48.82 ------------------------------------------------------------------------------
   48.83 -
   48.84 -
   48.85 ------------------------------------------------------------------------------
   48.86 --------------------- LU SPECIFIC PUBLIC METHODS -----------------------------
   48.87 ------------------------------------------------------------------------------
   48.88 -
   48.89 -FUNCTION Get_Event_Description (
   48.90 -   event_lu_name_ IN VARCHAR2,
   48.91 -   event_id_      IN VARCHAR2 ) RETURN VARCHAR2;
   48.92 -PRAGMA restrict_references(Get_Event_Description, WNDS);
   48.93 -
   48.94 -
   48.95 -FUNCTION Get_Event_Enable (
   48.96 -   event_lu_name_ IN VARCHAR2,
   48.97 -   event_id_      IN VARCHAR2 ) RETURN VARCHAR2;
   48.98 -PRAGMA restrict_references(Get_Event_Enable, WNDS);
   48.99 -
  48.100 -
  48.101 -PROCEDURE Set_Event_Enable (
  48.102 -   event_lu_name_ IN VARCHAR2,
  48.103 -   event_id_      IN VARCHAR2 );
  48.104 -
  48.105 -
  48.106 -PROCEDURE Refresh (
  48.107 -   event_lu_name_       IN VARCHAR2,
  48.108 -   event_id_            IN VARCHAR2,
  48.109 -   event_desc_          IN VARCHAR2,
  48.110 -   event_type_db_       IN VARCHAR2 DEFAULT 'APPLICATION',
  48.111 -   event_table_name_    IN VARCHAR2 DEFAULT NULL,
  48.112 -   modified_attributes_ IN VARCHAR2 DEFAULT NULL,
  48.113 -   new_row_             IN VARCHAR2 DEFAULT 'FALSE',
  48.114 -   modify_row_          IN VARCHAR2 DEFAULT 'FALSE',
  48.115 -   remove_row_          IN VARCHAR2 DEFAULT 'FALSE');
  48.116 -
  48.117 -PROCEDURE Register_Custom_Event (
  48.118 -   event_lu_name_ IN VARCHAR2,
  48.119 -   event_id_      IN VARCHAR2,
  48.120 -   info_msg_      IN VARCHAR2 );
  48.121 -
  48.122 -
  48.123 -PROCEDURE Unfresh (
  48.124 -   event_lu_name_ IN VARCHAR2,
  48.125 -   event_id_      IN VARCHAR2 );
  48.126 -
  48.127 -
  48.128 -FUNCTION Get (
  48.129 -   event_lu_name_ IN VARCHAR2,
  48.130 -   event_id_ IN VARCHAR2 ) RETURN Public_Rec;
  48.131 -PRAGMA restrict_references(Get, WNDS);
  48.132 -
  48.133 -
  48.134 -
  48.135 ------------------------------------------------------------------------------
  48.136 --------------------- FOUNDATION1 METHODS ------------------------------------
  48.137 ------------------------------------------------------------------------------
  48.138 -
  48.139 -PROCEDURE Init;
  48.140 -
  48.141 -
  48.142 -END &PKG;
  48.143 -/
  48.144 -SHOW ERROR
  48.145 -
  48.146 -UNDEFINE MODULE
  48.147 -UNDEFINE LU
  48.148 -UNDEFINE PKG
  48.149 -
  48.150 ------------------------------------------------------------------------------
    49.1 --- a/PLSQL/Lexer/test/unit/src/org/netbeans/modules/plsql/lexer/FndEvent.apy	Wed May 15 16:07:35 2013 +0200
    49.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    49.3 @@ -1,1422 +0,0 @@
    49.4 ------------------------------------------------------------------------------
    49.5 ---
    49.6 ---  Logical unit: FndEvent
    49.7 ---
    49.8 ---  Purpose:
    49.9 ---
   49.10 ---  IFS/Design Template Version 2.3
   49.11 ---
   49.12 ---  Date    Sign  History
   49.13 ---  ------  ----  -----------------------------------------------------------
   49.14 ---  971009  ERFO  Reviewed for Foundation1 Release 2.0.0 (ToDo #1676).
   49.15 ---  971013  ERFO  Made attribute EVENT_ID uppercase.
   49.16 ---  980223  ERFO  Removed Set_Event_Enabled in method Refresh and added
   49.17 ---                validation when setting event enabled (ToDo #2144).
   49.18 ---  980310  ERFO  Set event_enable to FALSE in method Refresh and
   49.19 ---                ensure a correct error message in method Update___.
   49.20 ---  030212  ROOD  Changed module to FNDBAS (ToDo#4149).
   49.21 ---  030214  ROOD  Replaced usage of fnd_event_action_tab with the view (ToDo#4149).
   49.22 ---  060623  RARU  Moved the select statement into a cursor in Update__.
   49.23 ---  070212  HAAR  Added support for Custom Defined Events (Bugg#61780).
   49.24 ---  080101  SUMA  Changed the :new to old when inserting new recs.(Bug#70269).
   49.25 ---  080228  SUMA  Added Create_Trigger_Name function to aviod special chars(Bug#71099)
   49.26 ---  080925  HAAR  Renamed parameters for Custom Defined Events (Bug#77334).
   49.27 ---                New value: NEW:COLUMN_NAME => NEW:IDENTITY
   49.28 ---                Old value: OLD:COLUMN_NAME => OLD:IDENTITY
   49.29 ---  090114  HAAR  Added methods for Export/Import Export__ and Register_Custom_Event (Bug#79673).
   49.30 ---  091109  NABA  Added the check for event_id as a valid identifier (Bug#86681) 
   49.31 ------------------------------------------------------------------------------
   49.32 -
   49.33 -DEFINE MODULE        = FNDBAS
   49.34 -DEFINE LU            = FndEvent
   49.35 -DEFINE TABLE         = FND_EVENT_TAB
   49.36 -DEFINE VIEW          = FND_EVENT
   49.37 -DEFINE PKG           = FND_EVENT_API
   49.38 -
   49.39 -DEFINE OBJID         = rowid
   49.40 -DEFINE OBJVERSION    = "ltrim(lpad(to_char(rowversion,'YYYYMMDDHH24MISS'),2000))"
   49.41 -
   49.42 ------------------------------------------------------------------------------
   49.43 --------------------- VIEWS FOR SELECTS --------------------------------------
   49.44 ------------------------------------------------------------------------------
   49.45 -
   49.46 -PROMPT Creating &AO..&VIEW view
   49.47 -
   49.48 -CREATE OR REPLACE VIEW &AO..&VIEW AS
   49.49 -SELECT event_lu_name                  event_lu_name,
   49.50 -       event_id                       event_id,
   49.51 -       event_description              event_description,
   49.52 -       event_enable                   event_enable,
   49.53 -       event_table_name               event_table_name,
   49.54 -       Fnd_Event_Type_API.Decode(event_type) event_type,
   49.55 -       event_type                     event_type_db,
   49.56 -       modified_attributes            modified_attributes,
   49.57 -       Fnd_Boolean_API.Decode(new_row) new_row,
   49.58 -       new_row                        new_row_db,
   49.59 -       Fnd_Boolean_API.Decode(modify_row) modify_row,
   49.60 -       modify_row                     modify_row_db,
   49.61 -       Fnd_Boolean_API.Decode(remove_row) remove_row,
   49.62 -       remove_row                     remove_row_db,
   49.63 -       &OBJID                         objid,
   49.64 -       &OBJVERSION                    objversion
   49.65 -FROM   fnd_event_tab
   49.66 -WITH   read only;
   49.67 -
   49.68 -COMMENT ON TABLE &AO..&VIEW
   49.69 -   IS 'LU=&LU^PROMPT=Fnd Event^MODULE=&MODULE^';
   49.70 -
   49.71 -COMMENT ON COLUMN &AO..&VIEW..event_lu_name
   49.72 -   IS 'FLAGS=KMI-L^DATATYPE=STRING(25)^PROMPT=Event Lu Name^';
   49.73 -COMMENT ON COLUMN &AO..&VIEW..event_id
   49.74 -   IS 'FLAGS=KMI-L^DATATYPE=STRING(32)/UPPERCASE^PROMPT=Event Id^';
   49.75 -COMMENT ON COLUMN &AO..&VIEW..event_description
   49.76 -   IS 'FLAGS=A-IU-^DATATYPE=STRING(256)^PROMPT=Event Description^';
   49.77 -COMMENT ON COLUMN &AO..&VIEW..event_enable
   49.78 -   IS 'FLAGS=A-IU-^DATATYPE=BOOLEAN^PROMPT=Event Enable^';
   49.79 -COMMENT ON COLUMN &AO..&VIEW..event_table_name
   49.80 -   IS 'FLAGS=A-IU-^DATATYPE=STRING(30)^PROMPT=Event Table Name^';
   49.81 -COMMENT ON COLUMN &AO..&VIEW..event_type
   49.82 -   IS 'FLAGS=AMIU-^DATATYPE=STRING(200)^PROMPT=Event Type^REF=FndEventType^';
   49.83 -COMMENT ON COLUMN &AO..&VIEW..event_type_db
   49.84 -   IS 'FLAGS=A----^DATATYPE=STRING(20)^PROMPT=Event Type^';
   49.85 -COMMENT ON COLUMN &AO..&VIEW..modified_attributes
   49.86 -   IS 'FLAGS=A-IU-^DATATYPE=STRING(4000)^PROMPT=Modified Attributes^';
   49.87 -COMMENT ON COLUMN &AO..&VIEW..new_row
   49.88 -   IS 'FLAGS=AMIU-^DATATYPE=STRING(200)^PROMPT=New Row^REF=FndBoolean^';
   49.89 -COMMENT ON COLUMN &AO..&VIEW..new_row_db
   49.90 -   IS 'FLAGS=A----^DATATYPE=STRING(20)^PROMPT=New Row^';
   49.91 -COMMENT ON COLUMN &AO..&VIEW..modify_row
   49.92 -   IS 'FLAGS=AMIU-^DATATYPE=STRING(200)^PROMPT=Modify Row^REF=FndBoolean^';
   49.93 -COMMENT ON COLUMN &AO..&VIEW..modify_row_db
   49.94 -   IS 'FLAGS=A----^DATATYPE=STRING(20)^PROMPT=Modify Row^';
   49.95 -COMMENT ON COLUMN &AO..&VIEW..remove_row
   49.96 -   IS 'FLAGS=AMIUL^DATATYPE=STRING(200)^PROMPT=Remove Row^REF=FndBoolean^';
   49.97 -COMMENT ON COLUMN &AO..&VIEW..remove_row_db
   49.98 -   IS 'FLAGS=A----^DATATYPE=STRING(20)^PROMPT=Remove Row^';
   49.99 -
  49.100 ------------------------------------------------------------------------------
  49.101 --------------------- PACKAGES FOR METHODS -----------------------------------
  49.102 ------------------------------------------------------------------------------
  49.103 -
  49.104 -PROMPT Creating &AO..&PKG implementation
  49.105 -
  49.106 -CREATE OR REPLACE PACKAGE BODY &AO..&PKG IS
  49.107 -
  49.108 -datetime_format_ VARCHAR2(40) := Fnd_Setting_API.Get_Value('EVENT_REG_DATETIME');
  49.109 -date_format_     VARCHAR2(40) := Fnd_Setting_API.Get_Value('EVENT_REG_DATE');
  49.110 -time_format_     VARCHAR2(40) := Fnd_Setting_API.Get_Value('EVENT_REG_TIME');
  49.111 -
  49.112 ------------------------------------------------------------------------------
  49.113 --------------------- LU SPECIFIC IMPLEMENTATION METHOD DECLARATIONS ---------
  49.114 ------------------------------------------------------------------------------
  49.115 -
  49.116 -PROCEDURE Create_Custom_Trigger___(
  49.117 -   rec_           IN     Fnd_Event_Tab%ROWTYPE,
  49.118 -   trigger_type_  IN     VARCHAR2 );
  49.119 -
  49.120 -PROCEDURE Create_Custom_Triggers___(
  49.121 -   rec_ IN Fnd_Event_Tab%ROWTYPE );
  49.122 -
  49.123 -FUNCTION Get_Trigger_Name___(
  49.124 -   event_id_      IN VARCHAR2,
  49.125 -   trigger_type_  IN VARCHAR2 ) RETURN VARCHAR2;
  49.126 -
  49.127 -PROCEDURE Remove_Custom_Trigger___(
  49.128 -   rec_           IN     Fnd_Event_Tab%ROWTYPE,
  49.129 -   trigger_type_  IN     VARCHAR2 );
  49.130 -
  49.131 -PROCEDURE Remove_Custom_Triggers___(
  49.132 -   rec_ IN Fnd_Event_Tab%ROWTYPE );
  49.133 -
  49.134 -FUNCTION Create_Trigger_Name___ (
  49.135 -   event_id_ IN VARCHAR2 ) RETURN VARCHAR2;
  49.136 ------------------------------------------------------------------------------
  49.137 --------------------- IMPLEMENTATION BASE METHODS ----------------------------
  49.138 ------------------------------------------------------------------------------
  49.139 --- Lock_By_Id___
  49.140 ---    Client-support to lock a specific instance of the logical unit.
  49.141 ---
  49.142 --- Lock_By_Keys___
  49.143 ---    Server support to lock a specific instance of the logical unit.
  49.144 ---
  49.145 --- Get_Object_By_Id___
  49.146 ---    Get LU-record from the database with a specified object identity.
  49.147 ---
  49.148 --- Get_Object_By_Keys___
  49.149 ---    Get LU-record from the database with specified key columns.
  49.150 ---
  49.151 --- Check_Exist___
  49.152 ---    Check if a specific LU-instance already exist in the database.
  49.153 ---
  49.154 --- Get_Id_Version_By_Keys___
  49.155 ---    Get the current OBJID and OBJVERSION for a specific LU-instance.
  49.156 ------------------------------------------------------------------------------
  49.157 -
  49.158 -FUNCTION Lock_By_Id___ (
  49.159 -   objid_      IN  VARCHAR2,
  49.160 -   objversion_ IN  VARCHAR2 ) RETURN &TABLE%ROWTYPE
  49.161 -IS
  49.162 -   row_changed EXCEPTION;
  49.163 -   row_deleted EXCEPTION;
  49.164 -   row_locked  EXCEPTION;
  49.165 -   PRAGMA      exception_init(row_locked, -0054);
  49.166 -   rec_        &TABLE%ROWTYPE;
  49.167 -   dummy_      NUMBER;
  49.168 -   CURSOR lock_control IS
  49.169 -      SELECT *
  49.170 -      FROM   &TABLE
  49.171 -      WHERE  &OBJID = objid_
  49.172 -      AND    &OBJVERSION = objversion_
  49.173 -      FOR UPDATE NOWAIT;
  49.174 -   CURSOR exist_control IS
  49.175 -      SELECT 1
  49.176 -      FROM   &TABLE
  49.177 -      WHERE  &OBJID = objid_;
  49.178 -BEGIN
  49.179 -   OPEN lock_control;
  49.180 -   FETCH lock_control INTO rec_;
  49.181 -   IF (lock_control%FOUND) THEN
  49.182 -      CLOSE lock_control;
  49.183 -      RETURN rec_;
  49.184 -   END IF;
  49.185 -   CLOSE lock_control;
  49.186 -   OPEN exist_control;
  49.187 -   FETCH exist_control INTO dummy_;
  49.188 -   IF (exist_control%FOUND) THEN
  49.189 -      CLOSE exist_control;
  49.190 -      RAISE row_changed;
  49.191 -   ELSE
  49.192 -      CLOSE exist_control;
  49.193 -      RAISE row_deleted;
  49.194 -   END IF;
  49.195 -EXCEPTION
  49.196 -   WHEN row_locked THEN
  49.197 -      Error_SYS.Record_Locked(lu_name_);
  49.198 -   WHEN row_changed THEN
  49.199 -      Error_SYS.Record_Modified(lu_name_);
  49.200 -   WHEN row_deleted THEN
  49.201 -      Error_SYS.Record_Removed(lu_name_);
  49.202 -END Lock_By_Id___;
  49.203 -
  49.204 -FUNCTION Lock_By_Keys___ (
  49.205 -   event_lu_name_ IN VARCHAR2,
  49.206 -   event_id_      IN VARCHAR2 ) RETURN &TABLE%ROWTYPE
  49.207 -IS
  49.208 -   row_deleted EXCEPTION;
  49.209 -   rec_        &TABLE%ROWTYPE;
  49.210 -   CURSOR lock_control IS
  49.211 -      SELECT *
  49.212 -      FROM  &TABLE
  49.213 -      WHERE event_lu_name = event_lu_name_
  49.214 -      AND   event_id = event_id_
  49.215 -      FOR UPDATE;
  49.216 -BEGIN
  49.217 -   OPEN lock_control;
  49.218 -   FETCH lock_control INTO rec_;
  49.219 -   IF (lock_control%FOUND) THEN
  49.220 -      CLOSE lock_control;
  49.221 -      RETURN rec_;
  49.222 -   ELSE
  49.223 -      CLOSE lock_control;
  49.224 -      RAISE row_deleted;
  49.225 -   END IF;
  49.226 -EXCEPTION
  49.227 -   WHEN row_deleted THEN
  49.228 -      Error_SYS.Record_Removed(lu_name_);
  49.229 -END Lock_By_Keys___;
  49.230 -
  49.231 -FUNCTION Get_Object_By_Id___ (
  49.232 -   objid_ IN VARCHAR2 ) RETURN &TABLE%ROWTYPE
  49.233 -IS
  49.234 -   lu_rec_ &TABLE%ROWTYPE;
  49.235 -   CURSOR getrec IS
  49.236 -      SELECT *
  49.237 -      FROM   &TABLE
  49.238 -      WHERE  &OBJID = objid_;
  49.239 -BEGIN
  49.240 -   OPEN getrec;
  49.241 -   FETCH getrec INTO lu_rec_;
  49.242 -   IF (getrec%NOTFOUND) THEN
  49.243 -      CLOSE getrec;
  49.244 -      Error_SYS.Record_Removed(lu_name_);
  49.245 -   END IF;
  49.246 -   CLOSE getrec;
  49.247 -   RETURN(lu_rec_);
  49.248 -END Get_Object_By_Id___;
  49.249 -
  49.250 -
  49.251 -FUNCTION Get_Object_By_Keys___ (
  49.252 -   event_lu_name_ IN VARCHAR2,
  49.253 -   event_id_      IN VARCHAR2 ) RETURN &TABLE%ROWTYPE
  49.254 -IS
  49.255 -   lu_rec_ &TABLE%ROWTYPE;
  49.256 -   CURSOR getrec IS
  49.257 -      SELECT *
  49.258 -      FROM  &TABLE
  49.259 -      WHERE event_lu_name = event_lu_name_
  49.260 -      AND   event_id = event_id_;
  49.261 -BEGIN
  49.262 -   OPEN getrec;
  49.263 -   FETCH getrec INTO lu_rec_;
  49.264 -   CLOSE getrec;
  49.265 -   RETURN(lu_rec_);
  49.266 -END Get_Object_By_Keys___;
  49.267 -
  49.268 -FUNCTION Check_Exist___ (
  49.269 -   event_lu_name_ IN VARCHAR2,
  49.270 -   event_id_      IN VARCHAR2 ) RETURN BOOLEAN
  49.271 -IS
  49.272 -   dummy_ NUMBER;
  49.273 -   CURSOR exist_control IS
  49.274 -      SELECT 1
  49.275 -      FROM   &TABLE
  49.276 -      WHERE event_lu_name = event_lu_name_
  49.277 -      AND   event_id = event_id_;
  49.278 -BEGIN
  49.279 -   OPEN exist_control;
  49.280 -   FETCH exist_control INTO dummy_;
  49.281 -   IF (exist_control%FOUND) THEN
  49.282 -      CLOSE exist_control;
  49.283 -      RETURN(TRUE);
  49.284 -   END IF;
  49.285 -   CLOSE exist_control;
  49.286 -   RETURN(FALSE);
  49.287 -END Check_Exist___;
  49.288 -
  49.289 -PROCEDURE Get_Id_Version_By_Keys___ (
  49.290 -   objid_         IN OUT VARCHAR2,
  49.291 -   objversion_    IN OUT VARCHAR2,
  49.292 -   event_lu_name_ IN     VARCHAR2,
  49.293 -   event_id_      IN     VARCHAR2)
  49.294 -IS
  49.295 -   CURSOR get_version IS
  49.296 -      SELECT &OBJID, &OBJVERSION
  49.297 -      FROM  &TABLE
  49.298 -      WHERE event_lu_name = event_lu_name_
  49.299 -      AND   event_id = event_id_;
  49.300 -BEGIN
  49.301 -   OPEN get_version;
  49.302 -   FETCH get_version INTO objid_, objversion_;
  49.303 -   CLOSE get_version;
  49.304 -END Get_Id_Version_By_Keys___;
  49.305 -
  49.306 ------------------------------------------------------------------------------
  49.307 --------------------- IMPLEMENTATION BASE METHODS FOR INSERT -----------------
  49.308 ------------------------------------------------------------------------------
  49.309 --- Prepare_Insert___
  49.310 ---    Set all default values for a new instance (ON-NEW-RECORD) of this
  49.311 ---    logical unit by calling procedure Add_Attr.
  49.312 ---
  49.313 --- Unpack_Check_Insert___
  49.314 ---    Unpack the attribute list, check all attributes from the client
  49.315 ---    and generate all default values before creation of the new object.
  49.316 ---
  49.317 --- Insert___
  49.318 ---    Insert a new LU-instance into the database and return the values
  49.319 ---    for OBJID and OBJVERSION.
  49.320 ------------------------------------------------------------------------------
  49.321 -
  49.322 -PROCEDURE Prepare_Insert___ (
  49.323 -   attr_ IN OUT VARCHAR2 )
  49.324 -IS
  49.325 -BEGIN
  49.326 -   Client_SYS.Clear_Attr(attr_);
  49.327 -   Client_SYS.Add_To_Attr('EVENT_TYPE_DB', 'CUSTOM', attr_);
  49.328 -   Client_SYS.Add_To_Attr('EVENT_TYPE', Fnd_Event_Type_API.Decode('CUSTOM'), attr_);
  49.329 -   Client_SYS.Add_To_Attr('NEW_ROW_DB', 'FALSE', attr_);
  49.330 -   Client_SYS.Add_To_Attr('NEW_ROW', Fnd_Boolean_API.Decode('FALSE'), attr_);
  49.331 -   Client_SYS.Add_To_Attr('MODIFY_ROW_DB', 'FALSE', attr_);
  49.332 -   Client_SYS.Add_To_Attr('MODIFY_ROW', Fnd_Boolean_API.Decode('FALSE'), attr_);
  49.333 -   Client_SYS.Add_To_Attr('REMOVE_ROW_DB', 'FALSE', attr_);
  49.334 -   Client_SYS.Add_To_Attr('REMOVE_ROW', Fnd_Boolean_API.Decode('FALSE'), attr_);
  49.335 -END Prepare_Insert___;
  49.336 -
  49.337 -
  49.338 -PROCEDURE Unpack_Check_Insert___ (
  49.339 -   attr_   IN OUT VARCHAR2,
  49.340 -   newrec_ IN OUT &TABLE%ROWTYPE )
  49.341 -IS
  49.342 -   ptr_   NUMBER;
  49.343 -   name_  VARCHAR2(30);
  49.344 -   value_ VARCHAR2(2000);
  49.345 -BEGIN
  49.346 -   ptr_ := NULL;
  49.347 -   WHILE (Client_SYS.Get_Next_From_Attr(attr_, ptr_, name_, value_)) LOOP
  49.348 -      IF (name_ = 'EVENT_LU_NAME') THEN
  49.349 -         newrec_.event_lu_name := value_;
  49.350 -      ELSIF (name_ = 'EVENT_ID') THEN
  49.351 -         newrec_.event_id := Upper(value_);
  49.352 -      ELSIF (name_ = 'EVENT_DESCRIPTION') THEN
  49.353 -         newrec_.event_description := value_;
  49.354 -      ELSIF (name_ = 'EVENT_ENABLE') THEN
  49.355 -         newrec_.event_enable := value_;
  49.356 -      ELSIF (name_ = 'EVENT_TABLE_NAME') THEN
  49.357 -         newrec_.event_table_name := value_;
  49.358 -      ELSIF (name_ = 'EVENT_TYPE') THEN
  49.359 -         newrec_.event_type := Fnd_Event_Type_API.Encode(value_);
  49.360 -         IF (value_ IS NOT NULL) THEN
  49.361 -            Fnd_Event_Type_API.Exist(value_);
  49.362 -         END IF;
  49.363 -      ELSIF (name_ = 'EVENT_TYPE_DB') THEN
  49.364 -         newrec_.event_type := value_;
  49.365 -         IF (value_ IS NOT NULL) THEN
  49.366 -            Fnd_Event_Type_API.Exist_Db(value_);
  49.367 -         END IF;
  49.368 -      ELSIF (name_ = 'MODIFIED_ATTRIBUTES') THEN
  49.369 -         newrec_.modified_attributes := value_;
  49.370 -      ELSIF (name_ = 'NEW_ROW') THEN
  49.371 -         newrec_.new_row := Fnd_Boolean_API.Encode(value_);
  49.372 -         IF (value_ IS NOT NULL) THEN
  49.373 -            Fnd_Boolean_API.Exist(value_);
  49.374 -         END IF;
  49.375 -      ELSIF (name_ = 'NEW_ROW_DB') THEN
  49.376 -         newrec_.new_row := value_;
  49.377 -         IF (value_ IS NOT NULL) THEN
  49.378 -            Fnd_Boolean_API.Exist_Db(value_);
  49.379 -         END IF;
  49.380 -      ELSIF (name_ = 'MODIFY_ROW') THEN
  49.381 -         newrec_.modify_row := Fnd_Boolean_API.Encode(value_);
  49.382 -         IF (value_ IS NOT NULL) THEN
  49.383 -            Fnd_Boolean_API.Exist(value_);
  49.384 -         END IF;
  49.385 -      ELSIF (name_ = 'MODIFY_ROW_DB') THEN
  49.386 -         newrec_.modify_row := value_;
  49.387 -         IF (value_ IS NOT NULL) THEN
  49.388 -            Fnd_Boolean_API.Exist_Db(value_);
  49.389 -         END IF;
  49.390 -      ELSIF (name_ = 'REMOVE_ROW') THEN
  49.391 -         newrec_.remove_row := Fnd_Boolean_API.Encode(value_);
  49.392 -         IF (value_ IS NOT NULL) THEN
  49.393 -            Fnd_Boolean_API.Exist(value_);
  49.394 -         END IF;
  49.395 -      ELSIF (name_ = 'REMOVE_ROW_DB') THEN
  49.396 -         newrec_.remove_row := value_;
  49.397 -         IF (value_ IS NOT NULL) THEN
  49.398 -            Fnd_Boolean_API.Exist_Db(value_);
  49.399 -         END IF;
  49.400 -      ELSE
  49.401 -         Error_SYS.Item_Not_Exist(lu_name_, name_, value_);
  49.402 -      END IF;
  49.403 -   END LOOP;
  49.404 -   Client_SYS.Clear_Attr(attr_);
  49.405 -   Error_SYS.Check_Not_Null(lu_name_, 'EVENT_LU_NAME', newrec_.event_lu_name);
  49.406 -   Error_SYS.Check_Not_Null(lu_name_, 'EVENT_ID', newrec_.event_id);
  49.407 -   Error_SYS.Check_Valid_Identifier('EVENT_ID', newrec_.event_id); 
  49.408 -   Error_SYS.Check_Not_Null(lu_name_, 'EVENT_TYPE', newrec_.event_type);
  49.409 -   Error_SYS.Check_Not_Null(lu_name_, 'NEW_ROW', newrec_.new_row);
  49.410 -   Error_SYS.Check_Not_Null(lu_name_, 'MODIFY_ROW', newrec_.modify_row);
  49.411 -   Error_SYS.Check_Not_Null(lu_name_, 'REMOVE_ROW', newrec_.remove_row);
  49.412 -EXCEPTION
  49.413 -   WHEN value_error THEN
  49.414 -      Error_SYS.Item_Format(lu_name_, name_, value_);
  49.415 -END Unpack_Check_Insert___;
  49.416 -
  49.417 -
  49.418 -PROCEDURE Insert___ (
  49.419 -   objid_      OUT    VARCHAR2,
  49.420 -   objversion_ OUT    VARCHAR2,
  49.421 -   newrec_     IN OUT &TABLE%ROWTYPE,
  49.422 -   attr_       IN OUT VARCHAR2 )
  49.423 -IS
  49.424 -BEGIN
  49.425 -   newrec_.rowversion := sysdate;
  49.426 -   objversion_ := to_char(newrec_.rowversion,'YYYYMMDDHH24MISS');
  49.427 -   --
  49.428 -   IF (nvl(newrec_.event_enable, 'FALSE') = 'TRUE') THEN
  49.429 -      Error_SYS.Appl_General(lu_name_, 'ENERR_I: Can not enable event with no actions enabled.');
  49.430 -   END IF;
  49.431 -   --
  49.432 -   INSERT
  49.433 -      INTO fnd_event_tab (
  49.434 -         event_lu_name,
  49.435 -         event_id,
  49.436 -         event_description,
  49.437 -         event_enable,
  49.438 -         event_table_name,
  49.439 -         event_type,
  49.440 -         modified_attributes,
  49.441 -         new_row,
  49.442 -         modify_row,
  49.443 -         remove_row,
  49.444 -         rowversion)
  49.445 -      VALUES (
  49.446 -         newrec_.event_lu_name,
  49.447 -         newrec_.event_id,
  49.448 -         newrec_.event_description,
  49.449 -         newrec_.event_enable,
  49.450 -         newrec_.event_table_name,
  49.451 -         newrec_.event_type,
  49.452 -         newrec_.modified_attributes,
  49.453 -         newrec_.new_row,
  49.454 -         newrec_.modify_row,
  49.455 -         newrec_.remove_row,
  49.456 -         newrec_.rowversion)
  49.457 -   RETURNING &OBJID INTO objid_;
  49.458 -   -- Create Custom Defined triggers
  49.459 -   IF (newrec_.event_type = 'CUSTOM') THEN
  49.460 -      IF (newrec_.event_enable = 'TRUE') THEN
  49.461 -         Create_Custom_Triggers___(newrec_);
  49.462 -      END IF;
  49.463 -   END IF;
  49.464 -EXCEPTION
  49.465 -   WHEN dup_val_on_index THEN
  49.466 -      Error_SYS.Record_Exist(lu_name_);
  49.467 -END Insert___;
  49.468 -
  49.469 ------------------------------------------------------------------------------
  49.470 --------------------- IMPLEMENTATION BASE METHODS FOR UPDATE -----------------
  49.471 ------------------------------------------------------------------------------
  49.472 --- Unpack_Check_Update___
  49.473 ---    Unpack the attribute list, check all attributes from the client
  49.474 ---    and generate all default values before modifying the object.
  49.475 ---
  49.476 --- Update___
  49.477 ---    Update an existing LU-instance in the database and return the
  49.478 ---    the new OBJVERSION.
  49.479 ------------------------------------------------------------------------------
  49.480 -
  49.481 -PROCEDURE Unpack_Check_Update___ (
  49.482 -   attr_   IN OUT VARCHAR2,
  49.483 -   newrec_ IN OUT &TABLE%ROWTYPE,
  49.484 -   objid_  IN     VARCHAR2 )
  49.485 -IS
  49.486 -   ptr_   NUMBER;
  49.487 -   name_  VARCHAR2(30);
  49.488 -   value_ VARCHAR2(2000);
  49.489 -BEGIN
  49.490 -   ptr_ := NULL;
  49.491 -   WHILE (Client_SYS.Get_Next_From_Attr(attr_, ptr_, name_, value_)) LOOP
  49.492 -      IF (name_ = 'EVENT_LU_NAME') THEN
  49.493 -         Error_SYS.Item_Update(lu_name_, 'EVENT_LU_NAME');
  49.494 -      ELSIF (name_ = 'EVENT_ID') THEN
  49.495 -         Error_SYS.Item_Update(lu_name_, 'EVENT_ID');
  49.496 -      ELSIF (name_ = 'EVENT_DESCRIPTION') THEN
  49.497 -         newrec_.event_description := value_;
  49.498 -      ELSIF (name_ = 'EVENT_ENABLE') THEN
  49.499 -         newrec_.event_enable := value_;
  49.500 -      ELSIF (name_ = 'EVENT_TABLE_NAME') THEN
  49.501 -         newrec_.event_table_name := value_;
  49.502 -      ELSIF (name_ = 'EVENT_TYPE') THEN
  49.503 -         newrec_.event_type := Fnd_Event_Type_API.Encode(value_);
  49.504 -         IF (value_ IS NOT NULL) THEN
  49.505 -            Fnd_Event_Type_API.Exist(value_);
  49.506 -         END IF;
  49.507 -      ELSIF (name_ = 'EVENT_TYPE_DB') THEN
  49.508 -         newrec_.event_type := value_;
  49.509 -         IF (value_ IS NOT NULL) THEN
  49.510 -            Fnd_Event_Type_API.Exist_Db(value_);
  49.511 -         END IF;
  49.512 -      ELSIF (name_ = 'MODIFIED_ATTRIBUTES') THEN
  49.513 -         newrec_.modified_attributes := value_;
  49.514 -      ELSIF (name_ = 'NEW_ROW') THEN
  49.515 -         newrec_.new_row := Fnd_Boolean_API.Encode(value_);
  49.516 -         IF (value_ IS NOT NULL) THEN
  49.517 -            Fnd_Boolean_API.Exist(value_);
  49.518 -         END IF;
  49.519 -      ELSIF (name_ = 'NEW_ROW_DB') THEN
  49.520 -         newrec_.new_row := value_;
  49.521 -         IF (value_ IS NOT NULL) THEN
  49.522 -            Fnd_Boolean_API.Exist_Db(value_);
  49.523 -         END IF;
  49.524 -      ELSIF (name_ = 'MODIFY_ROW') THEN
  49.525 -         newrec_.modify_row := Fnd_Boolean_API.Encode(value_);
  49.526 -         IF (value_ IS NOT NULL) THEN
  49.527 -            Fnd_Boolean_API.Exist(value_);
  49.528 -         END IF;
  49.529 -      ELSIF (name_ = 'MODIFY_ROW_DB') THEN
  49.530 -         newrec_.modify_row := value_;
  49.531 -         IF (value_ IS NOT NULL) THEN
  49.532 -            Fnd_Boolean_API.Exist_Db(value_);
  49.533 -         END IF;
  49.534 -      ELSIF (name_ = 'REMOVE_ROW') THEN
  49.535 -         newrec_.remove_row := Fnd_Boolean_API.Encode(value_);
  49.536 -         IF (value_ IS NOT NULL) THEN
  49.537 -            Fnd_Boolean_API.Exist(value_);
  49.538 -         END IF;
  49.539 -      ELSIF (name_ = 'REMOVE_ROW_DB') THEN
  49.540 -         newrec_.remove_row := value_;
  49.541 -         IF (value_ IS NOT NULL) THEN
  49.542 -            Fnd_Boolean_API.Exist_Db(value_);
  49.543 -         END IF;
  49.544 -      ELSE
  49.545 -         Error_SYS.Item_Not_Exist(lu_name_, name_, value_);
  49.546 -      END IF;
  49.547 -   END LOOP;
  49.548 -   Client_SYS.Clear_Attr(attr_);
  49.549 -   Error_SYS.Check_Not_Null(lu_name_, 'EVENT_TYPE', newrec_.event_type);
  49.550 -   Error_SYS.Check_Not_Null(lu_name_, 'NEW_ROW', newrec_.new_row);
  49.551 -   Error_SYS.Check_Not_Null(lu_name_, 'MODIFY_ROW', newrec_.modify_row);
  49.552 -   Error_SYS.Check_Not_Null(lu_name_, 'REMOVE_ROW', newrec_.remove_row);
  49.553 -EXCEPTION
  49.554 -   WHEN value_error THEN
  49.555 -      Error_SYS.Item_Format(lu_name_, name_, value_);
  49.556 -END Unpack_Check_Update___;
  49.557 -
  49.558 -
  49.559 -PROCEDURE Update___ (
  49.560 -   objid_      IN     VARCHAR2,
  49.561 -   oldrec_     IN     &TABLE%ROWTYPE,
  49.562 -   newrec_     IN OUT &TABLE%ROWTYPE,
  49.563 -   attr_       IN OUT VARCHAR2,
  49.564 -   objversion_ IN OUT VARCHAR2,
  49.565 -   by_keys_    IN BOOLEAN DEFAULT FALSE )
  49.566 -IS
  49.567 -   dummy_ NUMBER;
  49.568 -
  49.569 -   CURSOR get_event_count IS
  49.570 -   SELECT COUNT(*)
  49.571 -     FROM fnd_event_action_tab
  49.572 -     WHERE event_lu_name = newrec_.event_lu_name
  49.573 -     AND   event_id = newrec_.event_id
  49.574 -     AND   action_enable = 'TRUE';
  49.575 -BEGIN
  49.576 -   IF (nvl(oldrec_.event_enable, 'FALSE') = 'FALSE' AND newrec_.event_enable = 'TRUE') THEN
  49.577 -      OPEN  get_event_count;
  49.578 -      FETCH get_event_count INTO dummy_;
  49.579 -      CLOSE get_event_count;
  49.580 -      IF (dummy_ = 0) THEN
  49.581 -         Error_SYS.Appl_General(lu_name_, 'ENERR_U: Can not enable event with no actions enabled.');
  49.582 -      END IF;
  49.583 -   END IF;
  49.584 -   --
  49.585 -   newrec_.rowversion := sysdate;
  49.586 -   objversion_ := to_char(newrec_.rowversion,'YYYYMMDDHH24MISS');
  49.587 -   IF by_keys_ THEN
  49.588 -      UPDATE fnd_event_tab
  49.589 -      SET event_lu_name = newrec_.event_lu_name,
  49.590 -          event_id = newrec_.event_id,
  49.591 -          event_description = newrec_.event_description,
  49.592 -          event_enable = newrec_.event_enable,
  49.593 -          event_table_name = newrec_.event_table_name,
  49.594 -          event_type = newrec_.event_type,
  49.595 -          modified_attributes = newrec_.modified_attributes,
  49.596 -          new_row = newrec_.new_row,
  49.597 -          modify_row = newrec_.modify_row,
  49.598 -          remove_row = newrec_.remove_row,
  49.599 -          rowversion = newrec_.rowversion
  49.600 -      WHERE event_lu_name = newrec_.event_lu_name
  49.601 -      AND   event_id = newrec_.event_id;
  49.602 -   ELSE
  49.603 -      UPDATE fnd_event_tab
  49.604 -      SET event_lu_name = newrec_.event_lu_name,
  49.605 -          event_id = newrec_.event_id,
  49.606 -          event_description = newrec_.event_description,
  49.607 -          event_enable = newrec_.event_enable,
  49.608 -          event_table_name = newrec_.event_table_name,
  49.609 -          event_type = newrec_.event_type,
  49.610 -          modified_attributes = newrec_.modified_attributes,
  49.611 -          new_row = newrec_.new_row,
  49.612 -          modify_row = newrec_.modify_row,
  49.613 -          remove_row = newrec_.remove_row,
  49.614 -          rowversion = newrec_.rowversion
  49.615 -      WHERE &OBJID = objid_;
  49.616 -   END IF;
  49.617 -   -- Create/remove Custom Defined triggers
  49.618 -   IF (newrec_.event_type = 'CUSTOM') THEN
  49.619 -      IF (newrec_.event_enable = 'TRUE') THEN
  49.620 -         Remove_Custom_Triggers___(oldrec_);
  49.621 -         Create_Custom_Triggers___(newrec_);
  49.622 -      ELSE
  49.623 -         Remove_Custom_Triggers___(oldrec_);
  49.624 -      END IF;
  49.625 -   END IF;
  49.626 -EXCEPTION
  49.627 -   WHEN dup_val_on_index THEN
  49.628 -      Error_SYS.Record_Exist(lu_name_);
  49.629 -END Update___;
  49.630 -
  49.631 ------------------------------------------------------------------------------
  49.632 --------------------- IMPLEMENTATION BASE METHODS FOR DELETE -----------------
  49.633 ------------------------------------------------------------------------------
  49.634 --- Check_Delete___
  49.635 ---    Checks whether a specific LU-record may be removed or not.
  49.636 ---    The procedure should check business rules like attribute values
  49.637 ---    as well as database constraints (defined or not).
  49.638 ---
  49.639 --- Delete___
  49.640 ---    Deletion of the specific LU-object from the database.
  49.641 ------------------------------------------------------------------------------
  49.642 -
  49.643 -PROCEDURE Check_Delete___ (
  49.644 -   remrec_ IN &TABLE%ROWTYPE )
  49.645 -IS
  49.646 -   key_ VARCHAR2(2000);
  49.647 -BEGIN
  49.648 -   key_ := remrec_.event_lu_name || '^' || remrec_.event_id || '^';
  49.649 -   Reference_SYS.Check_Restricted_Delete(lu_name_, key_);
  49.650 -END Check_Delete___;
  49.651 -
  49.652 -
  49.653 -PROCEDURE Delete___ (
  49.654 -   objid_  IN VARCHAR2,
  49.655 -   remrec_ IN &TABLE%ROWTYPE )
  49.656 -IS
  49.657 -   key_ VARCHAR2(2000);
  49.658 -BEGIN
  49.659 -   key_ := remrec_.event_lu_name || '^' || remrec_.event_id || '^';
  49.660 -   Reference_SYS.Do_Cascade_Delete(lu_name_, key_);
  49.661 -   DELETE
  49.662 -      FROM  fnd_event_tab
  49.663 -      WHERE &OBJID = objid_;
  49.664 -   -- Remove Custom Defined triggers
  49.665 -   IF (remrec_.event_type = 'CUSTOM') THEN
  49.666 -      Remove_Custom_Triggers___(remrec_);
  49.667 -   END IF;
  49.668 -END Delete___;
  49.669 -
  49.670 ------------------------------------------------------------------------------
  49.671 --------------------- PRIVATE BASE METHODS -----------------------------------
  49.672 ------------------------------------------------------------------------------
  49.673 --- Lock__
  49.674 ---    Client-support to lock a specific instance of the logical unit.
  49.675 ---
  49.676 --- New__
  49.677 ---    Client-support interface to create LU instances.
  49.678 ---       action_ = 'PREPARE'
  49.679 ---          Default values and handle of information to client.
  49.680 ---          The default values are set in procedure Prepare_Insert___.
  49.681 ---       action_ = 'CHECK'
  49.682 ---          Check all attributes before creating new object and handle of
  49.683 ---          information to client. The attribute list is unpacked, checked
  49.684 ---          and prepared (defaults) in procedure Unpack_Check_Insert___.
  49.685 ---       action_ = 'DO'
  49.686 ---          Creation of new instances of the logical unit and handle of
  49.687 ---          information to client. The attribute list is unpacked, checked
  49.688 ---          and prepared (defaults) in procedure Unpack_Check_Insert___
  49.689 ---          before calling procedure Insert___.
  49.690 ---
  49.691 --- Modify__
  49.692 ---    Client-support interface to modify attributes for LU instances.
  49.693 ---       action_ = 'CHECK'
  49.694 ---          Check all attributes before modifying an existing object and
  49.695 ---          handle of information to client. The attribute list is unpacked,
  49.696 ---          checked and prepared(defaults) in procedure Unpack_Check_Update___.
  49.697 ---       action_ = 'DO'
  49.698 ---          Modification of an existing instance of the logical unit. The
  49.699 ---          procedure unpacks the attributes, checks all values before
  49.700 ---          procedure Update___ is called.
  49.701 ---
  49.702 --- Remove__
  49.703 ---    Client-support interface to remove LU instances.
  49.704 ---       action_ = 'CHECK'
  49.705 ---          Check whether a specific LU-instance may be removed or not.
  49.706 ---          The procedure fetches the complete record by calling procedure
  49.707 ---          Get_Object_By_Id___. Then the check is made by calling procedure
  49.708 ---          Check_Delete___.
  49.709 ---       action_ = 'DO'
  49.710 ---          Remove an existing instance of the logical unit. The procedure
  49.711 ---          fetches the complete LU-record, checks for a delete and then
  49.712 ---          deletes the record by calling procedure Delete___.
  49.713 ------------------------------------------------------------------------------
  49.714 -
  49.715 -PROCEDURE Lock__ (
  49.716 -   info_       OUT VARCHAR2,
  49.717 -   objid_      IN  VARCHAR2,
  49.718 -   objversion_ IN  VARCHAR2 )
  49.719 -IS
  49.720 -   dummy_ &TABLE%ROWTYPE;
  49.721 -BEGIN
  49.722 -   General_SYS.Init_Method(lu_name_, '&PKG', 'Lock__');
  49.723 -   dummy_ := Lock_By_Id___(objid_, objversion_);
  49.724 -   info_ := Client_SYS.Get_All_Info;
  49.725 -END Lock__;
  49.726 -
  49.727 -
  49.728 -PROCEDURE New__ (
  49.729 -   info_       OUT    VARCHAR2,
  49.730 -   objid_      OUT    VARCHAR2,
  49.731 -   objversion_ OUT    VARCHAR2,
  49.732 -   attr_       IN OUT VARCHAR2,
  49.733 -   action_     IN     VARCHAR2 )
  49.734 -IS
  49.735 -   newrec_ &TABLE%ROWTYPE;
  49.736 -BEGIN
  49.737 -   General_SYS.Init_Method(lu_name_, '&PKG', 'New__');
  49.738 -   IF (action_ = 'PREPARE') THEN
  49.739 -      Prepare_Insert___(attr_);
  49.740 -   ELSIF (action_ = 'CHECK') THEN
  49.741 -      Unpack_Check_Insert___(attr_, newrec_);
  49.742 -   ELSIF (action_ = 'DO') THEN
  49.743 -      Unpack_Check_Insert___(attr_, newrec_);
  49.744 -      Insert___(objid_, objversion_, newrec_, attr_);
  49.745 -   END IF;
  49.746 -   info_ := Client_SYS.Get_All_Info;
  49.747 -END New__;
  49.748 -
  49.749 -
  49.750 -PROCEDURE Modify__ (
  49.751 -   info_       OUT    VARCHAR2,
  49.752 -   objid_      IN     VARCHAR2,
  49.753 -   objversion_ IN OUT VARCHAR2,
  49.754 -   attr_       IN OUT VARCHAR2,
  49.755 -   action_     IN     VARCHAR2 )
  49.756 -IS
  49.757 -   oldrec_ &TABLE%ROWTYPE;
  49.758 -   newrec_ &TABLE%ROWTYPE;
  49.759 -BEGIN
  49.760 -   General_SYS.Init_Method(lu_name_, '&PKG', 'Modify__');
  49.761 -   IF (action_ = 'CHECK') THEN
  49.762 -      newrec_ := Get_Object_By_Id___(objid_);
  49.763 -      Unpack_Check_Update___(attr_, newrec_, objid_);
  49.764 -   ELSIF (action_ = 'DO') THEN
  49.765 -      oldrec_ := Lock_By_Id___(objid_, objversion_);
  49.766 -      newrec_ := oldrec_;
  49.767 -      Unpack_Check_Update___(attr_, newrec_, objid_);
  49.768 -      Update___(objid_, oldrec_, newrec_, attr_, objversion_);
  49.769 -   END IF;
  49.770 -   info_ := Client_SYS.Get_All_Info;
  49.771 -END Modify__;
  49.772 -
  49.773 -
  49.774 -PROCEDURE Remove__ (
  49.775 -   info_       OUT VARCHAR2,
  49.776 -   objid_      IN  VARCHAR2,
  49.777 -   objversion_ IN  VARCHAR2,
  49.778 -   action_     IN  VARCHAR2 )
  49.779 -IS
  49.780 -   remrec_ &TABLE%ROWTYPE;
  49.781 -BEGIN
  49.782 -   General_SYS.Init_Method(lu_name_, '&PKG', 'Remove__');
  49.783 -   IF (action_ = 'CHECK') THEN
  49.784 -      remrec_ := Get_Object_By_Id___(objid_);
  49.785 -      Check_Delete___(remrec_);
  49.786 -   ELSIF (action_ = 'DO') THEN
  49.787 -      remrec_ := Lock_By_Id___(objid_, objversion_);
  49.788 -      Check_Delete___(remrec_);
  49.789 -      Delete___(objid_, remrec_);
  49.790 -   END IF;
  49.791 -   info_ := Client_SYS.Get_All_Info;
  49.792 -END Remove__;
  49.793 -
  49.794 ------------------------------------------------------------------------------
  49.795 --------------------- PUBLIC BASE METHODS ------------------------------------
  49.796 ------------------------------------------------------------------------------
  49.797 --- Exist
  49.798 ---   Checks if given pointer (e.g. primary key) to an instance of this
  49.799 ---   logical unit exists. If not an exception will be raised.
  49.800 ------------------------------------------------------------------------------
  49.801 -
  49.802 -PROCEDURE Exist (
  49.803 -   event_lu_name_ IN VARCHAR2,
  49.804 -   event_id_      IN VARCHAR2 )
  49.805 -IS
  49.806 -BEGIN
  49.807 -   General_SYS.Init_Method(lu_name_, '&PKG', 'Exist', TRUE);
  49.808 -   IF (NOT Check_Exist___(event_lu_name_, event_id_)) THEN
  49.809 -      Error_SYS.Record_Not_Exist(lu_name_);
  49.810 -   END IF;
  49.811 -END Exist;
  49.812 -
  49.813 ------------------------------------------------------------------------------
  49.814 --------------------- LU SPECIFIC IMPLEMENTATION METHODS ---------------------
  49.815 ------------------------------------------------------------------------------
  49.816 -
  49.817 -PROCEDURE Create_Custom_Triggers___(
  49.818 -   rec_ IN Fnd_Event_Tab%ROWTYPE )
  49.819 -IS
  49.820 -BEGIN
  49.821 -   General_SYS.Init_Method(lu_name_, '&PKG', 'Create_Custom_Triggers___', TRUE);
  49.822 -   -- Create triggers per type (New, Modify, Remove)
  49.823 -   IF (rec_.new_row = 'TRUE') THEN
  49.824 -      Create_Custom_Trigger___(rec_, 'NEW');
  49.825 -   END IF;
  49.826 -   IF (rec_.modify_row = 'TRUE') THEN
  49.827 -      Create_Custom_Trigger___(rec_, 'MODIFY');
  49.828 -   END IF;
  49.829 -   IF (rec_.remove_row = 'TRUE') THEN
  49.830 -      Create_Custom_Trigger___(rec_, 'REMOVE');
  49.831 -   END IF;
  49.832 -END Create_Custom_Triggers___;
  49.833 -
  49.834 -PROCEDURE Create_Custom_Trigger___(
  49.835 -   rec_           IN     Fnd_Event_Tab%ROWTYPE,
  49.836 -   trigger_type_  IN     VARCHAR2 )
  49.837 -IS
  49.838 -   columns_             Installation_SYS.ColumnTabType;
  49.839 -   stmt_                VARCHAR2(32000);
  49.840 -   old_param_prefix_    VARCHAR2(10);
  49.841 -   new_param_prefix_    VARCHAR2(10);
  49.842 -   format_prefix_       VARCHAR2(30);
  49.843 -   format_postfix_      VARCHAR2(30);
  49.844 -   if_stmt_start_       VARCHAR2(32000);
  49.845 -   if_stmt_end_         VARCHAR2(32000);
  49.846 -   indent_              NUMBER;
  49.847 -   --
  49.848 -   CURSOR get_param IS
  49.849 -   SELECT *
  49.850 -     FROM fnd_event_parameter_tab
  49.851 -    WHERE event_lu_name = rec_.event_lu_name
  49.852 -      AND event_id = rec_.event_id;
  49.853 -   --
  49.854 -   FUNCTION space___ (
  49.855 -      indent_  IN NUMBER ) RETURN VARCHAR2
  49.856 -   IS
  49.857 -      string_  VARCHAR2(100);
  49.858 -   BEGIN
  49.859 -      RETURN(lpad(string_, indent_ * 3));
  49.860 -   END space___;
  49.861 -   --
  49.862 -   FUNCTION Get_Dml_Event___(
  49.863 -      trigger_type_        IN VARCHAR2 ) RETURN VARCHAR2
  49.864 -   IS
  49.865 -   BEGIN
  49.866 -      CASE trigger_type_
  49.867 -         WHEN 'NEW' THEN
  49.868 -            RETURN('INSERT');
  49.869 -         WHEN 'MODIFY' THEN
  49.870 -            RETURN('UPDATE');
  49.871 -         WHEN 'REMOVE' THEN
  49.872 -            RETURN('DELETE');
  49.873 -      END CASE;
  49.874 -   END Get_Dml_Event___;
  49.875 -   --
  49.876 -   FUNCTION Get_Columns___ (
  49.877 -      column_list_ IN VARCHAR2 ) RETURN Installation_SYS.ColumnTabType
  49.878 -   IS
  49.879 -      pos_              BINARY_INTEGER       := 1;
  49.880 -      start_            BINARY_INTEGER       := 1;
  49.881 -      tmp_column_list_  VARCHAR2(32000)      := column_list_;
  49.882 -      separator_        CONSTANT VARCHAR2(2) := ';';
  49.883 -      column_name_      VARCHAR2(30);
  49.884 -      columns_          Installation_SYS.ColumnTabType;
  49.885 -   BEGIN
  49.886 -      IF column_list_ IS NULL THEN
  49.887 -         RETURN(columns_);
  49.888 -      END IF;
  49.889 -      -- Find all attributes in Search Domain Title
  49.890 -      pos_ := Instr(tmp_column_list_, separator_, pos_);
  49.891 -      LOOP
  49.892 -         -- Find column name
  49.893 -         column_name_ := Substr(tmp_column_list_, start_, pos_ - start_);
  49.894 -         IF column_name_ IS NOT NULL THEN
  49.895 -            Installation_SYS.Set_Table_Column(columns_, column_name_);
  49.896 -         END IF;
  49.897 -         -- Find new attribute
  49.898 -         start_ := pos_ + 1;
  49.899 -         pos_   := Instr(tmp_column_list_, separator_, start_);
  49.900 -         IF pos_ = 0 THEN
  49.901 -            pos_ := length(tmp_column_list_);
  49.902 -            -- Find column name
  49.903 -            column_name_ := Substr(tmp_column_list_, start_);
  49.904 -            Installation_SYS.Set_Table_Column(columns_, column_name_);
  49.905 -            EXIT;
  49.906 -         END IF;
  49.907 -      END LOOP;
  49.908 -      RETURN(columns_);
  49.909 -   END Get_Columns___;
  49.910 -   --
  49.911 -   FUNCTION Create_If_Stmt___ (
  49.912 -      column_list_ IN VARCHAR2 ) RETURN VARCHAR2
  49.913 -   IS
  49.914 -      found_            BOOLEAN              := FALSE;
  49.915 -      i_                BINARY_INTEGER       := 0;
  49.916 -      pos_              BINARY_INTEGER       := 1;
  49.917 -      start_            BINARY_INTEGER       := 1;
  49.918 -      tmp_column_list_  VARCHAR2(32000)      := column_list_;
  49.919 -      stmt_             VARCHAR2(32000);
  49.920 -      separator_        CONSTANT VARCHAR2(2) := ';';
  49.921 -      column_name_      VARCHAR2(30);
  49.922 -   BEGIN
  49.923 -      IF column_list_ IS NULL THEN
  49.924 -         RETURN(NULL);
  49.925 -      END IF;
  49.926 -      -- Find all attributes in Search Domain Title
  49.927 -      pos_ := Instr(tmp_column_list_, separator_, pos_);
  49.928 -      i_   := i_ + 1;
  49.929 -      IF (tmp_column_list_ IS NOT NULL) THEN
  49.930 -         stmt_ := stmt_ || 'IF ';
  49.931 -      END IF;
  49.932 -      LOOP
  49.933 -         IF (i_ > 1) THEN
  49.934 -            stmt_ := stmt_||space___(indent_)||' OR ';
  49.935 -         END IF;
  49.936 -         -- Find column name
  49.937 -         column_name_ := Substr(tmp_column_list_, start_, pos_ - start_);
  49.938 -         IF column_name_ IS NOT NULL THEN
  49.939 -            found_   := TRUE;
  49.940 -            indent_  := indent_ + 1;
  49.941 -            stmt_    := stmt_ ||space___(indent_)||'(:NEW.'||column_name_||' != '||':OLD.'||column_name_||') OR ((:NEW.'||column_name_||' IS NULL) AND ('||':old.'||column_name_||' IS NOT NULL)) OR ((:new.'||column_name_||' IS NOT NULL) AND ('||':OLD.'||column_name_||' IS NULL))';
  49.942 -         END IF;
  49.943 -         -- Find new attribute
  49.944 -         start_ := pos_ + 1;
  49.945 -         pos_   := Instr(tmp_column_list_, separator_, start_);
  49.946 -         i_     := i_ + 1;
  49.947 -         IF pos_ = 0 THEN
  49.948 -            IF (i_ > 1 AND found_) THEN
  49.949 -               stmt_ := stmt_||space___(indent_)||' OR ';
  49.950 -            END IF;
  49.951 -            pos_ := length(tmp_column_list_);
  49.952 -            -- Find column name
  49.953 -            column_name_ := Substr(tmp_column_list_, start_);
  49.954 -            stmt_ := stmt_ ||space___(indent_)||'(:NEW.'||column_name_||' != '||':OLD.'||column_name_||') OR ((:NEW.'||column_name_||' IS NULL) AND ('||':OLD.'||column_name_||' IS NOT NULL)) OR ((:NEW.'||column_name_||' IS NOT NULL) AND ('||':OLD.'||column_name_||' IS NULL))';
  49.955 -            stmt_ := stmt_||space___(indent_)||' THEN ';
  49.956 -            EXIT;
  49.957 -         END IF;
  49.958 -      END LOOP;
  49.959 -      RETURN(stmt_);
  49.960 -   END Create_If_Stmt___;
  49.961 -   --
  49.962 -   FUNCTION Replace_Parameter___ (
  49.963 -      plsql_method_ IN VARCHAR2 ) RETURN VARCHAR2
  49.964 -   IS
  49.965 -      pos_              BINARY_INTEGER       := 1;
  49.966 -      method_           VARCHAR2(32000)      := plsql_method_;
  49.967 -      param_marker_     CONSTANT VARCHAR2(2) := chr(38);
  49.968 -      --
  49.969 -      CURSOR get_param IS
  49.970 -      SELECT *
  49.971 -        FROM fnd_event_parameter_tab
  49.972 -       WHERE event_lu_name = rec_.event_lu_name
  49.973 -         AND event_id = rec_.event_id;
  49.974 -   BEGIN
  49.975 -      pos_ := Instr(method_, param_marker_);
  49.976 -      IF (pos_ = 0) THEN
  49.977 -         RETURN(method_);
  49.978 -      END IF;
  49.979 -      -- Replace all parameters used as parameters to PL/SQL method
  49.980 -      FOR par IN get_param LOOP
  49.981 -         IF par.current_value = 'TRUE' THEN
  49.982 -            method_ := replace(method_, param_marker_||'OLD:'||par.id, old_param_prefix_||par.id);
  49.983 -         END IF;
  49.984 -         IF par.new_value = 'TRUE' THEN
  49.985 -            method_ := replace(method_, param_marker_||'NEW:'||par.id, new_param_prefix_||par.id);
  49.986 -         END IF;
  49.987 -         pos_ := Instr(method_, param_marker_);
  49.988 -         IF pos_ = 0 THEN
  49.989 -            RETURN(method_);
  49.990 -         END IF;
  49.991 -      END LOOP;
  49.992 -      RETURN(method_);
  49.993 -   END Replace_Parameter___;
  49.994 -BEGIN
  49.995 -   General_SYS.Init_Method(lu_name_, '&PKG', 'Create_Custom_Trigger___', TRUE);
  49.996 -   indent_ := 1;
  49.997 -   CASE trigger_type_
  49.998 -      WHEN 'NEW' THEN
  49.999 -         new_param_prefix_ := ':NEW.';
 49.1000 -         old_param_prefix_ := ':OLD.';
 49.1001 -      WHEN 'MODIFY' THEN
 49.1002 -         new_param_prefix_ := ':NEW.';
 49.1003 -         old_param_prefix_ := ':OLD.';
 49.1004 -         -- Build If statement for modify
 49.1005 -         if_stmt_start_ := Create_If_Stmt___(rec_.modified_attributes);
 49.1006 -         IF (if_stmt_start_ IS NOT NULL) THEN
 49.1007 -            indent_        := 1;
 49.1008 -            if_stmt_end_   := 'END IF; ';
 49.1009 -         ELSE
 49.1010 -            indent_        := 0;
 49.1011 -            if_stmt_end_   := NULL;
 49.1012 -         END IF;
 49.1013 -         stmt_ := if_stmt_start_;
 49.1014 -      WHEN 'REMOVE' THEN
 49.1015 -         new_param_prefix_ := ':OLD.';
 49.1016 -         old_param_prefix_ := ':OLD.';
 49.1017 -   END CASE;
 49.1018 -   -- Build PL/SQL statement
 49.1019 -   stmt_ := stmt_ ||space___(indent_)||'DECLARE ';
 49.1020 -   indent_ := indent_ + 1;
 49.1021 -   stmt_ := stmt_ ||space___(indent_)||'msg_  VARCHAR2(32000);';
 49.1022 -   indent_ := indent_ - 1;
 49.1023 -   stmt_ := stmt_ ||space___(indent_)||'BEGIN ';
 49.1024 -   indent_ := indent_ + 1;
 49.1025 -   stmt_ := stmt_ ||space___(indent_)||'IF (Event_SYS.Event_Enabled('''||rec_.event_lu_name||''', '''||rec_.event_id||''')) THEN ';
 49.1026 -   indent_ := indent_ + 1;
 49.1027 -   stmt_ := stmt_ ||space___(indent_)||'msg_ := Message_SYS.Construct('''||rec_.event_id||''');';
 49.1028 -   FOR par_ IN get_param LOOP
 49.1029 -      IF (par_.id_type = 'DATETIME') THEN
 49.1030 -         format_prefix_  := 'to_char(';
 49.1031 -         format_postfix_ := ', '''||datetime_format_||''')';
 49.1032 -      ELSIF (par_.id_type = 'DATE') THEN
 49.1033 -         format_prefix_  := 'to_char(';
 49.1034 -         format_postfix_ := ', '''||date_format_||''')';
 49.1035 -      ELSIF (par_.id_type = 'TIME') THEN
 49.1036 -         format_prefix_  := 'to_char(';
 49.1037 -         format_postfix_ := ', '''||time_format_||''')';
 49.1038 -      ELSE
 49.1039 -         format_prefix_  := NULL;
 49.1040 -         format_postfix_ := NULL;
 49.1041 -      END IF;
 49.1042 -      --
 49.1043 -      IF par_.plsql_method IS NOT NULL THEN
 49.1044 -         stmt_ := stmt_ ||space___(indent_)||'Message_SYS.Add_Attribute(msg_, '''||par_.id||''', '||
 49.1045 -                          format_prefix_||Replace_Parameter___(par_.plsql_method)||format_postfix_||');';
 49.1046 -      ELSE
 49.1047 -         IF par_.current_value = 'TRUE' THEN
 49.1048 -            stmt_ := stmt_ ||space___(indent_)||'Message_SYS.Add_Attribute(msg_, ''OLD:'||par_.id||''', '||format_prefix_||old_param_prefix_||par_.id||format_postfix_||');';
 49.1049 -         END IF;
 49.1050 -         IF par_.new_value = 'TRUE' THEN
 49.1051 -            stmt_ := stmt_ ||space___(indent_)||'Message_SYS.Add_Attribute(msg_, ''NEW:'||par_.id||''', '||format_prefix_||new_param_prefix_||par_.id||format_postfix_||');';
 49.1052 -         END IF;
 49.1053 -      END IF;
 49.1054 -   END LOOP;
 49.1055 -   stmt_ := stmt_ ||space___(indent_)||'Event_SYS.Event_Execute('''||rec_.event_lu_name||''', '''||rec_.event_id||''', msg_);';
 49.1056 -   indent_ := indent_ - 1;
 49.1057 -   stmt_ := stmt_ ||space___(indent_)||'END IF; ';
 49.1058 -   indent_ := indent_ - 1;
 49.1059 -   stmt_ := stmt_ ||space___(indent_)||'END; ';
 49.1060 -   indent_ := indent_ - 1;
 49.1061 -   stmt_ := stmt_ ||space___(indent_)||if_stmt_end_;
 49.1062 -dbms_output.put_line(stmt_);
 49.1063 -   --
 49.1064 -   Installation_SYS.Create_Trigger (
 49.1065 -   Get_Trigger_Name___(rec_.event_id, trigger_type_),
 49.1066 -   'AFTER',
 49.1067 -   Get_Dml_Event___(trigger_type_),
 49.1068 -   Get_Columns___(rec_.modified_attributes),
 49.1069 -   rec_.event_table_name,
 49.1070 -   NULL,
 49.1071 -   stmt_,
 49.1072 -   TRUE);
 49.1073 -END Create_Custom_Trigger___;
 49.1074 -
 49.1075 -FUNCTION Get_Trigger_Name___(
 49.1076 -   event_id_      IN VARCHAR2,
 49.1077 -   trigger_type_  IN VARCHAR2 ) RETURN VARCHAR2
 49.1078 -IS
 49.1079 -BEGIN
 49.1080 -   CASE trigger_type_
 49.1081 -      WHEN 'NEW' THEN
 49.1082 -         RETURN(Upper(Create_Trigger_Name___(event_id_)||'_EVI'));
 49.1083 -      WHEN 'MODIFY' THEN
 49.1084 -         RETURN(Upper(Create_Trigger_Name___(event_id_)||'_EVU'));
 49.1085 -      WHEN 'REMOVE' THEN
 49.1086 -         RETURN(Upper(Create_Trigger_Name___(event_id_)||'_EVD'));
 49.1087 -   END CASE;
 49.1088 -END Get_Trigger_Name___;
 49.1089 -
 49.1090 -PROCEDURE Remove_Custom_Triggers___(
 49.1091 -   rec_ IN Fnd_Event_Tab%ROWTYPE )
 49.1092 -IS
 49.1093 -BEGIN
 49.1094 -   General_SYS.Init_Method(lu_name_, '&PKG', 'Create_Custom_Triggers___', TRUE);
 49.1095 -   -- Create triggers per type (New, Modify, Remove)
 49.1096 -   IF (rec_.new_row = 'TRUE') THEN
 49.1097 -      Remove_Custom_Trigger___(rec_, 'NEW');
 49.1098 -   END IF;
 49.1099 -   IF (rec_.modify_row = 'TRUE') THEN
 49.1100 -      Remove_Custom_Trigger___(rec_, 'MODIFY');
 49.1101 -   END IF;
 49.1102 -   IF (rec_.remove_row = 'TRUE') THEN
 49.1103 -      Remove_Custom_Trigger___(rec_, 'REMOVE');
 49.1104 -   END IF;
 49.1105 -END Remove_Custom_Triggers___;
 49.1106 -
 49.1107 -PROCEDURE Remove_Custom_Trigger___(
 49.1108 -   rec_           IN     Fnd_Event_Tab%ROWTYPE,
 49.1109 -   trigger_type_  IN     VARCHAR2 )
 49.1110 -IS
 49.1111 -   stmt_ VARCHAR2(32000);
 49.1112 -   --
 49.1113 -BEGIN
 49.1114 -   General_SYS.Init_Method(lu_name_, '&PKG', 'Remove_Custom_Trigger___', TRUE);
 49.1115 -   Installation_SYS.Remove_Trigger(Get_Trigger_Name___(rec_.event_id, trigger_type_), TRUE);
 49.1116 -END Remove_Custom_Trigger___;
 49.1117 -
 49.1118 -FUNCTION Create_Trigger_Name___ (
 49.1119 -   event_id_ IN VARCHAR2 ) RETURN VARCHAR2
 49.1120 -IS
 49.1121 -   new_event_id_ VARCHAR2(100);
 49.1122 -BEGIN
 49.1123 -   new_event_id_ := Replace(event_id_, ' ', '_');
 49.1124 -   new_event_id_ := Replace(new_event_id_, '/', '_');
 49.1125 -   new_event_id_ := Replace(new_event_id_, '\', '_');
 49.1126 -   new_event_id_ := Replace(new_event_id_, '-', '_');
 49.1127 -   RETURN new_event_id_;
 49.1128 -END Create_Trigger_Name___;
 49.1129 ------------------------------------------------------------------------------
 49.1130 --------------------- LU SPECIFIC PRIVATE METHODS ----------------------------
 49.1131 ------------------------------------------------------------------------------
 49.1132 -
 49.1133 -PROCEDURE Export__ (
 49.1134 -   string_        OUT VARCHAR2,
 49.1135 -   event_lu_name_ IN  VARCHAR2,
 49.1136 -   event_id_      IN  VARCHAR2 )
 49.1137 -IS
 49.1138 -   newline_    CONSTANT VARCHAR2(2) := chr(13)||chr(10);
 49.1139 -   rec                  &TABLE%ROWTYPE;
 49.1140 -   id_                  VARCHAR2(100);
 49.1141 -   CURSOR get_param IS
 49.1142 -   SELECT id, id_type, plsql_method, current_value, new_value
 49.1143 -     FROM fnd_event_parameter_tab
 49.1144 -    WHERE event_lu_name = event_lu_name_
 49.1145 -      AND event_id = event_id_;
 49.1146 -BEGIN
 49.1147 -   General_SYS.Init_Method(lu_name_, '&PKG', 'Export__');
 49.1148 -   -- Fetch the event details
 49.1149 -   rec     := Get_Object_By_Keys___(event_lu_name_, event_id_);
 49.1150 -   -- Only allowed to export Custom Events
 49.1151 -   IF (nvl(rec.event_type, 'APPLICATION') != 'CUSTOM') THEN
 49.1152 -      Error_SYS.Appl_General(lu_name_, 'EXP_TYPE: Only Custom Events are allowed to be exported.');
 49.1153 -   END IF;
 49.1154 -   --
 49.1155 -   -- Create Export file
 49.1156 -   --
 49.1157 -   string_ :=            '-------------------------------------------------------------------------------------------- ' || newline_;
 49.1158 -   string_ := string_ || '-- Export file for Custom Events ' || rec.event_id || '.' || newline_;
 49.1159 -   string_ := string_ || '-- ' || newline_;
 49.1160 -   string_ := string_ || '--  Date    Sign    History' || newline_;
 49.1161 -   string_ := string_ || '--  ------  ------  -----------------------------------------------------------' || newline_;
 49.1162 -   string_ := string_ || '--  ' || to_char(sysdate, 'YYMMDD') || '  ' || rpad(Fnd_Session_API.Get_Fnd_User, 6, ' ') || '  ' ||
 49.1163 -                         'Export file for task ' || rec.event_id || '.' || newline_;
 49.1164 -   string_ := string_ || '-------------------------------------------------------------------------------------------- ' || newline_;
 49.1165 -   string_ := string_ || newline_;
 49.1166 -   string_ := string_ || 'SET DEFINE ~' || newline_;
 49.1167 -   string_ := string_ || 'PROMPT Register Custom Event "' || rec.event_id || '"' || newline_;
 49.1168 -   string_ := string_ || 'DECLARE' || newline_;
 49.1169 -   string_ := string_ || '   event_lu_name_      VARCHAR2(30)    := ''' || event_lu_name_ || ''';' || newline_;
 49.1170 -   string_ := string_ || '   event_id_           VARCHAR2(30)    := ''' || event_id_ || ''';' || newline_;
 49.1171 -   string_ := string_ || '   id_                 VARCHAR2(100);' || newline_;
 49.1172 -   string_ := string_ || '   info_msg_           VARCHAR2(32000) := NULL;' || newline_;
 49.1173 -   string_ := string_ || 'BEGIN' || newline_;
 49.1174 -   --
 49.1175 -   -- Create Main Message
 49.1176 -   --
 49.1177 -   string_ := string_ || '-- Construct Main Message' || newline_;
 49.1178 -   string_ := string_ || '   info_msg_    := Message_SYS.Construct('''');' || newline_;
 49.1179 -   string_ := string_ || '   Message_SYS.Add_Attribute(info_msg_, ''EVENT_DESCRIPTION'', ''' || rec.event_description || ''');' || newline_;
 49.1180 -   string_ := string_ || '   Message_SYS.Add_Attribute(info_msg_, ''EVENT_ENABLE'', ''FALSE'');' || newline_;
 49.1181 -   string_ := string_ || '   Message_SYS.Add_Attribute(info_msg_, ''EVENT_TYPE_DB'', ''' || rec.event_type || ''');' || newline_;
 49.1182 -   string_ := string_ || '   Message_SYS.Add_Attribute(info_msg_, ''EVENT_TABLE_NAME'', ''' || rec.event_table_name || ''');' || newline_;
 49.1183 -   string_ := string_ || '   Message_SYS.Add_Attribute(info_msg_, ''MODIFIED_ATTRIBUTES'', ''' || rec.modified_attributes || ''');' || newline_;
 49.1184 -   string_ := string_ || '   Message_SYS.Add_Attribute(info_msg_, ''NEW_ROW_DB'', ''' || rec.new_row || ''');' || newline_;
 49.1185 -   string_ := string_ || '   Message_SYS.Add_Attribute(info_msg_, ''MODIFY_ROW_DB'', ''' || rec.modify_row || ''');' || newline_;
 49.1186 -   string_ := string_ || '   Message_SYS.Add_Attribute(info_msg_, ''REMOVE_ROW_DB'', ''' || rec.remove_row || ''');' || newline_;
 49.1187 -   string_ := string_ || '-- Register Custom Event' || newline_;
 49.1188 -   string_ := string_ || '   Fnd_Event_API.Register_Custom_Event(event_lu_name_, event_id_, info_msg_);' || newline_;
 49.1189 -   FOR rec2 IN get_param LOOP
 49.1190 -      string_ := string_ || '   -- Register Event Parameter' || newline_;
 49.1191 -      string_ := string_ || '      info_msg_ := Message_SYS.Construct('''');' || newline_;
 49.1192 -      string_ := string_ || '      id_  := ''' || rec2.id || ''';' || newline_;
 49.1193 -      string_ := string_ || '      Message_SYS.Add_Attribute(info_msg_, ''ID_TYPE'', ''' || rec2.id_type || ''');' || newline_;
 49.1194 -      string_ := string_ || '      Message_SYS.Add_Attribute(info_msg_, ''PLSQL_METHOD'', ''' || rec2.plsql_method || ''');' || newline_;
 49.1195 -      string_ := string_ || '      Message_SYS.Add_Attribute(info_msg_, ''CURRENT_VALUE_DB'', ''' || rec2.current_value || ''');' || newline_;
 49.1196 -      string_ := string_ || '      Message_SYS.Add_Attribute(info_msg_, ''NEW_VALUE_DB'', ''' || rec2.new_value || ''');' || newline_;
 49.1197 -      string_ := string_ || '      Fnd_Event_Parameter_API.Register(event_lu_name_, event_id_, id_, info_msg_);' || newline_;
 49.1198 -   END LOOP;
 49.1199 -   string_ := string_ || 'END;' || newline_;
 49.1200 -   string_ := string_ || '/' || newline_;
 49.1201 -   string_ := string_ || 'SET DEFINE &' || newline_;
 49.1202 -END Export__;
 49.1203 -
 49.1204 ------------------------------------------------------------------------------
 49.1205 --------------------- LU SPECIFIC PROTECTED METHODS --------------------------
 49.1206 ------------------------------------------------------------------------------
 49.1207 -
 49.1208 -
 49.1209 ------------------------------------------------------------------------------
 49.1210 --------------------- LU SPECIFIC PUBLIC METHODS -----------------------------
 49.1211 ------------------------------------------------------------------------------
 49.1212 -
 49.1213 -FUNCTION Get_Event_Description (
 49.1214 -   event_lu_name_ IN VARCHAR2,
 49.1215 -   event_id_      IN VARCHAR2 ) RETURN VARCHAR2
 49.1216 -IS
 49.1217 -   temp_ &TABLE..event_description%TYPE;
 49.1218 -   CURSOR get_attr IS
 49.1219 -      SELECT event_description
 49.1220 -      FROM &TABLE
 49.1221 -      WHERE event_lu_name = event_lu_name_
 49.1222 -      AND   event_id = event_id_;
 49.1223 -BEGIN
 49.1224 -   OPEN get_attr;
 49.1225 -   FETCH get_attr INTO temp_;
 49.1226 -   CLOSE get_attr;
 49.1227 -   RETURN temp_;
 49.1228 -END Get_Event_Description;
 49.1229 -
 49.1230 -
 49.1231 -FUNCTION Get_Event_Enable (
 49.1232 -   event_lu_name_ IN VARCHAR2,
 49.1233 -   event_id_      IN VARCHAR2 ) RETURN VARCHAR2
 49.1234 -IS
 49.1235 -   temp_ &TABLE..event_enable%TYPE;
 49.1236 -   CURSOR get_attr IS
 49.1237 -      SELECT event_enable
 49.1238 -      FROM &TABLE
 49.1239 -      WHERE event_lu_name = event_lu_name_
 49.1240 -      AND   event_id = event_id_;
 49.1241 -BEGIN
 49.1242 -   OPEN get_attr;
 49.1243 -   FETCH get_attr INTO temp_;
 49.1244 -   CLOSE get_attr;
 49.1245 -   IF temp_ IS NULL THEN
 49.1246 -      RETURN 'FALSE';
 49.1247 -   ELSE
 49.1248 -      RETURN temp_;
 49.1249 -   END IF;
 49.1250 -END Get_Event_Enable;
 49.1251 -
 49.1252 -
 49.1253 -PROCEDURE Set_Event_Enable (
 49.1254 -   event_lu_name_ IN VARCHAR2,
 49.1255 -   event_id_      IN VARCHAR2 )
 49.1256 -IS
 49.1257 -   temp_       NUMBER;
 49.1258 -   attr_       VARCHAR2(32000);
 49.1259 -   oldrec_     &TABLE%ROWTYPE;
 49.1260 -   newrec_     &TABLE%ROWTYPE;
 49.1261 -   objid_      &VIEW..objid%TYPE;
 49.1262 -   objversion_ &VIEW..objversion%TYPE;
 49.1263 -BEGIN
 49.1264 -   General_SYS.Init_Method(lu_name_, '&PKG', 'Set_Event_Enable');
 49.1265 -   IF (event_id_ <> upper(event_id_)) THEN
 49.1266 -      Error_SYS.Appl_General(lu_name_, 'UPPCASE: The event identity ":P1" must be in upper case.', event_id_);
 49.1267 -   END IF;
 49.1268 -   SELECT COUNT(*)
 49.1269 -      INTO temp_
 49.1270 -      FROM fnd_event_action
 49.1271 -      WHERE event_id = event_id_
 49.1272 -      AND   event_lu_name = event_lu_name_
 49.1273 -      AND   action_enable = 'TRUE';
 49.1274 -   Get_Id_Version_By_Keys___ (objid_, objversion_, event_lu_name_, event_id_);
 49.1275 -   IF (temp_ > 0) THEN
 49.1276 -      Client_SYS.Add_To_Attr('EVENT_ENABLE', 'TRUE', attr_);
 49.1277 -      oldrec_ := Get_Object_By_Keys___(event_lu_name_, event_id_);
 49.1278 -      newrec_ := oldrec_;
 49.1279 -      Unpack_Check_Update___(attr_, newrec_, objid_);
 49.1280 -      Update___(objid_, oldrec_, newrec_, attr_, objversion_);
 49.1281 -   ELSE
 49.1282 -      Client_SYS.Add_To_Attr('EVENT_ENABLE', 'FALSE', attr_);
 49.1283 -      oldrec_ := Get_Object_By_Keys___(event_lu_name_, event_id_);
 49.1284 -      newrec_ := oldrec_;
 49.1285 -      Unpack_Check_Update___(attr_, newrec_, objid_);
 49.1286 -      Update___(objid_, oldrec_, newrec_, attr_, objversion_);
 49.1287 -   END IF;
 49.1288 -END Set_Event_Enable;
 49.1289 -
 49.1290 -
 49.1291 -PROCEDURE Refresh (
 49.1292 -   event_lu_name_       IN VARCHAR2,
 49.1293 -   event_id_            IN VARCHAR2,
 49.1294 -   event_desc_          IN VARCHAR2,
 49.1295 -   event_type_db_       IN VARCHAR2 DEFAULT 'APPLICATION',
 49.1296 -   event_table_name_    IN VARCHAR2 DEFAULT NULL,
 49.1297 -   modified_attributes_ IN VARCHAR2 DEFAULT NULL,
 49.1298 -   new_row_             IN VARCHAR2 DEFAULT 'FALSE',
 49.1299 -   modify_row_          IN VARCHAR2 DEFAULT 'FALSE',
 49.1300 -   remove_row_          IN VARCHAR2 DEFAULT 'FALSE')
 49.1301 -IS
 49.1302 -   temp_ NUMBER;
 49.1303 -BEGIN
 49.1304 -   General_SYS.Init_Method(lu_name_, '&PKG', 'Refresh');
 49.1305 -   IF (event_id_ <> upper(event_id_)) THEN
 49.1306 -      Error_SYS.Appl_General(lu_name_, 'UPPCASE: The event identity ":P1" must be in upper case.', event_id_);
 49.1307 -   END IF;
 49.1308 -   SELECT COUNT(*)
 49.1309 -      INTO temp_
 49.1310 -      FROM &VIEW
 49.1311 -      WHERE event_id = event_id_
 49.1312 -      AND event_lu_name = event_lu_name_;
 49.1313 -   IF (temp_ = 0) THEN
 49.1314 -      INSERT INTO fnd_event_tab
 49.1315 -         (event_lu_name, event_id, event_description, event_enable, rowversion,
 49.1316 -          event_type, event_table_name, modified_attributes,
 49.1317 -          new_row, modify_row, remove_row)
 49.1318 -      VALUES
 49.1319 -         (event_lu_name_, event_id_, event_desc_, 'FALSE', SYSDATE,
 49.1320 -          event_type_db_, event_table_name_, modified_attributes_,
 49.1321 -          new_row_, modify_row_, remove_row_);
 49.1322 -   ELSE
 49.1323 -      UPDATE fnd_event_tab
 49.1324 -         SET event_description = event_desc_
 49.1325 -         WHERE event_lu_name = event_lu_name_
 49.1326 -         AND   event_id = event_id_;
 49.1327 -   END IF;
 49.1328 -END Refresh;
 49.1329 -
 49.1330 -PROCEDURE Register_Custom_Event (
 49.1331 -   event_lu_name_ IN VARCHAR2,
 49.1332 -   event_id_      IN VARCHAR2,
 49.1333 -   info_msg_      IN VARCHAR2 )
 49.1334 -IS
 49.1335 -   info_       VARCHAR2(32000);
 49.1336 -   objid_      VARCHAR2(100);
 49.1337 -   objversion_ VARCHAR2(100);
 49.1338 -   attr_       VARCHAR2(2000);
 49.1339 -BEGIN
 49.1340 -   General_SYS.Init_Method(lu_name_, '&PKG', 'Register_Custom_Event');
 49.1341 -   Client_SYS.Add_To_Attr('EVENT_LU_NAME',       event_lu_name_, attr_);
 49.1342 -   Client_SYS.Add_To_Attr('EVENT_ID',            event_id_, attr_);
 49.1343 -   Client_SYS.Add_To_Attr('EVENT_DESCRIPTION',   Message_SYS.Find_Attribute(info_msg_, 'EVENT_DESCRIPTION', ''), attr_);
 49.1344 -   Client_SYS.Add_To_Attr('EVENT_ENABLE',        Message_SYS.Find_Attribute(info_msg_, 'EVENT_ENABLE', 'FALSE'), attr_);
 49.1345 -   Client_SYS.Add_To_Attr('EVENT_TABLE_NAME',    Message_SYS.Find_Attribute(info_msg_, 'EVENT_TABLE_NAME', ''), attr_);
 49.1346 -   Client_SYS.Add_To_Attr('EVENT_TYPE_DB',       Message_SYS.Find_Attribute(info_msg_, 'EVENT_TYPE_DB', ''), attr_);
 49.1347 -   Client_SYS.Add_To_Attr('NEW_ROW_DB',          Message_SYS.Find_Attribute(info_msg_, 'NEW_ROW_DB', 'FALSE'), attr_);
 49.1348 -   Client_SYS.Add_To_Attr('MODIFY_ROW_DB',       Message_SYS.Find_Attribute(info_msg_, 'MODIFY_ROW_DB', 'FALSE'), attr_);
 49.1349 -   Client_SYS.Add_To_Attr('REMOVE_ROW_DB',       Message_SYS.Find_Attribute(info_msg_, 'REMOVE_ROW_DB', 'FALSE'), attr_);
 49.1350 -   Client_SYS.Add_To_Attr('MODIFIED_ATTRIBUTES', Message_SYS.Find_Attribute(info_msg_, 'MODIFIED_ATTRIBUTES', ''), attr_);
 49.1351 -   IF (Check_Exist___(event_lu_name_, event_id_)) THEN
 49.1352 -      DELETE FROM fnd_event_tab WHERE event_lu_name = event_lu_name_ AND event_id = event_id_;
 49.1353 -      DELETE FROM fnd_event_parameter_tab WHERE event_lu_name = event_lu_name_ AND event_id = event_id_;
 49.1354 -   END IF;
 49.1355 -   New__(info_, objid_, objversion_, attr_, 'DO');
 49.1356 -END Register_Custom_Event;
 49.1357 -
 49.1358 -PROCEDURE Unfresh (
 49.1359 -   event_lu_name_ IN VARCHAR2,
 49.1360 -   event_id_      IN VARCHAR2 )
 49.1361 -IS
 49.1362 -   temp_ NUMBER;
 49.1363 -BEGIN
 49.1364 -   General_SYS.Init_Method(lu_name_, '&PKG', 'Unfresh');
 49.1365 -   SELECT COUNT(*)
 49.1366 -      INTO temp_
 49.1367 -      FROM &VIEW
 49.1368 -      WHERE event_id = event_id_
 49.1369 -      AND   event_lu_name = event_lu_name_;
 49.1370 -   IF (temp_ > 0) THEN
 49.1371 -      DELETE FROM fnd_event_tab
 49.1372 -         WHERE event_lu_name = event_lu_name_
 49.1373 -         AND   event_id = event_id_;
 49.1374 -   END IF;
 49.1375 -END Unfresh;
 49.1376 -
 49.1377 -
 49.1378 -FUNCTION Get (
 49.1379 -   event_lu_name_ IN VARCHAR2,
 49.1380 -   event_id_ IN VARCHAR2 ) RETURN Public_Rec
 49.1381 -IS
 49.1382 -   temp_ Public_Rec;
 49.1383 -   CURSOR get_attr IS
 49.1384 -      SELECT event_description, event_enable
 49.1385 -      FROM &TABLE
 49.1386 -      WHERE event_lu_name = event_lu_name_
 49.1387 -      AND   event_id = event_id_;
 49.1388 -BEGIN
 49.1389 -   OPEN get_attr;
 49.1390 -   FETCH get_attr INTO temp_;
 49.1391 -   CLOSE get_attr;
 49.1392 -   RETURN temp_;
 49.1393 -END Get;
 49.1394 -
 49.1395 -
 49.1396 -
 49.1397 ------------------------------------------------------------------------------
 49.1398 --------------------- FOUNDATION1 METHODS ------------------------------------
 49.1399 ------------------------------------------------------------------------------
 49.1400 --- Init
 49.1401 ---   Dummy procedure that can be called at database startup to ensure that
 49.1402 ---   this package is loaded into memory for performance reasons only.
 49.1403 ------------------------------------------------------------------------------
 49.1404 -
 49.1405 -PROCEDURE Init
 49.1406 -IS
 49.1407 -BEGIN
 49.1408 -   NULL;
 49.1409 -END Init;
 49.1410 -
 49.1411 -
 49.1412 -END &PKG;
 49.1413 -/
 49.1414 -SHOW ERROR
 49.1415 -
 49.1416 -UNDEFINE MODULE
 49.1417 -UNDEFINE LU
 49.1418 -UNDEFINE TABLE
 49.1419 -UNDEFINE VIEW
 49.1420 -UNDEFINE PKG
 49.1421 -
 49.1422 -UNDEFINE OBJID
 49.1423 -UNDEFINE OBJVERSION
 49.1424 -
 49.1425 ------------------------------------------------------------------------------
    50.1 --- a/PLSQL/Lexer/test/unit/src/org/netbeans/modules/plsql/lexer/IdentityPayInfo.apy	Wed May 15 16:07:35 2013 +0200
    50.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    50.3 @@ -1,3557 +0,0 @@
    50.4 ------------------------------------------------------------------------------
    50.5 ---
    50.6 ---  Logical unit: IdentityPayInfo
    50.7 ---
    50.8 ---  Purpose: Handles Party Type Id Payment Information
    50.9 ---
   50.10 ---  IFS/Design Template Version 2.2
   50.11 ---
   50.12 ---  Date    Sign     History
   50.13 ---  ------  ----     -----------------------------------------------------------
   50.14 ---  960730  DAKA     Created
   50.15 ---  960731  DAKA     View definition corrected.
   50.16 ---  960802  MABE     Added procedure Remove_Set. Modified Check_Delete.
   50.17 ---  960821  MABE     Removed procedure Remove_Set. Added procedure Instance_Exists.
   50.18 ---  960927  MABE     Removed call to reference by Bank Account in Check_Delete.
   50.19 ---  961011  MABE     Changes to fit Enterprise module.
   50.20 ---  961129  DAKA     Columns Priority,Blocked_For_Parked_Payment,Other_Payee.
   50.21 ---  961205  MABE     Changed error message for Exist changed.
   50.22 ---                   Added procedure Create_Party_Type_Id.
   50.23 ---  961205  Yohe     Added view PARTY_TYPE_ID_PAY_INFO_SU_QRY and
   50.24 ---                   PARTY_TYPE_ID_PAY_INFO_CU_QRY.
   50.25 ---  961209  MABE     Corrected type return by function Get_Blocked_For_Payment
   50.26 ---                   to VARCHAR2.
   50.27 ---  961213  MABE     VIEW2 and VIEW3 changed to VIEW4 and VIEW5.
   50.28 ---  970102  MABE     Changes to fit Domain concept.
   50.29 ---  970106  MABE     Added function Get_Netting_Allowed.
   50.30 ---                   Column DUMMY deleted.
   50.31 ---  970114  MABE     Developing of query forms.
   50.32 ---  970121  MABE     Added columns is_note and note to Query views. (not finished)
   50.33 ---  970219  DAKA     Columns INTEREST_TEMPLATE , REMINDER_TEMPLATE added.
   50.34 ---  970220  MABE     Added default templates when creating customer
   50.35 ---                   by Create_Party_Type_Id.
   50.36 ---  970303  MABE     Added functions Get_Reminder_Template and Get_Interest_Template.
   50.37 ---  970306  MABE     Handling of notes added to views for query.
   50.38 ---  970306  DAKA     Call to party_type_id_invoice_info_api.exist added
   50.39 ---  970318  MABE     Checking if PartyTypeIdInvoiceInfo exists excluded
   50.40 ---                   for party type 'COMPANY'.
   50.41 ---  970512  SLKO     Some performance improvement.
   50.42 ---  970908  MABE     Added function Get_Payment_Delay.
   50.43 ---  970916  MABE     Corrected Get_Payment_Delay.
   50.44 ---  971029  MABE     Joins with company_tab and party_type_identity_tab instead
   50.45 ---                   of function calls.
   50.46 ---  980415  DAKA     Function Get_Name created
   50.47 ---  980512  MABE     Updated to fit IFS/Design 2.1.1A
   50.48 ---  980515  MABE     Added missing columns PARTY_TYPE_DB.
   50.49 ---  980519  MARK     Modified to use party_type_db values
   50.50 ---  980522  MABE     Corrected usage of party_type_db.
   50.51 ---  980602  DAKA     Identity added to LU
   50.52 ---  980602  PICZ     'SELECT *' replaced with 'SELECT '1'' in Instance_Exists
   50.53 ---  980629  WOBL     Added comments to _db columns
   50.54 ---  981103  KATH     Bug # 4399 Fixed - add new function called Validate_Identity() to validate
   50.55 ---                   supplies & customers
   50.56 ---  981118  MABE     Added missing comments to _db columns.
   50.57 ---  981130  MABE     Changed to fit Enterp 1.3.0.
   50.58 ---  981208  MABE     Removed VIEW PARTY_TYPE_ID_PAY_INFO_REF
   50.59 ---  981214  PICZ     Changes to Prepare_Insert___
   50.60 ---  981222  DAKA     US Localization code added
   50.61 ---  990201  DAKA     Connection with ENTERP improved
   50.62 ---  990208  MarK     Changes with regards to the Get_Currency_Rate.
   50.63 ---  990209  DAKA     Synchronized witch model
   50.64 ---  990406  MABE     Corrected problem with customer in not default company.
   50.65 ---  990419  MABE     Template modification to increase performance.
   50.66 ---  990625  MABE     Copied from PartyPayInfo and PartyTypeIdPayInfo due
   50.67 ---                   to replace of party with identity.
   50.68 ---  990811  MABE     substr -> substr_b.
   50.69 ---  990920  FRPO     Added IID PaymentAdvice
   50.70 ---  990928  FRPO     Added default value for Payment Advice (No Advice) in Prepare_Insert___
   50.71 ---                   for use in Create_Identity_Pay_Info for party_type = company
   50.72 ---  991012  FRPO     Other Payer made available for customers FIN123
   50.73 ---  990914  REANPL   Fetch_Tolerance modified to support payment tolerance for Supplier
   50.74 ---  991214  PICZ     Copy_Customer and Copy_Supplier added
   50.75 ---  000224  WITOPL   Removing DBMS_Output
   50.76 ---  000304  PICZ     Call #32631 corrected
   50.77 ---  000410  PICZ     Function Get_Group_For_Identity added
   50.78 ---  000412  PICZ     Function Get_Payment_Advice_Db added
   50.79 ---  000825  REANPL   Added new columns to VIEW:
   50.80 ---                   deduction_group,corporation_id,member_id,send_reminder_to_payer,send_interest_inv_to_payer
   50.81 ---  000829  REANPL   Added new columns to Prepare_Insert___, Copy_Customer
   50.82 ---  000929  PICZ     Call #49661 (procedure Save_Identity_Notes___ added)
   50.83 ---  001006  PICZ     Call #49721 (function Get_Other_Payee_Ded_Group_Desc added)
   50.84 ---  010220  LiSv     For new Create Company concept added new view identity_pay__etc and _pct.
   50.85 ---                   Added procedures Make_Company, Copy___, Import___ and Export___.
   50.86 ---  010305  MAMIPL   Bug #20283. Amount and Percent tolerance only positive value allowed.
   50.87 ---  010503  visuus   Bug Fix 20212: D&B number not copied when copying a customer.
   50.88 ---  010611  MACHSE   Bug# 15677 Fixed. Call to General_SYS.Init_Method.
   50.89 ---  010816  OVJOSE   Added Create Company translation method Create_Company_Translations___
   50.90 ---  011009  RAFA     Bug #23834 Added function Cust_Open_Items_Exist
   50.91 ---  020304  RAFA     IID 10998/10999 Call 77665 corrected Copy_Payment_Address___
   50.92 ---  020308  LISV     Call 78225 Corrected.
   50.93 ---  020319  PPer     Bug # 28324. Changed "PAYMENTSONACCOUNTEXIST" To "PAYMENTONACCNTEXIST".
   50.94 ---  021008  Nimalk   Removed usage of the view Company_Finance_Auth in viewes
   50.95 ---                   and replaced by view Company_Finance_Auth1 using EXISTS caluse instead of joins
   50.96 ---  021224  MACHLK   SP3 Merge Bug ID 34081, 34083.
   50.97 ---  030418  JAKALK   DEFI165N Added column disc_days_tolerance.
   50.98 ---  030506  NiKaLK   Added new views Multi_Customer_Info and Multi_Supplier_Info
   50.99 ---  030609  Kupelk   FRFI154. Added column next_payment_matching_id.
  50.100 ---                   Added Get_Next_Pay_Matching_Id, Get_Payment_Matching_Id .
  50.101 ---  030729  Gepelk   SP4 Merge. Bug # 35316. Modified  'Check_Cascade___'.
  50.102 ---  030827  KuPelk   Added next_payment_matching_id column to the method Copy___.
  50.103 ---  040325  Thsrlk   SP1 Merge
  50.104 ---  040629  anpelk   FIPR338A2: Unicode Changes
  50.105 ---  040924  nalslk   FITH354 - Modified calls to Payment_Library_API.Get_Currency_Rate
  50.106 ---                   and removed retrieving default_currency_type from Currency_Type_API directly.
  50.107 ---  041001  TsYolk   FIPR360, Added column Group_ID to IDENTITY_PAY_INFO_SU_QRY and IDENTITY_PAY_INFO_CU_QRY.
  50.108 ---  041104  GRRO     FIJP345 Payment Method Plan added rule_id to IDENTITY_PAY_INFO
  50.109 ---  041104  TsYolk   Call B119368, Modified the WHERE clause of IDENTITY_PAY_INFO_CU_QRY.
  50.110 ---  041124  AnGiSe   FITH352, Added column tax_withholding to view IDENTITY_PAY_INFO_CU_QRY.
  50.111 ---  041203  AnGiSe   FITH352, Added column balance_excl_withheld to view IDENTITY_PAY_INFO_SU_QRY.
  50.112 ---  050105  reanpl   FITH351 Added payment_receipt_type
  50.113 ---  050309  Samclk   FIPR360 - New Notes dialog functionality - Changed IDENTITY_PAY_INFO_CU_QRY.
  50.114 ---  050310  Samclk   FIPR360 - New Notes dialog functionality - Changed IDENTITY_PAY_INFO_SU_QRY.
  50.115 ---  050323  Jeguse   Moved MULTI_CUS_DETAILS_QRY, MULTI_SUP_DETAILS_QRY and MULTI_SUP_ADDRESS_QRY from Ledgitem.apy
  50.116 ---  051011  NiFelk   FIPR360, Notes code clean up.
  50.117 ---  060215  NiFelk   LCS Merge 48619. Added new method Create_Cus_Other_Payee_Attr__.
  50.118 ---  060728  Vohelk   FIPL617A - Added Template_id to the IDENTITY_PAY_INFO view
  50.119 ---  060829  Chhulk   FIBR620A - Modified Prepare_Insert___
  50.120 ---  060831  Shsalk   LCS Merge 56765. Increased the variable lenghth.
  50.121 ---  060919  RUFELK   B139515 - Added the parameter 'company' to the Get_Template_Id() Function.
  50.122 ---  061106  Lisvse   FIBR621A - Added check_recipient.
  50.123 ---  061121  RUFELK   FIPL612A - Renamed the status_id column into ledger_status_type.
  50.124 ---  061222  Kagalk   LCS Merge 61779, Modified Check_Cascade___
  50.125 ---  070109  Shsalk   LCS Merge 62571, Modified cursor to fetch member id in the method Get_Member_Id.  
  50.126 ---  070327  RAFA     LCS Merge Bug 51783
  50.127 ---  070508  Surmlk   Removed the use of SUBSTRB from the view PAYER_INFO_QRY
  50.128 ---  070627  Shsalk   LCS Merge 65361, Insert cursor selected value to payment_delay column in Copy_Customer method.
  50.129 ---  070816  Shsalk   B146601 Corrected accoding to a request from SDMAN module.
  50.130 ---  070827  Naadlk   LCS Merge 61494, Added advanced invoice column to views IDENTITY_PAY_INFO_SU_QRY,IDENTITY_PAY_INFO_CU_QRY,PAYER_INFO_QRY. 
  50.131 ---  070906  Paralk   B148391  Modified Copy_Customer()
  50.132 ---  071114  Paralk   Bug 69035, Added reminder_template_id,interest_template_id and their descriptions to VIEW_CU_QRY  
  50.133 ---  071127  Shsalk   Bug 68653, Added new columns to IDENTITY LOV views.
  50.134 ---  080108  Paralk   Bug 69035, Added reminder_template_id,interest_template_id and their descriptions to VIEW_PAYER_QRY   
  50.135 ---  080322  Shsalk   Bug 72177 Corrected. Added bic_code to the copy identity functionality.
  50.136 ---  080417  Paralk   Bug 73125, Added template_id to Copy_Customer() and Copy_Supplier().
  50.137 ---  080429  Nudilk   Bug 72612, Modified procedure Exist() 
  50.138 ---  080528  DiUdlk   Bug 74138, Modified cursor exist_company in Import__ function.
  50.139 ---  081003  Hawalk   Bug 77136, Table join with customer_info_tab and supplier_info_tab for VIEW_CU_QRY and VIEW_SU_QRY respectively,
  50.140 ---  081003           to get name and association no directly.
  50.141 ----------------------------------------------------------------------------------
  50.142 -
  50.143 -DEFINE MODULE           = PAYLED
  50.144 -DEFINE LU               = IdentityPayInfo
  50.145 -DEFINE TABLE            = IDENTITY_PAY_INFO_TAB
  50.146 -DEFINE VIEW             = IDENTITY_PAY_INFO
  50.147 -DEFINE VIEWPCT          = IDENTITY_PAY_INFO_PCT
  50.148 -DEFINE VIEW_SU_QRY      = IDENTITY_PAY_INFO_SU_QRY
  50.149 -DEFINE VIEW_CU_QRY      = IDENTITY_PAY_INFO_CU_QRY
  50.150 -DEFINE VIEW_SUPP        = IDENTITY_PAY_INFO_SUPP
  50.151 -DEFINE VIEW_CUST        = IDENTITY_PAY_INFO_CUST
  50.152 -DEFINE VIEW_LOV         = IDENTITY_PAY_INFO_LOV
  50.153 -DEFINE VIEW_ALL         = IDENTITY_PAY_INFO_ALL
  50.154 -DEFINE VIEW_PAYER_QRY   = PAYER_INFO_QRY
  50.155 -
  50.156 -DEFINE VIEW_MULTI_CUS   = MULTI_CUS_DETAILS_QRY
  50.157 -DEFINE VIEW_MULTI_SUP   = MULTI_SUP_DETAILS_QRY
  50.158 -DEFINE VIEW_MULTI_ADD   = MULTI_SUP_ADDRESS_QRY
  50.159 -
  50.160 -DEFINE PKG              = IDENTITY_PAY_INFO_API
  50.161 -
  50.162 -DEFINE OBJID            = rowid
  50.163 -DEFINE OBJVERSION       = ltrim(lpad(to_char(rowversion),2000))
  50.164 -
  50.165 -DEFINE OBJID_ptipi      = ptipi.rowid
  50.166 -DEFINE OBJVERSION_ptipi = ltrim(lpad(to_char(ptipi.rowversion),2000))
  50.167 -
  50.168 -DEFINE OBJID_p          = p.rowid
  50.169 -DEFINE OBJVERSION_p     = ltrim(lpad(to_char(p.rowversion),2000))
  50.170 -
  50.171 -
  50.172 ------------------------------------------------------------------------------
  50.173 --------------------- VIEWS FOR SELECTS --------------------------------------
  50.174 ------------------------------------------------------------------------------
  50.175 -
  50.176 -PROMPT Creating &VIEW view
  50.177 -
  50.178 -CREATE OR REPLACE FORCE VIEW &VIEW AS
  50.179 -SELECT p.company                      company,
  50.180 -       identity                       identity,
  50.181 -       Party_Type_API.Decode(party_type) party_type,
  50.182 -       party_type                     party_type_db,
  50.183 -       priority                       priority,
  50.184 -       blocked_for_payment            blocked_for_payment,
  50.185 -       other_payee_identity           other_payee_identity,
  50.186 -       interest_template              interest_template,
  50.187 -       reminder_template              reminder_template,
  50.188 -       payment_delay                  payment_delay,
  50.189 -       amount_tolerance               amount_tolerance,
  50.190 -       percent_tolerance              percent_tolerance,
  50.191 -       disc_days_tolerance            disc_days_tolerance,
  50.192 -       netting_allowed                netting_allowed,
  50.193 -       format_no                      format_no,
  50.194 -       Payment_Advice_API.Decode(payment_advice) payment_advice,
  50.195 -       payment_advice                 payment_advice_db,
  50.196 -       deduction_group                deduction_group,
  50.197 -       corporation_id                 corporation_id,
  50.198 -       member_id                      member_id,
  50.199 -       send_reminder_to_payer         send_reminder_to_payer,
  50.200 -       send_interest_inv_to_payer     send_interest_inv_to_payer,
  50.201 -       rule_id                        rule_id,
  50.202 -       Payment_Receipt_Type_API.Decode(payment_receipt_type) payment_receipt_type,
  50.203 -       payment_receipt_type           payment_receipt_type_db,
  50.204 -       template_id                    template_id,
  50.205 -       Check_Recipient_API.Decode(check_recipient) check_recipient,
  50.206 -       check_recipient                check_recipient_db,
  50.207 -       send_statement_of_acc_to_payer send_statement_of_acc_to_payer,
  50.208 -       p.&OBJID                       objid,
  50.209 -       &OBJVERSION                    objversion
  50.210 -FROM   identity_pay_info_tab p
  50.211 -WHERE  EXISTS (SELECT * FROM company_finance_auth1 c WHERE p.company = c.company)
  50.212 -WITH   read only;
  50.213 -
  50.214 -COMMENT ON TABLE &VIEW
  50.215 -   IS 'LU=&LU^PROMPT=Identity Pay Info^MODULE=&MODULE^';
  50.216 -
  50.217 -COMMENT ON COLUMN &VIEW..company
  50.218 -   IS 'FLAGS=PMI--^DATATYPE=STRING(20)/UPPERCASE^PROMPT=Company^REF=CompanyPayInfo^';
  50.219 -COMMENT ON COLUMN &VIEW..identity
  50.220 -   IS 'FLAGS=KMI--^DATATYPE=STRING(20)/UPPERCASE^PROMPT=Identity^';
  50.221 -COMMENT ON COLUMN &VIEW..party_type
  50.222 -   IS 'FLAGS=KMI-L^DATATYPE=STRING(200)^PROMPT=Party Type^REF=PartyType^';
  50.223 -COMMENT ON COLUMN &VIEW..party_type_db
  50.224 -   IS 'FLAGS=A----^DATATYPE=STRING(20)^PROMPT=Party Type^';
  50.225 -COMMENT ON COLUMN &VIEW..priority
  50.226 -   IS 'FLAGS=A-IUL^DATATYPE=NUMBER^PROMPT=Priority^';
  50.227 -COMMENT ON COLUMN &VIEW..blocked_for_payment
  50.228 -   IS 'FLAGS=A-IUL^DATATYPE=BOOLEAN^PROMPT=Blocked For Payment^';
  50.229 -COMMENT ON COLUMN &VIEW..other_payee_identity
  50.230 -   IS 'FLAGS=A-IUL^DATATYPE=STRING(20)/UPPERCASE^PROMPT=Other Payee Identity^REF=IdentityPayInfo(company)^';
  50.231 -COMMENT ON COLUMN &VIEW..interest_template
  50.232 -   IS 'FLAGS=A-IU-^DATATYPE=STRING(20)/UPPERCASE^PROMPT=Interest Template^REF=InterestTemplate(company)^';
  50.233 -COMMENT ON COLUMN &VIEW..reminder_template
  50.234 -   IS 'FLAGS=A-IU-^DATATYPE=STRING(20)/UPPERCASE^PROMPT=Reminder Template^REF=ReminderTemplate(company)^';
  50.235 -COMMENT ON COLUMN &VIEW..payment_delay
  50.236 -   IS 'FLAGS=A-IU-^DATATYPE=NUMBER^PROMPT=Number of Days Usual Payment Delay^';
  50.237 -COMMENT ON COLUMN &VIEW..amount_tolerance
  50.238 -   IS 'FLAGS=A-IU-^DATATYPE=NUMBER^PROMPT=Amount Tolerance^';
  50.239 -COMMENT ON COLUMN &VIEW..percent_tolerance
  50.240 -   IS 'FLAGS=A-IU-^DATATYPE=NUMBER^PROMPT=Percent Tolerance^';
  50.241 -COMMENT ON COLUMN &VIEW..disc_days_tolerance
  50.242 -   IS 'FLAGS=A-IU-^DATATYPE=NUMBER^PROMPT=Tolerance Days for Discount^';
  50.243 -COMMENT ON COLUMN &VIEW..netting_allowed
  50.244 -   IS 'FLAGS=AMIUL^DATATYPE=BOOLEAN^PROMPT=Netting Allowed^';
  50.245 -COMMENT ON COLUMN &VIEW..format_no
  50.246 -   IS 'FLAGS=AMI--^DATATYPE=NUMBER^PROMPT=Format No^';
  50.247 -COMMENT ON COLUMN &VIEW..payment_advice
  50.248 -   IS 'FLAGS=AMIUL^DATATYPE=STRING(200)^PROMPT=Payment Advice^REF=PaymentAdvice^';
  50.249 -COMMENT ON COLUMN &VIEW..payment_advice_db
  50.250 -   IS 'FLAGS=A----^DATATYPE=STRING(20)^PROMPT=Payment Advice^';
  50.251 -COMMENT ON COLUMN &VIEW..deduction_group
  50.252 -   IS 'FLAGS=A-IUL^DATATYPE=STRING(20)^PROMPT=Deduction Group^REF=DeductionGroup^';
  50.253 -COMMENT ON COLUMN &VIEW..corporation_id
  50.254 -   IS 'FLAGS=A-IU-^DATATYPE=STRING(20)^PROMPT=Corporation Id^';
  50.255 -COMMENT ON COLUMN &VIEW..member_id
  50.256 -   IS 'FLAGS=A-IU-^DATATYPE=STRING(20)^PROMPT=Member Id^';
  50.257 -COMMENT ON COLUMN &VIEW..send_reminder_to_payer
  50.258 -   IS 'FLAGS=A-IU-^DATATYPE=STRING(5)^PROMPT=Send Reminder To Payer^';
  50.259 -COMMENT ON COLUMN &VIEW..send_interest_inv_to_payer
  50.260 -   IS 'FLAGS=A-IU-^DATATYPE=STRING(5)^PROMPT=Send Interest Inv To Payer^';
  50.261 -COMMENT ON COLUMN &VIEW..rule_id
  50.262 -   IS 'FLAGS=A-IUL^DATATYPE=STRING(20)/UPPERCASE^PROMPT=Rule Id^REF=PayMethodRule(company)^';
  50.263 -COMMENT ON COLUMN &VIEW..payment_receipt_type
  50.264 -   IS 'FLAGS=AMIUL^DATATYPE=STRING(200)^PROMPT=Payment Receipt^REF=PaymentReceiptType^';
  50.265 -COMMENT ON COLUMN &VIEW..payment_receipt_type_db
  50.266 -   IS 'FLAGS=A----^DATATYPE=STRING(20)^PROMPT=Payment Receipt^';
  50.267 -COMMENT ON COLUMN &VIEW..template_id
  50.268 -   IS 'FLAGS=A-IU-^DATATYPE=STRING(20)/UPPERCASE^PROMPT=Template Id^REF=ConfirmationStmntTempl(company)^';
  50.269 -COMMENT ON COLUMN &VIEW..check_recipient
  50.270 -   IS 'FLAGS=AMIUL^DATATYPE=STRING(200)^PROMPT=Check Recipient^REF=CheckRecipient^';
  50.271 -COMMENT ON COLUMN &VIEW..check_recipient_db
  50.272 -   IS 'FLAGS=A----^DATATYPE=STRING(20)^PROMPT=Check Recipient^';
  50.273 -COMMENT ON COLUMN &VIEW..send_statement_of_acc_to_payer                        
  50.274 -   IS 'FLAGS=A-IU-^DATATYPE=STRING(5)^PROMPT=Send Statement Of Account To Payer^';
  50.275 -
  50.276 --- Bug 77136, begin, Table join with supplier_info_tab, in order to get name and association no directly.
  50.277 -PROMPT Creating &VIEW_SU_QRY VIEW
  50.278 -CREATE OR REPLACE FORCE VIEW &VIEW_SU_QRY AS
  50.279 -SELECT p.company                                                           company,
  50.280 -       p.identity                                                          identity,
  50.281 -       Party_Type_API.Decode(p.party_type)                                 party_type,
  50.282 -       p.party_type                                                        party_type_db,
  50.283 -       si.name                                                             name,
  50.284 -       si.association_no                                                   association_no,                               
  50.285 -       NVL(Ledger_Item_Util_API.Get_Dom_Balance(
  50.286 -                                p.company,
  50.287 -                                p.identity,
  50.288 -                                Party_Type_API.Decode(p.party_type),
  50.289 -                                Company_Pay_Info_API.Get_Query_Voucher_Date), 0)
  50.290 -                                                                           balance,
  50.291 -       NVL(Ledger_Item_Util_API.Get_Dom_Balance(
  50.292 -                                p.company,
  50.293 -                                p.identity,
  50.294 -                                Party_Type_API.Decode(p.party_type)), 0)   pay_doc_balance,
  50.295 -       NVL(Ledger_Item_Util_API.Get_Adv_Inv_Dom_Balance(
  50.296 -                                p.company,
  50.297 -                                p.identity,
  50.298 -                                Party_Type_API.Decode(p.party_type)), 0)   adv_inv_balance,
  50.299 -       NVL(Ledger_Item_Util_API.Get_Dom_Amount_Due(
  50.300 -                                p.company,
  50.301 -                                p.identity,
  50.302 -                                Party_Type_API.Decode(p.party_type),
  50.303 -                                Company_Pay_Info_API.Get_Query_Voucher_Date), 0)
  50.304 -                                                                           amount_due,
  50.305 -       NVL(Ledger_Item_Util_API.Get_Dom_Amount_Due(
  50.306 -                                p.company,
  50.307 -                                p.identity,
  50.308 -                                Party_Type_API.Decode(p.party_type),
  50.309 -                                Company_Pay_Info_API.Get_Query_Voucher_Date,
  50.310 -                                'TRUE'), 0)
  50.311 -                                                                           pay_doc_amount_due,
  50.312 -       NVL(Ledger_Item_Util_API.Get_Dom_Pre_Payment_Balance(
  50.313 -                                p.company,
  50.314 -                                p.identity,
  50.315 -                                Party_Type_API.Decode(p.party_type),
  50.316 -                                Company_Pay_Info_API.Get_Query_Voucher_Date), 0)
  50.317 -                                                                           pre_payment_balance,
  50.318 -       NVL(Ledger_Item_Util_API.Get_Dom_Bal_Excl_Withh(
  50.319 -                                p.company,
  50.320 -                                p.identity,
  50.321 -                                Party_Type_API.Decode(p.party_type),
  50.322 -                                Company_Pay_Info_API.Get_Query_Voucher_Date), 0)
  50.323 -                                                                           balance_excl_withheld,
  50.324 -       decode(p.other_payee_identity,NULL,'FALSE','TRUE')                  other_party_type_exists,
  50.325 -       Identity_Note_API.Check_Note_Exist(p.company,
  50.326 -                                          p.identity,
  50.327 -                                          p.party_type)                    is_note,
  50.328 -       i.group_id                                                          group_id,
  50.329 -       &OBJID_p                                                            objid,
  50.330 -       &OBJVERSION_p                                                       objversion
  50.331 -FROM   identity_pay_info_tab     p,
  50.332 -       identity_invoice_info_tab i,
  50.333 -       supplier_info_tab         si
  50.334 -WHERE  EXISTS (SELECT * FROM company_finance_auth1 c WHERE p.company = c.company)
  50.335 -AND    p.party_type = 'SUPPLIER'
  50.336 -AND    p.company    = i.company
  50.337 -AND    p.identity   = i.identity
  50.338 -AND    p.party_type = i.party_type
  50.339 -AND    p.identity   = si.supplier_id
  50.340 -WITH   read only;
  50.341 -
  50.342 -COMMENT ON TABLE &VIEW_SU_QRY
  50.343 -   IS 'LU=&LU^PROMPT=Identity Pay Info^MODULE=&MODULE^';
  50.344 -
  50.345 -COMMENT ON COLUMN &VIEW_SU_QRY..company
  50.346 -   IS 'FLAGS=PM---^DATATYPE=STRING(20)/UPPERCASE^PROMPT=Company^REF=Company/NOCHECK^';
  50.347 -COMMENT ON COLUMN &VIEW_SU_QRY..identity
  50.348 -   IS 'FLAGS=PM---^DATATYPE=STRING(20)/UPPERCASE^PROMPT=Identity^';
  50.349 -COMMENT ON COLUMN &VIEW_SU_QRY..party_type
  50.350 -   IS 'FLAGS=KM--L^DATATYPE=STRING(200)^PROMPT=Party Type^REF=PartyType^';
  50.351 -COMMENT ON COLUMN &VIEW_SU_QRY..party_type_db
  50.352 -   IS 'FLAGS=A----^DATATYPE=STRING(20)^PROMPT=Party Type^';
  50.353 -COMMENT ON COLUMN &VIEW_SU_QRY..name
  50.354 -   IS 'FLAGS=AM--L^DATATYPE=STRING(100)^PROMPT=Supplier Name^';
  50.355 -COMMENT ON COLUMN &VIEW_SU_QRY..balance
  50.356 -   IS 'FLAGS=AM--L^DATATYPE=NUMBER^PROMPT=Balance^';
  50.357 -COMMENT ON COLUMN &VIEW_SU_QRY..adv_inv_balance
  50.358 -   IS 'FLAGS=AM--L^DATATYPE=NUMBER^PROMPT=Adv Inv Balance^';
  50.359 -COMMENT ON COLUMN &VIEW_SU_QRY..amount_due
  50.360 -   IS 'FLAGS=AM--L^DATATYPE=NUMBER^PROMPT=Amount Due^';
  50.361 -COMMENT ON COLUMN &VIEW_SU_QRY..pre_payment_balance
  50.362 -   IS 'FLAGS=AM--L^DATATYPE=NUMBER^PROMPT=Open Pre-Payments^';
  50.363 -COMMENT ON COLUMN &VIEW_SU_QRY..balance_excl_withheld
  50.364 -   IS 'FLAGS=AM--L^DATATYPE=NUMBER^PROMPT=Balance Excl Withheld^';
  50.365 -COMMENT ON COLUMN &VIEW_SU_QRY..other_party_type_exists
  50.366 -   IS 'FLAGS=AM--L^DATATYPE=BOOLEAN^PROMPT=Other Party Type Exist^';
  50.367 -COMMENT ON COLUMN &VIEW_SU_QRY..is_note
  50.368 -   IS 'FLAGS=AM--L^DATATYPE=BOOLEAN^PROMPT=Notes^';
  50.369 -COMMENT ON COLUMN &VIEW_SU_QRY..group_id
  50.370 -   IS 'FLAGS=A----^DATATYPE=STRING(20)^PROMPT=Group ID^';
  50.371 --- Bug 77136, end
  50.372 -
  50.373 --- Bug 77136, begin, Table join with customer_info_tab, in order to get name and association no directly.
  50.374 --- Bug 69035, Begin, Added reminder_template_id,interest_template_id and their descriptions to VIEW_CU_QRY  
  50.375 -PROMPT Creating &VIEW_CU_QRY view
  50.376 -CREATE OR REPLACE FORCE VIEW &VIEW_CU_QRY AS
  50.377 -SELECT p.company                                                           company,
  50.378 -       p.identity                                                          identity,
  50.379 -       Party_Type_API.Decode(p.party_type)                                 party_type,
  50.380 -       p.party_type                                                        party_type_db,
  50.381 -       ci.name                                                             name,
  50.382 -       ci.association_no                                                   association_no,
  50.383 -       NVL(Ledger_Item_Util_API.Get_Dom_Balance(
  50.384 -                                p.company,
  50.385 -                                p.identity,
  50.386 -                                Party_Type_API.Decode(p.party_type),
  50.387 -                                Company_Pay_Info_API.Get_Query_Voucher_Date), 0)
  50.388 -                                                                           balance,
  50.389 -       NVL(Ledger_Item_Util_API.Get_Dom_Balance(
  50.390 -                                p.company,
  50.391 -                                p.identity,
  50.392 -                                Party_Type_API.Decode(p.party_type),
  50.393 -                                Company_Pay_Info_API.Get_Query_Voucher_Date,
  50.394 -                                'TRUE'), 0)                                pay_doc_balance,
  50.395 -       NVL(Ledger_Item_Util_API.Get_Adv_Inv_Dom_Balance(
  50.396 -                                p.company,
  50.397 -                                p.identity,
  50.398 -                                Party_Type_API.Decode(p.party_type)), 0)   adv_inv_balance,
  50.399 -       NVL(Ledger_Item_Util_API.Get_Dom_Amount_Due(
  50.400 -                                p.company,
  50.401 -                                p.identity,
  50.402 -                                Party_Type_API.Decode(p.party_type),
  50.403 -                                Company_Pay_Info_API.Get_Query_Voucher_Date), 0)
  50.404 -                                                                           amount_due,
  50.405 -       NVL(Ledger_Item_Util_API.Get_Dom_Amount_Due(
  50.406 -                                p.company,
  50.407 -                                p.identity,
  50.408 -                                Party_Type_API.Decode(p.party_type),
  50.409 -                                Company_Pay_Info_API.Get_Query_Voucher_Date,
  50.410 -                                'TRUE'), 0)                                pay_doc_amount_due,
  50.411 -       NVL(Ledger_Item_Util_API.Get_Dom_Pre_Payment_Balance(
  50.412 -                                p.company,
  50.413 -                                p.identity,
  50.414 -                                Party_Type_API.Decode(p.party_type),
  50.415 -                                Company_Pay_Info_API.Get_Query_Voucher_Date), 0)
  50.416 -                                                                           pre_payment_balance,
  50.417 -       'FALSE'                                                             other_party_type_exists,
  50.418 -       Identity_Note_API.Check_Note_Exist(p.company,
  50.419 -                                          p.identity,
  50.420 -                                          p.party_type)                    is_note,
  50.421 -       i.group_id                                                          group_id,
  50.422 -       cci.credit_analyst_code                                             ca_code,
  50.423 -       Credit_Analyst_API.Get_Description(p.company,
  50.424 -                                          cci.credit_analyst_code )        ca_desc,
  50.425 -       Credit_Analyst_API.Get_Manager(p.company,
  50.426 -                                      cci.credit_analyst_code)             ca_manager,
  50.427 -       Credit_Analyst_API.Get_Manager_Description(p.company,
  50.428 -                                                  cci.credit_analyst_code) manager_desc,
  50.429 -       cci.corp_credit_relation_exist                                      credit_relation_exist,
  50.430 -       cci.credit_relationship_type                                        credit_relation_type,
  50.431 -       cci.parent_company                                                  parent_company,
  50.432 -       cci.parent_identity                                                 parent_party,
  50.433 -       Customer_Info_API.Get_Name(cci.parent_identity)                     parent_name,
  50.434 -       Customer_Info_Vat_API.Get_Tax_Withholding(p.identity,
  50.435 -               Customer_Info_Address_API.Get_Default_Address(p.identity,
  50.436 -                 Address_Type_Code_API.Decode('DELIVERY')), p.company)     tax_withholding,
  50.437 -       p.reminder_template                                                 reminder_template_id,
  50.438 -       Reminder_Template_Api.Get_Template_Description(p.company ,
  50.439 -                                                      p.reminder_template) reminder_template_des,
  50.440 -       p.interest_template                                                 interest_template_id,
  50.441 -       Interest_Template_API.Get_Template_Description(p.company,
  50.442 -                                                      p.interest_template) interest_template_des,
  50.443 -       &OBJID_p                                                            objid,
  50.444 -       &OBJVERSION_p                                                       objversion
  50.445 -FROM   identity_pay_info_tab     p,
  50.446 -       identity_invoice_info_tab i,
  50.447 -       customer_credit_info_tab  cci,
  50.448 -       customer_info_tab         ci
  50.449 -WHERE  EXISTS (SELECT * FROM company_finance_auth1 c WHERE p.company = c.company)
  50.450 -AND    p.party_type = 'CUSTOMER'
  50.451 -AND    p.company    = cci.company(+)
  50.452 -AND    p.identity   = cci.identity(+)
  50.453 -AND    p.company    = i.company
  50.454 -AND    p.identity   = i.identity
  50.455 -AND    p.party_type = i.party_type
  50.456 -AND    p.identity   = ci.customer_id
  50.457 -WITH   read only;
  50.458 -
  50.459 -COMMENT ON TABLE &VIEW_CU_QRY
  50.460 -   IS 'LU=&LU^PROMPT=Identity Pay Info^MODULE=&MODULE^';
  50.461 -
  50.462 -COMMENT ON COLUMN &VIEW_CU_QRY..company
  50.463 -   IS 'FLAGS=PM---^DATATYPE=STRING(20)/UPPERCASE^PROMPT=Company^REF=Company/NOCHECK^';
  50.464 -COMMENT ON COLUMN &VIEW_CU_QRY..identity
  50.465 -   IS 'FLAGS=PM---^DATATYPE=STRING(20)/UPPERCASE^PROMPT=Identity^';
  50.466 -COMMENT ON COLUMN &VIEW_CU_QRY..party_type
  50.467 -   IS 'FLAGS=KM--L^DATATYPE=STRING(200)^PROMPT=Party Type^REF=PartyType^';
  50.468 -COMMENT ON COLUMN &VIEW_CU_QRY..party_type_db
  50.469 -   IS 'FLAGS=A----^DATATYPE=STRING(20)^PROMPT=Party Type^';
  50.470 -COMMENT ON COLUMN &VIEW_CU_QRY..name
  50.471 -   IS 'FLAGS=AM--L^DATATYPE=STRING(100)^PROMPT=Customer Name^';
  50.472 -COMMENT ON COLUMN &VIEW_CU_QRY..balance
  50.473 -   IS 'FLAGS=AM--L^DATATYPE=NUMBER^PROMPT=Balance^';
  50.474 -COMMENT ON COLUMN &VIEW_CU_QRY..adv_inv_balance
  50.475 -   IS 'FLAGS=AM--L^DATATYPE=NUMBER^PROMPT=Adv Inv Balance^';
  50.476 -COMMENT ON COLUMN &VIEW_CU_QRY..amount_due
  50.477 -   IS 'FLAGS=AM--L^DATATYPE=NUMBER^PROMPT=Amount Due^';
  50.478 -COMMENT ON COLUMN &VIEW_CU_QRY..pre_payment_balance
  50.479 -   IS 'FLAGS=AM--L^DATATYPE=NUMBER^PROMPT=Open Pre-Payments^';
  50.480 -COMMENT ON COLUMN &VIEW_CU_QRY..other_party_type_exists
  50.481 -   IS 'FLAGS=AM--L^DATATYPE=BOOLEAN^PROMPT=Other Party Type Exist^';
  50.482 -COMMENT ON COLUMN &VIEW_CU_QRY..is_note
  50.483 -   IS 'FLAGS=AM--L^DATATYPE=BOOLEAN^PROMPT=Notes^';
  50.484 -COMMENT ON COLUMN &VIEW_CU_QRY..group_id
  50.485 -   IS 'FLAGS=A----^DATATYPE=STRING(20)^PROMPT=Group ID^';
  50.486 -COMMENT ON COLUMN &VIEW_CU_QRY..ca_code
  50.487 -   IS 'FLAGS=A---L^DATATYPE=STRING(20)/UPPERCASE^PROMPT=Credit Analyst Code^';
  50.488 -COMMENT ON COLUMN &VIEW_CU_QRY..ca_desc
  50.489 -   IS 'FLAGS=A---L^DATATYPE=STRING(100)^PROMPT=Credit Analyst Description^';
  50.490 -COMMENT ON COLUMN &VIEW_CU_QRY..ca_manager
  50.491 -   IS 'FLAGS=A---L^DATATYPE=STRING(20)/UPPERCASE^PROMPT=Credit Analyst Manager^';
  50.492 -COMMENT ON COLUMN &VIEW_CU_QRY..manager_desc
  50.493 -   IS 'FLAGS=A---L^DATATYPE=STRING(100)^PROMPT=Manager Description^';
  50.494 -COMMENT ON COLUMN &VIEW_CU_QRY..credit_relation_exist
  50.495 -   IS 'FLAGS=A---L^DATATYPE=BOOLEAN^PROMPT=Credit Relation Exist^';
  50.496 -COMMENT ON COLUMN &VIEW_CU_QRY..credit_relation_type
  50.497 -   IS 'FLAGS=A---L^DATATYPE=STRING(100)^PROMPT=Credit Relation Type^';
  50.498 -COMMENT ON COLUMN &VIEW_CU_QRY..parent_company
  50.499 -   IS 'FLAGS=A---L^DATATYPE=STRING(20)/UPPERCASE^PROMPT=Parent Company^';
  50.500 -COMMENT ON COLUMN &VIEW_CU_QRY..parent_party
  50.501 -   IS 'FLAGS=A---L^DATATYPE=STRING(20)/UPPERCASE^PROMPT=Parent Party^';
  50.502 -COMMENT ON COLUMN &VIEW_CU_QRY..parent_name
  50.503 -   IS 'FLAGS=A---L^DATATYPE=STRING(100)^PROMPT=Parent Name^';
  50.504 -COMMENT ON COLUMN &VIEW_CU_QRY..tax_withholding
  50.505 -   IS 'FLAGS=A---L^DATATYPE=STRING(20)^PROMPT=Tax Withholding^';
  50.506 -COMMENT ON COLUMN &VIEW_CU_QRY..reminder_template_id
  50.507 -   IS 'FLAGS=A---L^DATATYPE=STRING(20)^PROMPT=Reminder Template Id^';
  50.508 -COMMENT ON COLUMN &VIEW_CU_QRY..reminder_template_des
  50.509 -   IS 'FLAGS=A---L^DATATYPE=STRING(200)^PROMPT=Reminder Template Description^';
  50.510 -COMMENT ON COLUMN &VIEW_CU_QRY..interest_template_id
  50.511 -   IS 'FLAGS=A---L^DATATYPE=STRING(20)^PROMPT=Interest Template Id^';
  50.512 -COMMENT ON COLUMN &VIEW_CU_QRY..interest_template_des
  50.513 -   IS 'FLAGS=A---L^DATATYPE=STRING(200)^PROMPT=Interest Template Description^';
  50.514 --- Bug 69035, End;
  50.515 --- Bug 77136, end
  50.516 -
  50.517 -PROMPT Creating &VIEW_SUPP view
  50.518 -
  50.519 --- Bug 68653, Begin, Added new columns address and city
  50.520 -CREATE OR REPLACE FORCE VIEW &VIEW_SUPP AS
  50.521 -SELECT ipi.company                      company,
  50.522 -       identity                       identity,
  50.523 -       Supplier_Info_API.Get_Name(identity)   party_name,
  50.524 -       Supplier_Info_Address_API.Get_City(identity,
  50.525 -                                                Supplier_Info_Address_API.Get_Default_Address(identity,
  50.526 -                                                               Address_Type_Code_API.Decode('PAY')))      city,
  50.527 -       RTRIM(Supplier_Info_Address_API.Get_Address1(identity,
  50.528 -                                                Supplier_Info_Address_API.Get_Default_Address(identity,
  50.529 -                                                               Address_Type_Code_API.Decode('PAY')))||','||
  50.530 -                                                Supplier_Info_Address_API.Get_Address2(identity,
  50.531 -                                                Supplier_Info_Address_API.Get_Default_Address(identity,
  50.532 -                                                               Address_Type_Code_API.Decode('PAY'))),',') address,
  50.533 -       priority                       priority,
  50.534 -       blocked_for_payment            blocked_for_payment,
  50.535 -       other_payee_identity           other_payee_identity,
  50.536 -       Payment_Advice_API.Decode(payment_advice) payment_advice,
  50.537 -       ipi.&OBJID                     objid,
  50.538 -       &OBJVERSION                    objversion
  50.539 -FROM   identity_pay_info_tab ipi
  50.540 -WHERE  EXISTS (SELECT * FROM company_finance_auth1 c WHERE ipi.company = c.company)
  50.541 -AND    party_type = 'SUPPLIER'
  50.542 -WITH   read only;
  50.543 -
  50.544 -COMMENT ON TABLE &VIEW_SUPP
  50.545 -   IS 'LU=&LU^PROMPT=Supplier Pay Info^MODULE=&MODULE^';
  50.546 -
  50.547 -COMMENT ON COLUMN &VIEW_SUPP..company
  50.548 -   IS 'FLAGS=PMI--^DATATYPE=STRING(20)/UPPERCASE^PROMPT=Company^REF=Company/NOCHECK^';
  50.549 -COMMENT ON COLUMN &VIEW_SUPP..identity
  50.550 -   IS 'FLAGS=KMI-L^DATATYPE=STRING(20)/UPPERCASE^PROMPT=Supplier Id^REF=SupplierInfo/CUSTOM=(Check_Cascade_Supplier__,Cascade_Delete_Supplier__)^';
  50.551 -COMMENT ON COLUMN &VIEW_SUPP..party_name
  50.552 -   IS 'FLAGS=AMI-L^DATATYPE=STRING(100)^PROMPT=Supplier Name^';
  50.553 -COMMENT ON COLUMN &VIEW_SUPP..city
  50.554 -   IS 'FLAGS=A---L^DATATYPE=STRING(35)^PROMPT=City^';
  50.555 -COMMENT ON COLUMN &VIEW_SUPP..address
  50.556 -   IS 'FLAGS=A---L^DATATYPE=STRING(2000)^PROMPT=Address^';
  50.557 -COMMENT ON COLUMN &VIEW_SUPP..priority
  50.558 -   IS 'FLAGS=A-IUL^DATATYPE=NUMBER^PROMPT=Priority^';
  50.559 -COMMENT ON COLUMN &VIEW_SUPP..blocked_for_payment
  50.560 -   IS 'FLAGS=A-IUL^DATATYPE=BOOLEAN^PROMPT=Blocked For Payment^';
  50.561 -COMMENT ON COLUMN &VIEW_SUPP..other_payee_identity
  50.562 -   IS 'FLAGS=A-IUL^DATATYPE=STRING(20)/UPPERCASE^PROMPT=Other Payee^';
  50.563 -COMMENT ON COLUMN &VIEW_SUPP..payment_advice
  50.564 -   IS 'FLAGS=A-IU-^DATATYPE=STRING(200)^PROMPT=Payment Advice^REF=PaymentAdvice^';
  50.565 --- Bug 68653, End
  50.566 -
  50.567 -
  50.568 -PROMPT Creating &VIEW_CUST view
  50.569 -
  50.570 --- Bug 68653, Begin, Added new columns address and city
  50.571 -CREATE OR REPLACE FORCE VIEW &VIEW_CUST AS
  50.572 -SELECT ipi.company                   company,
  50.573 -       identity                    identity,
  50.574 -       Customer_Info_API.Get_Name(identity)   party_name,
  50.575 -       Customer_Info_Address_API.Get_City(identity,
  50.576 -                                               Customer_Info_Address_API.Get_Default_Address(identity,
  50.577 -                                                                  Address_Type_Code_API.Decode('PAY')))     city,
  50.578 -       RTRIM(Customer_Info_Address_API.Get_Address1(identity,
  50.579 -                                               Customer_Info_Address_API.Get_Default_Address(identity,
  50.580 -                                                                  Address_Type_Code_API.Decode('PAY')))||','||
  50.581 -                                               Customer_Info_Address_API.Get_Address2(identity,
  50.582 -                                               Customer_Info_Address_API.Get_Default_Address(identity,
  50.583 -                                                                 Address_Type_Code_API.Decode('PAY'))),',') address,
  50.584 -       interest_template           interest_template,
  50.585 -       reminder_template           reminder_template,
  50.586 -       Payment_Advice_API.Decode(payment_advice) payment_advice,
  50.587 -       ipi.&OBJID                  objid,
  50.588 -       &OBJVERSION                 objversion
  50.589 -FROM   identity_pay_info_tab ipi
  50.590 -WHERE  EXISTS (SELECT * FROM company_finance_auth1 c WHERE ipi.company = c.company)
  50.591 -AND    party_type = 'CUSTOMER'
  50.592 -WITH   read only;
  50.593 -
  50.594 -COMMENT ON TABLE &VIEW_CUST
  50.595 -   IS 'LU=&LU^PROMPT=Customer Pay Info^MODULE=&MODULE^';
  50.596 -
  50.597 -COMMENT ON COLUMN &VIEW_CUST..company
  50.598 -   IS 'FLAGS=PMI--^DATATYPE=STRING(20)/UPPERCASE^PROMPT=Company^REF=Company/NOCHECK^';
  50.599 -COMMENT ON COLUMN &VIEW_CUST..identity
  50.600 -   IS 'FLAGS=KMI-L^DATATYPE=STRING(20)/UPPERCASE^PROMPT=Customer Id^REF=CustomerInfo/CUSTOM=(Check_Cascade_Customer__,Cascade_Delete_Customer__)^';
  50.601 -COMMENT ON COLUMN &VIEW_CUST..party_name
  50.602 -   IS 'FLAGS=AMI-L^DATATYPE=STRING(100)^PROMPT=Customer Name^';
  50.603 -COMMENT ON COLUMN &VIEW_CUST..city
  50.604 -   IS 'FLAGS=A---L^DATATYPE=STRING(35)^PROMPT=City^';
  50.605 -COMMENT ON COLUMN &VIEW_CUST..address
  50.606 -   IS 'FLAGS=A---L^DATATYPE=STRING(2000)^PROMPT=Address^';
  50.607 -COMMENT ON COLUMN &VIEW_CUST..interest_template
  50.608 -   IS 'FLAGS=A-IUL^DATATYPE=STRING(20)/UPPERCASE^PROMPT=Interest Template^REF=InterestTemplate(company)/NOCHECK^';
  50.609 -COMMENT ON COLUMN &VIEW_CUST..reminder_template
  50.610 -   IS 'FLAGS=A-IUL^DATATYPE=STRING(20)/UPPERCASE^PROMPT=Reminder Template^REF=ReminderTemplate(company)/NOCHECK^';
  50.611 -COMMENT ON COLUMN &VIEW_CUST..payment_advice
  50.612 -   IS 'FLAGS=A-IU-^DATATYPE=STRING(200)^PROMPT=Payment Advice^REF=PaymentAdvice^';
  50.613 --- Bug 68653, End
  50.614 -
  50.615 -PROMPT Creating &VIEW_LOV view
  50.616 -
  50.617 --- Bug 68653, Begin, Added new columns address and city
  50.618 -CREATE OR REPLACE FORCE VIEW &VIEW_LOV AS
  50.619 -SELECT ipi.company                   company,
  50.620 -       party_type                  party_type_db,
  50.621 -       identity                    identity,
  50.622 -       Payment_Library_API.Get_Identity_Name(ipi.company,
  50.623 -                                             identity,
  50.624 -                                             Party_Type_API.Decode(party_type)) party_name,
  50.625 -       Payment_Library_API.Get_City(ipi.company,
  50.626 -                                    identity,
  50.627 -                                    party_type)    city,
  50.628 -       Payment_Library_API.Get_Address(ipi.company,
  50.629 -                                       identity,
  50.630 -                                       party_type) address,
  50.631 -       ipi.&OBJID                  objid,
  50.632 -       &OBJVERSION                 objversion
  50.633 -FROM   identity_pay_info_tab ipi
  50.634 -WHERE  EXISTS (SELECT * FROM company_finance_auth1 c WHERE ipi.company = c.company)
  50.635 -WITH   read only;
  50.636 -
  50.637 -COMMENT ON TABLE &VIEW_LOV
  50.638 -   IS 'LU=&LU^PROMPT=Customer/Supplier Pay Info^MODULE=&MODULE^';
  50.639 -
  50.640 -COMMENT ON COLUMN &VIEW_LOV..company
  50.641 -   IS 'FLAGS=PMI--^DATATYPE=STRING(20)/UPPERCASE^PROMPT=Company^REF=Company/NOCHECK^';
  50.642 -COMMENT ON COLUMN &VIEW_LOV..party_type_db
  50.643 -   IS 'FLAGS=PMI--^DATATYPE=STRING(20)^PROMPT=Party Type^';
  50.644 -COMMENT ON COLUMN &VIEW_LOV..identity
  50.645 -   IS 'FLAGS=KMI-L^DATATYPE=STRING(20)/UPPERCASE^PROMPT=Identity^';
  50.646 -COMMENT ON COLUMN &VIEW_LOV..party_name
  50.647 -   IS 'FLAGS=AMI-L^DATATYPE=STRING(100)^PROMPT=Name^';
  50.648 -COMMENT ON COLUMN &VIEW_LOV..city
  50.649 -   IS 'FLAGS=A---L^DATATYPE=STRING(35)^PROMPT=City^';
  50.650 -COMMENT ON COLUMN &VIEW_LOV..address
  50.651 -   IS 'FLAGS=A---L^DATATYPE=STRING(2000)^PROMPT=Address^';
  50.652 --- Bug 68653, End
  50.653 -
  50.654 -
  50.655 -PROMPT Creating &VIEW_ALL view
  50.656 -
  50.657 -CREATE OR REPLACE FORCE VIEW &VIEW_ALL AS
  50.658 -SELECT ipi.company                 company,
  50.659 -       identity                    identity,
  50.660 -       Party_Type_API.Decode(party_type) party_type,
  50.661 -       Payment_Library_API.Get_Identity_Name(ipi.company,
  50.662 -                                             identity,
  50.663 -                                             Party_Type_API.Decode(party_type)) party_name,
  50.664 -       ipi.&OBJID                  objid,
  50.665 -       &OBJVERSION                 objversion
  50.666 -FROM   identity_pay_info_tab ipi
  50.667 -WHERE  EXISTS (SELECT * FROM company_finance_auth1 c WHERE ipi.company = c.company)
  50.668 -WITH   read only;
  50.669 -
  50.670 -COMMENT ON TABLE &VIEW_ALL
  50.671 -   IS 'LU=&LU^PROMPT=Identity Pay Info^MODULE=&MODULE^';
  50.672 -
  50.673 -COMMENT ON COLUMN &VIEW_ALL..company
  50.674 -   IS 'FLAGS=PMI--^DATATYPE=STRING(20)/UPPERCASE^PROMPT=Company^REF=Company/NOCHECK^';
  50.675 -COMMENT ON COLUMN &VIEW_ALL..identity
  50.676 -   IS 'FLAGS=KMI-L^DATATYPE=STRING(20)/UPPERCASE^PROMPT=Identity^';
  50.677 -COMMENT ON COLUMN &VIEW_ALL..party_type
  50.678 -   IS 'FLAGS=AMI-L^DATATYPE=STRING(200)^PROMPT=Party Type^REF=PartyType';
  50.679 -COMMENT ON COLUMN &VIEW_ALL..party_name
  50.680 -   IS 'FLAGS=AMI-L^DATATYPE=STRING(100)^PROMPT=Name^';
  50.681 -
  50.682 -PROMPT Creating &VIEWPCT view
  50.683 -
  50.684 -CREATE OR REPLACE FORCE VIEW &VIEWPCT AS
  50.685 -SELECT company                        company,
  50.686 -       identity                       identity,
  50.687 -       party_type                     party_type_db,
  50.688 -       priority                       priority,
  50.689 -       blocked_for_payment            blocked_for_payment,
  50.690 -       other_payee_identity           other_payee_identity,
  50.691 -       interest_template              interest_template,
  50.692 -       reminder_template              reminder_template,
  50.693 -       payment_delay                  payment_delay,
  50.694 -       amount_tolerance               amount_tolerance,
  50.695 -       percent_tolerance              percent_tolerance,
  50.696 -       disc_days_tolerance            disc_days_tolerance,
  50.697 -       netting_allowed                netting_allowed,
  50.698 -       format_no                      format_no,
  50.699 -       payment_advice                 payment_advice_db,
  50.700 -       deduction_group                deduction_group,
  50.701 -       corporation_id                 corporation_id,
  50.702 -       member_id                      member_id,
  50.703 -       send_reminder_to_payer         send_reminder_to_payer,
  50.704 -       send_interest_inv_to_payer     send_interest_inv_to_payer,
  50.705 -       payment_receipt_type           payment_receipt_type_db,
  50.706 -       send_statement_of_acc_to_payer send_statement_of_acc_to_payer
  50.707 -FROM   identity_pay_info_tab
  50.708 -WITH   read only;
  50.709 -
  50.710 -COMMENT ON TABLE &VIEWPCT
  50.711 -   IS 'LU=&LU^PROMPT=Identity Pay Info^MODULE=&MODULE^';
  50.712 -
  50.713 -COMMENT ON COLUMN &VIEWPCT..company
  50.714 -   IS 'FLAGS=PMI--^DATATYPE=STRING(20)/UPPERCASE^PROMPT=Company^REF=CompanyPayInfo/NOCHECK^';
  50.715 -COMMENT ON COLUMN &VIEWPCT..identity
  50.716 -   IS 'FLAGS=KMI--^DATATYPE=STRING(20)/UPPERCASE^PROMPT=Identity^';
  50.717 -COMMENT ON COLUMN &VIEWPCT..party_type_db
  50.718 -   IS 'FLAGS=A----^DATATYPE=STRING(20)^PROMPT=Party Type^';
  50.719 -COMMENT ON COLUMN &VIEWPCT..priority
  50.720 -   IS 'FLAGS=A-IUL^DATATYPE=NUMBER^PROMPT=Priority^';
  50.721 -COMMENT ON COLUMN &VIEWPCT..blocked_for_payment
  50.722 -   IS 'FLAGS=A-IUL^DATATYPE=BOOLEAN^PROMPT=Blocked For Payment^';
  50.723 -COMMENT ON COLUMN &VIEWPCT..other_payee_identity
  50.724 -   IS 'FLAGS=A-IUL^DATATYPE=STRING(20)/UPPERCASE^PROMPT=Other Payee Identity^REF=IdentityPayInfo(company)/NOCHECK^';
  50.725 -COMMENT ON COLUMN &VIEWPCT..interest_template
  50.726 -   IS 'FLAGS=A-IU-^DATATYPE=STRING(20)/UPPERCASE^PROMPT=Interest Template^REF=InterestTemplate(company)/NOCHECK^';
  50.727 -COMMENT ON COLUMN &VIEWPCT..reminder_template
  50.728 -   IS 'FLAGS=A-IU-^DATATYPE=STRING(20)/UPPERCASE^PROMPT=Reminder Template^REF=ReminderTemplate(company)/NOCHECK^';
  50.729 -COMMENT ON COLUMN &VIEWPCT..payment_delay
  50.730 -   IS 'FLAGS=A-IU-^DATATYPE=NUMBER^PROMPT=Number of Days Usual Payment Delay^';
  50.731 -COMMENT ON COLUMN &VIEWPCT..amount_tolerance
  50.732 -   IS 'FLAGS=A-IU-^DATATYPE=NUMBER^PROMPT=Amount Tolerance^';
  50.733 -COMMENT ON COLUMN &VIEWPCT..percent_tolerance
  50.734 -   IS 'FLAGS=A-IU-^DATATYPE=NUMBER^PROMPT=Percent Tolerance^';
  50.735 -COMMENT ON COLUMN &VIEWPCT..disc_days_tolerance
  50.736 -   IS 'FLAGS=A-IU-^DATATYPE=NUMBER^PROMPT=Tolerance Days for Discount^';
  50.737 -COMMENT ON COLUMN &VIEWPCT..netting_allowed
  50.738 -   IS 'FLAGS=AMIUL^DATATYPE=BOOLEAN^PROMPT=Netting Allowed^';
  50.739 -COMMENT ON COLUMN &VIEWPCT..format_no
  50.740 -   IS 'FLAGS=AMI--^DATATYPE=NUMBER^PROMPT=Format No^';
  50.741 -COMMENT ON COLUMN &VIEWPCT..payment_advice_db
  50.742 -   IS 'FLAGS=A----^DATATYPE=STRING(20)^PROMPT=Payment Advice^';
  50.743 -COMMENT ON COLUMN &VIEWPCT..deduction_group
  50.744 -   IS 'FLAGS=A-IUL^DATATYPE=STRING(20)^PROMPT=Deduction Group^REF=DeductionGroup/NOCHECK^';
  50.745 -COMMENT ON COLUMN &VIEWPCT..corporation_id
  50.746 -   IS 'FLAGS=A-IU-^DATATYPE=STRING(20)^PROMPT=Corporation Id^';
  50.747 -COMMENT ON COLUMN &VIEWPCT..member_id
  50.748 -   IS 'FLAGS=A-IU-^DATATYPE=STRING(20)^PROMPT=Member Id^';
  50.749 -COMMENT ON COLUMN &VIEWPCT..send_reminder_to_payer
  50.750 -   IS 'FLAGS=A-IU-^DATATYPE=STRING(5)^PROMPT=Send Reminder To Payer^';
  50.751 -COMMENT ON COLUMN &VIEWPCT..send_interest_inv_to_payer
  50.752 -   IS 'FLAGS=A-IU-^DATATYPE=STRING(5)^PROMPT=Send Interest Inv To Payer^';
  50.753 -COMMENT ON COLUMN &VIEWPCT..payment_receipt_type_db
  50.754 -   IS 'FLAGS=A----^DATATYPE=STRING(20)^PROMPT=Payment Receipt^';
  50.755 -COMMENT ON COLUMN &VIEWPCT..send_statement_of_acc_to_payer                        
  50.756 -   IS 'FLAGS=A-IU-^DATATYPE=STRING(5)^PROMPT=Send Statement Of Account To Payer^';
  50.757 -
  50.758 -
  50.759 -PROMPT Creating &VIEW_PAYER_QRY view
  50.760 --- Bug 69035, Begin, Added reminder_template_id,interest_template_id and their descriptions   
  50.761 -CREATE OR REPLACE FORCE VIEW &VIEW_PAYER_QRY AS
  50.762 -SELECT p.company                      company,
  50.763 -       identity                       identity,
  50.764 -       Party_Type_API.Decode(party_type)  party_type,                              
  50.765 -       party_type                     party_type_db,
  50.766 -       Customer_Info_API.Get_Name(identity)  name,                              
  50.767 -       NVL(Ledger_Item_Util_API.Get_Payer_Dom_Balance(
  50.768 -                                p.company,
  50.769 -                                identity,
  50.770 -                                Party_Type_API.Decode(party_type)), 0)
  50.771 -                                      balance,
  50.772 -       NVL(Ledger_Item_Util_API.Get_Payer_Adv_Inv_Dom_Balance(
  50.773 -                                p.company,
  50.774 -                                identity,
  50.775 -                                Party_Type_API.Decode(party_type)), 0)
  50.776 -                                      payer_adv_inv_balance,
  50.777 -       NVL(Ledger_Item_Util_API.Get_Payer_Dom_Bal_of_other_cus(
  50.778 -                                p.company,
  50.779 -                                identity,
  50.780 -                                Party_Type_API.Decode(party_type)), 0)
  50.781 -                                      other_cust_bal,
  50.782 -       NVL(Ledger_Item_Util_API.Get_Payer_Dom_Amount_Due(
  50.783 -                                p.company,
  50.784 -                                identity,
  50.785 -                                Party_Type_API.Decode(party_type)), 0)
  50.786 -                                      amount_due,
  50.787 -       NVL(Ledger_Item_Util_API.Get_Payer_Dom_Pre_Pay_Bal(
  50.788 -                                p.company,
  50.789 -                                identity,
  50.790 -                                Party_Type_API.Decode(party_type)), 0)
  50.791 -                                      pre_payment_balance,
  50.792 -       Identity_Note_API.Check_Note_Exist(p.company,
  50.793 -                                          p.identity,
  50.794 -                                          p.party_type)
  50.795 -                                      is_note,
  50.796 -       p.reminder_template            reminder_template_id,
  50.797 -       Reminder_Template_Api.Get_Template_Description(p.company ,
  50.798 -                                                      p.reminder_template) 
  50.799 -                                      reminder_template_des,
  50.800 -       p.interest_template            interest_template_id,
  50.801 -       Interest_Template_API.Get_Template_Description(p.company,
  50.802 -                                                      p.interest_template) 
  50.803 -                                      interest_template_des,
  50.804 -       p.&OBJID                       objid,
  50.805 -       &OBJVERSION                    objversion
  50.806 -FROM   identity_pay_info_tab p
  50.807 -WHERE  EXISTS (SELECT * FROM company_finance_auth1 c WHERE p.company = c.company)
  50.808 -AND    party_type = 'CUSTOMER'
  50.809 -WITH   read only;
  50.810 -
  50.811 -COMMENT ON TABLE &VIEW_PAYER_QRY
  50.812 -   IS 'LU=&LU^PROMPT=Identity Pay Info^MODULE=&MODULE^';
  50.813 -
  50.814 -COMMENT ON COLUMN &VIEW_PAYER_QRY..company
  50.815 -   IS 'FLAGS=PM---^DATATYPE=STRING(20)/UPPERCASE^PROMPT=Company^REF=Company/NOCHECK^';
  50.816 -COMMENT ON COLUMN &VIEW_PAYER_QRY..identity
  50.817 -   IS 'FLAGS=PM---^DATATYPE=STRING(20)/UPPERCASE^PROMPT=Payer^';
  50.818 -COMMENT ON COLUMN &VIEW_PAYER_QRY..party_type
  50.819 -   IS 'FLAGS=KM--L^DATATYPE=STRING(200)^PROMPT=Party Type^REF=PartyType^';
  50.820 -COMMENT ON COLUMN &VIEW_PAYER_QRY..party_type_db
  50.821 -   IS 'FLAGS=A----^DATATYPE=STRING(20)^PROMPT=Party Type^';
  50.822 -COMMENT ON COLUMN &VIEW_PAYER_QRY..name
  50.823 -   IS 'FLAGS=AM--L^DATATYPE=STRING(100)^PROMPT=Name^';
  50.824 -COMMENT ON COLUMN &VIEW_PAYER_QRY..balance
  50.825 -   IS 'FLAGS=AM--L^DATATYPE=NUMBER^PROMPT=Payer Balance^';
  50.826 -COMMENT ON COLUMN &VIEW_PAYER_QRY..payer_adv_inv_balance
  50.827 -   IS 'FLAGS=AM--L^DATATYPE=NUMBER^PROMPT=Payer Adv Inv Balance^';
  50.828 -COMMENT ON COLUMN &VIEW_PAYER_QRY..other_cust_bal
  50.829 -   IS 'FLAGS=AM--L^DATATYPE=NUMBER^PROMPT=Other Customres Balance^';
  50.830 -COMMENT ON COLUMN &VIEW_PAYER_QRY..amount_due
  50.831 -   IS 'FLAGS=AM--L^DATATYPE=NUMBER^PROMPT=Amount Due^';
  50.832 -COMMENT ON COLUMN &VIEW_PAYER_QRY..pre_payment_balance
  50.833 -   IS 'FLAGS=AM--L^DATATYPE=NUMBER^PROMPT=Open Pre-Payments^';
  50.834 -COMMENT ON COLUMN &VIEW_PAYER_QRY..is_note
  50.835 -   IS 'FLAGS=AM--L^DATATYPE=BOOLEAN^PROMPT=Notes^';
  50.836 -COMMENT ON COLUMN &VIEW_PAYER_QRY..reminder_template_id
  50.837 -   IS 'FLAGS=AM--L^DATATYPE=STRING(20)^PROMPT=Reminder Template Id^';
  50.838 -COMMENT ON COLUMN &VIEW_PAYER_QRY..reminder_template_des
  50.839 -   IS 'FLAGS=AM--L^DATATYPE=STRING(200)^PROMPT=Reminder Template Description^';
  50.840 -COMMENT ON COLUMN &VIEW_PAYER_QRY..interest_template_id
  50.841 -   IS 'FLAGS=AM--L^DATATYPE=STRING(20)^PROMPT=Interest Template Id^';
  50.842 -COMMENT ON COLUMN &VIEW_PAYER_QRY..interest_template_des
  50.843 -   IS 'FLAGS=AM--L^DATATYPE=STRING(200)^PROMPT=Interest Template Description^';
  50.844 --- Bug 69035, End
  50.845 -
  50.846 -PROMPT Creating &VIEW_MULTI_CUS view
  50.847 -
  50.848 -CREATE OR REPLACE FORCE VIEW &VIEW_MULTI_CUS AS
  50.849 -SELECT c.customer_id                                 customer_id,
  50.850 -       c.name                                        name,
  50.851 -       c.association_no                              association_no,
  50.852 -       c.customer_id                                 identity,
  50.853 -       c.party_type                                  party_type_db, 
  50.854 -       c.rowid                                       objid,
  50.855 -       LTRIM(LPAD(TO_CHAR(c.rowversion),2000))       objversion
  50.856 -FROM   customer_info_tab  c
  50.857 -WHERE  EXISTS
  50.858 -   (SELECT 1
  50.859 -    FROM   identity_pay_info_tab     p,
  50.860 -           identity_invoice_info_tab i
  50.861 -    WHERE  p.identity   = c.customer_id
  50.862 -    AND    p.party_type = 'CUSTOMER'
  50.863 -    AND EXISTS
  50.864 -        (SELECT * FROM company_finance_auth1 a WHERE p.company = a.company)
  50.865 -    AND    i.company    = p.company
  50.866 -    AND    i.identity   = p.identity
  50.867 -    AND    i.party_type = p.party_type)
  50.868 -WITH read only;
  50.869 -
  50.870 -COMMENT ON TABLE &VIEW_MULTI_CUS
  50.871 -   IS 'LU=&LU^PROMPT=Invoice Ledger Item^MODULE=&MODULE^';
  50.872 -
  50.873 -COMMENT ON COLUMN &VIEW_MULTI_CUS..customer_id
  50.874 -   IS 'FLAGS=KMI-L^DATATYPE=STRING(20)/UPPERCASE^PROMPT=Customer Id^';
  50.875 -COMMENT ON COLUMN &VIEW_MULTI_CUS..name
  50.876 -   IS 'FLAGS=AMIUL^DATATYPE=STRING(100)^PROMPT=Name^';
  50.877 -COMMENT ON COLUMN &VIEW_MULTI_CUS..association_no
  50.878 -   IS 'FLAGS=A-IUL^DATATYPE=STRING(50)^PROMPT=Association No^';
  50.879 -COMMENT ON COLUMN &VIEW_MULTI_CUS..identity
  50.880 -   IS 'FLAGS=A-IUL^DATATYPE=STRING(20)/UPPERCASE^PROMPT=Identity^';   
  50.881 -COMMENT ON COLUMN &VIEW_MULTI_CUS..party_type_db
  50.882 -   IS 'FLAGS=A-IUL^DATATYPE=STRING(20)^PROMPT=Party Type^';
  50.883 -   
  50.884 -
  50.885 -PROMPT Creating &VIEW_MULTI_SUP VIEW
  50.886 -
  50.887 -CREATE OR REPLACE FORCE VIEW &VIEW_MULTI_SUP AS
  50.888 -SELECT s.supplier_id                                   supplier_id,
  50.889 -       s.name                                          name,
  50.890 -       s.association_no                                association_no,
  50.891 -       s.suppliers_own_id                              suppliers_own_id,
  50.892 -       s.rowid                                         objid,
  50.893 -       LTRIM(LPAD(TO_CHAR(s.rowversion),2000))         objversion
  50.894 -FROM   supplier_info_tab s
  50.895 -WHERE  EXISTS
  50.896 -   (SELECT 1
  50.897 -    FROM   identity_pay_info_tab     p,
  50.898 -           identity_invoice_info_tab i
  50.899 -    WHERE  p.identity   = s.supplier_id
  50.900 -    AND    p.party_type = 'SUPPLIER'
  50.901 -    AND EXISTS
  50.902 -       (SELECT * FROM company_finance_auth1 a WHERE p.company = a.company)
  50.903 -    AND    i.company    = p.company
  50.904 -    AND    i.identity   = p.identity
  50.905 -    AND    i.party_type = p.party_type)
  50.906 -WITH read only;
  50.907 -
  50.908 -COMMENT ON TABLE &VIEW_MULTI_SUP
  50.909 -   IS 'LU=&LU^PROMPT=Invoice Ledger Item^MODULE=&MODULE^';
  50.910 -
  50.911 -COMMENT ON COLUMN &VIEW_MULTI_SUP..supplier_id
  50.912 -   IS 'FLAGS=KMI-L^DATATYPE=STRING(20)/UPPERCASE^PROMPT=Supplier Id^';
  50.913 -COMMENT ON COLUMN &VIEW_MULTI_SUP..name
  50.914 -   IS 'FLAGS=AMIUL^DATATYPE=STRING(100)^PROMPT=Name^';
  50.915 -COMMENT ON COLUMN &VIEW_MULTI_SUP..association_no
  50.916 -   IS 'FLAGS=A-IUL^DATATYPE=STRING(50)^PROMPT=Association No^';
  50.917 -COMMENT ON COLUMN &VIEW_MULTI_SUP..suppliers_own_id
  50.918 -   IS 'FLAGS=A-IUL^DATATYPE=STRING(20)^PROMPT=Suppliers Own Id^';
  50.919 -
  50.920 -
  50.921 -PROMPT Creating &VIEW_MULTI_ADD VIEW
  50.922 -CREATE OR REPLACE FORCE VIEW &VIEW_MULTI_ADD AS
  50.923 -SELECT s.supplier_id                    supplier_id,
  50.924 -       s.address_id                     address_id,
  50.925 -       s.valid_from                     valid_from,
  50.926 -       s.valid_to                       valid_to
  50.927 -FROM  supplier_info_address_tab s
  50.928 -WHERE  EXISTS
  50.929 -   (SELECT 1
  50.930 -    FROM   identity_pay_info_tab     p,
  50.931 -           identity_invoice_info_tab i
  50.932 -    WHERE  p.identity   = s.supplier_id
  50.933 -    AND    p.party_type = 'SUPPLIER'
  50.934 -    AND EXISTS
  50.935 -       (SELECT * FROM company_finance_auth1 a WHERE p.company = a.company)
  50.936 -    AND    i.company    = p.company
  50.937 -    AND    i.identity   = p.identity
  50.938 -    AND    i.party_type = p.party_type)
  50.939 -WITH read only;
  50.940 -
  50.941 -COMMENT ON TABLE &VIEW_MULTI_ADD
  50.942 -   IS 'LU=&LU^PROMPT=Invoice Ledger Item^MODULE=&MODULE^';
  50.943 -
  50.944 -COMMENT ON COLUMN &VIEW_MULTI_ADD..supplier_id
  50.945 -   IS 'FLAGS=PMI-L^DATATYPE=STRING(20)/UPPERCASE^PROMPT=Supplier Id^';
  50.946 -COMMENT ON COLUMN &VIEW_MULTI_ADD..address_id
  50.947 -   IS 'FLAGS=KMI-L^DATATYPE=STRING(50)/UPPERCASE^PROMPT=Address Id^';
  50.948 -COMMENT ON COLUMN &VIEW_MULTI_ADD..valid_from
  50.949 -   IS 'FLAGS=A-IUL^DATATYPE=DATE/DATE^PROMPT=Valid From^';
  50.950 -COMMENT ON COLUMN &VIEW_MULTI_ADD..valid_to
  50.951 -   IS 'FLAGS=A-IUL^DATATYPE=DATE/DATE^PROMPT=Valid To^';
  50.952 -
  50.953 ------------------------------------------------------------------------------
  50.954 --------------------- PACKAGES FOR METHODS -----------------------------------
  50.955 ------------------------------------------------------------------------------
  50.956 -
  50.957 -PROMPT Creating &PKG implementation
  50.958 -
  50.959 -CREATE OR REPLACE PACKAGE BODY &PKG IS
  50.960 -
  50.961 ------------------------------------------------------------------------------
  50.962 --------------------- LU SPECIFIC IMPLEMENTATION METHOD DECLARATIONS ---------
  50.963 ------------------------------------------------------------------------------
  50.964 -PROCEDURE Save_Identity_Notes___ (
  50.965 -   attr_       IN VARCHAR2,
  50.966 -   newrec_     IN &TABLE%ROWTYPE );
  50.967 -
  50.968 -FUNCTION Get_Next_Format_No___ (
  50.969 -   company_       IN VARCHAR2 ) RETURN NUMBER;
  50.970 -
  50.971 -PROCEDURE Check_Cascade___ (
  50.972 -   company_       IN VARCHAR2,
  50.973 -   identity_      IN VARCHAR2,
  50.974 -   party_type_db_ IN VARCHAR2 );
  50.975 -
  50.976 -PROCEDURE Import___ (
  50.977 -   crecomp_rec_ IN ENTERP_COMP_CONNECT_V160_API.Crecomp_Lu_Public_Rec );
  50.978 -
  50.979 -PROCEDURE Copy___ (
  50.980 -   crecomp_rec_   IN ENTERP_COMP_CONNECT_V160_API.Crecomp_Lu_Public_Rec );
  50.981 -
  50.982 -PROCEDURE Export___ (
  50.983 -   crecomp_rec_   IN ENTERP_COMP_CONNECT_V160_API.Crecomp_Lu_Public_Rec );
  50.984 -
  50.985 -PROCEDURE User_Allowed___(
  50.986 -   company_   IN VARCHAR2);
  50.987 -
  50.988 -
  50.989 -
  50.990 -
  50.991 -
  50.992 ------------------------------------------------------------------------------
  50.993 --------------------- IMPLEMENTATION BASE METHODS ----------------------------
  50.994 ------------------------------------------------------------------------------
  50.995 --- Lock_By_Id___
  50.996 ---    Client-support to lock a specific instance of the logical unit.
  50.997 ---
  50.998 --- Lock_By_Keys___
  50.999 ---    Server support to lock a specific instance of the logical unit.
 50.1000 ---
 50.1001 --- Get_Object_By_Id___
 50.1002 ---    Get LU-record from the database with a specified object identity.
 50.1003 ---
 50.1004 --- Get_Object_By_Keys___
 50.1005 ---    Get LU-record from the database with specified key columns.
 50.1006 ---
 50.1007 --- Check_Exist___
 50.1008 ---    Check if a specific LU-instance already exist in the database.
 50.1009 ---
 50.1010 --- Get_Id_Version_By_Keys___
 50.1011 ---    Get the current OBJID and OBJVERSION for a specific LU-instance.
 50.1012 ------------------------------------------------------------------------------
 50.1013 -
 50.1014 -FUNCTION Lock_By_Id___ (
 50.1015 -   objid_      IN VARCHAR2,
 50.1016 -   objversion_ IN VARCHAR2 ) RETURN &TABLE%ROWTYPE
 50.1017 -IS
 50.1018 -   row_changed EXCEPTION;
 50.1019 -   row_deleted EXCEPTION;
 50.1020 -   row_locked  EXCEPTION;
 50.1021 -   PRAGMA      exception_init(row_locked, -0054);
 50.1022 -   rec_        &TABLE%ROWTYPE;
 50.1023 -   dummy_      NUMBER;
 50.1024 -   CURSOR lock_control IS
 50.1025 -      SELECT *
 50.1026 -      FROM   &TABLE
 50.1027 -      WHERE  &OBJID = objid_
 50.1028 -      AND    &OBJVERSION = objversion_
 50.1029 -      FOR UPDATE NOWAIT;
 50.1030 -   CURSOR exist_control IS
 50.1031 -      SELECT 1
 50.1032 -      FROM   &TABLE
 50.1033 -      WHERE  &OBJID = objid_;
 50.1034 -BEGIN
 50.1035 -   OPEN lock_control;
 50.1036 -   FETCH lock_control INTO rec_;
 50.1037 -   IF (lock_control%FOUND) THEN
 50.1038 -      CLOSE lock_control;
 50.1039 -      RETURN rec_;
 50.1040 -   END IF;
 50.1041 -   CLOSE lock_control;
 50.1042 -   OPEN exist_control;
 50.1043 -   FETCH exist_control INTO dummy_;
 50.1044 -   IF (exist_control%FOUND) THEN
 50.1045 -      CLOSE exist_control;
 50.1046 -      RAISE row_changed;
 50.1047 -   ELSE
 50.1048 -      CLOSE exist_control;
 50.1049 -      RAISE row_deleted;
 50.1050 -   END IF;
 50.1051 -EXCEPTION
 50.1052 -   WHEN row_locked THEN
 50.1053 -      Error_SYS.Record_Locked(lu_name_);
 50.1054 -   WHEN row_changed THEN
 50.1055 -      Error_SYS.Record_Modified(lu_name_);
 50.1056 -   WHEN row_deleted THEN
 50.1057 -      Error_SYS.Record_Removed(lu_name_);
 50.1058 -END Lock_By_Id___;
 50.1059 -
 50.1060 -FUNCTION Lock_By_Keys___ (
 50.1061 -   company_       IN VARCHAR2,
 50.1062 -   identity_      IN VARCHAR2,
 50.1063 -   party_type_db_ IN VARCHAR2 ) RETURN &TABLE%ROWTYPE
 50.1064 -IS
 50.1065 -   row_deleted EXCEPTION;
 50.1066 -   rec_        &TABLE%ROWTYPE;
 50.1067 -   CURSOR lock_control IS
 50.1068 -      SELECT *
 50.1069 -      FROM  &TABLE
 50.1070 -      WHERE company = company_
 50.1071 -      AND   identity = identity_
 50.1072 -      AND   party_type = party_type_db_
 50.1073 -      FOR UPDATE;
 50.1074 -BEGIN
 50.1075 -   OPEN lock_control;
 50.1076 -   FETCH lock_control INTO rec_;
 50.1077 -   IF (lock_control%FOUND) THEN
 50.1078 -      CLOSE lock_control;
 50.1079 -      RETURN rec_;
 50.1080 -   ELSE
 50.1081 -      CLOSE lock_control;
 50.1082 -      RAISE row_deleted;
 50.1083 -   END IF;
 50.1084 -EXCEPTION
 50.1085 -   WHEN row_deleted THEN
 50.1086 -      Error_SYS.Record_Removed(lu_name_);
 50.1087 -END Lock_By_Keys___;
 50.1088 -
 50.1089 -FUNCTION Get_Object_By_Id___ (
 50.1090 -   objid_ IN VARCHAR2 ) RETURN &TABLE%ROWTYPE
 50.1091 -IS
 50.1092 -   lu_rec_ &TABLE%ROWTYPE;
 50.1093 -   CURSOR getrec IS
 50.1094 -      SELECT *
 50.1095 -      FROM   &TABLE
 50.1096 -      WHERE  &OBJID = objid_;
 50.1097 -BEGIN
 50.1098 -   OPEN getrec;
 50.1099 -   FETCH getrec INTO lu_rec_;
 50.1100 -   IF (getrec%NOTFOUND) THEN
 50.1101 -      CLOSE getrec;
 50.1102 -      Error_SYS.Record_Removed(lu_name_);
 50.1103 -   END IF;
 50.1104 -   CLOSE getrec;
 50.1105 -   RETURN(lu_rec_);
 50.1106 -END Get_Object_By_Id___;
 50.1107 -
 50.1108 -FUNCTION Get_Object_By_Keys___ (
 50.1109 -   company_       IN VARCHAR2,
 50.1110 -   identity_      IN VARCHAR2,
 50.1111 -   party_type_db_ IN VARCHAR2 ) RETURN &TABLE%ROWTYPE
 50.1112 -IS
 50.1113 -   lu_rec_ &TABLE%ROWTYPE;
 50.1114 -   CURSOR getrec IS
 50.1115 -      SELECT *
 50.1116 -      FROM  &TABLE
 50.1117 -      WHERE company = company_
 50.1118 -      AND   identity = identity_
 50.1119 -      AND   party_type = party_type_db_;
 50.1120 -BEGIN
 50.1121 -   OPEN getrec;
 50.1122 -   FETCH getrec INTO lu_rec_;
 50.1123 -   CLOSE getrec;
 50.1124 -   RETURN(lu_rec_);
 50.1125 -END Get_Object_By_Keys___;
 50.1126 -
 50.1127 -FUNCTION Check_Exist___ (
 50.1128 -   company_       IN VARCHAR2,
 50.1129 -   identity_      IN VARCHAR2,
 50.1130 -   party_type_db_ IN VARCHAR2 ) RETURN BOOLEAN
 50.1131 -IS
 50.1132 -   dummy_ NUMBER;
 50.1133 -   CURSOR exist_control IS
 50.1134 -      SELECT 1
 50.1135 -      FROM   &TABLE
 50.1136 -      WHERE company = company_
 50.1137 -      AND   identity = identity_
 50.1138 -      AND   party_type = party_type_db_;
 50.1139 -BEGIN
 50.1140 -   OPEN exist_control;
 50.1141 -   FETCH exist_control INTO dummy_;
 50.1142 -   IF (exist_control%FOUND) THEN
 50.1143 -      CLOSE exist_control;
 50.1144 -      RETURN(TRUE);
 50.1145 -   END IF;
 50.1146 -   CLOSE exist_control;
 50.1147 -   RETURN(FALSE);
 50.1148 -END Check_Exist___;
 50.1149 -
 50.1150 -PROCEDURE Get_Id_Version_By_Keys___ (
 50.1151 -   objid_         IN OUT VARCHAR2,
 50.1152 -   objversion_    IN OUT VARCHAR2,
 50.1153 -   company_       IN     VARCHAR2,
 50.1154 -   identity_      IN     VARCHAR2,
 50.1155 -   party_type_db_ IN     VARCHAR2)
 50.1156 -IS
 50.1157 -   CURSOR get_version IS
 50.1158 -      SELECT &OBJID, &OBJVERSION
 50.1159 -      FROM  &TABLE
 50.1160 -      WHERE company = company_
 50.1161 -      AND   identity = identity_
 50.1162 -      AND   party_type = party_type_db_;
 50.1163 -BEGIN
 50.1164 -   OPEN get_version;
 50.1165 -   FETCH get_version INTO objid_, objversion_;
 50.1166 -   CLOSE get_version;
 50.1167 -END Get_Id_Version_By_Keys___;
 50.1168 -
 50.1169 ------------------------------------------------------------------------------
 50.1170 --------------------- IMPLEMENTATION BASE METHODS FOR INSERT -----------------
 50.1171 ------------------------------------------------------------------------------
 50.1172 --- Prepare_Insert___
 50.1173 ---    Set all default values for a new instance (ON-NEW-RECORD) of this
 50.1174 ---    logical unit by calling procedure Add_Attr.
 50.1175 ---
 50.1176 --- Unpack_Check_Insert___
 50.1177 ---    Unpack the attribute list, check all attributes from the client
 50.1178 ---    and generate all default values before creation of the new object.
 50.1179 ---
 50.1180 --- Insert___
 50.1181 ---    Insert a new LU-instance into the database and return the values
 50.1182 ---    for OBJID and OBJVERSION.
 50.1183 ------------------------------------------------------------------------------
 50.1184 -
 50.1185 -PROCEDURE Prepare_Insert___ (
 50.1186 -   attr_ IN OUT VARCHAR2 )
 50.1187 -IS
 50.1188 -   company_             &TABLE..company%TYPE;
 50.1189 -   identity_            &TABLE..identity%TYPE;
 50.1190 -   party_type_          &VIEW..party_type%TYPE;
 50.1191 -   template_id_         &VIEW..template_id%TYPE;
 50.1192 -BEGIN
 50.1193 -
 50.1194 -   company_       := Client_SYS.Get_Item_Value('COMPANY',attr_);
 50.1195 -   identity_      := Client_SYS.Get_Item_Value('IDENTITY',attr_);
 50.1196 -   party_type_    := Client_SYS.Get_Item_Value('PARTY_TYPE',attr_);
 50.1197 -   template_id_   := Confirmation_Stmnt_Templ_API.Get_Default_Template(company_);
 50.1198 -
 50.1199 -   Client_SYS.Clear_Attr(attr_);
 50.1200 -
 50.1201 ---          Default value 'No Advice'
 50.1202 -   Client_SYS.Add_To_Attr('PAYMENT_ADVICE', PAYMENT_ADVICE_API.DECODE('1'),attr_);
 50.1203 -
 50.1204 -   IF (party_type_ = Party_Type_API.Decode('CUSTOMER')) THEN
 50.1205 -      Client_SYS.Add_To_Attr('REMINDER_TEMPLATE', Reminder_Template_API.Get_Default_Template(company_), attr_);
 50.1206 -      Client_SYS.Add_To_Attr('SEND_REMINDER_TO_PAYER', 'FALSE', attr_);
 50.1207 -      Client_SYS.Add_To_Attr('SEND_INTEREST_INV_TO_PAYER', 'FALSE', attr_);
 50.1208 -      Client_SYS.Add_To_Attr('PAYMENT_RECEIPT_TYPE', Payment_Receipt_Type_API.Decode('NO_RECEIPT'), attr_);
 50.1209 -   ELSIF (party_type_ = Party_Type_API.Decode('SUPPLIER') ) THEN
 50.1210 -      Client_SYS.Add_To_Attr('BLOCKED_FOR_PAYMENT', 'FALSE', attr_);
 50.1211 -      Client_SYS.Add_To_Attr('CHECK_RECIPIENT', Check_Recipient_API.Decode('PAYEE'), attr_);
 50.1212 -   END IF;
 50.1213 -   Client_SYS.Add_To_Attr('INTEREST_TEMPLATE', Interest_Template_API.Get_Default_Template(company_), attr_);
 50.1214 -   Client_SYS.Add_To_Attr('NETTING_ALLOWED', 'FALSE', attr_);
 50.1215 -   Client_SYS.Add_To_Attr('TEMPLATE_ID', template_id_, attr_);
 50.1216 -   Client_SYS.Add_To_Attr('SEND_STATEMENT_OF_ACC_TO_PAYER', 'FALSE', attr_);
 50.1217 -END Prepare_Insert___;
 50.1218 -
 50.1219 -
 50.1220 -PROCEDURE Unpack_Check_Insert___ (
 50.1221 -   attr_   IN OUT VARCHAR2,
 50.1222 -   newrec_ IN OUT &TABLE%ROWTYPE )
 50.1223 -IS
 50.1224 -   ptr_   NUMBER;
 50.1225 -   name_  VARCHAR2(30);
 50.1226 -   value_ VARCHAR2(2000);
 50.1227 -BEGIN
 50.1228 -   ptr_ := NULL;
 50.1229 -   WHILE (Client_SYS.Get_Next_From_Attr(attr_, ptr_, name_, value_)) LOOP
 50.1230 -      IF (name_ = 'COMPANY') THEN
 50.1231 -         newrec_.company := value_;
 50.1232 -         Company_API.Exist(newrec_.company);
 50.1233 - 	 User_Allowed___(newrec_.company);
 50.1234 -      ELSIF (name_ = 'IDENTITY') THEN
 50.1235 -         newrec_.identity := value_;
 50.1236 -      ELSIF (name_ = 'PARTY_TYPE') THEN
 50.1237 -         newrec_.party_type := Party_Type_API.Encode(value_);
 50.1238 -         Payment_Library_API.Exist_In_Enterp(newrec_.company, newrec_.identity, value_);
 50.1239 -         IF (newrec_.party_type <> 'COMPANY') THEN
 50.1240 -            Identity_Invoice_Info_API.Exist(newrec_.company, newrec_.identity, value_);
 50.1241 -         END IF;
 50.1242 -      ELSIF (name_ = 'PARTY_TYPE_DB') THEN
 50.1243 -         newrec_.party_type := value_;
 50.1244 -         Payment_Library_API.Exist_In_Enterp(newrec_.company, newrec_.identity, Party_Type_API.Decode(newrec_.party_type));
 50.1245 -         IF (newrec_.party_type <> Party_Type_API.Decode('COMPANY')) THEN
 50.1246 -            Identity_Invoice_Info_API.Exist_Db(newrec_.company, newrec_.identity, value_);
 50.1247 -         END IF;
 50.1248 -      ELSIF (name_ = 'PRIORITY') THEN
 50.1249 -         newrec_.priority := Client_SYS.Attr_Value_To_Number(value_);
 50.1250 -      ELSIF (name_ = 'BLOCKED_FOR_PAYMENT') THEN
 50.1251 -         newrec_.blocked_for_payment := value_;
 50.1252 -         IF (value_ IS NOT NULL AND newrec_.blocked_for_payment NOT IN ('TRUE', 'FALSE')) THEN
 50.1253 -            RAISE value_error;
 50.1254 -         END IF;
 50.1255 -      ELSIF (name_ = 'OTHER_PAYEE_IDENTITY') THEN
 50.1256 -         newrec_.other_payee_identity := value_;
 50.1257 -         IF (value_ IS NOT NULL) THEN
 50.1258 -            Identity_Pay_Info_API.Exist(newrec_.company, newrec_.other_payee_identity, Party_Type_API.Decode(newrec_.party_type));
 50.1259 -         END IF;
 50.1260 -      ELSIF (name_ = 'INTEREST_TEMPLATE') THEN
 50.1261 -         newrec_.interest_template := value_;
 50.1262 -         IF (value_ IS NOT NULL) THEN
 50.1263 -            Interest_Template_API.Exist(newrec_.company, newrec_.interest_template);
 50.1264 -         END IF;
 50.1265 -      ELSIF (name_ = 'REMINDER_TEMPLATE') THEN
 50.1266 -         newrec_.reminder_template := value_;
 50.1267 -         IF (value_ IS NOT NULL) THEN
 50.1268 -            Reminder_Template_API.Exist(newrec_.company, newrec_.reminder_template);
 50.1269 -         END IF;
 50.1270 -      ELSIF (name_ = 'PAYMENT_DELAY') THEN
 50.1271 -         newrec_.payment_delay := Client_SYS.Attr_Value_To_Number(value_);
 50.1272 -         IF (TRUNC(newrec_.payment_delay) <> newrec_.payment_delay) THEN
 50.1273 -            Error_SYS.Record_General(lu_name_, 'NOTWHOLENUM: A whole number must be specified for the payment delay.');
 50.1274 -         END IF;
 50.1275 -      ELSIF (name_ = 'AMOUNT_TOLERANCE') THEN
 50.1276 -         newrec_.amount_tolerance := Client_SYS.Attr_Value_To_Number(value_);
 50.1277 -      ELSIF (name_ = 'PERCENT_TOLERANCE') THEN
 50.1278 -         newrec_.percent_tolerance := Client_SYS.Attr_Value_To_Number(value_);
 50.1279 -      ELSIF (name_ = 'DISC_DAYS_TOLERANCE') THEN
 50.1280 -         newrec_.disc_days_tolerance := Client_SYS.Attr_Value_To_Number(value_);
 50.1281 -      ELSIF (name_ = 'NETTING_ALLOWED') THEN
 50.1282 -         newrec_.netting_allowed := value_;
 50.1283 -         IF (newrec_.netting_allowed NOT IN ('TRUE', 'FALSE')) THEN
 50.1284 -            RAISE value_error;
 50.1285 -         END IF;
 50.1286 -      ELSIF (name_ = 'FORMAT_NO') THEN
 50.1287 -         newrec_.format_no := Client_SYS.Attr_Value_To_Number(value_);
 50.1288 -      ELSIF (name_ = 'PAYMENT_ADVICE') THEN
 50.1289 -         newrec_.payment_advice := Payment_Advice_API.Encode(value_);
 50.1290 -         IF (value_ IS NOT NULL) THEN
 50.1291 -            Payment_Advice_API.Exist(value_);
 50.1292 -         END IF;
 50.1293 -      ELSIF (name_ = 'PAYMENT_ADVICE_DB') THEN
 50.1294 -         newrec_.payment_advice := value_;
 50.1295 -         IF (value_ IS NOT NULL) THEN
 50.1296 -            Payment_Advice_API.Exist_Db(value_);
 50.1297 -         END IF;
 50.1298 -      ELSIF (name_ = 'DEDUCTION_GROUP') THEN
 50.1299 -         newrec_.deduction_group := value_;
 50.1300 -         IF (value_ IS NOT NULL) THEN
 50.1301 -            Deduction_Group_API.Exist(newrec_.company, newrec_.deduction_group);
 50.1302 -         END IF;
 50.1303 -      ELSIF (name_ = 'CORPORATION_ID') THEN
 50.1304 -         newrec_.corporation_id := value_;
 50.1305 -      ELSIF (name_ = 'MEMBER_ID') THEN
 50.1306 -         newrec_.member_id := value_;
 50.1307 -      ELSIF (name_ = 'SEND_REMINDER_TO_PAYER') THEN
 50.1308 -         newrec_.send_reminder_to_payer := value_;
 50.1309 -      ELSIF (name_ = 'SEND_INTEREST_INV_TO_PAYER') THEN
 50.1310 -         newrec_.send_interest_inv_to_payer := value_;
 50.1311 -      ELSIF (name_ = 'RULE_ID') THEN
 50.1312 -         newrec_.rule_id := value_;
 50.1313 -         IF (value_ IS NOT NULL) THEN
 50.1314 -            Pay_Method_Rule_API.Exist(newrec_.company, newrec_.rule_id);
 50.1315 -         END IF;
 50.1316 -      ELSIF (name_ = 'PAYMENT_RECEIPT_TYPE') THEN
 50.1317 -         newrec_.payment_receipt_type := Payment_Receipt_Type_API.Encode(value_);
 50.1318 -         IF (value_ IS NOT NULL) THEN
 50.1319 -            Payment_Receipt_Type_API.Exist(value_);
 50.1320 -         END IF;
 50.1321 -      ELSIF (name_ = 'PAYMENT_RECEIPT_TYPE_DB') THEN
 50.1322 -         newrec_.payment_receipt_type := value_;
 50.1323 -         IF (value_ IS NOT NULL) THEN
 50.1324 -            Payment_Receipt_Type_API.Exist_Db(value_);
 50.1325 -         END IF;
 50.1326 -      ELSIF (name_ = 'TEMPLATE_ID') THEN
 50.1327 -         newrec_.template_id := value_;
 50.1328 -         IF (value_ IS NOT NULL) THEN
 50.1329 -            Confirmation_Stmnt_Templ_API.Exist(newrec_.company, newrec_.template_id);
 50.1330 -         END IF;
 50.1331 -      ELSIF (name_ = 'CHECK_RECIPIENT') THEN
 50.1332 -         newrec_.check_recipient := Check_Recipient_API.Encode(value_);
 50.1333 -         IF (value_ IS NOT NULL) THEN
 50.1334 -            Check_Recipient_API.Exist(value_);
 50.1335 -         END IF;
 50.1336 -      ELSIF (name_ = 'CHECK_RECIPIENT_DB') THEN
 50.1337 -         newrec_.check_recipient := value_;
 50.1338 -         IF (value_ IS NOT NULL) THEN
 50.1339 -            Check_Recipient_API.Exist_Db(value_);
 50.1340 -         END IF;
 50.1341 -      ELSIF (name_ = 'SEND_STATEMENT_OF_ACC_TO_PAYER') THEN
 50.1342 -         newrec_.send_statement_of_acc_to_payer := value_;
 50.1343 -      ELSE
 50.1344 -         Error_SYS.Item_Not_Exist(lu_name_, name_, value_);
 50.1345 -      END IF;
 50.1346 -   END LOOP;
 50.1347 -
 50.1348 -
 50.1349 -   IF (newrec_.amount_tolerance < 0) OR (newrec_.percent_tolerance < 0) OR (newrec_.disc_days_tolerance < 0) THEN
 50.1350 -      Error_SYS.Appl_General(lu_name_, 'NEGTOLERANCE: Tolerance should be positive value.');
 50.1351 -   END IF;
 50.1352 -
 50.1353 -
 50.1354 -   Client_SYS.Clear_Attr(attr_);
 50.1355 -
 50.1356 -   Error_SYS.Check_Not_Null(lu_name_, 'COMPANY', newrec_.company);
 50.1357 -   Error_SYS.Check_Not_Null(lu_name_, 'IDENTITY', newrec_.identity);
 50.1358 -   Error_SYS.Check_Not_Null(lu_name_, 'PARTY_TYPE', newrec_.party_type);
 50.1359 -   Error_SYS.Check_Not_Null(lu_name_, 'NETTING_ALLOWED', newrec_.netting_allowed);
 50.1360 -
 50.1361 -   IF (newrec_.interest_template IS NULL) THEN
 50.1362 -      newrec_.interest_template := Interest_Template_API.Get_Default_Template(newrec_.company);
 50.1363 -   END IF;
 50.1364 -
 50.1365 -   IF (newrec_.party_type = 'SUPPLIER') THEN
 50.1366 -      Error_SYS.Check_Not_Null(lu_name_, 'PRIORITY', newrec_.priority);
 50.1367 -      Error_SYS.Check_Not_Null(lu_name_, 'BLOCKED_FOR_PAYMENT', newrec_.blocked_for_payment);
 50.1368 -      Error_SYS.Check_Not_Null(lu_name_, 'CHECK_RECIPIENT', newrec_.check_recipient);
 50.1369 -   END IF;
 50.1370 -   IF (newrec_.party_type = 'CUSTOMER') THEN
 50.1371 -      Error_SYS.Check_Not_Null(lu_name_, 'INTEREST_TEMPLATE', newrec_.interest_template);
 50.1372 -      Error_SYS.Check_Not_Null(lu_name_, 'REMINDER_TEMPLATE', newrec_.reminder_template);
 50.1373 -      Error_SYS.Check_Not_Null(lu_name_, 'PAYMENT_RECEIPT_TYPE', newrec_.payment_receipt_type);
 50.1374 -      IF Company_Invoice_Info_API.Get_Use_Tax_Invoice(newrec_.company)='TRUE' AND newrec_.payment_receipt_type != 'AT_MATCHING' THEN
 50.1375 -         Error_SYS.Record_General(lu_name_, 'WRONGPAYRECTYPE: Only Receipt At Matching is allowed when Tax Invoice for company is used.');
 50.1376 -      END IF;
 50.1377 -   END IF;
 50.1378 -
 50.1379 -   Error_SYS.Check_Not_Null(lu_name_, 'IDENTITY', newrec_.identity);
 50.1380 -
 50.1381 -   IF (newrec_.identity = newrec_.other_payee_identity) THEN
 50.1382 -      Error_SYS.Record_General(lu_name_, 'SAMEPARTY: Other Payee cannot refer to itself.');
 50.1383 -   END IF;
 50.1384 -
 50.1385 -EXCEPTION
 50.1386 -   WHEN value_error THEN
 50.1387 -      Error_SYS.Item_Format(lu_name_, name_, value_);
 50.1388 -END Unpack_Check_Insert___;
 50.1389 -
 50.1390 -
 50.1391 -PROCEDURE Insert___ (
 50.1392 -   objid_      OUT    VARCHAR2,
 50.1393 -   objversion_ OUT    VARCHAR2,
 50.1394 -   newrec_     IN OUT &TABLE%ROWTYPE,
 50.1395 -   attr_       IN OUT VARCHAR2 )
 50.1396 -IS
 50.1397 -   CURSOR get_objid IS
 50.1398 -      SELECT &OBJID
 50.1399 -      FROM  &TABLE
 50.1400 -      WHERE company = newrec_.company
 50.1401 -      AND   identity = newrec_.identity
 50.1402 -      AND   party_type = newrec_.party_type;
 50.1403 -BEGIN
 50.1404 -   newrec_.format_no := Get_Next_Format_No___ (newrec_.company);
 50.1405 -   newrec_.rowversion := 1;
 50.1406 -   objversion_ := to_char(newrec_.rowversion);
 50.1407 -   INSERT
 50.1408 -      INTO identity_pay_info_tab (
 50.1409 -         company,
 50.1410 -         identity,
 50.1411 -         party_type,
 50.1412 -         priority,
 50.1413 -         blocked_for_payment,
 50.1414 -         other_payee_identity,
 50.1415 -         interest_template,
 50.1416 -         reminder_template,
 50.1417 -         payment_delay,
 50.1418 -         amount_tolerance,
 50.1419 -         percent_tolerance,
 50.1420 -         disc_days_tolerance,
 50.1421 -         netting_allowed,
 50.1422 -         format_no,
 50.1423 -         payment_advice,
 50.1424 -         deduction_group,
 50.1425 -         corporation_id,
 50.1426 -         member_id,
 50.1427 -         send_reminder_to_payer,
 50.1428 -         send_interest_inv_to_payer,
 50.1429 -         rule_id,
 50.1430 -         next_payment_matching_id,
 50.1431 -         payment_receipt_type,
 50.1432 -         template_id,
 50.1433 -         check_recipient,
 50.1434 -         send_statement_of_acc_to_payer,
 50.1435 -         rowversion)
 50.1436 -      VALUES (
 50.1437 -         newrec_.company,
 50.1438 -         newrec_.identity,
 50.1439 -         newrec_.party_type,
 50.1440 -         newrec_.priority,
 50.1441 -         newrec_.blocked_for_payment,
 50.1442 -         newrec_.other_payee_identity,
 50.1443 -         newrec_.interest_template,
 50.1444 -         newrec_.reminder_template,
 50.1445 -         newrec_.payment_delay,
 50.1446 -         newrec_.amount_tolerance,
 50.1447 -         newrec_.percent_tolerance,
 50.1448 -         newrec_.disc_days_tolerance,
 50.1449 -         newrec_.netting_allowed,
 50.1450 -         newrec_.format_no,
 50.1451 -         newrec_.payment_advice,
 50.1452 -         newrec_.deduction_group,
 50.1453 -         newrec_.corporation_id,
 50.1454 -         newrec_.member_id,
 50.1455 -         newrec_.send_reminder_to_payer,
 50.1456 -         newrec_.send_interest_inv_to_payer,
 50.1457 -         newrec_.rule_id,
 50.1458 -         0,
 50.1459 -         newrec_.payment_receipt_type,
 50.1460 -         newrec_.template_id,
 50.1461 -         newrec_.check_recipient,
 50.1462 -         newrec_.send_statement_of_acc_to_payer,
 50.1463 -         newrec_.rowversion)
 50.1464 -      RETURNING &OBJID INTO objid_;
 50.1465 -EXCEPTION
 50.1466 -   WHEN dup_val_on_index THEN
 50.1467 -      Error_SYS.Record_General(lu_name_, 'PARTYTYPEIDNOTEXIST: :P1 already exists in the Payment module.',
 50.1468 -      Party_Type_API.Decode(newrec_.party_type));
 50.1469 -END Insert___;
 50.1470 -
 50.1471 ------------------------------------------------------------------------------
 50.1472 --------------------- IMPLEMENTATION BASE METHODS FOR UPDATE -----------------
 50.1473 ------------------------------------------------------------------------------
 50.1474 --- Unpack_Check_Update___
 50.1475 ---    Unpack the attribute list, check all attributes from the client
 50.1476 ---    and generate all default values before modifying the object.
 50.1477 ---
 50.1478 --- Update___
 50.1479 ---    Update an existing LU-instance in the database and return the
 50.1480 ---    the new OBJVERSION.
 50.1481 ------------------------------------------------------------------------------
 50.1482 -
 50.1483 -PROCEDURE Unpack_Check_Update___ (
 50.1484 -   attr_   IN OUT VARCHAR2,
 50.1485 -   newrec_ IN OUT &TABLE%ROWTYPE,
 50.1486 -   objid_  IN     VARCHAR2 )
 50.1487 -IS
 50.1488 -   ptr_   NUMBER;
 50.1489 -   name_  VARCHAR2(30);
 50.1490 -   value_ VARCHAR2(2000);
 50.1491 -BEGIN
 50.1492 -   ptr_ := NULL;
 50.1493 -   WHILE (Client_SYS.Get_Next_From_Attr(attr_, ptr_, name_, value_)) LOOP
 50.1494 -      IF (name_ = 'COMPANY') THEN
 50.1495 -         Error_SYS.Item_Update(lu_name_, 'COMPANY');
 50.1496 -      ELSIF (name_ = 'IDENTITY') THEN
 50.1497 -         Error_SYS.Item_Update(lu_name_, 'IDENTITY');
 50.1498 -      ELSIF (name_ = 'PARTY_TYPE') THEN
 50.1499 -         Error_SYS.Item_Update(lu_name_, 'PARTY_TYPE');
 50.1500 -      ELSIF (name_ = 'PARTY_TYPE_DB') THEN
 50.1501 -         Error_SYS.Item_Update(lu_name_, 'PARTY_TYPE');
 50.1502 -      ELSIF (name_ = 'PRIORITY') THEN
 50.1503 -         newrec_.priority := Client_SYS.Attr_Value_To_Number(value_);
 50.1504 -      ELSIF (name_ = 'BLOCKED_FOR_PAYMENT') THEN
 50.1505 -         newrec_.blocked_for_payment := value_;
 50.1506 -         IF (value_ IS NOT NULL AND newrec_.blocked_for_payment NOT IN ('TRUE', 'FALSE')) THEN
 50.1507 -            RAISE value_error;
 50.1508 -         END IF;
 50.1509 -      ELSIF (name_ = 'OTHER_PAYEE_IDENTITY') THEN
 50.1510 -         newrec_.other_payee_identity := value_;
 50.1511 -         IF (value_ IS NOT NULL) THEN
 50.1512 -            Identity_Pay_Info_API.Exist(newrec_.company, newrec_.other_payee_identity ,Party_Type_API.Decode(newrec_.party_type));
 50.1513 -         END IF;
 50.1514 -      ELSIF (name_ = 'INTEREST_TEMPLATE') THEN
 50.1515 -         newrec_.interest_template := value_;
 50.1516 -         IF (value_ IS NOT NULL) THEN
 50.1517 -            Interest_Template_API.Exist(newrec_.company, newrec_.interest_template);
 50.1518 -         END IF;
 50.1519 -      ELSIF (name_ = 'REMINDER_TEMPLATE') THEN
 50.1520 -         newrec_.reminder_template := value_;
 50.1521 -         IF (value_ IS NOT NULL) THEN
 50.1522 -            Reminder_Template_API.Exist(newrec_.company, newrec_.reminder_template);
 50.1523 -         END IF;
 50.1524 -      ELSIF (name_ = 'PAYMENT_DELAY') THEN
 50.1525 -         newrec_.payment_delay := Client_SYS.Attr_Value_To_Number(value_);
 50.1526 -         IF (TRUNC(newrec_.payment_delay) <> newrec_.payment_delay) THEN
 50.1527 -            Error_SYS.Record_General(lu_name_, 'NOTWHOLENUM: A whole number must be specified for the payment delay.');
 50.1528 -         END IF;
 50.1529 -      ELSIF (name_ = 'AMOUNT_TOLERANCE') THEN
 50.1530 -         newrec_.amount_tolerance := Client_SYS.Attr_Value_To_Number(value_);
 50.1531 -      ELSIF (name_ = 'PERCENT_TOLERANCE') THEN
 50.1532 -         newrec_.percent_tolerance := Client_SYS.Attr_Value_To_Number(value_);
 50.1533 -      ELSIF (name_ = 'DISC_DAYS_TOLERANCE') THEN
 50.1534 -         newrec_.disc_days_tolerance := Client_SYS.Attr_Value_To_Number(value_);
 50.1535 -      ELSIF (name_ = 'NETTING_ALLOWED') THEN
 50.1536 -         newrec_.netting_allowed := value_;
 50.1537 -         IF (newrec_.netting_allowed NOT IN ('TRUE', 'FALSE')) THEN
 50.1538 -            RAISE value_error;
 50.1539 -         END IF;
 50.1540 -      ELSIF (name_ = 'FORMAT_NO') THEN
 50.1541 -         Error_SYS.Item_Update(lu_name_, 'FORMAT_NO');
 50.1542 -      ELSIF (name_ = 'PAYMENT_ADVICE') THEN
 50.1543 -         newrec_.payment_advice := Payment_Advice_API.Encode(value_);
 50.1544 -         IF (value_ IS NOT NULL) THEN
 50.1545 -            Payment_Advice_API.Exist(value_);
 50.1546 -         END IF;
 50.1547 -      ELSIF (name_ = 'PAYMENT_ADVICE_DB') THEN
 50.1548 -         newrec_.payment_advice := value_;
 50.1549 -         IF (value_ IS NOT NULL) THEN
 50.1550 -            Payment_Advice_API.Exist_Db(value_);
 50.1551 -         END IF;
 50.1552 -      ELSIF (name_ = 'DEDUCTION_GROUP') THEN
 50.1553 -         newrec_.deduction_group := value_;
 50.1554 -         IF (value_ IS NOT NULL) THEN
 50.1555 -            Deduction_Group_API.Exist(newrec_.company, newrec_.deduction_group);
 50.1556 -         END IF;
 50.1557 -      ELSIF (name_ = 'CORPORATION_ID') THEN
 50.1558 -         newrec_.corporation_id := value_;
 50.1559 -      ELSIF (name_ = 'MEMBER_ID') THEN
 50.1560 -         newrec_.member_id := value_;
 50.1561 -      ELSIF (name_ = 'SEND_REMINDER_TO_PAYER') THEN
 50.1562 -         newrec_.send_reminder_to_payer := value_;
 50.1563 -      ELSIF (name_ = 'SEND_INTEREST_INV_TO_PAYER') THEN
 50.1564 -         newrec_.send_interest_inv_to_payer := value_;
 50.1565 -      ELSIF (name_ = 'NOTE') THEN
 50.1566 -         NULL;
 50.1567 -      ELSIF (name_ = 'NOTE_UPDATE') THEN
 50.1568 -         NULL;
 50.1569 -      ELSIF (name_ = 'RULE_ID') THEN
 50.1570 -         newrec_.rule_id := value_;
 50.1571 -         IF (value_ IS NOT NULL) THEN
 50.1572 -            Pay_Method_Rule_API.Exist(newrec_.company, newrec_.rule_id);
 50.1573 -         END IF;
 50.1574 -      ELSIF (name_ = 'PAYMENT_RECEIPT_TYPE') THEN
 50.1575 -         newrec_.payment_receipt_type := Payment_Receipt_Type_API.Encode(value_);
 50.1576 -         IF (value_ IS NOT NULL) THEN
 50.1577 -            Payment_Receipt_Type_API.Exist(value_);
 50.1578 -         END IF;
 50.1579 -      ELSIF (name_ = 'PAYMENT_RECEIPT_TYPE_DB') THEN
 50.1580 -         newrec_.payment_receipt_type := value_;
 50.1581 -         IF (value_ IS NOT NULL) THEN
 50.1582 -            Payment_Receipt_Type_API.Exist_Db(value_);
 50.1583 -         END IF;
 50.1584 -      ELSIF (name_ = 'TEMPLATE_ID') THEN
 50.1585 -         newrec_.template_id := value_;
 50.1586 -         IF (value_ IS NOT NULL) THEN
 50.1587 -            Confirmation_Stmnt_Templ_API.Exist(newrec_.company, newrec_.template_id);
 50.1588 -         END IF;
 50.1589 -      ELSIF (name_ = 'CHECK_RECIPIENT') THEN
 50.1590 -         newrec_.check_recipient := Check_Recipient_API.Encode(value_);
 50.1591 -         IF (value_ IS NOT NULL) THEN
 50.1592 -            Check_Recipient_API.Exist(value_);
 50.1593 -         END IF;
 50.1594 -      ELSIF (name_ = 'CHECK_RECIPIENT_DB') THEN
 50.1595 -         newrec_.check_recipient := value_;
 50.1596 -         IF (value_ IS NOT NULL) THEN
 50.1597 -            Check_Recipient_API.Exist_Db(value_);
 50.1598 -         END IF;
 50.1599 -      ELSIF (name_ = 'SEND_STATEMENT_OF_ACC_TO_PAYER') THEN
 50.1600 -         newrec_.send_statement_of_acc_to_payer := value_;
 50.1601 -      ELSE
 50.1602 -         Error_SYS.Item_Not_Exist(lu_name_, name_, value_);
 50.1603 -      END IF;
 50.1604 -   END LOOP;
 50.1605 -
 50.1606 -
 50.1607 -   IF (newrec_.amount_tolerance < 0) OR (newrec_.percent_tolerance < 0) OR (newrec_.disc_days_tolerance < 0) THEN
 50.1608 -      Error_SYS.Appl_General(lu_name_, 'NEGTOLERANCE: Tolerance should be positive value.');
 50.1609 -   END IF;
 50.1610 -
 50.1611 -   Client_SYS.Clear_Attr(attr_);
 50.1612 -
 50.1613 -   Error_SYS.Check_Not_Null(lu_name_, 'NETTING_ALLOWED', newrec_.netting_allowed);
 50.1614 -   IF (newrec_.interest_template IS NULL) THEN
 50.1615 -      newrec_.interest_template := Interest_Template_API.Get_Default_Template(newrec_.company);
 50.1616 -   END IF;
 50.1617 -
 50.1618 -   IF (newrec_.party_type = 'SUPPLIER') THEN
 50.1619 -      Error_SYS.Check_Not_Null(lu_name_, 'PRIORITY', newrec_.priority);
 50.1620 -      Error_SYS.Check_Not_Null(lu_name_, 'BLOCKED_FOR_PAYMENT', newrec_.blocked_for_payment);
 50.1621 -      Error_SYS.Check_Not_Null(lu_name_, 'CHECK_RECIPIENT', newrec_.check_recipient);
 50.1622 -   END IF;
 50.1623 -   IF (newrec_.party_type = 'CUSTOMER') THEN
 50.1624 -      Error_SYS.Check_Not_Null(lu_name_, 'INTEREST_TEMPLATE', newrec_.interest_template);
 50.1625 -      Error_SYS.Check_Not_Null(lu_name_, 'REMINDER_TEMPLATE', newrec_.reminder_template);
 50.1626 -      Error_SYS.Check_Not_Null(lu_name_, 'PAYMENT_RECEIPT_TYPE', newrec_.payment_receipt_type);
 50.1627 -      IF Company_Invoice_Info_API.Get_Use_Tax_Invoice(newrec_.company)='TRUE' AND newrec_.payment_receipt_type != 'AT_MATCHING' THEN
 50.1628 -         Error_SYS.Record_General(lu_name_, 'WRONGPAYRECTYPE: Only Receipt At Matching is allowed when Tax Invoice for company is used.');
 50.1629 -      END IF;
 50.1630 -   END IF;
 50.1631 -   IF (newrec_.identity = newrec_.other_payee_identity) THEN
 50.1632 -      Error_SYS.Record_General(lu_name_, 'SAMEPARTY: Other Payee cannot refer to itself.');
 50.1633 -   END IF;
 50.1634 -EXCEPTION
 50.1635 -   WHEN value_error THEN
 50.1636 -      Error_SYS.Item_Format(lu_name_, name_, value_);
 50.1637 -END Unpack_Check_Update___;
 50.1638 -
 50.1639 -
 50.1640 -PROCEDURE Update___ (
 50.1641 -   objid_      IN     VARCHAR2,
 50.1642 -   oldrec_     IN     &TABLE%ROWTYPE,
 50.1643 -   newrec_     IN OUT &TABLE%ROWTYPE,
 50.1644 -   attr_       IN OUT VARCHAR2,
 50.1645 -   objversion_ IN OUT VARCHAR2,
 50.1646 -   by_keys_    IN     BOOLEAN DEFAULT FALSE )
 50.1647 -IS
 50.1648 -BEGIN
 50.1649 -   newrec_.rowversion := newrec_.rowversion + 1;
 50.1650 -   objversion_ := to_char(newrec_.rowversion);
 50.1651 -   IF by_keys_ THEN
 50.1652 -      UPDATE identity_pay_info_tab
 50.1653 -         SET company = newrec_.company,
 50.1654 -             identity = newrec_.identity,
 50.1655 -             party_type = newrec_.party_type,
 50.1656 -             priority = newrec_.priority,
 50.1657 -             blocked_for_payment = newrec_.blocked_for_payment,
 50.1658 -             other_payee_identity = newrec_.other_payee_identity,
 50.1659 -             interest_template = newrec_.interest_template,
 50.1660 -             reminder_template = newrec_.reminder_template,
 50.1661 -             payment_delay = newrec_.payment_delay,
 50.1662 -             amount_tolerance = newrec_.amount_tolerance,
 50.1663 -             percent_tolerance = newrec_.percent_tolerance,
 50.1664 -             disc_days_tolerance = newrec_.disc_days_tolerance,
 50.1665 -             netting_allowed = newrec_.netting_allowed,
 50.1666 -             format_no = newrec_.format_no,
 50.1667 -             payment_advice = newrec_.payment_advice,
 50.1668 -             deduction_group = newrec_.deduction_group,
 50.1669 -             corporation_id = newrec_.corporation_id,
 50.1670 -             member_id = newrec_.member_id,
 50.1671 -             send_reminder_to_payer = newrec_.send_reminder_to_payer,
 50.1672 -             send_interest_inv_to_payer = newrec_.send_interest_inv_to_payer,
 50.1673 -             rule_id = newrec_.rule_id,
 50.1674 -             payment_receipt_type = newrec_.payment_receipt_type,
 50.1675 -             template_id = newrec_.template_id,
 50.1676 -             check_recipient = newrec_.check_recipient,
 50.1677 -             send_statement_of_acc_to_payer = newrec_.send_statement_of_acc_to_payer,
 50.1678 -             rowversion = newrec_.rowversion
 50.1679 -         WHERE company = newrec_.company
 50.1680 -         AND   identity = newrec_.identity
 50.1681 -         AND   party_type = newrec_.party_type;
 50.1682 -   ELSE
 50.1683 -      UPDATE identity_pay_info_tab
 50.1684 -         SET company = newrec_.company,
 50.1685 -             identity = newrec_.identity,
 50.1686 -             party_type = newrec_.party_type,
 50.1687 -             priority = newrec_.priority,
 50.1688 -             blocked_for_payment = newrec_.blocked_for_payment,
 50.1689 -             other_payee_identity = newrec_.other_payee_identity,
 50.1690 -             interest_template = newrec_.interest_template,
 50.1691 -             reminder_template = newrec_.reminder_template,
 50.1692 -             payment_delay = newrec_.payment_delay,
 50.1693 -             amount_tolerance = newrec_.amount_tolerance,
 50.1694 -             percent_tolerance = newrec_.percent_tolerance,
 50.1695 -             disc_days_tolerance = newrec_.disc_days_tolerance,
 50.1696 -             netting_allowed = newrec_.netting_allowed,
 50.1697 -             format_no = newrec_.format_no,
 50.1698 -             payment_advice = newrec_.payment_advice,
 50.1699 -             deduction_group = newrec_.deduction_group,
 50.1700 -             corporation_id = newrec_.corporation_id,
 50.1701 -             member_id = newrec_.member_id,
 50.1702 -             send_reminder_to_payer = newrec_.send_reminder_to_payer,
 50.1703 -             send_interest_inv_to_payer = newrec_.send_interest_inv_to_payer,
 50.1704 -             rule_id = newrec_.rule_id,
 50.1705 -             payment_receipt_type = newrec_.payment_receipt_type,
 50.1706 -             template_id = newrec_.template_id,
 50.1707 -             check_recipient = newrec_.check_recipient,
 50.1708 -             send_statement_of_acc_to_payer = newrec_.send_statement_of_acc_to_payer,
 50.1709 -             rowversion = newrec_.rowversion
 50.1710 -         WHERE &OBJID = objid_;
 50.1711 -   END IF;
 50.1712 -EXCEPTION
 50.1713 -   WHEN dup_val_on_index THEN
 50.1714 -      Error_SYS.Record_Exist(lu_name_);
 50.1715 -END Update___;
 50.1716 -
 50.1717 ------------------------------------------------------------------------------
 50.1718 --------------------- IMPLEMENTATION BASE METHODS FOR DELETE -----------------
 50.1719 ------------------------------------------------------------------------------
 50.1720 --- Check_Delete___
 50.1721 ---    Checks whether a specific LU-record may be removed or not.
 50.1722 ---    The procedure should check business rules like attribute values
 50.1723 ---    as well as database constraints (defined or not).
 50.1724 ---
 50.1725 --- Delete___
 50.1726 ---    Deletion of the specific LU-object from the database.
 50.1727 ------------------------------------------------------------------------------
 50.1728 -
 50.1729 -PROCEDURE Check_Delete___ (
 50.1730 -   remrec_ IN &TABLE%ROWTYPE )
 50.1731 -IS
 50.1732 -   key_ VARCHAR2(2000);
 50.1733 -BEGIN
 50.1734 -   key_ := remrec_.company || '^' || remrec_.identity || '^' || Party_Type_API.Decode(remrec_.party_type) || '^';
 50.1735 -   Reference_SYS.Check_Restricted_Delete(lu_name_, key_);
 50.1736 -END Check_Delete___;
 50.1737 -
 50.1738 -
 50.1739 -PROCEDURE Delete___ (
 50.1740 -   objid_  IN VARCHAR2,
 50.1741 -   remrec_ IN &TABLE%ROWTYPE )
 50.1742 -IS
 50.1743 -   key_ VARCHAR2(2000);
 50.1744 -BEGIN
 50.1745 -   key_ := remrec_.company || '^' || remrec_.identity || '^' || Party_Type_API.Decode(remrec_.party_type) || '^';
 50.1746 -   Reference_SYS.Do_Cascade_Delete(lu_name_, key_);
 50.1747 -   DELETE
 50.1748 -      FROM  identity_pay_info_tab
 50.1749 -      WHERE &OBJID = objid_;
 50.1750 -END Delete___;
 50.1751 -
 50.1752 ------------------------------------------------------------------------------
 50.1753 --------------------- PRIVATE BASE METHODS -----------------------------------
 50.1754 ------------------------------------------------------------------------------
 50.1755 --- Lock__
 50.1756 ---    Client-support to lock a specific instance of the logical unit.
 50.1757 ---
 50.1758 --- New__
 50.1759 ---    Client-support interface to create LU instances.
 50.1760 ---       action_ = 'PREPARE'
 50.1761 ---          Default values and handle of information to client.
 50.1762 ---          The default values are set in procedure Prepare_Insert___.
 50.1763 ---       action_ = 'CHECK'
 50.1764 ---          Check all attributes before creating new object and handle of
 50.1765 ---          information to client. The attribute list is unpacked, checked
 50.1766 ---          and prepared (defaults) in procedure Unpack_Check_Insert___.
 50.1767 ---       action_ = 'DO'
 50.1768 ---          Creation of new instances of the logical unit and handle of
 50.1769 ---          information to client. The attribute list is unpacked, checked
 50.1770 ---          and prepared (defaults) in procedure Unpack_Check_Insert___
 50.1771 ---          before calling procedure Insert___.
 50.1772 ---
 50.1773 --- Modify__
 50.1774 ---    Client-support interface to modify attributes for LU instances.
 50.1775 ---       action_ = 'CHECK'
 50.1776 ---          Check all attributes before modifying an existing object and
 50.1777 ---          handle of information to client. The attribute list is unpacked,
 50.1778 ---          checked and prepared(defaults) in procedure Unpack_Check_Update___.
 50.1779 ---       action_ = 'DO'
 50.1780 ---          Modification of an existing instance of the logical unit. The
 50.1781 ---          procedure unpacks the attributes, checks all values before
 50.1782 ---          procedure Update___ is called.
 50.1783 ---
 50.1784 --- Remove__
 50.1785 ---    Client-support interface to remove LU instances.
 50.1786 ---       action_ = 'CHECK'
 50.1787 ---          Check whether a specific LU-instance may be removed or not.
 50.1788 ---          The procedure fetches the complete record by calling procedure
 50.1789 ---          Get_Object_By_Id___. Then the check is made by calling procedure
 50.1790 ---          Check_Delete___.
 50.1791 ---       action_ = 'DO'
 50.1792 ---          Remove an existing instance of the logical unit. The procedure
 50.1793 ---          fetches the complete LU-record, checks for a delete and then
 50.1794 ---          deletes the record by calling procedure Delete___.
 50.1795 ------------------------------------------------------------------------------
 50.1796 -
 50.1797 -PROCEDURE Lock__ (
 50.1798 -   info_       OUT VARCHAR2,
 50.1799 -   objid_      IN  VARCHAR2,
 50.1800 -   objversion_ IN  VARCHAR2 )
 50.1801 -IS
 50.1802 -   dummy_ &TABLE%ROWTYPE;
 50.1803 -BEGIN
 50.1804 -   General_SYS.Init_Method(lu_name_, '&PKG', 'Lock__');
 50.1805 -   dummy_ := Lock_By_Id___(objid_, objversion_);
 50.1806 -   info_ := Client_SYS.Get_All_Info;
 50.1807 -END Lock__;
 50.1808 -
 50.1809 -
 50.1810 -PROCEDURE New__ (
 50.1811 -   info_       OUT    VARCHAR2,
 50.1812 -   objid_      OUT    VARCHAR2,
 50.1813 -   objversion_ OUT    VARCHAR2,
 50.1814 -   attr_       IN OUT VARCHAR2,
 50.1815 -   action_     IN     VARCHAR2 )
 50.1816 -IS
 50.1817 -   newrec_ &TABLE%ROWTYPE;
 50.1818 -BEGIN
 50.1819 -   General_SYS.Init_Method(lu_name_, '&PKG', 'New__');
 50.1820 -   IF (action_ = 'PREPARE') THEN
 50.1821 -      Prepare_Insert___(attr_);
 50.1822 -   ELSIF (action_ = 'CHECK') THEN
 50.1823 -      Unpack_Check_Insert___(attr_, newrec_);
 50.1824 -   ELSIF (action_ = 'DO') THEN
 50.1825 -      Unpack_Check_Insert___(attr_, newrec_);
 50.1826 -      Insert___(objid_, objversion_, newrec_, attr_);
 50.1827 -   END IF;
 50.1828 -   info_ := Client_SYS.Get_All_Info;
 50.1829 -END New__;
 50.1830 -
 50.1831 -PROCEDURE Modify__ (
 50.1832 -   info_       OUT    VARCHAR2,
 50.1833 -   objid_      IN     VARCHAR2,
 50.1834 -   objversion_ IN OUT VARCHAR2,
 50.1835 -   attr_       IN OUT VARCHAR2,
 50.1836 -   action_     IN     VARCHAR2 )
 50.1837 -IS
 50.1838 -   oldrec_ &TABLE%ROWTYPE;
 50.1839 -   newrec_ &TABLE%ROWTYPE;
 50.1840 -BEGIN
 50.1841 -   General_SYS.Init_Method(lu_name_, '&PKG', 'Modify__');
 50.1842 -   IF (action_ = 'CHECK') THEN
 50.1843 -      newrec_ := Get_Object_By_Id___(objid_);
 50.1844 -      Unpack_Check_Update___(attr_, newrec_, objid_);
 50.1845 -   ELSIF (action_ = 'DO') THEN
 50.1846 -      oldrec_ := Lock_By_Id___(objid_, objversion_);
 50.1847 -      newrec_ := oldrec_;
 50.1848 -
 50.1849 -      Save_Identity_Notes___(attr_, newrec_ );
 50.1850 -
 50.1851 -      Unpack_Check_Update___(attr_, newrec_, objid_);
 50.1852 -      Update___(objid_, oldrec_, newrec_, attr_, objversion_);
 50.1853 -   END IF;
 50.1854 -   info_ := Client_SYS.Get_All_Info;
 50.1855 -END Modify__;
 50.1856 -
 50.1857 -
 50.1858 -PROCEDURE Remove__ (
 50.1859 -   info_       OUT VARCHAR2,
 50.1860 -   objid_      IN  VARCHAR2,
 50.1861 -   objversion_ IN  VARCHAR2,
 50.1862 -   action_     IN  VARCHAR2 )
 50.1863 -IS
 50.1864 -   remrec_ &TABLE%ROWTYPE;
 50.1865 -BEGIN
 50.1866 -   General_SYS.Init_Method(lu_name_, '&PKG', 'Remove__');
 50.1867 -   IF (action_ = 'CHECK') THEN
 50.1868 -      remrec_ := Get_Object_By_Id___(objid_);
 50.1869 -      Check_Delete___(remrec_);
 50.1870 -   ELSIF (action_ = 'DO') THEN
 50.1871 -      remrec_ := Lock_By_Id___(objid_, objversion_);
 50.1872 -      Check_Delete___(remrec_);
 50.1873 -      Delete___(objid_, remrec_);
 50.1874 -   END IF;
 50.1875 -   info_ := Client_SYS.Get_All_Info;
 50.1876 -END Remove__;
 50.1877 -
 50.1878 ------------------------------------------------------------------------------
 50.1879 --------------------- PUBLIC BASE METHODS ------------------------------------
 50.1880 ------------------------------------------------------------------------------
 50.1881 --- Exist
 50.1882 ---   Checks if given pointer (e.g. primary key) to an instance of this
 50.1883 ---   logical unit exists. If not an exception will be raised.
 50.1884 ------------------------------------------------------------------------------
 50.1885 -
 50.1886 -PROCEDURE Exist (
 50.1887 -   company_    IN VARCHAR2,
 50.1888 -   identity_   IN VARCHAR2,
 50.1889 -   party_type_ IN VARCHAR2 )
 50.1890 -IS
 50.1891 -BEGIN
 50.1892 -   General_SYS.Init_Method(lu_name_, '&PKG', 'Exist', TRUE);
 50.1893 -   IF (NOT Check_Exist___(company_, identity_, Party_Type_API.Encode(party_type_))) THEN
 50.1894 -      -- Bug 72612, Begin, Modified IF condition
 50.1895 -      IF Party_Type_API.Encode(party_type_) IN ('CUSTOMER', 'SUPPLIER') THEN
 50.1896 -         Error_SYS.Record_General(lu_name_, 'IDENTITYPAYEXIST: :P1 :P2 does not exist in company :P3 in Payment module.', party_type_, identity_, company_);
 50.1897 -      -- Bug 72612, End.
 50.1898 -         -- Bug 71612, Begin, Added IF condition, IF Party type 'COMPANY' display an error message
 50.1899 -         ELSIF (Party_Type_API.Encode(party_type_) = 'COMPANY') THEN
 50.1900 -            Error_SYS.Record_General(lu_name_, 'NOTPAYCOMPANY: Parked payments are allowed only against the payment company.');
 50.1901 -         -- Bug 72612, End.
 50.1902 -      ELSE
 50.1903 -         Error_SYS.Record_Not_Exist(lu_name_);
 50.1904 -      END IF;
 50.1905 -   END IF;
 50.1906 -END Exist;
 50.1907 -
 50.1908 -
 50.1909 -PROCEDURE Exist_Db (
 50.1910 -   company_       IN VARCHAR2,
 50.1911 -   identity_      IN VARCHAR2,
 50.1912 -   party_type_db_ IN VARCHAR2 )
 50.1913 -IS
 50.1914 -BEGIN
 50.1915 -   General_SYS.Init_Method(lu_name_, '&PKG', 'Exist', TRUE);
 50.1916 -   IF (NOT Check_Exist___(company_, identity_, party_type_db_)) THEN
 50.1917 -      IF party_type_db_ IN ('CUSTOMER', 'SUPPLIER', 'COMPANY') THEN
 50.1918 -         Error_SYS.Record_General(lu_name_, 'IDENTITYPAYEXIST2: :P1 :P2 does not exist in company :P3 in Payment module.', Party_Type_API.Decode(party_type_db_), identity_, company_);
 50.1919 -      ELSE
 50.1920 -         Error_SYS.Record_Not_Exist(lu_name_);
 50.1921 -      END IF;
 50.1922 -   END IF;
 50.1923 -END Exist_Db;
 50.1924 -
 50.1925 ------------------------------------------------------------------------------
 50.1926 --------------------- LU SPECIFIC IMPLEMENTATION METHODS ---------------------
 50.1927 ------------------------------------------------------------------------------
 50.1928 -PROCEDURE Save_Identity_Notes___ (
 50.1929 -   attr_       IN VARCHAR2,
 50.1930 -   newrec_     IN &TABLE%ROWTYPE )
 50.1931 -IS
 50.1932 -   note_   VARCHAR2(2000);
 50.1933 -   note_update_   VARCHAR2(20);
 50.1934 -
 50.1935 -BEGIN
 50.1936 -   note_ := Client_SYS.Get_Item_Value('NOTE',attr_);
 50.1937 -   note_update_ := Client_SYS.Get_Item_Value('NOTE_UPDATE',attr_);
 50.1938 -
 50.1939 -   IF ((note_ IS NULL) AND (note_update_ IS NULL)) THEN
 50.1940 -      RETURN;
 50.1941 -   END IF;
 50.1942 -
 50.1943 -   Identity_Invoice_Info_API.Set_Notes(newrec_.company,
 50.1944 -                                       newrec_.identity,
 50.1945 -                                       Party_Type_Api.Decode(newrec_.party_type),
 50.1946 -                                       note_ );
 50.1947 -END Save_Identity_Notes___;
 50.1948 -
 50.1949 -FUNCTION Get_Next_Format_No___ (
 50.1950 -   company_       IN VARCHAR2 ) RETURN NUMBER
 50.1951 -IS
 50.1952 -   CURSOR rec IS
 50.1953 -      SELECT MAX( format_no )
 50.1954 -      FROM &TABLE
 50.1955 -      WHERE company   = company_;
 50.1956 -
 50.1957 -   max_format_   NUMBER;
 50.1958 -BEGIN
 50.1959 -   OPEN rec;
 50.1960 -   FETCH rec INTO max_format_;
 50.1961 -   IF ( rec%NOTFOUND ) THEN
 50.1962 -      CLOSE rec;
 50.1963 -      RETURN 1;
 50.1964 -   END IF;
 50.1965 -   CLOSE rec;
 50.1966 -
 50.1967 -   RETURN ( NVL(max_format_,0) + 1 );
 50.1968 -END Get_Next_Format_No___;
 50.1969 -
 50.1970 -PROCEDURE Check_Cascade___ (
 50.1971 -   company_       IN VARCHAR2,
 50.1972 -   identity_      IN VARCHAR2,
 50.1973 -   party_type_db_ IN VARCHAR2 )
 50.1974 -IS
 50.1975 -   CURSOR get_ledger_item1 IS                                         
 50.1976 -      SELECT rowtype
 50.1977 -      FROM   ledger_item_tab
 50.1978 -      WHERE  company    = company_
 50.1979 -      AND    party_type = party_type_db_
 50.1980 -      AND    identity   = identity_;
 50.1981 -
 50.1982 -   CURSOR get_ledger_item2 IS                                         
 50.1983 -      SELECT rowtype
 50.1984 -      FROM   ledger_item_tab
 50.1985 -      WHERE  company        = company_
 50.1986 -      AND    party_type     = party_type_db_
 50.1987 -      AND    payer_identity = identity_;
 50.1988 -
 50.1989 -   CURSOR get_ledger_item3 IS                                         
 50.1990 -      SELECT rowtype
 50.1991 -      FROM   ledger_item_tab
 50.1992 -      WHERE  company        = company_
 50.1993 -      AND    party_type     = party_type_db_
 50.1994 -      AND    payee_identity = identity_;
 50.1995 -BEGIN
 50.1996 -   FOR ledger_item_ IN get_ledger_item1 LOOP
 50.1997 -      IF (ledger_item_.rowtype = 'InvoiceLedgerItem') THEN
 50.1998 -         Error_SYS.Appl_General(lu_name_, 'INVOICESEXIST: Invoices exist for :P1 :P2', Party_Type_API.Decode(party_type_db_), identity_);
 50.1999 -      ELSIF (ledger_item_.rowtype = 'OnAccountLedgerItem') THEN
 50.2000 -         Error_SYS.Appl_General(lu_name_, 'PAYMENTONACCNTEXIST: Payments on account exist for :P1 :P2', Party_Type_API.Decode(party_type_db_), identity_);
 50.2001 -      ELSE
 50.2002 -         Error_SYS.Appl_General(lu_name_, 'LEDGERITEMSEXIST: Ledger items exist for :P1 :P2', Party_Type_API.Decode(party_type_db_), identity_);
 50.2003 -      END IF;
 50.2004 -   END LOOP;
 50.2005 -
 50.2006 -   FOR ledger_item_ IN get_ledger_item2 LOOP
 50.2007 -      IF (ledger_item_.rowtype = 'InvoiceLedgerItem') THEN
 50.2008 -         Error_SYS.Appl_General(lu_name_, 'INVOICESEXIST: Invoices exist for :P1 :P2', Party_Type_API.Decode(party_type_db_), identity_);
 50.2009 -      ELSIF (ledger_item_.rowtype = 'OnAccountLedgerItem') THEN
 50.2010 -         Error_SYS.Appl_General(lu_name_, 'PAYMENTONACCNTEXIST: Payments on account exist for :P1 :P2', Party_Type_API.Decode(party_type_db_), identity_);
 50.2011 -      ELSE
 50.2012 -         Error_SYS.Appl_General(lu_name_, 'LEDGERITEMSEXIST: Ledger items exist for :P1 :P2', Party_Type_API.Decode(party_type_db_), identity_);
 50.2013 -      END IF;
 50.2014 -   END LOOP;
 50.2015 -
 50.2016 -   FOR ledger_item_ IN get_ledger_item3 LOOP
 50.2017 -      IF (ledger_item_.rowtype = 'InvoiceLedgerItem') THEN
 50.2018 -         Error_SYS.Appl_General(lu_name_, 'INVOICESEXIST: Invoices exist for :P1 :P2', Party_Type_API.Decode(party_type_db_), identity_);
 50.2019 -      ELSIF (ledger_item_.rowtype = 'OnAccountLedgerItem') THEN
 50.2020 -         Error_SYS.Appl_General(lu_name_, 'PAYMENTONACCNTEXIST: Payments on account exist for :P1 :P2', Party_Type_API.Decode(party_type_db_), identity_);
 50.2021 -      ELSE
 50.2022 -         Error_SYS.Appl_General(lu_name_, 'LEDGERITEMSEXIST: Ledger items exist for :P1 :P2', Party_Type_API.Decode(party_type_db_), identity_);
 50.2023 -      END IF;
 50.2024 -   END LOOP;
 50.2025 -END Check_Cascade___;
 50.2026 -
 50.2027 -PROCEDURE Import___ (
 50.2028 -   crecomp_rec_ IN ENTERP_COMP_CONNECT_V160_API.Crecomp_Lu_Public_Rec )
 50.2029 -IS
 50.2030 -   CURSOR get_data IS
 50.2031 -      SELECT C1,C2,N1,C3,C4,C5,C6,N2,N3,N4,C7,N5,C8,C9,C10,C11,C12,C13,C14,C15
 50.2032 -      FROM   Create_Company_Tem_Detail src
 50.2033 -      WHERE  component = '&MODULE'
 50.2034 -      AND    lu        = lu_name_
 50.2035 -      AND    template_id = crecomp_rec_.template_id
 50.2036 -      AND    version     = crecomp_rec_.version
 50.2037 -      AND NOT EXISTS (SELECT 1
 50.2038 -                      FROM &TABLE dest
 50.2039 -                      WHERE dest.company = crecomp_rec_.company
 50.2040 -                      AND dest.identity = crecomp_rec_.company
 50.2041 -                      AND dest.party_type = src.c2);
 50.2042 -
 50.2043 -   -- Bug 74138, Begin, Added condition to fetch data when party_type = 'COMPANY'  
 50.2044 -   CURSOR exist_company IS
 50.2045 -      SELECT 'X'
 50.2046 -      FROM   &TABLE
 50.2047 -      WHERE  company = crecomp_rec_.company
 50.2048 -      AND    party_type = 'COMPANY';
 50.2049 -   -- Bug 74138, End
 50.2050 -
 50.2051 -   dummy_         VARCHAR2(1);
 50.2052 -   attr_          VARCHAR2(2000);
 50.2053 -   objid_         VARCHAR2(2000);
 50.2054 -   objversion_    VARCHAR2(2000);
 50.2055 -   newrec_        &TABLE%ROWTYPE;
 50.2056 -   msg_           VARCHAR2(2000);
 50.2057 -   i_             NUMBER := 0;
 50.2058 -   update_by_key_ BOOLEAN DEFAULT FALSE;
 50.2059 -   empty_lu_      BOOLEAN := FALSE;
 50.2060 -BEGIN
 50.2061 -   General_SYS.Init_Method(lu_name_, '&PKG', 'Import___', TRUE);
 50.2062 -
 50.2063 -   update_by_key_ := Enterp_Comp_Connect_V160_API.Use_Keys(module_, lu_name_, crecomp_rec_);
 50.2064 -
 50.2065 -   IF (NOT update_by_key_) THEN
 50.2066 -      empty_lu_ := FALSE;
 50.2067 -      OPEN exist_company;
 50.2068 -      FETCH exist_company INTO dummy_;
 50.2069 -      IF ( exist_company%NOTFOUND ) THEN
 50.2070 -         CLOSE exist_company;
 50.2071 -         empty_lu_ := TRUE;
 50.2072 -      END IF;
 50.2073 -   END IF;
 50.2074 -
 50.2075 -   IF ( update_by_key_ OR empty_lu_ ) THEN
 50.2076 -      FOR rec_ IN get_data LOOP
 50.2077 -         i_ := i_ + 1;
 50.2078 -         BEGIN
 50.2079 -            newrec_.company                        := crecomp_rec_.company;
 50.2080 -            newrec_.identity                       := crecomp_rec_.company;
 50.2081 -            newrec_.party_type                     := rec_.c2;
 50.2082 -            newrec_.priority                       := rec_.n1;
 50.2083 -            newrec_.blocked_for_payment            := rec_.c3;
 50.2084 -            newrec_.other_payee_identity           := rec_.c4;
 50.2085 -            newrec_.interest_template              := rec_.c5;
 50.2086 -            newrec_.reminder_template              := rec_.c6;
 50.2087 -            newrec_.payment_delay                  := rec_.n2;
 50.2088 -            newrec_.amount_tolerance               := rec_.n3;
 50.2089 -            newrec_.percent_tolerance              := rec_.n4;
 50.2090 -            newrec_.disc_days_tolerance            := rec_.n5;
 50.2091 -            newrec_.netting_allowed                := rec_.c7;
 50.2092 -            newrec_.format_no                      := rec_.n5;
 50.2093 -            newrec_.payment_advice                 := rec_.c8;
 50.2094 -            newrec_.deduction_group                := rec_.c9;
 50.2095 -            newrec_.corporation_id                 := rec_.c10;
 50.2096 -            newrec_.member_id                      := rec_.c11;
 50.2097 -            newrec_.send_reminder_to_payer         := rec_.c12;
 50.2098 -            newrec_.send_interest_inv_to_payer     := rec_.c13;
 50.2099 -            newrec_.payment_receipt_type           := rec_.c14;
 50.2100 -            newrec_.send_statement_of_acc_to_payer := rec_.c15;
 50.2101 -            
 50.2102 -            Company_API.Exist(newrec_.company);
 50.2103 -            Payment_Library_API.Exist_In_Enterp(newrec_.company, newrec_.company, Party_Type_API.Decode(newrec_.party_type));
 50.2104 -            IF (newrec_.blocked_for_payment IS NOT NULL AND newrec_.blocked_for_payment NOT IN ('TRUE', 'FALSE')) THEN
 50.2105 -               Error_SYS.Record_General(lu_name_,'TRUEORFALSE: The value must be TRUE or FALSE');
 50.2106 -            END IF;
 50.2107 -            IF (newrec_.other_payee_identity IS NOT NULL) THEN
 50.2108 -               Identity_Pay_Info_API.Exist(newrec_.company, newrec_.other_payee_identity, Party_Type_API.Decode(newrec_.party_type));
 50.2109 -            END IF;
 50.2110 -            IF (newrec_.interest_template IS NOT NULL) THEN
 50.2111 -               Interest_Template_API.Exist(newrec_.company, newrec_.interest_template);
 50.2112 -            END IF;
 50.2113 -            IF (newrec_.reminder_template IS NOT NULL) THEN
 50.2114 -               Reminder_Template_API.Exist(newrec_.company, newrec_.reminder_template);
 50.2115 -            END IF;
 50.2116 -            IF (TRUNC(newrec_.payment_delay) <> newrec_.payment_delay) THEN
 50.2117 -               Error_SYS.Record_General(lu_name_, 'NOTWHOLENUM: A whole number must be specified for the payment delay.');
 50.2118 -            END IF;
 50.2119 -            IF (newrec_.netting_allowed NOT IN ('TRUE', 'FALSE')) THEN
 50.2120 -               Error_SYS.Record_General(lu_name_,'TRUEORFALSE: The value must be TRUE or FALSE');
 50.2121 -            END IF;
 50.2122 -            IF (newrec_.payment_advice IS NOT NULL) THEN
 50.2123 -               Payment_Advice_API.Exist_Db(newrec_.payment_advice);
 50.2124 -            END IF;
 50.2125 -            IF (newrec_.deduction_group IS NOT NULL) THEN
 50.2126 -               Deduction_Group_API.Exist(newrec_.company, newrec_.deduction_group);
 50.2127 -            END IF;
 50.2128 -            IF (newrec_.payment_receipt_type IS NOT NULL) THEN
 50.2129 -               Payment_Receipt_Type_API.Exist_Db(newrec_.payment_receipt_type);
 50.2130 -            END IF;
 50.2131 -
 50.2132 -            Error_SYS.Check_Not_Null(lu_name_, 'COMPANY', newrec_.company);
 50.2133 -            Error_SYS.Check_Not_Null(lu_name_, 'IDENTITY', newrec_.identity);
 50.2134 -            Error_SYS.Check_Not_Null(lu_name_, 'PARTY_TYPE', newrec_.party_type);
 50.2135 -            Error_SYS.Check_Not_Null(lu_name_, 'NETTING_ALLOWED', newrec_.netting_allowed);
 50.2136 -
 50.2137 -            IF (newrec_.party_type = 'SUPPLIER') THEN
 50.2138 -               Error_SYS.Check_Not_Null(lu_name_, 'PRIORITY', newrec_.priority);
 50.2139 -               Error_SYS.Check_Not_Null(lu_name_, 'BLOCKED_FOR_PAYMENT', newrec_.blocked_for_payment);
 50.2140 -            END IF;
 50.2141 -            IF (newrec_.party_type = 'CUSTOMER') THEN
 50.2142 -               Error_SYS.Check_Not_Null(lu_name_, 'INTEREST_TEMPLATE', newrec_.interest_template);
 50.2143 -               Error_SYS.Check_Not_Null(lu_name_, 'REMINDER_TEMPLATE', newrec_.reminder_template);
 50.2144 -               Error_SYS.Check_Not_Null(lu_name_, 'PAYMENT_RECEIPT_TYPE', newrec_.payment_receipt_type);
 50.2145 -            END IF;
 50.2146 -
 50.2147 -            Error_SYS.Check_Not_Null(lu_name_, 'IDENTITY', newrec_.identity);
 50.2148 -
 50.2149 -            IF (newrec_.identity = newrec_.other_payee_identity) THEN
 50.2150 -               Error_SYS.Record_General(lu_name_, 'SAMEPARTY: Other Payee cannot refer to itself.');
 50.2151 -            END IF;
 50.2152 -
 50.2153 -            Insert___(objid_, objversion_, newrec_, attr_);
 50.2154 -         EXCEPTION
 50.2155 -            WHEN OTHERS THEN
 50.2156 -               msg_ := SQLERRM;
 50.2157 -               Enterp_Comp_Connect_V160_API.Log_Logging(crecomp_rec_.company, module_, '&PKG', 'Error', msg_);
 50.2158 -         END;
 50.2159 -      END LOOP;
 50.2160 -      IF ( i_ = 0 ) THEN
 50.2161 -         msg_ := language_sys.translate_constant(lu_name_, 'NODATAFOUND:No Data Found');
 50.2162 -         Enterp_Comp_Connect_V160_API.Log_Logging(crecomp_rec_.company, module_, '&PKG', 'CreatedSuccessfully', msg_);
 50.2163 -      ELSE
 50.2164 -         IF msg_ IS NULL THEN
 50.2165 -            Enterp_Comp_Connect_V160_API.Log_Logging(crecomp_rec_.company, module_, '&PKG', 'CreatedSuccessfully');
 50.2166 -         ELSE
 50.2167 -            Enterp_Comp_Connect_V160_API.Log_Logging(crecomp_rec_.company, module_, '&PKG', 'CreatedWithErrors');
 50.2168 -         END IF;
 50.2169 -      END IF;
 50.2170 -   END IF;
 50.2171 -   -- This statement is to add to the log that the Create company process for LUs is finished if
 50.2172 -   -- update_by_key_ and empty_lu are FALSE
 50.2173 -   IF ( NOT update_by_key_ AND NOT empty_lu_ ) THEN
 50.2174 -      Enterp_Comp_Connect_V160_API.Log_Logging(crecomp_rec_.company, module_, '&PKG', 'CreatedSuccessfully');
 50.2175 -   END IF;
 50.2176 -EXCEPTION
 50.2177 -   WHEN OTHERS THEN
 50.2178 -      msg_ := SQLERRM;
 50.2179 -      Enterp_Comp_Connect_V160_API.Log_Logging(crecomp_rec_.company, module_, '&PKG', 'Error', msg_);
 50.2180 -      Enterp_Comp_Connect_V160_API.Log_Logging(crecomp_rec_.company, module_, '&PKG', 'CreatedWithErrors');
 50.2181 -END Import___;
 50.2182 -
 50.2183 -
 50.2184 -PROCEDURE Copy___ (
 50.2185 -   crecomp_rec_   IN ENTERP_COMP_CONNECT_V160_API.Crecomp_Lu_Public_Rec )
 50.2186 -IS
 50.2187 -   dummy_         VARCHAR2(1);
 50.2188 -   msg_           VARCHAR2(2000);
 50.2189 -   update_by_key_ BOOLEAN DEFAULT FALSE;
 50.2190 -   empty_lu_      BOOLEAN := FALSE;
 50.2191 -
 50.2192 -   CURSOR exist_company IS
 50.2193 -      SELECT 'X'
 50.2194 -      FROM   &TABLE
 50.2195 -      WHERE  company = crecomp_rec_.company;
 50.2196 -
 50.2197 -   CURSOR get_data IS
 50.2198 -      SELECT *
 50.2199 -      FROM   &TABLE src
 50.2200 -      WHERE  company = crecomp_rec_.old_company
 50.2201 -      AND    identity = crecomp_rec_.old_company
 50.2202 -      AND    party_type = 'COMPANY'
 50.2203 -      AND NOT EXISTS (SELECT 1
 50.2204 -                      FROM &TABLE dest
 50.2205 -                      WHERE dest.company = crecomp_rec_.company
 50.2206 -                      AND dest.identity = src.identity
 50.2207 -                      AND dest.party_type = src.party_type);
 50.2208 -BEGIN
 50.2209 -   General_SYS.Init_Method(lu_name_, '&PKG', 'Copy___', TRUE);
 50.2210 -
 50.2211 -   update_by_key_ := Enterp_Comp_Connect_V160_API.Use_Keys(module_, lu_name_, crecomp_rec_);
 50.2212 -
 50.2213 -   IF (NOT update_by_key_) THEN
 50.2214 -      empty_lu_ := FALSE;
 50.2215 -      OPEN exist_company;
 50.2216 -      FETCH exist_company INTO dummy_;
 50.2217 -      IF ( exist_company%NOTFOUND ) THEN
 50.2218 -         CLOSE exist_company;
 50.2219 -         empty_lu_ := TRUE;
 50.2220 -      END IF;
 50.2221 -   END IF;
 50.2222 -
 50.2223 -   IF ( update_by_key_ OR empty_lu_ ) THEN
 50.2224 -      FOR rec_ IN get_data LOOP
 50.2225 -         BEGIN
 50.2226 -            INSERT
 50.2227 -               INTO identity_pay_info_tab (
 50.2228 -                  company,
 50.2229 -                  identity,
 50.2230 -                  party_type,
 50.2231 -                  priority,
 50.2232 -                  blocked_for_payment,
 50.2233 -                  other_payee_identity,
 50.2234 -                  interest_template,
 50.2235 -                  reminder_template,
 50.2236 -                  payment_delay,
 50.2237 -                  amount_tolerance,
 50.2238 -                  percent_tolerance,
 50.2239 -                  disc_days_tolerance,
 50.2240 -                  netting_allowed,
 50.2241 -                  format_no,
 50.2242 -                  payment_advice,
 50.2243 -                  deduction_group,
 50.2244 -                  corporation_id,
 50.2245 -                  member_id,
 50.2246 -                  send_reminder_to_payer,
 50.2247 -                  send_interest_inv_to_payer,
 50.2248 -                  next_payment_matching_id,
 50.2249 -                  payment_receipt_type,
 50.2250 -                  send_statement_of_acc_to_payer,
 50.2251 -                  rowversion)
 50.2252 -               VALUES (
 50.2253 -                  crecomp_rec_.company,
 50.2254 -                  crecomp_rec_.company,
 50.2255 -                  rec_.party_type,
 50.2256 -                  rec_.priority,
 50.2257 -                  rec_.blocked_for_payment,
 50.2258 -                  rec_.other_payee_identity,
 50.2259 -                  rec_.interest_template,
 50.2260 -                  rec_.reminder_template,
 50.2261 -                  rec_.payment_delay,
 50.2262 -                  rec_.amount_tolerance,
 50.2263 -                  rec_.percent_tolerance,
 50.2264 -                  rec_.disc_days_tolerance,
 50.2265 -                  rec_.netting_allowed,
 50.2266 -                  rec_.format_no,
 50.2267 -                  rec_.payment_advice,
 50.2268 -                  rec_.deduction_group,
 50.2269 -                  rec_.corporation_id,
 50.2270 -                  rec_.member_id,
 50.2271 -                  rec_.send_reminder_to_payer,
 50.2272 -                  rec_.send_interest_inv_to_payer,
 50.2273 -                  0,
 50.2274 -                  rec_.payment_receipt_type,
 50.2275 -                  rec_.send_statement_of_acc_to_payer,
 50.2276 -                  1);
 50.2277 -         END;
 50.2278 -      END LOOP;
 50.2279 -      Enterp_Comp_Connect_V160_API.Log_Logging(crecomp_rec_.company, module_, '&PKG', 'CreatedSuccessfully');
 50.2280 -   END IF;
 50.2281 -   -- This statement is to add to the log that the Create company process for LUs is finished if
 50.2282 -   -- update_by_key_ and empty_lu are FALSE
 50.2283 -   IF ( NOT update_by_key_ AND NOT empty_lu_ ) THEN
 50.2284 -      Enterp_Comp_Connect_V160_API.Log_Logging(crecomp_rec_.company, module_, '&PKG', 'CreatedSuccessfully');
 50.2285 -   END IF;
 50.2286 -EXCEPTION
 50.2287 -   WHEN OTHERS THEN
 50.2288 -      msg_ := SQLERRM;
 50.2289 -      Enterp_Comp_Connect_V160_API.Log_Logging(crecomp_rec_.company, module_, '&PKG', 'Error', msg_);
 50.2290 -      Enterp_Comp_Connect_V160_API.Log_Logging(crecomp_rec_.company, module_, '&PKG', 'CreatedWithErrors');
 50.2291 -END Copy___;
 50.2292 -
 50.2293 -
 50.2294 -
 50.2295 -PROCEDURE Export___ (
 50.2296 -   crecomp_rec_   IN ENTERP_COMP_CONNECT_V160_API.Crecomp_Lu_Public_Rec )
 50.2297 -IS
 50.2298 -   pub_rec_       Enterp_Comp_Connect_V160_API.Tem_Public_Rec;
 50.2299 -   i_             NUMBER := 1;
 50.2300 -
 50.2301 -   CURSOR get_data IS
 50.2302 -      SELECT *
 50.2303 -      FROM   &VIEWPCT
 50.2304 -      WHERE  company = crecomp_rec_.company
 50.2305 -      AND    party_type_db = 'COMPANY';
 50.2306 -BEGIN
 50.2307 -   General_SYS.Init_Method(lu_name_, '&PKG', 'Export___', TRUE);
 50.2308 -   FOR pctrec_ IN get_data LOOP
 50.2309 -      pub_rec_.template_id := crecomp_rec_.template_id;
 50.2310 -      pub_rec_.component := '&MODULE';
 50.2311 -      pub_rec_.version  := crecomp_rec_.version;
 50.2312 -      pub_rec_.lu       := lu_name_;
 50.2313 -      pub_rec_.item_id  := i_;
 50.2314 -      pub_rec_.c1 := '<NEW COMPANY>';
 50.2315 -      pub_rec_.c2 := pctrec_.party_type_db;
 50.2316 -      pub_rec_.n1 := pctrec_.priority;
 50.2317 -      pub_rec_.c3 := pctrec_.blocked_for_payment;
 50.2318 -      pub_rec_.c4 := pctrec_.other_payee_identity;
 50.2319 -      pub_rec_.c5 := pctrec_.interest_template;
 50.2320 -      pub_rec_.c6 := pctrec_.reminder_template;
 50.2321 -      pub_rec_.n2 := pctrec_.payment_delay;
 50.2322 -      pub_rec_.n3 := pctrec_.amount_tolerance;
 50.2323 -      pub_rec_.n4 := pctrec_.percent_tolerance;
 50.2324 -      pub_rec_.n5 := pctrec_.disc_days_tolerance;
 50.2325 -      pub_rec_.c7 := pctrec_.netting_allowed;
 50.2326 -      pub_rec_.n5 := pctrec_.format_no;
 50.2327 -      pub_rec_.c8 := pctrec_.payment_advice_db;
 50.2328 -      pub_rec_.c9 := pctrec_.deduction_group;
 50.2329 -      pub_rec_.c10 := pctrec_.corporation_id;
 50.2330 -      pub_rec_.c11 := pctrec_.member_id;
 50.2331 -      pub_rec_.c12 := pctrec_.send_reminder_to_payer;
 50.2332 -      pub_rec_.c13 := pctrec_.send_interest_inv_to_payer;
 50.2333 -      pub_rec_.c14 := pctrec_.payment_receipt_type_db;
 50.2334 -      pub_rec_.c15 := pctrec_.send_statement_of_acc_to_payer;
 50.2335 -      Enterp_Comp_Connect_V160_API.Tem_Insert_Detail_Data(pub_rec_);
 50.2336 -      i_ := i_ + 1;
 50.2337 -   END LOOP;
 50.2338 -END Export___;
 50.2339 -
 50.2340 ------------------------------------------------------------------------------
 50.2341 --------------------- LU SPECIFIC PRIVATE METHODS ----------------------------
 50.2342 ------------------------------------------------------------------------------
 50.2343 -
 50.2344 -PROCEDURE Check_Cascade_Customer__ (
 50.2345 -   attr_ IN VARCHAR2 )
 50.2346 -IS
 50.2347 -   CURSOR customer_in_company (identity_      IN VARCHAR2,
 50.2348 -                               party_type_db_ IN VARCHAR2 ) IS
 50.2349 -      SELECT company
 50.2350 -      FROM   &TABLE
 50.2351 -      WHERE  identity   = identity_
 50.2352 -      AND    party_type = party_type_db_;
 50.2353 -
 50.2354 -   identity_        VARCHAR2(20);
 50.2355 -   party_type_db_   VARCHAR2(20);
 50.2356 -BEGIN
 50.2357 -   General_SYS.Init_Method(lu_name_, '&PKG', 'Check_Cascade_Customer__');
 50.2358 -
 50.2359 -   identity_ := substr(attr_,1,instr(attr_,'^',1,1)-1);
 50.2360 -   party_type_db_  := 'CUSTOMER';
 50.2361 -   FOR comp_ IN customer_in_company (identity_, party_type_db_) LOOP
 50.2362 -      Check_Cascade___(comp_.company, identity_, party_type_db_);
 50.2363 -   END LOOP;
 50.2364 -END Check_Cascade_Customer__;
 50.2365 -
 50.2366 -PROCEDURE Check_Cascade_Supplier__ (
 50.2367 -   attr_ IN VARCHAR2 )
 50.2368 -IS
 50.2369 -   CURSOR supplier_in_company (identity_      IN VARCHAR2,
 50.2370 -                               party_type_db_ IN VARCHAR2 ) IS
 50.2371 -      SELECT company
 50.2372 -      FROM   &TABLE
 50.2373 -      WHERE  identity   = identity_
 50.2374 -      AND    party_type = party_type_db_;
 50.2375 -
 50.2376 -   identity_        VARCHAR2(20);
 50.2377 -   party_type_db_   VARCHAR2(20);
 50.2378 -BEGIN
 50.2379 -   General_SYS.Init_Method(lu_name_, '&PKG', 'Check_Cascade_Supplier__');
 50.2380 -
 50.2381 -   identity_ := substr(attr_,1,instr(attr_,'^',1,1)-1);
 50.2382 -   party_type_db_  := 'SUPPLIER';
 50.2383 -   FOR comp_ IN supplier_in_company (identity_, party_type_db_) LOOP
 50.2384 -      Check_Cascade___(comp_.company, identity_, party_type_db_);
 50.2385 -   END LOOP;
 50.2386 -END Check_Cascade_Supplier__;
 50.2387 -
 50.2388 -PROCEDURE Cascade_Delete_Customer__ (
 50.2389 -   attr_ IN VARCHAR2 )
 50.2390 -IS
 50.2391 -   identity_        VARCHAR2(20);
 50.2392 -   party_type_db_   VARCHAR2(20);
 50.2393 -   info_            VARCHAR2(2000);
 50.2394 -
 50.2395 -   CURSOR customer_in_company (identity_      IN VARCHAR2,
 50.2396 -                               party_type_db_ IN VARCHAR2 ) IS
 50.2397 -      SELECT &OBJID       objid,
 50.2398 -             &OBJVERSION  objversion
 50.2399 -      FROM   &TABLE
 50.2400 -      WHERE  identity   = identity_
 50.2401 -      AND    party_type = party_type_db_;
 50.2402 -BEGIN
 50.2403 -   General_SYS.Init_Method(lu_name_, '&PKG', 'Cascade_Delete_Customer__');
 50.2404 -
 50.2405 -   Check_Cascade_Customer__(attr_);
 50.2406 -   identity_ := substr(attr_,1,instr(attr_,'^',1,1)-1);
 50.2407 -   party_type_db_  := 'CUSTOMER';
 50.2408 -
 50.2409 -   FOR comp_ IN customer_in_company (identity_, party_type_db_) LOOP
 50.2410 -      Remove__(info_, comp_.objid, comp_.objversion, 'DO');
 50.2411 -   END LOOP;
 50.2412 -
 50.2413 -END Cascade_Delete_Customer__;
 50.2414 -
 50.2415 -PROCEDURE Cascade_Delete_Supplier__ (
 50.2416 -   attr_ IN VARCHAR2 )
 50.2417 -IS
 50.2418 -   identity_        VARCHAR2(20);
 50.2419 -   party_type_db_   VARCHAR2(20);
 50.2420 -   info_            VARCHAR2(2000);
 50.2421 -
 50.2422 -   CURSOR supplier_in_company (identity_      IN VARCHAR2,
 50.2423 -                               party_type_db_ IN VARCHAR2 ) IS
 50.2424 -      SELECT &OBJID       objid,
 50.2425 -             &OBJVERSION  objversion
 50.2426 -      FROM   &TABLE
 50.2427 -      WHERE  identity   = identity_
 50.2428 -      AND    party_type = party_type_db_;
 50.2429 -BEGIN
 50.2430 -   General_SYS.Init_Method(lu_name_, '&PKG', 'Cascade_Delete_Supplier__');
 50.2431 -
 50.2432 -   Check_Cascade_Supplier__(attr_);
 50.2433 -   identity_ := substr(attr_,1,instr(attr_,'^',1,1)-1);
 50.2434 -   party_type_db_  := 'SUPPLIER';
 50.2435 -
 50.2436 -   FOR comp_ IN supplier_in_company (identity_, party_type_db_) LOOP
 50.2437 -      Remove__(info_, comp_.objid, comp_.objversion, 'DO');
 50.2438 -   END LOOP;
 50.2439 -
 50.2440 -END Cascade_Delete_Supplier__;
 50.2441 -
 50.2442 -FUNCTION Create_Other_Payee_Attr__ (
 50.2443 -   company_  IN VARCHAR2,
 50.2444 -   payer_id_ IN VARCHAR2 ) RETURN VARCHAR2
 50.2445 -IS
 50.2446 -   value_attr_ VARCHAR2(32000);
 50.2447 -
 50.2448 -   CURSOR get_supplier IS
 50.2449 -      SELECT identity
 50.2450 -      FROM   &TABLE
 50.2451 -      WHERE  company              = company_
 50.2452 -      AND    other_payee_identity = payer_id_
 50.2453 -      AND    party_type           = 'SUPPLIER';
 50.2454 -BEGIN
 50.2455 -   General_SYS.Init_Method(lu_name_, '&PKG', 'Create_Other_Payee_Attr__');
 50.2456 -
 50.2457 -   value_attr_ := payer_id_;
 50.2458 -   FOR supplier_info_ IN get_supplier LOOP
 50.2459 -      value_attr_ := value_attr_ || CHR(39) || ',' || CHR(39) || supplier_info_.identity;
 50.2460 -   END LOOP;
 50.2461 -
 50.2462 -   RETURN value_attr_;
 50.2463 -END Create_Other_Payee_Attr__;
 50.2464 -
 50.2465 -FUNCTION Create_Cus_Other_Payee_Attr__ (
 50.2466 -   company_  IN VARCHAR2,
 50.2467 -   payer_id_ IN VARCHAR2 ) RETURN VARCHAR2
 50.2468 -IS
 50.2469 -   value_attr_ VARCHAR2(32000);
 50.2470 -
 50.2471 -   CURSOR get_customer IS
 50.2472 -      SELECT identity
 50.2473 -      FROM   &TABLE
 50.2474 -      WHERE  company = company_
 50.2475 -      AND    other_payee_identity = payer_id_
 50.2476 -      AND    party_type = 'CUSTOMER';
 50.2477 -BEGIN
 50.2478 -   General_SYS.Init_Method(lu_name_, '&PKG', 'Create_Cus_Other_Payee_Attr__');
 50.2479 -
 50.2480 -   value_attr_ := payer_id_;
 50.2481 -   FOR customer_info_ IN get_customer LOOP
 50.2482 -      value_attr_ := value_attr_ || CHR(39) || ',' || CHR(39) || customer_info_.identity;
 50.2483 -   END LOOP;
 50.2484 -
 50.2485 -   RETURN value_attr_;
 50.2486 -END Create_Cus_Other_Payee_Attr__;
 50.2487 ------------------------------------------------------------------------------
 50.2488 --------------------- LU SPECIFIC PROTECTED METHODS --------------------------
 50.2489 ------------------------------------------------------------------------------
 50.2490 -
 50.2491 -
 50.2492 ------------------------------------------------------------------------------
 50.2493 --------------------- LU SPECIFIC PUBLIC METHODS -----------------------------
 50.2494 ------------------------------------------------------------------------------
 50.2495 -
 50.2496 -FUNCTION Get_Priority (
 50.2497 -   company_    IN VARCHAR2,
 50.2498 -   identity_   IN VARCHAR2,
 50.2499 -   party_type_ IN VARCHAR2 ) RETURN NUMBER
 50.2500 -IS
 50.2501 -   temp_  Public_Rec;
 50.2502 -BEGIN
 50.2503 -   temp_ := Get(company_, identity_, Party_Type_API.Encode(party_type_));
 50.2504 -   RETURN temp_.priority;
 50.2505 -END Get_Priority;
 50.2506 -
 50.2507 -FUNCTION Get_Blocked_For_Payment (
 50.2508 -   company_    IN VARCHAR2,
 50.2509 -   identity_   IN VARCHAR2,
 50.2510 -   party_type_ IN VARCHAR2 ) RETURN VARCHAR2
 50.2511 -IS
 50.2512 -   temp_ Public_Rec;
 50.2513 -BEGIN
 50.2514 -   temp_ := Get(company_, identity_, Party_Type_API.Encode(party_type_));
 50.2515 -   RETURN temp_.blocked_for_payment;
 50.2516 -END Get_Blocked_For_Payment;
 50.2517 -
 50.2518 -FUNCTION Get_Payment_Delay (
 50.2519 -   company_    IN VARCHAR2,
 50.2520 -   identity_   IN VARCHAR2,
 50.2521 -   party_type_ IN VARCHAR2 ) RETURN NUMBER
 50.2522 -IS
 50.2523 -   temp_ Public_Rec;
 50.2524 -BEGIN
 50.2525 -   temp_ := Get(company_, identity_, Party_Type_API.Encode(party_type_));
 50.2526 -   RETURN NVL(temp_.payment_delay, 0);
 50.2527 -END Get_Payment_Delay;
 50.2528 -
 50.2529 -FUNCTION Get_Amount_Tolerance (
 50.2530 -   company_    IN VARCHAR2,
 50.2531 -   identity_   IN VARCHAR2,
 50.2532 -   party_type_ IN VARCHAR2 ) RETURN NUMBER
 50.2533 -IS
 50.2534 -   temp_ Public_Rec;
 50.2535 -BEGIN
 50.2536 -   temp_ := Get(company_, identity_, Party_Type_API.Encode(party_type_));
 50.2537 -   RETURN temp_.amount_tolerance;
 50.2538 -END Get_Amount_Tolerance;
 50.2539 -
 50.2540 -FUNCTION Get_Percent_Tolerance (
 50.2541 -   company_    IN VARCHAR2,
 50.2542 -   identity_   IN VARCHAR2,
 50.2543 -   party_type_ IN VARCHAR2 ) RETURN NUMBER
 50.2544 -IS
 50.2545 -   temp_ Public_Rec;
 50.2546 -BEGIN
 50.2547 -   temp_ := Get(company_, identity_, Party_Type_API.Encode(party_type_));
 50.2548 -   RETURN temp_.percent_tolerance;
 50.2549 -END Get_Percent_Tolerance;
 50.2550 -
 50.2551 -FUNCTION Get_Disc_Days_Tolerance (
 50.2552 -   company_ IN VARCHAR2,
 50.2553 -   identity_ IN VARCHAR2,
 50.2554 -   party_type_ IN VARCHAR2 ) RETURN NUMBER
 50.2555 -IS
 50.2556 -   temp_ &TABLE..disc_days_tolerance%TYPE;
 50.2557 -   CURSOR get_attr IS
 50.2558 -      SELECT disc_days_tolerance
 50.2559 -      FROM &TABLE
 50.2560 -      WHERE company = company_
 50.2561 -      AND   identity = identity_
 50.2562 -      AND   party_type = party_type_;
 50.2563 -BEGIN
 50.2564 -   OPEN get_attr;
 50.2565 -   FETCH get_attr INTO temp_;
 50.2566 -   CLOSE get_attr;
 50.2567 -   RETURN temp_;
 50.2568 -END Get_Disc_Days_Tolerance;
 50.2569 -
 50.2570 -FUNCTION Get_Netting_Allowed (
 50.2571 -   company_    IN VARCHAR2,
 50.2572 -   identity_   IN VARCHAR2,
 50.2573 -   party_type_ IN VARCHAR2 ) RETURN VARCHAR2
 50.2574 -IS
 50.2575 -   temp_ &TABLE..netting_allowed%TYPE;
 50.2576 -   CURSOR get_attr (party_type_db_ IN VARCHAR2) IS
 50.2577 -      SELECT netting_allowed
 50.2578 -      FROM &TABLE
 50.2579 -      WHERE company = company_
 50.2580 -      AND   identity = identity_
 50.2581 -      AND   party_type = party_type_db_;
 50.2582 -BEGIN
 50.2583 -   IF (NOT Company_Finance_API.Is_User_Authorized(company_)) THEN
 50.2584 -      RETURN temp_;
 50.2585 -   END IF;
 50.2586 -   OPEN get_attr(Party_Type_API.Encode(party_type_));
 50.2587 -   FETCH get_attr INTO temp_;
 50.2588 -   CLOSE get_attr;
 50.2589 -   RETURN temp_;
 50.2590 -END Get_Netting_Allowed;
 50.2591 -
 50.2592 -FUNCTION Get_Check_Recipient (
 50.2593 -   company_ IN VARCHAR2,
 50.2594 -   identity_ IN VARCHAR2,
 50.2595 -   party_type_ IN VARCHAR2 ) RETURN VARCHAR2
 50.2596 -IS
 50.2597 -   temp_ &TABLE..check_recipient%TYPE;
 50.2598 -   CURSOR get_attr (party_type_db_ IN VARCHAR2) IS
 50.2599 -      SELECT check_recipient
 50.2600 -      FROM &TABLE
 50.2601 -      WHERE company = company_
 50.2602 -      AND   identity = identity_
 50.2603 -      AND   party_type = party_type_db_;
 50.2604 -BEGIN
 50.2605 -   OPEN get_attr(Party_Type_API.Encode(party_type_));
 50.2606 -   FETCH get_attr INTO temp_;
 50.2607 -   CLOSE get_attr;
 50.2608 -   RETURN Check_Recipient_API.Decode(temp_);
 50.2609 -END Get_Check_Recipient;
 50.2610 -
 50.2611 -FUNCTION Get_Check_Recipient_Db (
 50.2612 -   company_    IN VARCHAR2,
 50.2613 -   identity_   IN VARCHAR2,
 50.2614 -   party_type_ IN VARCHAR2 ) RETURN VARCHAR2
 50.2615 -IS
 50.2616 -   temp_ &TABLE..check_recipient%TYPE;
 50.2617 -   CURSOR get_attr (party_type_db_ IN VARCHAR2) IS
 50.2618 -      SELECT check_recipient
 50.2619 -      FROM &TABLE
 50.2620 -      WHERE company = company_
 50.2621 -      AND   identity = identity_
 50.2622 -      AND   party_type = party_type_db_;
 50.2623 -BEGIN
 50.2624 -   OPEN get_attr(Party_Type_API.Encode(party_type_));
 50.2625 -   FETCH get_attr INTO temp_;
 50.2626 -   CLOSE get_attr;
 50.2627 -   RETURN temp_;
 50.2628 -END Get_Check_Recipient_Db;
 50.2629 -
 50.2630 -FUNCTION Get_Next_Pay_Matching_Id (
 50.2631 -   company_    IN VARCHAR2,
 50.2632 -   identity_   IN VARCHAR2,
 50.2633 -   party_type_ IN VARCHAR2 ) RETURN VARCHAR2
 50.2634 -IS
 50.2635 -   dummy_  NUMBER;
 50.2636 -BEGIN
 50.2637 -   General_SYS.Init_Method(lu_name_, '&PKG', 'Get_Next_Pay_Matching_Id');
 50.2638 -   dummy_ := Get_Payment_Matching_Id ( company_,
 50.2639 -                                       identity_,
 50.2640 -                                       party_type_ ) + 1;
 50.2641 -   UPDATE identity_pay_info_tab
 50.2642 -      SET next_payment_matching_id = dummy_
 50.2643 -   WHERE  company  = company_
 50.2644 -   AND    identity = identity_
 50.2645 -   AND    party_type = party_type_ ;
 50.2646 -   RETURN  dummy_ ;
 50.2647 -END Get_Next_Pay_Matching_Id;
 50.2648 -
 50.2649 -FUNCTION Get_Payment_Matching_Id (
 50.2650 -   company_    IN VARCHAR2,
 50.2651 -   identity_   IN VARCHAR2,
 50.2652 -   party_type_ IN VARCHAR2 ) RETURN VARCHAR2
 50.2653 -IS
 50.2654 -   CURSOR get_matching_id   IS
 50.2655 -   SELECT next_payment_matching_id
 50.2656 -   FROM   &TABLE
 50.2657 -   WHERE  company  = company_
 50.2658 -   AND    identity = identity_
 50.2659 -   AND    party_type = party_type_ ;
 50.2660 -
 50.2661 -   dummy_  NUMBER;
 50.2662 -BEGIN
 50.2663 -   General_SYS.Init_Method(lu_name_, '&PKG', 'Get_Payment_Matching_Id');
 50.2664 -   OPEN  get_matching_id;
 50.2665 -   FETCH get_matching_id INTO dummy_;
 50.2666 -   CLOSE get_matching_id;
 50.2667 -
 50.2668 -   RETURN  dummy_ ;
 50.2669 -END Get_Payment_Matching_Id;
 50.2670 -
 50.2671 -FUNCTION Get_Format_No (
 50.2672 -   company_    IN VARCHAR2,
 50.2673 -   identity_   IN VARCHAR2,
 50.2674 -   party_type_ IN VARCHAR2 ) RETURN NUMBER
 50.2675 -IS
 50.2676 -   temp_ &TABLE..format_no%TYPE;
 50.2677 -   CURSOR get_attr (party_type_db_ IN VARCHAR2) IS
 50.2678 -      SELECT format_no
 50.2679 -      FROM &TABLE
 50.2680 -      WHERE company = company_
 50.2681 -      AND   identity = identity_
 50.2682 -      AND   party_type = party_type_db_;
 50.2683 -BEGIN
 50.2684 -   IF (NOT Company_Finance_API.Is_User_Authorized(company_)) THEN
 50.2685 -      RETURN temp_;
 50.2686 -   END IF;
 50.2687 -   OPEN get_attr(Party_Type_API.Encode(party_type_));
 50.2688 -   FETCH get_attr INTO temp_;
 50.2689 -   CLOSE get_attr;
 50.2690 -   RETURN temp_;
 50.2691 -END Get_Format_No;
 50.2692 -
 50.2693 -FUNCTION Get_Other_Payee_Ded_Group_Desc (
 50.2694 -   company_           IN VARCHAR2,
 50.2695 -   payee_identity_    IN VARCHAR2,
 50.2696 -   party_type_        IN VARCHAR2 ) RETURN VARCHAR2
 50.2697 -IS
 50.2698 -   deduction_group_      VARCHAR2(20);
 50.2699 -BEGIN
 50.2700 -   deduction_group_ := Get_Deduction_Group(company_,
 50.2701 -                                           payee_identity_,
 50.2702 -                                           party_type_ );
 50.2703 -   IF (deduction_group_ IS NULL) THEN
 50.2704 -      RETURN NULL;
 50.2705 -   END IF;
 50.2706 -
 50.2707 -   RETURN Deduction_Group_API.Get_Description(company_,deduction_group_);
 50.2708 -END Get_Other_Payee_Ded_Group_Desc;
 50.2709 -
 50.2710 -FUNCTION Get_Deduction_Group (
 50.2711 -   company_    IN VARCHAR2,
 50.2712 -   identity_   IN VARCHAR2,
 50.2713 -   party_type_ IN VARCHAR2 ) RETURN VARCHAR2
 50.2714 -IS
 50.2715 -   temp_ &TABLE..deduction_group%TYPE;
 50.2716 -   CURSOR get_attr (party_type_db_ IN VARCHAR2) IS
 50.2717 -      SELECT deduction_group
 50.2718 -      FROM &TABLE
 50.2719 -      WHERE company = company_
 50.2720 -      AND   identity = identity_
 50.2721 -      AND   party_type = party_type_db_;
 50.2722 -BEGIN
 50.2723 -   IF (NOT Company_Finance_API.Is_User_Authorized(company_)) THEN
 50.2724 -      RETURN temp_;
 50.2725 -   END IF;
 50.2726 -   OPEN get_attr(Party_Type_API.Encode(party_type_));
 50.2727 -   FETCH get_attr INTO temp_;
 50.2728 -   CLOSE get_attr;
 50.2729 -   RETURN temp_;
 50.2730 -END Get_Deduction_Group;
 50.2731 -
 50.2732 -FUNCTION Get_Template_Id (
 50.2733 -   company_    IN VARCHAR2,
 50.2734 -   identity_   IN VARCHAR2,
 50.2735 -   party_type_ IN VARCHAR2 ) RETURN VARCHAR2
 50.2736 -IS
 50.2737 -   temp_ &TABLE..template_id%TYPE;
 50.2738 -   CURSOR get_attr IS
 50.2739 -      SELECT template_id
 50.2740 -      FROM &TABLE
 50.2741 -      WHERE company = company_
 50.2742 -      AND   identity = identity_
 50.2743 -      AND   party_type = party_type_;
 50.2744 -BEGIN
 50.2745 -   OPEN get_attr;
 50.2746 -   FETCH get_attr INTO temp_;
 50.2747 -   CLOSE get_attr;
 50.2748 -   RETURN temp_;
 50.2749 -END Get_Template_Id;
 50.2750 -
 50.2751 -FUNCTION Get_Corporation_Id (
 50.2752 -   company_    IN VARCHAR2,
 50.2753 -   identity_   IN VARCHAR2,
 50.2754 -   party_type_ IN VARCHAR2 ) RETURN VARCHAR2
 50.2755 -IS
 50.2756 -   temp_ &TABLE..corporation_id%TYPE;
 50.2757 -   CURSOR get_attr (party_type_db_ IN VARCHAR2) IS
 50.2758 -      SELECT corporation_id
 50.2759 -      FROM &TABLE
 50.2760 -      WHERE company = company_
 50.2761 -      AND   identity = identity_
 50.2762 -      AND   party_type = party_type_db_;
 50.2763 -BEGIN
 50.2764 -   IF (NOT Company_Finance_API.Is_User_Authorized(company_)) THEN
 50.2765 -      RETURN temp_;
 50.2766 -   END IF;
 50.2767 -   OPEN get_attr(Party_Type_API.Encode(party_type_));
 50.2768 -   FETCH get_attr INTO temp_;
 50.2769 -   CLOSE get_attr;
 50.2770 -   RETURN temp_;
 50.2771 -END Get_Corporation_Id;
 50.2772 -
 50.2773 -FUNCTION Get_Member_Id (
 50.2774 -   company_    IN VARCHAR2,
 50.2775 -   identity_   IN VARCHAR2,
 50.2776 -   party_type_ IN VARCHAR2 ) RETURN VARCHAR2
 50.2777 -IS
 50.2778 -   temp_ &TABLE..member_id%TYPE;
 50.2779 -   CURSOR get_attr (party_type_db_ IN VARCHAR2) IS
 50.2780 -      SELECT member_id
 50.2781 -      FROM &TABLE
 50.2782 -      WHERE company = company_
 50.2783 -      AND   identity = identity_
 50.2784 -      AND   party_type = party_type_db_;
 50.2785 -BEGIN
 50.2786 -   IF (NOT Company_Finance_API.Is_User_Authorized(company_)) THEN
 50.2787 -      RETURN temp_;
 50.2788 -   END IF;
 50.2789 -   OPEN get_attr(Party_Type_API.Encode(party_type_));
 50.2790 -   FETCH get_attr INTO temp_;
 50.2791 -   CLOSE get_attr;
 50.2792 -   RETURN temp_;
 50.2793 -END Get_Member_Id;
 50.2794 -
 50.2795 -FUNCTION Get_Send_Reminder_To_Payer (
 50.2796 -   company_    IN VARCHAR2,
 50.2797 -   identity_   IN VARCHAR2,
 50.2798 -   party_type_ IN VARCHAR2 ) RETURN VARCHAR2
 50.2799 -IS
 50.2800 -   temp_ &TABLE..send_reminder_to_payer%TYPE;
 50.2801 -   CURSOR get_attr (party_type_db_ IN VARCHAR2) IS
 50.2802 -      SELECT send_reminder_to_payer
 50.2803 -      FROM &TABLE
 50.2804 -      WHERE company = company_
 50.2805 -      AND   identity = identity_
 50.2806 -      AND   party_type = party_type_db_;
 50.2807 -BEGIN
 50.2808 -   IF (NOT Company_Finance_API.Is_User_Authorized(company_)) THEN
 50.2809 -      RETURN temp_;
 50.2810 -   END IF;
 50.2811 -   OPEN get_attr(Party_Type_API.Encode(party_type_));
 50.2812 -   FETCH get_attr INTO temp_;
 50.2813 -   CLOSE get_attr;
 50.2814 -   RETURN temp_;
 50.2815 -END Get_Send_Reminder_To_Payer;
 50.2816 -
 50.2817 -FUNCTION Get_Send_Interest_Inv_To_Payer (
 50.2818 -   company_    IN VARCHAR2,
 50.2819 -   identity_   IN VARCHAR2,
 50.2820 -   party_type_ IN VARCHAR2 ) RETURN VARCHAR2
 50.2821 -IS
 50.2822 -   temp_ &TABLE..send_interest_inv_to_payer%TYPE;
 50.2823 -   CURSOR get_attr (party_type_db_ IN VARCHAR2) IS
 50.2824 -      SELECT send_interest_inv_to_payer
 50.2825 -      FROM &TABLE
 50.2826 -      WHERE company = company_
 50.2827 -      AND   identity = identity_
 50.2828 -      AND   party_type = party_type_db_;
 50.2829 -BEGIN
 50.2830 -   IF (NOT Company_Finance_API.Is_User_Authorized(company_)) THEN
 50.2831 -      RETURN temp_;
 50.2832 -   END IF;
 50.2833 -   OPEN get_attr(Party_Type_API.Encode(party_type_));
 50.2834 -   FETCH get_attr INTO temp_;
 50.2835 -   CLOSE get_attr;
 50.2836 -   RETURN temp_;
 50.2837 -END Get_Send_Interest_Inv_To_Payer;
 50.2838 -
 50.2839 -FUNCTION Get_Payment_Advice (
 50.2840 -   company_ IN VARCHAR2,
 50.2841 -   identity_ IN VARCHAR2,
 50.2842 -   party_type_ IN VARCHAR2 ) RETURN VARCHAR2
 50.2843 -IS
 50.2844 -   temp_ &TABLE..payment_advice%TYPE;
 50.2845 -   CURSOR get_attr (party_type_db_ IN VARCHAR2) IS
 50.2846 -      SELECT payment_advice
 50.2847 -      FROM &TABLE
 50.2848 -      WHERE company = company_
 50.2849 -      AND   identity = identity_
 50.2850 -      AND   party_type = party_type_db_;
 50.2851 -BEGIN
 50.2852 -   IF (NOT Company_Finance_API.Is_User_Authorized(company_)) THEN
 50.2853 -      RETURN temp_;
 50.2854 -   END IF;
 50.2855 -   OPEN get_attr(Party_Type_API.Encode(party_type_));
 50.2856 -   FETCH get_attr INTO temp_;
 50.2857 -   CLOSE get_attr;
 50.2858 -   RETURN Payment_Advice_API.Decode(temp_);
 50.2859 -END Get_Payment_Advice;
 50.2860 -
 50.2861 -FUNCTION Get_Payment_Advice_Db (
 50.2862 -   company_ IN VARCHAR2,
 50.2863 -   identity_ IN VARCHAR2,
 50.2864 -   party_type_ IN VARCHAR2 ) RETURN VARCHAR2
 50.2865 -IS
 50.2866 -   temp_ &TABLE..payment_advice%TYPE;
 50.2867 -   CURSOR get_attr (party_type_db_ IN VARCHAR2) IS
 50.2868 -      SELECT payment_advice
 50.2869 -      FROM &TABLE
 50.2870 -      WHERE company = company_
 50.2871 -      AND   identity = identity_
 50.2872 -      AND   party_type = party_type_db_;
 50.2873 -BEGIN
 50.2874 -   IF (NOT Company_Finance_API.Is_User_Authorized(company_)) THEN
 50.2875 -      RETURN temp_;
 50.2876 -   END IF;
 50.2877 -   OPEN get_attr(Party_Type_API.Encode(party_type_));
 50.2878 -   FETCH get_attr INTO temp_;
 50.2879 -   CLOSE get_attr;
 50.2880 -   RETURN temp_;
 50.2881 -END Get_Payment_Advice_Db;
 50.2882 -
 50.2883 -
 50.2884 -FUNCTION Get_Other_Payee_Identity (
 50.2885 -   company_    IN VARCHAR2,
 50.2886 -   identity_   IN VARCHAR2,
 50.2887 -   party_type_ IN VARCHAR2 ) RETURN VARCHAR2
 50.2888 -IS
 50.2889 -   temp_  Public_Rec;
 50.2890 -BEGIN
 50.2891 -   temp_ := Get(company_, identity_, Party_Type_API.Encode(party_type_));
 50.2892 -   RETURN temp_.other_payee_identity;
 50.2893 -END Get_Other_Payee_Identity;
 50.2894 -
 50.2895 -FUNCTION Get_Interest_Template (
 50.2896 -   company_    IN VARCHAR2,
 50.2897 -   identity_ IN VARCHAR2,
 50.2898 -   party_type_ IN VARCHAR2 ) RETURN VARCHAR2
 50.2899 -IS
 50.2900 -   temp_  Public_Rec;
 50.2901 -BEGIN
 50.2902 -   temp_ := Get(company_, identity_, Party_Type_API.Encode(party_type_));
 50.2903 -   RETURN temp_.interest_template;
 50.2904 -END Get_Interest_Template;
 50.2905 -
 50.2906 -FUNCTION Get_Reminder_Template (
 50.2907 -   company_    IN VARCHAR2,
 50.2908 -   identity_   IN VARCHAR2,
 50.2909 -   party_type_ IN VARCHAR2 ) RETURN VARCHAR2
 50.2910 -IS
 50.2911 -   temp_ Public_Rec;
 50.2912 -BEGIN
 50.2913 -   temp_ := Get(company_, identity_, Party_Type_API.Encode(party_type_));
 50.2914 -   RETURN temp_.reminder_template;
 50.2915 -END Get_Reminder_Template;
 50.2916 -
 50.2917 -FUNCTION Get_Rule_Id (
 50.2918 -   company_    IN VARCHAR2,
 50.2919 -   identity_   IN VARCHAR2,
 50.2920 -   party_type_ IN VARCHAR2 ) RETURN VARCHAR2
 50.2921 -IS
 50.2922 -   temp_ &TABLE..rule_id%TYPE;
 50.2923 -   CURSOR get_attr (party_type_db_ IN VARCHAR2) IS
 50.2924 -      SELECT rule_id
 50.2925 -      FROM &TABLE
 50.2926 -      WHERE company = company_
 50.2927 -      AND   identity = identity_
 50.2928 -      AND   party_type = party_type_db_;
 50.2929 -BEGIN
 50.2930 -   IF (NOT Company_Finance_API.Is_User_Authorized(company_)) THEN
 50.2931 -      RETURN temp_;
 50.2932 -   END IF;
 50.2933 -   OPEN get_attr(Party_Type_API.Encode(party_type_));
 50.2934 -   FETCH get_attr INTO temp_;
 50.2935 -   CLOSE get_attr;
 50.2936 -   RETURN temp_;
 50.2937 -END Get_Rule_Id;
 50.2938 -
 50.2939 -FUNCTION Get_Payment_Receipt_Type (
 50.2940 -   company_    IN VARCHAR2,
 50.2941 -   identity_   IN VARCHAR2,
 50.2942 -   party_type_ IN VARCHAR2 ) RETURN VARCHAR2
 50.2943 -IS
 50.2944 -   temp_ &TABLE..payment_receipt_type%TYPE;
 50.2945 -   CURSOR get_attr (party_type_db_ IN VARCHAR2) IS
 50.2946 -      SELECT payment_receipt_type
 50.2947 -      FROM &TABLE
 50.2948 -      WHERE company = company_
 50.2949 -      AND   identity = identity_
 50.2950 -      AND   party_type = party_type_db_;
 50.2951 -BEGIN
 50.2952 -   OPEN get_attr(Party_Type_API.Encode(party_type_));
 50.2953 -   FETCH get_attr INTO temp_;
 50.2954 -   CLOSE get_attr;
 50.2955 -   RETURN Payment_Receipt_Type_API.Decode(temp_);
 50.2956 -END Get_Payment_Receipt_Type;
 50.2957 -
 50.2958 -FUNCTION Get_Payment_Receipt_Type_Db (
 50.2959 -   company_    IN VARCHAR2,
 50.2960 -   identity_   IN VARCHAR2,
 50.2961 -   party_type_ IN VARCHAR2 ) RETURN VARCHAR2
 50.2962 -IS
 50.2963 -   temp_ &TABLE..payment_receipt_type%TYPE;
 50.2964 -   CURSOR get_attr (party_type_db_ IN VARCHAR2) IS
 50.2965 -      SELECT payment_receipt_type
 50.2966 -      FROM &TABLE
 50.2967 -      WHERE company = company_
 50.2968 -      AND   identity = identity_
 50.2969 -      AND   party_type = party_type_db_;
 50.2970 -BEGIN
 50.2971 -   OPEN get_attr(Party_Type_API.Encode(party_type_));
 50.2972 -   FETCH get_attr INTO temp_;
 50.2973 -   CLOSE get_attr;
 50.2974 -   RETURN temp_;
 50.2975 -END Get_Payment_Receipt_Type_Db;
 50.2976 -
 50.2977 -PROCEDURE Instance_Exists (
 50.2978 -   info_       OUT VARCHAR2,
 50.2979 -   company_    IN  VARCHAR2,
 50.2980 -   identity_   IN  VARCHAR2,
 50.2981 -   party_type_ IN  VARCHAR2 )
 50.2982 -IS
 50.2983 -   CURSOR getrec (party_type_db_ IN VARCHAR2) IS
 50.2984 -      SELECT '1'
 50.2985 -      FROM   &TABLE
 50.2986 -      WHERE  company    = company_
 50.2987 -      AND    identity   = identity_
 50.2988 -      AND    party_type = party_type_db_;
 50.2989 -   lu_rec_ getrec%ROWTYPE;
 50.2990 -BEGIN
 50.2991 -   General_SYS.Init_Method(lu_name_, '&PKG', 'Instance_Exists');
 50.2992 -   OPEN getrec(Party_Type_API.Encode(party_type_));
 50.2993 -   FETCH getrec INTO lu_rec_;
 50.2994 -   IF (getrec%FOUND) THEN
 50.2995 -      info_ := 'TRUE';
 50.2996 -   ELSE
 50.2997 -      info_ := 'FALSE';
 50.2998 -   END IF;
 50.2999 -   CLOSE getrec;
 50.3000 -END Instance_Exists;
 50.3001 -
 50.3002 -PROCEDURE Create_Party_Type_Id (
 50.3003 -   company_    IN VARCHAR2,
 50.3004 -   identity_   IN VARCHAR2,
 50.3005 -   party_type_ IN VARCHAR2 )
 50.3006 -IS
 50.3007 -BEGIN
 50.3008 -   General_SYS.Init_Method(lu_name_, '&PKG', 'Create_Party_Type_Id');
 50.3009 -   Create_Identity_Pay_Info(company_, identity_, party_type_);
 50.3010 -END Create_Party_Type_Id;
 50.3011 -
 50.3012 -PROCEDURE Create_Identity_Pay_Info (
 50.3013 -   company_    IN VARCHAR2,
 50.3014 -   identity_   IN VARCHAR2,
 50.3015 -   party_type_ IN VARCHAR2 )
 50.3016 -IS
 50.3017 -   info_             VARCHAR2(2000);
 50.3018 -   objid_            &VIEW..objid%TYPE;
 50.3019 -   objversion_       &VIEW..objversion%TYPE;
 50.3020 -   attr_             VARCHAR2(2000);
 50.3021 -   def_template_     VARCHAR2(20);
 50.3022 -   nodefinteresttemp EXCEPTION;
 50.3023 -   nodefremindertemp EXCEPTION;
 50.3024 -   party_type_db_    &TABLE..party_type%TYPE;
 50.3025 -BEGIN
 50.3026 -   General_SYS.Init_Method(lu_name_, '&PKG', 'Create_Identity_Pay_Info');
 50.3027 -
 50.3028 -   party_type_db_ := Party_Type_API.Encode(party_type_);
 50.3029 -
 50.3030 -   New__(info_, objid_, objversion_, attr_, 'PREPARE');
 50.3031 -   Client_SYS.Add_To_Attr('COMPANY', company_, attr_);
 50.3032 -   Client_SYS.Add_To_Attr('IDENTITY', identity_, attr_);
 50.3033 -   Client_SYS.Add_To_Attr('PARTY_TYPE', party_type_, attr_);
 50.3034 -   IF (party_type_db_ = 'SUPPLIER') THEN
 50.3035 -      Client_SYS.Add_To_Attr('BLOCKED_FOR_PAYMENT', 'FALSE', attr_);
 50.3036 -      Client_SYS.Add_To_Attr('PRIORITY', 1, attr_);
 50.3037 -      Client_SYS.Add_To_Attr('CHECK_RECIPIENT', 'PAYEE', attr_);
 50.3038 -   ELSIF (party_type_db_ = 'CUSTOMER') THEN
 50.3039 -      def_template_ := Interest_Template_API.Get_Default_Template(company_);
 50.3040 -      IF (def_template_ IS NULL) THEN
 50.3041 -         RAISE nodefinteresttemp;
 50.3042 -      ELSE
 50.3043 -         Client_SYS.Add_To_Attr('INTEREST_TEMPLATE', def_template_, attr_);
 50.3044 -      END IF;
 50.3045 -      def_template_ := Reminder_Template_API.Get_Default_Template(company_);
 50.3046 -      IF (def_template_ IS NULL) THEN
 50.3047 -         RAISE nodefremindertemp;
 50.3048 -      ELSE
 50.3049 -         Client_SYS.Add_To_Attr('REMINDER_TEMPLATE', def_template_, attr_);
 50.3050 -      END IF;
 50.3051 -      IF Company_Invoice_Info_API.Get_Use_Tax_Invoice(company_) = 'TRUE' THEN
 50.3052 -         Client_SYS.Add_To_Attr('PAYMENT_RECEIPT_TYPE_DB', 'AT_MATCHING', attr_);
 50.3053 -      ELSE
 50.3054 -         Client_SYS.Add_To_Attr('PAYMENT_RECEIPT_TYPE_DB', 'NO_RECEIPT', attr_);
 50.3055 -      END IF;
 50.3056 -   END IF;
 50.3057 -   New__(info_, objid_, objversion_, attr_, 'DO');
 50.3058 -EXCEPTION
 50.3059 -   WHEN nodefremindertemp THEN
 50.3060 -      Error_SYS.Record_General(lu_name_, 'NODEFREMINDERTEMP: There is no default reminder template defined');
 50.3061 -   WHEN nodefinteresttemp THEN
 50.3062 -      Error_SYS.Record_General(lu_name_, 'NODEFINTERESTTEMP: There is no default interest template defined');
 50.3063 -END Create_Identity_Pay_Info;
 50.3064 -
 50.3065 -FUNCTION Validate_Identity (
 50.3066 -   company_    IN VARCHAR2,
 50.3067 -   party_type_ IN VARCHAR2,
 50.3068 -   identity_   IN VARCHAR2 ) RETURN VARCHAR2
 50.3069 -IS
 50.3070 -   dummy_ NUMBER;
 50.3071 -   CURSOR exist_identity (party_type_db_ IN VARCHAR2) IS
 50.3072 -      SELECT 1
 50.3073 -      FROM   &TABLE
 50.3074 -      WHERE  company    = company_
 50.3075 -      AND    party_type = party_type_db_
 50.3076 -      AND    identity   = identity_ ;
 50.3077 -BEGIN
 50.3078 -   OPEN exist_identity(Party_Type_API.Encode(party_type_));
 50.3079 -   FETCH exist_identity INTO dummy_;
 50.3080 -   IF (exist_identity %FOUND) THEN
 50.3081 -      CLOSE exist_identity ;
 50.3082 -      RETURN('TRUE');
 50.3083 -   END IF;
 50.3084 -   CLOSE exist_identity ;
 50.3085 -   RETURN('FALSE');
 50.3086 -END Validate_Identity;
 50.3087 -
 50.3088 -PROCEDURE Fetch_Tolerance (
 50.3089 -   amount_tolerance_   OUT NUMBER,
 50.3090 -   percent_tolerance_  OUT NUMBER,
 50.3091 -   company_            IN VARCHAR2,
 50.3092 -   identity_           IN VARCHAR2,
 50.3093 -   party_type_         IN VARCHAR2,
 50.3094 -   currency_           IN VARCHAR2,
 50.3095 -   curr_rate_          IN NUMBER,
 50.3096 -   conv_factor_        IN NUMBER,
 50.3097 -   date_               IN DATE,
 50.3098 -   action_             IN VARCHAR2 )
 50.3099 -IS
 50.3100 -   acc_currency_              VARCHAR2(20);
 50.3101 -   div_factor_                NUMBER;
 50.3102 -   amount_tolerance_acc_curr_ NUMBER;
 50.3103 -   currency_rate_             NUMBER;
 50.3104 -   dummy_                     VARCHAR2(5);
 50.3105 -   party_type_db_             VARCHAR2(20);
 50.3106 -
 50.3107 -   CURSOR get_identity_tolerance_ IS
 50.3108 -      SELECT percent_tolerance, amount_tolerance
 50.3109 -      FROM   &TABLE
 50.3110 -      WHERE  company = company_
 50.3111 -      AND    identity = identity_
 50.3112 -      AND    party_type = party_type_db_;
 50.3113 -
 50.3114 -   CURSOR get_company_tolerance_ IS
 50.3115 -      SELECT percent_tolerance, amount_tolerance
 50.3116 -      FROM   COMPANY_PAY_INFO_TAB
 50.3117 -      WHERE  company = company_;
 50.3118 -
 50.3119 -BEGIN
 50.3120 -   General_SYS.Init_Method(lu_name_, '&PKG', 'Fetch_Tolerance');
 50.3121 -
 50.3122 -   party_type_db_ := Party_Type_API.Encode(party_type_);
 50.3123 -
 50.3124 -   IF party_type_db_ = 'CUSTOMER' THEN
 50.3125 -       OPEN  get_identity_tolerance_;
 50.3126 -       FETCH get_identity_tolerance_  INTO percent_tolerance_, amount_tolerance_acc_curr_;
 50.3127 -       CLOSE get_identity_tolerance_;
 50.3128 -
 50.3129 -   -- general payment tolerance
 50.3130 -      IF percent_tolerance_ IS NULL AND amount_tolerance_acc_curr_ IS NULL THEN
 50.3131 -         OPEN  get_company_tolerance_;
 50.3132 -         FETCH get_company_tolerance_  INTO percent_tolerance_, amount_tolerance_acc_curr_;
 50.3133 -         CLOSE get_company_tolerance_;
 50.3134 -      END IF;
 50.3135 -
 50.3136 -   ELSIF party_type_db_ = 'SUPPLIER' THEN
 50.3137 -   -- general payment tolerance
 50.3138 -         OPEN  get_company_tolerance_;
 50.3139 -         FETCH get_company_tolerance_  INTO percent_tolerance_, amount_tolerance_acc_curr_;
 50.3140 -         CLOSE get_company_tolerance_;
 50.3141 -   END IF;
 50.3142 -
 50.3143 -   IF action_ = 'NOCALCULATE' THEN
 50.3144 -      amount_tolerance_ := amount_tolerance_acc_curr_;
 50.3145 -      RETURN;
 50.3146 -   END IF;
 50.3147 -
 50.3148 -   acc_currency_ := Company_Finance_API.Get_Currency_Code(company_);
 50.3149 -
 50.3150 -   IF acc_currency_ = currency_ THEN
 50.3151 -      amount_tolerance_ := amount_tolerance_acc_curr_;
 50.3152 -      RETURN;
 50.3153 -   END IF;
 50.3154 -   div_factor_:= conv_factor_;
 50.3155 -   currency_rate_ := curr_rate_;
 50.3156 -   IF ( (div_factor_ IS NULL) OR (currency_rate_ IS NULL)) THEN
 50.3157 -      Payment_Library_API.Get_Currency_Rate(
 50.3158 -         currency_rate_,
 50.3159 -         div_factor_,
 50.3160 -         dummy_,
 50.3161 -         dummy_,
 50.3162 -         company_,
 50.3163 -         currency_,
 50.3164 -         NVL( date_, sysdate),
 50.3165 -         NULL,
 50.3166 -         party_type_db_,
 50.3167 -         identity_
 50.3168 -         );
 50.3169 -   END IF;
 50.3170 -   IF (date_ IS NOT NULL) AND ((div_factor_ IS NULL) OR (currency_rate_ IS NULL)) THEN
 50.3171 -      Payment_Library_API.Get_Currency_Rate(
 50.3172 -         currency_rate_,
 50.3173 -         div_factor_,
 50.3174 -         dummy_,
 50.3175 -         dummy_,
 50.3176 -         company_,
 50.3177 -         currency_,
 50.3178 -         sysdate,
 50.3179 -         NULL,
 50.3180 -         party_type_db_,
 50.3181 -         identity_
 50.3182 -         );
 50.3183 -   END IF;
 50.3184 -
 50.3185 -   Payment_Library_API.Recalculate_To_Curr_Round(
 50.3186 -      amount_tolerance_,
 50.3187 -      company_,
 50.3188 -      amount_tolerance_acc_curr_,
 50.3189 -      curr_rate_,
 50.3190 -      div_factor_,
 50.3191 -      currency_);
 50.3192 -END Fetch_Tolerance;
 50.3193 -
 50.3194 -PROCEDURE Copy_Payway_Per_Identity___ (
 50.3195 -   company_               IN VARCHAR2,
 50.3196 -   identity_              IN VARCHAR2,
 50.3197 -   party_type_db_         IN VARCHAR2,
 50.3198 -   new_identity_          IN VARCHAR2 )
 50.3199 -IS
 50.3200 -   CURSOR get_pay_way IS
 50.3201 -      SELECT *
 50.3202 -      FROM   PAYMENT_WAY_PER_IDENTITY_TAB
 50.3203 -      WHERE  company    = company_
 50.3204 -        AND  identity   = identity_
 50.3205 -        AND  party_type = party_type_db_;
 50.3206 -BEGIN
 50.3207 -   FOR pay_way_ IN get_pay_way LOOP
 50.3208 -        INSERT INTO PAYMENT_WAY_PER_IDENTITY_TAB (company, identity, party_type,
 50.3209 -                                                  way_id, default_payment_way, rowversion )
 50.3210 -               VALUES (pay_way_.company, new_identity_, pay_way_.party_type,
 50.3211 -                       pay_way_.way_id, pay_way_.default_payment_way, 1 );
 50.3212 -   END LOOP;
 50.3213 -END Copy_Payway_Per_Identity___;
 50.3214 -
 50.3215 -PROCEDURE Copy_Payment_Address___ (
 50.3216 -   company_               IN VARCHAR2,
 50.3217 -   identity_              IN VARCHAR2,
 50.3218 -   party_type_db_         IN VARCHAR2,
 50.3219 -   new_identity_          IN VARCHAR2 )
 50.3220 -IS
 50.3221 -   CURSOR get_pay_addr IS
 50.3222 -      SELECT *
 50.3223 -      FROM   PAYMENT_ADDRESS_TAB
 50.3224 -      WHERE  company    = company_
 50.3225 -        AND  identity   = identity_
 50.3226 -        AND  party_type = party_type_db_;
 50.3227 -BEGIN
 50.3228 -   FOR pay_addr_ IN get_pay_addr LOOP
 50.3229 -      -- Bug 72177, Begin, Added bic_code
 50.3230 -      INSERT INTO PAYMENT_ADDRESS_TAB (company, identity, party_type, way_id,
 50.3231 -                                       address_id,description, default_address,
 50.3232 -                                       data1, data2, data3, data4, data5, data6,
 50.3233 -                                       data7, data8, data9, data10, data11, data12,
 50.3234 -                                       data13, data14, data15, data16, data17, data18,
 50.3235 -                                       data19, data20, data21, data22,
 50.3236 -                                       account, bic_code, rowversion, rowtype )
 50.3237 -             VALUES (pay_addr_.company, new_identity_, pay_addr_.party_type, pay_addr_.way_id,
 50.3238 -                     pay_addr_.address_id,
 50.3239 -                     pay_addr_.description, pay_addr_.default_address,
 50.3240 -                     pay_addr_.data1, pay_addr_.data2, pay_addr_.data3,
 50.3241 -                     pay_addr_.data4, pay_addr_.data5, pay_addr_.data6,
 50.3242 -                     pay_addr_.data7, pay_addr_.data8, pay_addr_.data9,
 50.3243 -                     pay_addr_.data10, pay_addr_.data11, pay_addr_.data12,
 50.3244 -                     pay_addr_.data13, pay_addr_.data14, pay_addr_.data15,
 50.3245 -                     pay_addr_.data16, pay_addr_.data17, pay_addr_.data18,
 50.3246 -                     pay_addr_.data19, pay_addr_.data20, pay_addr_.data21,
 50.3247 -                     pay_addr_.data22,pay_addr_.account, pay_addr_.bic_code, 1, pay_addr_.rowtype );
 50.3248 -      -- Bug 72177, End
 50.3249 -
 50.3250 -   END LOOP;
 50.3251 -END Copy_Payment_Address___;
 50.3252 -
 50.3253 -PROCEDURE Copy_Customer (
 50.3254 -   customer_identity_old_ IN VARCHAR2,
 50.3255 -   customer_identity_new_ IN VARCHAR2,
 50.3256 -   company_               IN VARCHAR2 )
 50.3257 -IS
 50.3258 -   CURSOR get_customer IS
 50.3259 -      SELECT *
 50.3260 -      FROM   IDENTITY_PAY_INFO_TAB
 50.3261 -      WHERE  identity   = customer_identity_old_
 50.3262 -        AND  company    = company_
 50.3263 -        AND  party_type = 'CUSTOMER';
 50.3264 -
 50.3265 -   CURSOR get_credit_info IS
 50.3266 -      SELECT *
 50.3267 -      FROM   CUSTOMER_CREDIT_INFO_TAB
 50.3268 -      WHERE  identity = customer_identity_old_
 50.3269 -        AND  company = company_;
 50.3270 -
 50.3271 -   format_no_ NUMBER;
 50.3272 -BEGIN
 50.3273 -   General_SYS.Init_Method(lu_name_, '&PKG', 'Copy_Customer');
 50.3274 -   FOR customer_ IN get_customer LOOP
 50.3275 -      format_no_ := Get_Next_Format_No___ (company_);
 50.3276 -      -- Bug 73125, Begin, Added template_id 
 50.3277 -      INSERT INTO IDENTITY_PAY_INFO_TAB (company, identity, party_type,
 50.3278 -                                         reminder_template, interest_template, payment_delay,
 50.3279 -                                         amount_tolerance, percent_tolerance, disc_days_tolerance,
 50.3280 -                                         netting_allowed, format_no, payment_advice,
 50.3281 -                                         deduction_group, corporation_id,
 50.3282 -                                         other_payee_identity, member_id,
 50.3283 -                                         send_reminder_to_payer, send_interest_inv_to_payer,
 50.3284 -                                         payment_receipt_type,send_statement_of_acc_to_payer ,
 50.3285 -                                         next_payment_matching_id,
 50.3286 -                                         template_id,rowversion )
 50.3287 -             VALUES (customer_.company, customer_identity_new_, 'CUSTOMER',
 50.3288 -                     customer_.reminder_template, customer_.interest_template, customer_.payment_delay,
 50.3289 -                     customer_.amount_tolerance, customer_.percent_tolerance, customer_.disc_days_tolerance,
 50.3290 -                     customer_.netting_allowed, format_no_, customer_.payment_advice,
 50.3291 -                     customer_.deduction_group, customer_.corporation_id,
 50.3292 -                     customer_.other_payee_identity, customer_.member_id,
 50.3293 -                     customer_.send_reminder_to_payer, customer_.send_interest_inv_to_payer,
 50.3294 -                     customer_.payment_receipt_type,
 50.3295 -                     customer_.send_statement_of_acc_to_payer, 1,
 50.3296 -                     customer_.template_id,1 );
 50.3297 -      -- Bug 73125, End
 50.3298 -
 50.3299 -
 50.3300 -      Copy_Payway_Per_Identity___( customer_.company,
 50.3301 -                                   customer_identity_old_,
 50.3302 -                                   'CUSTOMER',
 50.3303 -                                   customer_identity_new_ );
 50.3304 -      Copy_Payment_Address___( customer_.company,
 50.3305 -                               customer_identity_old_,
 50.3306 -                               'CUSTOMER',
 50.3307 -                               customer_identity_new_ );
 50.3308 -   END LOOP;
 50.3309 -
 50.3310 -   FOR credit_ IN get_credit_info LOOP
 50.3311 -      INSERT INTO CUSTOMER_CREDIT_INFO_TAB (company, identity, last4q_sales,
 50.3312 -                                            note_text, credit_number, credit_rating, avg_days_for_payment,
 50.3313 -                                            credit_comments,credit_limit,credit_block,
 50.3314 -                                            next_review_date,corp_credit_relation_exist,
 50.3315 -                                            credit_relationship_type,message_type,
 50.3316 -                                            party_type,parent_identity,parent_company,
 50.3317 -                                            credit_analyst_code,rowversion )
 50.3318 -             VALUES (credit_.company, customer_identity_new_, credit_.last4q_sales,
 50.3319 -                     credit_.note_text, credit_.credit_number, credit_.credit_rating, credit_.avg_days_for_payment,
 50.3320 -                     credit_.credit_comments,credit_.credit_limit,credit_.credit_block,
 50.3321 -                     credit_.next_review_date,'FALSE',
 50.3322 -                     NULL,credit_.message_type,
 50.3323 -                     credit_.party_type,NULL,NULL,
 50.3324 -                     credit_.credit_analyst_code, sysdate );
 50.3325 -   END LOOP;
 50.3326 -END Copy_Customer;
 50.3327 -
 50.3328 -PROCEDURE Copy_Supplier (
 50.3329 -   supplier_identity_old_ IN VARCHAR2,
 50.3330 -   supplier_identity_new_ IN VARCHAR2,
 50.3331 -   company_               IN VARCHAR2 )
 50.3332 -IS
 50.3333 -   CURSOR get_supplier IS
 50.3334 -      SELECT *
 50.3335 -      FROM   IDENTITY_PAY_INFO_TAB
 50.3336 -      WHERE  identity   = supplier_identity_old_
 50.3337 -        AND  company    = company_
 50.3338 -        AND  party_type = 'SUPPLIER';
 50.3339 -
 50.3340 -   attr_       VARCHAR2(2000);
 50.3341 -   info_       VARCHAR2(2000);
 50.3342 -   objid_      VARCHAR2(2000);
 50.3343 -   objversion_ VARCHAR2(2000);
 50.3344 -   format_no_  NUMBER;
 50.3345 -BEGIN
 50.3346 -   General_SYS.Init_Method(lu_name_, '&PKG', 'Copy_Supplier');
 50.3347 -   FOR supplier_ IN get_supplier LOOP
 50.3348 -      format_no_ := Get_Next_Format_No___ (company_);
 50.3349 -      -- Bug 73125, Begin, Added template_id 
 50.3350 -      INSERT INTO IDENTITY_PAY_INFO_TAB (company, identity, party_type,
 50.3351 -                                         priority, blocked_for_payment,
 50.3352 -                                         reminder_template, interest_template,
 50.3353 -                                         amount_tolerance, percent_tolerance,
 50.3354 -                                         netting_allowed, format_no,
 50.3355 -                                         payment_advice, next_payment_matching_id,check_recipient,
 50.3356 -                                         template_id, rowversion )
 50.3357 -             VALUES (supplier_.company, supplier_identity_new_, 'SUPPLIER',
 50.3358 -                     supplier_.priority, supplier_.blocked_for_payment,
 50.3359 -                     supplier_.reminder_template, supplier_.interest_template,
 50.3360 -                     supplier_.amount_tolerance, supplier_.percent_tolerance,
 50.3361 -                     supplier_.netting_allowed,  format_no_,
 50.3362 -                     supplier_.payment_advice, 1, supplier_.check_recipient,
 50.3363 -                     supplier_.template_id,1 );
 50.3364 -      -- Bug 73125, End
 50.3365 -      Copy_Payway_Per_Identity___( supplier_.company,
 50.3366 -                                   supplier_identity_old_,
 50.3367 -                                   'SUPPLIER',
 50.3368 -                                   supplier_identity_new_ );
 50.3369 -      Copy_Payment_Address___( supplier_.company,
 50.3370 -                               supplier_identity_old_,
 50.3371 -                               'SUPPLIER',
 50.3372 -                               supplier_identity_new_ );
 50.3373 -   END LOOP;
 50.3374 -END Copy_Supplier;
 50.3375 -
 50.3376 -FUNCTION Get (
 50.3377 -   company_       IN VARCHAR2,
 50.3378 -   identity_      IN VARCHAR2,
 50.3379 -   party_type_db_ IN VARCHAR2 ) RETURN Public_Rec
 50.3380 -IS
 50.3381 -   temp_ Public_Rec;
 50.3382 -   CURSOR get_attr IS
 50.3383 -      SELECT priority, blocked_for_payment, other_payee_identity, interest_template, reminder_template,payment_delay,
 50.3384 -             amount_tolerance, percent_tolerance, disc_days_tolerance, netting_allowed, format_no, payment_advice,
 50.3385 -             deduction_group,corporation_id,member_id,send_reminder_to_payer,send_interest_inv_to_payer,payment_receipt_type, 
 50.3386 -             template_id, check_recipient, send_statement_of_acc_to_payer
 50.3387 -      FROM &TABLE
 50.3388 -      WHERE company = company_
 50.3389 -      AND   identity = identity_
 50.3390 -      AND   party_type = party_type_db_;
 50.3391 -BEGIN
 50.3392 -   IF (NOT Company_Finance_API.Is_User_Authorized(company_)) THEN
 50.3393 -      RETURN temp_;
 50.3394 -   END IF;
 50.3395 -
 50.3396 -   OPEN get_attr;
 50.3397 -   FETCH get_attr INTO temp_;
 50.3398 -   CLOSE get_attr;
 50.3399 -   RETURN temp_;
 50.3400 -END Get;
 50.3401 -
 50.3402 -PROCEDURE User_Allowed___(
 50.3403 -   company_   IN VARCHAR2)
 50.3404 -IS
 50.3405 -  fnd_user_  VARCHAR2(2000);
 50.3406 -
 50.3407 -BEGIN
 50.3408 -
 50.3409 -  fnd_user_ := Fnd_Session_API.Get_Fnd_User;
 50.3410 -
 50.3411 -  IF NOT (company_finance_api.Is_User_Authorized(company_)) then
 50.3412 -        Error_SYS.Appl_General(lu_name_,'NOTUSERALLOWED: User :P1 is not allowed to use Company :P2',fnd_user_,company_);
 50.3413 -  END IF;
 50.3414 -
 50.3415 -END User_Allowed___;
 50.3416 -
 50.3417 -
 50.3418 --- --------------------------------------------------------------------------
 50.3419 --- Server-side functions used by new report (Output Servicese)
 50.3420 --- --------------------------------------------------------------------------
 50.3421 -FUNCTION Get_Group_For_Identity (
 50.3422 -   company_               IN VARCHAR2,
 50.3423 -   identity_              IN VARCHAR2,
 50.3424 -   party_type_db_         IN VARCHAR2 ) RETURN VARCHAR2
 50.3425 -IS
 50.3426 -   CURSOR get_group IS
 50.3427 -      SELECT group_id
 50.3428 -      FROM   IDENTITY_INVOICE_INFO
 50.3429 -      WHERE  company = company_
 50.3430 -        AND  identity = identity_
 50.3431 -        AND  party_type_db = party_type_db_ ;
 50.3432 -   group_id_       VARCHAR2(20);
 50.3433 -BEGIN
 50.3434 -   OPEN  get_group;
 50.3435 -   FETCH get_group INTO group_id_;
 50.3436 -   IF (get_group%NOTFOUND) THEN
 50.3437 -      CLOSE get_group;
 50.3438 -      RETURN NULL;
 50.3439 -   END IF;
 50.3440 -   CLOSE get_group;
 50.3441 -
 50.3442 -   RETURN group_id_;
 50.3443 -END Get_Group_For_Identity;
 50.3444 -
 50.3445 -PROCEDURE Make_Company (
 50.3446 -   attr_         IN VARCHAR2 )
 50.3447 -IS
 50.3448 -   rec_        Enterp_Comp_Connect_V160_API.Crecomp_Lu_Public_Rec;
 50.3449 -BEGIN
 50.3450 -   General_SYS.Init_Method(lu_name_, '&PKG', 'Make_Company');
 50.3451 -
 50.3452 -   rec_ := Enterp_Comp_Connect_V160_API.Get_Crecomp_Lu_Rec('&MODULE', attr_);
 50.3453 -
 50.3454 -   IF (rec_.make_company = 'EXPORT') THEN
 50.3455 -      Export___(rec_);
 50.3456 -   ELSIF (rec_.make_company = 'IMPORT') THEN
 50.3457 -      IF (rec_.action = 'NEW') THEN
 50.3458 -         Import___(rec_);
 50.3459 -      ELSIF (rec_.action = 'DUPLICATE') THEN
 50.3460 -         Copy___(rec_);
 50.3461 -      END IF;
 50.3462 -   END IF;
 50.3463 -END Make_Company;
 50.3464 -
 50.3465 -FUNCTION Cust_Open_Items_Exist (
 50.3466 -   company_ 	IN VARCHAR2,
 50.3467 -   identity_ 	IN VARCHAR2 ) RETURN VARCHAR2
 50.3468 -IS
 50.3469 -   dummy_ NUMBER;
 50.3470 -   CURSOR exist_control IS
 50.3471 -      SELECT 1
 50.3472 -      FROM   LEDGER_ITEM_TAB
 50.3473 -      WHERE  company = company_
 50.3474 -      AND    identity = identity_
 50.3475 -      AND    (payer_identity IS NOT NULL AND payer_identity != identity)
 50.3476 -      AND    ledger_status_type = 'NORMAL'
 50.3477 -      AND   ((fully_paid_voucher_date IS NULL) OR
 50.3478 -             (rowstate in ('Unpaid', 'PartlyPaid'))
 50.3479 -             OR (rowstate in ('Created', 'BeforeDueDate', 'SentForCashing')))
 50.3480 -      AND   (party_type = 'CUSTOMER' OR (party_type = 'COMPANY' AND parked_pay_type = 'CUSTOMER'));
 50.3481 -
 50.3482 -BEGIN
 50.3483 -   General_SYS.Init_Method(lu_name_, '&PKG', 'Cust_Open_Items_Exist');
 50.3484 -   OPEN exist_control;
 50.3485 -   FETCH exist_control INTO dummy_;
 50.3486 -   IF (exist_control%FOUND) THEN
 50.3487 -      CLOSE exist_control;
 50.3488 -      RETURN('TRUE');
 50.3489 -   END IF;
 50.3490 -   CLOSE exist_control;
 50.3491 -   RETURN('FALSE');
 50.3492 -END Cust_Open_Items_Exist;
 50.3493 -
 50.3494 -FUNCTION Get_Send_Stmt_Of_Acc_To_Payer (
 50.3495 -   company_    IN VARCHAR2,
 50.3496 -   identity_   IN VARCHAR2,
 50.3497 -   party_type_ IN VARCHAR2 ) RETURN VARCHAR2
 50.3498 -IS
 50.3499 -   temp_  Public_Rec;
 50.3500 -BEGIN
 50.3501 -   IF (NOT Company_Finance_API.Is_User_Authorized(company_)) THEN
 50.3502 -      RETURN NULL;
 50.3503 -   END IF;
 50.3504 -   temp_ := Get(company_, identity_, Party_Type_API.Encode(party_type_));
 50.3505 -   RETURN temp_.send_statement_of_acc_to_payer;
 50.3506 -END Get_Send_Stmt_Of_Acc_To_Payer;
 50.3507 ------------------------------------------------------------------------------
 50.3508 --------------------- FOUNDATION1 METHODS ------------------------------------
 50.3509 ------------------------------------------------------------------------------
 50.3510 --- Init
 50.3511 ---   Dummy procedure that can be called at database startup to ensure that
 50.3512 ---   this package is loaded into memory for performance reasons only.
 50.3513 ------------------------------------------------------------------------------
 50.3514 -
 50.3515 -PROCEDURE Init
 50.3516 -IS
 50.3517 -BEGIN
 50.3518 -   NULL;
 50.3519 -END Init;
 50.3520 -
 50.3521 -
 50.3522 -END &PKG;
 50.3523 -/
 50.3524 -SHOW ERROR
 50.3525 -
 50.3526 ------------------------------------------------------------------------------
 50.3527 -
 50.3528 -----------------------------------------------------------
 50.3529 --- <UNDEFINE_SECTION>
 50.3530 -----------------------------------------------------------
 50.3531 --- This section is reserved for undefine statements
 50.3532 --- nothing should be manually written below because
 50.3533 --- that would be overwritten everytime the IFS / Undefine
 50.3534 --- tool is run.
 50.3535 --- Also do NOT make any changes to the above tag because
 50.3536 --- this will result in duplicated code
 50.3537 -----------------------------------------------------------
 50.3538 -UNDEFINE MODULE
 50.3539 -UNDEFINE LU
 50.3540 -UNDEFINE TABLE
 50.3541 -
 50.3542 -UNDEFINE VIEW
 50.3543 -UNDEFINE VIEWPCT
 50.3544 -UNDEFINE VIEW_SU_QRY
 50.3545 -UNDEFINE VIEW_CU_QRY
 50.3546 -UNDEFINE VIEW_SUPP
 50.3547 -UNDEFINE VIEW_CUST
 50.3548 -UNDEFINE VIEW_MULTI_CUST
 50.3549 -UNDEFINE VIEW_MULTI_SUP
 50.3550 -UNDEFINE VIEW_LOV
 50.3551 -UNDEFINE VIEW_ALL
 50.3552 -UNDEFINE VIEW_MULTI_CUS
 50.3553 -UNDEFINE VIEW_MULTI_SUP
 50.3554 -UNDEFINE VIEW_MULTI_ADD
 50.3555 -
 50.3556 -UNDEFINE PKG
 50.3557 -UNDEFINE OBJID
 50.3558 -UNDEFINE OBJVERSION
 50.3559 -UNDEFINE OBJID_PTIPI
 50.3560 -UNDEFINE OBJVERSION_PTIPI
    51.1 --- a/PLSQL/Lexer/test/unit/src/org/netbeans/modules/plsql/lexer/InstallationSite.apy	Wed May 15 16:07:35 2013 +0200
    51.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    51.3 @@ -1,739 +0,0 @@
    51.4 ------------------------------------------------------------------------------
    51.5 ---
    51.6 ---  Logical unit: InstallationSite
    51.7 ---
    51.8 ---  Purpose:
    51.9 ---
   51.10 ---  IFS/Design Template Version 2.2
   51.11 ---
   51.12 ---  Date    Sign  History
   51.13 ---  ------  ----  -----------------------------------------------------------
   51.14 ---  000101  JhMa  Created.
   51.15 ---  000621  ROOD  Modified parameters in Get_Timezone_Difference_.
   51.16 ---  000628  ROOD  Changes in error handling.
   51.17 ---  000808  ROOD  Completed the upgrade to Yoshimura template (Bug#15811).
   51.18 ---  020128  ROOD  Modified view and business logic to handle 
   51.19 ---                attribute translations (ToDo#4070).
   51.20 ---  020702  ROOD  Corrected usage of General_SYS.Init_Method (ToDo#4087).
   51.21 ---  030212  ROOD  Changed module to FNDBAS (ToDo#4149).
   51.22 ---  040408  HAAR  Unicode bulk changes, removed extensive use of Substr and/or Substrb (F1PR408B).
   51.23 ------------------------------------------------------------------------------
   51.24 -
   51.25 -DEFINE MODULE        = FNDBAS
   51.26 -DEFINE LU            = InstallationSite
   51.27 -DEFINE TABLE         = INSTALLATION_SITE_TAB
   51.28 -DEFINE VIEW          = INSTALLATION_SITE
   51.29 -DEFINE PKG           = INSTALLATION_SITE_API
   51.30 -DEFINE LOV_VIEW      = USER_DB_LINKS_LOV
   51.31 -
   51.32 -DEFINE OBJID         = rowid
   51.33 -DEFINE OBJVERSION    = "ltrim(lpad(to_char(rowversion,'YYYYMMDDHH24MISS'),2000))"
   51.34 -
   51.35 ------------------------------------------------------------------------------
   51.36 --------------------- VIEWS FOR SELECTS --------------------------------------
   51.37 ------------------------------------------------------------------------------
   51.38 -
   51.39 -PROMPT Creating &LOV_VIEW view
   51.40 -
   51.41 -CREATE OR REPLACE FORCE VIEW &LOV_VIEW AS
   51.42 -SELECT Db_Link                        Db_Link
   51.43 -FROM   user_db_links
   51.44 -WITH   read only;
   51.45 -
   51.46 -COMMENT ON TABLE &LOV_VIEW
   51.47 -   IS 'LU=&LU^PROMPT=Installation Site^MODULE=&MODULE^';
   51.48 -
   51.49 -COMMENT ON COLUMN &LOV_VIEW..Db_Link
   51.50 -   IS 'FLAGS=K---L^DATATYPE=STRING(128)/UPPERCASE^PROMPT=Db Link^';
   51.51 -
   51.52 -
   51.53 -PROMPT Creating &VIEW view
   51.54 -
   51.55 -CREATE OR REPLACE FORCE VIEW &VIEW AS
   51.56 -SELECT site_id                        site_id,
   51.57 -       timezone_difference            timezone_difference,
   51.58 -       nvl(Module_Translate_Attr_Util_API.Get_Attribute_Translation('&MODULE', '&LU', site_id ),description)     description,
   51.59 -       this_site                      this_site,
   51.60 -       database_link                  database_link,
   51.61 -       &OBJID                         objid,
   51.62 -       &OBJVERSION                    objversion
   51.63 -FROM   installation_site_tab
   51.64 -WITH   read only;
   51.65 -
   51.66 -COMMENT ON TABLE &VIEW
   51.67 -   IS 'LU=&LU^PROMPT=Installation Site^MODULE=&MODULE^';
   51.68 -
   51.69 -COMMENT ON COLUMN &VIEW..site_id
   51.70 -   IS 'FLAGS=KMI-L^DATATYPE=STRING(30)/UPPERCASE^PROMPT=Site Id^';
   51.71 -COMMENT ON COLUMN &VIEW..timezone_difference
   51.72 -   IS 'FLAGS=AMIU-^DATATYPE=NUMBER^PROMPT=Timezone Difference^';
   51.73 -COMMENT ON COLUMN &VIEW..description
   51.74 -   IS 'FLAGS=A-IUL^DATATYPE=STRING(255)^PROMPT=Description^';
   51.75 -COMMENT ON COLUMN &VIEW..this_site
   51.76 -   IS 'FLAGS=AMIU-^DATATYPE=STRING(5)/UPPERCASE^PROMPT=This Site^';
   51.77 -COMMENT ON COLUMN &VIEW..database_link
   51.78 -   IS 'FLAGS=A-IU-^DATATYPE=STRING(128)/UPPERCASE^PROMPT=Database Link^';
   51.79 -
   51.80 ------------------------------------------------------------------------------
   51.81 --------------------- PACKAGES FOR METHODS -----------------------------------
   51.82 ------------------------------------------------------------------------------
   51.83 -
   51.84 -PROMPT Creating &PKG implementation
   51.85 -
   51.86 -CREATE OR REPLACE PACKAGE BODY &PKG IS
   51.87 -
   51.88 ------------------------------------------------------------------------------
   51.89 --------------------- LU SPECIFIC IMPLEMENTATION METHOD DECLARATIONS ---------
   51.90 ------------------------------------------------------------------------------
   51.91 -
   51.92 -
   51.93 ------------------------------------------------------------------------------
   51.94 --------------------- IMPLEMENTATION BASE METHODS ----------------------------
   51.95 ------------------------------------------------------------------------------
   51.96 --- Lock_By_Id___
   51.97 ---    Client-support to lock a specific instance of the logical unit.
   51.98 ---
   51.99 --- Lock_By_Keys___
  51.100 ---    Server support to lock a specific instance of the logical unit.
  51.101 ---
  51.102 --- Get_Object_By_Id___
  51.103 ---    Get LU-record from the database with a specified object identity.
  51.104 ---
  51.105 --- Get_Object_By_Keys___
  51.106 ---    Get LU-record from the database with specified key columns.
  51.107 ---
  51.108 --- Check_Exist___
  51.109 ---    Check if a specific LU-instance already exist in the database.
  51.110 ---
  51.111 --- Get_Id_Version_By_Keys___
  51.112 ---    Get the current OBJID and OBJVERSION for a specific LU-instance.
  51.113 ------------------------------------------------------------------------------
  51.114 -
  51.115 -FUNCTION Lock_By_Id___ (
  51.116 -   objid_      IN  VARCHAR2,
  51.117 -   objversion_ IN  VARCHAR2 ) RETURN &TABLE%ROWTYPE
  51.118 -IS
  51.119 -   row_changed EXCEPTION;
  51.120 -   row_deleted EXCEPTION;
  51.121 -   row_locked  EXCEPTION;
  51.122 -   PRAGMA      exception_init(row_locked, -0054);
  51.123 -   rec_        &TABLE%ROWTYPE;
  51.124 -   dummy_      NUMBER;
  51.125 -   CURSOR lock_control IS
  51.126 -      SELECT *
  51.127 -      FROM   &TABLE
  51.128 -      WHERE  &OBJID = objid_
  51.129 -      AND    &OBJVERSION = objversion_
  51.130 -      FOR UPDATE NOWAIT;
  51.131 -   CURSOR exist_control IS
  51.132 -      SELECT 1
  51.133 -      FROM   &TABLE
  51.134 -      WHERE  &OBJID = objid_;
  51.135 -BEGIN
  51.136 -   OPEN lock_control;
  51.137 -   FETCH lock_control INTO rec_;
  51.138 -   IF (lock_control%FOUND) THEN
  51.139 -      CLOSE lock_control;
  51.140 -      RETURN rec_;
  51.141 -   END IF;
  51.142 -   CLOSE lock_control;
  51.143 -   OPEN exist_control;
  51.144 -   FETCH exist_control INTO dummy_;
  51.145 -   IF (exist_control%FOUND) THEN
  51.146 -      CLOSE exist_control;
  51.147 -      RAISE row_changed;
  51.148 -   ELSE
  51.149 -      CLOSE exist_control;
  51.150 -      RAISE row_deleted;
  51.151 -   END IF;
  51.152 -EXCEPTION
  51.153 -   WHEN row_locked THEN
  51.154 -      Error_SYS.Record_Locked(lu_name_);
  51.155 -   WHEN row_changed THEN
  51.156 -      Error_SYS.Record_Modified(lu_name_);
  51.157 -   WHEN row_deleted THEN
  51.158 -      Error_SYS.Record_Removed(lu_name_);
  51.159 -END Lock_By_Id___;
  51.160 -
  51.161 -FUNCTION Lock_By_Keys___ (
  51.162 -   site_id_ IN VARCHAR2 ) RETURN &TABLE%ROWTYPE
  51.163 -IS
  51.164 -   row_deleted EXCEPTION;
  51.165 -   rec_        &TABLE%ROWTYPE;
  51.166 -   CURSOR lock_control IS
  51.167 -      SELECT *
  51.168 -      FROM  &TABLE
  51.169 -      WHERE site_id = site_id_
  51.170 -      FOR UPDATE;
  51.171 -BEGIN
  51.172 -   OPEN lock_control;
  51.173 -   FETCH lock_control INTO rec_;
  51.174 -   IF (lock_control%FOUND) THEN
  51.175 -      CLOSE lock_control;
  51.176 -      RETURN rec_;
  51.177 -   ELSE
  51.178 -      CLOSE lock_control;
  51.179 -      RAISE row_deleted;
  51.180 -   END IF;
  51.181 -EXCEPTION
  51.182 -   WHEN row_deleted THEN
  51.183 -      Error_SYS.Record_Removed(lu_name_);
  51.184 -END Lock_By_Keys___;
  51.185 -
  51.186 -FUNCTION Get_Object_By_Id___ (
  51.187 -   objid_ IN VARCHAR2 ) RETURN &TABLE%ROWTYPE
  51.188 -IS
  51.189 -   lu_rec_ &TABLE%ROWTYPE;
  51.190 -   CURSOR getrec IS
  51.191 -      SELECT *
  51.192 -      FROM   &TABLE
  51.193 -      WHERE  &OBJID = objid_;
  51.194 -BEGIN
  51.195 -   OPEN getrec;
  51.196 -   FETCH getrec INTO lu_rec_;
  51.197 -   IF (getrec%NOTFOUND) THEN
  51.198 -      CLOSE getrec;
  51.199 -      Error_SYS.Record_Removed(lu_name_);
  51.200 -   END IF;
  51.201 -   CLOSE getrec;
  51.202 -   RETURN(lu_rec_);
  51.203 -END Get_Object_By_Id___;
  51.204 -
  51.205 -FUNCTION Get_Object_By_Keys___ (
  51.206 -   site_id_ IN VARCHAR2 ) RETURN &TABLE%ROWTYPE
  51.207 -IS
  51.208 -   lu_rec_ &TABLE%ROWTYPE;
  51.209 -   CURSOR getrec IS
  51.210 -      SELECT *
  51.211 -      FROM  &TABLE
  51.212 -      WHERE site_id = site_id_;
  51.213 -BEGIN
  51.214 -   OPEN getrec;
  51.215 -   FETCH getrec INTO lu_rec_;
  51.216 -   CLOSE getrec;
  51.217 -   RETURN(lu_rec_);
  51.218 -END Get_Object_By_Keys___;
  51.219 -
  51.220 -FUNCTION Check_Exist___ (
  51.221 -   site_id_ IN VARCHAR2 ) RETURN BOOLEAN
  51.222 -IS
  51.223 -   dummy_ NUMBER;
  51.224 -   CURSOR exist_control IS
  51.225 -      SELECT 1
  51.226 -      FROM   &TABLE
  51.227 -      WHERE site_id = site_id_;
  51.228 -BEGIN
  51.229 -   OPEN exist_control;
  51.230 -   FETCH exist_control INTO dummy_;
  51.231 -   IF (exist_control%FOUND) THEN
  51.232 -      CLOSE exist_control;
  51.233 -      RETURN(TRUE);
  51.234 -   END IF;
  51.235 -   CLOSE exist_control;
  51.236 -   RETURN(FALSE);
  51.237 -END Check_Exist___;
  51.238 -
  51.239 -PROCEDURE Get_Id_Version_By_Keys___ (
  51.240 -   objid_      IN OUT VARCHAR2,
  51.241 -   objversion_ IN OUT VARCHAR2,
  51.242 -   site_id_ IN VARCHAR2)
  51.243 -IS
  51.244 -   CURSOR get_version IS
  51.245 -   SELECT &OBJID, &OBJVERSION
  51.246 -      FROM  &TABLE
  51.247 -      WHERE site_id = site_id_;
  51.248 -BEGIN
  51.249 -   OPEN get_version;
  51.250 -   FETCH get_version INTO objid_, objversion_;
  51.251 -   CLOSE get_version;
  51.252 -END Get_Id_Version_By_Keys___;
  51.253 -
  51.254 ------------------------------------------------------------------------------
  51.255 --------------------- IMPLEMENTATION BASE METHODS FOR INSERT -----------------
  51.256 ------------------------------------------------------------------------------
  51.257 --- Prepare_Insert___
  51.258 ---    Set all default values for a new instance (ON-NEW-RECORD) of this
  51.259 ---    logical unit by calling procedure Add_Attr.
  51.260 ---
  51.261 --- Unpack_Check_Insert___
  51.262 ---    Unpack the attribute list, check all attributes from the client
  51.263 ---    and generate all default values before creation of the new object.
  51.264 ---
  51.265 --- Insert___
  51.266 ---    Insert a new LU-instance into the database and return the values
  51.267 ---    for OBJID and OBJVERSION.
  51.268 ------------------------------------------------------------------------------
  51.269 -
  51.270 -PROCEDURE Prepare_Insert___ (
  51.271 -   attr_ IN OUT VARCHAR2 )
  51.272 -IS
  51.273 -BEGIN
  51.274 -   Client_SYS.Clear_Attr(attr_);
  51.275 -   Client_SYS.Add_To_Attr('TIMEZONE_DIFFERENCE', 0, attr_);
  51.276 -   Client_SYS.Add_To_Attr('THIS_SITE', 'FALSE', attr_);
  51.277 -END Prepare_Insert___;
  51.278 -
  51.279 -
  51.280 -PROCEDURE Unpack_Check_Insert___ (
  51.281 -   attr_   IN OUT VARCHAR2,
  51.282 -   newrec_ IN OUT &TABLE%ROWTYPE )
  51.283 -IS
  51.284 -   ptr_             NUMBER;
  51.285 -   name_            VARCHAR2(30);
  51.286 -   value_           VARCHAR2(2000);
  51.287 -   this_site_exist_ EXCEPTION;
  51.288 -BEGIN
  51.289 -   newrec_.timezone_difference := 0;
  51.290 -   newrec_.this_site := 'FALSE';
  51.291 -   value_ := Client_SYS.Get_Item_Value('THIS_SITE', attr_);
  51.292 -   IF ( (UPPER(NVL(value_, 'FALSE')) = 'TRUE') AND This_Site_Exist__ ) THEN
  51.293 -      RAISE this_site_exist_;
  51.294 -   END IF;
  51.295 -   ptr_ := NULL;
  51.296 -   WHILE (Client_SYS.Get_Next_From_Attr(attr_, ptr_, name_, value_)) LOOP
  51.297 -      IF (name_ = 'SITE_ID') THEN
  51.298 -         newrec_.site_id := value_;
  51.299 -      ELSIF (name_ = 'TIMEZONE_DIFFERENCE') THEN
  51.300 -         newrec_.timezone_difference := Client_SYS.Attr_Value_To_Number(value_);
  51.301 -      ELSIF (name_ = 'DESCRIPTION') THEN
  51.302 -         newrec_.description := value_;
  51.303 -      ELSIF (name_ = 'THIS_SITE') THEN
  51.304 -         newrec_.this_site := value_;
  51.305 -      ELSIF (name_ = 'DATABASE_LINK') THEN
  51.306 -         newrec_.database_link := value_;
  51.307 -      ELSE
  51.308 -         Error_SYS.Item_Not_Exist(lu_name_, name_, value_);
  51.309 -      END IF;
  51.310 -   END LOOP;
  51.311 -   Client_SYS.Clear_Attr(attr_);
  51.312 -   Error_SYS.Check_Not_Null(lu_name_, 'SITE_ID', newrec_.site_id);
  51.313 -   Error_SYS.Check_Not_Null(lu_name_, 'TIMEZONE_DIFFERENCE', newrec_.timezone_difference);
  51.314 -   Error_SYS.Check_Not_Null(lu_name_, 'THIS_SITE', newrec_.this_site);
  51.315 -EXCEPTION
  51.316 -   WHEN value_error THEN
  51.317 -      Error_SYS.Item_Format(lu_name_, name_, value_);
  51.318 -   WHEN this_site_exist_ THEN
  51.319 -      Error_SYS.Appl_General(lu_name_, 'EXIST_INSERT: Only one replication site can be THIS_SITE.');
  51.320 -END Unpack_Check_Insert___;
  51.321 -
  51.322 -
  51.323 -PROCEDURE Insert___ (
  51.324 -   objid_      OUT    VARCHAR2,
  51.325 -   objversion_ OUT    VARCHAR2,
  51.326 -   newrec_     IN OUT &TABLE%ROWTYPE,
  51.327 -   attr_       IN OUT VARCHAR2 )
  51.328 -IS
  51.329 -BEGIN
  51.330 -   IF ( newrec_.timezone_difference IS NULL ) THEN
  51.331 -      newrec_.timezone_difference := 0;
  51.332 -   END IF;
  51.333 -   IF ( NVL(newrec_.this_site,'FALSE') NOT IN ('TRUE','FALSE') ) THEN
  51.334 -      newrec_.this_site := 'FALSE';
  51.335 -   END IF;
  51.336 -   newrec_.rowversion := sysdate;
  51.337 -   objversion_ := to_char(newrec_.rowversion,'YYYYMMDDHH24MISS');
  51.338 -   INSERT
  51.339 -      INTO installation_site_tab (
  51.340 -         site_id,
  51.341 -         timezone_difference,
  51.342 -         description,
  51.343 -         this_site,
  51.344 -         database_link,
  51.345 -         rowversion)
  51.346 -      VALUES (
  51.347 -         newrec_.site_id,
  51.348 -         newrec_.timezone_difference,
  51.349 -         newrec_.description,
  51.350 -         newrec_.this_site,
  51.351 -         newrec_.database_link,
  51.352 -         newrec_.rowversion);
  51.353 -   SELECT &OBJID
  51.354 -      INTO  objid_
  51.355 -      FROM  &TABLE
  51.356 -      WHERE site_id = newrec_.site_id;
  51.357 -   -- Insert into the translation database
  51.358 -   Module_Translate_Attr_Util_API.Insert_Lu_Translation('&MODULE',
  51.359 -                                                        '&LU', 
  51.360 -                                                        newrec_.site_id,
  51.361 -                                                        NULL,
  51.362 -                                                        newrec_.description);
  51.363 -EXCEPTION
  51.364 -   WHEN dup_val_on_index THEN
  51.365 -      Error_SYS.Record_Exist(lu_name_);
  51.366 -END Insert___;
  51.367 -
  51.368 ------------------------------------------------------------------------------
  51.369 --------------------- IMPLEMENTATION BASE METHODS FOR UPDATE -----------------
  51.370 ------------------------------------------------------------------------------
  51.371 --- Unpack_Check_Update___
  51.372 ---    Unpack the attribute list, check all attributes from the client
  51.373 ---    and generate all default values before modifying the object.
  51.374 ---
  51.375 --- Update___
  51.376 ---    Update an existing LU-instance in the database and return the
  51.377 ---    the new OBJVERSION.
  51.378 ------------------------------------------------------------------------------
  51.379 -
  51.380 -PROCEDURE Unpack_Check_Update___ (
  51.381 -   attr_   IN OUT VARCHAR2,
  51.382 -   newrec_ IN OUT &TABLE%ROWTYPE,
  51.383 -   objid_  IN     VARCHAR2 )
  51.384 -IS
  51.385 -   ptr_              NUMBER;
  51.386 -   name_             VARCHAR2(30);
  51.387 -   value_            VARCHAR2(2000);
  51.388 -   this_site_exist_  EXCEPTION;
  51.389 -BEGIN
  51.390 -   value_ := Client_SYS.Get_Item_Value('THIS_SITE', attr_);
  51.391 -   IF ( (UPPER(NVL(value_, 'FALSE')) = 'TRUE') AND (newrec_.this_site = 'FALSE') AND This_Site_Exist__ ) THEN
  51.392 -      RAISE this_site_exist_;
  51.393 -   END IF;
  51.394 -   ptr_ := NULL;
  51.395 -   WHILE (Client_SYS.Get_Next_From_Attr(attr_, ptr_, name_, value_)) LOOP
  51.396 -      IF (name_ = 'SITE_ID') THEN
  51.397 -         Error_SYS.Item_Update(lu_name_, 'SITE_ID');
  51.398 -      ELSIF (name_ = 'TIMEZONE_DIFFERENCE') THEN
  51.399 -         newrec_.timezone_difference := Client_SYS.Attr_Value_To_Number(value_);
  51.400 -      ELSIF (name_ = 'DESCRIPTION') THEN
  51.401 -         newrec_.description := value_;
  51.402 -      ELSIF (name_ = 'THIS_SITE') THEN
  51.403 -         newrec_.this_site := value_;
  51.404 -      ELSIF (name_ = 'DATABASE_LINK') THEN
  51.405 -         newrec_.database_link := value_;
  51.406 -      ELSE
  51.407 -         Error_SYS.Item_Not_Exist(lu_name_, name_, value_);
  51.408 -      END IF;
  51.409 -   END LOOP;
  51.410 -   Client_SYS.Clear_Attr(attr_);
  51.411 -   Error_SYS.Check_Not_Null(lu_name_, 'TIMEZONE_DIFFERENCE', newrec_.timezone_difference);
  51.412 -   Error_SYS.Check_Not_Null(lu_name_, 'THIS_SITE', newrec_.this_site);
  51.413 -EXCEPTION
  51.414 -   WHEN value_error THEN
  51.415 -      Error_SYS.Item_Format(lu_name_, name_, value_);
  51.416 -   WHEN this_site_exist_ THEN
  51.417 -      Error_SYS.Appl_General(lu_name_, 'EXIST_UPDATE: Only one replication site can be THIS_SITE.');
  51.418 -END Unpack_Check_Update___;
  51.419 -
  51.420 -
  51.421 -PROCEDURE Update___ (
  51.422 -   objid_      IN     VARCHAR2,
  51.423 -   oldrec_     IN     &TABLE%ROWTYPE,
  51.424 -   newrec_     IN OUT &TABLE%ROWTYPE,
  51.425 -   attr_       IN OUT VARCHAR2,
  51.426 -   objversion_ IN OUT VARCHAR2,
  51.427 -   by_keys_    IN BOOLEAN DEFAULT FALSE )
  51.428 -IS
  51.429 -BEGIN
  51.430 -   IF ( newrec_.timezone_difference IS NULL ) THEN
  51.431 -      newrec_.timezone_difference := 0;
  51.432 -   END IF;
  51.433 -   IF ( NVL(newrec_.this_site,'FALSE') NOT IN ('TRUE','FALSE') ) THEN
  51.434 -      newrec_.this_site := 'FALSE';
  51.435 -   END IF;
  51.436 -   newrec_.rowversion := sysdate;
  51.437 -   objversion_ := to_char(newrec_.rowversion,'YYYYMMDDHH24MISS');
  51.438 -   IF by_keys_ THEN
  51.439 -      UPDATE installation_site_tab
  51.440 -      SET site_id = newrec_.site_id,
  51.441 -          timezone_difference = newrec_.timezone_difference,
  51.442 -          description = newrec_.description,
  51.443 -          this_site = newrec_.this_site,
  51.444 -          database_link = newrec_.database_link,
  51.445 -          rowversion = newrec_.rowversion
  51.446 -      WHERE site_id = newrec_.site_id;
  51.447 -   ELSE
  51.448 -      UPDATE installation_site_tab
  51.449 -      SET site_id = newrec_.site_id,
  51.450 -          timezone_difference = newrec_.timezone_difference,
  51.451 -          description = newrec_.description,
  51.452 -          this_site = newrec_.this_site,
  51.453 -          database_link = newrec_.database_link,
  51.454 -          rowversion = newrec_.rowversion
  51.455 -      WHERE &OBJID = objid_;
  51.456 -   END IF;
  51.457 -   -- Update the translation database if necessary
  51.458 -   Module_Translate_Attr_Util_API.Modify_Translation('&MODULE', 
  51.459 -                                                     lu_name_, 
  51.460 -                                                     newrec_.site_id,
  51.461 -                                                     newrec_.description,
  51.462 -                                                     oldrec_.description);
  51.463 -EXCEPTION
  51.464 -   WHEN dup_val_on_index THEN
  51.465 -      Error_SYS.Record_Exist(lu_name_);
  51.466 -END Update___;
  51.467 -
  51.468 ------------------------------------------------------------------------------
  51.469 --------------------- IMPLEMENTATION BASE METHODS FOR DELETE -----------------
  51.470 ------------------------------------------------------------------------------
  51.471 --- Check_Delete___
  51.472 ---    Checks whether a specific LU-record may be removed or not.
  51.473 ---    The procedure should check business rules like attribute values
  51.474 ---    as well as database constraints (defined or not).
  51.475 ---
  51.476 --- Delete___
  51.477 ---    Deletion of the specific LU-object from the database.
  51.478 ------------------------------------------------------------------------------
  51.479 -
  51.480 -PROCEDURE Check_Delete___ (
  51.481 -   remrec_ IN &TABLE%ROWTYPE )
  51.482 -IS
  51.483 -   key_ VARCHAR2(2000);
  51.484 -BEGIN
  51.485 -   key_ := remrec_.site_id || '^';
  51.486 -   Reference_SYS.Check_Restricted_Delete(lu_name_, key_);
  51.487 -END Check_Delete___;
  51.488 -
  51.489 -
  51.490 -PROCEDURE Delete___ (
  51.491 -   objid_  IN VARCHAR2,
  51.492 -   remrec_ IN &TABLE%ROWTYPE )
  51.493 -IS
  51.494 -   key_ VARCHAR2(2000);
  51.495 -BEGIN
  51.496 -   key_ := remrec_.site_id || '^';
  51.497 -   Reference_SYS.Do_Cascade_Delete(lu_name_, key_);
  51.498 -   DELETE
  51.499 -      FROM  installation_site_tab
  51.500 -      WHERE &OBJID = objid_;
  51.501 -   -- Delete all existing translations for this record.
  51.502 -   Module_Translate_Attr_Util_API.Remove_Attribute('&MODULE', lu_name_, remrec_.site_id);
  51.503 -END Delete___;
  51.504 -
  51.505 ------------------------------------------------------------------------------
  51.506 --------------------- PRIVATE BASE METHODS -----------------------------------
  51.507 ------------------------------------------------------------------------------
  51.508 --- Lock__
  51.509 ---    Client-support to lock a specific instance of the logical unit.
  51.510 ---
  51.511 --- New__
  51.512 ---    Client-support interface to create LU instances.
  51.513 ---       action_ = 'PREPARE'
  51.514 ---          Default values and handle of information to client.
  51.515 ---          The default values are set in procedure Prepare_Insert___.
  51.516 ---       action_ = 'CHECK'
  51.517 ---          Check all attributes before creating new object and handle of
  51.518 ---          information to client. The attribute list is unpacked, checked
  51.519 ---          and prepared (defaults) in procedure Unpack_Check_Insert___.
  51.520 ---       action_ = 'DO'
  51.521 ---          Creation of new instances of the logical unit and handle of
  51.522 ---          information to client. The attribute list is unpacked, checked
  51.523 ---          and prepared (defaults) in procedure Unpack_Check_Insert___
  51.524 ---          before calling procedure Insert___.
  51.525 ---
  51.526 --- Modify__
  51.527 ---    Client-support interface to modify attributes for LU instances.
  51.528 ---       action_ = 'CHECK'
  51.529 ---          Check all attributes before modifying an existing object and
  51.530 ---          handle of information to client. The attribute list is unpacked,
  51.531 ---          checked and prepared(defaults) in procedure Unpack_Check_Update___.
  51.532 ---       action_ = 'DO'
  51.533 ---          Modification of an existing instance of the logical unit. The
  51.534 ---          procedure unpacks the attributes, checks all values before
  51.535 ---          procedure Update___ is called.
  51.536 ---
  51.537 --- Remove__
  51.538 ---    Client-support interface to remove LU instances.
  51.539 ---       action_ = 'CHECK'
  51.540 ---          Check whether a specific LU-instance may be removed or not.
  51.541 ---          The procedure fetches the complete record by calling procedure
  51.542 ---          Get_Object_By_Id___. Then the check is made by calling procedure
  51.543 ---          Check_Delete___.
  51.544 ---       action_ = 'DO'
  51.545 ---          Remove an existing instance of the logical unit. The procedure
  51.546 ---          fetches the complete LU-record, checks for a delete and then
  51.547 ---          deletes the record by calling procedure Delete___.
  51.548 ------------------------------------------------------------------------------
  51.549 -
  51.550 -PROCEDURE Lock__ (
  51.551 -   info_       OUT VARCHAR2,
  51.552 -   objid_      IN  VARCHAR2,
  51.553 -   objversion_ IN  VARCHAR2 )
  51.554 -IS
  51.555 -   dummy_ &TABLE%ROWTYPE;
  51.556 -BEGIN
  51.557 -   General_SYS.Init_Method(lu_name_, '&PKG', 'Lock__');
  51.558 -   dummy_ := Lock_By_Id___(objid_, objversion_);
  51.559 -   info_ := Client_SYS.Get_All_Info;
  51.560 -END Lock__;
  51.561 -
  51.562 -
  51.563 -PROCEDURE New__ (
  51.564 -   info_       OUT    VARCHAR2,
  51.565 -   objid_      OUT    VARCHAR2,
  51.566 -   objversion_ OUT    VARCHAR2,
  51.567 -   attr_       IN OUT VARCHAR2,
  51.568 -   action_     IN     VARCHAR2 )
  51.569 -IS
  51.570 -   newrec_ &TABLE%ROWTYPE;
  51.571 -BEGIN
  51.572 -   General_SYS.Init_Method(lu_name_, '&PKG', 'New__');
  51.573 -   IF (action_ = 'PREPARE') THEN
  51.574 -      Prepare_Insert___(attr_);
  51.575 -   ELSIF (action_ = 'CHECK') THEN
  51.576 -      Unpack_Check_Insert___(attr_, newrec_);
  51.577 -   ELSIF (action_ = 'DO') THEN
  51.578 -      Unpack_Check_Insert___(attr_, newrec_);
  51.579 -      Insert___(objid_, objversion_, newrec_, attr_);
  51.580 -   END IF;
  51.581 -   info_ := Client_SYS.Get_All_Info;
  51.582 -END New__;
  51.583 -
  51.584 -
  51.585 -PROCEDURE Modify__ (
  51.586 -   info_       OUT    VARCHAR2,
  51.587 -   objid_      IN     VARCHAR2,
  51.588 -   objversion_ IN OUT VARCHAR2,
  51.589 -   attr_       IN OUT VARCHAR2,
  51.590 -   action_     IN     VARCHAR2 )
  51.591 -IS
  51.592 -   oldrec_ &TABLE%ROWTYPE;
  51.593 -   newrec_ &TABLE%ROWTYPE;
  51.594 -BEGIN
  51.595 -   General_SYS.Init_Method(lu_name_, '&PKG', 'Modify__');
  51.596 -   IF (action_ = 'CHECK') THEN
  51.597 -      newrec_ := Get_Object_By_Id___(objid_);
  51.598 -      Unpack_Check_Update___(attr_, newrec_, objid_);
  51.599 -   ELSIF (action_ = 'DO') THEN
  51.600 -      oldrec_ := Lock_By_Id___(objid_, objversion_);
  51.601 -      newrec_ := oldrec_;
  51.602 -      Unpack_Check_Update___(attr_, newrec_, objid_);
  51.603 -      Update___(objid_, oldrec_, newrec_, attr_, objversion_);
  51.604 -   END IF;
  51.605 -   info_ := Client_SYS.Get_All_Info;
  51.606 -END Modify__;
  51.607 -
  51.608 -
  51.609 -PROCEDURE Remove__ (
  51.610 -   info_       OUT VARCHAR2,
  51.611 -   objid_      IN  VARCHAR2,
  51.612 -   objversion_ IN  VARCHAR2,
  51.613 -   action_     IN  VARCHAR2 )
  51.614 -IS
  51.615 -   remrec_ &TABLE%ROWTYPE;
  51.616 -BEGIN
  51.617 -   General_SYS.Init_Method(lu_name_, '&PKG', 'Remove__');
  51.618 -   IF (action_ = 'CHECK') THEN
  51.619 -      remrec_ := Get_Object_By_Id___(objid_);
  51.620 -      Check_Delete___(remrec_);
  51.621 -   ELSIF (action_ = 'DO') THEN
  51.622 -      remrec_ := Lock_By_Id___(objid_, objversion_);
  51.623 -      Check_Delete___(remrec_);
  51.624 -      Delete___(objid_, remrec_);
  51.625 -   END IF;
  51.626 -   info_ := Client_SYS.Get_All_Info;
  51.627 -END Remove__;
  51.628 -
  51.629 ------------------------------------------------------------------------------
  51.630 --------------------- PUBLIC BASE METHODS ------------------------------------
  51.631 ------------------------------------------------------------------------------
  51.632 --- Exist
  51.633 ---   Checks if given pointer (e.g. primary key) to an instance of this
  51.634 ---   logical unit exists. If not an exception will be raised.
  51.635 ------------------------------------------------------------------------------
  51.636 -
  51.637 -PROCEDURE Exist (
  51.638 -   site_id_ IN VARCHAR2 )
  51.639 -IS
  51.640 -BEGIN
  51.641 -   General_SYS.Init_Method(lu_name_, '&PKG', 'Exist', TRUE);
  51.642 -   IF (NOT Check_Exist___(site_id_)) THEN
  51.643 -      Error_SYS.Record_Not_Exist(lu_name_);
  51.644 -   END IF;
  51.645 -END Exist;
  51.646 -
  51.647 ------------------------------------------------------------------------------
  51.648 --------------------- LU SPECIFIC IMPLEMENTATION METHODS ---------------------
  51.649 ------------------------------------------------------------------------------
  51.650 -
  51.651 -
  51.652 ------------------------------------------------------------------------------
  51.653 --------------------- LU SPECIFIC PRIVATE METHODS ----------------------------
  51.654 ------------------------------------------------------------------------------
  51.655 -
  51.656 -FUNCTION This_Site_Exist__ RETURN BOOLEAN
  51.657 -IS
  51.658 -   dummy_    NUMBER;
  51.659 -   CURSOR this_site_exist IS
  51.660 -      SELECT 1
  51.661 -      FROM   &TABLE
  51.662 -      WHERE  this_site = 'TRUE';
  51.663 -BEGIN
  51.664 -   OPEN this_site_exist;
  51.665 -   FETCH this_site_exist INTO dummy_;
  51.666 -   IF ( this_site_exist%FOUND ) THEN
  51.667 -      CLOSE this_site_exist;
  51.668 -      RETURN TRUE;
  51.669 -   ELSE
  51.670 -      CLOSE this_site_exist;
  51.671 -      RETURN FALSE;
  51.672 -   END IF;
  51.673 -END This_Site_Exist__;
  51.674 -
  51.675 ------------------------------------------------------------------------------
  51.676 --------------------- LU SPECIFIC PROTECTED METHODS --------------------------
  51.677 ------------------------------------------------------------------------------
  51.678 -
  51.679 -FUNCTION Get_Timezone_Difference_ (
  51.680 -   site_id_ IN VARCHAR2 DEFAULT NULL ) RETURN NUMBER
  51.681 -IS
  51.682 -   timezone_difference_error_ EXCEPTION;
  51.683 -   timezone_difference_       &TABLE..timezone_difference%TYPE;
  51.684 -   CURSOR local IS
  51.685 -      SELECT timezone_difference
  51.686 -      FROM   &TABLE
  51.687 -      WHERE  this_site = 'TRUE';
  51.688 -   CURSOR remote IS
  51.689 -      SELECT timezone_difference
  51.690 -      FROM   &TABLE
  51.691 -      WHERE  site_id = site_id_;
  51.692 -BEGIN
  51.693 -   General_SYS.Init_Method(lu_name_, '&PKG', 'Get_Timezone_Difference_');
  51.694 -   IF ( site_id_ IS NULL ) THEN
  51.695 -      OPEN local;
  51.696 -      FETCH local INTO timezone_difference_;
  51.697 -      IF ( local%NOTFOUND ) THEN
  51.698 -         timezone_difference_ := 0;
  51.699 -      END IF;
  51.700 -      CLOSE local;
  51.701 -   ELSE
  51.702 -      OPEN remote;
  51.703 -      FETCH remote INTO timezone_difference_;
  51.704 -      IF ( remote%NOTFOUND ) THEN
  51.705 -         timezone_difference_ := 0;
  51.706 -      END IF;
  51.707 -      CLOSE remote;
  51.708 -   END IF;
  51.709 -   IF ( ABS(timezone_difference_) > 24 ) THEN
  51.710 -      RAISE timezone_difference_error_;
  51.711 -   END IF;
  51.712 -   RETURN timezone_difference_;
  51.713 -EXCEPTION
  51.714 -   WHEN timezone_difference_error_ THEN
  51.715 -      Error_SYS.Appl_General(lu_name_, 'INVALIDTIMEZONEDIFF: Invalid timezone difference :P1.', timezone_difference_);
  51.716 -END Get_Timezone_Difference_;
  51.717 -
  51.718 ------------------------------------------------------------------------------
  51.719 --------------------- LU SPECIFIC PUBLIC METHODS -----------------------------
  51.720 ------------------------------------------------------------------------------
  51.721 -
  51.722 -
  51.723 ------------------------------------------------------------------------------
  51.724 --------------------- FOUNDATION1 METHODS ------------------------------------
  51.725 ------------------------------------------------------------------------------
  51.726 --- Init
  51.727 ---   Dummy procedure that can be called at database startup to ensure that
  51.728 ---   this package is loaded into memory for performance reasons only.
  51.729 ------------------------------------------------------------------------------
  51.730 -
  51.731 -PROCEDURE Init
  51.732 -IS
  51.733 -BEGIN
  51.734 -   NULL;
  51.735 -END Init;
  51.736 -
  51.737 -
  51.738 -END &PKG;
  51.739 -/
  51.740 -SHOW ERROR
  51.741 -
  51.742 ------------------------------------------------------------------------------
    52.1 --- a/PLSQL/Lexer/test/unit/src/org/netbeans/modules/plsql/lexer/OpPersDiaryCalculation.apy	Wed May 15 16:07:35 2013 +0200
    52.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    52.3 @@ -1,928 +0,0 @@
    52.4 ------------------------------------------------------------------------------
    52.5 ---
    52.6 ---  Logical unit: OpPersDiaryCalculation
    52.7 ---
    52.8 ---  Purpose:
    52.9 ---
   52.10 ---  IFS/Design Template Version 2.3
   52.11 ---
   52.12 ---  Date    Sign  History
   52.13 ---  ------  ----  -----------------------------------------------------------
   52.14 ---  070419  Laadlk Bug 64820, Added new IF condition in Calculate order hours
   52.15 ---  070109  AmGa  Check error_no is null before update.
   52.16 ---  060106  GaKa  Added labor class changes
   52.17 ---  040915  KjCr  Modifications due to new Balance
   52.18 ---  040813  KjCr  HRPR408 PL/SQL Torexec
   52.19 ------------------------------------------------------------------------------
   52.20 -
   52.21 -DEFINE MODULE        = SHPEMP
   52.22 -DEFINE LU            = OpPersDiaryCalculation
   52.23 -DEFINE PKG           = OP_PERS_DIARY_CALCULATION_API
   52.24 -
   52.25 -
   52.26 ------------------------------------------------------------------------------
   52.27 --------------------- PACKAGES FOR METHODS -----------------------------------
   52.28 ------------------------------------------------------------------------------
   52.29 -
   52.30 -PROMPT Creating &PKG implementation
   52.31 -
   52.32 -CREATE OR REPLACE PACKAGE BODY &PKG IS
   52.33 -
   52.34 -   RowLocked EXCEPTION;
   52.35 -   Skip      EXCEPTION;
   52.36 -   DataError EXCEPTION;
   52.37 -   PRAGMA    exception_init(RowLocked, -0054);
   52.38 -
   52.39 --------------------------------------------------------------------------
   52.40 ---   Private types
   52.41 --------------------------------------------------------------------------
   52.42 -
   52.43 -   TYPE Op_Data_Rec IS RECORD (
   52.44 -      org_code       VARCHAR2(20),
   52.45 -      min_op_diff    NUMBER,
   52.46 -      max_op_diff    NUMBER,
   52.47 -      presence_hours NUMBER );
   52.48 -
   52.49 --------------------------------------------------------------------------
   52.50 ---   Global variables
   52.51 --------------------------------------------------------------------------
   52.52 -
   52.53 -   comp_time_format_ Comp_Time_Format_API.Value_Rec;
   52.54 -   wage_group_       Wage_Group_API.Value_Rec;
   52.55 -   time_param_label_ Time_Param_Label_API.Value_Rec;
   52.56 -   reg_status_       Time_Reg_Status_API.Value_Rec;
   52.57 -   test_active_      Time_Reg_Error_API.Active_Array_Type;
   52.58 -
   52.59 ------------------------------------------------------------------------------
   52.60 --------------------- LU SPECIFIC IMPLEMENTATION METHOD DECLARATIONS ---------
   52.61 ------------------------------------------------------------------------------
   52.62 -
   52.63 -PROCEDURE Calculate_Op_Hours___ (
   52.64 -   op_data_    IN     Op_Data_Rec,
   52.65 -   pers_diary_ IN     Time_Pers_Diary_Calc_API.Diary_Record_Type,
   52.66 -   op_diary_   IN OUT NOCOPY Op_Diary_Record_Type );
   52.67 -
   52.68 -
   52.69 -PROCEDURE Convert_Group_Operations___ (
   52.70 -   op_diary_ IN OUT NOCOPY Op_Diary_Record_Type );
   52.71 -
   52.72 -
   52.73 -PROCEDURE Do_Wage_Rounding___ (
   52.74 -   pers_diary_ IN     Time_Pers_Diary_Calc_API.Diary_Record_Type,
   52.75 -   op_diary_   IN OUT NOCOPY Op_Diary_Record_Type );
   52.76 -
   52.77 -
   52.78 -PROCEDURE Get_Diary___ (
   52.79 -   op_diary_ IN OUT NOCOPY Op_Diary_Record_Type );
   52.80 -
   52.81 -
   52.82 -PROCEDURE Get_Op_Data___ (
   52.83 -   op_data_    OUT    NOCOPY Op_Data_Rec,
   52.84 -   pers_diary_ IN     Time_Pers_Diary_Calc_API.Diary_Record_Type,
   52.85 -   op_diary_   IN OUT NOCOPY Op_Diary_Record_Type );
   52.86 -
   52.87 -
   52.88 -PROCEDURE Remove_Result___ (
   52.89 -   op_diary_ IN Op_Diary_Record_Type );
   52.90 -
   52.91 -
   52.92 -PROCEDURE Save_Result___ (
   52.93 -   op_diary_ IN Op_Diary_Record_Type );
   52.94 -
   52.95 -
   52.96 -PROCEDURE Set_Op_Error___ (
   52.97 -   op_diary_ IN Op_Diary_Record_Type );
   52.98 -   
   52.99 -PROCEDURE Set_Op_Error_Labor___ (
  52.100 -   op_diary_ IN Op_Diary_Record_Type );
  52.101 -
  52.102 -
  52.103 -PROCEDURE Update_Diary___ (
  52.104 -   op_data_  IN     Op_Data_Rec,
  52.105 -   op_diary_ IN OUT NOCOPY Op_Diary_Record_Type );
  52.106 -
  52.107 -
  52.108 -
  52.109 ------------------------------------------------------------------------------
  52.110 --------------------- LU SPECIFIC IMPLEMENTATION METHODS ---------------------
  52.111 ------------------------------------------------------------------------------
  52.112 -
  52.113 -PROCEDURE Calculate_Op_Hours___ (
  52.114 -   op_data_    IN     Op_Data_Rec,
  52.115 -   pers_diary_ IN     Time_Pers_Diary_Calc_API.Diary_Record_Type,
  52.116 -   op_diary_   IN OUT NOCOPY Op_Diary_Record_Type )
  52.117 -IS
  52.118 -   wage_grp_        VARCHAR2(20);
  52.119 -   wage_code_       VARCHAR2(20);
  52.120 -   wage_hours_      NUMBER;
  52.121 -   pers_wage_grp_   VARCHAR2(20);
  52.122 -   pers_wage_hours_ NUMBER;
  52.123 -   abs_hours_       NUMBER;
  52.124 -   op_id_           INTEGER;
  52.125 -   mch_code_        VARCHAR2(20);
  52.126 -   info_code_       VARCHAR2(20);
  52.127 -   org_code_        VARCHAR2(20);
  52.128 -   min_in_time_     NUMBER;
  52.129 -   max_out_time_    NUMBER;
  52.130 -   cur_in_time_     NUMBER;
  52.131 -   cur_out_time_    NUMBER;
  52.132 -   in_time_         NUMBER;
  52.133 -   out_time_        NUMBER;
  52.134 -   cur_count_       NUMBER;
  52.135 -   cur_factor_      NUMBER;
  52.136 -   w_               INTEGER;
  52.137 -BEGIN
  52.138 -   /*-----------------------------------------------------------------------*/
  52.139 -   /* a) If status = done set status = ready                                */
  52.140 -   /*-----------------------------------------------------------------------*/
  52.141 -   min_in_time_  :=  100.0;
  52.142 -   max_out_time_ := -100.0;
  52.143 -   IF op_diary_.reg_status = reg_status_.done THEN
  52.144 -      IF (time_pers_diary_api.Reporting_Complete(op_diary_.company_id,  op_diary_.emp_no, 
  52.145 -            op_diary_.account_date, op_diary_.reg_status) = 'TRUE') THEN 
  52.146 -         op_diary_.reg_status := reg_status_.ready;
  52.147 -      END IF;
  52.148 -   END IF;
  52.149 -   FOR i_ IN 1 .. op_diary_.clocking.row_count LOOP
  52.150 -      min_in_time_  := LEAST(min_in_time_, op_diary_.clocking.start_stamp(i_));
  52.151 -      max_out_time_ := GREATEST(max_out_time_, op_diary_.clocking.stop_stamp(i_));
  52.152 -      IF op_diary_.clocking.org_code(i_) IS NULL THEN
  52.153 -         op_diary_.clocking.org_code(i_) := op_data_.org_code;
  52.154 -      END IF;
  52.155 -   END LOOP;
  52.156 -   /*-----------------------------------------------------------------------*/
  52.157 -   /* b) Calculate order hours                                              */
  52.158 -   /*-----------------------------------------------------------------------*/
  52.159 -   op_diary_.result.row_count := 0;
  52.160 -   WHILE min_in_time_ < max_out_time_ LOOP
  52.161 -      cur_in_time_ := max_out_time_;
  52.162 -      FOR i_ IN 1 .. op_diary_.clocking.row_count LOOP
  52.163 -         IF min_in_time_ < op_diary_.clocking.stop_stamp(i_) THEN
  52.164 -            cur_in_time_ := LEAST(cur_in_time_, op_diary_.clocking.start_stamp(i_));
  52.165 -         END IF;
  52.166 -      END LOOP;
  52.167 -      cur_count_    := 0;
  52.168 -      cur_out_time_ := max_out_time_;
  52.169 -      FOR i_ IN 1 .. op_diary_.clocking.row_count LOOP
  52.170 -         IF min_in_time_ < op_diary_.clocking.stop_stamp(i_) THEN
  52.171 -            IF cur_in_time_ = op_diary_.clocking.start_stamp(i_) THEN
  52.172 -               cur_count_ := cur_count_+1;
  52.173 -               cur_out_time_ := LEAST(cur_out_time_, op_diary_.clocking.stop_stamp(i_));
  52.174 -            ELSE
  52.175 -               cur_out_time_ := LEAST(cur_out_time_, op_diary_.clocking.start_stamp(i_));
  52.176 -            END IF;
  52.177 -         END IF;
  52.178 -      END LOOP;
  52.179 -      cur_factor_ := 1 / cur_count_;
  52.180 -      FOR i_ IN 1 .. op_diary_.clocking.row_count LOOP
  52.181 -         IF cur_in_time_ = op_diary_.clocking.start_stamp(i_) AND
  52.182 -            cur_in_time_ < op_diary_.clocking.stop_stamp(i_) THEN
  52.183 -            op_id_     := op_diary_.clocking.op_id(i_);
  52.184 -            info_code_ := op_diary_.clocking.info_code(i_);
  52.185 -            mch_code_  := op_diary_.clocking.mch_code(i_);
  52.186 -            org_code_  := op_diary_.clocking.org_code(i_);
  52.187 -            FOR j_ IN 1 .. pers_diary_.result.row_count LOOP
  52.188 -               wage_hours_ := 0.0;
  52.189 -               wage_grp_   := pers_diary_.result.wage_grp(j_);
  52.190 -               wage_code_  := pers_diary_.result.wage_code(j_);
  52.191 -               pers_wage_hours_ := pers_diary_.result.wage_hours(j_);
  52.192 -               in_time_  := GREATEST(pers_diary_.result.wage_ftime(j_), cur_in_time_);
  52.193 -               out_time_ := LEAST(pers_diary_.result.wage_ttime(j_), cur_out_time_);
  52.194 -               IF wage_grp_ IN (wage_group_.normal, wage_group_.overtime, wage_group_.extra, wage_group_.increment, wage_group_.balance_accrual, wage_group_.info) THEN
  52.195 -                  IF NOT pers_diary_.result.wage_hol(j_) THEN
  52.196 -                     IF in_time_ < out_time_ THEN
  52.197 -                        wage_hours_ := LEAST((out_time_-in_time_) * pers_diary_.result.wage_factor(j_), pers_wage_hours_);
  52.198 -                     END IF;
  52.199 -                  END IF;
  52.200 -               ELSIF wage_grp_ = wage_group_.balance_withdrawal THEN
  52.201 -                  -- Bug 64820, Begin
  52.202 -                  IF in_time_ < out_time_ THEN
  52.203 -                     FOR k_ IN 1 .. pers_diary_.result.row_count LOOP
  52.204 -                        pers_wage_grp_ := pers_diary_.result.wage_grp(k_);
  52.205 -                        IF pers_wage_grp_ = wage_group_.normal AND
  52.206 -                           in_time_  < pers_diary_.result.wage_ttime(k_) AND
  52.207 -                           out_time_ > pers_diary_.result.wage_ftime(k_) AND
  52.208 -                           pers_diary_.result.wage_hours(k_) > 0.005 THEN
  52.209 -                           wage_grp_   := pers_wage_grp_;
  52.210 -                           wage_code_  := pers_diary_.result.wage_code(k_);
  52.211 -                           abs_hours_  := LEAST(pers_diary_.result.wage_hours(k_), pers_wage_hours_);
  52.212 -                           abs_hours_  := LEAST((out_time_-in_time_) * pers_diary_.result.wage_factor(j_), abs_hours_);
  52.213 -                           wage_hours_ := wage_hours_ - abs_hours_;
  52.214 -                        END IF;
  52.215 -                     END LOOP;
  52.216 -                  END IF;
  52.217 -                  -- Bug 64820, End
  52.218 -               END IF;
  52.219 -               IF wage_hours_ > 0.005 OR wage_hours_ < -0.005 THEN
  52.220 -                  w_ := -1;
  52.221 -                  FOR k_ IN 1 .. op_diary_.result.row_count LOOP
  52.222 -                     IF op_id_     = op_diary_.result.op_id(k_) AND
  52.223 -                        info_code_ = op_diary_.result.info_code(k_) AND
  52.224 -                        mch_code_  = op_diary_.result.mch_code(k_) AND
  52.225 -                        org_code_  = op_diary_.result.org_code(k_) AND
  52.226 -                        wage_grp_  = op_diary_.result.wage_group(k_) AND
  52.227 -                        wage_code_ = op_diary_.result.wage_code(k_) THEN
  52.228 -                        w_ := k_;
  52.229 -                        EXIT;
  52.230 -                     END IF;
  52.231 -                  END LOOP;
  52.232 -                  IF w_ < 0 THEN
  52.233 -                     op_diary_.result.row_count := op_diary_.result.row_count+1;
  52.234 -                     w_ := op_diary_.result.row_count;
  52.235 -                     op_diary_.result.op_id(w_)          := op_id_;
  52.236 -                     op_diary_.result.info_code(w_)      := info_code_;
  52.237 -                     op_diary_.result.mch_code(w_)       := mch_code_;
  52.238 -                     op_diary_.result.org_code(w_)       := org_code_;
  52.239 -                     op_diary_.result.contract(w_)       := op_diary_.clocking.contract(i_);
  52.240 -                     op_diary_.result.work_center_no(w_) := op_diary_.clocking.work_center_no(i_);
  52.241 -                     op_diary_.result.labor_class_no(w_) := op_diary_.clocking.labor_class_no(i_);
  52.242 -                     op_diary_.result.wage_group(w_)     := wage_grp_;
  52.243 -                     op_diary_.result.wage_code(w_)      := wage_code_;
  52.244 -                     op_diary_.result.wage_hours(w_)     := 0.0;
  52.245 -                  END IF;
  52.246 -                  op_diary_.result.wage_hours(w_) := op_diary_.result.wage_hours(w_) + cur_factor_ * wage_hours_;
  52.247 -               END IF;
  52.248 -            END LOOP;
  52.249 -            op_diary_.clocking.start_stamp(i_) := cur_out_time_;
  52.250 -         END IF;
  52.251 -      END LOOP;
  52.252 -      min_in_time_ := cur_out_time_;
  52.253 -   END LOOP;
  52.254 -END Calculate_Op_Hours___;
  52.255 -
  52.256 -
  52.257 -PROCEDURE Convert_Group_Operations___ (
  52.258 -   op_diary_ IN OUT NOCOPY Op_Diary_Record_Type )
  52.259 -IS
  52.260 -   op_id_          INTEGER;
  52.261 -   info_code_      VARCHAR2(20);
  52.262 -   grp_count_      INTEGER;
  52.263 -   grp_op_id_      INTEGER_ARRAY;
  52.264 -   grp_plan_hours_ NUMBER_ARRAY;
  52.265 -   sum_hours_      NUMBER;
  52.266 -   cnt_            INTEGER;
  52.267 -   w_              INTEGER;
  52.268 -   CURSOR Get_Operations IS
  52.269 -      SELECT op_id,
  52.270 -             NVL(DECODE(info_code_,
  52.271 -             'R', plan_run_man,
  52.272 -             'S', plan_setup_man,
  52.273 -             'I', plan_run_man), 0)
  52.274 -      FROM   op_plan_tab
  52.275 -      WHERE  company_id = op_diary_.company_id
  52.276 -      AND    sup_op_id  = op_id_;
  52.277 -BEGIN
  52.278 -   cnt_ := op_diary_.result.row_count;
  52.279 -   FOR i_ IN 1 .. cnt_ LOOP
  52.280 -      op_id_     := op_diary_.result.op_id(i_);
  52.281 -      info_code_ := op_diary_.result.info_code(i_);
  52.282 -      OPEN Get_Operations;
  52.283 -      FETCH Get_Operations
  52.284 -      BULK COLLECT INTO
  52.285 -         grp_op_id_,
  52.286 -         grp_plan_hours_;
  52.287 -      grp_count_ := Get_Operations%ROWCOUNT;
  52.288 -      CLOSE Get_Operations;
  52.289 -      IF grp_count_ > 0 THEN
  52.290 -         sum_hours_ := 0.0;
  52.291 -         FOR j_ IN 1 .. grp_count_ LOOP
  52.292 -            sum_hours_ := sum_hours_ + grp_plan_hours_(j_);
  52.293 -         END LOOP;
  52.294 -         IF sum_hours_ < 0.005 THEN
  52.295 -            /* If no planned hours, make equal distribution */
  52.296 -            FOR j_ IN 1 .. grp_count_ LOOP
  52.297 -               grp_plan_hours_(j_) := 1.0;
  52.298 -            END LOOP;
  52.299 -            sum_hours_ := TO_NUMBER(grp_count_);
  52.300 -         END IF;
  52.301 -         FOR j_ IN 1 .. grp_count_ LOOP
  52.302 -            w_ := op_diary_.result.row_count+1;
  52.303 -            op_diary_.result.op_id(w_)          := grp_op_id_(j_);
  52.304 -            op_diary_.result.mch_code(w_)       := op_diary_.result.mch_code(i_);
  52.305 -            op_diary_.result.info_code(w_)      := op_diary_.result.info_code(i_);
  52.306 -            op_diary_.result.org_code(w_)       := op_diary_.result.org_code(i_);
  52.307 -            op_diary_.result.contract(w_)       := op_diary_.result.contract(i_);
  52.308 -            op_diary_.result.work_center_no(w_) := op_diary_.result.work_center_no(i_);
  52.309 -            op_diary_.result.labor_class_no(w_) := op_diary_.result.labor_class_no(i_);
  52.310 -            op_diary_.result.wage_group(w_)     := op_diary_.result.wage_group(i_);
  52.311 -            op_diary_.result.wage_code(w_)      := op_diary_.result.wage_code(i_);
  52.312 -            op_diary_.result.wage_hours(w_)     := op_diary_.result.wage_hours(i_) * grp_plan_hours_(j_) / sum_hours_;
  52.313 -            op_diary_.result.row_count          := w_;
  52.314 -         END LOOP;
  52.315 -         op_diary_.result.wage_hours(i_) := 0.0;
  52.316 -      END IF;
  52.317 -   END LOOP;
  52.318 -END Convert_Group_Operations___;
  52.319 -
  52.320 -
  52.321 -PROCEDURE Do_Wage_Rounding___ (
  52.322 -   pers_diary_ IN     Time_Pers_Diary_Calc_API.Diary_Record_Type,
  52.323 -   op_diary_   IN OUT NOCOPY Op_Diary_Record_Type )
  52.324 -IS
  52.325 -   pers_sum_hours_ NUMBER;
  52.326 -   op_sum_hours_   NUMBER;
  52.327 -   sum_hours_      NUMBER;
  52.328 -   diff_hours_     NUMBER;
  52.329 -   wage_hours_     NUMBER;
  52.330 -   wage_grp_       VARCHAR2(20);
  52.331 -   wage_code_      VARCHAR2(20);
  52.332 -   wage_diff_      NUMBER_ARRAY;
  52.333 -   w_              INTEGER;
  52.334 -BEGIN
  52.335 -   IF NOT op_diary_.do_update THEN
  52.336 -      op_diary_.clocking.row_count := 0;
  52.337 -      op_diary_.result.row_count   := 0;
  52.338 -   END IF;
  52.339 -   /*-----------------------------------------------------------------------*/
  52.340 -   /* a) Adjust wage hours according to TimePersDiaryResult                 */
  52.341 -   /*-----------------------------------------------------------------------*/
  52.342 -   FOR i_ IN 1 .. pers_diary_.result.row_count LOOP
  52.343 -      IF pers_diary_.result.wage_hours(i_) != 0 AND
  52.344 -         NOT pers_diary_.result.wage_hol(i_) THEN
  52.345 -         wage_grp_  := pers_diary_.result.wage_grp(i_);
  52.346 -         wage_code_ := pers_diary_.result.wage_code(i_);
  52.347 -         pers_sum_hours_ := 0.0;
  52.348 -         FOR j_ IN 1 .. pers_diary_.result.row_count LOOP
  52.349 -            IF pers_diary_.result.wage_grp(j_)  = wage_grp_ AND
  52.350 -               pers_diary_.result.wage_code(j_) = wage_code_ AND
  52.351 -               NOT pers_diary_.result.wage_hol(j_) THEN
  52.352 -               pers_sum_hours_ := pers_sum_hours_ + pers_diary_.result.wage_hours(j_);
  52.353 -            END IF;
  52.354 -         END LOOP;
  52.355 -         op_sum_hours_ := 0.0;
  52.356 -         FOR j_ IN 1 .. op_diary_.result.row_count LOOP
  52.357 -            IF op_diary_.result.wage_group(j_) = wage_grp_ AND
  52.358 -               op_diary_.result.wage_code(j_)  = wage_code_ THEN
  52.359 -               op_sum_hours_ := op_sum_hours_ + op_diary_.result.wage_hours(j_);
  52.360 -            END IF;
  52.361 -         END LOOP;
  52.362 -         /*-----------------------------------------------------------------------*/
  52.363 -         /* b) Wage hours are reduced proportionally to presence hours level      */
  52.364 -         /*-----------------------------------------------------------------------*/
  52.365 -         sum_hours_ := op_sum_hours_;
  52.366 -         IF pers_sum_hours_ - op_sum_hours_ < 0.011 THEN
  52.367 -            sum_hours_ := 0.0;
  52.368 -            FOR j_ IN 1 .. op_diary_.result.row_count LOOP
  52.369 -               IF op_diary_.result.wage_group(j_) = wage_grp_ AND
  52.370 -                  op_diary_.result.wage_code(j_)  = wage_code_ THEN
  52.371 -                  op_diary_.result.wage_hours(j_) := pers_sum_hours_ * op_diary_.result.wage_hours(j_) / op_sum_hours_;
  52.372 -                  sum_hours_ := sum_hours_ + op_diary_.result.wage_hours(j_);
  52.373 -               END IF;
  52.374 -            END LOOP;
  52.375 -         END IF;
  52.376 -         op_sum_hours_ := ROUND(sum_hours_, 2);
  52.377 -         /*-----------------------------------------------------------------------*/
  52.378 -         /* c) Wage hours are rounded                                             */
  52.379 -         /*-----------------------------------------------------------------------*/
  52.380 -         sum_hours_ := 0.0;
  52.381 -         FOR j_ IN 1 .. op_diary_.result.row_count LOOP
  52.382 -            IF op_diary_.result.wage_group(j_) = wage_grp_ AND
  52.383 -               op_diary_.result.wage_code(j_)  = wage_code_ THEN
  52.384 -               wage_hours_ := op_diary_.result.wage_hours(j_);
  52.385 -               op_diary_.result.wage_hours(j_) := ROUND(wage_hours_, 2);
  52.386 -               wage_diff_(j_) := op_diary_.result.wage_hours(j_) - wage_hours_;
  52.387 -               sum_hours_ := sum_hours_ + op_diary_.result.wage_hours(j_);
  52.388 -            END IF;
  52.389 -         END LOOP;
  52.390 -         diff_hours_ := sum_hours_ - op_sum_hours_;
  52.391 -         /*-----------------------------------------------------------------------*/
  52.392 -         /* d) Wage hours are adjusted to total hours level after rounding diffs  */
  52.393 -         /*-----------------------------------------------------------------------*/
  52.394 -         WHILE diff_hours_ < -0.001 LOOP
  52.395 -            w_ := 0;
  52.396 -            FOR j_ IN 1 .. op_diary_.result.row_count LOOP
  52.397 -               IF op_diary_.result.wage_group(j_) = wage_grp_ AND
  52.398 -                  op_diary_.result.wage_code(j_)  = wage_code_ THEN
  52.399 -                  IF w_ = 0 THEN
  52.400 -                     w_ := j_;
  52.401 -                  ELSE
  52.402 -                     IF wage_diff_(j_) < wage_diff_(w_) THEN
  52.403 -                        w_ := j_;
  52.404 -                     END IF;
  52.405 -                  END IF;
  52.406 -               END IF;
  52.407 -            END LOOP;
  52.408 -            op_diary_.result.wage_hours(w_) := op_diary_.result.wage_hours(w_) + 0.01;
  52.409 -            wage_diff_(w_) := wage_diff_(w_) + 0.01;
  52.410 -            diff_hours_ := diff_hours_ + 0.01;
  52.411 -         END LOOP;
  52.412 -         WHILE diff_hours_ > 0.001 LOOP
  52.413 -            w_ := 0;
  52.414 -            FOR j_ IN 1 .. op_diary_.result.row_count LOOP
  52.415 -               IF op_diary_.result.wage_group(j_) = wage_grp_ AND
  52.416 -                  op_diary_.result.wage_code(j_)  = wage_code_ THEN
  52.417 -                  IF w_ = 0 THEN
  52.418 -                     w_ := j_;
  52.419 -                  ELSE
  52.420 -                     IF wage_diff_(j_) > wage_diff_(w_) THEN
  52.421 -                        w_ := j_;
  52.422 -                     END IF;
  52.423 -                  END IF;
  52.424 -               END IF;
  52.425 -            END LOOP;
  52.426 -            op_diary_.result.wage_hours(w_) := op_diary_.result.wage_hours(w_) - 0.01;
  52.427 -            wage_diff_(w_) := wage_diff_(w_) - 0.01;
  52.428 -            diff_hours_ := diff_hours_ - 0.01;
  52.429 -         END LOOP;
  52.430 -      END IF;
  52.431 -   END LOOP;
  52.432 -END Do_Wage_Rounding___;
  52.433 -
  52.434 -
  52.435 -PROCEDURE Get_Diary___ (
  52.436 -   op_diary_ IN OUT NOCOPY Op_Diary_Record_Type )
  52.437 -IS
  52.438 -   skip_  BOOLEAN;
  52.439 -   block_ BOOLEAN;
  52.440 -   found_ BOOLEAN;
  52.441 -   error_exist_     BOOLEAN;
  52.442 -   
  52.443 -   CURSOR Get_Diary IS
  52.444 -      SELECT ROWID,
  52.445 -             DECODE(auth_id, NULL, 0, 1),
  52.446 -             reg_status
  52.447 -      FROM   op_pers_diary_tab
  52.448 -      WHERE  company_id   = op_diary_.company_id
  52.449 -      AND    emp_no       = op_diary_.emp_no
  52.450 -      AND    account_date = op_diary_.account_date
  52.451 -      FOR UPDATE OF reg_status NOWAIT;
  52.452 -   CURSOR Get_Clockings IS
  52.453 -      SELECT ROWID,
  52.454 -             DECODE(error_no, NULL, 0,31,0, 1),
  52.455 -             op_id,
  52.456 -             mch_code,
  52.457 -             info_code,
  52.458 -             org_code,
  52.459 -             contract,
  52.460 -             work_center_no,
  52.461 -             labor_class_no,
  52.462 -             24 * (start_stamp - account_date),
  52.463 -             24 * (NVL(stop_stamp, start_stamp) - account_date)
  52.464 -      FROM   op_clocking_tab
  52.465 -      WHERE  company_id   = op_diary_.company_id
  52.466 -      AND    emp_no       = op_diary_.emp_no
  52.467 -      AND    account_date = op_diary_.account_date
  52.468 -      ORDER BY start_stamp, stop_stamp;
  52.469 -      --FOR UPDATE OF rowversion NOWAIT;
  52.470 -   CURSOR Get_Result IS
  52.471 -      SELECT ROWID
  52.472 -      FROM   op_result_tab
  52.473 -      WHERE  company_id   = op_diary_.company_id
  52.474 -      AND    emp_no       = op_diary_.emp_no
  52.475 -      AND    account_date = op_diary_.account_date
  52.476 -      FOR UPDATE OF rowversion NOWAIT;
  52.477 -BEGIN
  52.478 -   /*-----------------------------------------------------------------------*/
  52.479 -   /* a) Fetch rows from OpClocking (to be updated later)                   */
  52.480 -   /*-----------------------------------------------------------------------*/
  52.481 -   op_diary_.error_no           := 0;
  52.482 -   op_diary_.do_update          := FALSE;
  52.483 -   op_diary_.clocking.row_count := 0;
  52.484 -   op_diary_.result.row_count   := 0;
  52.485 -   skip_  := FALSE;
  52.486 -   block_ := FALSE;
  52.487 -   OPEN Get_Diary;
  52.488 -   FETCH Get_Diary
  52.489 -   INTO  op_diary_.row_id,
  52.490 -   op_diary_.auth_id,
  52.491 -   op_diary_.reg_status;
  52.492 -   found_ := Get_Diary%FOUND;
  52.493 -   CLOSE Get_Diary;
  52.494 -   IF NOT found_ THEN
  52.495 -      op_diary_.reg_status := '';
  52.496 -      op_diary_.auth_id := 0;
  52.497 -      skip_ := TRUE;
  52.498 -   END IF;
  52.499 -   IF op_diary_.auth_id = 1 THEN
  52.500 -      block_ := TRUE;
  52.501 -   END IF;
  52.502 -   IF op_diary_.reg_status = reg_status_.OPEN THEN
  52.503 -      skip_ := TRUE;
  52.504 -   END IF;
  52.505 -   IF op_diary_.reg_status = reg_status_.ready THEN
  52.506 -      op_diary_.do_update := TRUE;
  52.507 -   END IF;
  52.508 -   IF op_diary_.reg_status = reg_status_.modified THEN
  52.509 -      block_ := TRUE;
  52.510 -   END IF;
  52.511 -   --
  52.512 -   OPEN Get_Clockings;
  52.513 -   FETCH Get_Clockings
  52.514 -   BULK COLLECT INTO
  52.515 -      op_diary_.clocking.row_id,
  52.516 -      op_diary_.clocking.error_no,
  52.517 -      op_diary_.clocking.op_id,
  52.518 -      op_diary_.clocking.mch_code,
  52.519 -      op_diary_.clocking.info_code,
  52.520 -      op_diary_.clocking.org_code,
  52.521 -      op_diary_.clocking.contract,
  52.522 -      op_diary_.clocking.work_center_no,
  52.523 -      op_diary_.clocking.labor_class_no,
  52.524 -      op_diary_.clocking.start_stamp,
  52.525 -      op_diary_.clocking.stop_stamp;
  52.526 -   op_diary_.clocking.row_count := Get_Clockings%ROWCOUNT;
  52.527 -   CLOSE Get_Clockings;
  52.528 -   --
  52.529 -   OPEN Get_Result;
  52.530 -   FETCH Get_Result
  52.531 -   BULK COLLECT INTO op_diary_.result.row_id;
  52.532 -   op_diary_.result.row_count := Get_Result%ROWCOUNT;
  52.533 -   CLOSE Get_Result;
  52.534 -   op_diary_.clocking.row_count_read := op_diary_.clocking.row_count;
  52.535 -   op_diary_.result.row_count_read   := op_diary_.result.row_count;
  52.536 -   /*-----------------------------------------------------------------------*/
  52.537 -   /* b) If an error occurs on op clockings, save error code,               */
  52.538 -   /*    but continue with Time and Attendance processing                   */
  52.539 -   /*-----------------------------------------------------------------------*/
  52.540 -   error_exist_ := FALSE;
  52.541 -   FOR i_ IN 1 .. op_diary_.clocking.row_count LOOP
  52.542 -      IF op_diary_.clocking.start_stamp(i_) - op_diary_.clocking.stop_stamp(i_) > 0.001 AND
  52.543 -         test_active_(Time_Reg_Error_API.CD_OVERLAP) THEN
  52.544 -         skip_ := TRUE;
  52.545 -         op_diary_.error_no  := Time_Reg_Error_API.CD_OVERLAP;
  52.546 -      END IF;
  52.547 -      FOR j_ IN  i_+1 .. op_diary_.clocking.row_count LOOP
  52.548 -         IF ((op_diary_.clocking.op_id(i_) = op_diary_.clocking.op_id(j_)) AND
  52.549 -            (op_diary_.clocking.info_code(i_) = op_diary_.clocking.info_code(j_)) AND
  52.550 -            (op_diary_.clocking.mch_code(i_)  = op_diary_.clocking.mch_code(j_)) ) THEN
  52.551 -            IF (op_diary_.clocking.labor_class_no(i_) != op_diary_.clocking.labor_class_no(j_)) THEN
  52.552 -               op_diary_.error_no :=  Time_Reg_Error_API.CD_LABOR_CLASS;  
  52.553 -               Set_Op_Error_Labor___(op_diary_);
  52.554 -               skip_ := TRUE;
  52.555 -               error_exist_ := TRUE;
  52.556 -            END IF;
  52.557 -            IF (op_diary_.clocking.work_center_no(i_) != op_diary_.clocking.work_center_no(j_)) THEN
  52.558 -               --Bug 61149, start
  52.559 -               IF (Op_Machine_Api.Work_Center_Exists(op_diary_.clocking.contract(i_), op_diary_.clocking.work_center_no(i_))='TRUE') AND 
  52.560 -                  (Op_Machine_Api.Work_Center_Exists(op_diary_.clocking.contract(j_), op_diary_.clocking.work_center_no(j_))='TRUE') THEN
  52.561 -                  op_diary_.error_no :=  Time_Reg_Error_API.CD_SUP_MCH_CODE;
  52.562 -                  Set_Op_Error_Labor___(op_diary_);
  52.563 -                  skip_ := TRUE;
  52.564 -                  error_exist_ := TRUE;
  52.565 -               END IF;
  52.566 -               --Bug 61149, end
  52.567 -            END IF;
  52.568 -
  52.569 -         END IF;
  52.570 -      END LOOP;
  52.571 -      IF (NOT (error_exist_)) THEN
  52.572 -         op_diary_.error_no := NULL;
  52.573 -         Set_Op_Error_Labor___(op_diary_);
  52.574 -      END IF;
  52.575 -      IF (op_diary_.clocking.error_no(i_) != 0)  THEN
  52.576 -         skip_ := TRUE;
  52.577 -      END IF;
  52.578 -   END LOOP;
  52.579 -   IF block_ AND op_diary_.do_update THEN
  52.580 -      op_diary_.clocking.row_count := 0;
  52.581 -      op_diary_.error_no  := Time_Reg_Error_API.CD_ORACLE;
  52.582 -   END IF;
  52.583 -   IF skip_ THEN
  52.584 -      op_diary_.clocking.row_count := 0;
  52.585 -   END IF;
  52.586 -   IF block_ THEN
  52.587 -      op_diary_.clocking.row_count := 0;
  52.588 -      op_diary_.do_update := FALSE;
  52.589 -   END IF;
  52.590 -   IF op_diary_.clocking.row_count > 0 THEN
  52.591 -      op_diary_.do_update := TRUE;
  52.592 -   END IF;
  52.593 -   IF op_diary_.clocking.row_count = 0 THEN
  52.594 -      RAISE Skip;
  52.595 -   END IF;
  52.596 -END Get_Diary___;
  52.597 -
  52.598 -
  52.599 -PROCEDURE Get_Op_Data___ (
  52.600 -   op_data_    OUT    NOCOPY Op_Data_Rec,
  52.601 -   pers_diary_ IN     Time_Pers_Diary_Calc_API.Diary_Record_Type,
  52.602 -   op_diary_   IN OUT NOCOPY Op_Diary_Record_Type )
  52.603 -IS
  52.604 -   company_id_      VARCHAR2(20);
  52.605 -   emp_no_          VARCHAR2(20);
  52.606 -   account_date_    DATE;
  52.607 -   work_sched_      Work_Sched_Assign_API.Public_Rec;
  52.608 -   calc_param_type_ VARCHAR2(20);
  52.609 -   wage_grp_        VARCHAR2(20);
  52.610 -   wage_hours_      NUMBER;
  52.611 -   CURSOR Get_Calc_Param IS
  52.612 -      SELECT param_label_db      param_label,
  52.613 -             NVL(param_value, 0) param_value
  52.614 -      FROM   time_calc_param_desc
  52.615 -      WHERE  company_id      = company_id_
  52.616 -      AND    calc_param_type = calc_param_type_;
  52.617 -BEGIN
  52.618 -   company_id_   := op_diary_.company_id;
  52.619 -   emp_no_       := op_diary_.emp_no;
  52.620 -   account_date_ := op_diary_.account_date;
  52.621 -   op_data_.org_code := Company_Pers_Assign_API.Get_Org_Code(company_id_, emp_no_, account_date_);
  52.622 -   work_sched_ := Work_Sched_Assign_API.Get(company_id_, emp_no_, account_date_);
  52.623 -   op_diary_.wage_class := work_sched_.wage_class;
  52.624 -   calc_param_type_ := '';
  52.625 -   IF work_sched_.rule_type IS NOT NULL THEN
  52.626 -      calc_param_type_ := Time_Rule_API.Get_Calc_Param_Type(company_id_, work_sched_.wage_class, work_sched_.rule_type);
  52.627 -   END IF;
  52.628 -   op_data_.min_op_diff := 0.0;
  52.629 -   op_data_.max_op_diff := 0.0;
  52.630 -   IF calc_param_type_ IS NOT NULL THEN
  52.631 -      FOR p_ IN Get_Calc_Param LOOP
  52.632 -         CASE p_.param_label
  52.633 -         WHEN time_param_label_.min_op_diff THEN
  52.634 -            op_data_.min_op_diff := p_.param_value;
  52.635 -         WHEN time_param_label_.max_op_diff THEN
  52.636 -            op_data_.max_op_diff := p_.param_value;
  52.637 -         ELSE
  52.638 -            NULL;
  52.639 -         END CASE;
  52.640 -      END LOOP;
  52.641 -   END IF;
  52.642 -   op_data_.presence_hours := 0.0;
  52.643 -   FOR i_ IN 1 .. pers_diary_.result.row_count LOOP
  52.644 -      wage_hours_ := pers_diary_.result.wage_hours(i_);
  52.645 -      IF wage_hours_ > 0.001 OR wage_hours_ < -0.001 THEN
  52.646 -         wage_grp_ := pers_diary_.result.wage_grp(i_);
  52.647 -         IF wage_grp_ IN (wage_group_.normal, wage_group_.overtime, wage_group_.extra, wage_group_.balance_accrual) THEN
  52.648 -            IF NOT pers_diary_.result.wage_hol(i_) THEN
  52.649 -               op_data_.presence_hours := op_data_.presence_hours + wage_hours_;
  52.650 -            END IF;
  52.651 -         ELSIF wage_grp_ = wage_group_.balance_withdrawal THEN
  52.652 -            op_data_.presence_hours := op_data_.presence_hours - wage_hours_;
  52.653 -         END IF;
  52.654 -      END IF;
  52.655 -   END LOOP;
  52.656 -   op_data_.presence_hours := ROUND(op_data_.presence_hours, 2);
  52.657 -END Get_Op_Data___;
  52.658 -
  52.659 -
  52.660 -PROCEDURE Remove_Result___ (
  52.661 -   op_diary_ IN Op_Diary_Record_Type )
  52.662 -IS
  52.663 -BEGIN
  52.664 -   IF op_diary_.result.row_count_read > 0 AND op_diary_.do_update THEN
  52.665 -      FORALL i_ IN 1 .. op_diary_.result.row_count_read
  52.666 -      DELETE
  52.667 -         FROM  op_result_tab
  52.668 -         WHERE ROWID = op_diary_.result.row_id(i_);
  52.669 -   END IF;
  52.670 -END Remove_Result___;
  52.671 -
  52.672 -
  52.673 -PROCEDURE Save_Result___ (
  52.674 -   op_diary_ IN Op_Diary_Record_Type )
  52.675 -IS
  52.676 -BEGIN
  52.677 -   IF op_diary_.result.row_count > 0 THEN
  52.678 -      FORALL i_ IN 1 .. op_diary_.result.row_count
  52.679 -      INSERT
  52.680 -         INTO op_result_tab (
  52.681 -            company_id,
  52.682 -            op_id,
  52.683 -            mch_code,
  52.684 -            info_code,
  52.685 -            emp_no,
  52.686 -            account_date,
  52.687 -            org_code,
  52.688 -            contract,
  52.689 -            work_center_no,
  52.690 -            labor_class_no,
  52.691 -            wage_class,
  52.692 -            wage_group,
  52.693 -            wage_code,
  52.694 -            work_hours,
  52.695 -            rowversion)
  52.696 -         SELECT op_diary_.company_id,
  52.697 -                op_diary_.result.op_id(i_),
  52.698 -                op_diary_.result.mch_code(i_),
  52.699 -                op_diary_.result.info_code(i_),
  52.700 -                op_diary_.emp_no,
  52.701 -                op_diary_.account_date,
  52.702 -                op_diary_.result.org_code(i_),
  52.703 -                op_diary_.result.contract(i_),
  52.704 -                op_diary_.result.work_center_no(i_),
  52.705 -                op_diary_.result.labor_class_no(i_),
  52.706 -                op_diary_.wage_class,
  52.707 -                op_diary_.result.wage_group(i_),
  52.708 -                op_diary_.result.wage_code(i_),
  52.709 -                ROUND(op_diary_.result.wage_hours(i_), 2),
  52.710 -                SYSDATE
  52.711 -         FROM   dual
  52.712 -         WHERE  ROUND(op_diary_.result.wage_hours(i_), 2) != 0;
  52.713 -   END IF;
  52.714 -END Save_Result___;
  52.715 -
  52.716 -
  52.717 -PROCEDURE Set_Op_Error___ (
  52.718 -   op_diary_ IN Op_Diary_Record_Type )
  52.719 -IS
  52.720 -   PRAGMA AUTONOMOUS_TRANSACTION;
  52.721 -BEGIN
  52.722 -   IF op_diary_.clocking.row_count > 0 THEN
  52.723 -      --Bug 61149, start
  52.724 -      IF op_diary_.error_no IS NOT NULL THEN
  52.725 -         FORALL i_ IN 1 .. op_diary_.clocking.row_id.COUNT
  52.726 -         UPDATE op_clocking_tab
  52.727 -            SET error_no   = op_diary_.error_no,
  52.728 -                rowversion = SYSDATE
  52.729 -            WHERE ROWID = op_diary_.clocking.row_id(i_)
  52.730 -            AND   op_diary_.clocking.row_id(i_) IS NOT NULL
  52.731 -            AND   error_no IS NULL;
  52.732 -         COMMIT;
  52.733 -      END IF;
  52.734 -      --Bug 61149, end
  52.735 -   END IF;
  52.736 -EXCEPTION
  52.737 -   WHEN OTHERS THEN
  52.738 -      ROLLBACK;
  52.739 -END Set_Op_Error___;
  52.740 -
  52.741 -PROCEDURE Set_Op_Error_Labor___ (
  52.742 -   op_diary_ IN Op_Diary_Record_Type )
  52.743 -IS
  52.744 -   PRAGMA AUTONOMOUS_TRANSACTION;
  52.745 -BEGIN
  52.746 -   IF op_diary_.clocking.row_count > 0 THEN
  52.747 -      --Bug 61149, start
  52.748 -      IF op_diary_.error_no IS NOT NULL THEN
  52.749 -         FORALL i_ IN 1 .. op_diary_.clocking.row_id.COUNT
  52.750 -         UPDATE op_clocking_tab
  52.751 -            SET error_no   = op_diary_.error_no,
  52.752 -                rowversion = SYSDATE
  52.753 -            WHERE ROWID = op_diary_.clocking.row_id(i_)
  52.754 -            AND   op_diary_.clocking.row_id(i_) IS NOT NULL;
  52.755 -         COMMIT;
  52.756 -      END IF;
  52.757 -      --Bug 61149, end
  52.758 -   END IF;
  52.759 -EXCEPTION
  52.760 -   WHEN OTHERS THEN
  52.761 -      ROLLBACK;
  52.762 -END Set_Op_Error_Labor___;
  52.763 -
  52.764 -
  52.765 -PROCEDURE Update_Diary___ (
  52.766 -   op_data_  IN     Op_Data_Rec,
  52.767 -   op_diary_ IN OUT NOCOPY Op_Diary_Record_Type )
  52.768 -IS
  52.769 -   min_op_normal_sum_ NUMBER;
  52.770 -   max_op_normal_sum_ NUMBER;
  52.771 -   sum_hours_         NUMBER;
  52.772 -BEGIN
  52.773 -   min_op_normal_sum_ := op_data_.presence_hours + op_data_.min_op_diff - 0.005;
  52.774 -   max_op_normal_sum_ := op_data_.presence_hours + op_data_.max_op_diff + 0.005;
  52.775 -   sum_hours_ := 0.0;
  52.776 -   FOR w_ IN 1 .. op_diary_.result.row_count LOOP
  52.777 -      IF op_diary_.result.wage_group(w_) IN (wage_group_.normal, wage_group_.overtime, wage_group_.balance_accrual, wage_group_.extra) THEN
  52.778 -         sum_hours_ := sum_hours_ + op_diary_.result.wage_hours(w_);
  52.779 -      END IF;
  52.780 -   END LOOP;
  52.781 -   op_diary_.reg_status := reg_status_.done;
  52.782 -   IF op_diary_.clocking.row_count > 0 THEN
  52.783 -      UPDATE op_pers_diary_tab
  52.784 -         SET reg_status = op_diary_.reg_status,
  52.785 -             rowversion = SYSDATE
  52.786 -         WHERE rowid = op_diary_.row_id;
  52.787 -   END IF;
  52.788 -   /*-----------------------------------------------------------------------*/
  52.789 -   /* If an error occurred during order calculation all OpClocking records  */
  52.790 -   /* are error marked.                                                     */
  52.791 -   /*-----------------------------------------------------------------------*/
  52.792 -   IF op_diary_.error_no != 0 AND op_diary_.clocking.row_count_read > 0 THEN
  52.793 -      op_diary_.clocking.row_count := op_diary_.clocking.row_count_read;
  52.794 -      Set_Op_Error___(op_diary_);
  52.795 -   END IF;
  52.796 -END Update_Diary___;
  52.797 -
  52.798 -
  52.799 -
  52.800 ------------------------------------------------------------------------------
  52.801 --------------------- LU SPECIFIC PRIVATE METHODS ----------------------------
  52.802 ------------------------------------------------------------------------------
  52.803 -
  52.804 -PROCEDURE Calculate_Op__ (
  52.805 -   pers_diary_ IN Time_Pers_Diary_Calc_API.Diary_Record_Type )
  52.806 -IS
  52.807 -   op_diary_        Op_Diary_Record_Type;
  52.808 -   op_data_         Op_Data_Rec;
  52.809 -   history_enabled_ BOOLEAN;
  52.810 -BEGIN
  52.811 -   SAVEPOINT Calculation_Start;
  52.812 -   /*************************************************************************/
  52.813 -   /* 1) Start                                                              */
  52.814 -   /*-----------------------------------------------------------------------*/
  52.815 -   history_enabled_ := History_Setting_Util_API.Is_Enabled;
  52.816 -   History_Setting_Util_API.Disable;
  52.817 -   op_diary_.company_id   := pers_diary_.company_id;
  52.818 -   op_diary_.emp_no       := pers_diary_.emp_no;
  52.819 -   op_diary_.account_date := pers_diary_.account_date;
  52.820 -   /*************************************************************************/
  52.821 -   /* 2) Get data                                                           */
  52.822 -   /*************************************************************************/
  52.823 -   Get_Diary___(op_diary_);
  52.824 -   Get_Op_Data___(op_data_, pers_diary_, op_diary_);
  52.825 -   /*************************************************************************/
  52.826 -   /* 3) Order calculations                                                 */
  52.827 -   /*************************************************************************/
  52.828 -   Calculate_Op_Hours___(op_data_, pers_diary_, op_diary_);
  52.829 -   Convert_Group_Operations___(op_diary_);
  52.830 -   Do_Wage_Rounding___(pers_diary_, op_diary_);
  52.831 -   /*************************************************************************/
  52.832 -   /* 4) Store order calulations                                            */
  52.833 -   /*************************************************************************/
  52.834 -   Remove_Result___(op_diary_);
  52.835 -   Save_Result___(op_diary_);
  52.836 -   Update_Diary___(op_data_, op_diary_);
  52.837 -   /*************************************************************************/
  52.838 -   /* 5) End                                                                */
  52.839 -   /*************************************************************************/
  52.840 -   IF history_enabled_ THEN
  52.841 -      History_Setting_Util_API.Enable;
  52.842 -   END IF;
  52.843 -EXCEPTION
  52.844 -   WHEN Skip THEN
  52.845 -      ROLLBACK TO Calculation_Start;
  52.846 -      IF history_enabled_ THEN
  52.847 -         History_Setting_Util_API.Enable;
  52.848 -      END IF;
  52.849 -   WHEN RowLocked THEN
  52.850 -      ROLLBACK TO Calculation_Start;
  52.851 -      IF history_enabled_ THEN
  52.852 -         History_Setting_Util_API.Enable;
  52.853 -      END IF;
  52.854 -   WHEN DataError THEN
  52.855 -      ROLLBACK TO Calculation_Start;
  52.856 -      Set_Op_Error___(op_diary_);
  52.857 -      IF history_enabled_ THEN
  52.858 -         History_Setting_Util_API.Enable;
  52.859 -      END IF;
  52.860 -   WHEN OTHERS THEN
  52.861 -      op_diary_.error_no := SQLCODE;
  52.862 -      ROLLBACK TO Calculation_Start;
  52.863 -      IF test_active_(Time_Reg_Error_API.CD_ORACLE) THEN
  52.864 -         op_diary_.error_no := Time_Reg_Error_API.CD_ORACLE;
  52.865 -         Set_Op_Error___(op_diary_);
  52.866 -      END IF;
  52.867 -      IF history_enabled_ THEN
  52.868 -         History_Setting_Util_API.Enable;
  52.869 -      END IF;
  52.870 -END Calculate_Op__;
  52.871 -
  52.872 -
  52.873 -FUNCTION Get_Op_Clocking_Count__ (
  52.874 -   pers_diary_ IN Time_Pers_Diary_Calc_API.Diary_Record_Type ) RETURN INTEGER
  52.875 -IS
  52.876 -   op_diary_ Op_Diary_Record_Type;
  52.877 -BEGIN
  52.878 -   op_diary_.company_id   := pers_diary_.company_id;
  52.879 -   op_diary_.emp_no       := pers_diary_.emp_no;
  52.880 -   op_diary_.account_date := pers_diary_.account_date;
  52.881 -   Get_Diary___(op_diary_);
  52.882 -   RETURN op_diary_.clocking.row_count;
  52.883 -EXCEPTION
  52.884 -   WHEN OTHERS THEN
  52.885 -      RETURN 0;
  52.886 -END Get_Op_Clocking_Count__;
  52.887 -
  52.888 -
  52.889 -
  52.890 ------------------------------------------------------------------------------
  52.891 --------------------- LU SPECIFIC PROTECTED METHODS --------------------------
  52.892 ------------------------------------------------------------------------------
  52.893 -
  52.894 -
  52.895 ------------------------------------------------------------------------------
  52.896 --------------------- LU SPECIFIC PUBLIC METHODS -----------------------------
  52.897 ------------------------------------------------------------------------------
  52.898 -
  52.899 -
  52.900 ------------------------------------------------------------------------------
  52.901 --------------------- FOUNDATION1 METHODS ------------------------------------
  52.902 ------------------------------------------------------------------------------
  52.903 --- Init
  52.904 ---   Dummy procedure that can be called at database startup to ensure that
  52.905 ---   this package is loaded into memory for performance reasons only.
  52.906 ------------------------------------------------------------------------------
  52.907 -
  52.908 -PROCEDURE Init
  52.909 -IS
  52.910 -BEGIN
  52.911 -   NULL;
  52.912 -END Init;
  52.913 --------------------------------------------------------------------------
  52.914 --- Initialize
  52.915 --------------------------------------------------------------------------
  52.916 -BEGIN
  52.917 -   comp_time_format_ := Comp_Time_Format_API.Get_Db_Value_Rec;
  52.918 -   wage_group_       := Wage_Group_API.Get_Db_Value_Rec;
  52.919 -   time_param_label_ := Time_Param_Label_API.Get_Db_Value_Rec;
  52.920 -   reg_status_       := Time_Reg_Status_API.Get_Db_Value_Rec;
  52.921 -   Time_Reg_Error_API.Get_Active_Array(test_active_);
  52.922 -END &PKG;
  52.923 -/
  52.924 -SHOW ERROR
  52.925 -
  52.926 -UNDEFINE MODULE
  52.927 -UNDEFINE LU
  52.928 -UNDEFINE PKG
  52.929 -
  52.930 -
  52.931 ------------------------------------------------------------------------------
    53.1 --- a/PLSQL/Lexer/test/unit/src/org/netbeans/modules/plsql/lexer/PlsqlBlockFactoryTest.java	Wed May 15 16:07:35 2013 +0200
    53.2 +++ b/PLSQL/Lexer/test/unit/src/org/netbeans/modules/plsql/lexer/PlsqlBlockFactoryTest.java	Wed May 15 23:04:20 2013 +0200
    53.3 @@ -42,6 +42,8 @@
    53.4  package org.netbeans.modules.plsql.lexer;
    53.5  
    53.6  import java.io.BufferedReader;
    53.7 +import java.io.File;
    53.8 +import java.io.FileInputStream;
    53.9  import java.io.IOException;
   53.10  import java.io.InputStream;
   53.11  import java.io.InputStreamReader;
   53.12 @@ -49,10 +51,8 @@
   53.13  import java.util.List;
   53.14  import javax.swing.text.BadLocationException;
   53.15  import javax.swing.text.Document;
   53.16 -import org.junit.After;
   53.17 -import org.junit.AfterClass;
   53.18 +import static org.junit.Assert.*;
   53.19  import org.junit.Before;
   53.20 -import org.junit.BeforeClass;
   53.21  import org.junit.Test;
   53.22  import org.netbeans.api.lexer.Language;
   53.23  import org.netbeans.api.lexer.TokenHierarchy;
   53.24 @@ -64,69 +64,42 @@
   53.25  import org.openide.loaders.DataFolder;
   53.26  import org.openide.loaders.DataObject;
   53.27  import org.openide.util.Task;
   53.28 -import static org.junit.Assert.*;
   53.29  
   53.30  /**
   53.31   *
   53.32   * @author YADHLK
   53.33   */
   53.34 -public class PlsqlBlockFactoryTest {
   53.35 +public class PlsqlBlockFactoryTest extends TestRecordPlayer {
   53.36  
   53.37      private static FileSystem fs = null;
   53.38  
   53.39 -    public PlsqlBlockFactoryTest() {
   53.40 -    }
   53.41 -
   53.42 -    @BeforeClass
   53.43 -    public static void setUpClass() throws Exception {
   53.44 +    @Before
   53.45 +    @Override
   53.46 +    public void setUp() {
   53.47          fs = FileUtil.createMemoryFileSystem();
   53.48 -    }
   53.49 -
   53.50 -    @AfterClass
   53.51 -    public static void tearDownClass() throws Exception {
   53.52 -    }
   53.53 -
   53.54 -    @Before
   53.55 -    public void setUp() {
   53.56          assertNotNull(fs);
   53.57      }
   53.58  
   53.59 -    @After
   53.60 -    public void tearDown() {
   53.61 +    public PlsqlBlockFactoryTest(String name) {
   53.62 +        super(name);
   53.63      }
   53.64  
   53.65      @Test
   53.66      public void testBlocksApy() throws IOException, BadLocationException {
   53.67          System.out.println("Testing blocks of an APY file");
   53.68 -        FileObject fileObject = fs.getRoot().createData("test.apy");
   53.69 +        final String plsqlFileName = "test.apy";
   53.70 +
   53.71 +        FileObject fileObject = fs.getRoot().createData(plsqlFileName);
   53.72          assertNotNull(fileObject);
   53.73          try {
   53.74 -            PlsqlBlockFactory blockFac = loadAsTmpFile(fileObject, "test.apy");
   53.75 +            PlsqlBlockFactory blockFac = loadAsTmpFile(fileObject, plsqlFileName);
   53.76              assertNotNull(blockFac);
   53.77  
   53.78 -            List<PlsqlBlock> lstBlockFac = blockFac.getBlockHierarchy();
   53.79 +            List<PlsqlBlock> plsqlBlocks = blockFac.getBlockHierarchy();
   53.80              //printHierarchy(lstBlockFac, "");
   53.81              //generateAssert(lstBlockFac, "lstBlockFac", "false");
   53.82 -            assertTrue(lstBlockFac.size() == 7);
   53.83 -
   53.84 -            //Test 1st level blocks
   53.85 -            assertBlock(lstBlockFac, 0, PlsqlBlockType.COMMENT, "-- Logical unit: Formula", false, 0, 348, 0);
   53.86 -            assertBlock(lstBlockFac, 1, PlsqlBlockType.VIEW, "FORMULA", false, 809, 1319, 0);
   53.87 -            assertBlock(lstBlockFac, 2, PlsqlBlockType.TABLE_COMMENT, "FORMULA", false, 1322, 1390, 0);
   53.88 -            assertBlock(lstBlockFac, 3, PlsqlBlockType.COLUMN_COMMENT, "FORMULA", false, 1393, 1821, 0);
   53.89 -            assertBlock(lstBlockFac, 4, PlsqlBlockType.PACKAGE_BODY, "FORMULA_API", false, 1861, 3550, 8);
   53.90 -            assertBlock(lstBlockFac.get(4).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- LU SPECIFIC IMPLEMENTATION METHOD DECLARATIONS ", true, 1976, 2209, 0);
   53.91 -            assertBlock(lstBlockFac.get(4).getChildBlocks(), 1, PlsqlBlockType.PROCEDURE_DEF, "Check_Formula_State___", true, 2211, 2305, 0);
   53.92 -            assertBlock(lstBlockFac.get(4).getChildBlocks(), 2, PlsqlBlockType.FUNCTION_DEF, "Get_Db_Values___", true, 2307, 2363, 0);
   53.93 -            assertBlock(lstBlockFac.get(4).getChildBlocks(), 3, PlsqlBlockType.PROCEDURE_IMPL, "Exist", true, 2365, 2592, 1);
   53.94 -            assertBlock(lstBlockFac.get(4).getChildBlocks().get(3).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (NOT Check_Exist___(formula_id_))", true, 2485, 2581, 0);
   53.95 -            assertBlock(lstBlockFac.get(4).getChildBlocks(), 4, PlsqlBlockType.COMMENT, "BLOCK COMMENT", true, 2594, 2643, 0);
   53.96 -            assertBlock(lstBlockFac.get(4).getChildBlocks(), 5, PlsqlBlockType.FUNCTION_IMPL, "Get", true, 2645, 2962, 1);
   53.97 -            assertBlock(lstBlockFac.get(4).getChildBlocks().get(5).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "get_attr", true, 2734, 2863, 0);
   53.98 -            assertBlock(lstBlockFac.get(4).getChildBlocks(), 6, PlsqlBlockType.COMMENT, "-- FOUNDATION1 METHODS ", true, 2964, 3428, 0);
   53.99 -            assertBlock(lstBlockFac.get(4).getChildBlocks(), 7, PlsqlBlockType.PROCEDURE_IMPL, "Init", true, 3430, 3539, 0);
  53.100 -            assertBlock(lstBlockFac, 5, PlsqlBlockType.BEGIN_END, "", false, 3566, 3611, 0);
  53.101 -            assertBlock(lstBlockFac, 6, PlsqlBlockType.COMMENT, "COMMENT...", false, 3772, 3849, 0);
  53.102 +            assertEquals(7, plsqlBlocks.size());
  53.103 +            processBlocks(plsqlFileName, plsqlBlocks);
  53.104          } finally {
  53.105              if (fileObject != null) {
  53.106                  fileObject.delete();
  53.107 @@ -137,23 +110,17 @@
  53.108      @Test
  53.109      public void testBlocksApi() throws IOException, BadLocationException {
  53.110          System.out.println("Testing blocks of an API file");
  53.111 -        FileObject fileObject = fs.getRoot().createData("test.api");
  53.112 +        final String plsqlFileName = "test.api";
  53.113 +        FileObject fileObject = fs.getRoot().createData(plsqlFileName);
  53.114          assertNotNull(fileObject);
  53.115          try {
  53.116 -            PlsqlBlockFactory blockFac = loadAsTmpFile(fileObject, "test.api");
  53.117 +            PlsqlBlockFactory blockFac = loadAsTmpFile(fileObject, plsqlFileName);
  53.118              assertNotNull(blockFac);
  53.119  
  53.120              List<PlsqlBlock> lstBlockFac = blockFac.getBlockHierarchy();
  53.121              //printHierarchy(lstBlockFac, "");
  53.122 -            assertTrue(lstBlockFac.size() == 3);
  53.123 -
  53.124 -            assertBlock(lstBlockFac, 0, PlsqlBlockType.COMMENT, "-- Logical unit: Formula", false, 0, 332, 0);
  53.125 -            assertBlock(lstBlockFac, 1, PlsqlBlockType.BEGIN_END, "", false, 461, 560, 0);
  53.126 -            assertBlock(lstBlockFac, 2, PlsqlBlockType.PACKAGE, "FORMULA_API", false, 600, 1494, 4);
  53.127 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- PRIVATE FINITE STATE MACHINE ", true, 809, 1042, 0);
  53.128 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 1, PlsqlBlockType.FUNCTION_DEF, "Finite_State_Decode__", true, 1044, 1120, 0);
  53.129 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 2, PlsqlBlockType.PROCEDURE_DEF, "Enumerate_States_Db__", true, 1186, 1248, 0);
  53.130 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 3, PlsqlBlockType.COMMENT, "-- LU SPECIFIC PUBLIC METHODS ", true, 1250, 1483, 0);
  53.131 +            assertEquals(3, lstBlockFac.size());
  53.132 +            processBlocks(plsqlFileName, lstBlockFac);
  53.133          } finally {
  53.134              if (fileObject != null) {
  53.135                  fileObject.delete();
  53.136 @@ -164,32 +131,17 @@
  53.137      @Test
  53.138      public void testBlocksUpg() throws IOException, BadLocationException {
  53.139          System.out.println("Testing blocks of an UPG file");
  53.140 -        FileObject fileObject = fs.getRoot().createData("test.upg");
  53.141 +        final String plsqlFileName = "test.upg";
  53.142 +        FileObject fileObject = fs.getRoot().createData(plsqlFileName);
  53.143          assertNotNull(fileObject);
  53.144          try {
  53.145 -            PlsqlBlockFactory blockFac = loadAsTmpFile(fileObject, "test.upg");
  53.146 +            PlsqlBlockFactory blockFac = loadAsTmpFile(fileObject, plsqlFileName);
  53.147              assertNotNull(blockFac);
  53.148  
  53.149              List<PlsqlBlock> lstBlockFac = blockFac.getBlockHierarchy();
  53.150              //printHierarchy(lstBlockFac, "");
  53.151 -            assertTrue(lstBlockFac.size() == 4);
  53.152 -
  53.153 -            assertBlock(lstBlockFac, 0, PlsqlBlockType.JAVA_SOURCE, "", false, 0, 5193, 0);
  53.154 -            assertBlock(lstBlockFac, 1, PlsqlBlockType.DECLARE_END, "", false, 5196, 5804, 2);
  53.155 -            assertBlock(lstBlockFac.get(1).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "check_exits", true, 5207, 5389, 0);
  53.156 -            assertBlock(lstBlockFac.get(1).getChildBlocks(), 1, PlsqlBlockType.FOR_LOOP, "rec_ IN ( * FROM company_emp_tab)", true, 5416, 5799, 1);
  53.157 -            assertBlock(lstBlockFac.get(1).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (check_exits%NOTFOUND)", true, 5553, 5761, 1);
  53.158 -            assertBlock(lstBlockFac.get(1).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "INSERT INTO company_person_tab(company_id,emp_no,master_employment,operator,rowversion)", true, 5590, 5747, 0);
  53.159 -            assertBlock(lstBlockFac, 2, PlsqlBlockType.STATEMENT, "UPDATE search_domain_attribute_tab", false, 5808, 6299, 7);
  53.160 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 0, PlsqlBlockType.CASE, "CASE  datatype\n                           WHEN 'VARCHAR2'", true, 5867, 5935, 0);
  53.161 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 1, PlsqlBlockType.CASE, "WHEN 'CHAR'", true, 5963, 5986, 0);
  53.162 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 2, PlsqlBlockType.CASE, "WHEN 'NUMBER'", true, 6014, 6041, 0);
  53.163 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 3, PlsqlBlockType.CASE, "WHEN 'DATE'", true, 6069, 6092, 0);
  53.164 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 4, PlsqlBlockType.CASE, "WHEN 'CLOB'", true, 6120, 6148, 0);
  53.165 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 5, PlsqlBlockType.CASE, "WHEN 'BLOB'", true, 6176, 6201, 0);
  53.166 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 6, PlsqlBlockType.CASE, "ELSE", true, 6229, 6268, 0);
  53.167 -            assertBlock(lstBlockFac, 3, PlsqlBlockType.TRIGGER, "vmogss_base_tablerestrict_tr", false, 6303, 6704, 1);
  53.168 -            assertBlock(lstBlockFac.get(3).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "insert into vmo_base_gss_scope(gss_id, created, source_tbl, source_info) values('ALL_GSS_ID', sysdate,  'VMO_BASE_TABLERESTRICTION', :newrec.idrole)", true, 6511, 6659, 0);
  53.169 +            assertEquals(4, lstBlockFac.size());
  53.170 +            processBlocks(plsqlFileName, lstBlockFac);
  53.171          } finally {
  53.172              if (fileObject != null) {
  53.173                  fileObject.delete();
  53.174 @@ -200,67 +152,19 @@
  53.175      @Test
  53.176      public void testAdvanced1() throws IOException, BadLocationException {
  53.177          System.out.println("Advanced test case 1");
  53.178 -        FileObject fileObject = fs.getRoot().createData("test1.apy");
  53.179 +        final String plsqlFileName = "test1.apy";
  53.180 +        FileObject fileObject = fs.getRoot().createData(plsqlFileName);
  53.181          assertNotNull(fileObject);
  53.182          try {
  53.183 -            PlsqlBlockFactory blockFac = loadAsTmpFile(fileObject, "test1.apy");
  53.184 +            PlsqlBlockFactory blockFac = loadAsTmpFile(fileObject, plsqlFileName);
  53.185              assertNotNull(blockFac);
  53.186  
  53.187              List<PlsqlBlock> lstBlockFac = blockFac.getBlockHierarchy();
  53.188              //printHierarchy(lstBlockFac, "");
  53.189              //generateAssert(lstBlockFac, "lstBlockFac", "false");
  53.190 -            assertTrue(lstBlockFac.size() == 17);
  53.191 -            assertBlock(lstBlockFac, 0, PlsqlBlockType.VIEW, "&VIEW", false, 27, 1231, 0);
  53.192 -            assertBlock(lstBlockFac, 1, PlsqlBlockType.DECLARE_END, "", false, 1234, 3604, 3);
  53.193 -            assertBlock(lstBlockFac.get(1).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "Insert_Module_Data", true, 1245, 1305, 0);
  53.194 -            assertBlock(lstBlockFac.get(1).getChildBlocks(), 1, PlsqlBlockType.PROCEDURE_IMPL, "Insert_data", true, 1307, 3286, 2);
  53.195 -            assertBlock(lstBlockFac.get(1).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "INSERT", true, 1874, 2500, 0);
  53.196 -            assertBlock(lstBlockFac.get(1).getChildBlocks().get(1).getChildBlocks(), 1, PlsqlBlockType.STATEMENT, "UPDATE language_sys_tab", true, 2566, 3207, 0);
  53.197 -            assertBlock(lstBlockFac.get(1).getChildBlocks(), 2, PlsqlBlockType.IF, "IF  NOT Installation_SYS.Is_Db_Patch_Registered('FNDBAS', '70745')", true, 3298, 3482, 1);
  53.198 -            assertBlock(lstBlockFac.get(1).getChildBlocks().get(2).getChildBlocks(), 0, PlsqlBlockType.FOR_LOOP, "rec_ IN Insert_Module_Data", true, 3375, 3471, 0);
  53.199 -            assertBlock(lstBlockFac, 2, PlsqlBlockType.BEGIN_END, "", false, 3783, 5491, 1);
  53.200 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (NOT Database_SYS.Is_Db_Patch_Registered('ORDER', 90590))", true, 3793, 5486, 1);
  53.201 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.DECLARE_END, "", true, 3866, 5356, 1);
  53.202 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(0).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "UPDATE customer_order_delivery_tab cod", true, 4015, 5343, 3);
  53.203 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(0).getChildBlocks().get(0).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.CASE, "CASE  WHEN (cod.delnote_no IS NOT NULL)", true, 4091, 4381, 0);
  53.204 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(0).getChildBlocks().get(0).getChildBlocks().get(0).getChildBlocks(), 1, PlsqlBlockType.CASE, "WHEN (cod.delnote_no IS NULL AND cod.shipment_id IS NOT NULL)", true, 4424, 4721, 0);
  53.205 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(0).getChildBlocks().get(0).getChildBlocks().get(0).getChildBlocks(), 2, PlsqlBlockType.CASE, "ELSE", true, 4764, 5298, 0);
  53.206 -            assertBlock(lstBlockFac, 3, PlsqlBlockType.STATEMENT, "UPDATE INVOICE_TAB", false, 5646, 6296, 4);
  53.207 -            assertBlock(lstBlockFac.get(3).getChildBlocks(), 0, PlsqlBlockType.CASE, "CASE \n                            WHEN CREATOR = 'CUSTOMER_ORDER_INV_HEAD_API'", true, 5690, 5817, 0);
  53.208 -            assertBlock(lstBlockFac.get(3).getChildBlocks(), 1, PlsqlBlockType.CASE, "ELSE", true, 5846, 5913, 0);
  53.209 -            assertBlock(lstBlockFac.get(3).getChildBlocks(), 2, PlsqlBlockType.CASE, "CASE \n                            WHEN CREATOR = 'CUSTOMER_ORDER_INV_HEAD_API' AND INVOICE_TYPE NOT IN('CUSTORDDEB','CUSTCOLDEB','SELFBILLDEB','SELFBILLCRE','CUSTORDCRE','CUSTCOLCRE','CUSTCOLCOR','CUSTORDCOR')", true, 5940, 6189, 0);
  53.210 -            assertBlock(lstBlockFac.get(3).getChildBlocks(), 3, PlsqlBlockType.CASE, "ELSE", true, 6218, 6296, 0);
  53.211 -            assertBlock(lstBlockFac, 4, PlsqlBlockType.VIEW, "_DEF", false, 6342, 6687, 0);
  53.212 -            assertBlock(lstBlockFac, 5, PlsqlBlockType.TABLE_COMMENT, "_DEF", false, 6690, 6770, 0);
  53.213 -            assertBlock(lstBlockFac, 6, PlsqlBlockType.DECLARE_END, "", false, 6773, 6852, 0);
  53.214 -            assertBlock(lstBlockFac, 7, PlsqlBlockType.DECLARE_END, "", false, 6854, 7438, 2);
  53.215 -            assertBlock(lstBlockFac.get(7).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "check_exits", true, 6865, 7034, 0);
  53.216 -            assertBlock(lstBlockFac.get(7).getChildBlocks(), 1, PlsqlBlockType.FOR_LOOP, "rec_ IN ( * FROM company_emp_tab)", true, 7058, 7433, 1);
  53.217 -            assertBlock(lstBlockFac.get(7).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (check_exits%NOTFOUND)", true, 7195, 7401, 1);
  53.218 -            assertBlock(lstBlockFac.get(7).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "INSERT INTO company_person_tab(company_id,emp_no,master_employment,operator,rowversion)", true, 7232, 7389, 0);
  53.219 -            assertBlock(lstBlockFac, 8, PlsqlBlockType.STATEMENT, "DROP PROCEDURE Temp_Person_Document_Default", false, 7479, 7522, 0);
  53.220 -            assertBlock(lstBlockFac, 9, PlsqlBlockType.BEGIN_END, "", false, 7525, 7729, 0);
  53.221 -            assertBlock(lstBlockFac, 10, PlsqlBlockType.STATEMENT, "INDEX Report_Grouping_Detail_Ux ON Report_Grouping_Detail_Tab", false, 7733, 7917, 0);
  53.222 -            assertBlock(lstBlockFac, 11, PlsqlBlockType.VIEW, "&MODULE_VIEW1", false, 7920, 8259, 0);
  53.223 -            assertBlock(lstBlockFac, 12, PlsqlBlockType.VIEW, "&VIEW3", false, 8262, 9892, 0);
  53.224 -            assertBlock(lstBlockFac, 13, PlsqlBlockType.TRIGGER, "VMOL_BASE_FIELDDEPVALUES_TIB", false, 9895, 10114, 1);
  53.225 -            assertBlock(lstBlockFac.get(13).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "SELECT VMOL_ID_SEQ.NEXTVAL INTO :NEWREC.ID_ FROM DUAL", true, 10052, 10105, 0);
  53.226 -            assertBlock(lstBlockFac, 14, PlsqlBlockType.BEGIN_END, "", false, 10118, 10507, 3);
  53.227 -            assertBlock(lstBlockFac.get(14).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- OK if ORA ", true, 10315, 10377, 0);
  53.228 -            assertBlock(lstBlockFac.get(14).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  INSTR(SQLERRM,'-00955') != 0", true, 10386, 10428, 0);
  53.229 -            assertBlock(lstBlockFac.get(14).getChildBlocks(), 2, PlsqlBlockType.IF, "ELSE", true, 10437, 10502, 0);
  53.230 -            assertBlock(lstBlockFac, 15, PlsqlBlockType.TRIGGER, "VMO_BASE_GSS_SYNCED_RECORDS_TR", false, 10511, 11707, 2);
  53.231 -            assertBlock(lstBlockFac.get(15).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- This trigger is only used to make sure that an old version of GSS still can be tested", true, 10677, 10937, 0);
  53.232 -            assertBlock(lstBlockFac.get(15).getChildBlocks(), 1, PlsqlBlockType.FUNCTION_IMPL, "GET_GSS_USER", true, 10950, 11540, 1);
  53.233 -            assertBlock(lstBlockFac.get(15).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "SELECT U.GSS_USER INTO GSS_USER_", true, 11150, 11392, 0);
  53.234 -            assertBlock(lstBlockFac, 16, PlsqlBlockType.STATEMENT, "UPDATE search_domain_attribute_tab", false, 11712, 12203, 7);
  53.235 -            assertBlock(lstBlockFac.get(16).getChildBlocks(), 0, PlsqlBlockType.CASE, "CASE  datatype\n                           WHEN 'VARCHAR2'", true, 11771, 11839, 0);
  53.236 -            assertBlock(lstBlockFac.get(16).getChildBlocks(), 1, PlsqlBlockType.CASE, "WHEN 'CHAR'", true, 11867, 11890, 0);
  53.237 -            assertBlock(lstBlockFac.get(16).getChildBlocks(), 2, PlsqlBlockType.CASE, "WHEN 'NUMBER'", true, 11918, 11945, 0);
  53.238 -            assertBlock(lstBlockFac.get(16).getChildBlocks(), 3, PlsqlBlockType.CASE, "WHEN 'DATE'", true, 11973, 11996, 0);
  53.239 -            assertBlock(lstBlockFac.get(16).getChildBlocks(), 4, PlsqlBlockType.CASE, "WHEN 'CLOB'", true, 12024, 12052, 0);
  53.240 -            assertBlock(lstBlockFac.get(16).getChildBlocks(), 5, PlsqlBlockType.CASE, "WHEN 'BLOB'", true, 12080, 12105, 0);
  53.241 -            assertBlock(lstBlockFac.get(16).getChildBlocks(), 6, PlsqlBlockType.CASE, "ELSE", true, 12133, 12172, 0);
  53.242 +            assertEquals(17, lstBlockFac.size());
  53.243 +            processBlocks(plsqlFileName, lstBlockFac);
  53.244 +
  53.245          } finally {
  53.246              if (fileObject != null) {
  53.247                  fileObject.delete();
  53.248 @@ -271,165 +175,18 @@
  53.249      @Test
  53.250      public void testAdvanced2() throws IOException, BadLocationException {
  53.251          System.out.println("Advanced test case 2");
  53.252 -        FileObject fileObject = fs.getRoot().createData("test2.apy");
  53.253 +        final String plsqlFileName = "test2.apy";
  53.254 +        FileObject fileObject = fs.getRoot().createData(plsqlFileName);
  53.255          assertNotNull(fileObject);
  53.256          try {
  53.257 -            PlsqlBlockFactory blockFac = loadAsTmpFile(fileObject, "test2.apy");
  53.258 +            PlsqlBlockFactory blockFac = loadAsTmpFile(fileObject, plsqlFileName);
  53.259              assertNotNull(blockFac);
  53.260  
  53.261              List<PlsqlBlock> lstBlockFac = blockFac.getBlockHierarchy();
  53.262              //printHierarchy(lstBlockFac, "");
  53.263              //generateAssert(lstBlockFac, "lstBlockFac", "false");
  53.264 -            assertTrue(lstBlockFac.size() == 1);
  53.265 -            assertBlock(lstBlockFac, 0, PlsqlBlockType.PROCEDURE_IMPL, "Evaluate_Level___", false, 1, 59599, 6);
  53.266 -            assertBlock(lstBlockFac.get(0).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "COMMENT...", true, 783, 785, 0);
  53.267 -            assertBlock(lstBlockFac.get(0).getChildBlocks(), 1, PlsqlBlockType.CURSOR, "get_line_item_no", true, 2780, 3073, 0);
  53.268 -            assertBlock(lstBlockFac.get(0).getChildBlocks(), 2, PlsqlBlockType.CURSOR, "get_parent_supply", true, 3077, 3287, 0);
  53.269 -            assertBlock(lstBlockFac.get(0).getChildBlocks(), 3, PlsqlBlockType.COMMENT, "-- FOR", true, 3367, 3442, 0);
  53.270 -            assertBlock(lstBlockFac.get(0).getChildBlocks(), 4, PlsqlBlockType.FOR_LOOP, "parent_supply_ IN get_parent_supply", true, 3446, 59496, 16);
  53.271 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- Set parent_supply_rec_ as Parent_supply_", true, 3497, 3540, 0);
  53.272 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks(), 1, PlsqlBlockType.COMMENT, "COMMENT...", true, 3591, 3593, 0);
  53.273 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks(), 2, PlsqlBlockType.COMMENT, "COMMENT...", true, 3685, 3687, 0);
  53.274 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks(), 3, PlsqlBlockType.COMMENT, "COMMENT...", true, 3861, 3863, 0);
  53.275 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks(), 4, PlsqlBlockType.COMMENT, "COMMENT...", true, 4222, 4224, 0);
  53.276 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks(), 5, PlsqlBlockType.IF, "IF  (part_type_code_ IN ( '1','2'))", true, 4231, 4305, 0);
  53.277 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks(), 6, PlsqlBlockType.IF, "ELSIF (part_type_code_ IN ('3', '4'))", true, 4312, 4403, 0);
  53.278 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks(), 7, PlsqlBlockType.COMMENT, "-- begin CTP", true, 4479, 4494, 0);
  53.279 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks(), 8, PlsqlBlockType.COMMENT, "-- If ctp planned, check multi", true, 4610, 4681, 0);
  53.280 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks(), 9, PlsqlBlockType.IF, "IF  evaluation_rec_.ctp_planned = 1 AND\n         \n         part_type_code_ IN ('3','4')", true, 4727, 7414, 4);
  53.281 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(9).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- parent_supply_.interim_structure_level > 0 AND", true, 4775, 4823, 0);
  53.282 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(9).getChildBlocks(), 1, PlsqlBlockType.COMMENT, "-- check for multi", true, 4875, 4910, 0);
  53.283 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(9).getChildBlocks(), 2, PlsqlBlockType.IF, "IF  Dictionary_SYS.Logical_Unit_Is_Installed('SupplySourcePartManager')", true, 5032, 5469, 1);
  53.284 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(9).getChildBlocks().get(2).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- ifs_assert_safe pemase 20051221", true, 5252, 5286, 0);
  53.285 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(9).getChildBlocks(), 3, PlsqlBlockType.IF, "IF  check_source_ = 'TRUE'", true, 5552, 7376, 0);
  53.286 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks(), 10, PlsqlBlockType.COMMENT, "-- No further evaluation if multisite part.", true, 7507, 7550, 0);
  53.287 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks(), 11, PlsqlBlockType.IF, "IF  NOT multi_site_part_exist_", true, 7555, 58694, 10);
  53.288 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- IF", true, 7653, 7770, 0);
  53.289 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  ((configurable_ = 'CONFIGURED') AND (part_type_code_ = '1')) OR\n         ((dop_part_ = 'D') AND (part_type_code_ = '1'))", true, 7777, 15425, 10);
  53.290 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (evaluation_rec_.alternate_status = 'Buildable')", true, 7915, 9530, 2);
  53.291 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  Manuf_Part_Attribute_API.Get_Structure_Effectivity(parent_supply_.contract, parent_supply_.part_no)\n               = Effectivity_Control_API.Decode('SERIAL')", true, 8075, 8764, 0);
  53.292 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSE", true, 8779, 9512, 0);
  53.293 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(1).getChildBlocks(), 1, PlsqlBlockType.COMMENT, "-- Retrieve configured part routing if manufactured part.", true, 9692, 9749, 0);
  53.294 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(1).getChildBlocks(), 2, PlsqlBlockType.IF, "IF  (comp_bom_type_db_ = 'M')", true, 9759, 13111, 2);
  53.295 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(1).getChildBlocks().get(2).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (NVL(operation_rec_.operation_row_count,0) > 0)", true, 10889, 12718, 1);
  53.296 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(1).getChildBlocks().get(2).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (routing_alternative_no_ IS NOT NULL)", true, 10960, 12698, 5);
  53.297 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(1).getChildBlocks().get(2).getChildBlocks().get(0).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.FOR_LOOP, "ops IN 1..operation_rec_.operation_row_count", true, 11025, 11242, 0);
  53.298 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(1).getChildBlocks().get(2).getChildBlocks().get(0).getChildBlocks().get(0).getChildBlocks(), 1, PlsqlBlockType.COMMENT, "-- Note; Set Routing_alternative on InterimOrder After DetermineRouting", true, 11261, 11332, 0);
  53.299 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(1).getChildBlocks().get(2).getChildBlocks().get(0).getChildBlocks().get(0).getChildBlocks(), 2, PlsqlBlockType.COMMENT, "COMMENT...", true, 11731, 11733, 0);
  53.300 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(1).getChildBlocks().get(2).getChildBlocks().get(0).getChildBlocks().get(0).getChildBlocks(), 3, PlsqlBlockType.IF, "IF  (NOT Routing_Int_API.Is_Routing_Buildable(parent_supply_.contract,\n                                                               parent_supply_.part_no,\n                                                               parent_supply_.routing_revision,\n                                                               comp_bom_type_,\n                                                               routing_alternative_no_))", true, 11752, 12654, 0);
  53.301 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(1).getChildBlocks().get(2).getChildBlocks().get(0).getChildBlocks().get(0).getChildBlocks(), 4, PlsqlBlockType.COMMENT, "COMMENT...", true, 12673, 12675, 0);
  53.302 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(1).getChildBlocks().get(2).getChildBlocks(), 1, PlsqlBlockType.COMMENT, "-- Note; Create Operations that is evaluated", true, 12731, 12775, 0);
  53.303 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(1).getChildBlocks(), 3, PlsqlBlockType.COMMENT, "-- Correct the top order start date before determine the structure", true, 13163, 13229, 0);
  53.304 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(1).getChildBlocks(), 4, PlsqlBlockType.IF, "IF  parent_supply_.interim_order_no ='1'", true, 13239, 13689, 0);
  53.305 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(1).getChildBlocks(), 5, PlsqlBlockType.IF, "ELSE", true, 13699, 13781, 0);
  53.306 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(1).getChildBlocks(), 6, PlsqlBlockType.COMMENT, "-- Retrieve the components for configured part.", true, 13783, 13830, 0);
  53.307 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(1).getChildBlocks(), 7, PlsqlBlockType.COMMENT, "-- Note; Set Structure_alternative on InterimOrder After DetermineStructure", true, 14914, 15001, 0);
  53.308 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(1).getChildBlocks(), 8, PlsqlBlockType.IF, "IF  (structure_alternative_no_ IS NOT NULL)", true, 15011, 15346, 0);
  53.309 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(1).getChildBlocks(), 9, PlsqlBlockType.COMMENT, "-- IF", true, 15348, 15425, 0);
  53.310 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks(), 2, PlsqlBlockType.IF, "ELSIF (Part_Catalog_API.Get_Configurable_Db(evaluation_rec_.part_no) = 'NOT CONFIGURED')", true, 15432, 22718, 7);
  53.311 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(2).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- Note; If interim demand head part is not configured then do normal explosion", true, 15535, 15694, 0);
  53.312 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(2).getChildBlocks(), 1, PlsqlBlockType.COMMENT, "-- Get routing revision and alternate for non", true, 15829, 15904, 0);
  53.313 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(2).getChildBlocks(), 2, PlsqlBlockType.IF, "IF  (comp_bom_type_db_ = 'M')", true, 15999, 19455, 4);
  53.314 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(2).getChildBlocks().get(2).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (evaluation_rec_.alternate_status = 'Buildable')", true, 16045, 17127, 1);
  53.315 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(2).getChildBlocks().get(2).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  comp_routing_revision_ IS NULL", true, 16785, 17127, 0);
  53.316 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(2).getChildBlocks().get(2).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSE", true, 17140, 18328, 1);
  53.317 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(2).getChildBlocks().get(2).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  comp_routing_revision_ IS NULL", true, 17951, 18308, 0);
  53.318 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(2).getChildBlocks().get(2).getChildBlocks(), 2, PlsqlBlockType.IF, "IF  comp_struct_alternative_no_ IS NULL", true, 19040, 19373, 0);
  53.319 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(2).getChildBlocks().get(2).getChildBlocks(), 3, PlsqlBlockType.COMMENT, "-- Get routing revision and alternate for non", true, 19383, 19455, 0);
  53.320 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(2).getChildBlocks(), 3, PlsqlBlockType.IF, "ELSIF (comp_bom_type_db_ = 'P')", true, 19465, 19916, 0);
  53.321 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(2).getChildBlocks(), 4, PlsqlBlockType.COMMENT, "-- If manufactured, retrieve routing operations for non", true, 19960, 20032, 0);
  53.322 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(2).getChildBlocks(), 5, PlsqlBlockType.IF, "IF  (comp_bom_type_db_ = 'M')", true, 20042, 21840, 3);
  53.323 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(2).getChildBlocks().get(5).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "COMMENT...", true, 20808, 20810, 0);
  53.324 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(2).getChildBlocks().get(5).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  (NVL(operation_rec_.operation_row_count,0) > 0)", true, 20823, 21447, 1);
  53.325 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(2).getChildBlocks().get(5).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (comp_rout_alternative_no_ IS NOT NULL)", true, 20894, 21427, 1);
  53.326 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(2).getChildBlocks().get(5).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- Note; Set Routing_alternative on InterimOrder After DetermineRouting", true, 20960, 21031, 0);
  53.327 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(2).getChildBlocks().get(5).getChildBlocks(), 2, PlsqlBlockType.COMMENT, "-- Note; Create Operations that is evaluated", true, 21461, 21505, 0);
  53.328 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(2).getChildBlocks(), 6, PlsqlBlockType.COMMENT, "-- Retrieve components for non", true, 21842, 21889, 0);
  53.329 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks(), 3, PlsqlBlockType.COMMENT, "-- End of IF", true, 22796, 22817, 0);
  53.330 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks(), 4, PlsqlBlockType.COMMENT, "-- If top", true, 22900, 22981, 0);
  53.331 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks(), 5, PlsqlBlockType.IF, "IF  parent_supply_.interim_order_no ='1'", true, 22988, 23330, 0);
  53.332 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks(), 6, PlsqlBlockType.IF, "ELSE", true, 23337, 24786, 3);
  53.333 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(6).getChildBlocks(), 0, PlsqlBlockType.FOR_LOOP, "component_line_item_rec_ IN get_line_item_no(evaluation_rec_.interim_header_id, parent_order_no_)", true, 23741, 24141, 1);
  53.334 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(6).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.IF, "IF   (component_line_item_rec_.supply_interim_order_no = parent_supply_.interim_order_no)", true, 23860, 24122, 0);
  53.335 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(6).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  (leadtime_offset_ > 0)", true, 24151, 24456, 0);
  53.336 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(6).getChildBlocks(), 2, PlsqlBlockType.IF, "ELSE", true, 24466, 24545, 0);
  53.337 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks(), 7, PlsqlBlockType.COMMENT, "-- FOR", true, 24788, 24842, 0);
  53.338 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks(), 8, PlsqlBlockType.FOR_LOOP, "i IN 1..NVL(component_rec_.comp_row_count,0)", true, 24849, 58623, 6);
  53.339 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(8).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- If by", true, 25656, 25720, 0);
  53.340 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(8).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  (component_rec_.qty_per_assembly_tab(i) < 0)", true, 25730, 27866, 0);
  53.341 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(8).getChildBlocks(), 2, PlsqlBlockType.WHILE_LOOP, "(parent_interim_order_no_ > 0) and (NOT phatom_part_exist_ )", true, 28048, 28595, 1);
  53.342 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(8).getChildBlocks().get(2).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  parent_part_mrp_code_ = 'P'", true, 28332, 28430, 0);
  53.343 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(8).getChildBlocks(), 3, PlsqlBlockType.COMMENT, "-- If expense component line, then create warning and ignore.", true, 28597, 28658, 0);
  53.344 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(8).getChildBlocks(), 4, PlsqlBlockType.IF, "IF  (part_type_code_ = '6')", true, 28668, 30817, 1);
  53.345 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(8).getChildBlocks().get(4).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- Else if not phantom parent part, process.", true, 30773, 30817, 0);
  53.346 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(8).getChildBlocks(), 5, PlsqlBlockType.IF, "ELSIF (parent_interim_order_no_ = 0)", true, 30827, 58528, 6);
  53.347 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(8).getChildBlocks().get(5).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (part_type_code_ IN ( '1','2'))", true, 30881, 30961, 0);
  53.348 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(8).getChildBlocks().get(5).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSIF (part_type_code_ IN ('3', '4'))", true, 30974, 31077, 0);
  53.349 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(8).getChildBlocks().get(5).getChildBlocks(), 2, PlsqlBlockType.COMMENT, "-- IF", true, 31154, 31198, 0);
  53.350 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(8).getChildBlocks().get(5).getChildBlocks(), 3, PlsqlBlockType.IF, "IF  (component_rec_.mrp_order_code_tab(i) IN ('P','K') AND\n             (part_type_code_ = '1'))", true, 31211, 37738, 6);
  53.351 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(8).getChildBlocks().get(5).getChildBlocks().get(3).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  component_rec_.mrp_order_code_tab(i) = 'P'", true, 31437, 32540, 2);
  53.352 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(8).getChildBlocks().get(5).getChildBlocks().get(3).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (qty_avail_ >=  primary_comp_qty_ ) OR (component_rec_.consumption_item_db_tab(i) = 'Not Consumed')", true, 32266, 32420, 0);
  53.353 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(8).getChildBlocks().get(5).getChildBlocks().get(3).getChildBlocks().get(0).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSE", true, 32440, 32517, 0);
  53.354 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(8).getChildBlocks().get(5).getChildBlocks().get(3).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  get_comp_flag_ = TRUE", true, 32557, 33569, 0);
  53.355 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(8).getChildBlocks().get(5).getChildBlocks().get(3).getChildBlocks(), 2, PlsqlBlockType.IF, "ELSIF  get_comp_flag_ = FALSE", true, 33585, 37396, 1);
  53.356 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(8).getChildBlocks().get(5).getChildBlocks().get(3).getChildBlocks().get(2).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- Create InterimOrderComponent", true, 35543, 35574, 0);
  53.357 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(8).getChildBlocks().get(5).getChildBlocks().get(3).getChildBlocks(), 3, PlsqlBlockType.IF, "IF  (evaluation_rec_.single_level_explosion = 0)", true, 37450, 37570, 0);
  53.358 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(8).getChildBlocks().get(5).getChildBlocks().get(3).getChildBlocks(), 4, PlsqlBlockType.IF, "ELSE", true, 37586, 37682, 0);
  53.359 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(8).getChildBlocks().get(5).getChildBlocks().get(3).getChildBlocks(), 5, PlsqlBlockType.COMMENT, "-- IF", true, 37684, 37738, 0);
  53.360 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(8).getChildBlocks().get(5).getChildBlocks(), 4, PlsqlBlockType.IF, "ELSE", true, 37751, 58427, 13);
  53.361 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(8).getChildBlocks().get(5).getChildBlocks().get(4).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- If ctp planned record check for orders to evaluate.", true, 37771, 37825, 0);
  53.362 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(8).getChildBlocks().get(5).getChildBlocks().get(4).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  evaluation_rec_.ctp_planned = 1", true, 37841, 39673, 3);
  53.363 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(8).getChildBlocks().get(5).getChildBlocks().get(4).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  configurable_ = 'CONFIGURED'", true, 37899, 39281, 2);
  53.364 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(8).getChildBlocks().get(5).getChildBlocks().get(4).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  part_type_code_ IN ('3','4')", true, 37957, 38933, 3);
  53.365 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(8).getChildBlocks().get(5).getChildBlocks().get(4).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  Dictionary_SYS.Logical_Unit_Is_Installed('SupplySourcePartManager')", true, 38018, 38660, 1);
  53.366 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(8).getChildBlocks().get(5).getChildBlocks().get(4).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks().get(0).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- ifs_assert_safe pemase 20051221", true, 38344, 38378, 0);
  53.367 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(8).getChildBlocks().get(5).getChildBlocks().get(4).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks().get(0).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  check_source_ = 'TRUE'", true, 38686, 38794, 0);
  53.368 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(8).getChildBlocks().get(5).getChildBlocks().get(4).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks().get(0).getChildBlocks(), 2, PlsqlBlockType.IF, "ELSE", true, 38819, 38933, 0);
  53.369 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(8).getChildBlocks().get(5).getChildBlocks().get(4).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSE", true, 38955, 39281, 2);
  53.370 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(8).getChildBlocks().get(5).getChildBlocks().get(4).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (evaluation_rec_.single_level_explosion = 0)", true, 38984, 39113, 0);
  53.371 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(8).getChildBlocks().get(5).getChildBlocks().get(4).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks().get(1).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSE", true, 39138, 39252, 0);
  53.372 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(8).getChildBlocks().get(5).getChildBlocks().get(4).getChildBlocks().get(1).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSE", true, 39300, 39608, 2);
  53.373 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(8).getChildBlocks().get(5).getChildBlocks().get(4).getChildBlocks().get(1).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (evaluation_rec_.single_level_explosion = 0)", true, 39326, 39452, 0);
  53.374 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(8).getChildBlocks().get(5).getChildBlocks().get(4).getChildBlocks().get(1).getChildBlocks().get(1).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSE", true, 39474, 39582, 0);
  53.375 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(8).getChildBlocks().get(5).getChildBlocks().get(4).getChildBlocks().get(1).getChildBlocks(), 2, PlsqlBlockType.COMMENT, "-- Not ctp planned, check for orders to evaluate.", true, 39624, 39673, 0);
  53.376 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(8).getChildBlocks().get(5).getChildBlocks().get(4).getChildBlocks(), 2, PlsqlBlockType.IF, "ELSE", true, 39689, 40181, 1);
  53.377 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(8).getChildBlocks().get(5).getChildBlocks().get(4).getChildBlocks().get(2).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  ((configurable_ = 'CONFIGURED') AND (part_type_code_ = '1')) OR\n                     ((dop_part_ = 'D') AND (part_type_code_ = '1'))", true, 39712, 40158, 2);
  53.378 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(8).getChildBlocks().get(5).getChildBlocks().get(4).getChildBlocks().get(2).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (evaluation_rec_.single_level_explosion = 0)", true, 39875, 40001, 0);
  53.379 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(8).getChildBlocks().get(5).getChildBlocks().get(4).getChildBlocks().get(2).getChildBlocks().get(0).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSE", true, 40023, 40131, 0);
  53.380 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(8).getChildBlocks().get(5).getChildBlocks().get(4).getChildBlocks(), 3, PlsqlBlockType.COMMENT, "-- Note; Create InterimOrder", true, 40579, 40689, 0);
  53.381 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(8).getChildBlocks().get(5).getChildBlocks().get(4).getChildBlocks(), 4, PlsqlBlockType.IF, "IF  (comp_bom_type_db_ = 'M')", true, 40802, 47732, 3);
  53.382 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(8).getChildBlocks().get(5).getChildBlocks().get(4).getChildBlocks().get(4).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- Note; For Component part even tentative alternative is allowed as a leaf.", true, 40854, 41004, 0);
  53.383 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(8).getChildBlocks().get(5).getChildBlocks().get(4).getChildBlocks().get(4).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  Manuf_Part_Attribute_API.Get_Structure_Effectivity(component_rec_.contract_tab(i), component_rec_.component_part_tab(i))\n                     = Effectivity_Control_API.Decode('SERIAL')", true, 41024, 44290, 0);
  53.384 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(8).getChildBlocks().get(5).getChildBlocks().get(4).getChildBlocks().get(4).getChildBlocks(), 2, PlsqlBlockType.IF, "ELSE", true, 44311, 47681, 2);
  53.385 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(8).getChildBlocks().get(5).getChildBlocks().get(4).getChildBlocks().get(4).getChildBlocks().get(2).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (evaluation_rec_.alternate_status = 'Buildable')", true, 45217, 46374, 1);
  53.386 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(8).getChildBlocks().get(5).getChildBlocks().get(4).getChildBlocks().get(4).getChildBlocks().get(2).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  comp_routing_revision_ IS NULL", true, 45993, 46374, 0);
  53.387 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(8).getChildBlocks().get(5).getChildBlocks().get(4).getChildBlocks().get(4).getChildBlocks().get(2).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSE", true, 46397, 47655, 1);
  53.388 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(8).getChildBlocks().get(5).getChildBlocks().get(4).getChildBlocks().get(4).getChildBlocks().get(2).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  comp_routing_revision_ IS NULL", true, 47228, 47625, 0);
  53.389 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(8).getChildBlocks().get(5).getChildBlocks().get(4).getChildBlocks(), 5, PlsqlBlockType.IF, "ELSIF (comp_bom_type_db_ = 'P')", true, 47749, 48734, 2);
  53.390 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(8).getChildBlocks().get(5).getChildBlocks().get(4).getChildBlocks().get(5).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- Bug 77319, start", true, 48143, 48162, 0);
  53.391 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(8).getChildBlocks().get(5).getChildBlocks().get(4).getChildBlocks().get(5).getChildBlocks(), 1, PlsqlBlockType.COMMENT, "-- Bug 77319, end", true, 48694, 48711, 0);
  53.392 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(8).getChildBlocks().get(5).getChildBlocks().get(4).getChildBlocks(), 6, PlsqlBlockType.IF, "IF  (comp_eng_chg_level_ IS NULL)", true, 48787, 51225, 1);
  53.393 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(8).getChildBlocks().get(5).getChildBlocks().get(4).getChildBlocks().get(6).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- Note; Set a error message for part revision being null for component", true, 48843, 48914, 0);
  53.394 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(8).getChildBlocks().get(5).getChildBlocks().get(4).getChildBlocks(), 7, PlsqlBlockType.COMMENT, "COMMENT...", true, 51286, 51306, 0);
  53.395 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(8).getChildBlocks().get(5).getChildBlocks().get(4).getChildBlocks(), 8, PlsqlBlockType.FOR_LOOP, "j IN 1..NVL(operation_rec_.operation_row_count,0)", true, 51352, 51628, 1);
  53.396 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(8).getChildBlocks().get(5).getChildBlocks().get(4).getChildBlocks().get(8).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (component_rec_.comp_operation_no_tab(i)=operation_rec_.operation_no_tab(j))", true, 51429, 51603, 0);
  53.397 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(8).getChildBlocks().get(5).getChildBlocks().get(4).getChildBlocks(), 9, PlsqlBlockType.IF, "IF  (NOT found_)", true, 51644, 51752, 0);
  53.398 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(8).getChildBlocks().get(5).getChildBlocks().get(4).getChildBlocks(), 10, PlsqlBlockType.IF, "IF  (component_rec_.comp_operation_no_tab(i) IS NOT NULL)", true, 51769, 52797, 0);
  53.399 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(8).getChildBlocks().get(5).getChildBlocks().get(4).getChildBlocks(), 11, PlsqlBlockType.COMMENT, "COMMENT...", true, 52813, 52815, 0);
  53.400 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(8).getChildBlocks().get(5).getChildBlocks().get(4).getChildBlocks(), 12, PlsqlBlockType.IF, "IF  ( ( (component_rec_.comp_operation_no_tab(i) IS NULL) OR\n                      ( (component_rec_.comp_operation_no_tab(i) IS NOT NULL) AND\n                        (oper_valid_) ) ) AND\n                    ( (component_rec_.qty_per_assembly_tab(i) > 0) OR\n                      (component_rec_.consumption_item_db_tab(i) = 'Not Consumed') ) )", true, 52831, 58340, 4);
  53.401 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(8).getChildBlocks().get(5).getChildBlocks().get(4).getChildBlocks().get(12).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  component_rec_.consumption_item_db_tab(i) = 'Not Consumed'", true, 53199, 53353, 0);
  53.402 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(8).getChildBlocks().get(5).getChildBlocks().get(4).getChildBlocks().get(12).getChildBlocks(), 1, PlsqlBlockType.COMMENT, "-- Note; Create InterimOrderComponent", true, 54776, 54813, 0);
  53.403 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(8).getChildBlocks().get(5).getChildBlocks().get(4).getChildBlocks().get(12).getChildBlocks(), 2, PlsqlBlockType.COMMENT, "-- Note; Create InterimCompWorkGuide", true, 56753, 56789, 0);
  53.404 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(8).getChildBlocks().get(5).getChildBlocks().get(4).getChildBlocks().get(12).getChildBlocks(), 3, PlsqlBlockType.FOR_LOOP, "j IN 1..comp_work_guide_rec_.comp_work_guide_count", true, 56808, 58287, 1);
  53.405 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(8).getChildBlocks().get(5).getChildBlocks().get(4).getChildBlocks().get(12).getChildBlocks().get(3).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (component_rec_.line_item_no_tab(i) = comp_work_guide_rec_.comp_line_item_no_tab(j))", true, 56889, 58259, 1);
  53.406 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(8).getChildBlocks().get(5).getChildBlocks().get(4).getChildBlocks().get(12).getChildBlocks().get(3).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "COMMENT...", true, 57006, 57008, 0);
  53.407 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks().get(8).getChildBlocks().get(5).getChildBlocks(), 5, PlsqlBlockType.COMMENT, "-- End IF", true, 58493, 58510, 0);
  53.408 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks().get(11).getChildBlocks(), 9, PlsqlBlockType.COMMENT, "-- End FOR", true, 58624, 58682, 0);
  53.409 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks(), 12, PlsqlBlockType.COMMENT, "-- Note; Initialize all records for the next interim order", true, 58737, 58795, 0);
  53.410 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks(), 13, PlsqlBlockType.COMMENT, "COMMENT...", true, 59312, 59314, 0);
  53.411 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks(), 14, PlsqlBlockType.COMMENT, "-- Bug 74483, start", true, 59362, 59381, 0);
  53.412 -            assertBlock(lstBlockFac.get(0).getChildBlocks().get(4).getChildBlocks(), 15, PlsqlBlockType.COMMENT, "-- Bug 74483, end", true, 59466, 59483, 0);
  53.413 -            assertBlock(lstBlockFac.get(0).getChildBlocks(), 5, PlsqlBlockType.COMMENT, "-- End FOR", true, 59497, 59576, 0);
  53.414 +            processBlocks(plsqlFileName, lstBlockFac);
  53.415 +
  53.416          } finally {
  53.417              if (fileObject != null) {
  53.418                  fileObject.delete();
  53.419 @@ -440,23 +197,18 @@
  53.420      @Test
  53.421      public void testAdvanced3() throws IOException, BadLocationException {
  53.422          System.out.println("Advanced test case 3");
  53.423 -        FileObject fileObject = fs.getRoot().createData("080617_75132_fndbas.cdb");
  53.424 +        final String plsqlFileName = "080617_75132_fndbas.cdb";
  53.425 +        FileObject fileObject = fs.getRoot().createData(plsqlFileName);
  53.426          assertNotNull(fileObject);
  53.427          try {
  53.428 -            PlsqlBlockFactory blockFac = loadAsTmpFile(fileObject, "080617_75132_fndbas.cdb");
  53.429 +            PlsqlBlockFactory blockFac = loadAsTmpFile(fileObject, plsqlFileName);
  53.430              assertNotNull(blockFac);
  53.431  
  53.432              List<PlsqlBlock> lstBlockFac = blockFac.getBlockHierarchy();
  53.433  //         printHierarchy(lstBlockFac, "");
  53.434  //         generateAssert(lstBlockFac, "lstBlockFac", "false");
  53.435 -            assertTrue(lstBlockFac.size() == 5);
  53.436 -            assertBlock(lstBlockFac, 0, PlsqlBlockType.COMMENT, "-- File    :  080617_75132_Fndbas.cdb", false, 0, 760, 0);
  53.437 -            assertBlock(lstBlockFac, 1, PlsqlBlockType.BEGIN_END, "", false, 795, 903, 0);
  53.438 -            assertBlock(lstBlockFac, 2, PlsqlBlockType.DECLARE_END, "", false, 965, 1601, 1);
  53.439 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  NOT &AO..Installation_SYS.Is_Db_Patch_Registered('FNDBAS', 75132)", true, 1130, 1596, 0);
  53.440 -            assertBlock(lstBlockFac, 3, PlsqlBlockType.DECLARE_END, "", false, 1666, 2310, 1);
  53.441 -            assertBlock(lstBlockFac.get(3).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  NOT &AO..Installation_SYS.Is_Db_Patch_Registered('FNDBAS', 75132)", true, 1839, 2305, 0);
  53.442 -            assertBlock(lstBlockFac, 4, PlsqlBlockType.BEGIN_END, "", false, 2315, 2416, 0);
  53.443 +            assertEquals(lstBlockFac.size(), 5);
  53.444 +            processBlocks(plsqlFileName, lstBlockFac);
  53.445          } finally {
  53.446              if (fileObject != null) {
  53.447                  fileObject.delete();
  53.448 @@ -467,19 +219,18 @@
  53.449      @Test
  53.450      public void testAdvanced4() throws IOException, BadLocationException {
  53.451          System.out.println("Advanced test case 4");
  53.452 -        FileObject fileObject = fs.getRoot().createData("081114_78488_VMOSFA.cdb");
  53.453 +        final String plsqlFileName = "081114_78488_VMOSFA.cdb";
  53.454 +        FileObject fileObject = fs.getRoot().createData(plsqlFileName);
  53.455          assertNotNull(fileObject);
  53.456          try {
  53.457 -            PlsqlBlockFactory blockFac = loadAsTmpFile(fileObject, "081114_78488_VMOSFA.cdb");
  53.458 +            PlsqlBlockFactory blockFac = loadAsTmpFile(fileObject, plsqlFileName);
  53.459              assertNotNull(blockFac);
  53.460  
  53.461              List<PlsqlBlock> lstBlockFac = blockFac.getBlockHierarchy();
  53.462  //         printHierarchy(lstBlockFac, "");
  53.463  //         generateAssert(lstBlockFac, "lstBlockFac", "false");
  53.464 -            assertTrue(lstBlockFac.size() == 3);
  53.465 -            assertBlock(lstBlockFac, 0, PlsqlBlockType.COMMENT, "-- Module  : VMOSFA", false, 0, 473, 0);
  53.466 -            assertBlock(lstBlockFac, 1, PlsqlBlockType.COMMENT, "COMMENT...", false, 516, 634, 0);
  53.467 -            assertBlock(lstBlockFac, 2, PlsqlBlockType.TABLE_COMMENT, "VMO_BASE_SYNC_PACKAGE_VIEW", false, 636, 894, 0);
  53.468 +            assertEquals(lstBlockFac.size(), 3);
  53.469 +            processBlocks(plsqlFileName, lstBlockFac);
  53.470          } finally {
  53.471              if (fileObject != null) {
  53.472                  fileObject.delete();
  53.473 @@ -490,579 +241,19 @@
  53.474      @Test
  53.475      public void testAdvanced5() throws IOException, BadLocationException {
  53.476          System.out.println("Advanced test case 5");
  53.477 -        FileObject fileObject = fs.getRoot().createData("Dictionary.apy");
  53.478 +        final String plsqlFileName = "Dictionary.apy";
  53.479 +        FileObject fileObject = fs.getRoot().createData(plsqlFileName);
  53.480          assertNotNull(fileObject);
  53.481          try {
  53.482 -            PlsqlBlockFactory blockFac = loadAsTmpFile(fileObject, "Dictionary.apy");
  53.483 +            PlsqlBlockFactory blockFac = loadAsTmpFile(fileObject, plsqlFileName);
  53.484              assertNotNull(blockFac);
  53.485  
  53.486              List<PlsqlBlock> lstBlockFac = blockFac.getBlockHierarchy();
  53.487  //         printHierarchy(lstBlockFac, "");
  53.488  //         generateAssert(lstBlockFac, "lstBlockFac", "false");
  53.489 -            assertTrue(lstBlockFac.size() == 4);
  53.490 -            assertBlock(lstBlockFac, 0, PlsqlBlockType.COMMENT, "-- Package: Dictionary_SYS", false, 0, 19335, 0);
  53.491 -            assertBlock(lstBlockFac, 1, PlsqlBlockType.COMMENT, "-- PACKAGES FOR METHODS ", false, 19440, 19673, 0);
  53.492 -            assertBlock(lstBlockFac, 2, PlsqlBlockType.PACKAGE_BODY, "DICTIONARY_SYS", false, 19712, 130195, 68);
  53.493 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- SERVICE SPECIFIC IMPLEMENTATION METHOD DECLARATIONS ", true, 20170, 20403, 0);
  53.494 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 1, PlsqlBlockType.FUNCTION_DEF, "Check_Method_From_View___", true, 20405, 20525, 0);
  53.495 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 2, PlsqlBlockType.COMMENT, "-- SERVICE SPECIFIC IMPLEMENTATION METHODS ", true, 20527, 20760, 0);
  53.496 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 3, PlsqlBlockType.FUNCTION_IMPL, "Check_Method_From_View___", true, 20762, 21616, 1);
  53.497 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(3).getChildBlocks(), 0, PlsqlBlockType.WHILE_LOOP, "(index_ > 0)", true, 21227, 21568, 1);
  53.498 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(3).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (Method_Is_Installed(package_name_, method_name_))", true, 21376, 21499, 0);
  53.499 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 4, PlsqlBlockType.FUNCTION_IMPL, "Rebuild_Dictionary_Storage___", true, 21618, 97424, 47);
  53.500 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "get_last_update", true, 23133, 23218, 0);
  53.501 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks(), 1, PlsqlBlockType.COMMENT, "-- LAST_DDL_TIME:", true, 23223, 24026, 0);
  53.502 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks(), 2, PlsqlBlockType.CURSOR, "get_pkgs_to_update", true, 24030, 24353, 0);
  53.503 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks(), 3, PlsqlBlockType.COMMENT, "-- Views to update (last_ddl_time has changed since last update)", true, 24398, 24462, 0);
  53.504 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks(), 4, PlsqlBlockType.CURSOR, "get_views_to_update", true, 24466, 24674, 0);
  53.505 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks(), 5, PlsqlBlockType.COMMENT, "-- All packages (used when doing a full refresh for performance reasons)", true, 24679, 24751, 0);
  53.506 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks(), 6, PlsqlBlockType.CURSOR, "get_all_pkgs", true, 24755, 24964, 0);
  53.507 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks(), 7, PlsqlBlockType.COMMENT, "-- All view (used when doing a full refresh for performance reasons)", true, 25009, 25077, 0);
  53.508 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks(), 8, PlsqlBlockType.CURSOR, "get_all_views", true, 25081, 25210, 0);
  53.509 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks(), 9, PlsqlBlockType.COMMENT, "-- Package information", true, 25215, 25237, 0);
  53.510 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks(), 10, PlsqlBlockType.CURSOR, "get_package_info", true, 25241, 25892, 0);
  53.511 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks(), 11, PlsqlBlockType.COMMENT, "-- View information", true, 25897, 25916, 0);
  53.512 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks(), 12, PlsqlBlockType.CURSOR, "get_view_comments", true, 25920, 26094, 0);
  53.513 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks(), 13, PlsqlBlockType.PROCEDURE_IMPL, "Write_Error_Text___", true, 26099, 26631, 2);
  53.514 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(13).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  write_clob_", true, 26281, 26443, 2);
  53.515 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(13).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  new_line_", true, 26310, 26375, 0);
  53.516 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(13).getChildBlocks().get(0).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSE", true, 26385, 26443, 0);
  53.517 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(13).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSE", true, 26450, 26603, 2);
  53.518 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(13).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  new_line_", true, 26464, 26522, 0);
  53.519 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(13).getChildBlocks().get(1).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSE", true, 26532, 26589, 0);
  53.520 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks(), 14, PlsqlBlockType.PROCEDURE_IMPL, "Get_Next_Pkg_Index___", true, 26637, 27027, 1);
  53.521 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(14).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "next_index", true, 26753, 26896, 0);
  53.522 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks(), 15, PlsqlBlockType.PROCEDURE_IMPL, "Get_Next_View_Index___", true, 27032, 27421, 1);
  53.523 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(15).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "next_index", true, 27151, 27288, 0);
  53.524 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks(), 16, PlsqlBlockType.PROCEDURE_IMPL, "Handle_Possible_State_Pkg___", true, 27426, 27891, 1);
  53.525 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(16).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  method_name_ = 'Finite_State_Events__'", true, 27552, 27854, 3);
  53.526 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(16).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- Set global variable", true, 27608, 27630, 0);
  53.527 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(16).getChildBlocks().get(0).getChildBlocks(), 1, PlsqlBlockType.COMMENT, "-- Update main dictionary information", true, 27674, 27711, 0);
  53.528 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(16).getChildBlocks().get(0).getChildBlocks(), 2, PlsqlBlockType.STATEMENT, "UPDATE dictionary_sys_package_tab", true, 27721, 27839, 0);
  53.529 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks(), 17, PlsqlBlockType.PROCEDURE_IMPL, "Fill_List_Array___", true, 27896, 31673, 3);
  53.530 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(17).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- Check for incorrectness in number of values and remove redundant information if it occurs", true, 28373, 28465, 0);
  53.531 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(17).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  db_values_.COUNT != client_values_.COUNT", true, 28472, 31268, 4);
  53.532 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(17).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  db_count_ > client_count_", true, 28618, 29707, 2);
  53.533 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(17).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- Missing client values", true, 28664, 28688, 0);
  53.534 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(17).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks(), 1, PlsqlBlockType.FOR_LOOP, "i IN Nvl(db_values_.FIRST, 0)..Nvl(db_values_.LAST, -1)", true, 28851, 29707, 3);
  53.535 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(17).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- Try to find more values by calling standard interfaces for domains,", true, 28931, 29072, 0);
  53.536 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(17).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks().get(1).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  domain_", true, 29088, 29471, 1);
  53.537 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(17).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks().get(1).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.BEGIN_END, "", true, 29122, 29471, 1);
  53.538 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(17).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks().get(1).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- ifs_assert_safe utgulk 20060105", true, 29149, 29183, 0);
  53.539 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(17).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks().get(1).getChildBlocks(), 2, PlsqlBlockType.IF, "ELSE", true, 29487, 29684, 1);
  53.540 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(17).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks().get(1).getChildBlocks().get(2).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- Can't find the values for other types than domains...", true, 29510, 29566, 0);
  53.541 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(17).getChildBlocks().get(1).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSE", true, 29717, 30787, 2);
  53.542 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(17).getChildBlocks().get(1).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- Missing db values", true, 29734, 29754, 0);
  53.543 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(17).getChildBlocks().get(1).getChildBlocks().get(1).getChildBlocks(), 1, PlsqlBlockType.FOR_LOOP, "i IN Nvl(client_values_.FIRST,0)..Nvl(client_values_.LAST,-1)", true, 29917, 30770, 3);
  53.544 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(17).getChildBlocks().get(1).getChildBlocks().get(1).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- Try to find more values by calling standard interfaces for domains,", true, 30003, 30144, 0);
  53.545 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(17).getChildBlocks().get(1).getChildBlocks().get(1).getChildBlocks().get(1).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  domain_", true, 30160, 30539, 1);
  53.546 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(17).getChildBlocks().get(1).getChildBlocks().get(1).getChildBlocks().get(1).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.BEGIN_END, "", true, 30194, 30539, 1);
  53.547 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(17).getChildBlocks().get(1).getChildBlocks().get(1).getChildBlocks().get(1).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- ifs_assert_safe utgulk 20060105", true, 30221, 30255, 0);
  53.548 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(17).getChildBlocks().get(1).getChildBlocks().get(1).getChildBlocks().get(1).getChildBlocks(), 2, PlsqlBlockType.IF, "ELSE", true, 30555, 30748, 1);
  53.549 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(17).getChildBlocks().get(1).getChildBlocks().get(1).getChildBlocks().get(1).getChildBlocks().get(2).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- Can't find the values for other types than domains...", true, 30578, 30634, 0);
  53.550 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(17).getChildBlocks().get(1).getChildBlocks(), 2, PlsqlBlockType.COMMENT, "-- Log information if values could not be determined...", true, 30797, 30852, 0);
  53.551 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(17).getChildBlocks().get(1).getChildBlocks(), 3, PlsqlBlockType.IF, "IF  error_", true, 30862, 31254, 0);
  53.552 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(17).getChildBlocks(), 2, PlsqlBlockType.FOR_LOOP, "i IN Nvl(db_values_.FIRST,0)..Nvl(db_values_.LAST,-1)", true, 31275, 31646, 0);
  53.553 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks(), 18, PlsqlBlockType.PROCEDURE_IMPL, "Rebuild_State_Machine___", true, 31678, 37787, 10);
  53.554 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(18).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "state_mach", true, 31795, 32633, 0);
  53.555 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(18).getChildBlocks(), 1, PlsqlBlockType.FUNCTION_IMPL, "Get_Lu_Name_", true, 33226, 33747, 1);
  53.556 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(18).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "SELECT lu_name INTO tmp_", true, 33384, 33504, 0);
  53.557 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(18).getChildBlocks(), 2, PlsqlBlockType.FUNCTION_IMPL, "trim_str", true, 33758, 33900, 0);
  53.558 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(18).getChildBlocks(), 3, PlsqlBlockType.IF, "IF  full_mode_", true, 33918, 33974, 0);
  53.559 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(18).getChildBlocks(), 4, PlsqlBlockType.IF, "ELSE", true, 33981, 34100, 1);
  53.560 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(18).getChildBlocks().get(4).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "SELECT NVL(MAX(updated),SYSDATE-1000) INTO last_update_ FROM dictionary_sys_state_mach_tab", true, 33995, 34085, 0);
  53.561 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(18).getChildBlocks(), 5, PlsqlBlockType.WHILE_LOOP, "i < state_machine.LAST", true, 34236, 35499, 2);
  53.562 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(18).getChildBlocks().get(5).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  state_machine(i-1).type ='START' AND state_machine(i).type = 'EVENT'", true, 34280, 35432, 1);
  53.563 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(18).getChildBlocks().get(5).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.WHILE_LOOP, "in_state_transistion AND i+1 <= state_machine.LAST", true, 34470, 35432, 3);
  53.564 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(18).getChildBlocks().get(5).getChildBlocks().get(0).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  state_machine(i).type='EVENT' AND\n                  state_machine(i+1).type='END' AND\n                  trim_str(state_machine(i).what) IS NOT NULL", true, 34548, 35184, 0);
  53.565 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(18).getChildBlocks().get(5).getChildBlocks().get(0).getChildBlocks().get(0).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSIF state_machine(i).type!='START' AND i < state_machine.LAST", true, 35200, 35294, 0);
  53.566 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(18).getChildBlocks().get(5).getChildBlocks().get(0).getChildBlocks().get(0).getChildBlocks(), 2, PlsqlBlockType.IF, "ELSE", true, 35310, 35410, 0);
  53.567 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(18).getChildBlocks().get(5).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSE", true, 35442, 35483, 0);
  53.568 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(18).getChildBlocks(), 6, PlsqlBlockType.COMMENT, "-- This line only used when debugging", true, 35500, 35747, 0);
  53.569 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(18).getChildBlocks(), 7, PlsqlBlockType.COMMENT, "-- ifs_assert_safe pemase 20060215", true, 35773, 35807, 0);
  53.570 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(18).getChildBlocks(), 8, PlsqlBlockType.STATEMENT, "INSERT INTO dictionary_sys_state_mach_tab VALUES model(k)", true, 36346, 36403, 0);
  53.571 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(18).getChildBlocks(), 9, PlsqlBlockType.FOR_LOOP, "i IN 1..error_count_", true, 36679, 37613, 1);
  53.572 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(18).getChildBlocks().get(9).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- Write_Error_Text___ (error_text_, '   Position number '||to_char(position_));", true, 36776, 36873, 0);
  53.573 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks(), 19, PlsqlBlockType.PROCEDURE_IMPL, "Rebuild_All_State_Event___", true, 37793, 44384, 9);
  53.574 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(19).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "get_events", true, 37912, 38424, 0);
  53.575 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(19).getChildBlocks(), 1, PlsqlBlockType.FUNCTION_IMPL, "Get_Lu_Name_", true, 39041, 39523, 1);
  53.576 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(19).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "SELECT lu_name INTO tmp_", true, 39184, 39298, 0);
  53.577 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(19).getChildBlocks(), 2, PlsqlBlockType.IF, "IF  full_mode_", true, 39541, 39597, 0);
  53.578 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(19).getChildBlocks(), 3, PlsqlBlockType.IF, "ELSE", true, 39604, 39723, 1);
  53.579 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(19).getChildBlocks().get(3).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "SELECT NVL(MAX(updated),SYSDATE-1000) INTO last_update_ FROM dictionary_sys_state_mach_tab", true, 39618, 39708, 0);
  53.580 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(19).getChildBlocks(), 4, PlsqlBlockType.IF, "IF  SQL%NOTFOUND", true, 39810, 39947, 0);
  53.581 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(19).getChildBlocks(), 5, PlsqlBlockType.IF, "ELSE", true, 39954, 40399, 1);
  53.582 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(19).getChildBlocks().get(5).getChildBlocks(), 0, PlsqlBlockType.BEGIN_END, "", true, 39968, 40385, 1);
  53.583 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(19).getChildBlocks().get(5).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- ifs_assert_safe pemase 20060215", true, 39986, 40020, 0);
  53.584 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(19).getChildBlocks(), 6, PlsqlBlockType.FOR_LOOP, "i IN Nvl(state_events_.FIRST,0)..Nvl(state_events_.LAST,-1)", true, 40756, 42282, 1);
  53.585 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(19).getChildBlocks().get(6).getChildBlocks(), 0, PlsqlBlockType.LOOP, "", true, 40908, 42266, 2);
  53.586 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(19).getChildBlocks().get(6).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  event_idx_!=1", true, 41108, 41441, 1);
  53.587 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(19).getChildBlocks().get(6).getChildBlocks().get(0).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.FOR_LOOP, "j IN Nvl(event_array_.FIRST,0)..Nvl(event_array_.LAST,-1)", true, 41184, 41421, 1);
  53.588 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(19).getChildBlocks().get(6).getChildBlocks().get(0).getChildBlocks().get(0).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  event_array_(j)=event_", true, 41269, 41396, 0);
  53.589 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(19).getChildBlocks().get(6).getChildBlocks().get(0).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  NOT dup_event_val_", true, 41454, 42217, 1);
  53.590 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(19).getChildBlocks().get(6).getChildBlocks().get(0).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- ELSE", true, 41934, 42197, 0);
  53.591 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(19).getChildBlocks(), 7, PlsqlBlockType.STATEMENT, "INSERT INTO dictionary_sys_state_event_tab VALUES state_event_values_(j)", true, 42773, 42845, 0);
  53.592 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(19).getChildBlocks(), 8, PlsqlBlockType.FOR_LOOP, "i IN 1..error_count_", true, 43104, 43892, 1);
  53.593 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(19).getChildBlocks().get(8).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- Write_Error_Text___ (error_text_, '   Position number '||to_char(position_));", true, 43198, 43292, 0);
  53.594 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks(), 20, PlsqlBlockType.PROCEDURE_IMPL, "Rebuild_State_Transitions___", true, 44391, 50214, 9);
  53.595 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(20).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "get_state_events_", true, 44784, 45087, 0);
  53.596 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(20).getChildBlocks(), 1, PlsqlBlockType.FUNCTION_IMPL, "Get_Allowed_State_Trans", true, 45370, 46212, 1);
  53.597 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(20).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- ifs_assert_safe utgulk 20060105", true, 45784, 45818, 0);
  53.598 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(20).getChildBlocks(), 2, PlsqlBlockType.IF, "IF  full_mode_", true, 46230, 46286, 0);
  53.599 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(20).getChildBlocks(), 3, PlsqlBlockType.IF, "ELSE", true, 46293, 46569, 1);
  53.600 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(20).getChildBlocks().get(3).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "SELECT NVL(MAX(to_date(timestamp, 'RRRR-MM-DD:HH24:MI:SS')),SYSDATE-1000) INTO last_update_", true, 46307, 46554, 0);
  53.601 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(20).getChildBlocks(), 4, PlsqlBlockType.IF, "IF  SQL%NOTFOUND", true, 46668, 46817, 0);
  53.602 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(20).getChildBlocks(), 5, PlsqlBlockType.IF, "ELSE", true, 46824, 47269, 1);
  53.603 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(20).getChildBlocks().get(5).getChildBlocks(), 0, PlsqlBlockType.BEGIN_END, "", true, 46838, 47255, 1);
  53.604 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(20).getChildBlocks().get(5).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- ifs_assert_safe pemase 20060215", true, 46856, 46890, 0);
  53.605 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(20).getChildBlocks(), 6, PlsqlBlockType.FOR_LOOP, "i IN Nvl(state_list_.FIRST,0)..Nvl(state_list_.LAST,-1)", true, 47326, 48183, 1);
  53.606 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(20).getChildBlocks().get(6).getChildBlocks(), 0, PlsqlBlockType.LOOP, "", true, 47522, 48167, 0);
  53.607 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(20).getChildBlocks(), 7, PlsqlBlockType.STATEMENT, "INSERT INTO dictionary_sys_state_trans_tab VALUES state_trans_values_(j)", true, 48677, 48749, 0);
  53.608 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(20).getChildBlocks(), 8, PlsqlBlockType.FOR_LOOP, "i IN 1..error_count_", true, 49013, 49941, 1);
  53.609 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(20).getChildBlocks().get(8).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- Write_Error_Text___ (error_text_, '   Position number '||to_char(position_));", true, 49107, 49201, 0);
  53.610 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks(), 21, PlsqlBlockType.PROCEDURE_IMPL, "Tokenize_Lists___", true, 50219, 51194, 1);
  53.611 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(21).getChildBlocks(), 0, PlsqlBlockType.WHILE_LOOP, "end_pos_ < len_ AND end_pos_ != 0", true, 50701, 51168, 0);
  53.612 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks(), 22, PlsqlBlockType.PROCEDURE_IMPL, "Insert_Package_Information___", true, 51199, 54616, 9);
  53.613 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(22).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "INSERT INTO dictionary_sys_tab", true, 51472, 51620, 0);
  53.614 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(22).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  length(lu_name_) > 25", true, 51631, 51839, 0);
  53.615 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(22).getChildBlocks(), 2, PlsqlBlockType.STATEMENT, "UPDATE dictionary_sys_tab", true, 51904, 52085, 0);
  53.616 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(22).getChildBlocks(), 3, PlsqlBlockType.COMMENT, "-- Insert and if already existing then update.", true, 52482, 52592, 0);
  53.617 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(22).getChildBlocks(), 4, PlsqlBlockType.STATEMENT, "INSERT INTO dictionary_sys_package_tab", true, 52672, 52880, 0);
  53.618 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(22).getChildBlocks(), 5, PlsqlBlockType.COMMENT, "-- Fix problems with LU that has more than one _API package (e.g. for state handling).", true, 52891, 53002, 0);
  53.619 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(22).getChildBlocks(), 6, PlsqlBlockType.STATEMENT, "UPDATE Dictionary_Sys_Package_Tab", true, 53012, 53697, 0);
  53.620 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(22).getChildBlocks(), 7, PlsqlBlockType.COMMENT, "COMMENT...", true, 53709, 53711, 0);
  53.621 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(22).getChildBlocks(), 8, PlsqlBlockType.STATEMENT, "UPDATE dictionary_sys_package_tab", true, 53776, 53939, 0);
  53.622 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks(), 23, PlsqlBlockType.PROCEDURE_IMPL, "Insert_View_Information___", true, 54621, 57785, 12);
  53.623 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(23).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- Find the base view according to naming conventions...", true, 54930, 55061, 0);
  53.624 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(23).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  view_name_ =  Clientnametodbname_(lu_name_)", true, 55068, 55185, 0);
  53.625 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(23).getChildBlocks(), 2, PlsqlBlockType.IF, "ELSE", true, 55192, 55269, 0);
  53.626 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(23).getChildBlocks(), 3, PlsqlBlockType.COMMENT, "-- Insert into dictionary_sys_tab. It is likely this entry already exist (from package information),", true, 55276, 55448, 0);
  53.627 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(23).getChildBlocks(), 4, PlsqlBlockType.IF, "IF  base_view_", true, 55455, 55845, 2);
  53.628 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(23).getChildBlocks().get(4).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "UPDATE dictionary_sys_tab", true, 55483, 55622, 0);
  53.629 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(23).getChildBlocks().get(4).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  SQL%NOTFOUND", true, 55633, 55845, 1);
  53.630 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(23).getChildBlocks().get(4).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "INSERT INTO dictionary_sys_tab", true, 55666, 55827, 0);
  53.631 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(23).getChildBlocks(), 5, PlsqlBlockType.IF, "ELSE", true, 55852, 56179, 2);
  53.632 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(23).getChildBlocks().get(5).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "UPDATE dictionary_sys_tab", true, 55866, 55965, 0);
  53.633 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(23).getChildBlocks().get(5).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  SQL%NOTFOUND", true, 55976, 56165, 1);
  53.634 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(23).getChildBlocks().get(5).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "INSERT INTO dictionary_sys_tab", true, 56009, 56147, 0);
  53.635 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(23).getChildBlocks(), 6, PlsqlBlockType.COMMENT, "-- Insert into dictionary_sys_view_tab", true, 56186, 56341, 0);
  53.636 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(23).getChildBlocks(), 7, PlsqlBlockType.IF, "IF  base_view_", true, 56419, 56468, 0);
  53.637 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(23).getChildBlocks(), 8, PlsqlBlockType.IF, "ELSIF substr(view_name_, -4) = '_REP'", true, 56478, 56551, 0);
  53.638 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(23).getChildBlocks(), 9, PlsqlBlockType.IF, "ELSE", true, 56561, 56613, 0);
  53.639 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(23).getChildBlocks(), 10, PlsqlBlockType.STATEMENT, "INSERT INTO dictionary_sys_view_tab", true, 56623, 56838, 0);
  53.640 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(23).getChildBlocks(), 11, PlsqlBlockType.STATEMENT, "UPDATE dictionary_sys_view_tab", true, 56904, 57146, 0);
  53.641 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks(), 24, PlsqlBlockType.PROCEDURE_IMPL, "Refresh_View_Columns___", true, 57790, 64140, 7);
  53.642 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(24).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "get_view_columns", true, 57896, 58224, 0);
  53.643 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(24).getChildBlocks(), 1, PlsqlBlockType.CURSOR, "get_new_view_columns", true, 58232, 58678, 0);
  53.644 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(24).getChildBlocks(), 2, PlsqlBlockType.COMMENT, "-- Fetch view column information and delete old information", true, 59249, 59326, 0);
  53.645 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(24).getChildBlocks(), 3, PlsqlBlockType.IF, "IF  all_views_", true, 59333, 59640, 1);
  53.646 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(24).getChildBlocks().get(3).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- Remove all old information", true, 59491, 59564, 0);
  53.647 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(24).getChildBlocks(), 4, PlsqlBlockType.IF, "ELSE", true, 59647, 60151, 2);
  53.648 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(24).getChildBlocks().get(4).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- Remove old information for all of the methods that is being updated", true, 59803, 59873, 0);
  53.649 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(24).getChildBlocks().get(4).getChildBlocks(), 1, PlsqlBlockType.STATEMENT, "DELETE FROM dictionary_sys_view_column_tab c", true, 59883, 60136, 0);
  53.650 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(24).getChildBlocks(), 5, PlsqlBlockType.COMMENT, "-- Process all of the view column information", true, 60159, 60204, 0);
  53.651 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(24).getChildBlocks(), 6, PlsqlBlockType.IF, "IF  view_columns_.COUNT > 0", true, 60211, 64108, 3);
  53.652 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(24).getChildBlocks().get(6).getChildBlocks(), 0, PlsqlBlockType.FOR_LOOP, "i IN Nvl(view_columns_.FIRST,0)..Nvl(view_columns_.LAST,-1)", true, 60252, 62822, 3);
  53.653 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(24).getChildBlocks().get(6).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- Find the lu name for the view if view has changed", true, 60333, 60385, 0);
  53.654 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(24).getChildBlocks().get(6).getChildBlocks().get(0).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  (prev_view_ <> view_columns_(i).view_name)", true, 60398, 60606, 0);
  53.655 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(24).getChildBlocks().get(6).getChildBlocks().get(0).getChildBlocks(), 2, PlsqlBlockType.IF, "IF  lu_name_ IS NOT NULL", true, 60619, 62803, 1);
  53.656 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(24).getChildBlocks().get(6).getChildBlocks().get(0).getChildBlocks().get(2).getChildBlocks(), 0, PlsqlBlockType.BEGIN_END, "", true, 60663, 62754, 0);
  53.657 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(24).getChildBlocks().get(6).getChildBlocks(), 1, PlsqlBlockType.COMMENT, "-- Insert all the values into dictionary_sys_view_column_tab", true, 62833, 62893, 0);
  53.658 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(24).getChildBlocks().get(6).getChildBlocks(), 2, PlsqlBlockType.BEGIN_END, "", true, 62903, 64094, 2);
  53.659 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(24).getChildBlocks().get(6).getChildBlocks().get(2).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "INSERT INTO dictionary_sys_view_column_tab VALUES complete_columns_(j)", true, 63027, 63097, 0);
  53.660 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(24).getChildBlocks().get(6).getChildBlocks().get(2).getChildBlocks(), 1, PlsqlBlockType.FOR_LOOP, "i IN 1..error_count_", true, 63371, 64080, 0);
  53.661 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks(), 25, PlsqlBlockType.COMMENT, "-- Handles both domain and state information, behaves different depending on info_type", true, 64145, 64231, 0);
  53.662 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks(), 26, PlsqlBlockType.PROCEDURE_IMPL, "Refresh_Domain_State_Info___", true, 64235, 70207, 11);
  53.663 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(26).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- Domain information", true, 64388, 64409, 0);
  53.664 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(26).getChildBlocks(), 1, PlsqlBlockType.CURSOR, "get_domain_info", true, 64416, 65703, 0);
  53.665 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(26).getChildBlocks(), 2, PlsqlBlockType.COMMENT, "-- State information", true, 65717, 65737, 0);
  53.666 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(26).getChildBlocks(), 3, PlsqlBlockType.CURSOR, "get_state_info", true, 65744, 66259, 0);
  53.667 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(26).getChildBlocks(), 4, PlsqlBlockType.COMMENT, "-- AND    line BETWEEN 2 AND 11;", true, 66260, 66300, 0);
  53.668 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(26).getChildBlocks(), 5, PlsqlBlockType.COMMENT, "-- Delete old values (they can only exist if this is not a full refresh)", true, 66671, 66743, 0);
  53.669 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(26).getChildBlocks(), 6, PlsqlBlockType.IF, "IF  NOT refresh_all_", true, 66750, 67129, 2);
  53.670 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(26).getChildBlocks().get(6).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  refresh_domain_", true, 66784, 66946, 1);
  53.671 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(26).getChildBlocks().get(6).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "DELETE FROM dictionary_sys_domain_tab", true, 66820, 66945, 0);
  53.672 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(26).getChildBlocks().get(6).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSE", true, 66956, 67115, 1);
  53.673 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(26).getChildBlocks().get(6).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "DELETE FROM dictionary_sys_state_tab", true, 66973, 67097, 0);
  53.674 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(26).getChildBlocks(), 7, PlsqlBlockType.COMMENT, "-- Clear variables", true, 67137, 67155, 0);
  53.675 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(26).getChildBlocks(), 8, PlsqlBlockType.IF, "IF  refresh_domain_", true, 67248, 67904, 2);
  53.676 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(26).getChildBlocks().get(8).getChildBlocks(), 0, PlsqlBlockType.FOR_LOOP, "j_ IN Nvl(list_.FIRST,0)..Nvl(list_.LAST,-1)", true, 67434, 67572, 0);
  53.677 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(26).getChildBlocks().get(8).getChildBlocks(), 1, PlsqlBlockType.FOR_LOOP, "j_ IN Nvl(list_.FIRST,0)..Nvl(list_.LAST,-1)", true, 67762, 67904, 0);
  53.678 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(26).getChildBlocks(), 9, PlsqlBlockType.IF, "ELSE", true, 67911, 68423, 2);
  53.679 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(26).getChildBlocks().get(9).getChildBlocks(), 0, PlsqlBlockType.FOR_LOOP, "list IN get_state_info(package_name_)", true, 67925, 68323, 3);
  53.680 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(26).getChildBlocks().get(9).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- Break down the list into single values in an array", true, 67984, 68037, 0);
  53.681 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(26).getChildBlocks().get(9).getChildBlocks().get(0).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  list.list_type = 'db_state_list_'", true, 68050, 68155, 0);
  53.682 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(26).getChildBlocks().get(9).getChildBlocks().get(0).getChildBlocks(), 2, PlsqlBlockType.IF, "ELSIF list.list_type = 'client_state_list_'", true, 68168, 68304, 0);
  53.683 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(26).getChildBlocks().get(9).getChildBlocks(), 1, PlsqlBlockType.COMMENT, "-- Get state events", true, 68333, 68408, 0);
  53.684 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(26).getChildBlocks(), 10, PlsqlBlockType.IF, "IF  db_values_.count > 0", true, 68431, 70170, 3);
  53.685 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(26).getChildBlocks().get(10).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- Fill the result array with the rest of the necessary information", true, 68469, 68536, 0);
  53.686 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(26).getChildBlocks().get(10).getChildBlocks(), 1, PlsqlBlockType.COMMENT, "-- Insert all of the values into dictionary_sys_domain_tab", true, 68659, 68717, 0);
  53.687 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(26).getChildBlocks().get(10).getChildBlocks(), 2, PlsqlBlockType.BEGIN_END, "", true, 68727, 70156, 3);
  53.688 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(26).getChildBlocks().get(10).getChildBlocks().get(2).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  refresh_domain_", true, 68745, 68956, 1);
  53.689 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(26).getChildBlocks().get(10).getChildBlocks().get(2).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "INSERT INTO dictionary_sys_domain_tab VALUES complete_values_(j)", true, 68891, 68955, 0);
  53.690 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(26).getChildBlocks().get(10).getChildBlocks().get(2).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSE", true, 68969, 69180, 1);
  53.691 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(26).getChildBlocks().get(10).getChildBlocks().get(2).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "INSERT INTO dictionary_sys_state_tab VALUES complete_values_(j)", true, 69096, 69159, 0);
  53.692 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(26).getChildBlocks().get(10).getChildBlocks().get(2).getChildBlocks(), 2, PlsqlBlockType.FOR_LOOP, "i IN 1..error_count_", true, 69490, 70142, 1);
  53.693 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(26).getChildBlocks().get(10).getChildBlocks().get(2).getChildBlocks().get(2).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- Write_Error_Text___ (error_text_, '   Position number '||to_char(position_));", true, 69591, 69688, 0);
  53.694 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks(), 27, PlsqlBlockType.PROCEDURE_IMPL, "Refresh_Method_Arguments___", true, 70212, 75509, 7);
  53.695 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(27).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "get_met_arguments", true, 70326, 70705, 0);
  53.696 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(27).getChildBlocks(), 1, PlsqlBlockType.CURSOR, "get_new_met_arguments", true, 70713, 71255, 0);
  53.697 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(27).getChildBlocks(), 2, PlsqlBlockType.COMMENT, "-- Fetch method argument information and delete old information", true, 71784, 71865, 0);
  53.698 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(27).getChildBlocks(), 3, PlsqlBlockType.IF, "IF  all_methods_", true, 71872, 72181, 1);
  53.699 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(27).getChildBlocks().get(3).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- Remove all old information", true, 72035, 72108, 0);
  53.700 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(27).getChildBlocks(), 4, PlsqlBlockType.IF, "ELSE", true, 72188, 72701, 2);
  53.701 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(27).getChildBlocks().get(4).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- Remove old information for all of the methods that is being updated", true, 72347, 72417, 0);
  53.702 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(27).getChildBlocks().get(4).getChildBlocks(), 1, PlsqlBlockType.STATEMENT, "DELETE FROM dictionary_sys_argument_tab a", true, 72427, 72686, 0);
  53.703 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(27).getChildBlocks(), 5, PlsqlBlockType.COMMENT, "-- Process method argument information", true, 72708, 72764, 0);
  53.704 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(27).getChildBlocks(), 6, PlsqlBlockType.IF, "IF  met_arguments.COUNT > 0", true, 72771, 75473, 3);
  53.705 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(27).getChildBlocks().get(6).getChildBlocks(), 0, PlsqlBlockType.FOR_LOOP, "i IN Nvl(met_arguments.FIRST,0)..Nvl(met_arguments.LAST,-1)", true, 72812, 74065, 3);
  53.706 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(27).getChildBlocks().get(6).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- Find the lu name for the package if package has changed", true, 72893, 72951, 0);
  53.707 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(27).getChildBlocks().get(6).getChildBlocks().get(0).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  (prev_pkg_ <> met_arguments(i).package_name)", true, 72964, 73182, 0);
  53.708 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(27).getChildBlocks().get(6).getChildBlocks().get(0).getChildBlocks(), 2, PlsqlBlockType.IF, "IF  lu_name_ IS NOT NULL", true, 73195, 74046, 1);
  53.709 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(27).getChildBlocks().get(6).getChildBlocks().get(0).getChildBlocks().get(2).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- Insert the values into the complete array", true, 73239, 73283, 0);
  53.710 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(27).getChildBlocks().get(6).getChildBlocks(), 1, PlsqlBlockType.COMMENT, "-- Insert all the values into dictionary_sys_argument_tab", true, 74076, 74133, 0);
  53.711 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(27).getChildBlocks().get(6).getChildBlocks(), 2, PlsqlBlockType.BEGIN_END, "", true, 74143, 75458, 2);
  53.712 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(27).getChildBlocks().get(6).getChildBlocks().get(2).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "INSERT INTO dictionary_sys_argument_tab VALUES all_arguments_(j)", true, 74261, 74325, 0);
  53.713 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(27).getChildBlocks().get(6).getChildBlocks().get(2).getChildBlocks(), 1, PlsqlBlockType.FOR_LOOP, "i IN 1..error_count_", true, 74603, 75444, 0);
  53.714 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks(), 28, PlsqlBlockType.PROCEDURE_IMPL, "Refresh_Methods___", true, 75514, 84605, 17);
  53.715 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(28).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "get_methods", true, 75619, 75913, 0);
  53.716 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(28).getChildBlocks(), 1, PlsqlBlockType.CURSOR, "get_pragma_methods", true, 75921, 76333, 0);
  53.717 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(28).getChildBlocks(), 2, PlsqlBlockType.CURSOR, "get_new_methods", true, 76341, 76773, 0);
  53.718 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(28).getChildBlocks(), 3, PlsqlBlockType.CURSOR, "get_new_pragma_methods", true, 76781, 77323, 0);
  53.719 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(28).getChildBlocks(), 4, PlsqlBlockType.COMMENT, "-- Fetch method information and delete old information", true, 77830, 77902, 0);
  53.720 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(28).getChildBlocks(), 5, PlsqlBlockType.IF, "IF  all_methods_", true, 77909, 78205, 1);
  53.721 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(28).getChildBlocks().get(5).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- Remove all old information for methods", true, 78049, 78134, 0);
  53.722 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(28).getChildBlocks(), 6, PlsqlBlockType.IF, "ELSE", true, 78212, 78700, 2);
  53.723 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(28).getChildBlocks().get(6).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- Remove old information for all of the methods that is being updated", true, 78348, 78418, 0);
  53.724 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(28).getChildBlocks().get(6).getChildBlocks(), 1, PlsqlBlockType.STATEMENT, "DELETE FROM dictionary_sys_method_tab m", true, 78428, 78685, 0);
  53.725 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(28).getChildBlocks(), 7, PlsqlBlockType.COMMENT, "-- Process method information", true, 78707, 78754, 0);
  53.726 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(28).getChildBlocks(), 8, PlsqlBlockType.IF, "IF  methods_.COUNT > 0", true, 78761, 80891, 3);
  53.727 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(28).getChildBlocks().get(8).getChildBlocks(), 0, PlsqlBlockType.FOR_LOOP, "i IN Nvl(methods_.FIRST,0)..Nvl(methods_.LAST,-1)", true, 78797, 79614, 2);
  53.728 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(28).getChildBlocks().get(8).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (prev_pkg_ <> methods_(i).pkg)", true, 78868, 79044, 0);
  53.729 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(28).getChildBlocks().get(8).getChildBlocks().get(0).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  lu_name_ IS NOT NULL", true, 79057, 79595, 1);
  53.730 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(28).getChildBlocks().get(8).getChildBlocks().get(0).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- Insert the values into the complete array", true, 79187, 79231, 0);
  53.731 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(28).getChildBlocks().get(8).getChildBlocks(), 1, PlsqlBlockType.COMMENT, "-- Insert all the values into dictionary_sys_method_tab", true, 79625, 79680, 0);
  53.732 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(28).getChildBlocks().get(8).getChildBlocks(), 2, PlsqlBlockType.BEGIN_END, "", true, 79690, 80877, 2);
  53.733 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(28).getChildBlocks().get(8).getChildBlocks().get(2).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "INSERT INTO dictionary_sys_method_tab VALUES complete_methods_(j)", true, 79814, 79879, 0);
  53.734 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(28).getChildBlocks().get(8).getChildBlocks().get(2).getChildBlocks(), 1, PlsqlBlockType.FOR_LOOP, "i IN 1..error_count_", true, 80148, 80863, 0);
  53.735 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(28).getChildBlocks(), 9, PlsqlBlockType.COMMENT, "-- Clear arrays", true, 80899, 80914, 0);
  53.736 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(28).getChildBlocks(), 10, PlsqlBlockType.COMMENT, "-- Fetch pragma method information", true, 80977, 81029, 0);
  53.737 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(28).getChildBlocks(), 11, PlsqlBlockType.IF, "IF  all_methods_", true, 81036, 81187, 0);
  53.738 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(28).getChildBlocks(), 12, PlsqlBlockType.IF, "ELSE", true, 81194, 81355, 0);
  53.739 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(28).getChildBlocks(), 13, PlsqlBlockType.COMMENT, "-- Process pragma method information", true, 81362, 81416, 0);
  53.740 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(28).getChildBlocks(), 14, PlsqlBlockType.IF, "IF  methods_.COUNT > 0", true, 81423, 84036, 2);
  53.741 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(28).getChildBlocks().get(14).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- Initiate sub type", true, 81459, 81479, 0);
  53.742 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(28).getChildBlocks().get(14).getChildBlocks(), 1, PlsqlBlockType.FOR_LOOP, "i IN Nvl(methods_.FIRST,0)..Nvl(methods_.LAST,-1)", true, 81523, 84022, 3);
  53.743 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(28).getChildBlocks().get(14).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- Find the name of the LU for every new package", true, 81594, 81642, 0);
  53.744 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(28).getChildBlocks().get(14).getChildBlocks().get(1).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  (prev_pkg_ <> methods_(i).pkg)", true, 81655, 81831, 0);
  53.745 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(28).getChildBlocks().get(14).getChildBlocks().get(1).getChildBlocks(), 2, PlsqlBlockType.IF, "IF  lu_name_ IS NOT NULL", true, 81844, 84003, 5);
  53.746 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(28).getChildBlocks().get(14).getChildBlocks().get(1).getChildBlocks().get(2).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- Update the record in dictionary_sys_method_tab", true, 81974, 82023, 0);
  53.747 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(28).getChildBlocks().get(14).getChildBlocks().get(1).getChildBlocks().get(2).getChildBlocks(), 1, PlsqlBlockType.BEGIN_END, "", true, 82039, 83287, 2);
  53.748 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(28).getChildBlocks().get(14).getChildBlocks().get(1).getChildBlocks().get(2).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "UPDATE dictionary_sys_method_tab", true, 82063, 82338, 0);
  53.749 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(28).getChildBlocks().get(14).getChildBlocks().get(1).getChildBlocks().get(2).getChildBlocks().get(1).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  SQL%NOTFOUND", true, 82358, 82653, 1);
  53.750 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(28).getChildBlocks().get(14).getChildBlocks().get(1).getChildBlocks().get(2).getChildBlocks().get(1).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "INSERT INTO dictionary_sys_method_tab", true, 82400, 82626, 0);
  53.751 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(28).getChildBlocks().get(14).getChildBlocks().get(1).getChildBlocks().get(2).getChildBlocks(), 2, PlsqlBlockType.COMMENT, "-- Handle if current package contains a state machine (identified by a specific PRAGMA method)", true, 83303, 83465, 0);
  53.752 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(28).getChildBlocks().get(14).getChildBlocks().get(1).getChildBlocks().get(2).getChildBlocks(), 3, PlsqlBlockType.COMMENT, "-- Fetch and insert state information if current package contains a state machine", true, 83545, 83626, 0);
  53.753 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(28).getChildBlocks().get(14).getChildBlocks().get(1).getChildBlocks().get(2).getChildBlocks(), 4, PlsqlBlockType.IF, "IF  pkg_lu_sub_type_ = 'S'", true, 83642, 83983, 2);
  53.754 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(28).getChildBlocks().get(14).getChildBlocks().get(1).getChildBlocks().get(2).getChildBlocks().get(4).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (refresh_mode_ != 'LIGHT')", true, 83691, 83838, 0);
  53.755 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(28).getChildBlocks().get(14).getChildBlocks().get(1).getChildBlocks().get(2).getChildBlocks().get(4).getChildBlocks(), 1, PlsqlBlockType.COMMENT, "-- Reset the sub_type to avoid multiple unnecessary searches", true, 83857, 83917, 0);
  53.756 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(28).getChildBlocks(), 15, PlsqlBlockType.COMMENT, "-- Update special handled methods to PRAGMA (Read", true, 84043, 84124, 0);
  53.757 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(28).getChildBlocks(), 16, PlsqlBlockType.STATEMENT, "UPDATE dictionary_sys_method_tab t", true, 84131, 84577, 0);
  53.758 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks(), 29, PlsqlBlockType.COMMENT, "-- Validate refresh mode before proceeding", true, 84965, 85019, 0);
  53.759 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks(), 30, PlsqlBlockType.IF, "IF  refresh_mode_ IS NULL OR refresh_mode_ NOT IN ('FULL', 'PARTIAL', 'VIEWS', 'PACKAGES', 'LIGHT')", true, 85023, 85288, 0);
  53.760 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks(), 31, PlsqlBlockType.COMMENT, "-- If a refresh is not necessary and a full refresh is not ordered, abort immediately...", true, 85292, 85601, 0);
  53.761 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks(), 32, PlsqlBlockType.IF, "IF  NOT refresh_all_", true, 85605, 86131, 4);
  53.762 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(32).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  rebuild_needed_ = 0", true, 85686, 85844, 0);
  53.763 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(32).getChildBlocks(), 1, PlsqlBlockType.COMMENT, "-- Find last update time", true, 85852, 85876, 0);
  53.764 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(32).getChildBlocks(), 2, PlsqlBlockType.COMMENT, "-- Set full refresh mode if no dictionary data exist", true, 85988, 86040, 0);
  53.765 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(32).getChildBlocks(), 3, PlsqlBlockType.IF, "IF  last_update_ IS NULL", true, 86047, 86120, 0);
  53.766 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks(), 33, PlsqlBlockType.IF, "IF  refresh_all_", true, 86136, 86483, 1);
  53.767 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(33).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- Fetch the objects to update", true, 86242, 86272, 0);
  53.768 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks(), 34, PlsqlBlockType.IF, "ELSE", true, 86487, 87516, 7);
  53.769 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(34).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- Spool information about what \"mode\" is used", true, 86498, 86544, 0);
  53.770 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(34).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  refresh_views_ AND refresh_pkgs_", true, 86551, 86675, 0);
  53.771 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(34).getChildBlocks(), 2, PlsqlBlockType.IF, "ELSIF refresh_pkgs_", true, 86682, 86808, 0);
  53.772 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(34).getChildBlocks(), 3, PlsqlBlockType.IF, "ELSIF refresh_views_", true, 86815, 86953, 0);
  53.773 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(34).getChildBlocks(), 4, PlsqlBlockType.COMMENT, "-- Fetch the objects to update", true, 87097, 87127, 0);
  53.774 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(34).getChildBlocks(), 5, PlsqlBlockType.IF, "IF  refresh_pkgs_", true, 87134, 87315, 0);
  53.775 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(34).getChildBlocks(), 6, PlsqlBlockType.IF, "IF  refresh_views_", true, 87323, 87505, 0);
  53.776 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks(), 35, PlsqlBlockType.COMMENT, "-- Refresh package and method information", true, 87520, 87573, 0);
  53.777 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks(), 36, PlsqlBlockType.IF, "IF  packages_.COUNT > 0", true, 87911, 91240, 7);
  53.778 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(36).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- Save start date for package refresh", true, 87945, 87983, 0);
  53.779 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(36).getChildBlocks(), 1, PlsqlBlockType.COMMENT, "-- Remove old information if full refresh", true, 88020, 88061, 0);
  53.780 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(36).getChildBlocks(), 2, PlsqlBlockType.IF, "IF  refresh_all_", true, 88068, 88675, 5);
  53.781 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(36).getChildBlocks().get(2).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- ifs_assert_safe pemase 20060215", true, 88098, 88132, 0);
  53.782 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(36).getChildBlocks().get(2).getChildBlocks(), 1, PlsqlBlockType.COMMENT, "-- ifs_assert_safe pemase 20060215", true, 88206, 88240, 0);
  53.783 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(36).getChildBlocks().get(2).getChildBlocks(), 2, PlsqlBlockType.COMMENT, "-- ifs_assert_safe pemase 20060215", true, 88322, 88356, 0);
  53.784 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(36).getChildBlocks().get(2).getChildBlocks(), 3, PlsqlBlockType.COMMENT, "-- ifs_assert_safe pemase 20060215", true, 88437, 88471, 0);
  53.785 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(36).getChildBlocks().get(2).getChildBlocks(), 4, PlsqlBlockType.COMMENT, "-- ifs_assert_safe pemase 20060215", true, 88551, 88585, 0);
  53.786 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(36).getChildBlocks(), 3, PlsqlBlockType.FOR_LOOP, "i IN Nvl(packages_.FIRST,0)..Nvl(packages_.LAST,-1)", true, 88683, 90462, 3);
  53.787 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(36).getChildBlocks().get(3).getChildBlocks(), 0, PlsqlBlockType.FOR_LOOP, "pkg_info IN get_package_info(packages_(i))", true, 88892, 89394, 4);
  53.788 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(36).getChildBlocks().get(3).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- Investigate module, lu name and sub type of the lu", true, 88956, 89009, 0);
  53.789 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(36).getChildBlocks().get(3).getChildBlocks().get(0).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  (pkg_info.gtype = 'M')", true, 89022, 89113, 0);
  53.790 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(36).getChildBlocks().get(3).getChildBlocks().get(0).getChildBlocks(), 2, PlsqlBlockType.IF, "ELSIF pkg_info.gtype IN ('L', 'S')", true, 89126, 89260, 0);
  53.791 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(36).getChildBlocks().get(3).getChildBlocks().get(0).getChildBlocks(), 3, PlsqlBlockType.IF, "ELSIF pkg_info.gtype = 'D'", true, 89273, 89375, 0);
  53.792 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(36).getChildBlocks().get(3).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  pkg_lu_name_ IS NOT NULL AND pkg_module_ IS NOT NULL", true, 89404, 90225, 3);
  53.793 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(36).getChildBlocks().get(3).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- Insert the information into the dictionary", true, 89477, 89522, 0);
  53.794 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(36).getChildBlocks().get(3).getChildBlocks().get(1).getChildBlocks(), 1, PlsqlBlockType.COMMENT, "-- Refresh domain or state information depending on sub type of the LU (stored in global variable)", true, 89820, 89918, 0);
  53.795 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(36).getChildBlocks().get(3).getChildBlocks().get(1).getChildBlocks(), 2, PlsqlBlockType.IF, "IF  pkg_lu_sub_type_ = 'D'", true, 89931, 90225, 2);
  53.796 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(36).getChildBlocks().get(3).getChildBlocks().get(1).getChildBlocks().get(2).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- Refresh domain information if this is identified as an IID package", true, 89977, 90046, 0);
  53.797 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(36).getChildBlocks().get(3).getChildBlocks().get(1).getChildBlocks().get(2).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  (refresh_mode_ != 'LIGHT')", true, 90062, 90205, 0);
  53.798 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(36).getChildBlocks().get(3).getChildBlocks(), 2, PlsqlBlockType.IF, "ELSE", true, 90235, 90446, 0);
  53.799 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(36).getChildBlocks(), 4, PlsqlBlockType.COMMENT, "-- Refresh methods once all packages are updated", true, 90469, 90535, 0);
  53.800 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(36).getChildBlocks(), 5, PlsqlBlockType.COMMENT, "-- Refresh arguments for methods once all methods are updated", true, 90595, 90674, 0);
  53.801 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(36).getChildBlocks(), 6, PlsqlBlockType.COMMENT, "BLOCK COMMENT", true, 90738, 91229, 0);
  53.802 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks(), 37, PlsqlBlockType.COMMENT, "-- Refresh view information", true, 91244, 91283, 0);
  53.803 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks(), 38, PlsqlBlockType.IF, "IF  views_.COUNT > 0", true, 91615, 93635, 6);
  53.804 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(38).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- Save start date for view refresh", true, 91646, 91681, 0);
  53.805 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(38).getChildBlocks(), 1, PlsqlBlockType.COMMENT, "-- Remove old information if full refresh", true, 91718, 91759, 0);
  53.806 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(38).getChildBlocks(), 2, PlsqlBlockType.IF, "IF  refresh_all_", true, 91766, 91899, 1);
  53.807 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(38).getChildBlocks().get(2).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- ifs_assert_safe pemase 20060215", true, 91796, 91830, 0);
  53.808 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(38).getChildBlocks(), 3, PlsqlBlockType.IF, "ELSE", true, 91906, 92078, 1);
  53.809 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(38).getChildBlocks().get(3).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "DELETE FROM dictionary_sys_view_tab", true, 91985, 92063, 0);
  53.810 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(38).getChildBlocks(), 4, PlsqlBlockType.FOR_LOOP, "i IN Nvl(views_.FIRST,0)..Nvl(views_.LAST,-1)", true, 92086, 93491, 4);
  53.811 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(38).getChildBlocks().get(4).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  view_module_ = 'IGNORE'", true, 92448, 92535, 0);
  53.812 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(38).getChildBlocks().get(4).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  view_lu_name_ IS NULL", true, 92545, 92823, 1);
  53.813 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(38).getChildBlocks().get(4).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  view_lu_name_ IS NULL", true, 92668, 92806, 0);
  53.814 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(38).getChildBlocks().get(4).getChildBlocks(), 2, PlsqlBlockType.IF, "IF  view_module_ IS NOT NULL AND view_lu_name_ IS NOT NULL", true, 92915, 93265, 1);
  53.815 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(38).getChildBlocks().get(4).getChildBlocks().get(2).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  view_module_ != 'IGNORE'", true, 92990, 93265, 0);
  53.816 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(38).getChildBlocks().get(4).getChildBlocks(), 3, PlsqlBlockType.IF, "ELSE", true, 93275, 93475, 0);
  53.817 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(38).getChildBlocks(), 5, PlsqlBlockType.COMMENT, "-- Refresh view columns once all view are updated", true, 93498, 93565, 0);
  53.818 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks(), 39, PlsqlBlockType.IF, "IF  NOT refresh_all_", true, 93640, 95104, 6);
  53.819 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(39).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- Delete information for objects no longer in the database", true, 93671, 93748, 0);
  53.820 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(39).getChildBlocks(), 1, PlsqlBlockType.STATEMENT, "DELETE FROM dictionary_sys_package_tab p", true, 93755, 94000, 0);
  53.821 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(39).getChildBlocks(), 2, PlsqlBlockType.STATEMENT, "DELETE FROM dictionary_sys_method_tab m", true, 94009, 94211, 0);
  53.822 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(39).getChildBlocks(), 3, PlsqlBlockType.STATEMENT, "DELETE FROM dictionary_sys_view_tab v", true, 94220, 94456, 0);
  53.823 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(39).getChildBlocks(), 4, PlsqlBlockType.STATEMENT, "DELETE FROM dictionary_sys_view_column_tab c", true, 94465, 94716, 0);
  53.824 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks().get(39).getChildBlocks(), 5, PlsqlBlockType.STATEMENT, "DELETE FROM dictionary_sys_tab l", true, 94725, 95092, 0);
  53.825 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks(), 40, PlsqlBlockType.COMMENT, "-- Attempt 1:", true, 95109, 95280, 0);
  53.826 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks(), 41, PlsqlBlockType.STATEMENT, "UPDATE dictionary_sys_view_tab", true, 95284, 95803, 0);
  53.827 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks(), 42, PlsqlBlockType.COMMENT, "-- Attempt 2:", true, 95809, 95983, 0);
  53.828 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks(), 43, PlsqlBlockType.STATEMENT, "UPDATE dictionary_sys_view_tab", true, 95987, 96219, 0);
  53.829 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks(), 44, PlsqlBlockType.COMMENT, "-- Set prompts for all Logical Units that didn't have a clearly defined view with a prompt.", true, 96224, 96379, 0);
  53.830 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks(), 45, PlsqlBlockType.STATEMENT, "UPDATE dictionary_sys_tab", true, 96383, 96527, 0);
  53.831 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(4).getChildBlocks(), 46, PlsqlBlockType.COMMENT, "-- Call activity ManageApplicationServerCache.ClearDataDictionaryCache", true, 96590, 96672, 0);
  53.832 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 5, PlsqlBlockType.COMMENT, "-- SERVICE SPECIFIC PRIVATE METHODS ", true, 97427, 97966, 0);
  53.833 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 6, PlsqlBlockType.PROCEDURE_IMPL, "Enumerate_Logical_Units__", true, 97967, 98926, 5);
  53.834 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(6).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "units", true, 98197, 98315, 0);
  53.835 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(6).getChildBlocks(), 1, PlsqlBlockType.COMMENT, "-- Init used elements", true, 98325, 98358, 0);
  53.836 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(6).getChildBlocks(), 2, PlsqlBlockType.COMMENT, "-- Fetch all packages and views associated with a logical unit", true, 98446, 98570, 0);
  53.837 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(6).getChildBlocks(), 3, PlsqlBlockType.FOR_LOOP, "unit IN units", true, 98574, 98751, 1);
  53.838 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(6).getChildBlocks().get(3).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (length(temp_(n_)) > limit_)", true, 98665, 98738, 0);
  53.839 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(6).getChildBlocks(), 4, PlsqlBlockType.COMMENT, "-- Return complete lists", true, 98755, 98791, 0);
  53.840 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 7, PlsqlBlockType.PROCEDURE_IMPL, "Get_Logical_Unit_Properties__", true, 98928, 99371, 0);
  53.841 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 8, PlsqlBlockType.PROCEDURE_IMPL, "Get_Logical_Unit_Properties2__", true, 99373, 99799, 0);
  53.842 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 9, PlsqlBlockType.PROCEDURE_IMPL, "Get_Logical_Unit_Views__", true, 99801, 99996, 0);
  53.843 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 10, PlsqlBlockType.FUNCTION_IMPL, "Get_Logical_Unit_Views__", true, 99998, 100655, 2);
  53.844 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(10).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "get_lu_views", true, 100158, 100296, 0);
  53.845 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(10).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  view_array_.count > 0", true, 100405, 100603, 1);
  53.846 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(10).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.FOR_LOOP, "i IN Nvl(view_array_.first, 0)..Nvl(view_array_.last, -1)", true, 100441, 100592, 0);
  53.847 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 11, PlsqlBlockType.PROCEDURE_IMPL, "Get_Logical_Unit_Packages__", true, 100657, 100864, 0);
  53.848 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 12, PlsqlBlockType.FUNCTION_IMPL, "Get_Logical_Unit_Packages__", true, 100867, 101576, 2);
  53.849 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(12).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "get_lu_packages", true, 101031, 101181, 0);
  53.850 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(12).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  package_array_.count > 0", true, 101302, 101518, 1);
  53.851 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(12).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.FOR_LOOP, "i IN Nvl(package_array_.first, 0)..Nvl(package_array_.last, -1)", true, 101341, 101507, 0);
  53.852 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 13, PlsqlBlockType.PROCEDURE_IMPL, "Get_Logical_Unit_Methods__", true, 101578, 102791, 5);
  53.853 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(13).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "get_all_lu_methods", true, 101803, 101967, 0);
  53.854 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(13).getChildBlocks(), 1, PlsqlBlockType.CURSOR, "get_lu_methods", true, 101972, 102160, 0);
  53.855 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(13).getChildBlocks(), 2, PlsqlBlockType.IF, "IF  all_methods_ = 'TRUE'", true, 102171, 102343, 0);
  53.856 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(13).getChildBlocks(), 3, PlsqlBlockType.IF, "ELSE", true, 102347, 102493, 0);
  53.857 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(13).getChildBlocks(), 4, PlsqlBlockType.IF, "IF  method_array_.count > 0", true, 102498, 102759, 1);
  53.858 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(13).getChildBlocks().get(4).getChildBlocks(), 0, PlsqlBlockType.FOR_LOOP, "lu_methods IN Nvl(method_array_.first, 0)..Nvl(method_array_.last, -1)", true, 102536, 102748, 0);
  53.859 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 14, PlsqlBlockType.PROCEDURE_IMPL, "Get_LU_Method_Types__", true, 102793, 103665, 2);
  53.860 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(14).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "get_all_lu_methods", true, 102997, 103174, 0);
  53.861 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(14).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  method_array_.count > 0", true, 103333, 103638, 1);
  53.862 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(14).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.FOR_LOOP, "lu_methods IN Nvl(method_array_.first, 0)..Nvl(method_array_.last, -1)", true, 103371, 103627, 0);
  53.863 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 15, PlsqlBlockType.FUNCTION_IMPL, "Get_State_Encode_Method__", true, 103667, 103868, 0);
  53.864 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 16, PlsqlBlockType.FUNCTION_IMPL, "Get_State_Enumerate_Method__", true, 103870, 104074, 0);
  53.865 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 17, PlsqlBlockType.COMMENT, "-- SERVICE SPECIFIC PROTECTED METHODS ", true, 104076, 104528, 0);
  53.866 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 18, PlsqlBlockType.FUNCTION_IMPL, "Dbnametoclientname_", true, 104530, 105067, 4);
  53.867 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(18).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- Find number of trailing underscores", true, 104632, 104670, 0);
  53.868 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(18).getChildBlocks(), 1, PlsqlBlockType.COMMENT, "-- Return client name with leading underscores", true, 104733, 104779, 0);
  53.869 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(18).getChildBlocks(), 2, PlsqlBlockType.IF, "IF  (cnt_ = 1)", true, 104783, 104855, 0);
  53.870 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(18).getChildBlocks(), 3, PlsqlBlockType.IF, "ELSIF (cnt_ = 2)", true, 104859, 104946, 0);
  53.871 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 19, PlsqlBlockType.FUNCTION_IMPL, "Clientnametodbname_", true, 105070, 105977, 6);
  53.872 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(19).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- Find number of leading underscores", true, 105242, 105279, 0);
  53.873 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(19).getChildBlocks(), 1, PlsqlBlockType.COMMENT, "-- Add intermediate underscores where needed", true, 105350, 105394, 0);
  53.874 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(19).getChildBlocks(), 2, PlsqlBlockType.FOR_LOOP, "index_ IN cnt_+1..length(client_name_)", true, 105398, 105665, 2);
  53.875 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(19).getChildBlocks().get(2).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (char_ between 'A' and 'Z')  AND (temp_ IS NOT NULL)", true, 105498, 105595, 0);
  53.876 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(19).getChildBlocks().get(2).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSE", true, 105602, 105652, 0);
  53.877 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(19).getChildBlocks(), 3, PlsqlBlockType.COMMENT, "-- Return database name with trailing underscores", true, 105669, 105718, 0);
  53.878 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(19).getChildBlocks(), 4, PlsqlBlockType.IF, "IF  (cnt_ = 1)", true, 105722, 105785, 0);
  53.879 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(19).getChildBlocks(), 5, PlsqlBlockType.IF, "ELSIF (cnt_ = 2)", true, 105789, 105866, 0);
  53.880 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 20, PlsqlBlockType.COMMENT, "-- Comment decoding routines for LU", true, 105979, 106181, 0);
  53.881 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 21, PlsqlBlockType.FUNCTION_IMPL, "Comment_Value_", true, 106183, 106898, 5);
  53.882 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(21).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- Find keyword name position within comment", true, 106339, 106383, 0);
  53.883 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(21).getChildBlocks(), 1, PlsqlBlockType.COMMENT, "-- New fix to support ambigous names in report definitions in IFS/Info Services", true, 106414, 106493, 0);
  53.884 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(21).getChildBlocks(), 2, PlsqlBlockType.COMMENT, "-- If found, return value from comment", true, 106555, 106593, 0);
  53.885 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(21).getChildBlocks(), 3, PlsqlBlockType.IF, "IF  (from_ > 0)", true, 106597, 106839, 2);
  53.886 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(21).getChildBlocks().get(3).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  ( to_ = 0 )", true, 106665, 106735, 0);
  53.887 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(21).getChildBlocks().get(3).getChildBlocks(), 1, PlsqlBlockType.COMMENT, "-- If not found, return null value", true, 106805, 106839, 0);
  53.888 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(21).getChildBlocks(), 4, PlsqlBlockType.IF, "ELSE", true, 106843, 106878, 0);
  53.889 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 22, PlsqlBlockType.COMMENT, "-- Prompt fetching routines, mainly used for localization", true, 106900, 107113, 0);
  53.890 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 23, PlsqlBlockType.FUNCTION_IMPL, "Get_View_Prompt_", true, 107115, 107467, 1);
  53.891 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(23).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "get_prompt", true, 107226, 107345, 0);
  53.892 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 24, PlsqlBlockType.FUNCTION_IMPL, "Get_Lu_Prompt_", true, 107469, 107936, 3);
  53.893 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(24).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "get_prompt", true, 107589, 107697, 0);
  53.894 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(24).getChildBlocks(), 1, PlsqlBlockType.COMMENT, "-- Check that inparameters make sense before proceeding.", true, 107707, 107763, 0);
  53.895 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(24).getChildBlocks(), 2, PlsqlBlockType.IF, "IF  lu_name_ IS NULL", true, 107767, 107821, 0);
  53.896 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 25, PlsqlBlockType.FUNCTION_IMPL, "Get_Item_Prompt_", true, 107938, 108579, 2);
  53.897 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(25).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "get_prompt", true, 108187, 108373, 0);
  53.898 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(25).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  (view_ IS NULL)", true, 108383, 108463, 0);
  53.899 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 26, PlsqlBlockType.COMMENT, "-- Property fetching routines for run", true, 108581, 108795, 0);
  53.900 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 27, PlsqlBlockType.PROCEDURE_IMPL, "Get_Logical_Unit_Keys_", true, 108797, 110903, 7);
  53.901 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(27).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- To check that the suggested base view actually contain an objid...", true, 109080, 109149, 0);
  53.902 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(27).getChildBlocks(), 1, PlsqlBlockType.CURSOR, "find_objid", true, 109153, 109383, 0);
  53.903 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(27).getChildBlocks(), 2, PlsqlBlockType.CURSOR, "get_keys", true, 109388, 109624, 0);
  53.904 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(27).getChildBlocks(), 3, PlsqlBlockType.COMMENT, "-- Fetch the view name from LU", true, 109755, 109796, 0);
  53.905 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(27).getChildBlocks(), 4, PlsqlBlockType.COMMENT, "-- Verify that this view contains an objid", true, 109837, 109879, 0);
  53.906 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(27).getChildBlocks(), 5, PlsqlBlockType.IF, "IF  find_objid%FOUND", true, 109953, 110832, 3);
  53.907 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(27).getChildBlocks().get(5).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- View found, fetch the keys!", true, 110008, 110038, 0);
  53.908 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(27).getChildBlocks().get(5).getChildBlocks(), 1, PlsqlBlockType.FOR_LOOP, "keyrec IN get_keys(view_)", true, 110045, 110167, 0);
  53.909 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(27).getChildBlocks().get(5).getChildBlocks(), 2, PlsqlBlockType.IF, "IF  (objid_ IS NOT NULL)", true, 110206, 110832, 2);
  53.910 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(27).getChildBlocks().get(5).getChildBlocks().get(2).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- Fetch instance key information by using dynamic SQL", true, 110244, 110298, 0);
  53.911 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(27).getChildBlocks().get(5).getChildBlocks().get(2).getChildBlocks(), 1, PlsqlBlockType.BEGIN_END, "", true, 110308, 110818, 1);
  53.912 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(27).getChildBlocks().get(5).getChildBlocks().get(2).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- ifs_assert_safe utgulk 20060105", true, 110622, 110656, 0);
  53.913 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(27).getChildBlocks(), 6, PlsqlBlockType.IF, "ELSE", true, 110836, 110875, 0);
  53.914 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 28, PlsqlBlockType.COMMENT, "-- Could not completely rely on cached information, since table information is not extracted to the cache", true, 110905, 111010, 0);
  53.915 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 29, PlsqlBlockType.PROCEDURE_IMPL, "Get_Logical_Unit_Tables_", true, 111011, 112151, 4);
  53.916 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(29).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "view_tables", true, 111169, 111809, 0);
  53.917 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(29).getChildBlocks(), 1, PlsqlBlockType.COMMENT, "-- Check that inparameters make sense before proceeding.", true, 111819, 111875, 0);
  53.918 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(29).getChildBlocks(), 2, PlsqlBlockType.IF, "IF  lu_name_ IS NULL", true, 111879, 111928, 0);
  53.919 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(29).getChildBlocks(), 3, PlsqlBlockType.FOR_LOOP, "t IN view_tables", true, 112023, 112121, 0);
  53.920 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 30, PlsqlBlockType.COMMENT, "-- Introduced new method and implemented to use dictionary cache.", true, 112153, 112218, 0);
  53.921 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 31, PlsqlBlockType.PROCEDURE_IMPL, "Enum_Modules_", true, 112219, 112520, 2);
  53.922 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(31).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "modules", true, 112282, 112383, 0);
  53.923 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(31).getChildBlocks(), 1, PlsqlBlockType.FOR_LOOP, "module IN modules", true, 112393, 112501, 0);
  53.924 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 32, PlsqlBlockType.PROCEDURE_IMPL, "Enum_Module_Names_", true, 112522, 113189, 2);
  53.925 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(32).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "modules", true, 112687, 112775, 0);
  53.926 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(32).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  module_array_.count > 0", true, 112884, 113165, 1);
  53.927 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(32).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.FOR_LOOP, "i IN Nvl(module_array_.first, 0)..Nvl(module_array_.last, -1)", true, 112922, 113154, 0);
  53.928 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 33, PlsqlBlockType.COMMENT, "-- Modified implementation to use dictionary cache. Designtime version moved to Design_SYS", true, 113191, 113281, 0);
  53.929 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 34, PlsqlBlockType.PROCEDURE_IMPL, "Enum_Module_All_Logical_Units_", true, 113282, 113875, 2);
  53.930 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(34).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "units", true, 113413, 113567, 0);
  53.931 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(34).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  lu_array_.count > 0", true, 113653, 113839, 1);
  53.932 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(34).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.FOR_LOOP, "i IN Nvl(lu_array_.first, 0)..Nvl(lu_array_.last, -1)", true, 113687, 113828, 0);
  53.933 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 35, PlsqlBlockType.COMMENT, "-- Modified implementation to use dictionary cache. Designtime version moved to Design_SYS", true, 113877, 113967, 0);
  53.934 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 36, PlsqlBlockType.PROCEDURE_IMPL, "Enum_Module_Logical_Units_", true, 113968, 114545, 2);
  53.935 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(36).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "units", true, 114095, 114241, 0);
  53.936 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(36).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  lu_array_.count > 0", true, 114327, 114513, 1);
  53.937 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(36).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.FOR_LOOP, "i IN Nvl(lu_array_.first, 0)..Nvl(lu_array_.last, -1)", true, 114361, 114502, 0);
  53.938 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 37, PlsqlBlockType.COMMENT, "-- Modified implementation using dictionary cache.", true, 114547, 114597, 0);
  53.939 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 38, PlsqlBlockType.PROCEDURE_IMPL, "Enum_Module_System_Services_", true, 114598, 114987, 2);
  53.940 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(38).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "units", true, 114700, 114846, 0);
  53.941 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(38).getChildBlocks(), 1, PlsqlBlockType.FOR_LOOP, "unit IN units", true, 114856, 114953, 0);
  53.942 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 39, PlsqlBlockType.COMMENT, "-- Runtime performance refreshment routines", true, 114989, 115202, 0);
  53.943 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 40, PlsqlBlockType.PROCEDURE_IMPL, "Activate_Language_Refresh_", true, 115203, 115521, 0);
  53.944 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 41, PlsqlBlockType.PROCEDURE_IMPL, "Rebuild_Dictionary_Storage_", true, 115523, 115781, 0);
  53.945 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 42, PlsqlBlockType.PROCEDURE_IMPL, "Rebuild_Dictionary_Storage_", true, 115783, 116056, 0);
  53.946 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 43, PlsqlBlockType.PROCEDURE_IMPL, "Check_Dictionary_Storage_", true, 116058, 117150, 4);
  53.947 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(43).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "get_last_update", true, 116181, 116266, 0);
  53.948 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(43).getChildBlocks(), 1, PlsqlBlockType.CURSOR, "get_objects", true, 116271, 116631, 0);
  53.949 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(43).getChildBlocks(), 2, PlsqlBlockType.IF, "IF  (last_update_ IS NULL)", true, 116710, 116797, 0);
  53.950 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(43).getChildBlocks(), 3, PlsqlBlockType.IF, "ELSE", true, 116801, 117093, 2);
  53.951 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(43).getChildBlocks().get(3).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (get_objects%NOTFOUND)", true, 116887, 116975, 0);
  53.952 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(43).getChildBlocks().get(3).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSE", true, 116982, 117057, 0);
  53.953 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 44, PlsqlBlockType.COMMENT, "-- SERVICE SPECIFIC PUBLIC METHODS ", true, 117152, 117603, 0);
  53.954 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 45, PlsqlBlockType.FUNCTION_IMPL, "Get_Base_View", true, 117605, 117953, 1);
  53.955 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(45).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "get_view", true, 117708, 117844, 0);
  53.956 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 46, PlsqlBlockType.FUNCTION_IMPL, "Get_Component", true, 117955, 118883, 5);
  53.957 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(46).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "get_pkg_component", true, 118088, 118287, 0);
  53.958 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(46).getChildBlocks(), 1, PlsqlBlockType.CURSOR, "get_view_component", true, 118292, 118486, 0);
  53.959 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(46).getChildBlocks(), 2, PlsqlBlockType.IF, "IF  upper(object_type_) = 'PACKAGE'", true, 118496, 118643, 0);
  53.960 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(46).getChildBlocks(), 3, PlsqlBlockType.IF, "ELSIF upper(object_type_) = 'VIEW'", true, 118647, 118797, 0);
  53.961 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(46).getChildBlocks(), 4, PlsqlBlockType.IF, "ELSE", true, 118801, 118842, 0);
  53.962 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 47, PlsqlBlockType.FUNCTION_IMPL, "Get_Logical_Unit", true, 118885, 119630, 5);
  53.963 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(47).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "get_pkg_lu", true, 119020, 119150, 0);
  53.964 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(47).getChildBlocks(), 1, PlsqlBlockType.CURSOR, "get_view_lu", true, 119155, 119280, 0);
  53.965 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(47).getChildBlocks(), 2, PlsqlBlockType.IF, "IF  upper(object_type_) = 'PACKAGE'", true, 119290, 119414, 0);
  53.966 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(47).getChildBlocks(), 3, PlsqlBlockType.IF, "ELSIF upper(object_type_) = 'VIEW'", true, 119418, 119545, 0);
  53.967 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(47).getChildBlocks(), 4, PlsqlBlockType.IF, "ELSE", true, 119549, 119588, 0);
  53.968 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 48, PlsqlBlockType.FUNCTION_IMPL, "Get_Logical_Unit_Module", true, 119632, 119973, 1);
  53.969 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(48).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "get_module", true, 119739, 119843, 0);
  53.970 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 49, PlsqlBlockType.FUNCTION_IMPL, "Package_Is_Installed", true, 119975, 120584, 4);
  53.971 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(49).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "get_pkg", true, 120077, 120199, 0);
  53.972 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(49).getChildBlocks(), 1, PlsqlBlockType.COMMENT, "-- Reroute to Database_SYS during installation", true, 120209, 120255, 0);
  53.973 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(49).getChildBlocks(), 2, PlsqlBlockType.IF, "IF  installation_", true, 120259, 120337, 0);
  53.974 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(49).getChildBlocks(), 3, PlsqlBlockType.IF, "ELSE", true, 120341, 120558, 2);
  53.975 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(49).getChildBlocks().get(3).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (get_pkg%FOUND)", true, 120406, 120475, 0);
  53.976 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(49).getChildBlocks().get(3).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSE", true, 120482, 120547, 0);
  53.977 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 50, PlsqlBlockType.FUNCTION_IMPL, "Method_Is_Installed", true, 120586, 121303, 4);
  53.978 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(50).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "get_method", true, 120717, 120891, 0);
  53.979 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(50).getChildBlocks(), 1, PlsqlBlockType.COMMENT, "-- Reroute to Database_SYS during installation", true, 120901, 120947, 0);
  53.980 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(50).getChildBlocks(), 2, PlsqlBlockType.IF, "IF  installation_", true, 120951, 121042, 0);
  53.981 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(50).getChildBlocks(), 3, PlsqlBlockType.IF, "ELSE", true, 121046, 121278, 2);
  53.982 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(50).getChildBlocks().get(3).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (get_method%FOUND)", true, 121117, 121192, 0);
  53.983 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(50).getChildBlocks().get(3).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSE", true, 121199, 121267, 0);
  53.984 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 51, PlsqlBlockType.FUNCTION_IMPL, "View_Is_Installed", true, 121305, 121896, 4);
  53.985 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(51).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "get_view", true, 121401, 121515, 0);
  53.986 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(51).getChildBlocks(), 1, PlsqlBlockType.COMMENT, "-- Reroute to Database_SYS during installation", true, 121525, 121571, 0);
  53.987 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(51).getChildBlocks(), 2, PlsqlBlockType.IF, "IF  installation_", true, 121575, 121647, 0);
  53.988 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(51).getChildBlocks(), 3, PlsqlBlockType.IF, "ELSE", true, 121651, 121873, 2);
  53.989 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(51).getChildBlocks().get(3).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (get_view%FOUND)", true, 121718, 121789, 0);
  53.990 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(51).getChildBlocks().get(3).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSE", true, 121796, 121862, 0);
  53.991 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 52, PlsqlBlockType.FUNCTION_IMPL, "Logical_Unit_Is_Installed", true, 121898, 122514, 4);
  53.992 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(52).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "get_lu", true, 122009, 122105, 0);
  53.993 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(52).getChildBlocks(), 1, PlsqlBlockType.COMMENT, "-- Reroute to Database_SYS during installation", true, 122115, 122161, 0);
  53.994 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(52).getChildBlocks(), 2, PlsqlBlockType.IF, "IF  installation_", true, 122165, 122267, 0);
  53.995 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(52).getChildBlocks(), 3, PlsqlBlockType.IF, "ELSE", true, 122271, 122483, 2);
  53.996 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(52).getChildBlocks().get(3).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (get_lu%FOUND)", true, 122334, 122401, 0);
  53.997 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(52).getChildBlocks().get(3).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSE", true, 122408, 122472, 0);
  53.998 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 53, PlsqlBlockType.FUNCTION_IMPL, "Component_Is_Installed", true, 122516, 123054, 3);
  53.999 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(53).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "get_component", true, 122657, 122815, 0);
 53.1000 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(53).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  (get_component%FOUND)", true, 122885, 122960, 0);
 53.1001 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(53).getChildBlocks(), 2, PlsqlBlockType.IF, "ELSE", true, 122964, 123026, 0);
 53.1002 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 54, PlsqlBlockType.FUNCTION_IMPL, "Package_Is_Installed_Num", true, 123056, 123277, 2);
 53.1003 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(54).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  Package_Is_Installed(package_name_)", true, 123149, 123210, 0);
 53.1004 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(54).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSE", true, 123214, 123247, 0);
 53.1005 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 55, PlsqlBlockType.FUNCTION_IMPL, "Method_Is_Installed_Num", true, 123279, 123541, 2);
 53.1006 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(55).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  Method_Is_Installed(package_name_, method_name_)", true, 123401, 123475, 0);
 53.1007 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(55).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSE", true, 123479, 123512, 0);
 53.1008 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 56, PlsqlBlockType.FUNCTION_IMPL, "View_Is_Installed_Num", true, 123543, 123749, 2);
 53.1009 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(56).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  View_Is_Installed(view_name_)", true, 123630, 123685, 0);
 53.1010 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(56).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSE", true, 123689, 123722, 0);
 53.1011 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 57, PlsqlBlockType.FUNCTION_IMPL, "Logical_Unit_Is_Installed_Num", true, 123751, 123977, 2);
 53.1012 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(57).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  Logical_Unit_Is_Installed(lu_name_)", true, 123844, 123905, 0);
 53.1013 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(57).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSE", true, 123909, 123942, 0);
 53.1014 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 58, PlsqlBlockType.FUNCTION_IMPL, "Component_Is_Installed_Num", true, 123979, 124250, 2);
 53.1015 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(58).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  Component_Is_Installed(component_, version_)", true, 124111, 124181, 0);
 53.1016 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(58).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSE", true, 124185, 124218, 0);
 53.1017 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 59, PlsqlBlockType.FUNCTION_IMPL, "Get_No_Overloads", true, 124252, 125156, 3);
 53.1018 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(59).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "get_no_overloads_", true, 124372, 124546, 0);
 53.1019 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(59).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  package_name_ IS NULL OR method_name_ IS NULL", true, 124600, 124818, 1);
 53.1020 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(59).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- Error_SYS.Appl_General(service_, 'NON_EXISTING_METHOD: [:P1,:P2] method is non existing method', package_name_, method_name_);", true, 124654, 124788, 0);
 53.1021 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(59).getChildBlocks(), 2, PlsqlBlockType.IF, "IF  get_no_overloads_%NOTFOUND", true, 124889, 125088, 1);
 53.1022 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(59).getChildBlocks().get(2).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- Error_SYS.Appl_General(service_, 'NON_EXISTING_METHOD: [:P1,:P2] method is non existing method', package_name_, method_name_);", true, 124924, 125058, 0);
 53.1023 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 60, PlsqlBlockType.FUNCTION_IMPL, "Get_No_Arguments", true, 125158, 126091, 3);
 53.1024 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(60).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "get_no_args_", true, 125279, 125501, 0);
 53.1025 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(60).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  package_name_ IS NULL OR method_name_ IS NULL", true, 125555, 125773, 1);
 53.1026 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(60).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- Error_SYS.Appl_General(service_, 'NON_EXISTING_METHOD: [:P1,:P2] method is non existing method', package_name_, method_name_);", true, 125609, 125743, 0);
 53.1027 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(60).getChildBlocks(), 2, PlsqlBlockType.IF, "IF  get_no_args_%NOTFOUND", true, 125834, 126028, 1);
 53.1028 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(60).getChildBlocks().get(2).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- Error_SYS.Appl_General(service_, 'NON_EXISTING_METHOD: [:P1,:P2] method is non existing method', package_name_, method_name_);", true, 125864, 125998, 0);
 53.1029 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 61, PlsqlBlockType.FUNCTION_IMPL, "Get_Min_No_Arguments", true, 126093, 127120, 3);
 53.1030 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(61).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "get_min_no_args_", true, 126221, 126510, 0);
 53.1031 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(61).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  package_name_ IS NULL OR method_name_ IS NULL", true, 126564, 126782, 1);
 53.1032 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(61).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- Error_SYS.Appl_General(service_, 'NON_EXISTING_METHOD: [:P1,:P2] method is non existing method', package_name_, method_name_);", true, 126618, 126752, 0);
 53.1033 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(61).getChildBlocks(), 2, PlsqlBlockType.IF, "IF  get_min_no_args_%NOTFOUND", true, 126851, 127049, 1);
 53.1034 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(61).getChildBlocks().get(2).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- Error_SYS.Appl_General(service_, 'NON_EXISTING_METHOD: [:P1,:P2] method is non existing method', package_name_, method_name_);", true, 126885, 127019, 0);
 53.1035 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 62, PlsqlBlockType.FUNCTION_IMPL, "Get_Max_No_Arguments", true, 127122, 128149, 3);
 53.1036 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(62).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "get_max_no_args_", true, 127250, 127539, 0);
 53.1037 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(62).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  package_name_ IS NULL OR method_name_ IS NULL", true, 127593, 127811, 1);
 53.1038 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(62).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- Error_SYS.Appl_General(service_, 'NON_EXISTING_METHOD: [:P1,:P2] method is non existing method', package_name_, method_name_);", true, 127653, 127781, 0);
 53.1039 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(62).getChildBlocks(), 2, PlsqlBlockType.IF, "IF  get_max_no_args_%NOTFOUND", true, 127880, 128078, 1);
 53.1040 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(62).getChildBlocks().get(2).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- Error_SYS.Appl_General(service_, 'NON_EXISTING_METHOD: [:P1,:P2] method is non existing method', package_name_, method_name_);", true, 127920, 128048, 0);
 53.1041 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 63, PlsqlBlockType.FUNCTION_IMPL, "Get_Argument_Type", true, 128151, 129262, 4);
 53.1042 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(63).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "get_arg_type_", true, 128324, 128536, 0);
 53.1043 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(63).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  package_name_ IS NULL OR method_name_ IS NULL", true, 128632, 128850, 1);
 53.1044 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(63).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- Error_SYS.Appl_General(service_, 'NON_EXISTING_METHOD: [:P1,:P2] method is non existing method', package_name_, method_name_);", true, 128692, 128820, 0);
 53.1045 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(63).getChildBlocks(), 2, PlsqlBlockType.IF, "IF  Get_No_Overloads(package_name_, method_name_) > 1", true, 128854, 128941, 0);
 53.1046 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(63).getChildBlocks(), 3, PlsqlBlockType.IF, "IF  get_arg_type_%NOTFOUND", true, 129003, 129198, 1);
 53.1047 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(63).getChildBlocks().get(3).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- Error_SYS.Appl_General(service_, 'NON_EXISTING_METHOD: [:P1,:P2] method is non existing method', package_name_, method_name_);", true, 129040, 129168, 0);
 53.1048 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 64, PlsqlBlockType.PROCEDURE_IMPL, "Set_Installation_Mode", true, 129264, 129493, 0);
 53.1049 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 65, PlsqlBlockType.FUNCTION_IMPL, "Get_Installation_Mode", true, 129495, 129673, 0);
 53.1050 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 66, PlsqlBlockType.COMMENT, "-- FOUNDATION1 METHODS ", true, 129675, 130139, 0);
 53.1051 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 67, PlsqlBlockType.PROCEDURE_IMPL, "Init", true, 130141, 130183, 0);
 53.1052 -            assertBlock(lstBlockFac, 3, PlsqlBlockType.COMMENT, "COMMENT...", false, 130405, 130482, 0);
 53.1053 +            assertEquals(lstBlockFac.size(), 4);
 53.1054 +            processBlocks(plsqlFileName, lstBlockFac);
 53.1055 +
 53.1056          } finally {
 53.1057              if (fileObject != null) {
 53.1058                  fileObject.delete();
 53.1059 @@ -1073,100 +264,18 @@
 53.1060      @Test
 53.1061      public void testAdvanced6() throws IOException, BadLocationException {
 53.1062          System.out.println("Advanced test case 6");
 53.1063 -        FileObject fileObject = fs.getRoot().createData("FavoriteSchedules.apy");
 53.1064 +        final String plsqlFileName = "FavoriteSchedules.apy";
 53.1065 +        FileObject fileObject = fs.getRoot().createData(plsqlFileName);
 53.1066          assertNotNull(fileObject);
 53.1067          try {
 53.1068 -            PlsqlBlockFactory blockFac = loadAsTmpFile(fileObject, "FavoriteSchedules.apy");
 53.1069 +            PlsqlBlockFactory blockFac = loadAsTmpFile(fileObject, plsqlFileName);
 53.1070              assertNotNull(blockFac);
 53.1071  
 53.1072              List<PlsqlBlock> lstBlockFac = blockFac.getBlockHierarchy();
 53.1073  //         printHierarchy(lstBlockFac, "");
 53.1074  //         generateAssert(lstBlockFac, "lstBlockFac", "false");
 53.1075 -            assertTrue(lstBlockFac.size() == 8);
 53.1076 -            assertBlock(lstBlockFac, 0, PlsqlBlockType.COMMENT, "-- Logical unit: FavoriteSchedules", false, 0, 386, 0);
 53.1077 -            assertBlock(lstBlockFac, 1, PlsqlBlockType.COMMENT, "-- VIEWS FOR SELECTS ", false, 667, 900, 0);
 53.1078 -            assertBlock(lstBlockFac, 2, PlsqlBlockType.VIEW, "FAVORITE_SCHEDULES", false, 930, 1362, 0);
 53.1079 -            assertBlock(lstBlockFac, 3, PlsqlBlockType.TABLE_COMMENT, "FAVORITE_SCHEDULES", false, 1365, 1444, 0);
 53.1080 -            assertBlock(lstBlockFac, 4, PlsqlBlockType.COLUMN_COMMENT, "FAVORITE_SCHEDULES", false, 1447, 2009, 0);
 53.1081 -            assertBlock(lstBlockFac, 5, PlsqlBlockType.COMMENT, "-- PACKAGES FOR METHODS ", false, 2012, 2245, 0);
 53.1082 -            assertBlock(lstBlockFac, 6, PlsqlBlockType.PACKAGE_BODY, "FAVORITE_SCHEDULES_API", false, 2284, 23580, 29);
 53.1083 -            assertBlock(lstBlockFac.get(6).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- LU SPECIFIC IMPLEMENTATION METHOD DECLARATIONS ", true, 2324, 3435, 0);
 53.1084 -            assertBlock(lstBlockFac.get(6).getChildBlocks(), 1, PlsqlBlockType.FUNCTION_IMPL, "Lock_By_Id___", true, 3437, 4589, 5);
 53.1085 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "lock_control", true, 3731, 3881, 0);
 53.1086 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(1).getChildBlocks(), 1, PlsqlBlockType.CURSOR, "exist_control", true, 3885, 3973, 0);
 53.1087 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(1).getChildBlocks(), 2, PlsqlBlockType.IF, "IF  (lock_control%FOUND)", true, 4038, 4122, 0);
 53.1088 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(1).getChildBlocks(), 3, PlsqlBlockType.IF, "IF  (exist_control%FOUND)", true, 4208, 4289, 0);
 53.1089 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(1).getChildBlocks(), 4, PlsqlBlockType.IF, "ELSE", true, 4293, 4360, 0);
 53.1090 -            assertBlock(lstBlockFac.get(6).getChildBlocks(), 2, PlsqlBlockType.FUNCTION_IMPL, "Lock_By_Keys___", true, 4591, 5421, 3);
 53.1091 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(2).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "lock_control", true, 4848, 5115, 0);
 53.1092 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(2).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  (lock_control%FOUND)", true, 5180, 5253, 0);
 53.1093 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(2).getChildBlocks(), 2, PlsqlBlockType.IF, "ELSE", true, 5257, 5323, 0);
 53.1094 -            assertBlock(lstBlockFac.get(6).getChildBlocks(), 3, PlsqlBlockType.FUNCTION_IMPL, "Get_Object_By_Id___", true, 5423, 5830, 2);
 53.1095 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(3).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "getrec", true, 5533, 5614, 0);
 53.1096 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(3).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  (getrec%NOTFOUND)", true, 5670, 5768, 0);
 53.1097 -            assertBlock(lstBlockFac.get(6).getChildBlocks(), 4, PlsqlBlockType.FUNCTION_IMPL, "Get_Object_By_Keys___", true, 5833, 6426, 1);
 53.1098 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(4).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "getrec", true, 6066, 6310, 0);
 53.1099 -            assertBlock(lstBlockFac.get(6).getChildBlocks(), 5, PlsqlBlockType.FUNCTION_IMPL, "Check_Exist___", true, 6428, 7108, 2);
 53.1100 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(5).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "exist_control", true, 6638, 6890, 0);
 53.1101 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(5).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  (exist_control%FOUND)", true, 6959, 7046, 0);
 53.1102 -            assertBlock(lstBlockFac.get(6).getChildBlocks(), 6, PlsqlBlockType.PROCEDURE_IMPL, "Get_Id_Version_By_Keys___", true, 7110, 7753, 1);
 53.1103 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(6).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "get_version", true, 7362, 7626, 0);
 53.1104 -            assertBlock(lstBlockFac.get(6).getChildBlocks(), 7, PlsqlBlockType.COMMENT, "-- IMPLEMENTATION BASE METHODS FOR INSERT ", true, 7755, 8500, 0);
 53.1105 -            assertBlock(lstBlockFac.get(6).getChildBlocks(), 8, PlsqlBlockType.PROCEDURE_IMPL, "Prepare_Insert___", true, 8502, 8623, 0);
 53.1106 -            assertBlock(lstBlockFac.get(6).getChildBlocks(), 9, PlsqlBlockType.PROCEDURE_IMPL, "Unpack_Check_Insert___", true, 8626, 10038, 1);
 53.1107 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(9).getChildBlocks(), 0, PlsqlBlockType.WHILE_LOOP, "(Client_SYS.Get_Next_From_Attr(attr_, ptr_, name_, value_))", true, 8821, 9515, 6);
 53.1108 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(9).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (name_ = 'IDENTITY')", true, 8898, 9018, 0);
 53.1109 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(9).getChildBlocks().get(0).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSIF (name_ = 'SCHEDULE_TYPE')", true, 9025, 9103, 0);
 53.1110 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(9).getChildBlocks().get(0).getChildBlocks(), 2, PlsqlBlockType.IF, "ELSIF (name_ = 'SCHEDULE_CODE')", true, 9110, 9188, 0);
 53.1111 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(9).getChildBlocks().get(0).getChildBlocks(), 3, PlsqlBlockType.IF, "ELSIF (name_ = 'COMPANY_ID')", true, 9195, 9267, 0);
 53.1112 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(9).getChildBlocks().get(0).getChildBlocks(), 4, PlsqlBlockType.IF, "ELSIF (name_ = 'WAGE_CLASS')", true, 9274, 9417, 0);
 53.1113 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(9).getChildBlocks().get(0).getChildBlocks(), 5, PlsqlBlockType.IF, "ELSE", true, 9424, 9502, 0);
 53.1114 -            assertBlock(lstBlockFac.get(6).getChildBlocks(), 10, PlsqlBlockType.PROCEDURE_IMPL, "Insert___", true, 10041, 10778, 1);
 53.1115 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(10).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "INSERT", true, 10285, 10682, 0);
 53.1116 -            assertBlock(lstBlockFac.get(6).getChildBlocks(), 11, PlsqlBlockType.COMMENT, "-- IMPLEMENTATION BASE METHODS FOR UPDATE ", true, 10780, 11364, 0);
 53.1117 -            assertBlock(lstBlockFac.get(6).getChildBlocks(), 12, PlsqlBlockType.PROCEDURE_IMPL, "Unpack_Check_Update___", true, 11366, 12392, 1);
 53.1118 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(12).getChildBlocks(), 0, PlsqlBlockType.WHILE_LOOP, "(Client_SYS.Get_Next_From_Attr(attr_, ptr_, name_, value_))", true, 11589, 12242, 6);
 53.1119 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(12).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (name_ = 'IDENTITY')", true, 11666, 11748, 0);
 53.1120 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(12).getChildBlocks().get(0).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSIF (name_ = 'SCHEDULE_TYPE')", true, 11755, 11850, 0);
 53.1121 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(12).getChildBlocks().get(0).getChildBlocks(), 2, PlsqlBlockType.IF, "ELSIF (name_ = 'SCHEDULE_CODE')", true, 11857, 11952, 0);
 53.1122 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(12).getChildBlocks().get(0).getChildBlocks(), 3, PlsqlBlockType.IF, "ELSIF (name_ = 'COMPANY_ID')", true, 11959, 12048, 0);
 53.1123 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(12).getChildBlocks().get(0).getChildBlocks(), 4, PlsqlBlockType.IF, "ELSIF (name_ = 'WAGE_CLASS')", true, 12055, 12144, 0);
 53.1124 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(12).getChildBlocks().get(0).getChildBlocks(), 5, PlsqlBlockType.IF, "ELSE", true, 12151, 12229, 0);
 53.1125 -            assertBlock(lstBlockFac.get(6).getChildBlocks(), 13, PlsqlBlockType.PROCEDURE_IMPL, "Update___", true, 12395, 13729, 2);
 53.1126 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(13).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  by_keys_", true, 12739, 13285, 1);
 53.1127 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(13).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "UPDATE favorite_schedules_tab", true, 12762, 13284, 0);
 53.1128 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(13).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSE", true, 13289, 13634, 1);
 53.1129 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(13).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "UPDATE favorite_schedules_tab", true, 13300, 13622, 0);
 53.1130 -            assertBlock(lstBlockFac.get(6).getChildBlocks(), 14, PlsqlBlockType.COMMENT, "-- IMPLEMENTATION BASE METHODS FOR DELETE ", true, 13731, 14328, 0);
 53.1131 -            assertBlock(lstBlockFac.get(6).getChildBlocks(), 15, PlsqlBlockType.PROCEDURE_IMPL, "Check_Delete___", true, 14330, 14658, 0);
 53.1132 -            assertBlock(lstBlockFac.get(6).getChildBlocks(), 16, PlsqlBlockType.PROCEDURE_IMPL, "Delete___", true, 14661, 15069, 1);
 53.1133 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(16).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "DELETE", true, 14984, 15053, 0);
 53.1134 -            assertBlock(lstBlockFac.get(6).getChildBlocks(), 17, PlsqlBlockType.COMMENT, "-- PRIVATE BASE METHODS ", true, 15071, 17372, 0);
 53.1135 -            assertBlock(lstBlockFac.get(6).getChildBlocks(), 18, PlsqlBlockType.PROCEDURE_IMPL, "Lock__", true, 17374, 17669, 0);
 53.1136 -            assertBlock(lstBlockFac.get(6).getChildBlocks(), 19, PlsqlBlockType.PROCEDURE_IMPL, "New__", true, 17672, 18276, 3);
 53.1137 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(19).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (action_ = 'PREPARE')", true, 17945, 18006, 0);
 53.1138 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(19).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSIF (action_ = 'CHECK')", true, 18010, 18086, 0);
 53.1139 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(19).getChildBlocks(), 2, PlsqlBlockType.IF, "ELSIF (action_ = 'DO')", true, 18090, 18228, 0);
 53.1140 -            assertBlock(lstBlockFac.get(6).getChildBlocks(), 20, PlsqlBlockType.PROCEDURE_IMPL, "Modify__", true, 18279, 19001, 2);
 53.1141 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(20).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (action_ = 'CHECK')", true, 18585, 18712, 0);
 53.1142 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(20).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSIF (action_ = 'DO')", true, 18716, 18950, 0);
 53.1143 -            assertBlock(lstBlockFac.get(6).getChildBlocks(), 21, PlsqlBlockType.PROCEDURE_IMPL, "Remove__", true, 19004, 19556, 2);
 53.1144 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(21).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (action_ = 'CHECK')", true, 19239, 19344, 0);
 53.1145 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(21).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSIF (action_ = 'DO')", true, 19348, 19505, 0);
 53.1146 -            assertBlock(lstBlockFac.get(6).getChildBlocks(), 22, PlsqlBlockType.COMMENT, "-- PUBLIC BASE METHODS ", true, 19558, 20011, 0);
 53.1147 -            assertBlock(lstBlockFac.get(6).getChildBlocks(), 23, PlsqlBlockType.PROCEDURE_IMPL, "Exist", true, 20013, 20412, 1);
 53.1148 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(23).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (NOT Check_Exist___(identity_, schedule_type_, schedule_code_, company_id_, wage_class_))", true, 20249, 20401, 0);
 53.1149 -            assertBlock(lstBlockFac.get(6).getChildBlocks(), 24, PlsqlBlockType.COMMENT, "-- LU SPECIFIC IMPLEMENTATION METHODS ", true, 20414, 21355, 0);
 53.1150 -            assertBlock(lstBlockFac.get(6).getChildBlocks(), 25, PlsqlBlockType.PROCEDURE_IMPL, "Add_Remove", true, 21357, 22709, 2);
 53.1151 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(25).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  favorite_ = 1", true, 21801, 22380, 1);
 53.1152 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(25).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (NOT Check_Exist___(identity_, schedule_type_, schedule_code_, company_id_, wage_class_))", true, 21829, 22380, 0);
 53.1153 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(25).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSE", true, 22384, 22692, 1);
 53.1154 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(25).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (Check_Exist___(identity_, schedule_type_, schedule_code_, company_id_, wage_class_))", true, 22395, 22681, 0);
 53.1155 -            assertBlock(lstBlockFac.get(6).getChildBlocks(), 26, PlsqlBlockType.FUNCTION_IMPL, "Get_Favorite", true, 22712, 23058, 1);
 53.1156 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(26).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (Check_Exist___(identity_, schedule_type_, schedule_code_, company_id_, wage_class_))", true, 22907, 23027, 0);
 53.1157 -            assertBlock(lstBlockFac.get(6).getChildBlocks(), 27, PlsqlBlockType.COMMENT, "-- FOUNDATION1 METHODS ", true, 23060, 23524, 0);
 53.1158 -            assertBlock(lstBlockFac.get(6).getChildBlocks(), 28, PlsqlBlockType.PROCEDURE_IMPL, "Init", true, 23526, 23568, 0);
 53.1159 -            assertBlock(lstBlockFac, 7, PlsqlBlockType.COMMENT, "COMMENT...", false, 23702, 23779, 0);
 53.1160 +            assertEquals(lstBlockFac.size(), 8);
 53.1161 +            processBlocks(plsqlFileName, lstBlockFac);
 53.1162          } finally {
 53.1163              if (fileObject != null) {
 53.1164                  fileObject.delete();
 53.1165 @@ -1177,38 +286,18 @@
 53.1166      @Test
 53.1167      public void testAdvanced7() throws IOException, BadLocationException {
 53.1168          System.out.println("Advanced test case 7");
 53.1169 -        FileObject fileObject = fs.getRoot().createData("FndEvent.api");
 53.1170 +        final String plsqlFileName = "FndEvent.api";
 53.1171 +        FileObject fileObject = fs.getRoot().createData(plsqlFileName);
 53.1172          assertNotNull(fileObject);
 53.1173          try {
 53.1174 -            PlsqlBlockFactory blockFac = loadAsTmpFile(fileObject, "FndEvent.api");
 53.1175 +            PlsqlBlockFactory blockFac = loadAsTmpFile(fileObject, plsqlFileName);
 53.1176              assertNotNull(blockFac);
 53.1177  
 53.1178              List<PlsqlBlock> lstBlockFac = blockFac.getBlockHierarchy();
 53.1179  //         printHierarchy(lstBlockFac, "");
 53.1180  //         generateAssert(lstBlockFac, "lstBlockFac", "false");
 53.1181 -            assertTrue(lstBlockFac.size() == 3);
 53.1182 -            assertBlock(lstBlockFac, 0, PlsqlBlockType.COMMENT, "-- Logical unit: FndEvent", false, 0, 628, 0);
 53.1183 -            assertBlock(lstBlockFac, 1, PlsqlBlockType.PACKAGE, "FND_EVENT_API", false, 772, 4523, 19);
 53.1184 -            assertBlock(lstBlockFac.get(1).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- PRIVATE BASE METHODS ", true, 1037, 1270, 0);
 53.1185 -            assertBlock(lstBlockFac.get(1).getChildBlocks(), 1, PlsqlBlockType.PROCEDURE_DEF, "Lock__", true, 1272, 1379, 0);
 53.1186 -            assertBlock(lstBlockFac.get(1).getChildBlocks(), 2, PlsqlBlockType.PROCEDURE_DEF, "New__", true, 1381, 1560, 0);
 53.1187 -            assertBlock(lstBlockFac.get(1).getChildBlocks(), 3, PlsqlBlockType.PROCEDURE_DEF, "Modify__", true, 1562, 1744, 0);
 53.1188 -            assertBlock(lstBlockFac.get(1).getChildBlocks(), 4, PlsqlBlockType.PROCEDURE_DEF, "Remove__", true, 1746, 1884, 0);
 53.1189 -            assertBlock(lstBlockFac.get(1).getChildBlocks(), 5, PlsqlBlockType.COMMENT, "-- PUBLIC BASE METHODS ", true, 1886, 2119, 0);
 53.1190 -            assertBlock(lstBlockFac.get(1).getChildBlocks(), 6, PlsqlBlockType.PROCEDURE_DEF, "Exist", true, 2121, 2202, 0);
 53.1191 -            assertBlock(lstBlockFac.get(1).getChildBlocks(), 7, PlsqlBlockType.COMMENT, "-- LU SPECIFIC PRIVATE METHODS ", true, 2204, 2437, 0);
 53.1192 -            assertBlock(lstBlockFac.get(1).getChildBlocks(), 8, PlsqlBlockType.PROCEDURE_DEF, "Export__", true, 2439, 2557, 0);
 53.1193 -            assertBlock(lstBlockFac.get(1).getChildBlocks(), 9, PlsqlBlockType.COMMENT, "-- LU SPECIFIC PROTECTED METHODS ", true, 2559, 3028, 0);
 53.1194 -            assertBlock(lstBlockFac.get(1).getChildBlocks(), 10, PlsqlBlockType.FUNCTION_DEF, "Get_Event_Description", true, 3030, 3142, 0);
 53.1195 -            assertBlock(lstBlockFac.get(1).getChildBlocks(), 11, PlsqlBlockType.FUNCTION_DEF, "Get_Event_Enable", true, 3202, 3309, 0);
 53.1196 -            assertBlock(lstBlockFac.get(1).getChildBlocks(), 12, PlsqlBlockType.PROCEDURE_DEF, "Set_Event_Enable", true, 3364, 3456, 0);
 53.1197 -            assertBlock(lstBlockFac.get(1).getChildBlocks(), 13, PlsqlBlockType.PROCEDURE_DEF, "Refresh", true, 3459, 3908, 0);
 53.1198 -            assertBlock(lstBlockFac.get(1).getChildBlocks(), 14, PlsqlBlockType.PROCEDURE_DEF, "Register_Custom_Event", true, 3910, 4038, 0);
 53.1199 -            assertBlock(lstBlockFac.get(1).getChildBlocks(), 15, PlsqlBlockType.PROCEDURE_DEF, "Unfresh", true, 4041, 4124, 0);
 53.1200 -            assertBlock(lstBlockFac.get(1).getChildBlocks(), 16, PlsqlBlockType.FUNCTION_DEF, "Get", true, 4127, 4218, 0);
 53.1201 -            assertBlock(lstBlockFac.get(1).getChildBlocks(), 17, PlsqlBlockType.COMMENT, "-- FOUNDATION1 METHODS ", true, 4261, 4494, 0);
 53.1202 -            assertBlock(lstBlockFac.get(1).getChildBlocks(), 18, PlsqlBlockType.PROCEDURE_DEF, "Init", true, 4496, 4511, 0);
 53.1203 -            assertBlock(lstBlockFac, 2, PlsqlBlockType.COMMENT, "COMMENT...", false, 4580, 4657, 0);
 53.1204 +            assertEquals(lstBlockFac.size(), 3);
 53.1205 +            processBlocks(plsqlFileName, lstBlockFac);
 53.1206          } finally {
 53.1207              if (fileObject != null) {
 53.1208                  fileObject.delete();
 53.1209 @@ -1219,266 +308,18 @@
 53.1210      @Test
 53.1211      public void testAdvanced8() throws IOException, BadLocationException {
 53.1212          System.out.println("Advanced test case 8");
 53.1213 -        FileObject fileObject = fs.getRoot().createData("FndEvent.apy");
 53.1214 +        final String plsqlFileName = "FndEvent.apy";
 53.1215 +        FileObject fileObject = fs.getRoot().createData(plsqlFileName);
 53.1216          assertNotNull(fileObject);
 53.1217          try {
 53.1218 -            PlsqlBlockFactory blockFac = loadAsTmpFile(fileObject, "FndEvent.apy");
 53.1219 +            PlsqlBlockFactory blockFac = loadAsTmpFile(fileObject, plsqlFileName);
 53.1220              assertNotNull(blockFac);
 53.1221  
 53.1222              List<PlsqlBlock> lstBlockFac = blockFac.getBlockHierarchy();
 53.1223  //         printHierarchy(lstBlockFac, "");
 53.1224  //         generateAssert(lstBlockFac, "lstBlockFac", "false");
 53.1225 -            assertTrue(lstBlockFac.size() == 8);
 53.1226 -            assertBlock(lstBlockFac, 0, PlsqlBlockType.COMMENT, "-- Logical unit: FndEvent", false, 0, 1577, 0);
 53.1227 -            assertBlock(lstBlockFac, 1, PlsqlBlockType.COMMENT, "-- VIEWS FOR SELECTS ", false, 1861, 2094, 0);
 53.1228 -            assertBlock(lstBlockFac, 2, PlsqlBlockType.VIEW, "FND_EVENT", false, 2129, 3044, 0);
 53.1229 -            assertBlock(lstBlockFac, 3, PlsqlBlockType.TABLE_COMMENT, "FND_EVENT", false, 3047, 3122, 0);
 53.1230 -            assertBlock(lstBlockFac, 4, PlsqlBlockType.COLUMN_COMMENT, "&AO", false, 3125, 4663, 0);
 53.1231 -            assertBlock(lstBlockFac, 5, PlsqlBlockType.COMMENT, "-- PACKAGES FOR METHODS ", false, 4666, 4899, 0);
 53.1232 -            assertBlock(lstBlockFac, 6, PlsqlBlockType.PACKAGE_BODY, "FND_EVENT_API", false, 4943, 53148, 50);
 53.1233 -            assertBlock(lstBlockFac.get(6).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- LU SPECIFIC IMPLEMENTATION METHOD DECLARATIONS ", true, 5227, 5460, 0);
 53.1234 -            assertBlock(lstBlockFac.get(6).getChildBlocks(), 1, PlsqlBlockType.PROCEDURE_DEF, "Create_Custom_Trigger___", true, 5462, 5582, 0);
 53.1235 -            assertBlock(lstBlockFac.get(6).getChildBlocks(), 2, PlsqlBlockType.PROCEDURE_DEF, "Create_Custom_Triggers___", true, 5584, 5656, 0);
 53.1236 -            assertBlock(lstBlockFac.get(6).getChildBlocks(), 3, PlsqlBlockType.FUNCTION_DEF, "Get_Trigger_Name___", true, 5658, 5767, 0);
 53.1237 -            assertBlock(lstBlockFac.get(6).getChildBlocks(), 4, PlsqlBlockType.PROCEDURE_DEF, "Remove_Custom_Trigger___", true, 5769, 5889, 0);
 53.1238 -            assertBlock(lstBlockFac.get(6).getChildBlocks(), 5, PlsqlBlockType.PROCEDURE_DEF, "Remove_Custom_Triggers___", true, 5891, 5963, 0);
 53.1239 -            assertBlock(lstBlockFac.get(6).getChildBlocks(), 6, PlsqlBlockType.FUNCTION_DEF, "Create_Trigger_Name___", true, 5965, 6042, 0);
 53.1240 -            assertBlock(lstBlockFac.get(6).getChildBlocks(), 7, PlsqlBlockType.COMMENT, "-- IMPLEMENTATION BASE METHODS ", true, 6043, 6918, 0);
 53.1241 -            assertBlock(lstBlockFac.get(6).getChildBlocks(), 8, PlsqlBlockType.FUNCTION_IMPL, "Lock_By_Id___", true, 6920, 8072, 5);
 53.1242 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(8).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "lock_control", true, 7214, 7364, 0);
 53.1243 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(8).getChildBlocks(), 1, PlsqlBlockType.CURSOR, "exist_control", true, 7368, 7456, 0);
 53.1244 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(8).getChildBlocks(), 2, PlsqlBlockType.IF, "IF  (lock_control%FOUND)", true, 7521, 7605, 0);
 53.1245 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(8).getChildBlocks(), 3, PlsqlBlockType.IF, "IF  (exist_control%FOUND)", true, 7691, 7772, 0);
 53.1246 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(8).getChildBlocks(), 4, PlsqlBlockType.IF, "ELSE", true, 7776, 7843, 0);
 53.1247 -            assertBlock(lstBlockFac.get(6).getChildBlocks(), 9, PlsqlBlockType.FUNCTION_IMPL, "Lock_By_Keys___", true, 8074, 8705, 3);
 53.1248 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(9).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "lock_control", true, 8249, 8399, 0);
 53.1249 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(9).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  (lock_control%FOUND)", true, 8464, 8537, 0);
 53.1250 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(9).getChildBlocks(), 2, PlsqlBlockType.IF, "ELSE", true, 8541, 8607, 0);
 53.1251 -            assertBlock(lstBlockFac.get(6).getChildBlocks(), 10, PlsqlBlockType.FUNCTION_IMPL, "Get_Object_By_Id___", true, 8707, 9114, 2);
 53.1252 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(10).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "getrec", true, 8817, 8898, 0);
 53.1253 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(10).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  (getrec%NOTFOUND)", true, 8954, 9052, 0);
 53.1254 -            assertBlock(lstBlockFac.get(6).getChildBlocks(), 11, PlsqlBlockType.FUNCTION_IMPL, "Get_Object_By_Keys___", true, 9117, 9511, 1);
 53.1255 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(11).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "getrec", true, 9268, 9395, 0);
 53.1256 -            assertBlock(lstBlockFac.get(6).getChildBlocks(), 12, PlsqlBlockType.FUNCTION_IMPL, "Check_Exist___", true, 9513, 9994, 2);
 53.1257 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(12).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "exist_control", true, 9641, 9776, 0);
 53.1258 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(12).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  (exist_control%FOUND)", true, 9845, 9932, 0);
 53.1259 -            assertBlock(lstBlockFac.get(6).getChildBlocks(), 13, PlsqlBlockType.PROCEDURE_IMPL, "Get_Id_Version_By_Keys___", true, 9996, 10457, 1);
 53.1260 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(13).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "get_version", true, 10180, 10330, 0);
 53.1261 -            assertBlock(lstBlockFac.get(6).getChildBlocks(), 14, PlsqlBlockType.COMMENT, "-- IMPLEMENTATION BASE METHODS FOR INSERT ", true, 10459, 11204, 0);
 53.1262 -            assertBlock(lstBlockFac.get(6).getChildBlocks(), 15, PlsqlBlockType.PROCEDURE_IMPL, "Prepare_Insert___", true, 11206, 11890, 0);
 53.1263 -            assertBlock(lstBlockFac.get(6).getChildBlocks(), 16, PlsqlBlockType.PROCEDURE_IMPL, "Unpack_Check_Insert___", true, 11893, 14969, 1);
 53.1264 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(16).getChildBlocks(), 0, PlsqlBlockType.WHILE_LOOP, "(Client_SYS.Get_Next_From_Attr(attr_, ptr_, name_, value_))", true, 12088, 14317, 15);
 53.1265 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(16).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (name_ = 'EVENT_LU_NAME')", true, 12165, 12240, 0);
 53.1266 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(16).getChildBlocks().get(0).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSIF (name_ = 'EVENT_ID')", true, 12247, 12322, 0);
 53.1267 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(16).getChildBlocks().get(0).getChildBlocks(), 2, PlsqlBlockType.IF, "ELSIF (name_ = 'EVENT_DESCRIPTION')", true, 12329, 12415, 0);
 53.1268 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(16).getChildBlocks().get(0).getChildBlocks(), 3, PlsqlBlockType.IF, "ELSIF (name_ = 'EVENT_ENABLE')", true, 12422, 12498, 0);
 53.1269 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(16).getChildBlocks().get(0).getChildBlocks(), 4, PlsqlBlockType.IF, "ELSIF (name_ = 'EVENT_TABLE_NAME')", true, 12505, 12589, 0);
 53.1270 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(16).getChildBlocks().get(0).getChildBlocks(), 5, PlsqlBlockType.IF, "ELSIF (name_ = 'EVENT_TYPE')", true, 12596, 12796, 1);
 53.1271 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(16).getChildBlocks().get(0).getChildBlocks().get(5).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (value_ IS NOT NULL)", true, 12705, 12796, 0);
 53.1272 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(16).getChildBlocks().get(0).getChildBlocks(), 6, PlsqlBlockType.IF, "ELSIF (name_ = 'EVENT_TYPE_DB')", true, 12803, 12982, 1);
 53.1273 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(16).getChildBlocks().get(0).getChildBlocks().get(6).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (value_ IS NOT NULL)", true, 12888, 12982, 0);
 53.1274 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(16).getChildBlocks().get(0).getChildBlocks(), 7, PlsqlBlockType.IF, "ELSIF (name_ = 'MODIFIED_ATTRIBUTES')", true, 12989, 13079, 0);
 53.1275 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(16).getChildBlocks().get(0).getChildBlocks(), 8, PlsqlBlockType.IF, "ELSIF (name_ = 'NEW_ROW')", true, 13086, 13274, 1);
 53.1276 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(16).getChildBlocks().get(0).getChildBlocks().get(8).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (value_ IS NOT NULL)", true, 13186, 13274, 0);
 53.1277 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(16).getChildBlocks().get(0).getChildBlocks(), 9, PlsqlBlockType.IF, "ELSIF (name_ = 'NEW_ROW_DB')", true, 13281, 13451, 1);
 53.1278 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(16).getChildBlocks().get(0).getChildBlocks().get(9).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (value_ IS NOT NULL)", true, 13360, 13451, 0);
 53.1279 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(16).getChildBlocks().get(0).getChildBlocks(), 10, PlsqlBlockType.IF, "ELSIF (name_ = 'MODIFY_ROW')", true, 13458, 13652, 1);
 53.1280 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(16).getChildBlocks().get(0).getChildBlocks().get(10).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (value_ IS NOT NULL)", true, 13564, 13652, 0);
 53.1281 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(16).getChildBlocks().get(0).getChildBlocks(), 11, PlsqlBlockType.IF, "ELSIF (name_ = 'MODIFY_ROW_DB')", true, 13659, 13835, 1);
 53.1282 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(16).getChildBlocks().get(0).getChildBlocks().get(11).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (value_ IS NOT NULL)", true, 13744, 13835, 0);
 53.1283 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(16).getChildBlocks().get(0).getChildBlocks(), 12, PlsqlBlockType.IF, "ELSIF (name_ = 'REMOVE_ROW')", true, 13842, 14036, 1);
 53.1284 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(16).getChildBlocks().get(0).getChildBlocks().get(12).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (value_ IS NOT NULL)", true, 13948, 14036, 0);
 53.1285 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(16).getChildBlocks().get(0).getChildBlocks(), 13, PlsqlBlockType.IF, "ELSIF (name_ = 'REMOVE_ROW_DB')", true, 14043, 14219, 1);
 53.1286 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(16).getChildBlocks().get(0).getChildBlocks().get(13).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (value_ IS NOT NULL)", true, 14128, 14219, 0);
 53.1287 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(16).getChildBlocks().get(0).getChildBlocks(), 14, PlsqlBlockType.IF, "ELSE", true, 14226, 14304, 0);
 53.1288 -            assertBlock(lstBlockFac.get(6).getChildBlocks(), 17, PlsqlBlockType.PROCEDURE_IMPL, "Insert___", true, 14972, 16385, 6);
 53.1289 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(17).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "COMMENT...", true, 15241, 15243, 0);
 53.1290 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(17).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  (nvl(newrec_.event_enable, 'FALSE') = 'TRUE')", true, 15247, 15409, 0);
 53.1291 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(17).getChildBlocks(), 2, PlsqlBlockType.COMMENT, "COMMENT...", true, 15413, 15415, 0);
 53.1292 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(17).getChildBlocks(), 3, PlsqlBlockType.STATEMENT, "INSERT", true, 15419, 16093, 0);
 53.1293 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(17).getChildBlocks(), 4, PlsqlBlockType.COMMENT, "-- Create Custom Defined triggers", true, 16098, 16131, 0);
 53.1294 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(17).getChildBlocks(), 5, PlsqlBlockType.IF, "IF  (newrec_.event_type = 'CUSTOM')", true, 16135, 16290, 1);
 53.1295 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(17).getChildBlocks().get(5).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (newrec_.event_enable = 'TRUE')", true, 16181, 16279, 0);
 53.1296 -            assertBlock(lstBlockFac.get(6).getChildBlocks(), 18, PlsqlBlockType.COMMENT, "-- IMPLEMENTATION BASE METHODS FOR UPDATE ", true, 16387, 16971, 0);
 53.1297 -            assertBlock(lstBlockFac.get(6).getChildBlocks(), 19, PlsqlBlockType.PROCEDURE_IMPL, "Unpack_Check_Update___", true, 16973, 19888, 1);
 53.1298 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(19).getChildBlocks(), 0, PlsqlBlockType.WHILE_LOOP, "(Client_SYS.Get_Next_From_Attr(attr_, ptr_, name_, value_))", true, 17196, 19452, 15);
 53.1299 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(19).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (name_ = 'EVENT_LU_NAME')", true, 17273, 17365, 0);
 53.1300 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(19).getChildBlocks().get(0).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSIF (name_ = 'EVENT_ID')", true, 17372, 17457, 0);
 53.1301 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(19).getChildBlocks().get(0).getChildBlocks(), 2, PlsqlBlockType.IF, "ELSIF (name_ = 'EVENT_DESCRIPTION')", true, 17464, 17550, 0);
 53.1302 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(19).getChildBlocks().get(0).getChildBlocks(), 3, PlsqlBlockType.IF, "ELSIF (name_ = 'EVENT_ENABLE')", true, 17557, 17633, 0);
 53.1303 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(19).getChildBlocks().get(0).getChildBlocks(), 4, PlsqlBlockType.IF, "ELSIF (name_ = 'EVENT_TABLE_NAME')", true, 17640, 17724, 0);
 53.1304 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(19).getChildBlocks().get(0).getChildBlocks(), 5, PlsqlBlockType.IF, "ELSIF (name_ = 'EVENT_TYPE')", true, 17731, 17931, 1);
 53.1305 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(19).getChildBlocks().get(0).getChildBlocks().get(5).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (value_ IS NOT NULL)", true, 17840, 17931, 0);
 53.1306 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(19).getChildBlocks().get(0).getChildBlocks(), 6, PlsqlBlockType.IF, "ELSIF (name_ = 'EVENT_TYPE_DB')", true, 17938, 18117, 1);
 53.1307 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(19).getChildBlocks().get(0).getChildBlocks().get(6).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (value_ IS NOT NULL)", true, 18023, 18117, 0);
 53.1308 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(19).getChildBlocks().get(0).getChildBlocks(), 7, PlsqlBlockType.IF, "ELSIF (name_ = 'MODIFIED_ATTRIBUTES')", true, 18124, 18214, 0);
 53.1309 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(19).getChildBlocks().get(0).getChildBlocks(), 8, PlsqlBlockType.IF, "ELSIF (name_ = 'NEW_ROW')", true, 18221, 18409, 1);
 53.1310 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(19).getChildBlocks().get(0).getChildBlocks().get(8).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (value_ IS NOT NULL)", true, 18321, 18409, 0);
 53.1311 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(19).getChildBlocks().get(0).getChildBlocks(), 9, PlsqlBlockType.IF, "ELSIF (name_ = 'NEW_ROW_DB')", true, 18416, 18586, 1);
 53.1312 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(19).getChildBlocks().get(0).getChildBlocks().get(9).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (value_ IS NOT NULL)", true, 18495, 18586, 0);
 53.1313 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(19).getChildBlocks().get(0).getChildBlocks(), 10, PlsqlBlockType.IF, "ELSIF (name_ = 'MODIFY_ROW')", true, 18593, 18787, 1);
 53.1314 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(19).getChildBlocks().get(0).getChildBlocks().get(10).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (value_ IS NOT NULL)", true, 18699, 18787, 0);
 53.1315 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(19).getChildBlocks().get(0).getChildBlocks(), 11, PlsqlBlockType.IF, "ELSIF (name_ = 'MODIFY_ROW_DB')", true, 18794, 18970, 1);
 53.1316 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(19).getChildBlocks().get(0).getChildBlocks().get(11).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (value_ IS NOT NULL)", true, 18879, 18970, 0);
 53.1317 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(19).getChildBlocks().get(0).getChildBlocks(), 12, PlsqlBlockType.IF, "ELSIF (name_ = 'REMOVE_ROW')", true, 18977, 19171, 1);
 53.1318 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(19).getChildBlocks().get(0).getChildBlocks().get(12).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (value_ IS NOT NULL)", true, 19083, 19171, 0);
 53.1319 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(19).getChildBlocks().get(0).getChildBlocks(), 13, PlsqlBlockType.IF, "ELSIF (name_ = 'REMOVE_ROW_DB')", true, 19178, 19354, 1);
 53.1320 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(19).getChildBlocks().get(0).getChildBlocks().get(13).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (value_ IS NOT NULL)", true, 19263, 19354, 0);
 53.1321 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(19).getChildBlocks().get(0).getChildBlocks(), 14, PlsqlBlockType.IF, "ELSE", true, 19361, 19439, 0);
 53.1322 -            assertBlock(lstBlockFac.get(6).getChildBlocks(), 20, PlsqlBlockType.PROCEDURE_IMPL, "Update___", true, 19891, 22450, 7);
 53.1323 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(20).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "get_event_count", true, 20152, 20350, 0);
 53.1324 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(20).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  (nvl(oldrec_.event_enable, 'FALSE') = 'FALSE' AND newrec_.event_enable = 'TRUE')", true, 20360, 20700, 1);
 53.1325 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(20).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (dummy_ = 0)", true, 20554, 20689, 0);
 53.1326 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(20).getChildBlocks(), 2, PlsqlBlockType.COMMENT, "COMMENT...", true, 20704, 20706, 0);
 53.1327 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(20).getChildBlocks(), 3, PlsqlBlockType.IF, "IF  by_keys_", true, 20810, 21460, 1);
 53.1328 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(20).getChildBlocks().get(3).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "UPDATE fnd_event_tab", true, 20833, 21459, 0);
 53.1329 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(20).getChildBlocks(), 4, PlsqlBlockType.IF, "ELSE", true, 21464, 22051, 1);
 53.1330 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(20).getChildBlocks().get(4).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "UPDATE fnd_event_tab", true, 21475, 22039, 0);
 53.1331 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(20).getChildBlocks(), 5, PlsqlBlockType.COMMENT, "-- Create/remove Custom Defined triggers", true, 22055, 22095, 0);
 53.1332 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(20).getChildBlocks(), 6, PlsqlBlockType.IF, "IF  (newrec_.event_type = 'CUSTOM')", true, 22099, 22355, 2);
 53.1333 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(20).getChildBlocks().get(6).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (newrec_.event_enable = 'TRUE')", true, 22145, 22274, 0);
 53.1334 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(20).getChildBlocks().get(6).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSE", true, 22281, 22344, 0);
 53.1335 -            assertBlock(lstBlockFac.get(6).getChildBlocks(), 21, PlsqlBlockType.COMMENT, "-- IMPLEMENTATION BASE METHODS FOR DELETE ", true, 22452, 23049, 0);
 53.1336 -            assertBlock(lstBlockFac.get(6).getChildBlocks(), 22, PlsqlBlockType.PROCEDURE_IMPL, "Check_Delete___", true, 23051, 23289, 0);
 53.1337 -            assertBlock(lstBlockFac.get(6).getChildBlocks(), 23, PlsqlBlockType.PROCEDURE_IMPL, "Delete___", true, 23292, 23734, 3);
 53.1338 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(23).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "DELETE", true, 23525, 23585, 0);
 53.1339 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(23).getChildBlocks(), 1, PlsqlBlockType.COMMENT, "-- Remove Custom Defined triggers", true, 23590, 23623, 0);
 53.1340 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(23).getChildBlocks(), 2, PlsqlBlockType.IF, "IF  (remrec_.event_type = 'CUSTOM')", true, 23627, 23719, 0);
 53.1341 -            assertBlock(lstBlockFac.get(6).getChildBlocks(), 24, PlsqlBlockType.COMMENT, "-- PRIVATE BASE METHODS ", true, 23736, 26037, 0);
 53.1342 -            assertBlock(lstBlockFac.get(6).getChildBlocks(), 25, PlsqlBlockType.PROCEDURE_IMPL, "Lock__", true, 26039, 26334, 0);
 53.1343 -            assertBlock(lstBlockFac.get(6).getChildBlocks(), 26, PlsqlBlockType.PROCEDURE_IMPL, "New__", true, 26337, 26941, 3);
 53.1344 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(26).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (action_ = 'PREPARE')", true, 26610, 26671, 0);
 53.1345 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(26).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSIF (action_ = 'CHECK')", true, 26675, 26751, 0);
 53.1346 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(26).getChildBlocks(), 2, PlsqlBlockType.IF, "ELSIF (action_ = 'DO')", true, 26755, 26893, 0);
 53.1347 -            assertBlock(lstBlockFac.get(6).getChildBlocks(), 27, PlsqlBlockType.PROCEDURE_IMPL, "Modify__", true, 26944, 27666, 2);
 53.1348 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(27).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (action_ = 'CHECK')", true, 27250, 27377, 0);
 53.1349 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(27).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSIF (action_ = 'DO')", true, 27381, 27615, 0);
 53.1350 -            assertBlock(lstBlockFac.get(6).getChildBlocks(), 28, PlsqlBlockType.PROCEDURE_IMPL, "Remove__", true, 27669, 28221, 2);
 53.1351 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(28).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (action_ = 'CHECK')", true, 27904, 28009, 0);
 53.1352 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(28).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSIF (action_ = 'DO')", true, 28013, 28170, 0);
 53.1353 -            assertBlock(lstBlockFac.get(6).getChildBlocks(), 29, PlsqlBlockType.COMMENT, "-- PUBLIC BASE METHODS ", true, 28223, 28676, 0);
 53.1354 -            assertBlock(lstBlockFac.get(6).getChildBlocks(), 30, PlsqlBlockType.PROCEDURE_IMPL, "Exist", true, 28678, 28953, 1);
 53.1355 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(30).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (NOT Check_Exist___(event_lu_name_, event_id_))", true, 28832, 28942, 0);
 53.1356 -            assertBlock(lstBlockFac.get(6).getChildBlocks(), 31, PlsqlBlockType.COMMENT, "-- LU SPECIFIC IMPLEMENTATION METHODS ", true, 28955, 29188, 0);
 53.1357 -            assertBlock(lstBlockFac.get(6).getChildBlocks(), 32, PlsqlBlockType.PROCEDURE_IMPL, "Create_Custom_Triggers___", true, 29190, 29720, 4);
 53.1358 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(32).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- Create triggers per type (New, Modify, Remove)", true, 29355, 29404, 0);
 53.1359 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(32).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  (rec_.new_row = 'TRUE')", true, 29408, 29495, 0);
 53.1360 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(32).getChildBlocks(), 2, PlsqlBlockType.IF, "IF  (rec_.modify_row = 'TRUE')", true, 29499, 29592, 0);
 53.1361 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(32).getChildBlocks(), 3, PlsqlBlockType.IF, "IF  (rec_.remove_row = 'TRUE')", true, 29596, 29689, 0);
 53.1362 -            assertBlock(lstBlockFac.get(6).getChildBlocks(), 33, PlsqlBlockType.PROCEDURE_IMPL, "Create_Custom_Trigger___", true, 29722, 38974, 18);
 53.1363 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(33).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "COMMENT...", true, 30211, 30213, 0);
 53.1364 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(33).getChildBlocks(), 1, PlsqlBlockType.CURSOR, "get_param", true, 30217, 30363, 0);
 53.1365 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(33).getChildBlocks(), 2, PlsqlBlockType.COMMENT, "COMMENT...", true, 30367, 30369, 0);
 53.1366 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(33).getChildBlocks(), 3, PlsqlBlockType.FUNCTION_IMPL, "space___", true, 30373, 30539, 0);
 53.1367 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(33).getChildBlocks(), 4, PlsqlBlockType.COMMENT, "COMMENT...", true, 30543, 30545, 0);
 53.1368 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(33).getChildBlocks(), 5, PlsqlBlockType.FUNCTION_IMPL, "Get_Dml_Event___", true, 30549, 30884, 3);
 53.1369 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(33).getChildBlocks().get(5).getChildBlocks(), 0, PlsqlBlockType.CASE, "CASE  trigger_type_\n         WHEN 'NEW'", true, 30654, 30727, 0);
 53.1370 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(33).getChildBlocks().get(5).getChildBlocks(), 1, PlsqlBlockType.CASE, "WHEN 'MODIFY'", true, 30737, 30785, 0);
 53.1371 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(33).getChildBlocks().get(5).getChildBlocks(), 2, PlsqlBlockType.CASE, "WHEN 'REMOVE'", true, 30795, 30859, 0);
 53.1372 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(33).getChildBlocks(), 6, PlsqlBlockType.COMMENT, "COMMENT...", true, 30888, 30890, 0);
 53.1373 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(33).getChildBlocks(), 7, PlsqlBlockType.FUNCTION_IMPL, "Get_Columns___", true, 30894, 32204, 3);
 53.1374 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(33).getChildBlocks().get(7).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  column_list_ IS NULL", true, 31323, 31392, 0);
 53.1375 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(33).getChildBlocks().get(7).getChildBlocks(), 1, PlsqlBlockType.COMMENT, "-- Find all attributes in Search Domain Title", true, 31399, 31444, 0);
 53.1376 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(33).getChildBlocks().get(7).getChildBlocks(), 2, PlsqlBlockType.LOOP, "", true, 31508, 32157, 4);
 53.1377 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(33).getChildBlocks().get(7).getChildBlocks().get(2).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- Find column name", true, 31522, 31541, 0);
 53.1378 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(33).getChildBlocks().get(7).getChildBlocks().get(2).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  column_name_ IS NOT NULL", true, 31625, 31745, 0);
 53.1379 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(33).getChildBlocks().get(7).getChildBlocks().get(2).getChildBlocks(), 2, PlsqlBlockType.COMMENT, "-- Find new attribute", true, 31755, 31776, 0);
 53.1380 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(33).getChildBlocks().get(7).getChildBlocks().get(2).getChildBlocks(), 3, PlsqlBlockType.IF, "IF  pos_ = 0", true, 31879, 32141, 1);
 53.1381 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(33).getChildBlocks().get(7).getChildBlocks().get(2).getChildBlocks().get(3).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- Find column name", true, 31954, 31973, 0);
 53.1382 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(33).getChildBlocks(), 8, PlsqlBlockType.COMMENT, "COMMENT...", true, 32208, 32210, 0);
 53.1383 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(33).getChildBlocks(), 9, PlsqlBlockType.FUNCTION_IMPL, "Create_If_Stmt___", true, 32214, 34491, 4);
 53.1384 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(33).getChildBlocks().get(9).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  column_list_ IS NULL", true, 32715, 32780, 0);
 53.1385 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(33).getChildBlocks().get(9).getChildBlocks(), 1, PlsqlBlockType.COMMENT, "-- Find all attributes in Search Domain Title", true, 32787, 32832, 0);
 53.1386 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(33).getChildBlocks().get(9).getChildBlocks(), 2, PlsqlBlockType.IF, "IF  (tmp_column_list_ IS NOT NULL)", true, 32918, 33004, 0);
 53.1387 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(33).getChildBlocks().get(9).getChildBlocks(), 3, PlsqlBlockType.LOOP, "", true, 33011, 34444, 5);
 53.1388 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(33).getChildBlocks().get(9).getChildBlocks().get(3).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (i_ > 1)", true, 33025, 33113, 0);
 53.1389 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(33).getChildBlocks().get(9).getChildBlocks().get(3).getChildBlocks(), 1, PlsqlBlockType.COMMENT, "-- Find column name", true, 33123, 33142, 0);
 53.1390 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(33).getChildBlocks().get(9).getChildBlocks().get(3).getChildBlocks(), 2, PlsqlBlockType.IF, "IF  column_name_ IS NOT NULL", true, 33226, 33623, 0);
 53.1391 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(33).getChildBlocks().get(9).getChildBlocks().get(3).getChildBlocks(), 3, PlsqlBlockType.COMMENT, "-- Find new attribute", true, 33633, 33654, 0);
 53.1392 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(33).getChildBlocks().get(9).getChildBlocks().get(3).getChildBlocks(), 4, PlsqlBlockType.IF, "IF  pos_ = 0", true, 33784, 34428, 2);
 53.1393 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(33).getChildBlocks().get(9).getChildBlocks().get(3).getChildBlocks().get(4).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (i_ > 1 AND found_)", true, 33813, 33918, 0);
 53.1394 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(33).getChildBlocks().get(9).getChildBlocks().get(3).getChildBlocks().get(4).getChildBlocks(), 1, PlsqlBlockType.COMMENT, "-- Find column name", true, 33977, 33996, 0);
 53.1395 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(33).getChildBlocks(), 10, PlsqlBlockType.COMMENT, "COMMENT...", true, 34495, 34497, 0);
 53.1396 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(33).getChildBlocks(), 11, PlsqlBlockType.FUNCTION_IMPL, "Replace_Parameter___", true, 34501, 35656, 5);
 53.1397 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(33).getChildBlocks().get(11).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "COMMENT...", true, 34766, 34768, 0);
 53.1398 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(33).getChildBlocks().get(11).getChildBlocks(), 1, PlsqlBlockType.CURSOR, "get_param", true, 34775, 34933, 0);
 53.1399 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(33).getChildBlocks().get(11).getChildBlocks(), 2, PlsqlBlockType.IF, "IF  (pos_ = 0)", true, 34994, 35052, 0);
 53.1400 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(33).getChildBlocks().get(11).getChildBlocks(), 3, PlsqlBlockType.COMMENT, "-- Replace all parameters used as parameters to PL/SQL method", true, 35059, 35120, 0);
 53.1401 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(33).getChildBlocks().get(11).getChildBlocks(), 4, PlsqlBlockType.FOR_LOOP, "par IN get_param", true, 35127, 35604, 3);
 53.1402 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(33).getChildBlocks().get(11).getChildBlocks().get(4).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  par.current_value = 'TRUE'", true, 35162, 35312, 0);
 53.1403 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(33).getChildBlocks().get(11).getChildBlocks().get(4).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  par.new_value = 'TRUE'", true, 35322, 35468, 0);
 53.1404 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(33).getChildBlocks().get(11).getChildBlocks().get(4).getChildBlocks(), 2, PlsqlBlockType.IF, "IF  pos_ = 0", true, 35526, 35588, 0);
 53.1405 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(33).getChildBlocks(), 12, PlsqlBlockType.CASE, "CASE  trigger_type_\n      WHEN 'NEW'", true, 35763, 35881, 0);
 53.1406 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(33).getChildBlocks(), 13, PlsqlBlockType.CASE, "WHEN 'MODIFY'", true, 35888, 36353, 3);
 53.1407 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(33).getChildBlocks().get(13).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- Build If statement for modify", true, 35994, 36026, 0);
 53.1408 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(33).getChildBlocks().get(13).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  (if_stmt_start_ IS NOT NULL)", true, 36108, 36219, 0);
 53.1409 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(33).getChildBlocks().get(13).getChildBlocks(), 2, PlsqlBlockType.IF, "ELSE", true, 36229, 36319, 0);
 53.1410 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(33).getChildBlocks(), 14, PlsqlBlockType.CASE, "WHEN 'REMOVE'", true, 36360, 36469, 0);
 53.1411 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(33).getChildBlocks(), 15, PlsqlBlockType.COMMENT, "-- Build PL/SQL statement", true, 36473, 36498, 0);
 53.1412 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(33).getChildBlocks(), 16, PlsqlBlockType.FOR_LOOP, "par_ IN get_param", true, 37005, 38309, 7);
 53.1413 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(33).getChildBlocks().get(16).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (par_.id_type = 'DATETIME')", true, 37038, 37174, 0);
 53.1414 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(33).getChildBlocks().get(16).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSIF (par_.id_type = 'DATE')", true, 37181, 37312, 0);
 53.1415 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(33).getChildBlocks().get(16).getChildBlocks(), 2, PlsqlBlockType.IF, "ELSIF (par_.id_type = 'TIME')", true, 37319, 37450, 0);
 53.1416 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(33).getChildBlocks().get(16).getChildBlocks(), 3, PlsqlBlockType.IF, "ELSE", true, 37457, 37543, 0);
 53.1417 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(33).getChildBlocks().get(16).getChildBlocks(), 4, PlsqlBlockType.COMMENT, "COMMENT...", true, 37550, 37552, 0);
 53.1418 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(33).getChildBlocks().get(16).getChildBlocks(), 5, PlsqlBlockType.IF, "IF  par_.plsql_method IS NOT NULL", true, 37559, 37803, 0);
 53.1419 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(33).getChildBlocks().get(16).getChildBlocks(), 6, PlsqlBlockType.IF, "ELSE", true, 37810, 38296, 2);
 53.1420 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(33).getChildBlocks().get(16).getChildBlocks().get(6).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  par_.current_value = 'TRUE'", true, 37824, 38050, 0);
 53.1421 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(33).getChildBlocks().get(16).getChildBlocks().get(6).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  par_.new_value = 'TRUE'", true, 38060, 38282, 0);
 53.1422 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(33).getChildBlocks(), 17, PlsqlBlockType.COMMENT, "COMMENT...", true, 38703, 38705, 0);
 53.1423 -            assertBlock(lstBlockFac.get(6).getChildBlocks(), 34, PlsqlBlockType.FUNCTION_IMPL, "Get_Trigger_Name___", true, 38976, 39426, 3);
 53.1424 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(34).getChildBlocks(), 0, PlsqlBlockType.CASE, "CASE  trigger_type_\n      WHEN 'NEW'", true, 39097, 39204, 0);
 53.1425 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(34).getChildBlocks(), 1, PlsqlBlockType.CASE, "WHEN 'MODIFY'", true, 39211, 39296, 0);
 53.1426 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(34).getChildBlocks(), 2, PlsqlBlockType.CASE, "WHEN 'REMOVE'", true, 39303, 39401, 0);
 53.1427 -            assertBlock(lstBlockFac.get(6).getChildBlocks(), 35, PlsqlBlockType.PROCEDURE_IMPL, "Remove_Custom_Triggers___", true, 39428, 39958, 4);
 53.1428 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(35).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- Create triggers per type (New, Modify, Remove)", true, 39593, 39642, 0);
 53.1429 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(35).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  (rec_.new_row = 'TRUE')", true, 39646, 39733, 0);
 53.1430 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(35).getChildBlocks(), 2, PlsqlBlockType.IF, "IF  (rec_.modify_row = 'TRUE')", true, 39737, 39830, 0);
 53.1431 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(35).getChildBlocks(), 3, PlsqlBlockType.IF, "IF  (rec_.remove_row = 'TRUE')", true, 39834, 39927, 0);
 53.1432 -            assertBlock(lstBlockFac.get(6).getChildBlocks(), 36, PlsqlBlockType.PROCEDURE_IMPL, "Remove_Custom_Trigger___", true, 39960, 40323, 1);
 53.1433 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(36).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "COMMENT...", true, 40112, 40114, 0);
 53.1434 -            assertBlock(lstBlockFac.get(6).getChildBlocks(), 37, PlsqlBlockType.FUNCTION_IMPL, "Create_Trigger_Name___", true, 40325, 40707, 0);
 53.1435 -            assertBlock(lstBlockFac.get(6).getChildBlocks(), 38, PlsqlBlockType.COMMENT, "-- LU SPECIFIC PRIVATE METHODS ", true, 40708, 40941, 0);
 53.1436 -            assertBlock(lstBlockFac.get(6).getChildBlocks(), 39, PlsqlBlockType.PROCEDURE_IMPL, "Export__", true, 40943, 45806, 7);
 53.1437 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(39).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "get_param", true, 41203, 41391, 0);
 53.1438 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(39).getChildBlocks(), 1, PlsqlBlockType.COMMENT, "-- Fetch the event details", true, 41459, 41485, 0);
 53.1439 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(39).getChildBlocks(), 2, PlsqlBlockType.COMMENT, "-- Only allowed to export Custom Events", true, 41553, 41592, 0);
 53.1440 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(39).getChildBlocks(), 3, PlsqlBlockType.IF, "IF  (nvl(rec.event_type, 'APPLICATION') != 'CUSTOM')", true, 41596, 41763, 0);
 53.1441 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(39).getChildBlocks(), 4, PlsqlBlockType.COMMENT, "-- Create Export file", true, 41767, 41800, 0);
 53.1442 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(39).getChildBlocks(), 5, PlsqlBlockType.COMMENT, "-- Create Main Message", true, 43274, 43308, 0);
 53.1443 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(39).getChildBlocks(), 6, PlsqlBlockType.FOR_LOOP, "rec2 IN get_param", true, 44698, 45652, 0);
 53.1444 -            assertBlock(lstBlockFac.get(6).getChildBlocks(), 40, PlsqlBlockType.COMMENT, "-- LU SPECIFIC PROTECTED METHODS ", true, 45808, 46277, 0);
 53.1445 -            assertBlock(lstBlockFac.get(6).getChildBlocks(), 41, PlsqlBlockType.FUNCTION_IMPL, "Get_Event_Description", true, 46279, 46699, 1);
 53.1446 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(41).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "get_attr", true, 46438, 46582, 0);
 53.1447 -            assertBlock(lstBlockFac.get(6).getChildBlocks(), 42, PlsqlBlockType.FUNCTION_IMPL, "Get_Event_Enable", true, 46702, 47171, 3);
 53.1448 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(42).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "get_attr", true, 46851, 46990, 0);
 53.1449 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(42).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  temp_ IS NULL", true, 47067, 47110, 0);
 53.1450 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(42).getChildBlocks(), 2, PlsqlBlockType.IF, "ELSE", true, 47114, 47149, 0);
 53.1451 -            assertBlock(lstBlockFac.get(6).getChildBlocks(), 43, PlsqlBlockType.PROCEDURE_IMPL, "Set_Event_Enable", true, 47174, 48557, 4);
 53.1452 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(43).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (event_id_ <> upper(event_id_))", true, 47534, 47695, 0);
 53.1453 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(43).getChildBlocks(), 1, PlsqlBlockType.STATEMENT, "SELECT COUNT(*)", true, 47699, 47870, 0);
 53.1454 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(43).getChildBlocks(), 2, PlsqlBlockType.IF, "IF  (temp_ > 0)", true, 47954, 48244, 0);
 53.1455 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(43).getChildBlocks(), 3, PlsqlBlockType.IF, "ELSE", true, 48248, 48535, 0);
 53.1456 -            assertBlock(lstBlockFac.get(6).getChildBlocks(), 44, PlsqlBlockType.PROCEDURE_IMPL, "Refresh", true, 48560, 50005, 4);
 53.1457 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(44).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (event_id_ <> upper(event_id_))", true, 49095, 49256, 0);
 53.1458 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(44).getChildBlocks(), 1, PlsqlBlockType.STATEMENT, "SELECT COUNT(*)", true, 49260, 49383, 0);
 53.1459 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(44).getChildBlocks(), 2, PlsqlBlockType.IF, "IF  (temp_ = 0)", true, 49388, 49818, 1);
 53.1460 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(44).getChildBlocks().get(2).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "INSERT INTO fnd_event_tab", true, 49414, 49817, 0);
 53.1461 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(44).getChildBlocks(), 3, PlsqlBlockType.IF, "ELSE", true, 49822, 49992, 1);
 53.1462 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(44).getChildBlocks().get(3).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "UPDATE fnd_event_tab", true, 49833, 49980, 0);
 53.1463 -            assertBlock(lstBlockFac.get(6).getChildBlocks(), 45, PlsqlBlockType.PROCEDURE_IMPL, "Register_Custom_Event", true, 50007, 51787, 1);
 53.1464 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(45).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (Check_Exist___(event_lu_name_, event_id_))", true, 51447, 51709, 2);
 53.1465 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(45).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "DELETE FROM fnd_event_tab WHERE event_lu_name = event_lu_name_ AND event_id = event_id_", true, 51505, 51592, 0);
 53.1466 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(45).getChildBlocks().get(0).getChildBlocks(), 1, PlsqlBlockType.STATEMENT, "DELETE FROM fnd_event_parameter_tab WHERE event_lu_name = event_lu_name_ AND event_id = event_id_", true, 51600, 51697, 0);
 53.1467 -            assertBlock(lstBlockFac.get(6).getChildBlocks(), 46, PlsqlBlockType.PROCEDURE_IMPL, "Unfresh", true, 51789, 52246, 2);
 53.1468 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(46).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "SELECT COUNT(*)", true, 51958, 52083, 0);
 53.1469 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(46).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  (temp_ > 0)", true, 52088, 52233, 1);
 53.1470 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(46).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "DELETE FROM fnd_event_tab", true, 52114, 52221, 0);
 53.1471 -            assertBlock(lstBlockFac.get(6).getChildBlocks(), 47, PlsqlBlockType.FUNCTION_IMPL, "Get", true, 52249, 52624, 1);
 53.1472 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(47).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "get_attr", true, 52367, 52525, 0);
 53.1473 -            assertBlock(lstBlockFac.get(6).getChildBlocks(), 48, PlsqlBlockType.COMMENT, "-- FOUNDATION1 METHODS ", true, 52628, 53092, 0);
 53.1474 -            assertBlock(lstBlockFac.get(6).getChildBlocks(), 49, PlsqlBlockType.PROCEDURE_IMPL, "Init", true, 53094, 53136, 0);
 53.1475 -            assertBlock(lstBlockFac, 7, PlsqlBlockType.COMMENT, "COMMENT...", false, 53270, 53347, 0);
 53.1476 +            assertEquals(lstBlockFac.size(), 8);
 53.1477 +            processBlocks(plsqlFileName, lstBlockFac);
 53.1478          } finally {
 53.1479              if (fileObject != null) {
 53.1480                  fileObject.delete();
 53.1481 @@ -1489,463 +330,18 @@
 53.1482      @Test
 53.1483      public void testAdvanced9() throws IOException, BadLocationException {
 53.1484          System.out.println("Advanced test case 9");
 53.1485 -        FileObject fileObject = fs.getRoot().createData("IdentityPayInfo.apy");
 53.1486 +        final String plsqlFileName = "IdentityPayInfo.apy";
 53.1487 +        FileObject fileObject = fs.getRoot().createData(plsqlFileName);
 53.1488          assertNotNull(fileObject);
 53.1489          try {
 53.1490 -            PlsqlBlockFactory blockFac = loadAsTmpFile(fileObject, "IdentityPayInfo.apy");
 53.1491 +            PlsqlBlockFactory blockFac = loadAsTmpFile(fileObject, plsqlFileName);
 53.1492              assertNotNull(blockFac);
 53.1493  
 53.1494              List<PlsqlBlock> lstBlockFac = blockFac.getBlockHierarchy();
 53.1495  //         printHierarchy(lstBlockFac, "");
 53.1496  //         generateAssert(lstBlockFac, "lstBlockFac", "false");
 53.1497 -            assertTrue(lstBlockFac.size() == 52);
 53.1498 -            assertBlock(lstBlockFac, 0, PlsqlBlockType.COMMENT, "-- Logical unit: IdentityPayInfo", false, 0, 9418, 0);
 53.1499 -            assertBlock(lstBlockFac, 1, PlsqlBlockType.COMMENT, "-- VIEWS FOR SELECTS ", false, 10475, 10708, 0);
 53.1500 -            assertBlock(lstBlockFac, 2, PlsqlBlockType.VIEW, "IDENTITY_PAY_INFO", false, 10738, 12658, 0);
 53.1501 -            assertBlock(lstBlockFac, 3, PlsqlBlockType.TABLE_COMMENT, "IDENTITY_PAY_INFO", false, 12661, 12739, 0);
 53.1502 -            assertBlock(lstBlockFac, 4, PlsqlBlockType.COLUMN_COMMENT, "IDENTITY_PAY_INFO", false, 12742, 16182, 0);
 53.1503 -            assertBlock(lstBlockFac, 5, PlsqlBlockType.COMMENT, "-- Bug 77136, begin, Table join with supplier_info_tab, in order to get name and association no directly.", false, 16185, 16290, 0);
 53.1504 -            assertBlock(lstBlockFac, 6, PlsqlBlockType.VIEW, "IDENTITY_PAY_INFO_SU_QRY", false, 16325, 20258, 0);
 53.1505 -            assertBlock(lstBlockFac, 7, PlsqlBlockType.TABLE_COMMENT, "IDENTITY_PAY_INFO_SU_QRY", false, 20261, 20346, 0);
 53.1506 -            assertBlock(lstBlockFac, 8, PlsqlBlockType.COLUMN_COMMENT, "IDENTITY_PAY_INFO_SU_QRY", false, 20349, 21761, 0);
 53.1507 -            assertBlock(lstBlockFac, 9, PlsqlBlockType.COMMENT, "-- Bug 77136, end", false, 21763, 21996, 0);
 53.1508 -            assertBlock(lstBlockFac, 10, PlsqlBlockType.VIEW, "IDENTITY_PAY_INFO_CU_QRY", false, 22031, 27474, 0);
 53.1509 -            assertBlock(lstBlockFac, 11, PlsqlBlockType.TABLE_COMMENT, "IDENTITY_PAY_INFO_CU_QRY", false, 27477, 27562, 0);
 53.1510 -            assertBlock(lstBlockFac, 12, PlsqlBlockType.COLUMN_COMMENT, "IDENTITY_PAY_INFO_CU_QRY", false, 27565, 30549, 0);
 53.1511 -            assertBlock(lstBlockFac, 13, PlsqlBlockType.COMMENT, "-- Bug 69035, End;", false, 30551, 30587, 0);
 53.1512 -            assertBlock(lstBlockFac, 14, PlsqlBlockType.COMMENT, "-- Bug 68653, Begin, Added new columns address and city", false, 30622, 30677, 0);
 53.1513 -            assertBlock(lstBlockFac, 15, PlsqlBlockType.VIEW, "IDENTITY_PAY_INFO_SUPP", false, 30678, 32224, 0);
 53.1514 -            assertBlock(lstBlockFac, 16, PlsqlBlockType.TABLE_COMMENT, "IDENTITY_PAY_INFO_SUPP", false, 32227, 32310, 0);
 53.1515 -            assertBlock(lstBlockFac, 17, PlsqlBlockType.COLUMN_COMMENT, "IDENTITY_PAY_INFO_SUPP", false, 32313, 33373, 0);
 53.1516 -            assertBlock(lstBlockFac, 18, PlsqlBlockType.COMMENT, "-- Bug 68653, End", false, 33375, 33392, 0);
 53.1517 -            assertBlock(lstBlockFac, 19, PlsqlBlockType.COMMENT, "-- Bug 68653, Begin, Added new columns address and city", false, 33428, 33483, 0);
 53.1518 -            assertBlock(lstBlockFac, 20, PlsqlBlockType.VIEW, "IDENTITY_PAY_INFO_CUST", false, 33484, 34962, 0);
 53.1519 -            assertBlock(lstBlockFac, 21, PlsqlBlockType.TABLE_COMMENT, "IDENTITY_PAY_INFO_CUST", false, 34965, 35048, 0);
 53.1520 -            assertBlock(lstBlockFac, 22, PlsqlBlockType.COLUMN_COMMENT, "IDENTITY_PAY_INFO_CUST", false, 35051, 36106, 0);
 53.1521 -            assertBlock(lstBlockFac, 23, PlsqlBlockType.COMMENT, "-- Bug 68653, End", false, 36108, 36125, 0);
 53.1522 -            assertBlock(lstBlockFac, 24, PlsqlBlockType.COMMENT, "-- Bug 68653, Begin, Added new columns address and city", false, 36159, 36214, 0);
 53.1523 -            assertBlock(lstBlockFac, 25, PlsqlBlockType.VIEW, "IDENTITY_PAY_INFO_LOV", false, 36215, 37137, 0);
 53.1524 -            assertBlock(lstBlockFac, 26, PlsqlBlockType.TABLE_COMMENT, "IDENTITY_PAY_INFO_LOV", false, 37140, 37231, 0);
 53.1525 -            assertBlock(lstBlockFac, 27, PlsqlBlockType.COLUMN_COMMENT, "IDENTITY_PAY_INFO_LOV", false, 37234, 37844, 0);
 53.1526 -            assertBlock(lstBlockFac, 28, PlsqlBlockType.COMMENT, "-- Bug 68653, End", false, 37846, 37863, 0);
 53.1527 -            assertBlock(lstBlockFac, 29, PlsqlBlockType.VIEW, "IDENTITY_PAY_INFO_ALL", false, 37898, 38508, 0);
 53.1528 -            assertBlock(lstBlockFac, 30, PlsqlBlockType.TABLE_COMMENT, "IDENTITY_PAY_INFO_ALL", false, 38511, 38593, 0);
 53.1529 -            assertBlock(lstBlockFac, 31, PlsqlBlockType.COLUMN_COMMENT, "IDENTITY_PAY_INFO_ALL", false, 38596, 39033, 0);
 53.1530 -            assertBlock(lstBlockFac, 32, PlsqlBlockType.VIEW, "IDENTITY_PAY_INFO_PCT", false, 39067, 40386, 0);
 53.1531 -            assertBlock(lstBlockFac, 33, PlsqlBlockType.TABLE_COMMENT, "IDENTITY_PAY_INFO_PCT", false, 40389, 40470, 0);
 53.1532 -            assertBlock(lstBlockFac, 34, PlsqlBlockType.COLUMN_COMMENT, "IDENTITY_PAY_INFO_PCT", false, 40473, 43144, 0);
 53.1533 -            assertBlock(lstBlockFac, 35, PlsqlBlockType.COMMENT, "-- Bug 69035, Begin, Added reminder_template_id,interest_template_id and their descriptions   ", false, 43185, 43279, 0);
 53.1534 -            assertBlock(lstBlockFac, 36, PlsqlBlockType.VIEW, "PAYER_INFO_QRY", false, 43280, 45980, 0);
 53.1535 -            assertBlock(lstBlockFac, 37, PlsqlBlockType.TABLE_COMMENT, "PAYER_INFO_QRY", false, 45983, 46071, 0);
 53.1536 -            assertBlock(lstBlockFac, 38, PlsqlBlockType.COLUMN_COMMENT, "PAYER_INFO_QRY", false, 46074, 47822, 0);
 53.1537 -            assertBlock(lstBlockFac, 39, PlsqlBlockType.COMMENT, "-- Bug 69035, End", false, 47824, 47841, 0);
 53.1538 -            assertBlock(lstBlockFac, 40, PlsqlBlockType.VIEW, "MULTI_CUS_DETAILS_QRY", false, 47881, 48808, 0);
 53.1539 -            assertBlock(lstBlockFac, 41, PlsqlBlockType.TABLE_COMMENT, "MULTI_CUS_DETAILS_QRY", false, 48811, 48901, 0);
 53.1540 -            assertBlock(lstBlockFac, 42, PlsqlBlockType.COLUMN_COMMENT, "MULTI_CUS_DETAILS_QRY", false, 48904, 49453, 0);
 53.1541 -            assertBlock(lstBlockFac, 43, PlsqlBlockType.VIEW, "MULTI_SUP_DETAILS_QRY", false, 49498, 50374, 0);
 53.1542 -            assertBlock(lstBlockFac, 44, PlsqlBlockType.TABLE_COMMENT, "MULTI_SUP_DETAILS_QRY", false, 50377, 50467, 0);
 53.1543 -            assertBlock(lstBlockFac, 45, PlsqlBlockType.COLUMN_COMMENT, "MULTI_SUP_DETAILS_QRY", false, 50470, 50913, 0);
 53.1544 -            assertBlock(lstBlockFac, 46, PlsqlBlockType.VIEW, "MULTI_SUP_ADDRESS_QRY", false, 50954, 51642, 0);
 53.1545 -            assertBlock(lstBlockFac, 47, PlsqlBlockType.TABLE_COMMENT, "MULTI_SUP_ADDRESS_QRY", false, 51645, 51735, 0);
 53.1546 -            assertBlock(lstBlockFac, 48, PlsqlBlockType.COLUMN_COMMENT, "MULTI_SUP_ADDRESS_QRY", false, 51738, 52176, 0);
 53.1547 -            assertBlock(lstBlockFac, 49, PlsqlBlockType.COMMENT, "-- PACKAGES FOR METHODS ", false, 52179, 52412, 0);
 53.1548 -            assertBlock(lstBlockFac, 50, PlsqlBlockType.PACKAGE_BODY, "IDENTITY_PAY_INFO_API", false, 52451, 146515, 93);
 53.1549 -            assertBlock(lstBlockFac.get(50).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- LU SPECIFIC IMPLEMENTATION METHOD DECLARATIONS ", true, 52491, 52724, 0);
 53.1550 -            assertBlock(lstBlockFac.get(50).getChildBlocks(), 1, PlsqlBlockType.PROCEDURE_DEF, "Save_Identity_Notes___", true, 52725, 52823, 0);
 53.1551 -            assertBlock(lstBlockFac.get(50).getChildBlocks(), 2, PlsqlBlockType.FUNCTION_DEF, "Get_Next_Format_No___", true, 52825, 52904, 0);
 53.1552 -            assertBlock(lstBlockFac.get(50).getChildBlocks(), 3, PlsqlBlockType.PROCEDURE_DEF, "Check_Cascade___", true, 52906, 53029, 0);
 53.1553 -            assertBlock(lstBlockFac.get(50).getChildBlocks(), 4, PlsqlBlockType.PROCEDURE_DEF, "Import___", true, 53031, 53125, 0);
 53.1554 -            assertBlock(lstBlockFac.get(50).getChildBlocks(), 5, PlsqlBlockType.PROCEDURE_DEF, "Copy___", true, 53127, 53221, 0);
 53.1555 -            assertBlock(lstBlockFac.get(50).getChildBlocks(), 6, PlsqlBlockType.PROCEDURE_DEF, "Export___", true, 53223, 53319, 0);
 53.1556 -            assertBlock(lstBlockFac.get(50).getChildBlocks(), 7, PlsqlBlockType.PROCEDURE_DEF, "User_Allowed___", true, 53321, 53375, 0);
 53.1557 -            assertBlock(lstBlockFac.get(50).getChildBlocks(), 8, PlsqlBlockType.COMMENT, "-- IMPLEMENTATION BASE METHODS ", true, 53381, 54256, 0);
 53.1558 -            assertBlock(lstBlockFac.get(50).getChildBlocks(), 9, PlsqlBlockType.FUNCTION_IMPL, "Lock_By_Id___", true, 54258, 55408, 5);
 53.1559 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(9).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "lock_control", true, 54550, 54700, 0);
 53.1560 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(9).getChildBlocks(), 1, PlsqlBlockType.CURSOR, "exist_control", true, 54704, 54792, 0);
 53.1561 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(9).getChildBlocks(), 2, PlsqlBlockType.IF, "IF  (lock_control%FOUND)", true, 54857, 54941, 0);
 53.1562 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(9).getChildBlocks(), 3, PlsqlBlockType.IF, "IF  (exist_control%FOUND)", true, 55027, 55108, 0);
 53.1563 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(9).getChildBlocks(), 4, PlsqlBlockType.IF, "ELSE", true, 55112, 55179, 0);
 53.1564 -            assertBlock(lstBlockFac.get(50).getChildBlocks(), 10, PlsqlBlockType.FUNCTION_IMPL, "Lock_By_Keys___", true, 55410, 56100, 3);
 53.1565 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(10).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "lock_control", true, 55616, 55794, 0);
 53.1566 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(10).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  (lock_control%FOUND)", true, 55859, 55932, 0);
 53.1567 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(10).getChildBlocks(), 2, PlsqlBlockType.IF, "ELSE", true, 55936, 56002, 0);
 53.1568 -            assertBlock(lstBlockFac.get(50).getChildBlocks(), 11, PlsqlBlockType.FUNCTION_IMPL, "Get_Object_By_Id___", true, 56102, 56509, 2);
 53.1569 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(11).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "getrec", true, 56212, 56293, 0);
 53.1570 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(11).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  (getrec%NOTFOUND)", true, 56349, 56447, 0);
 53.1571 -            assertBlock(lstBlockFac.get(50).getChildBlocks(), 12, PlsqlBlockType.FUNCTION_IMPL, "Get_Object_By_Keys___", true, 56511, 56964, 1);
 53.1572 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(12).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "getrec", true, 56693, 56848, 0);
 53.1573 -            assertBlock(lstBlockFac.get(50).getChildBlocks(), 13, PlsqlBlockType.FUNCTION_IMPL, "Check_Exist___", true, 56966, 57506, 2);
 53.1574 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(13).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "exist_control", true, 57125, 57288, 0);
 53.1575 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(13).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  (exist_control%FOUND)", true, 57357, 57444, 0);
 53.1576 -            assertBlock(lstBlockFac.get(50).getChildBlocks(), 14, PlsqlBlockType.PROCEDURE_IMPL, "Get_Id_Version_By_Keys___", true, 57508, 58032, 1);
 53.1577 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(14).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "get_version", true, 57727, 57905, 0);
 53.1578 -            assertBlock(lstBlockFac.get(50).getChildBlocks(), 15, PlsqlBlockType.COMMENT, "-- IMPLEMENTATION BASE METHODS FOR INSERT ", true, 58034, 58779, 0);
 53.1579 -            assertBlock(lstBlockFac.get(50).getChildBlocks(), 16, PlsqlBlockType.PROCEDURE_IMPL, "Prepare_Insert___", true, 58781, 60476, 3);
 53.1580 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(16).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- Default value 'No Advice'", true, 59354, 59391, 0);
 53.1581 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(16).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  (party_type_ = Party_Type_API.Decode('CUSTOMER'))", true, 59479, 59904, 0);
 53.1582 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(16).getChildBlocks(), 2, PlsqlBlockType.IF, "ELSIF (party_type_ = Party_Type_API.Decode('SUPPLIER') )", true, 59908, 60142, 0);
 53.1583 -            assertBlock(lstBlockFac.get(50).getChildBlocks(), 17, PlsqlBlockType.PROCEDURE_IMPL, "Unpack_Check_Insert___", true, 60479, 68330, 6);
 53.1584 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(17).getChildBlocks(), 0, PlsqlBlockType.WHILE_LOOP, "(Client_SYS.Get_Next_From_Attr(attr_, ptr_, name_, value_))", true, 60674, 66347, 30);
 53.1585 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(17).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (name_ = 'COMPANY')", true, 60751, 60896, 0);
 53.1586 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(17).getChildBlocks().get(0).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSIF (name_ = 'IDENTITY')", true, 60903, 60971, 0);
 53.1587 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(17).getChildBlocks().get(0).getChildBlocks(), 2, PlsqlBlockType.IF, "ELSIF (name_ = 'PARTY_TYPE')", true, 60978, 61318, 1);
 53.1588 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(17).getChildBlocks().get(0).getChildBlocks().get(2).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (newrec_.party_type <> 'COMPANY')", true, 61172, 61318, 0);
 53.1589 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(17).getChildBlocks().get(0).getChildBlocks(), 3, PlsqlBlockType.IF, "ELSIF (name_ = 'PARTY_TYPE_DB')", true, 61325, 61706, 1);
 53.1590 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(17).getChildBlocks().get(0).getChildBlocks().get(3).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (newrec_.party_type <> Party_Type_API.Decode('COMPANY'))", true, 61534, 61706, 0);
 53.1591 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(17).getChildBlocks().get(0).getChildBlocks(), 4, PlsqlBlockType.IF, "ELSIF (name_ = 'PRIORITY')", true, 61713, 61814, 0);
 53.1592 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(17).getChildBlocks().get(0).getChildBlocks(), 5, PlsqlBlockType.IF, "ELSIF (name_ = 'BLOCKED_FOR_PAYMENT')", true, 61821, 62054, 1);
 53.1593 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(17).getChildBlocks().get(0).getChildBlocks().get(5).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (value_ IS NOT NULL AND newrec_.blocked_for_payment NOT IN ('TRUE', 'FALSE'))", true, 61921, 62054, 0);
 53.1594 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(17).getChildBlocks().get(0).getChildBlocks(), 6, PlsqlBlockType.IF, "ELSIF (name_ = 'OTHER_PAYEE_IDENTITY')", true, 62061, 62339, 1);
 53.1595 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(17).getChildBlocks().get(0).getChildBlocks().get(6).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (value_ IS NOT NULL)", true, 62163, 62339, 0);
 53.1596 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(17).getChildBlocks().get(0).getChildBlocks(), 7, PlsqlBlockType.IF, "ELSIF (name_ = 'INTEREST_TEMPLATE')", true, 62346, 62572, 1);
 53.1597 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(17).getChildBlocks().get(0).getChildBlocks().get(7).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (value_ IS NOT NULL)", true, 62442, 62572, 0);
 53.1598 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(17).getChildBlocks().get(0).getChildBlocks(), 8, PlsqlBlockType.IF, "ELSIF (name_ = 'REMINDER_TEMPLATE')", true, 62579, 62805, 1);
 53.1599 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(17).getChildBlocks().get(0).getChildBlocks().get(8).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (value_ IS NOT NULL)", true, 62675, 62805, 0);
 53.1600 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(17).getChildBlocks().get(0).getChildBlocks(), 9, PlsqlBlockType.IF, "ELSIF (name_ = 'PAYMENT_DELAY')", true, 62812, 63133, 1);
 53.1601 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(17).getChildBlocks().get(0).getChildBlocks().get(9).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (TRUNC(newrec_.payment_delay) <> newrec_.payment_delay)", true, 62933, 63133, 0);
 53.1602 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(17).getChildBlocks().get(0).getChildBlocks(), 10, PlsqlBlockType.IF, "ELSIF (name_ = 'AMOUNT_TOLERANCE')", true, 63140, 63257, 0);
 53.1603 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(17).getChildBlocks().get(0).getChildBlocks(), 11, PlsqlBlockType.IF, "ELSIF (name_ = 'PERCENT_TOLERANCE')", true, 63264, 63383, 0);
 53.1604 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(17).getChildBlocks().get(0).getChildBlocks(), 12, PlsqlBlockType.IF, "ELSIF (name_ = 'DISC_DAYS_TOLERANCE')", true, 63390, 63513, 0);
 53.1605 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(17).getChildBlocks().get(0).getChildBlocks(), 13, PlsqlBlockType.IF, "ELSIF (name_ = 'NETTING_ALLOWED')", true, 63520, 63718, 1);
 53.1606 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(17).getChildBlocks().get(0).getChildBlocks().get(13).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (newrec_.netting_allowed NOT IN ('TRUE', 'FALSE'))", true, 63612, 63718, 0);
 53.1607 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(17).getChildBlocks().get(0).getChildBlocks(), 14, PlsqlBlockType.IF, "ELSIF (name_ = 'FORMAT_NO')", true, 63725, 63828, 0);
 53.1608 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(17).getChildBlocks().get(0).getChildBlocks(), 15, PlsqlBlockType.IF, "ELSIF (name_ = 'PAYMENT_ADVICE')", true, 63835, 64043, 1);
 53.1609 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(17).getChildBlocks().get(0).getChildBlocks().get(15).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (value_ IS NOT NULL)", true, 63952, 64043, 0);
 53.1610 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(17).getChildBlocks().get(0).getChildBlocks(), 16, PlsqlBlockType.IF, "ELSIF (name_ = 'PAYMENT_ADVICE_DB')", true, 64050, 64237, 1);
 53.1611 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(17).getChildBlocks().get(0).getChildBlocks().get(16).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (value_ IS NOT NULL)", true, 64143, 64237, 0);
 53.1612 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(17).getChildBlocks().get(0).getChildBlocks(), 17, PlsqlBlockType.IF, "ELSIF (name_ = 'DEDUCTION_GROUP')", true, 64244, 64462, 1);
 53.1613 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(17).getChildBlocks().get(0).getChildBlocks().get(17).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (value_ IS NOT NULL)", true, 64336, 64462, 0);
 53.1614 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(17).getChildBlocks().get(0).getChildBlocks(), 18, PlsqlBlockType.IF, "ELSIF (name_ = 'CORPORATION_ID')", true, 64469, 64549, 0);
 53.1615 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(17).getChildBlocks().get(0).getChildBlocks(), 19, PlsqlBlockType.IF, "ELSIF (name_ = 'MEMBER_ID')", true, 64556, 64626, 0);
 53.1616 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(17).getChildBlocks().get(0).getChildBlocks(), 20, PlsqlBlockType.IF, "ELSIF (name_ = 'SEND_REMINDER_TO_PAYER')", true, 64633, 64729, 0);
 53.1617 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(17).getChildBlocks().get(0).getChildBlocks(), 21, PlsqlBlockType.IF, "ELSIF (name_ = 'SEND_INTEREST_INV_TO_PAYER')", true, 64736, 64840, 0);
 53.1618 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(17).getChildBlocks().get(0).getChildBlocks(), 22, PlsqlBlockType.IF, "ELSIF (name_ = 'RULE_ID')", true, 64847, 65041, 1);
 53.1619 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(17).getChildBlocks().get(0).getChildBlocks().get(22).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (value_ IS NOT NULL)", true, 64923, 65041, 0);
 53.1620 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(17).getChildBlocks().get(0).getChildBlocks(), 23, PlsqlBlockType.IF, "ELSIF (name_ = 'PAYMENT_RECEIPT_TYPE')", true, 65048, 65280, 1);
 53.1621 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(17).getChildBlocks().get(0).getChildBlocks().get(23).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (value_ IS NOT NULL)", true, 65183, 65280, 0);
 53.1622 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(17).getChildBlocks().get(0).getChildBlocks(), 24, PlsqlBlockType.IF, "ELSIF (name_ = 'PAYMENT_RECEIPT_TYPE_DB')", true, 65287, 65492, 1);
 53.1623 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(17).getChildBlocks().get(0).getChildBlocks().get(24).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (value_ IS NOT NULL)", true, 65392, 65492, 0);
 53.1624 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(17).getChildBlocks().get(0).getChildBlocks(), 25, PlsqlBlockType.IF, "ELSIF (name_ = 'TEMPLATE_ID')", true, 65499, 65714, 1);
 53.1625 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(17).getChildBlocks().get(0).getChildBlocks().get(25).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (value_ IS NOT NULL)", true, 65583, 65714, 0);
 53.1626 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(17).getChildBlocks().get(0).getChildBlocks(), 26, PlsqlBlockType.IF, "ELSIF (name_ = 'CHECK_RECIPIENT')", true, 65721, 65933, 1);
 53.1627 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(17).getChildBlocks().get(0).getChildBlocks().get(26).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (value_ IS NOT NULL)", true, 65841, 65933, 0);
 53.1628 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(17).getChildBlocks().get(0).getChildBlocks(), 27, PlsqlBlockType.IF, "ELSIF (name_ = 'CHECK_RECIPIENT_DB')", true, 65940, 66130, 1);
 53.1629 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(17).getChildBlocks().get(0).getChildBlocks().get(27).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (value_ IS NOT NULL)", true, 66035, 66130, 0);
 53.1630 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(17).getChildBlocks().get(0).getChildBlocks(), 28, PlsqlBlockType.IF, "ELSIF (name_ = 'SEND_STATEMENT_OF_ACC_TO_PAYER')", true, 66137, 66249, 0);
 53.1631 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(17).getChildBlocks().get(0).getChildBlocks(), 29, PlsqlBlockType.IF, "ELSE", true, 66256, 66334, 0);
 53.1632 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(17).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  (newrec_.amount_tolerance < 0) OR (newrec_.percent_tolerance < 0) OR (newrec_.disc_days_tolerance < 0)", true, 66353, 66567, 0);
 53.1633 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(17).getChildBlocks(), 2, PlsqlBlockType.IF, "IF  (newrec_.interest_template IS NULL)", true, 66900, 67050, 0);
 53.1634 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(17).getChildBlocks(), 3, PlsqlBlockType.IF, "IF  (newrec_.party_type = 'SUPPLIER')", true, 67055, 67359, 0);
 53.1635 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(17).getChildBlocks(), 4, PlsqlBlockType.IF, "IF  (newrec_.party_type = 'CUSTOMER')", true, 67363, 67977, 1);
 53.1636 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(17).getChildBlocks().get(4).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  Company_Invoice_Info_API.Get_Use_Tax_Invoice(newrec_.company)='TRUE' AND newrec_.payment_receipt_type != 'AT_MATCHING'", true, 67687, 67966, 0);
 53.1637 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(17).getChildBlocks(), 5, PlsqlBlockType.IF, "IF  (newrec_.identity = newrec_.other_payee_identity)", true, 68052, 68212, 0);
 53.1638 -            assertBlock(lstBlockFac.get(50).getChildBlocks(), 18, PlsqlBlockType.PROCEDURE_IMPL, "Insert___", true, 68333, 70734, 2);
 53.1639 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(18).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "get_objid", true, 68496, 68677, 0);
 53.1640 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(18).getChildBlocks(), 1, PlsqlBlockType.STATEMENT, "INSERT", true, 68827, 70521, 0);
 53.1641 -            assertBlock(lstBlockFac.get(50).getChildBlocks(), 19, PlsqlBlockType.COMMENT, "-- IMPLEMENTATION BASE METHODS FOR UPDATE ", true, 70736, 71320, 0);
 53.1642 -            assertBlock(lstBlockFac.get(50).getChildBlocks(), 20, PlsqlBlockType.PROCEDURE_IMPL, "Unpack_Check_Update___", true, 71322, 78419, 6);
 53.1643 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(20).getChildBlocks(), 0, PlsqlBlockType.WHILE_LOOP, "(Client_SYS.Get_Next_From_Attr(attr_, ptr_, name_, value_))", true, 71545, 76719, 32);
 53.1644 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(20).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (name_ = 'COMPANY')", true, 71622, 71702, 0);
 53.1645 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(20).getChildBlocks().get(0).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSIF (name_ = 'IDENTITY')", true, 71709, 71794, 0);
 53.1646 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(20).getChildBlocks().get(0).getChildBlocks(), 2, PlsqlBlockType.IF, "ELSIF (name_ = 'PARTY_TYPE')", true, 71801, 71890, 0);
 53.1647 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(20).getChildBlocks().get(0).getChildBlocks(), 3, PlsqlBlockType.IF, "ELSIF (name_ = 'PARTY_TYPE_DB')", true, 71897, 71989, 0);
 53.1648 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(20).getChildBlocks().get(0).getChildBlocks(), 4, PlsqlBlockType.IF, "ELSIF (name_ = 'PRIORITY')", true, 71996, 72097, 0);
 53.1649 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(20).getChildBlocks().get(0).getChildBlocks(), 5, PlsqlBlockType.IF, "ELSIF (name_ = 'BLOCKED_FOR_PAYMENT')", true, 72104, 72337, 1);
 53.1650 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(20).getChildBlocks().get(0).getChildBlocks().get(5).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (value_ IS NOT NULL AND newrec_.blocked_for_payment NOT IN ('TRUE', 'FALSE'))", true, 72204, 72337, 0);
 53.1651 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(20).getChildBlocks().get(0).getChildBlocks(), 6, PlsqlBlockType.IF, "ELSIF (name_ = 'OTHER_PAYEE_IDENTITY')", true, 72344, 72622, 1);
 53.1652 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(20).getChildBlocks().get(0).getChildBlocks().get(6).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (value_ IS NOT NULL)", true, 72446, 72622, 0);
 53.1653 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(20).getChildBlocks().get(0).getChildBlocks(), 7, PlsqlBlockType.IF, "ELSIF (name_ = 'INTEREST_TEMPLATE')", true, 72629, 72855, 1);
 53.1654 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(20).getChildBlocks().get(0).getChildBlocks().get(7).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (value_ IS NOT NULL)", true, 72725, 72855, 0);
 53.1655 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(20).getChildBlocks().get(0).getChildBlocks(), 8, PlsqlBlockType.IF, "ELSIF (name_ = 'REMINDER_TEMPLATE')", true, 72862, 73088, 1);
 53.1656 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(20).getChildBlocks().get(0).getChildBlocks().get(8).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (value_ IS NOT NULL)", true, 72958, 73088, 0);
 53.1657 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(20).getChildBlocks().get(0).getChildBlocks(), 9, PlsqlBlockType.IF, "ELSIF (name_ = 'PAYMENT_DELAY')", true, 73095, 73416, 1);
 53.1658 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(20).getChildBlocks().get(0).getChildBlocks().get(9).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (TRUNC(newrec_.payment_delay) <> newrec_.payment_delay)", true, 73216, 73416, 0);
 53.1659 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(20).getChildBlocks().get(0).getChildBlocks(), 10, PlsqlBlockType.IF, "ELSIF (name_ = 'AMOUNT_TOLERANCE')", true, 73423, 73540, 0);
 53.1660 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(20).getChildBlocks().get(0).getChildBlocks(), 11, PlsqlBlockType.IF, "ELSIF (name_ = 'PERCENT_TOLERANCE')", true, 73547, 73666, 0);
 53.1661 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(20).getChildBlocks().get(0).getChildBlocks(), 12, PlsqlBlockType.IF, "ELSIF (name_ = 'DISC_DAYS_TOLERANCE')", true, 73673, 73796, 0);
 53.1662 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(20).getChildBlocks().get(0).getChildBlocks(), 13, PlsqlBlockType.IF, "ELSIF (name_ = 'NETTING_ALLOWED')", true, 73803, 74001, 1);
 53.1663 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(20).getChildBlocks().get(0).getChildBlocks().get(13).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (newrec_.netting_allowed NOT IN ('TRUE', 'FALSE'))", true, 73895, 74001, 0);
 53.1664 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(20).getChildBlocks().get(0).getChildBlocks(), 14, PlsqlBlockType.IF, "ELSIF (name_ = 'FORMAT_NO')", true, 74008, 74095, 0);
 53.1665 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(20).getChildBlocks().get(0).getChildBlocks(), 15, PlsqlBlockType.IF, "ELSIF (name_ = 'PAYMENT_ADVICE')", true, 74102, 74310, 1);
 53.1666 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(20).getChildBlocks().get(0).getChildBlocks().get(15).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (value_ IS NOT NULL)", true, 74219, 74310, 0);
 53.1667 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(20).getChildBlocks().get(0).getChildBlocks(), 16, PlsqlBlockType.IF, "ELSIF (name_ = 'PAYMENT_ADVICE_DB')", true, 74317, 74504, 1);
 53.1668 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(20).getChildBlocks().get(0).getChildBlocks().get(16).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (value_ IS NOT NULL)", true, 74410, 74504, 0);
 53.1669 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(20).getChildBlocks().get(0).getChildBlocks(), 17, PlsqlBlockType.IF, "ELSIF (name_ = 'DEDUCTION_GROUP')", true, 74511, 74729, 1);
 53.1670 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(20).getChildBlocks().get(0).getChildBlocks().get(17).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (value_ IS NOT NULL)", true, 74603, 74729, 0);
 53.1671 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(20).getChildBlocks().get(0).getChildBlocks(), 18, PlsqlBlockType.IF, "ELSIF (name_ = 'CORPORATION_ID')", true, 74736, 74816, 0);
 53.1672 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(20).getChildBlocks().get(0).getChildBlocks(), 19, PlsqlBlockType.IF, "ELSIF (name_ = 'MEMBER_ID')", true, 74823, 74893, 0);
 53.1673 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(20).getChildBlocks().get(0).getChildBlocks(), 20, PlsqlBlockType.IF, "ELSIF (name_ = 'SEND_REMINDER_TO_PAYER')", true, 74900, 74996, 0);
 53.1674 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(20).getChildBlocks().get(0).getChildBlocks(), 21, PlsqlBlockType.IF, "ELSIF (name_ = 'SEND_INTEREST_INV_TO_PAYER')", true, 75003, 75107, 0);
 53.1675 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(20).getChildBlocks().get(0).getChildBlocks(), 22, PlsqlBlockType.IF, "ELSIF (name_ = 'NOTE')", true, 75114, 75156, 0);
 53.1676 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(20).getChildBlocks().get(0).getChildBlocks(), 23, PlsqlBlockType.IF, "ELSIF (name_ = 'NOTE_UPDATE')", true, 75163, 75212, 0);
 53.1677 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(20).getChildBlocks().get(0).getChildBlocks(), 24, PlsqlBlockType.IF, "ELSIF (name_ = 'RULE_ID')", true, 75219, 75413, 1);
 53.1678 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(20).getChildBlocks().get(0).getChildBlocks().get(24).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (value_ IS NOT NULL)", true, 75295, 75413, 0);
 53.1679 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(20).getChildBlocks().get(0).getChildBlocks(), 25, PlsqlBlockType.IF, "ELSIF (name_ = 'PAYMENT_RECEIPT_TYPE')", true, 75420, 75652, 1);
 53.1680 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(20).getChildBlocks().get(0).getChildBlocks().get(25).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (value_ IS NOT NULL)", true, 75555, 75652, 0);
 53.1681 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(20).getChildBlocks().get(0).getChildBlocks(), 26, PlsqlBlockType.IF, "ELSIF (name_ = 'PAYMENT_RECEIPT_TYPE_DB')", true, 75659, 75864, 1);
 53.1682 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(20).getChildBlocks().get(0).getChildBlocks().get(26).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (value_ IS NOT NULL)", true, 75764, 75864, 0);
 53.1683 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(20).getChildBlocks().get(0).getChildBlocks(), 27, PlsqlBlockType.IF, "ELSIF (name_ = 'TEMPLATE_ID')", true, 75871, 76086, 1);
 53.1684 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(20).getChildBlocks().get(0).getChildBlocks().get(27).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (value_ IS NOT NULL)", true, 75955, 76086, 0);
 53.1685 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(20).getChildBlocks().get(0).getChildBlocks(), 28, PlsqlBlockType.IF, "ELSIF (name_ = 'CHECK_RECIPIENT')", true, 76093, 76305, 1);
 53.1686 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(20).getChildBlocks().get(0).getChildBlocks().get(28).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (value_ IS NOT NULL)", true, 76213, 76305, 0);
 53.1687 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(20).getChildBlocks().get(0).getChildBlocks(), 29, PlsqlBlockType.IF, "ELSIF (name_ = 'CHECK_RECIPIENT_DB')", true, 76312, 76502, 1);
 53.1688 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(20).getChildBlocks().get(0).getChildBlocks().get(29).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (value_ IS NOT NULL)", true, 76407, 76502, 0);
 53.1689 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(20).getChildBlocks().get(0).getChildBlocks(), 30, PlsqlBlockType.IF, "ELSIF (name_ = 'SEND_STATEMENT_OF_ACC_TO_PAYER')", true, 76509, 76621, 0);
 53.1690 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(20).getChildBlocks().get(0).getChildBlocks(), 31, PlsqlBlockType.IF, "ELSE", true, 76628, 76706, 0);
 53.1691 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(20).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  (newrec_.amount_tolerance < 0) OR (newrec_.percent_tolerance < 0) OR (newrec_.disc_days_tolerance < 0)", true, 76725, 76939, 0);
 53.1692 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(20).getChildBlocks(), 2, PlsqlBlockType.IF, "IF  (newrec_.interest_template IS NULL)", true, 77061, 77211, 0);
 53.1693 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(20).getChildBlocks(), 3, PlsqlBlockType.IF, "IF  (newrec_.party_type = 'SUPPLIER')", true, 77216, 77520, 0);
 53.1694 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(20).getChildBlocks(), 4, PlsqlBlockType.IF, "IF  (newrec_.party_type = 'CUSTOMER')", true, 77524, 78138, 1);
 53.1695 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(20).getChildBlocks().get(4).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  Company_Invoice_Info_API.Get_Use_Tax_Invoice(newrec_.company)='TRUE' AND newrec_.payment_receipt_type != 'AT_MATCHING'", true, 77848, 78127, 0);
 53.1696 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(20).getChildBlocks(), 5, PlsqlBlockType.IF, "IF  (newrec_.identity = newrec_.other_payee_identity)", true, 78142, 78302, 0);
 53.1697 -            assertBlock(lstBlockFac.get(50).getChildBlocks(), 21, PlsqlBlockType.PROCEDURE_IMPL, "Update___", true, 78422, 82036, 2);
 53.1698 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(21).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  by_keys_", true, 78770, 80404, 1);
 53.1699 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(21).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "UPDATE identity_pay_info_tab", true, 78793, 80403, 0);
 53.1700 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(21).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSE", true, 80408, 81941, 1);
 53.1701 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(21).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "UPDATE identity_pay_info_tab", true, 80419, 81929, 0);
 53.1702 -            assertBlock(lstBlockFac.get(50).getChildBlocks(), 22, PlsqlBlockType.COMMENT, "-- IMPLEMENTATION BASE METHODS FOR DELETE ", true, 82038, 82635, 0);
 53.1703 -            assertBlock(lstBlockFac.get(50).getChildBlocks(), 23, PlsqlBlockType.PROCEDURE_IMPL, "Check_Delete___", true, 82637, 82921, 0);
 53.1704 -            assertBlock(lstBlockFac.get(50).getChildBlocks(), 24, PlsqlBlockType.PROCEDURE_IMPL, "Delete___", true, 82924, 83287, 1);
 53.1705 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(24).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "DELETE", true, 83203, 83271, 0);
 53.1706 -            assertBlock(lstBlockFac.get(50).getChildBlocks(), 25, PlsqlBlockType.COMMENT, "-- PRIVATE BASE METHODS ", true, 83289, 85590, 0);
 53.1707 -            assertBlock(lstBlockFac.get(50).getChildBlocks(), 26, PlsqlBlockType.PROCEDURE_IMPL, "Lock__", true, 85592, 85887, 0);
 53.1708 -            assertBlock(lstBlockFac.get(50).getChildBlocks(), 27, PlsqlBlockType.PROCEDURE_IMPL, "New__", true, 85890, 86494, 3);
 53.1709 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(27).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (action_ = 'PREPARE')", true, 86163, 86224, 0);
 53.1710 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(27).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSIF (action_ = 'CHECK')", true, 86228, 86304, 0);
 53.1711 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(27).getChildBlocks(), 2, PlsqlBlockType.IF, "ELSIF (action_ = 'DO')", true, 86308, 86446, 0);
 53.1712 -            assertBlock(lstBlockFac.get(50).getChildBlocks(), 28, PlsqlBlockType.PROCEDURE_IMPL, "Modify__", true, 86496, 87267, 2);
 53.1713 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(28).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (action_ = 'CHECK')", true, 86802, 86929, 0);
 53.1714 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(28).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSIF (action_ = 'DO')", true, 86933, 87216, 0);
 53.1715 -            assertBlock(lstBlockFac.get(50).getChildBlocks(), 29, PlsqlBlockType.PROCEDURE_IMPL, "Remove__", true, 87270, 87822, 2);
 53.1716 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(29).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (action_ = 'CHECK')", true, 87505, 87610, 0);
 53.1717 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(29).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSIF (action_ = 'DO')", true, 87614, 87771, 0);
 53.1718 -            assertBlock(lstBlockFac.get(50).getChildBlocks(), 30, PlsqlBlockType.COMMENT, "-- PUBLIC BASE METHODS ", true, 87824, 88277, 0);
 53.1719 -            assertBlock(lstBlockFac.get(50).getChildBlocks(), 31, PlsqlBlockType.PROCEDURE_IMPL, "Exist", true, 88279, 89266, 1);
 53.1720 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(31).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (NOT Check_Exist___(company_, identity_, Party_Type_API.Encode(party_type_)))", true, 88455, 89255, 4);
 53.1721 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(31).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- Bug 72612, Begin, Modified IF condition", true, 88547, 88589, 0);
 53.1722 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(31).getChildBlocks().get(0).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  Party_Type_API.Encode(party_type_) IN ('CUSTOMER', 'SUPPLIER')", true, 88596, 88947, 1);
 53.1723 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(31).getChildBlocks().get(0).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- Bug 72612, End.", true, 88830, 88947, 0);
 53.1724 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(31).getChildBlocks().get(0).getChildBlocks(), 2, PlsqlBlockType.IF, "ELSIF (Party_Type_API.Encode(party_type_) = 'COMPANY')", true, 88957, 89172, 1);
 53.1725 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(31).getChildBlocks().get(0).getChildBlocks().get(2).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- Bug 72612, End.", true, 89154, 89172, 0);
 53.1726 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(31).getChildBlocks().get(0).getChildBlocks(), 3, PlsqlBlockType.IF, "ELSE", true, 89179, 89244, 0);
 53.1727 -            assertBlock(lstBlockFac.get(50).getChildBlocks(), 32, PlsqlBlockType.PROCEDURE_IMPL, "Exist_Db", true, 89269, 89871, 1);
 53.1728 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(32).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (NOT Check_Exist___(company_, identity_, party_type_db_))", true, 89457, 89857, 2);
 53.1729 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(32).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  party_type_db_ IN ('CUSTOMER', 'SUPPLIER', 'COMPANY')", true, 89529, 89774, 0);
 53.1730 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(32).getChildBlocks().get(0).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSE", true, 89781, 89846, 0);
 53.1731 -            assertBlock(lstBlockFac.get(50).getChildBlocks(), 33, PlsqlBlockType.COMMENT, "-- LU SPECIFIC IMPLEMENTATION METHODS ", true, 89873, 90106, 0);
 53.1732 -            assertBlock(lstBlockFac.get(50).getChildBlocks(), 34, PlsqlBlockType.PROCEDURE_IMPL, "Save_Identity_Notes___", true, 90107, 90747, 1);
 53.1733 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(34).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  ((note_ IS NULL) AND (note_update_ IS NULL))", true, 90398, 90475, 0);
 53.1734 -            assertBlock(lstBlockFac.get(50).getChildBlocks(), 35, PlsqlBlockType.FUNCTION_IMPL, "Get_Next_Format_No___", true, 90749, 91157, 2);
 53.1735 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(35).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "rec", true, 90834, 90929, 0);
 53.1736 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(35).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  ( rec%NOTFOUND )", true, 91009, 91077, 0);
 53.1737 -            assertBlock(lstBlockFac.get(50).getChildBlocks(), 36, PlsqlBlockType.PROCEDURE_IMPL, "Check_Cascade___", true, 91159, 93974, 6);
 53.1738 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(36).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "get_ledger_item1", true, 91288, 91518, 0);
 53.1739 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(36).getChildBlocks(), 1, PlsqlBlockType.CURSOR, "get_ledger_item2", true, 91523, 91765, 0);
 53.1740 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(36).getChildBlocks(), 2, PlsqlBlockType.CURSOR, "get_ledger_item3", true, 91770, 92012, 0);
 53.1741 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(36).getChildBlocks(), 3, PlsqlBlockType.FOR_LOOP, "ledger_item_ IN get_ledger_item1", true, 92022, 92662, 3);
 53.1742 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(36).getChildBlocks().get(3).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (ledger_item_.rowtype = 'InvoiceLedgerItem')", true, 92070, 92260, 0);
 53.1743 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(36).getChildBlocks().get(3).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSIF (ledger_item_.rowtype = 'OnAccountLedgerItem')", true, 92267, 92479, 0);
 53.1744 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(36).getChildBlocks().get(3).getChildBlocks(), 2, PlsqlBlockType.IF, "ELSE", true, 92486, 92649, 0);
 53.1745 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(36).getChildBlocks(), 4, PlsqlBlockType.FOR_LOOP, "ledger_item_ IN get_ledger_item2", true, 92667, 93307, 3);
 53.1746 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(36).getChildBlocks().get(4).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (ledger_item_.rowtype = 'InvoiceLedgerItem')", true, 92715, 92905, 0);
 53.1747 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(36).getChildBlocks().get(4).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSIF (ledger_item_.rowtype = 'OnAccountLedgerItem')", true, 92912, 93124, 0);
 53.1748 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(36).getChildBlocks().get(4).getChildBlocks(), 2, PlsqlBlockType.IF, "ELSE", true, 93131, 93294, 0);
 53.1749 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(36).getChildBlocks(), 5, PlsqlBlockType.FOR_LOOP, "ledger_item_ IN get_ledger_item3", true, 93312, 93952, 3);
 53.1750 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(36).getChildBlocks().get(5).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (ledger_item_.rowtype = 'InvoiceLedgerItem')", true, 93360, 93550, 0);
 53.1751 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(36).getChildBlocks().get(5).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSIF (ledger_item_.rowtype = 'OnAccountLedgerItem')", true, 93557, 93769, 0);
 53.1752 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(36).getChildBlocks().get(5).getChildBlocks(), 2, PlsqlBlockType.IF, "ELSE", true, 93776, 93939, 0);
 53.1753 -            assertBlock(lstBlockFac.get(50).getChildBlocks(), 37, PlsqlBlockType.PROCEDURE_IMPL, "Import___", true, 93976, 101666, 8);
 53.1754 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(37).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "get_data", true, 94076, 94635, 0);
 53.1755 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(37).getChildBlocks(), 1, PlsqlBlockType.COMMENT, "-- Bug 74138, Begin, Added condition to fetch data when party_type = 'COMPANY'  ", true, 94640, 94720, 0);
 53.1756 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(37).getChildBlocks(), 2, PlsqlBlockType.CURSOR, "exist_company", true, 94724, 94865, 0);
 53.1757 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(37).getChildBlocks(), 3, PlsqlBlockType.COMMENT, "-- Bug 74138, End", true, 94869, 94886, 0);
 53.1758 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(37).getChildBlocks(), 4, PlsqlBlockType.IF, "IF  (NOT update_by_key_)", true, 95366, 95609, 1);
 53.1759 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(37).getChildBlocks().get(4).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  ( exist_company%NOTFOUND )", true, 95492, 95598, 0);
 53.1760 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(37).getChildBlocks(), 5, PlsqlBlockType.IF, "IF  ( update_by_key_ OR empty_lu_ )", true, 95614, 101074, 3);
 53.1761 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(37).getChildBlocks().get(5).getChildBlocks(), 0, PlsqlBlockType.FOR_LOOP, "rec_ IN get_data", true, 95660, 100514, 12);
 53.1762 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(37).getChildBlocks().get(5).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (newrec_.blocked_for_payment IS NOT NULL AND newrec_.blocked_for_payment NOT IN ('TRUE', 'FALSE'))", true, 97341, 97565, 0);
 53.1763 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(37).getChildBlocks().get(5).getChildBlocks().get(0).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  (newrec_.other_payee_identity IS NOT NULL)", true, 97578, 97782, 0);
 53.1764 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(37).getChildBlocks().get(5).getChildBlocks().get(0).getChildBlocks(), 2, PlsqlBlockType.IF, "IF  (newrec_.interest_template IS NOT NULL)", true, 97795, 97950, 0);
 53.1765 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(37).getChildBlocks().get(5).getChildBlocks().get(0).getChildBlocks(), 3, PlsqlBlockType.IF, "IF  (newrec_.reminder_template IS NOT NULL)", true, 97963, 98118, 0);
 53.1766 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(37).getChildBlocks().get(5).getChildBlocks().get(0).getChildBlocks(), 4, PlsqlBlockType.IF, "IF  (TRUNC(newrec_.payment_delay) <> newrec_.payment_delay)", true, 98131, 98337, 0);
 53.1767 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(37).getChildBlocks().get(5).getChildBlocks().get(0).getChildBlocks(), 5, PlsqlBlockType.IF, "IF  (newrec_.netting_allowed NOT IN ('TRUE', 'FALSE'))", true, 98350, 98526, 0);
 53.1768 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(37).getChildBlocks().get(5).getChildBlocks().get(0).getChildBlocks(), 6, PlsqlBlockType.IF, "IF  (newrec_.payment_advice IS NOT NULL)", true, 98539, 98671, 0);
 53.1769 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(37).getChildBlocks().get(5).getChildBlocks().get(0).getChildBlocks(), 7, PlsqlBlockType.IF, "IF  (newrec_.deduction_group IS NOT NULL)", true, 98684, 98833, 0);
 53.1770 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(37).getChildBlocks().get(5).getChildBlocks().get(0).getChildBlocks(), 8, PlsqlBlockType.IF, "IF  (newrec_.payment_receipt_type IS NOT NULL)", true, 98846, 98996, 0);
 53.1771 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(37).getChildBlocks().get(5).getChildBlocks().get(0).getChildBlocks(), 9, PlsqlBlockType.IF, "IF  (newrec_.party_type = 'SUPPLIER')", true, 99339, 99584, 0);
 53.1772 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(37).getChildBlocks().get(5).getChildBlocks().get(0).getChildBlocks(), 10, PlsqlBlockType.IF, "IF  (newrec_.party_type = 'CUSTOMER')", true, 99597, 99961, 0);
 53.1773 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(37).getChildBlocks().get(5).getChildBlocks().get(0).getChildBlocks(), 11, PlsqlBlockType.IF, "IF  (newrec_.identity = newrec_.other_payee_identity)", true, 100054, 100232, 0);
 53.1774 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(37).getChildBlocks().get(5).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  ( i_ = 0 )", true, 100521, 100747, 0);
 53.1775 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(37).getChildBlocks().get(5).getChildBlocks(), 2, PlsqlBlockType.IF, "ELSE", true, 100754, 101063, 2);
 53.1776 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(37).getChildBlocks().get(5).getChildBlocks().get(2).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  msg_ IS NULL", true, 100768, 100904, 0);
 53.1777 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(37).getChildBlocks().get(5).getChildBlocks().get(2).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSE", true, 100914, 101049, 0);
 53.1778 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(37).getChildBlocks(), 6, PlsqlBlockType.COMMENT, "-- This statement is to add to the log that the Create company process for LUs is finished if", true, 101078, 101215, 0);
 53.1779 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(37).getChildBlocks(), 7, PlsqlBlockType.IF, "IF  ( NOT update_by_key_ AND NOT empty_lu_ )", true, 101219, 101388, 0);
 53.1780 -            assertBlock(lstBlockFac.get(50).getChildBlocks(), 38, PlsqlBlockType.PROCEDURE_IMPL, "Copy___", true, 101669, 105604, 6);
 53.1781 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(38).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "exist_company", true, 101912, 102017, 0);
 53.1782 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(38).getChildBlocks(), 1, PlsqlBlockType.CURSOR, "get_data", true, 102022, 102462, 0);
 53.1783 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(38).getChildBlocks(), 2, PlsqlBlockType.IF, "IF  (NOT update_by_key_)", true, 102630, 102873, 1);
 53.1784 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(38).getChildBlocks().get(2).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  ( exist_company%NOTFOUND )", true, 102756, 102862, 0);
 53.1785 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(38).getChildBlocks(), 3, PlsqlBlockType.IF, "IF  ( update_by_key_ OR empty_lu_ )", true, 102878, 105014, 1);
 53.1786 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(38).getChildBlocks().get(3).getChildBlocks(), 0, PlsqlBlockType.FOR_LOOP, "rec_ IN get_data", true, 102924, 104893, 1);
 53.1787 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(38).getChildBlocks().get(3).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "INSERT", true, 102977, 104862, 0);
 53.1788 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(38).getChildBlocks(), 4, PlsqlBlockType.COMMENT, "-- This statement is to add to the log that the Create company process for LUs is finished if", true, 105018, 105155, 0);
 53.1789 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(38).getChildBlocks(), 5, PlsqlBlockType.IF, "IF  ( NOT update_by_key_ AND NOT empty_lu_ )", true, 105159, 105328, 0);
 53.1790 -            assertBlock(lstBlockFac.get(50).getChildBlocks(), 39, PlsqlBlockType.PROCEDURE_IMPL, "Export___", true, 105608, 107379, 2);
 53.1791 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(39).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "get_data", true, 105805, 105944, 0);
 53.1792 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(39).getChildBlocks(), 1, PlsqlBlockType.FOR_LOOP, "pctrec_ IN get_data", true, 106019, 107364, 0);
 53.1793 -            assertBlock(lstBlockFac.get(50).getChildBlocks(), 40, PlsqlBlockType.COMMENT, "-- LU SPECIFIC PRIVATE METHODS ", true, 107381, 107614, 0);
 53.1794 -            assertBlock(lstBlockFac.get(50).getChildBlocks(), 41, PlsqlBlockType.PROCEDURE_IMPL, "Check_Cascade_Customer__", true, 107616, 108337, 2);
 53.1795 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(41).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "customer_in_company", true, 107682, 107919, 0);
 53.1796 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(41).getChildBlocks(), 1, PlsqlBlockType.FOR_LOOP, "comp_ IN customer_in_company (identity_, party_type_db_)", true, 108163, 108307, 0);
 53.1797 -            assertBlock(lstBlockFac.get(50).getChildBlocks(), 42, PlsqlBlockType.PROCEDURE_IMPL, "Check_Cascade_Supplier__", true, 108339, 109060, 2);
 53.1798 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(42).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "supplier_in_company", true, 108405, 108642, 0);
 53.1799 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(42).getChildBlocks(), 1, PlsqlBlockType.FOR_LOOP, "comp_ IN supplier_in_company (identity_, party_type_db_)", true, 108886, 109030, 0);
 53.1800 -            assertBlock(lstBlockFac.get(50).getChildBlocks(), 43, PlsqlBlockType.PROCEDURE_IMPL, "Cascade_Delete_Customer__", true, 109062, 109903, 2);
 53.1801 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(43).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "customer_in_company", true, 109234, 109520, 0);
 53.1802 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(43).getChildBlocks(), 1, PlsqlBlockType.FOR_LOOP, "comp_ IN customer_in_company (identity_, party_type_db_)", true, 109733, 109871, 0);
 53.1803 -            assertBlock(lstBlockFac.get(50).getChildBlocks(), 44, PlsqlBlockType.PROCEDURE_IMPL, "Cascade_Delete_Supplier__", true, 109905, 110746, 2);
 53.1804 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(44).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "supplier_in_company", true, 110077, 110363, 0);
 53.1805 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(44).getChildBlocks(), 1, PlsqlBlockType.FOR_LOOP, "comp_ IN supplier_in_company (identity_, party_type_db_)", true, 110576, 110714, 0);
 53.1806 -            assertBlock(lstBlockFac.get(50).getChildBlocks(), 45, PlsqlBlockType.FUNCTION_IMPL, "Create_Other_Payee_Attr__", true, 110748, 111408, 2);
 53.1807 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(45).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "get_supplier", true, 110893, 111096, 0);
 53.1808 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(45).getChildBlocks(), 1, PlsqlBlockType.FOR_LOOP, "supplier_info_ IN get_supplier", true, 111211, 111353, 0);
 53.1809 -            assertBlock(lstBlockFac.get(50).getChildBlocks(), 46, PlsqlBlockType.FUNCTION_IMPL, "Create_Cus_Other_Payee_Attr__", true, 111410, 112059, 2);
 53.1810 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(46).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "get_customer", true, 111559, 111739, 0);
 53.1811 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(46).getChildBlocks(), 1, PlsqlBlockType.FOR_LOOP, "customer_info_ IN get_customer", true, 111858, 112000, 0);
 53.1812 -            assertBlock(lstBlockFac.get(50).getChildBlocks(), 47, PlsqlBlockType.COMMENT, "-- LU SPECIFIC PROTECTED METHODS ", true, 112060, 112529, 0);
 53.1813 -            assertBlock(lstBlockFac.get(50).getChildBlocks(), 48, PlsqlBlockType.FUNCTION_IMPL, "Get_Priority", true, 112531, 112802, 0);
 53.1814 -            assertBlock(lstBlockFac.get(50).getChildBlocks(), 49, PlsqlBlockType.FUNCTION_IMPL, "Get_Blocked_For_Payment", true, 112804, 113109, 0);
 53.1815 -            assertBlock(lstBlockFac.get(50).getChildBlocks(), 50, PlsqlBlockType.FUNCTION_IMPL, "Get_Payment_Delay", true, 113111, 113404, 0);
 53.1816 -            assertBlock(lstBlockFac.get(50).getChildBlocks(), 51, PlsqlBlockType.FUNCTION_IMPL, "Get_Amount_Tolerance", true, 113406, 113700, 0);
 53.1817 -            assertBlock(lstBlockFac.get(50).getChildBlocks(), 52, PlsqlBlockType.FUNCTION_IMPL, "Get_Percent_Tolerance", true, 113702, 113999, 0);
 53.1818 -            assertBlock(lstBlockFac.get(50).getChildBlocks(), 53, PlsqlBlockType.FUNCTION_IMPL, "Get_Disc_Days_Tolerance", true, 114001, 114469, 1);
 53.1819 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(53).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "get_attr", true, 114179, 114350, 0);
 53.1820 -            assertBlock(lstBlockFac.get(50).getChildBlocks(), 54, PlsqlBlockType.FUNCTION_IMPL, "Get_Netting_Allowed", true, 114471, 115095, 2);
 53.1821 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(54).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "get_attr", true, 114648, 114847, 0);
 53.1822 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(54).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  (NOT Company_Finance_API.Is_User_Authorized(company_))", true, 114857, 114950, 0);
 53.1823 -            assertBlock(lstBlockFac.get(50).getChildBlocks(), 55, PlsqlBlockType.FUNCTION_IMPL, "Get_Check_Recipient", true, 115097, 115647, 1);
 53.1824 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(55).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "get_attr", true, 115269, 115468, 0);
 53.1825 -            assertBlock(lstBlockFac.get(50).getChildBlocks(), 56, PlsqlBlockType.FUNCTION_IMPL, "Get_Check_Recipient_Db", true, 115649, 116182, 1);
 53.1826 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(56).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "get_attr", true, 115829, 116028, 0);
 53.1827 -            assertBlock(lstBlockFac.get(50).getChildBlocks(), 57, PlsqlBlockType.FUNCTION_IMPL, "Get_Next_Pay_Matching_Id", true, 116184, 116803, 1);
 53.1828 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(57).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "UPDATE identity_pay_info_tab", true, 116583, 116752, 0);
 53.1829 -            assertBlock(lstBlockFac.get(50).getChildBlocks(), 58, PlsqlBlockType.FUNCTION_IMPL, "Get_Payment_Matching_Id", true, 116805, 117363, 1);
 53.1830 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(58).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "get_matching_id", true, 116947, 117124, 0);
 53.1831 -            assertBlock(lstBlockFac.get(50).getChildBlocks(), 59, PlsqlBlockType.FUNCTION_IMPL, "Get_Format_No", true, 117365, 117963, 2);
 53.1832 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(59).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "get_attr", true, 117528, 117721, 0);
 53.1833 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(59).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  (NOT Company_Finance_API.Is_User_Authorized(company_))", true, 117731, 117824, 0);
 53.1834 -            assertBlock(lstBlockFac.get(50).getChildBlocks(), 60, PlsqlBlockType.FUNCTION_IMPL, "Get_Other_Payee_Ded_Group_Desc", true, 117965, 118526, 1);
 53.1835 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(60).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (deduction_group_ IS NULL)", true, 118351, 118415, 0);
 53.1836 -            assertBlock(lstBlockFac.get(50).getChildBlocks(), 61, PlsqlBlockType.FUNCTION_IMPL, "Get_Deduction_Group", true, 118528, 119152, 2);
 53.1837 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(61).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "get_attr", true, 118705, 118904, 0);
 53.1838 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(61).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  (NOT Company_Finance_API.Is_User_Authorized(company_))", true, 118914, 119007, 0);
 53.1839 -            assertBlock(lstBlockFac.get(50).getChildBlocks(), 62, PlsqlBlockType.FUNCTION_IMPL, "Get_Template_Id", true, 119154, 119597, 1);
 53.1840 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(62).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "get_attr", true, 119323, 119486, 0);
 53.1841 -            assertBlock(lstBlockFac.get(50).getChildBlocks(), 63, PlsqlBlockType.FUNCTION_IMPL, "Get_Corporation_Id", true, 119599, 120219, 2);
 53.1842 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(63).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "get_attr", true, 119774, 119972, 0);
 53.1843 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(63).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  (NOT Company_Finance_API.Is_User_Authorized(company_))", true, 119982, 120075, 0);
 53.1844 -            assertBlock(lstBlockFac.get(50).getChildBlocks(), 64, PlsqlBlockType.FUNCTION_IMPL, "Get_Member_Id", true, 120221, 120821, 2);
 53.1845 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(64).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "get_attr", true, 120386, 120579, 0);
 53.1846 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(64).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  (NOT Company_Finance_API.Is_User_Authorized(company_))", true, 120589, 120682, 0);
 53.1847 -            assertBlock(lstBlockFac.get(50).getChildBlocks(), 65, PlsqlBlockType.FUNCTION_IMPL, "Get_Send_Reminder_To_Payer", true, 120823, 121475, 2);
 53.1848 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(65).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "get_attr", true, 121014, 121220, 0);
 53.1849 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(65).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  (NOT Company_Finance_API.Is_User_Authorized(company_))", true, 121230, 121323, 0);
 53.1850 -            assertBlock(lstBlockFac.get(50).getChildBlocks(), 66, PlsqlBlockType.FUNCTION_IMPL, "Get_Send_Interest_Inv_To_Payer", true, 121477, 122145, 2);
 53.1851 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(66).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "get_attr", true, 121676, 121886, 0);
 53.1852 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(66).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  (NOT Company_Finance_API.Is_User_Authorized(company_))", true, 121896, 121989, 0);
 53.1853 -            assertBlock(lstBlockFac.get(50).getChildBlocks(), 67, PlsqlBlockType.FUNCTION_IMPL, "Get_Payment_Advice", true, 122147, 122789, 2);
 53.1854 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(67).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "get_attr", true, 122317, 122515, 0);
 53.1855 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(67).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  (NOT Company_Finance_API.Is_User_Authorized(company_))", true, 122525, 122618, 0);
 53.1856 -            assertBlock(lstBlockFac.get(50).getChildBlocks(), 68, PlsqlBlockType.FUNCTION_IMPL, "Get_Payment_Advice_Db", true, 122791, 123412, 2);
 53.1857 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(68).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "get_attr", true, 122964, 123162, 0);
 53.1858 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(68).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  (NOT Company_Finance_API.Is_User_Authorized(company_))", true, 123172, 123265, 0);
 53.1859 -            assertBlock(lstBlockFac.get(50).getChildBlocks(), 69, PlsqlBlockType.FUNCTION_IMPL, "Get_Other_Payee_Identity", true, 123415, 123724, 0);
 53.1860 -            assertBlock(lstBlockFac.get(50).getChildBlocks(), 70, PlsqlBlockType.FUNCTION_IMPL, "Get_Interest_Template", true, 123726, 124024, 0);
 53.1861 -            assertBlock(lstBlockFac.get(50).getChildBlocks(), 71, PlsqlBlockType.FUNCTION_IMPL, "Get_Reminder_Template", true, 124026, 124325, 0);
 53.1862 -            assertBlock(lstBlockFac.get(50).getChildBlocks(), 72, PlsqlBlockType.FUNCTION_IMPL, "Get_Rule_Id", true, 124327, 124919, 2);
 53.1863 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(72).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "get_attr", true, 124488, 124679, 0);
 53.1864 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(72).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  (NOT Company_Finance_API.Is_User_Authorized(company_))", true, 124689, 124782, 0);
 53.1865 -            assertBlock(lstBlockFac.get(50).getChildBlocks(), 73, PlsqlBlockType.FUNCTION_IMPL, "Get_Payment_Receipt_Type", true, 124921, 125501, 1);
 53.1866 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(73).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "get_attr", true, 125108, 125312, 0);
 53.1867 -            assertBlock(lstBlockFac.get(50).getChildBlocks(), 74, PlsqlBlockType.FUNCTION_IMPL, "Get_Payment_Receipt_Type_Db", true, 125503, 126056, 1);
 53.1868 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(74).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "get_attr", true, 125693, 125897, 0);
 53.1869 -            assertBlock(lstBlockFac.get(50).getChildBlocks(), 75, PlsqlBlockType.PROCEDURE_IMPL, "Instance_Exists", true, 126058, 126714, 3);
 53.1870 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(75).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "getrec", true, 126209, 126404, 0);
 53.1871 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(75).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  (getrec%FOUND)", true, 126588, 126633, 0);
 53.1872 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(75).getChildBlocks(), 2, PlsqlBlockType.IF, "ELSE", true, 126637, 126676, 0);
 53.1873 -            assertBlock(lstBlockFac.get(50).getChildBlocks(), 76, PlsqlBlockType.PROCEDURE_IMPL, "Create_Party_Type_Id", true, 126716, 127001, 0);
 53.1874 -            assertBlock(lstBlockFac.get(50).getChildBlocks(), 77, PlsqlBlockType.PROCEDURE_IMPL, "Create_Identity_Pay_Info", true, 127003, 129220, 2);
 53.1875 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(77).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (party_type_db_ = 'SUPPLIER')", true, 127803, 128026, 0);
 53.1876 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(77).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSIF (party_type_db_ = 'CUSTOMER')", true, 128030, 128847, 6);
 53.1877 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(77).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (def_template_ IS NULL)", true, 128154, 128219, 0);
 53.1878 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(77).getChildBlocks().get(1).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSE", true, 128226, 128320, 0);
 53.1879 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(77).getChildBlocks().get(1).getChildBlocks(), 2, PlsqlBlockType.IF, "IF  (def_template_ IS NULL)", true, 128404, 128469, 0);
 53.1880 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(77).getChildBlocks().get(1).getChildBlocks(), 3, PlsqlBlockType.IF, "ELSE", true, 128476, 128570, 0);
 53.1881 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(77).getChildBlocks().get(1).getChildBlocks(), 4, PlsqlBlockType.IF, "IF  Company_Invoice_Info_API.Get_Use_Tax_Invoice(company_) = 'TRUE'", true, 128577, 128730, 0);
 53.1882 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(77).getChildBlocks().get(1).getChildBlocks(), 5, PlsqlBlockType.IF, "ELSE", true, 128737, 128836, 0);
 53.1883 -            assertBlock(lstBlockFac.get(50).getChildBlocks(), 78, PlsqlBlockType.FUNCTION_IMPL, "Validate_Identity", true, 129222, 129847, 2);
 53.1884 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(78).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "exist_identity", true, 129376, 129578, 0);
 53.1885 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(78).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  (exist_identity %FOUND)", true, 129685, 129778, 0);
 53.1886 -            assertBlock(lstBlockFac.get(50).getChildBlocks(), 79, PlsqlBlockType.PROCEDURE_IMPL, "Fetch_Tolerance", true, 129849, 132997, 8);
 53.1887 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(79).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "get_identity_tolerance_", true, 130480, 130690, 0);
 53.1888 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(79).getChildBlocks(), 1, PlsqlBlockType.CURSOR, "get_company_tolerance_", true, 130695, 130843, 0);
 53.1889 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(79).getChildBlocks(), 2, PlsqlBlockType.IF, "IF  party_type_db_ = 'CUSTOMER'", true, 130978, 131477, 2);
 53.1890 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(79).getChildBlocks().get(2).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- general payment tolerance", true, 131185, 131213, 0);
 53.1891 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(79).getChildBlocks().get(2).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  percent_tolerance_ IS NULL AND amount_tolerance_acc_curr_ IS NULL", true, 131220, 131477, 0);
 53.1892 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(79).getChildBlocks(), 3, PlsqlBlockType.IF, "ELSIF party_type_db_ = 'SUPPLIER'", true, 131482, 131733, 1);
 53.1893 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(79).getChildBlocks().get(3).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- general payment tolerance", true, 131524, 131552, 0);
 53.1894 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(79).getChildBlocks(), 4, PlsqlBlockType.IF, "IF  action_ = 'NOCALCULATE'", true, 131738, 131849, 0);
 53.1895 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(79).getChildBlocks(), 5, PlsqlBlockType.IF, "IF  acc_currency_ = currency_", true, 131924, 132037, 0);
 53.1896 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(79).getChildBlocks(), 6, PlsqlBlockType.IF, "IF  ( (div_factor_ IS NULL) OR (currency_rate_ IS NULL))", true, 132105, 132443, 0);
 53.1897 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(79).getChildBlocks(), 7, PlsqlBlockType.IF, "IF  (date_ IS NOT NULL) AND ((div_factor_ IS NULL) OR (currency_rate_ IS NULL))", true, 132447, 132795, 0);
 53.1898 -            assertBlock(lstBlockFac.get(50).getChildBlocks(), 80, PlsqlBlockType.PROCEDURE_IMPL, "Copy_Payway_Per_Identity___", true, 132999, 133806, 2);
 53.1899 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(80).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "get_pay_way", true, 133202, 133393, 0);
 53.1900 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(80).getChildBlocks(), 1, PlsqlBlockType.FOR_LOOP, "pay_way_ IN get_pay_way", true, 133403, 133773, 1);
 53.1901 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(80).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "INSERT INTO PAYMENT_WAY_PER_IDENTITY_TAB (company, identity, party_type,", true, 133444, 133759, 0);
 53.1902 -            assertBlock(lstBlockFac.get(50).getChildBlocks(), 81, PlsqlBlockType.PROCEDURE_IMPL, "Copy_Payment_Address___", true, 133808, 135730, 2);
 53.1903 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(81).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "get_pay_addr", true, 134007, 134190, 0);
 53.1904 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(81).getChildBlocks(), 1, PlsqlBlockType.FOR_LOOP, "pay_addr_ IN get_pay_addr", true, 134200, 135701, 3);
 53.1905 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(81).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- Bug 72177, Begin, Added bic_code", true, 134241, 134276, 0);
 53.1906 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(81).getChildBlocks().get(1).getChildBlocks(), 1, PlsqlBlockType.STATEMENT, "INSERT INTO PAYMENT_ADDRESS_TAB (company, identity, party_type, way_id,", true, 134283, 135662, 0);
 53.1907 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(81).getChildBlocks().get(1).getChildBlocks(), 2, PlsqlBlockType.COMMENT, "-- Bug 72177, End", true, 135670, 135687, 0);
 53.1908 -            assertBlock(lstBlockFac.get(50).getChildBlocks(), 82, PlsqlBlockType.PROCEDURE_IMPL, "Copy_Customer", true, 135732, 139718, 4);
 53.1909 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(82).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "get_customer", true, 135882, 136076, 0);
 53.1910 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(82).getChildBlocks(), 1, PlsqlBlockType.CURSOR, "get_credit_info", true, 136081, 136239, 0);
 53.1911 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(82).getChildBlocks(), 2, PlsqlBlockType.FOR_LOOP, "customer_ IN get_customer", true, 136335, 138536, 3);
 53.1912 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(82).getChildBlocks().get(2).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- Bug 73125, Begin, Added template_id ", true, 136430, 136469, 0);
 53.1913 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(82).getChildBlocks().get(2).getChildBlocks(), 1, PlsqlBlockType.STATEMENT, "INSERT INTO IDENTITY_PAY_INFO_TAB (company, identity, party_type,", true, 136476, 138070, 0);
 53.1914 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(82).getChildBlocks().get(2).getChildBlocks(), 2, PlsqlBlockType.COMMENT, "-- Bug 73125, End", true, 138078, 138095, 0);
 53.1915 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(82).getChildBlocks(), 3, PlsqlBlockType.FOR_LOOP, "credit_ IN get_credit_info", true, 138541, 139699, 1);
 53.1916 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(82).getChildBlocks().get(3).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "INSERT INTO CUSTOMER_CREDIT_INFO_TAB (company, identity, last4q_sales,", true, 138583, 139685, 0);
 53.1917 -            assertBlock(lstBlockFac.get(50).getChildBlocks(), 83, PlsqlBlockType.PROCEDURE_IMPL, "Copy_Supplier", true, 139720, 141928, 2);
 53.1918 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(83).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "get_supplier", true, 139870, 140064, 0);
 53.1919 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(83).getChildBlocks(), 1, PlsqlBlockType.FOR_LOOP, "supplier_ IN get_supplier", true, 140285, 141909, 3);
 53.1920 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(83).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- Bug 73125, Begin, Added template_id ", true, 140380, 140419, 0);
 53.1921 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(83).getChildBlocks().get(1).getChildBlocks(), 1, PlsqlBlockType.STATEMENT, "INSERT INTO IDENTITY_PAY_INFO_TAB (company, identity, party_type,", true, 140426, 141445, 0);
 53.1922 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(83).getChildBlocks().get(1).getChildBlocks(), 2, PlsqlBlockType.COMMENT, "-- Bug 73125, End", true, 141453, 141470, 0);
 53.1923 -            assertBlock(lstBlockFac.get(50).getChildBlocks(), 84, PlsqlBlockType.FUNCTION_IMPL, "Get", true, 141930, 142856, 2);
 53.1924 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(84).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "get_attr", true, 142084, 142659, 0);
 53.1925 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(84).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  (NOT Company_Finance_API.Is_User_Authorized(company_))", true, 142669, 142762, 0);
 53.1926 -            assertBlock(lstBlockFac.get(50).getChildBlocks(), 85, PlsqlBlockType.PROCEDURE_IMPL, "User_Allowed___", true, 142858, 143216, 1);
 53.1927 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(85).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  NOT (company_finance_api.Is_User_Authorized(company_))", true, 143000, 143194, 0);
 53.1928 -            assertBlock(lstBlockFac.get(50).getChildBlocks(), 86, PlsqlBlockType.COMMENT, "-- Server", true, 143219, 143437, 0);
 53.1929 -            assertBlock(lstBlockFac.get(50).getChildBlocks(), 87, PlsqlBlockType.FUNCTION_IMPL, "Get_Group_For_Identity", true, 143438, 144049, 2);
 53.1930 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(87).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "get_group", true, 143612, 143800, 0);
 53.1931 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(87).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  (get_group%NOTFOUND)", true, 143898, 143979, 0);
 53.1932 -            assertBlock(lstBlockFac.get(50).getChildBlocks(), 88, PlsqlBlockType.PROCEDURE_IMPL, "Make_Company", true, 144051, 144608, 2);
 53.1933 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(88).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (rec_.make_company = 'EXPORT')", true, 144328, 144389, 0);
 53.1934 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(88).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSIF (rec_.make_company = 'IMPORT')", true, 144393, 144590, 2);
 53.1935 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(88).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (rec_.action = 'NEW')", true, 144441, 144496, 0);
 53.1936 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(88).getChildBlocks().get(1).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSIF (rec_.action = 'DUPLICATE')", true, 144503, 144579, 0);
 53.1937 -            assertBlock(lstBlockFac.get(50).getChildBlocks(), 89, PlsqlBlockType.FUNCTION_IMPL, "Cust_Open_Items_Exist", true, 144610, 145567, 2);
 53.1938 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(89).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "exist_control", true, 144737, 145266, 0);
 53.1939 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(89).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  (exist_control%FOUND)", true, 145407, 145496, 0);
 53.1940 -            assertBlock(lstBlockFac.get(50).getChildBlocks(), 90, PlsqlBlockType.FUNCTION_IMPL, "Get_Send_Stmt_Of_Acc_To_Payer", true, 145569, 145994, 1);
 53.1941 -            assertBlock(lstBlockFac.get(50).getChildBlocks().get(90).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (NOT Company_Finance_API.Is_User_Authorized(company_))", true, 145745, 145837, 0);
 53.1942 -            assertBlock(lstBlockFac.get(50).getChildBlocks(), 91, PlsqlBlockType.COMMENT, "-- FOUNDATION1 METHODS ", true, 145995, 146459, 0);
 53.1943 -            assertBlock(lstBlockFac.get(50).getChildBlocks(), 92, PlsqlBlockType.PROCEDURE_IMPL, "Init", true, 146461, 146503, 0);
 53.1944 -            assertBlock(lstBlockFac, 51, PlsqlBlockType.COMMENT, "-- <UNDEFINE_SECTION>", false, 146530, 147081, 0);
 53.1945 +            assertEquals(54, lstBlockFac.size());
 53.1946 +            processBlocks(plsqlFileName, lstBlockFac);
 53.1947          } finally {
 53.1948              if (fileObject != null) {
 53.1949                  fileObject.delete();
 53.1950 @@ -1956,119 +352,18 @@
 53.1951      @Test
 53.1952      public void testAdvanced10() throws IOException, BadLocationException {
 53.1953          System.out.println("Advanced test case 10");
 53.1954 -        FileObject fileObject = fs.getRoot().createData("InstallationSite.apy");
 53.1955 +        final String plsqlFileName = "InstallationSite.apy";
 53.1956 +        FileObject fileObject = fs.getRoot().createData(plsqlFileName);
 53.1957          assertNotNull(fileObject);
 53.1958          try {
 53.1959 -            PlsqlBlockFactory blockFac = loadAsTmpFile(fileObject, "InstallationSite.apy");
 53.1960 +            PlsqlBlockFactory blockFac = loadAsTmpFile(fileObject, plsqlFileName);
 53.1961              assertNotNull(blockFac);
 53.1962  
 53.1963              List<PlsqlBlock> lstBlockFac = blockFac.getBlockHierarchy();
 53.1964  //         printHierarchy(lstBlockFac, "");
 53.1965  //         generateAssert(lstBlockFac, "lstBlockFac", "false");
 53.1966 -            assertTrue(lstBlockFac.size() == 11);
 53.1967 -            assertBlock(lstBlockFac, 0, PlsqlBlockType.COMMENT, "-- Logical unit: InstallationSite", false, 0, 914, 0);
 53.1968 -            assertBlock(lstBlockFac, 1, PlsqlBlockType.COMMENT, "-- VIEWS FOR SELECTS ", false, 1271, 1504, 0);
 53.1969 -            assertBlock(lstBlockFac, 2, PlsqlBlockType.VIEW, "USER_DB_LINKS_LOV", false, 1538, 1663, 0);
 53.1970 -            assertBlock(lstBlockFac, 3, PlsqlBlockType.TABLE_COMMENT, "USER_DB_LINKS_LOV", false, 1666, 1748, 0);
 53.1971 -            assertBlock(lstBlockFac, 4, PlsqlBlockType.COLUMN_COMMENT, "USER_DB_LINKS_LOV", false, 1751, 1854, 0);
 53.1972 -            assertBlock(lstBlockFac, 5, PlsqlBlockType.VIEW, "INSTALLATION_SITE", false, 1886, 2397, 0);
 53.1973 -            assertBlock(lstBlockFac, 6, PlsqlBlockType.TABLE_COMMENT, "INSTALLATION_SITE", false, 2400, 2478, 0);
 53.1974 -            assertBlock(lstBlockFac, 7, PlsqlBlockType.COLUMN_COMMENT, "INSTALLATION_SITE", false, 2481, 3004, 0);
 53.1975 -            assertBlock(lstBlockFac, 8, PlsqlBlockType.COMMENT, "-- PACKAGES FOR METHODS ", false, 3007, 3240, 0);
 53.1976 -            assertBlock(lstBlockFac, 9, PlsqlBlockType.PACKAGE_BODY, "INSTALLATION_SITE_API", false, 3279, 25102, 30);
 53.1977 -            assertBlock(lstBlockFac.get(9).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- LU SPECIFIC IMPLEMENTATION METHOD DECLARATIONS ", true, 3319, 4430, 0);
 53.1978 -            assertBlock(lstBlockFac.get(9).getChildBlocks(), 1, PlsqlBlockType.FUNCTION_IMPL, "Lock_By_Id___", true, 4432, 5584, 5);
 53.1979 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "lock_control", true, 4726, 4876, 0);
 53.1980 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(1).getChildBlocks(), 1, PlsqlBlockType.CURSOR, "exist_control", true, 4880, 4968, 0);
 53.1981 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(1).getChildBlocks(), 2, PlsqlBlockType.IF, "IF  (lock_control%FOUND)", true, 5033, 5117, 0);
 53.1982 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(1).getChildBlocks(), 3, PlsqlBlockType.IF, "IF  (exist_control%FOUND)", true, 5203, 5284, 0);
 53.1983 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(1).getChildBlocks(), 4, PlsqlBlockType.IF, "ELSE", true, 5288, 5355, 0);
 53.1984 -            assertBlock(lstBlockFac.get(9).getChildBlocks(), 2, PlsqlBlockType.FUNCTION_IMPL, "Lock_By_Keys___", true, 5586, 6135, 3);
 53.1985 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(2).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "lock_control", true, 5724, 5829, 0);
 53.1986 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(2).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  (lock_control%FOUND)", true, 5894, 5967, 0);
 53.1987 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(2).getChildBlocks(), 2, PlsqlBlockType.IF, "ELSE", true, 5971, 6037, 0);
 53.1988 -            assertBlock(lstBlockFac.get(9).getChildBlocks(), 3, PlsqlBlockType.FUNCTION_IMPL, "Get_Object_By_Id___", true, 6137, 6544, 2);
 53.1989 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(3).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "getrec", true, 6247, 6328, 0);
 53.1990 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(3).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  (getrec%NOTFOUND)", true, 6384, 6482, 0);
 53.1991 -            assertBlock(lstBlockFac.get(9).getChildBlocks(), 4, PlsqlBlockType.FUNCTION_IMPL, "Get_Object_By_Keys___", true, 6546, 6858, 1);
 53.1992 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(4).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "getrec", true, 6660, 6742, 0);
 53.1993 -            assertBlock(lstBlockFac.get(9).getChildBlocks(), 5, PlsqlBlockType.FUNCTION_IMPL, "Check_Exist___", true, 6860, 7259, 2);
 53.1994 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(5).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "exist_control", true, 6951, 7041, 0);
 53.1995 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(5).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  (exist_control%FOUND)", true, 7110, 7197, 0);
 53.1996 -            assertBlock(lstBlockFac.get(9).getChildBlocks(), 6, PlsqlBlockType.PROCEDURE_IMPL, "Get_Id_Version_By_Keys___", true, 7261, 7623, 1);
 53.1997 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(6).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "get_version", true, 7394, 7496, 0);
 53.1998 -            assertBlock(lstBlockFac.get(9).getChildBlocks(), 7, PlsqlBlockType.COMMENT, "-- IMPLEMENTATION BASE METHODS FOR INSERT ", true, 7625, 8370, 0);
 53.1999 -            assertBlock(lstBlockFac.get(9).getChildBlocks(), 8, PlsqlBlockType.PROCEDURE_IMPL, "Prepare_Insert___", true, 8372, 8609, 0);
 53.2000 -            assertBlock(lstBlockFac.get(9).getChildBlocks(), 9, PlsqlBlockType.PROCEDURE_IMPL, "Unpack_Check_Insert___", true, 8612, 10236, 2);
 53.2001 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(9).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  ( (UPPER(NVL(value_, 'FALSE')) = 'TRUE') AND This_Site_Exist__ )", true, 8981, 9094, 0);
 53.2002 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(9).getChildBlocks(), 1, PlsqlBlockType.WHILE_LOOP, "(Client_SYS.Get_Next_From_Attr(attr_, ptr_, name_, value_))", true, 9115, 9726, 6);
 53.2003 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(9).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (name_ = 'SITE_ID')", true, 9192, 9255, 0);
 53.2004 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(9).getChildBlocks().get(1).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSIF (name_ = 'TIMEZONE_DIFFERENCE')", true, 9262, 9385, 0);
 53.2005 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(9).getChildBlocks().get(1).getChildBlocks(), 2, PlsqlBlockType.IF, "ELSIF (name_ = 'DESCRIPTION')", true, 9392, 9466, 0);
 53.2006 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(9).getChildBlocks().get(1).getChildBlocks(), 3, PlsqlBlockType.IF, "ELSIF (name_ = 'THIS_SITE')", true, 9473, 9543, 0);
 53.2007 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(9).getChildBlocks().get(1).getChildBlocks(), 4, PlsqlBlockType.IF, "ELSIF (name_ = 'DATABASE_LINK')", true, 9550, 9628, 0);
 53.2008 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(9).getChildBlocks().get(1).getChildBlocks(), 5, PlsqlBlockType.IF, "ELSE", true, 9635, 9713, 0);
 53.2009 -            assertBlock(lstBlockFac.get(9).getChildBlocks(), 10, PlsqlBlockType.PROCEDURE_IMPL, "Insert___", true, 10239, 11678, 5);
 53.2010 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(10).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  ( newrec_.timezone_difference IS NULL )", true, 10408, 10506, 0);
 53.2011 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(10).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  ( NVL(newrec_.this_site,'FALSE') NOT IN ('TRUE','FALSE') )", true, 10510, 10623, 0);
 53.2012 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(10).getChildBlocks(), 2, PlsqlBlockType.STATEMENT, "INSERT", true, 10727, 11101, 0);
 53.2013 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(10).getChildBlocks(), 3, PlsqlBlockType.STATEMENT, "SELECT &OBJID", true, 11106, 11195, 0);
 53.2014 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(10).getChildBlocks(), 4, PlsqlBlockType.COMMENT, "-- Insert into the translation database", true, 11200, 11239, 0);
 53.2015 -            assertBlock(lstBlockFac.get(9).getChildBlocks(), 11, PlsqlBlockType.COMMENT, "-- IMPLEMENTATION BASE METHODS FOR UPDATE ", true, 11680, 12264, 0);
 53.2016 -            assertBlock(lstBlockFac.get(9).getChildBlocks(), 12, PlsqlBlockType.PROCEDURE_IMPL, "Unpack_Check_Update___", true, 12266, 13836, 2);
 53.2017 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(12).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  ( (UPPER(NVL(value_, 'FALSE')) = 'TRUE') AND (newrec_.this_site = 'FALSE') AND This_Site_Exist__ )", true, 12597, 12744, 0);
 53.2018 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(12).getChildBlocks(), 1, PlsqlBlockType.WHILE_LOOP, "(Client_SYS.Get_Next_From_Attr(attr_, ptr_, name_, value_))", true, 12765, 13393, 6);
 53.2019 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(12).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (name_ = 'SITE_ID')", true, 12842, 12922, 0);
 53.2020 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(12).getChildBlocks().get(1).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSIF (name_ = 'TIMEZONE_DIFFERENCE')", true, 12929, 13052, 0);
 53.2021 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(12).getChildBlocks().get(1).getChildBlocks(), 2, PlsqlBlockType.IF, "ELSIF (name_ = 'DESCRIPTION')", true, 13059, 13133, 0);
 53.2022 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(12).getChildBlocks().get(1).getChildBlocks(), 3, PlsqlBlockType.IF, "ELSIF (name_ = 'THIS_SITE')", true, 13140, 13210, 0);
 53.2023 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(12).getChildBlocks().get(1).getChildBlocks(), 4, PlsqlBlockType.IF, "ELSIF (name_ = 'DATABASE_LINK')", true, 13217, 13295, 0);
 53.2024 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(12).getChildBlocks().get(1).getChildBlocks(), 5, PlsqlBlockType.IF, "ELSE", true, 13302, 13380, 0);
 53.2025 -            assertBlock(lstBlockFac.get(9).getChildBlocks(), 13, PlsqlBlockType.PROCEDURE_IMPL, "Update___", true, 13839, 15623, 5);
 53.2026 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(13).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  ( newrec_.timezone_difference IS NULL )", true, 14087, 14185, 0);
 53.2027 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(13).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  ( NVL(newrec_.this_site,'FALSE') NOT IN ('TRUE','FALSE') )", true, 14189, 14302, 0);
 53.2028 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(13).getChildBlocks(), 2, PlsqlBlockType.IF, "IF  by_keys_", true, 14406, 14771, 1);
 53.2029 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(13).getChildBlocks().get(2).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "UPDATE installation_site_tab", true, 14429, 14770, 0);
 53.2030 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(13).getChildBlocks(), 3, PlsqlBlockType.IF, "ELSE", true, 14775, 15129, 1);
 53.2031 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(13).getChildBlocks().get(3).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "UPDATE installation_site_tab", true, 14786, 15117, 0);
 53.2032 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(13).getChildBlocks(), 4, PlsqlBlockType.COMMENT, "-- Update the translation database if necessary", true, 15133, 15180, 0);
 53.2033 -            assertBlock(lstBlockFac.get(9).getChildBlocks(), 14, PlsqlBlockType.COMMENT, "-- IMPLEMENTATION BASE METHODS FOR DELETE ", true, 15625, 16222, 0);
 53.2034 -            assertBlock(lstBlockFac.get(9).getChildBlocks(), 15, PlsqlBlockType.PROCEDURE_IMPL, "Check_Delete___", true, 16224, 16429, 0);
 53.2035 -            assertBlock(lstBlockFac.get(9).getChildBlocks(), 16, PlsqlBlockType.PROCEDURE_IMPL, "Delete___", true, 16432, 16862, 2);
 53.2036 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(16).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "DELETE", true, 16632, 16700, 0);
 53.2037 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(16).getChildBlocks(), 1, PlsqlBlockType.COMMENT, "-- Delete all existing translations for this record.", true, 16705, 16757, 0);
 53.2038 -            assertBlock(lstBlockFac.get(9).getChildBlocks(), 17, PlsqlBlockType.COMMENT, "-- PRIVATE BASE METHODS ", true, 16864, 19165, 0);
 53.2039 -            assertBlock(lstBlockFac.get(9).getChildBlocks(), 18, PlsqlBlockType.PROCEDURE_IMPL, "Lock__", true, 19167, 19462, 0);
 53.2040 -            assertBlock(lstBlockFac.get(9).getChildBlocks(), 19, PlsqlBlockType.PROCEDURE_IMPL, "New__", true, 19465, 20069, 3);
 53.2041 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(19).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (action_ = 'PREPARE')", true, 19738, 19799, 0);
 53.2042 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(19).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSIF (action_ = 'CHECK')", true, 19803, 19879, 0);
 53.2043 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(19).getChildBlocks(), 2, PlsqlBlockType.IF, "ELSIF (action_ = 'DO')", true, 19883, 20021, 0);
 53.2044 -            assertBlock(lstBlockFac.get(9).getChildBlocks(), 20, PlsqlBlockType.PROCEDURE_IMPL, "Modify__", true, 20072, 20794, 2);
 53.2045 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(20).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (action_ = 'CHECK')", true, 20378, 20505, 0);
 53.2046 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(20).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSIF (action_ = 'DO')", true, 20509, 20743, 0);
 53.2047 -            assertBlock(lstBlockFac.get(9).getChildBlocks(), 21, PlsqlBlockType.PROCEDURE_IMPL, "Remove__", true, 20797, 21349, 2);
 53.2048 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(21).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (action_ = 'CHECK')", true, 21032, 21137, 0);
 53.2049 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(21).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSIF (action_ = 'DO')", true, 21141, 21298, 0);
 53.2050 -            assertBlock(lstBlockFac.get(9).getChildBlocks(), 22, PlsqlBlockType.COMMENT, "-- PUBLIC BASE METHODS ", true, 21351, 21804, 0);
 53.2051 -            assertBlock(lstBlockFac.get(9).getChildBlocks(), 23, PlsqlBlockType.PROCEDURE_IMPL, "Exist", true, 21806, 22027, 1);
 53.2052 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(23).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (NOT Check_Exist___(site_id_))", true, 21923, 22016, 0);
 53.2053 -            assertBlock(lstBlockFac.get(9).getChildBlocks(), 24, PlsqlBlockType.COMMENT, "-- LU SPECIFIC IMPLEMENTATION METHODS ", true, 22029, 22498, 0);
 53.2054 -            assertBlock(lstBlockFac.get(9).getChildBlocks(), 25, PlsqlBlockType.FUNCTION_IMPL, "This_Site_Exist__", true, 22500, 22907, 3);
 53.2055 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(25).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "this_site_exist", true, 22569, 22662, 0);
 53.2056 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(25).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  ( this_site_exist%FOUND )", true, 22735, 22816, 0);
 53.2057 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(25).getChildBlocks(), 2, PlsqlBlockType.IF, "ELSE", true, 22820, 22884, 0);
 53.2058 -            assertBlock(lstBlockFac.get(9).getChildBlocks(), 26, PlsqlBlockType.COMMENT, "-- LU SPECIFIC PROTECTED METHODS ", true, 22909, 23142, 0);
 53.2059 -            assertBlock(lstBlockFac.get(9).getChildBlocks(), 27, PlsqlBlockType.FUNCTION_IMPL, "Get_Timezone_Difference_", true, 23144, 24344, 5);
 53.2060 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(27).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "local", true, 23344, 23445, 0);
 53.2061 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(27).getChildBlocks(), 1, PlsqlBlockType.CURSOR, "remote", true, 23449, 23551, 0);
 53.2062 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(27).getChildBlocks(), 2, PlsqlBlockType.IF, "IF  ( site_id_ IS NULL )", true, 23635, 23828, 1);
 53.2063 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(27).getChildBlocks().get(2).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  ( local%NOTFOUND )", true, 23733, 23809, 0);
 53.2064 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(27).getChildBlocks(), 3, PlsqlBlockType.IF, "ELSE", true, 23832, 24016, 1);
 53.2065 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(27).getChildBlocks().get(3).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  ( remote%NOTFOUND )", true, 23908, 23985, 0);
 53.2066 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(27).getChildBlocks(), 4, PlsqlBlockType.IF, "IF  ( ABS(timezone_difference_) > 24 )", true, 24020, 24113, 0);
 53.2067 -            assertBlock(lstBlockFac.get(9).getChildBlocks(), 28, PlsqlBlockType.COMMENT, "-- LU SPECIFIC PUBLIC METHODS ", true, 24346, 25046, 0);
 53.2068 -            assertBlock(lstBlockFac.get(9).getChildBlocks(), 29, PlsqlBlockType.PROCEDURE_IMPL, "Init", true, 25048, 25090, 0);
 53.2069 -            assertBlock(lstBlockFac, 10, PlsqlBlockType.COMMENT, "COMMENT...", false, 25117, 25194, 0);
 53.2070 +            assertEquals(11, lstBlockFac.size());
 53.2071 +            processBlocks(plsqlFileName, lstBlockFac);
 53.2072          } finally {
 53.2073              if (fileObject != null) {
 53.2074                  fileObject.delete();
 53.2075 @@ -2079,217 +374,18 @@
 53.2076      @Test
 53.2077      public void testAdvanced11() throws IOException, BadLocationException {
 53.2078          System.out.println("Advanced test case 11");
 53.2079 -        FileObject fileObject = fs.getRoot().createData("OpPersDiaryCalculation.apy");
 53.2080 +        final String plsqlFileName = "OpPersDiaryCalculation.apy";
 53.2081 +        FileObject fileObject = fs.getRoot().createData(plsqlFileName);
 53.2082          assertNotNull(fileObject);
 53.2083          try {
 53.2084 -            PlsqlBlockFactory blockFac = loadAsTmpFile(fileObject, "OpPersDiaryCalculation.apy");
 53.2085 +            PlsqlBlockFactory blockFac = loadAsTmpFile(fileObject, plsqlFileName);
 53.2086              assertNotNull(blockFac);
 53.2087  
 53.2088              List<PlsqlBlock> lstBlockFac = blockFac.getBlockHierarchy();
 53.2089  //         printHierarchy(lstBlockFac, "");
 53.2090  //         generateAssert(lstBlockFac, "lstBlockFac", "false");
 53.2091 -            assertTrue(lstBlockFac.size() == 4);
 53.2092 -            assertBlock(lstBlockFac, 0, PlsqlBlockType.COMMENT, "-- Logical unit: OpPersDiaryCalculation", false, 0, 631, 0);
 53.2093 -            assertBlock(lstBlockFac, 1, PlsqlBlockType.COMMENT, "-- PACKAGES FOR METHODS ", false, 764, 997, 0);
 53.2094 -            assertBlock(lstBlockFac, 2, PlsqlBlockType.PACKAGE_BODY, "OP_PERS_DIARY_CALCULATION_API", false, 1036, 36964, 30);
 53.2095 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- Private types", true, 1196, 1362, 0);
 53.2096 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 1, PlsqlBlockType.COMMENT, "-- Global variables", true, 1521, 1690, 0);
 53.2097 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 2, PlsqlBlockType.COMMENT, "-- LU SPECIFIC IMPLEMENTATION METHOD DECLARATIONS ", true, 1957, 2190, 0);
 53.2098 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 3, PlsqlBlockType.PROCEDURE_DEF, "Calculate_Op_Hours___", true, 2192, 2379, 0);
 53.2099 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 4, PlsqlBlockType.PROCEDURE_DEF, "Convert_Group_Operations___", true, 2382, 2472, 0);
 53.2100 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 5, PlsqlBlockType.PROCEDURE_DEF, "Do_Wage_Rounding___", true, 2475, 2625, 0);
 53.2101 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 6, PlsqlBlockType.PROCEDURE_DEF, "Get_Diary___", true, 2628, 2703, 0);
 53.2102 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 7, PlsqlBlockType.PROCEDURE_DEF, "Get_Op_Data___", true, 2706, 2893, 0);
 53.2103 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 8, PlsqlBlockType.PROCEDURE_DEF, "Remove_Result___", true, 2896, 2964, 0);
 53.2104 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 9, PlsqlBlockType.PROCEDURE_DEF, "Save_Result___", true, 2967, 3033, 0);
 53.2105 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 10, PlsqlBlockType.PROCEDURE_DEF, "Set_Op_Error___", true, 3036, 3103, 0);
 53.2106 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 11, PlsqlBlockType.PROCEDURE_DEF, "Set_Op_Error_Labor___", true, 3108, 3181, 0);
 53.2107 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 12, PlsqlBlockType.PROCEDURE_DEF, "Update_Diary___", true, 3184, 3295, 0);
 53.2108 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 13, PlsqlBlockType.COMMENT, "-- LU SPECIFIC IMPLEMENTATION METHODS ", true, 3299, 3532, 0);
 53.2109 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 14, PlsqlBlockType.PROCEDURE_IMPL, "Calculate_Op_Hours___", true, 3534, 10949, 9);
 53.2110 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(14).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "BLOCK COMMENT", true, 4303, 4378, 0);
 53.2111 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(14).getChildBlocks(), 1, PlsqlBlockType.COMMENT, "BLOCK COMMENT", true, 4382, 4457, 0);
 53.2112 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(14).getChildBlocks(), 2, PlsqlBlockType.COMMENT, "BLOCK COMMENT", true, 4461, 4536, 0);
 53.2113 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(14).getChildBlocks(), 3, PlsqlBlockType.IF, "IF  op_diary_.reg_status = reg_status_.done", true, 4596, 4885, 1);
 53.2114 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(14).getChildBlocks().get(3).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (time_pers_diary_api.Reporting_Complete(op_diary_.company_id,  op_diary_.emp_no, \n            op_diary_.account_date, op_diary_.reg_status) = 'TRUE')", true, 4650, 4874, 0);
 53.2115 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(14).getChildBlocks(), 4, PlsqlBlockType.FOR_LOOP, "i_ IN 1 .. op_diary_.clocking.row_count", true, 4889, 5244, 1);
 53.2116 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(14).getChildBlocks().get(4).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  op_diary_.clocking.org_code(i_) IS NULL", true, 5107, 5231, 0);
 53.2117 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(14).getChildBlocks(), 5, PlsqlBlockType.COMMENT, "BLOCK COMMENT", true, 5248, 5323, 0);
 53.2118 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(14).getChildBlocks(), 6, PlsqlBlockType.COMMENT, "BLOCK COMMENT", true, 5327, 5402, 0);
 53.2119 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(14).getChildBlocks(), 7, PlsqlBlockType.COMMENT, "BLOCK COMMENT", true, 5406, 5481, 0);
 53.2120 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(14).getChildBlocks(), 8, PlsqlBlockType.WHILE_LOOP, "min_in_time_ < max_out_time_", true, 5521, 10922, 3);
 53.2121 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(14).getChildBlocks().get(8).getChildBlocks(), 0, PlsqlBlockType.FOR_LOOP, "i_ IN 1 .. op_diary_.clocking.row_count", true, 5604, 5836, 1);
 53.2122 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(14).getChildBlocks().get(8).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  min_in_time_ < op_diary_.clocking.stop_stamp(i_)", true, 5662, 5820, 0);
 53.2123 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(14).getChildBlocks().get(8).getChildBlocks(), 1, PlsqlBlockType.FOR_LOOP, "i_ IN 1 .. op_diary_.clocking.row_count", true, 5907, 6383, 1);
 53.2124 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(14).getChildBlocks().get(8).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  min_in_time_ < op_diary_.clocking.stop_stamp(i_)", true, 5965, 6367, 2);
 53.2125 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(14).getChildBlocks().get(8).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  cur_in_time_ = op_diary_.clocking.start_stamp(i_)", true, 6034, 6223, 0);
 53.2126 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(14).getChildBlocks().get(8).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSE", true, 6236, 6350, 0);
 53.2127 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(14).getChildBlocks().get(8).getChildBlocks(), 2, PlsqlBlockType.FOR_LOOP, "i_ IN 1 .. op_diary_.clocking.row_count", true, 6427, 10872, 1);
 53.2128 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(14).getChildBlocks().get(8).getChildBlocks().get(2).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  cur_in_time_ = op_diary_.clocking.start_stamp(i_) AND\n            cur_in_time_ < op_diary_.clocking.stop_stamp(i_)", true, 6485, 10856, 1);
 53.2129 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(14).getChildBlocks().get(8).getChildBlocks().get(2).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.FOR_LOOP, "j_ IN 1 .. pers_diary_.result.row_count", true, 6854, 10774, 3);
 53.2130 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(14).getChildBlocks().get(8).getChildBlocks().get(2).getChildBlocks().get(0).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  wage_grp_ IN (wage_group_.normal, wage_group_.overtime, wage_group_.extra, wage_group_.increment, wage_group_.balance_accrual, wage_group_.info)", true, 7322, 7764, 1);
 53.2131 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(14).getChildBlocks().get(8).getChildBlocks().get(2).getChildBlocks().get(0).getChildBlocks().get(0).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  NOT pers_diary_.result.wage_hol(j_)", true, 7493, 7764, 1);
 53.2132 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(14).getChildBlocks().get(8).getChildBlocks().get(2).getChildBlocks().get(0).getChildBlocks().get(0).getChildBlocks().get(0).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  in_time_ < out_time_", true, 7558, 7738, 0);
 53.2133 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(14).getChildBlocks().get(8).getChildBlocks().get(2).getChildBlocks().get(0).getChildBlocks().get(0).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSIF wage_grp_ = wage_group_.balance_withdrawal", true, 7780, 8930, 3);
 53.2134 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(14).getChildBlocks().get(8).getChildBlocks().get(2).getChildBlocks().get(0).getChildBlocks().get(0).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- Bug 64820, Begin", true, 7852, 7871, 0);
 53.2135 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(14).getChildBlocks().get(8).getChildBlocks().get(2).getChildBlocks().get(0).getChildBlocks().get(0).getChildBlocks().get(1).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  in_time_ < out_time_", true, 7890, 8871, 1);
 53.2136 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(14).getChildBlocks().get(8).getChildBlocks().get(2).getChildBlocks().get(0).getChildBlocks().get(0).getChildBlocks().get(1).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.FOR_LOOP, "k_ IN 1 .. pers_diary_.result.row_count", true, 7940, 8845, 1);
 53.2137 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(14).getChildBlocks().get(8).getChildBlocks().get(2).getChildBlocks().get(0).getChildBlocks().get(0).getChildBlocks().get(1).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  pers_wage_grp_ = wage_group_.normal AND\n                           in_time_  < pers_diary_.result.wage_ttime(k_) AND\n                           out_time_ > pers_diary_.result.wage_ftime(k_) AND\n                           pers_diary_.result.wage_hours(k_) > 0.005", true, 8088, 8814, 0);
 53.2138 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(14).getChildBlocks().get(8).getChildBlocks().get(2).getChildBlocks().get(0).getChildBlocks().get(0).getChildBlocks().get(1).getChildBlocks(), 2, PlsqlBlockType.COMMENT, "-- Bug 64820, End", true, 8890, 8907, 0);
 53.2139 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(14).getChildBlocks().get(8).getChildBlocks().get(2).getChildBlocks().get(0).getChildBlocks().get(0).getChildBlocks(), 2, PlsqlBlockType.IF, "IF  wage_hours_ > 0.005 OR wage_hours_ < -0.005", true, 8946, 10752, 2);
 53.2140 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(14).getChildBlocks().get(8).getChildBlocks().get(2).getChildBlocks().get(0).getChildBlocks().get(0).getChildBlocks().get(2).getChildBlocks(), 0, PlsqlBlockType.FOR_LOOP, "k_ IN 1 .. op_diary_.result.row_count", true, 9044, 9639, 1);
 53.2141 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(14).getChildBlocks().get(8).getChildBlocks().get(2).getChildBlocks().get(0).getChildBlocks().get(0).getChildBlocks().get(2).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  op_id_     = op_diary_.result.op_id(k_) AND\n                        info_code_ = op_diary_.result.info_code(k_) AND\n                        mch_code_  = op_diary_.result.mch_code(k_) AND\n                        org_code_  = op_diary_.result.org_code(k_) AND\n                        wage_grp_  = op_diary_.result.wage_group(k_) AND\n                        wage_code_ = op_diary_.result.wage_code(k_)", true, 9112, 9611, 0);
 53.2142 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(14).getChildBlocks().get(8).getChildBlocks().get(2).getChildBlocks().get(0).getChildBlocks().get(0).getChildBlocks().get(2).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  w_ < 0", true, 9658, 10615, 0);
 53.2143 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 15, PlsqlBlockType.PROCEDURE_IMPL, "Convert_Group_Operations___", true, 10952, 13524, 2);
 53.2144 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(15).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "Get_Operations", true, 11287, 11575, 0);
 53.2145 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(15).getChildBlocks(), 1, PlsqlBlockType.FOR_LOOP, "i_ IN 1 .. cnt_", true, 11624, 13491, 1);
 53.2146 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(15).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  grp_count_ > 0", true, 11953, 13478, 3);
 53.2147 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(15).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.FOR_LOOP, "j_ IN 1 .. grp_count_", true, 12013, 12122, 0);
 53.2148 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(15).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  sum_hours_ < 0.005", true, 12132, 12395, 2);
 53.2149 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(15).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "BLOCK COMMENT", true, 12171, 12221, 0);
 53.2150 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(15).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks().get(1).getChildBlocks(), 1, PlsqlBlockType.FOR_LOOP, "j_ IN 1 .. grp_count_", true, 12234, 12329, 0);
 53.2151 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(15).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks(), 2, PlsqlBlockType.FOR_LOOP, "j_ IN 1 .. grp_count_", true, 12405, 13415, 0);
 53.2152 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 16, PlsqlBlockType.PROCEDURE_IMPL, "Do_Wage_Rounding___", true, 13527, 18839, 5);
 53.2153 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(16).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  NOT op_diary_.do_update", true, 13951, 14075, 0);
 53.2154 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(16).getChildBlocks(), 1, PlsqlBlockType.COMMENT, "BLOCK COMMENT", true, 14079, 14154, 0);
 53.2155 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(16).getChildBlocks(), 2, PlsqlBlockType.COMMENT, "BLOCK COMMENT", true, 14158, 14233, 0);
 53.2156 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(16).getChildBlocks(), 3, PlsqlBlockType.COMMENT, "BLOCK COMMENT", true, 14237, 14312, 0);
 53.2157 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(16).getChildBlocks(), 4, PlsqlBlockType.FOR_LOOP, "i_ IN 1 .. pers_diary_.result.row_count", true, 14316, 18814, 1);
 53.2158 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(16).getChildBlocks().get(4).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  pers_diary_.result.wage_hours(i_) != 0 AND\n         NOT pers_diary_.result.wage_hol(i_)", true, 14371, 18801, 15);
 53.2159 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(16).getChildBlocks().get(4).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.FOR_LOOP, "j_ IN 1 .. pers_diary_.result.row_count", true, 14622, 14981, 1);
 53.2160 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(16).getChildBlocks().get(4).getChildBlocks().get(0).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  pers_diary_.result.wage_grp(j_)  = wage_grp_ AND\n               pers_diary_.result.wage_code(j_) = wage_code_ AND\n               NOT pers_diary_.result.wage_hol(j_)", true, 14683, 14962, 0);
 53.2161 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(16).getChildBlocks().get(4).getChildBlocks().get(0).getChildBlocks(), 1, PlsqlBlockType.FOR_LOOP, "j_ IN 1 .. op_diary_.result.row_count", true, 15022, 15316, 1);
 53.2162 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(16).getChildBlocks().get(4).getChildBlocks().get(0).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  op_diary_.result.wage_group(j_) = wage_grp_ AND\n               op_diary_.result.wage_code(j_)  = wage_code_", true, 15081, 15297, 0);
 53.2163 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(16).getChildBlocks().get(4).getChildBlocks().get(0).getChildBlocks(), 2, PlsqlBlockType.COMMENT, "BLOCK COMMENT", true, 15326, 15401, 0);
 53.2164 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(16).getChildBlocks().get(4).getChildBlocks().get(0).getChildBlocks(), 3, PlsqlBlockType.COMMENT, "BLOCK COMMENT", true, 15411, 15486, 0);
 53.2165 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(16).getChildBlocks().get(4).getChildBlocks().get(0).getChildBlocks(), 4, PlsqlBlockType.COMMENT, "BLOCK COMMENT", true, 15496, 15571, 0);
 53.2166 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(16).getChildBlocks().get(4).getChildBlocks().get(0).getChildBlocks(), 5, PlsqlBlockType.IF, "IF  pers_sum_hours_ - op_sum_hours_ < 0.011", true, 15619, 16150, 1);
 53.2167 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(16).getChildBlocks().get(4).getChildBlocks().get(0).getChildBlocks().get(5).getChildBlocks(), 0, PlsqlBlockType.FOR_LOOP, "j_ IN 1 .. op_diary_.result.row_count", true, 15710, 16133, 1);
 53.2168 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(16).getChildBlocks().get(4).getChildBlocks().get(0).getChildBlocks().get(5).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  op_diary_.result.wage_group(j_) = wage_grp_ AND\n                  op_diary_.result.wage_code(j_)  = wage_code_", true, 15772, 16111, 0);
 53.2169 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(16).getChildBlocks().get(4).getChildBlocks().get(0).getChildBlocks(), 6, PlsqlBlockType.COMMENT, "BLOCK COMMENT", true, 16208, 16283, 0);
 53.2170 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(16).getChildBlocks().get(4).getChildBlocks().get(0).getChildBlocks(), 7, PlsqlBlockType.COMMENT, "BLOCK COMMENT", true, 16293, 16368, 0);
 53.2171 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(16).getChildBlocks().get(4).getChildBlocks().get(0).getChildBlocks(), 8, PlsqlBlockType.COMMENT, "BLOCK COMMENT", true, 16378, 16453, 0);
 53.2172 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(16).getChildBlocks().get(4).getChildBlocks().get(0).getChildBlocks(), 9, PlsqlBlockType.FOR_LOOP, "j_ IN 1 .. op_diary_.result.row_count", true, 16491, 16995, 1);
 53.2173 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(16).getChildBlocks().get(4).getChildBlocks().get(0).getChildBlocks().get(9).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  op_diary_.result.wage_group(j_) = wage_grp_ AND\n               op_diary_.result.wage_code(j_)  = wage_code_", true, 16550, 16976, 0);
 53.2174 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(16).getChildBlocks().get(4).getChildBlocks().get(0).getChildBlocks(), 10, PlsqlBlockType.COMMENT, "BLOCK COMMENT", true, 17057, 17132, 0);
 53.2175 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(16).getChildBlocks().get(4).getChildBlocks().get(0).getChildBlocks(), 11, PlsqlBlockType.COMMENT, "BLOCK COMMENT", true, 17142, 17217, 0);
 53.2176 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(16).getChildBlocks().get(4).getChildBlocks().get(0).getChildBlocks(), 12, PlsqlBlockType.COMMENT, "BLOCK COMMENT", true, 17227, 17302, 0);
 53.2177 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(16).getChildBlocks().get(4).getChildBlocks().get(0).getChildBlocks(), 13, PlsqlBlockType.WHILE_LOOP, "diff_hours_ < -0.001", true, 17312, 18045, 1);
 53.2178 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(16).getChildBlocks().get(4).getChildBlocks().get(0).getChildBlocks().get(13).getChildBlocks(), 0, PlsqlBlockType.FOR_LOOP, "j_ IN 1 .. op_diary_.result.row_count", true, 17377, 17839, 1);
 53.2179 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(16).getChildBlocks().get(4).getChildBlocks().get(0).getChildBlocks().get(13).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  op_diary_.result.wage_group(j_) = wage_grp_ AND\n                  op_diary_.result.wage_code(j_)  = wage_code_", true, 17439, 17817, 2);
 53.2180 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(16).getChildBlocks().get(4).getChildBlocks().get(0).getChildBlocks().get(13).getChildBlocks().get(0).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  w_ = 0", true, 17576, 17621, 0);
 53.2181 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(16).getChildBlocks().get(4).getChildBlocks().get(0).getChildBlocks().get(13).getChildBlocks().get(0).getChildBlocks().get(0).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSE", true, 17640, 17794, 1);
 53.2182 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(16).getChildBlocks().get(4).getChildBlocks().get(0).getChildBlocks().get(13).getChildBlocks().get(0).getChildBlocks().get(0).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  wage_diff_(j_) < wage_diff_(w_)", true, 17666, 17768, 0);
 53.2183 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(16).getChildBlocks().get(4).getChildBlocks().get(0).getChildBlocks(), 14, PlsqlBlockType.WHILE_LOOP, "diff_hours_ > 0.001", true, 18055, 18787, 1);
 53.2184 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(16).getChildBlocks().get(4).getChildBlocks().get(0).getChildBlocks().get(14).getChildBlocks(), 0, PlsqlBlockType.FOR_LOOP, "j_ IN 1 .. op_diary_.result.row_count", true, 18119, 18581, 1);
 53.2185 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(16).getChildBlocks().get(4).getChildBlocks().get(0).getChildBlocks().get(14).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  op_diary_.result.wage_group(j_) = wage_grp_ AND\n                  op_diary_.result.wage_code(j_)  = wage_code_", true, 18181, 18559, 2);
 53.2186 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(16).getChildBlocks().get(4).getChildBlocks().get(0).getChildBlocks().get(14).getChildBlocks().get(0).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  w_ = 0", true, 18318, 18363, 0);
 53.2187 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(16).getChildBlocks().get(4).getChildBlocks().get(0).getChildBlocks().get(14).getChildBlocks().get(0).getChildBlocks().get(0).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSE", true, 18382, 18536, 1);
 53.2188 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(16).getChildBlocks().get(4).getChildBlocks().get(0).getChildBlocks().get(14).getChildBlocks().get(0).getChildBlocks().get(0).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  wage_diff_(j_) > wage_diff_(w_)", true, 18408, 18510, 0);
 53.2189 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 17, PlsqlBlockType.PROCEDURE_IMPL, "Get_Diary___", true, 18842, 24867, 24);
 53.2190 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(17).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "Get_Diary", true, 19013, 19333, 0);
 53.2191 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(17).getChildBlocks(), 1, PlsqlBlockType.CURSOR, "Get_Clockings", true, 19337, 19925, 0);
 53.2192 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(17).getChildBlocks(), 2, PlsqlBlockType.COMMENT, "-- FOR UPDATE OF rowversion NOWAIT;", true, 19932, 19966, 0);
 53.2193 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(17).getChildBlocks(), 3, PlsqlBlockType.CURSOR, "Get_Result", true, 19970, 20220, 0);
 53.2194 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(17).getChildBlocks(), 4, PlsqlBlockType.COMMENT, "BLOCK COMMENT", true, 20230, 20305, 0);
 53.2195 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(17).getChildBlocks(), 5, PlsqlBlockType.COMMENT, "BLOCK COMMENT", true, 20309, 20384, 0);
 53.2196 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(17).getChildBlocks(), 6, PlsqlBlockType.COMMENT, "BLOCK COMMENT", true, 20388, 20463, 0);
 53.2197 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(17).getChildBlocks(), 7, PlsqlBlockType.IF, "IF  NOT found_", true, 20825, 20939, 0);
 53.2198 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(17).getChildBlocks(), 8, PlsqlBlockType.IF, "IF  op_diary_.auth_id = 1", true, 20943, 21005, 0);
 53.2199 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(17).getChildBlocks(), 9, PlsqlBlockType.IF, "IF  op_diary_.reg_status = reg_status_.OPEN", true, 21009, 21088, 0);
 53.2200 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(17).getChildBlocks(), 10, PlsqlBlockType.IF, "IF  op_diary_.reg_status = reg_status_.ready", true, 21092, 21186, 0);
 53.2201 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(17).getChildBlocks(), 11, PlsqlBlockType.IF, "IF  op_diary_.reg_status = reg_status_.modified", true, 21190, 21274, 0);
 53.2202 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(17).getChildBlocks(), 12, PlsqlBlockType.COMMENT, "COMMENT...", true, 21278, 21280, 0);
 53.2203 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(17).getChildBlocks(), 13, PlsqlBlockType.COMMENT, "COMMENT...", true, 21832, 21834, 0);
 53.2204 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(17).getChildBlocks(), 14, PlsqlBlockType.COMMENT, "BLOCK COMMENT", true, 22137, 22212, 0);
 53.2205 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(17).getChildBlocks(), 15, PlsqlBlockType.COMMENT, "BLOCK COMMENT", true, 22216, 22291, 0);
 53.2206 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(17).getChildBlocks(), 16, PlsqlBlockType.COMMENT, "BLOCK COMMENT", true, 22295, 22370, 0);
 53.2207 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(17).getChildBlocks(), 17, PlsqlBlockType.COMMENT, "BLOCK COMMENT", true, 22374, 22449, 0);
 53.2208 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(17).getChildBlocks(), 18, PlsqlBlockType.FOR_LOOP, "i_ IN 1 .. op_diary_.clocking.row_count", true, 22479, 24358, 4);
 53.2209 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(17).getChildBlocks().get(18).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  op_diary_.clocking.start_stamp(i_) - op_diary_.clocking.stop_stamp(i_) > 0.001 AND\n         test_active_(Time_Reg_Error_API.CD_OVERLAP)", true, 22534, 22778, 0);
 53.2210 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(17).getChildBlocks().get(18).getChildBlocks(), 1, PlsqlBlockType.FOR_LOOP, "j_ IN  i_+1 .. op_diary_.clocking.row_count", true, 22785, 24124, 1);
 53.2211 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(17).getChildBlocks().get(18).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  ((op_diary_.clocking.op_id(i_) = op_diary_.clocking.op_id(j_)) AND\n            (op_diary_.clocking.info_code(i_) = op_diary_.clocking.info_code(j_)) AND\n            (op_diary_.clocking.mch_code(i_)  = op_diary_.clocking.mch_code(j_)) )", true, 22847, 24108, 2);
 53.2212 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(17).getChildBlocks().get(18).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (op_diary_.clocking.labor_class_no(i_) != op_diary_.clocking.labor_class_no(j_))", true, 23103, 23402, 0);
 53.2213 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(17).getChildBlocks().get(18).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  (op_diary_.clocking.work_center_no(i_) != op_diary_.clocking.work_center_no(j_))", true, 23415, 24090, 3);
 53.2214 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(17).getChildBlocks().get(18).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- Bug 61149, start", true, 23519, 23537, 0);
 53.2215 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(17).getChildBlocks().get(18).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks().get(1).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  (Op_Machine_Api.Work_Center_Exists(op_diary_.clocking.contract(i_), op_diary_.clocking.work_center_no(i_))='TRUE') AND \n                  (Op_Machine_Api.Work_Center_Exists(op_diary_.clocking.contract(j_), op_diary_.clocking.work_center_no(j_))='TRUE')", true, 23553, 24038, 0);
 53.2216 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(17).getChildBlocks().get(18).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks().get(1).getChildBlocks(), 2, PlsqlBlockType.COMMENT, "-- Bug 61149, end", true, 24054, 24070, 0);
 53.2217 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(17).getChildBlocks().get(18).getChildBlocks(), 2, PlsqlBlockType.IF, "IF  (NOT (error_exist_))", true, 24131, 24253, 0);
 53.2218 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(17).getChildBlocks().get(18).getChildBlocks(), 3, PlsqlBlockType.IF, "IF  (op_diary_.clocking.error_no(i_) != 0)", true, 24260, 24345, 0);
 53.2219 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(17).getChildBlocks(), 19, PlsqlBlockType.IF, "IF  block_ AND op_diary_.do_update", true, 24362, 24511, 0);
 53.2220 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(17).getChildBlocks(), 20, PlsqlBlockType.IF, "IF  skip_", true, 24515, 24580, 0);
 53.2221 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(17).getChildBlocks(), 21, PlsqlBlockType.IF, "IF  block_", true, 24584, 24686, 0);
 53.2222 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(17).getChildBlocks(), 22, PlsqlBlockType.IF, "IF  op_diary_.clocking.row_count > 0", true, 24690, 24776, 0);
 53.2223 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(17).getChildBlocks(), 23, PlsqlBlockType.IF, "IF  op_diary_.clocking.row_count = 0", true, 24780, 24849, 0);
 53.2224 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 18, PlsqlBlockType.PROCEDURE_IMPL, "Get_Op_Data___", true, 24870, 27367, 4);
 53.2225 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(18).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "Get_Calc_Param", true, 25307, 25548, 0);
 53.2226 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(18).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  work_sched_.rule_type IS NOT NULL", true, 25941, 26114, 0);
 53.2227 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(18).getChildBlocks(), 2, PlsqlBlockType.IF, "IF  calc_param_type_ IS NOT NULL", true, 26182, 26563, 1);
 53.2228 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(18).getChildBlocks().get(2).getChildBlocks(), 0, PlsqlBlockType.FOR_LOOP, "p_ IN Get_Calc_Param", true, 26225, 26552, 3);
 53.2229 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(18).getChildBlocks().get(2).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.CASE, "CASE  p_.param_label\n         WHEN time_param_label_.min_op_diff", true, 26264, 26384, 0);
 53.2230 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(18).getChildBlocks().get(2).getChildBlocks().get(0).getChildBlocks(), 1, PlsqlBlockType.CASE, "WHEN time_param_label_.max_op_diff", true, 26394, 26485, 0);
 53.2231 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(18).getChildBlocks().get(2).getChildBlocks().get(0).getChildBlocks(), 2, PlsqlBlockType.CASE, "ELSE", true, 26495, 26536, 0);
 53.2232 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(18).getChildBlocks(), 3, PlsqlBlockType.FOR_LOOP, "i_ IN 1 .. pers_diary_.result.row_count", true, 26602, 27282, 1);
 53.2233 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(18).getChildBlocks().get(3).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  wage_hours_ > 0.001 OR wage_hours_ < -0.001", true, 26713, 27269, 2);
 53.2234 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(18).getChildBlocks().get(3).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  wage_grp_ IN (wage_group_.normal, wage_group_.overtime, wage_group_.extra, wage_group_.balance_accrual)", true, 26829, 27097, 1);
 53.2235 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(18).getChildBlocks().get(3).getChildBlocks().get(0).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  NOT pers_diary_.result.wage_hol(i_)", true, 26953, 27097, 0);
 53.2236 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(18).getChildBlocks().get(3).getChildBlocks().get(0).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSIF wage_grp_ = wage_group_.balance_withdrawal", true, 27107, 27255, 0);
 53.2237 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 19, PlsqlBlockType.PROCEDURE_IMPL, "Remove_Result___", true, 27370, 27700, 1);
 53.2238 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(19).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  op_diary_.result.row_count_read > 0 AND op_diary_.do_update", true, 27450, 27678, 1);
 53.2239 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(19).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "DELETE", true, 27580, 27666, 0);
 53.2240 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 20, PlsqlBlockType.PROCEDURE_IMPL, "Save_Result___", true, 27703, 29051, 1);
 53.2241 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(20).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  op_diary_.result.row_count > 0", true, 27781, 29031, 1);
 53.2242 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(20).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "INSERT", true, 27877, 29019, 0);
 53.2243 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 21, PlsqlBlockType.PROCEDURE_IMPL, "Set_Op_Error___", true, 29054, 29738, 1);
 53.2244 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(21).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  op_diary_.clocking.row_count > 0", true, 29167, 29671, 3);
 53.2245 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(21).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- Bug 61149, start", true, 29214, 29232, 0);
 53.2246 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(21).getChildBlocks().get(0).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  op_diary_.error_no IS NOT NULL", true, 29239, 29637, 1);
 53.2247 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(21).getChildBlocks().get(0).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "UPDATE op_clocking_tab", true, 29346, 29605, 0);
 53.2248 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(21).getChildBlocks().get(0).getChildBlocks(), 2, PlsqlBlockType.COMMENT, "-- Bug 61149, end", true, 29644, 29660, 0);
 53.2249 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 22, PlsqlBlockType.PROCEDURE_IMPL, "Set_Op_Error_Labor___", true, 29740, 30401, 1);
 53.2250 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(22).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  op_diary_.clocking.row_count > 0", true, 29859, 30328, 3);
 53.2251 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(22).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- Bug 61149, start", true, 29906, 29924, 0);
 53.2252 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(22).getChildBlocks().get(0).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  op_diary_.error_no IS NOT NULL", true, 29931, 30294, 1);
 53.2253 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(22).getChildBlocks().get(0).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "UPDATE op_clocking_tab", true, 30038, 30262, 0);
 53.2254 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(22).getChildBlocks().get(0).getChildBlocks(), 2, PlsqlBlockType.COMMENT, "-- Bug 61149, end", true, 30301, 30317, 0);
 53.2255 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 23, PlsqlBlockType.PROCEDURE_IMPL, "Update_Diary___", true, 30404, 31869, 7);
 53.2256 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(23).getChildBlocks(), 0, PlsqlBlockType.FOR_LOOP, "w_ IN 1 .. op_diary_.result.row_count", true, 30801, 31083, 1);
 53.2257 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(23).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  op_diary_.result.wage_group(w_) IN (wage_group_.normal, wage_group_.overtime, wage_group_.balance_accrual, wage_group_.extra)", true, 30854, 31070, 0);
 53.2258 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(23).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  op_diary_.clocking.row_count > 0", true, 31132, 31337, 1);
 53.2259 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(23).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "UPDATE op_pers_diary_tab", true, 31179, 31325, 0);
 53.2260 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(23).getChildBlocks(), 2, PlsqlBlockType.COMMENT, "BLOCK COMMENT", true, 31341, 31416, 0);
 53.2261 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(23).getChildBlocks(), 3, PlsqlBlockType.COMMENT, "BLOCK COMMENT", true, 31420, 31495, 0);
 53.2262 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(23).getChildBlocks(), 4, PlsqlBlockType.COMMENT, "BLOCK COMMENT", true, 31499, 31574, 0);
 53.2263 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(23).getChildBlocks(), 5, PlsqlBlockType.COMMENT, "BLOCK COMMENT", true, 31578, 31653, 0);
 53.2264 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(23).getChildBlocks(), 6, PlsqlBlockType.IF, "IF  op_diary_.error_no != 0 AND op_diary_.clocking.row_count_read > 0", true, 31657, 31848, 0);
 53.2265 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 24, PlsqlBlockType.COMMENT, "-- LU SPECIFIC PRIVATE METHODS ", true, 31873, 32106, 0);
 53.2266 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 25, PlsqlBlockType.PROCEDURE_IMPL, "Calculate_Op__", true, 32108, 35044, 21);
 53.2267 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(25).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "BLOCK COMMENT", true, 32346, 32421, 0);
 53.2268 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(25).getChildBlocks(), 1, PlsqlBlockType.COMMENT, "BLOCK COMMENT", true, 32425, 32500, 0);
 53.2269 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(25).getChildBlocks(), 2, PlsqlBlockType.COMMENT, "BLOCK COMMENT", true, 32504, 32579, 0);
 53.2270 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(25).getChildBlocks(), 3, PlsqlBlockType.COMMENT, "BLOCK COMMENT", true, 32837, 32912, 0);
 53.2271 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(25).getChildBlocks(), 4, PlsqlBlockType.COMMENT, "BLOCK COMMENT", true, 32916, 32991, 0);
 53.2272 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(25).getChildBlocks(), 5, PlsqlBlockType.COMMENT, "BLOCK COMMENT", true, 32995, 33070, 0);
 53.2273 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(25).getChildBlocks(), 6, PlsqlBlockType.COMMENT, "BLOCK COMMENT", true, 33155, 33230, 0);
 53.2274 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(25).getChildBlocks(), 7, PlsqlBlockType.COMMENT, "BLOCK COMMENT", true, 33234, 33309, 0);
 53.2275 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(25).getChildBlocks(), 8, PlsqlBlockType.COMMENT, "BLOCK COMMENT", true, 33313, 33388, 0);
 53.2276 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(25).getChildBlocks(), 9, PlsqlBlockType.COMMENT, "BLOCK COMMENT", true, 33543, 33618, 0);
 53.2277 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(25).getChildBlocks(), 10, PlsqlBlockType.COMMENT, "BLOCK COMMENT", true, 33622, 33697, 0);
 53.2278 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(25).getChildBlocks(), 11, PlsqlBlockType.COMMENT, "BLOCK COMMENT", true, 33701, 33776, 0);
 53.2279 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(25).getChildBlocks(), 12, PlsqlBlockType.COMMENT, "BLOCK COMMENT", true, 33883, 33958, 0);
 53.2280 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(25).getChildBlocks(), 13, PlsqlBlockType.COMMENT, "BLOCK COMMENT", true, 33962, 34037, 0);
 53.2281 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(25).getChildBlocks(), 14, PlsqlBlockType.COMMENT, "BLOCK COMMENT", true, 34041, 34116, 0);
 53.2282 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(25).getChildBlocks(), 15, PlsqlBlockType.IF, "IF  history_enabled_", true, 34120, 34194, 0);
 53.2283 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(25).getChildBlocks(), 16, PlsqlBlockType.IF, "IF  history_enabled_", true, 34266, 34346, 0);
 53.2284 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(25).getChildBlocks(), 17, PlsqlBlockType.IF, "IF  history_enabled_", true, 34413, 34493, 0);
 53.2285 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(25).getChildBlocks(), 18, PlsqlBlockType.IF, "IF  history_enabled_", true, 34594, 34674, 0);
 53.2286 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(25).getChildBlocks(), 19, PlsqlBlockType.IF, "IF  test_active_(Time_Reg_Error_API.CD_ORACLE)", true, 34775, 34937, 0);
 53.2287 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(25).getChildBlocks(), 20, PlsqlBlockType.IF, "IF  history_enabled_", true, 34944, 35024, 0);
 53.2288 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 26, PlsqlBlockType.FUNCTION_IMPL, "Get_Op_Clocking_Count__", true, 35047, 35503, 0);
 53.2289 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 27, PlsqlBlockType.COMMENT, "-- LU SPECIFIC PROTECTED METHODS ", true, 35507, 36443, 0);
 53.2290 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 28, PlsqlBlockType.PROCEDURE_IMPL, "Init", true, 36445, 36487, 0);
 53.2291 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 29, PlsqlBlockType.COMMENT, "-- Initialize", true, 36488, 36649, 0);
 53.2292 -            assertBlock(lstBlockFac, 3, PlsqlBlockType.COMMENT, "COMMENT...", false, 37022, 37099, 0);
 53.2293 +            assertEquals(4, lstBlockFac.size());
 53.2294 +            processBlocks(plsqlFileName, lstBlockFac);
 53.2295          } finally {
 53.2296              if (fileObject != null) {
 53.2297                  fileObject.delete();
 53.2298 @@ -2300,950 +396,18 @@
 53.2299      @Test
 53.2300      public void testAdvanced12() throws IOException, BadLocationException {
 53.2301          System.out.println("Advanced test case 12");
 53.2302 -        FileObject fileObject = fs.getRoot().createData("ScorecardInputValue.apy");
 53.2303 +        final String plsqlFileName = "ScorecardInputValue.apy";
 53.2304 +        FileObject fileObject = fs.getRoot().createData(plsqlFileName);
 53.2305          assertNotNull(fileObject);
 53.2306          try {
 53.2307 -            PlsqlBlockFactory blockFac = loadAsTmpFile(fileObject, "ScorecardInputValue.apy");
 53.2308 +            PlsqlBlockFactory blockFac = loadAsTmpFile(fileObject, plsqlFileName);
 53.2309              assertNotNull(blockFac);
 53.2310  
 53.2311              List<PlsqlBlock> lstBlockFac = blockFac.getBlockHierarchy();
 53.2312  //         printHierarchy(lstBlockFac, "");
 53.2313  //         generateAssert(lstBlockFac, "lstBlockFac", "false");
 53.2314 -            assertTrue(lstBlockFac.size() == 22);
 53.2315 -            assertBlock(lstBlockFac, 0, PlsqlBlockType.COMMENT, "-- Logical unit: ScorecardInputValue", false, 0, 9500, 0);
 53.2316 -            assertBlock(lstBlockFac, 1, PlsqlBlockType.COMMENT, "-- VIEWS FOR SELECTS ", false, 10185, 10418, 0);
 53.2317 -            assertBlock(lstBlockFac, 2, PlsqlBlockType.VIEW, "SCORECARD_INPUT_VALUE", false, 10448, 12414, 0);
 53.2318 -            assertBlock(lstBlockFac, 3, PlsqlBlockType.TABLE_COMMENT, "SCORECARD_INPUT_VALUE", false, 12417, 12499, 0);
 53.2319 -            assertBlock(lstBlockFac, 4, PlsqlBlockType.COLUMN_COMMENT, "SCORECARD_INPUT_VALUE", false, 12502, 15678, 0);
 53.2320 -            assertBlock(lstBlockFac, 5, PlsqlBlockType.VIEW, "SCORECARD_INPUT_VALUE2", false, 15711, 19054, 0);
 53.2321 -            assertBlock(lstBlockFac, 6, PlsqlBlockType.TABLE_COMMENT, "SCORECARD_INPUT_VALUE2", false, 19057, 19140, 0);
 53.2322 -            assertBlock(lstBlockFac, 7, PlsqlBlockType.COLUMN_COMMENT, "SCORECARD_INPUT_VALUE2", false, 19143, 22130, 0);
 53.2323 -            assertBlock(lstBlockFac, 8, PlsqlBlockType.VIEW, "SCORECARD_INPUT_VALUE3", false, 22164, 26175, 0);
 53.2324 -            assertBlock(lstBlockFac, 9, PlsqlBlockType.TABLE_COMMENT, "SCORECARD_INPUT_VALUE3", false, 26178, 26261, 0);
 53.2325 -            assertBlock(lstBlockFac, 10, PlsqlBlockType.COLUMN_COMMENT, "SCORECARD_INPUT_VALUE3", false, 26264, 29576, 0);
 53.2326 -            assertBlock(lstBlockFac, 11, PlsqlBlockType.COMMENT, "-- THIS VIEW IS USED AS A BASE FOR THE VIEW5 WHICH IS USED TO DISPLAY BUDGET REQUIREMENTS VS. TARGETS.", false, 29579, 29680, 0);
 53.2327 -            assertBlock(lstBlockFac, 12, PlsqlBlockType.VIEW, "SCORECARD_INPUT_VALUE_BUDPRO1", false, 29710, 34571, 0);
 53.2328 -            assertBlock(lstBlockFac, 13, PlsqlBlockType.TABLE_COMMENT, "SCORECARD_INPUT_VALUE_BUDPRO1", false, 34574, 34674, 0);
 53.2329 -            assertBlock(lstBlockFac, 14, PlsqlBlockType.COMMENT, "-- THIS VIEW IS USED TO DISPLAY BUDGET REQUIREMENTS VS. TARGETS.[Client is BudgetRequirementsTargets.java]", false, 34678, 34783, 0);
 53.2330 -            assertBlock(lstBlockFac, 15, PlsqlBlockType.COMMENT, "-- Bug 63415, begin, Added another condition to where clause of the view", false, 34812, 34884, 0);
 53.2331 -            assertBlock(lstBlockFac, 16, PlsqlBlockType.VIEW, "SCORECARD_INPUT_VALUE_BUDPRO2", false, 34885, 37863, 0);
 53.2332 -            assertBlock(lstBlockFac, 17, PlsqlBlockType.TABLE_COMMENT, "SCORECARD_INPUT_VALUE_BUDPRO2", false, 37866, 37960, 0);
 53.2333 -            assertBlock(lstBlockFac, 18, PlsqlBlockType.COLUMN_COMMENT, "SCORECARD_INPUT_VALUE_BUDPRO2", false, 37963, 38707, 0);
 53.2334 -            assertBlock(lstBlockFac, 19, PlsqlBlockType.COMMENT, "-- Bug 63415, end", false, 38710, 38983, 0);
 53.2335 -            assertBlock(lstBlockFac, 20, PlsqlBlockType.PACKAGE_BODY, "SCORECARD_INPUT_VALUE_API", false, 39022, 275644, 102);
 53.2336 -            assertBlock(lstBlockFac.get(20).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- FINITE STATE DECLARATIONS ", true, 39062, 39295, 0);
 53.2337 -            assertBlock(lstBlockFac.get(20).getChildBlocks(), 1, PlsqlBlockType.COMMENT, "-- LU SPECIFIC IMPLEMENTATION METHOD DECLARATIONS ", true, 39690, 39923, 0);
 53.2338 -            assertBlock(lstBlockFac.get(20).getChildBlocks(), 2, PlsqlBlockType.PROCEDURE_DEF, "Distribute_Input_Values___", true, 39926, 40160, 0);
 53.2339 -            assertBlock(lstBlockFac.get(20).getChildBlocks(), 3, PlsqlBlockType.COMMENT, "-- PROCHEAD.Start_Publish_Environments___", true, 40161, 40201, 0);
 53.2340 -            assertBlock(lstBlockFac.get(20).getChildBlocks(), 4, PlsqlBlockType.PROCEDURE_DEF, "Object_Planned_Date___", true, 40204, 40298, 0);
 53.2341 -            assertBlock(lstBlockFac.get(20).getChildBlocks(), 5, PlsqlBlockType.FUNCTION_DEF, "Find_Column___", true, 40300, 40545, 0);
 53.2342 -            assertBlock(lstBlockFac.get(20).getChildBlocks(), 6, PlsqlBlockType.COMMENT, "-- IMPLEMENTATION BASE METHODS ", true, 40546, 41421, 0);
 53.2343 -            assertBlock(lstBlockFac.get(20).getChildBlocks(), 7, PlsqlBlockType.FUNCTION_IMPL, "Lock_By_Id___", true, 41423, 42575, 5);
 53.2344 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(7).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "lock_control", true, 41717, 41867, 0);
 53.2345 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(7).getChildBlocks(), 1, PlsqlBlockType.CURSOR, "exist_control", true, 41871, 41959, 0);
 53.2346 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(7).getChildBlocks(), 2, PlsqlBlockType.IF, "IF  (lock_control%FOUND)", true, 42024, 42108, 0);
 53.2347 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(7).getChildBlocks(), 3, PlsqlBlockType.IF, "IF  (exist_control%FOUND)", true, 42194, 42275, 0);
 53.2348 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(7).getChildBlocks(), 4, PlsqlBlockType.IF, "ELSE", true, 42279, 42346, 0);
 53.2349 -            assertBlock(lstBlockFac.get(20).getChildBlocks(), 8, PlsqlBlockType.FUNCTION_IMPL, "Lock_By_Keys___", true, 42577, 43386, 3);
 53.2350 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(8).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "lock_control", true, 42827, 43080, 0);
 53.2351 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(8).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  (lock_control%FOUND)", true, 43145, 43218, 0);
 53.2352 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(8).getChildBlocks(), 2, PlsqlBlockType.IF, "ELSE", true, 43222, 43288, 0);
 53.2353 -            assertBlock(lstBlockFac.get(20).getChildBlocks(), 9, PlsqlBlockType.FUNCTION_IMPL, "Get_Object_By_Id___", true, 43388, 43795, 2);
 53.2354 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(9).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "getrec", true, 43498, 43579, 0);
 53.2355 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(9).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  (getrec%NOTFOUND)", true, 43635, 43733, 0);
 53.2356 -            assertBlock(lstBlockFac.get(20).getChildBlocks(), 10, PlsqlBlockType.FUNCTION_IMPL, "Get_Object_By_Keys___", true, 43798, 44370, 1);
 53.2357 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(10).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "getrec", true, 44024, 44254, 0);
 53.2358 -            assertBlock(lstBlockFac.get(20).getChildBlocks(), 11, PlsqlBlockType.FUNCTION_IMPL, "Check_Exist___", true, 44372, 45031, 2);
 53.2359 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(11).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "exist_control", true, 44575, 44813, 0);
 53.2360 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(11).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  (exist_control%FOUND)", true, 44882, 44969, 0);
 53.2361 -            assertBlock(lstBlockFac.get(20).getChildBlocks(), 12, PlsqlBlockType.PROCEDURE_IMPL, "Get_Id_Version_By_Keys___", true, 45033, 45655, 1);
 53.2362 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(12).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "get_version", true, 45278, 45528, 0);
 53.2363 -            assertBlock(lstBlockFac.get(20).getChildBlocks(), 13, PlsqlBlockType.COMMENT, "-- IMPLEMENTATION FINITE STATE MACHINE ", true, 45657, 46731, 0);
 53.2364 -            assertBlock(lstBlockFac.get(20).getChildBlocks(), 14, PlsqlBlockType.PROCEDURE_IMPL, "Finite_State_Set___", true, 46732, 47274, 1);
 53.2365 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(14).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "UPDATE scorecard_input_value_tab", true, 46869, 47220, 0);
 53.2366 -            assertBlock(lstBlockFac.get(20).getChildBlocks(), 15, PlsqlBlockType.PROCEDURE_IMPL, "Finite_State_Machine___", true, 47275, 48252, 4);
 53.2367 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(15).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (state_ IS NULL)", true, 47463, 47670, 2);
 53.2368 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(15).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (event_ IS NULL)", true, 47494, 47552, 0);
 53.2369 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(15).getChildBlocks().get(0).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSE", true, 47559, 47670, 0);
 53.2370 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(15).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSIF (state_ = 'Open')", true, 47674, 47899, 2);
 53.2371 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(15).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (event_ = 'Plan')", true, 47709, 47781, 0);
 53.2372 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(15).getChildBlocks().get(1).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSE", true, 47788, 47899, 0);
 53.2373 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(15).getChildBlocks(), 2, PlsqlBlockType.IF, "ELSIF (state_ = 'Planned')", true, 47903, 48130, 2);
 53.2374 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(15).getChildBlocks().get(2).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (event_ = 'Plan')", true, 47941, 48012, 0);
 53.2375 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(15).getChildBlocks().get(2).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSE", true, 48019, 48130, 0);
 53.2376 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(15).getChildBlocks(), 3, PlsqlBlockType.IF, "ELSE", true, 48134, 48223, 0);
 53.2377 -            assertBlock(lstBlockFac.get(20).getChildBlocks(), 16, PlsqlBlockType.PROCEDURE_IMPL, "Finite_State_Add_To_Attr___", true, 48253, 48657, 0);
 53.2378 -            assertBlock(lstBlockFac.get(20).getChildBlocks(), 17, PlsqlBlockType.PROCEDURE_IMPL, "Finite_State_Init___", true, 48658, 48900, 0);
 53.2379 -            assertBlock(lstBlockFac.get(20).getChildBlocks(), 18, PlsqlBlockType.COMMENT, "-- PRIVATE FINITE STATE MACHINE ", true, 48901, 49774, 0);
 53.2380 -            assertBlock(lstBlockFac.get(20).getChildBlocks(), 19, PlsqlBlockType.FUNCTION_IMPL, "Finite_State_Decode__", true, 49775, 49964, 0);
 53.2381 -            assertBlock(lstBlockFac.get(20).getChildBlocks(), 20, PlsqlBlockType.FUNCTION_IMPL, "Finite_State_Encode__", true, 49965, 50162, 0);
 53.2382 -            assertBlock(lstBlockFac.get(20).getChildBlocks(), 21, PlsqlBlockType.PROCEDURE_IMPL, "Enumerate_States__", true, 50163, 50322, 0);
 53.2383 -            assertBlock(lstBlockFac.get(20).getChildBlocks(), 22, PlsqlBlockType.FUNCTION_IMPL, "Finite_State_Events__", true, 50323, 50639, 4);
 53.2384 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(22).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (db_state_ IS NULL)", true, 50411, 50457, 0);
 53.2385 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(22).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSIF (db_state_ = 'Open')", true, 50461, 50514, 0);
 53.2386 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(22).getChildBlocks(), 2, PlsqlBlockType.IF, "ELSIF (db_state_ = 'Planned')", true, 50518, 50574, 0);
 53.2387 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(22).getChildBlocks(), 3, PlsqlBlockType.IF, "ELSE", true, 50578, 50612, 0);
 53.2388 -            assertBlock(lstBlockFac.get(20).getChildBlocks(), 23, PlsqlBlockType.PROCEDURE_IMPL, "Enumerate_Events__", true, 50640, 50758, 0);
 53.2389 -            assertBlock(lstBlockFac.get(20).getChildBlocks(), 24, PlsqlBlockType.COMMENT, "-- IMPLEMENTATION BASE METHODS FOR INSERT ", true, 50759, 51504, 0);
 53.2390 -            assertBlock(lstBlockFac.get(20).getChildBlocks(), 25, PlsqlBlockType.PROCEDURE_IMPL, "Prepare_Insert___", true, 51506, 51627, 0);
 53.2391 -            assertBlock(lstBlockFac.get(20).getChildBlocks(), 26, PlsqlBlockType.PROCEDURE_IMPL, "Unpack_Check_Insert___", true, 51630, 57006, 2);
 53.2392 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(26).getChildBlocks(), 0, PlsqlBlockType.WHILE_LOOP, "(Client_SYS.Get_Next_From_Attr(attr_, ptr_, name_, value_))", true, 51857, 55259, 35);
 53.2393 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(26).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (name_ = 'ENVIRONMENT')", true, 51934, 52068, 0);
 53.2394 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(26).getChildBlocks().get(0).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSIF (name_ = 'SCORECARD')", true, 52075, 52215, 0);
 53.2395 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(26).getChildBlocks().get(0).getChildBlocks(), 2, PlsqlBlockType.IF, "ELSIF (name_ = 'YEAR')", true, 52222, 52354, 0);
 53.2396 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(26).getChildBlocks().get(0).getChildBlocks(), 3, PlsqlBlockType.IF, "ELSIF (name_ = 'VERSION')", true, 52361, 52427, 0);
 53.2397 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(26).getChildBlocks().get(0).getChildBlocks(), 4, PlsqlBlockType.IF, "ELSIF (name_ = 'SCORECARD_OBJECT')", true, 52434, 52518, 0);
 53.2398 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(26).getChildBlocks().get(0).getChildBlocks(), 5, PlsqlBlockType.IF, "ELSIF (name_ = 'OBJECT_TYPE')", true, 52525, 52599, 0);
 53.2399 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(26).getChildBlocks().get(0).getChildBlocks(), 6, PlsqlBlockType.IF, "ELSIF (name_ = 'YEAR_VALUE')", true, 52606, 52711, 0);
 53.2400 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(26).getChildBlocks().get(0).getChildBlocks(), 7, PlsqlBlockType.IF, "ELSIF (name_ = 'P1_KEY')", true, 52718, 52782, 0);
 53.2401 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(26).getChildBlocks().get(0).getChildBlocks(), 8, PlsqlBlockType.IF, "ELSIF (name_ = 'P1_VALUE')", true, 52789, 52890, 0);
 53.2402 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(26).getChildBlocks().get(0).getChildBlocks(), 9, PlsqlBlockType.IF, "ELSIF (name_ = 'P2_KEY')", true, 52897, 52961, 0);
 53.2403 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(26).getChildBlocks().get(0).getChildBlocks(), 10, PlsqlBlockType.IF, "ELSIF (name_ = 'P2_VALUE')", true, 52968, 53069, 0);
 53.2404 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(26).getChildBlocks().get(0).getChildBlocks(), 11, PlsqlBlockType.IF, "ELSIF (name_ = 'P3_KEY')", true, 53076, 53140, 0);
 53.2405 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(26).getChildBlocks().get(0).getChildBlocks(), 12, PlsqlBlockType.IF, "ELSIF (name_ = 'P3_VALUE')", true, 53147, 53248, 0);
 53.2406 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(26).getChildBlocks().get(0).getChildBlocks(), 13, PlsqlBlockType.IF, "ELSIF (name_ = 'P4_KEY')", true, 53255, 53319, 0);
 53.2407 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(26).getChildBlocks().get(0).getChildBlocks(), 14, PlsqlBlockType.IF, "ELSIF (name_ = 'P4_VALUE')", true, 53326, 53427, 0);
 53.2408 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(26).getChildBlocks().get(0).getChildBlocks(), 15, PlsqlBlockType.IF, "ELSIF (name_ = 'P5_KEY')", true, 53434, 53498, 0);
 53.2409 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(26).getChildBlocks().get(0).getChildBlocks(), 16, PlsqlBlockType.IF, "ELSIF (name_ = 'P5_VALUE')", true, 53505, 53606, 0);
 53.2410 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(26).getChildBlocks().get(0).getChildBlocks(), 17, PlsqlBlockType.IF, "ELSIF (name_ = 'P6_KEY')", true, 53613, 53677, 0);
 53.2411 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(26).getChildBlocks().get(0).getChildBlocks(), 18, PlsqlBlockType.IF, "ELSIF (name_ = 'P6_VALUE')", true, 53684, 53785, 0);
 53.2412 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(26).getChildBlocks().get(0).getChildBlocks(), 19, PlsqlBlockType.IF, "ELSIF (name_ = 'P7_KEY')", true, 53792, 53856, 0);
 53.2413 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(26).getChildBlocks().get(0).getChildBlocks(), 20, PlsqlBlockType.IF, "ELSIF (name_ = 'P7_VALUE')", true, 53863, 53964, 0);
 53.2414 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(26).getChildBlocks().get(0).getChildBlocks(), 21, PlsqlBlockType.IF, "ELSIF (name_ = 'P8_KEY')", true, 53971, 54035, 0);
 53.2415 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(26).getChildBlocks().get(0).getChildBlocks(), 22, PlsqlBlockType.IF, "ELSIF (name_ = 'P8_VALUE')", true, 54042, 54143, 0);
 53.2416 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(26).getChildBlocks().get(0).getChildBlocks(), 23, PlsqlBlockType.IF, "ELSIF (name_ = 'P9_KEY')", true, 54150, 54214, 0);
 53.2417 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(26).getChildBlocks().get(0).getChildBlocks(), 24, PlsqlBlockType.IF, "ELSIF (name_ = 'P9_VALUE')", true, 54221, 54322, 0);
 53.2418 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(26).getChildBlocks().get(0).getChildBlocks(), 25, PlsqlBlockType.IF, "ELSIF (name_ = 'P10_KEY')", true, 54329, 54395, 0);
 53.2419 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(26).getChildBlocks().get(0).getChildBlocks(), 26, PlsqlBlockType.IF, "ELSIF (name_ = 'P10_VALUE')", true, 54402, 54505, 0);
 53.2420 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(26).getChildBlocks().get(0).getChildBlocks(), 27, PlsqlBlockType.IF, "ELSIF (name_ = 'P11_KEY')", true, 54512, 54578, 0);
 53.2421 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(26).getChildBlocks().get(0).getChildBlocks(), 28, PlsqlBlockType.IF, "ELSIF (name_ = 'P11_VALUE')", true, 54585, 54688, 0);
 53.2422 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(26).getChildBlocks().get(0).getChildBlocks(), 29, PlsqlBlockType.IF, "ELSIF (name_ = 'P12_KEY')", true, 54695, 54761, 0);
 53.2423 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(26).getChildBlocks().get(0).getChildBlocks(), 30, PlsqlBlockType.IF, "ELSIF (name_ = 'P12_VALUE')", true, 54768, 54871, 0);
 53.2424 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(26).getChildBlocks().get(0).getChildBlocks(), 31, PlsqlBlockType.IF, "ELSIF (name_ = 'ACTION')", true, 54878, 54942, 0);
 53.2425 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(26).getChildBlocks().get(0).getChildBlocks(), 32, PlsqlBlockType.IF, "ELSIF (name_ = 'MEA_STATE_CHANGE_DATE')", true, 54949, 55074, 0);
 53.2426 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(26).getChildBlocks().get(0).getChildBlocks(), 33, PlsqlBlockType.IF, "ELSIF (name_ = 'BUDGET_VERSION')", true, 55081, 55161, 0);
 53.2427 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(26).getChildBlocks().get(0).getChildBlocks(), 34, PlsqlBlockType.IF, "ELSE", true, 55168, 55246, 0);
 53.2428 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(26).getChildBlocks(), 1, PlsqlBlockType.IF, "IF ( newrec_.scorecard_object IS NOT NULL)", true, 55265, 56356, 0);
 53.2429 -            assertBlock(lstBlockFac.get(20).getChildBlocks(), 27, PlsqlBlockType.PROCEDURE_IMPL, "Insert___", true, 57009, 59227, 1);
 53.2430 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(27).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "INSERT", true, 57323, 59090, 0);
 53.2431 -            assertBlock(lstBlockFac.get(20).getChildBlocks(), 28, PlsqlBlockType.COMMENT, "-- IMPLEMENTATION BASE METHODS FOR UPDATE ", true, 59229, 59813, 0);
 53.2432 -            assertBlock(lstBlockFac.get(20).getChildBlocks(), 29, PlsqlBlockType.PROCEDURE_IMPL, "Unpack_Check_Update___", true, 59815, 66405, 2);
 53.2433 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(29).getChildBlocks(), 0, PlsqlBlockType.WHILE_LOOP, "(Client_SYS.Get_Next_From_Attr(attr_, ptr_, name_, value_))", true, 60196, 63689, 36);
 53.2434 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(29).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (name_ = 'ENVIRONMENT')", true, 60273, 60407, 0);
 53.2435 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(29).getChildBlocks().get(0).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSIF (name_ = 'SCORECARD')", true, 60414, 60554, 0);
 53.2436 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(29).getChildBlocks().get(0).getChildBlocks(), 2, PlsqlBlockType.IF, "ELSIF (name_ = 'YEAR')", true, 60561, 60693, 0);
 53.2437 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(29).getChildBlocks().get(0).getChildBlocks(), 3, PlsqlBlockType.IF, "ELSIF (name_ = 'VERSION')", true, 60700, 60783, 0);
 53.2438 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(29).getChildBlocks().get(0).getChildBlocks(), 4, PlsqlBlockType.IF, "ELSIF (name_ = 'SCORECARD_OBJECT')", true, 60790, 60874, 0);
 53.2439 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(29).getChildBlocks().get(0).getChildBlocks(), 5, PlsqlBlockType.IF, "ELSIF (name_ = 'OBJECT_TYPE')", true, 60881, 60955, 0);
 53.2440 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(29).getChildBlocks().get(0).getChildBlocks(), 6, PlsqlBlockType.IF, "ELSIF (name_ = 'YEAR_VALUE')", true, 60962, 61067, 0);
 53.2441 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(29).getChildBlocks().get(0).getChildBlocks(), 7, PlsqlBlockType.IF, "ELSIF (name_ = 'P1_KEY')", true, 61074, 61138, 0);
 53.2442 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(29).getChildBlocks().get(0).getChildBlocks(), 8, PlsqlBlockType.IF, "ELSIF (name_ = 'P1_VALUE')", true, 61145, 61246, 0);
 53.2443 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(29).getChildBlocks().get(0).getChildBlocks(), 9, PlsqlBlockType.IF, "ELSIF (name_ = 'P2_KEY')", true, 61253, 61317, 0);
 53.2444 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(29).getChildBlocks().get(0).getChildBlocks(), 10, PlsqlBlockType.IF, "ELSIF (name_ = 'P2_VALUE')", true, 61324, 61425, 0);
 53.2445 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(29).getChildBlocks().get(0).getChildBlocks(), 11, PlsqlBlockType.IF, "ELSIF (name_ = 'P3_KEY')", true, 61432, 61496, 0);
 53.2446 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(29).getChildBlocks().get(0).getChildBlocks(), 12, PlsqlBlockType.IF, "ELSIF (name_ = 'P3_VALUE')", true, 61503, 61604, 0);
 53.2447 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(29).getChildBlocks().get(0).getChildBlocks(), 13, PlsqlBlockType.IF, "ELSIF (name_ = 'P4_KEY')", true, 61611, 61675, 0);
 53.2448 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(29).getChildBlocks().get(0).getChildBlocks(), 14, PlsqlBlockType.IF, "ELSIF (name_ = 'P4_VALUE')", true, 61682, 61783, 0);
 53.2449 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(29).getChildBlocks().get(0).getChildBlocks(), 15, PlsqlBlockType.IF, "ELSIF (name_ = 'P5_KEY')", true, 61790, 61854, 0);
 53.2450 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(29).getChildBlocks().get(0).getChildBlocks(), 16, PlsqlBlockType.IF, "ELSIF (name_ = 'P5_VALUE')", true, 61861, 61962, 0);
 53.2451 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(29).getChildBlocks().get(0).getChildBlocks(), 17, PlsqlBlockType.IF, "ELSIF (name_ = 'P6_KEY')", true, 61969, 62033, 0);
 53.2452 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(29).getChildBlocks().get(0).getChildBlocks(), 18, PlsqlBlockType.IF, "ELSIF (name_ = 'P6_VALUE')", true, 62040, 62141, 0);
 53.2453 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(29).getChildBlocks().get(0).getChildBlocks(), 19, PlsqlBlockType.IF, "ELSIF (name_ = 'P7_KEY')", true, 62148, 62212, 0);
 53.2454 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(29).getChildBlocks().get(0).getChildBlocks(), 20, PlsqlBlockType.IF, "ELSIF (name_ = 'P7_VALUE')", true, 62219, 62320, 0);
 53.2455 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(29).getChildBlocks().get(0).getChildBlocks(), 21, PlsqlBlockType.IF, "ELSIF (name_ = 'P8_KEY')", true, 62327, 62391, 0);
 53.2456 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(29).getChildBlocks().get(0).getChildBlocks(), 22, PlsqlBlockType.IF, "ELSIF (name_ = 'P8_VALUE')", true, 62398, 62499, 0);
 53.2457 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(29).getChildBlocks().get(0).getChildBlocks(), 23, PlsqlBlockType.IF, "ELSIF (name_ = 'P9_KEY')", true, 62506, 62570, 0);
 53.2458 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(29).getChildBlocks().get(0).getChildBlocks(), 24, PlsqlBlockType.IF, "ELSIF (name_ = 'P9_VALUE')", true, 62577, 62678, 0);
 53.2459 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(29).getChildBlocks().get(0).getChildBlocks(), 25, PlsqlBlockType.IF, "ELSIF (name_ = 'P10_KEY')", true, 62685, 62751, 0);
 53.2460 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(29).getChildBlocks().get(0).getChildBlocks(), 26, PlsqlBlockType.IF, "ELSIF (name_ = 'P10_VALUE')", true, 62758, 62861, 0);
 53.2461 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(29).getChildBlocks().get(0).getChildBlocks(), 27, PlsqlBlockType.IF, "ELSIF (name_ = 'P11_KEY')", true, 62868, 62934, 0);
 53.2462 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(29).getChildBlocks().get(0).getChildBlocks(), 28, PlsqlBlockType.IF, "ELSIF (name_ = 'P11_VALUE')", true, 62941, 63044, 0);
 53.2463 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(29).getChildBlocks().get(0).getChildBlocks(), 29, PlsqlBlockType.IF, "ELSIF (name_ = 'P12_KEY')", true, 63051, 63117, 0);
 53.2464 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(29).getChildBlocks().get(0).getChildBlocks(), 30, PlsqlBlockType.IF, "ELSIF (name_ = 'P12_VALUE')", true, 63124, 63227, 0);
 53.2465 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(29).getChildBlocks().get(0).getChildBlocks(), 31, PlsqlBlockType.IF, "ELSIF (name_ = 'ACTION')", true, 63234, 63298, 0);
 53.2466 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(29).getChildBlocks().get(0).getChildBlocks(), 32, PlsqlBlockType.IF, "ELSIF (name_ = 'MEA_STATE_CHANGE_DATE')", true, 63305, 63430, 0);
 53.2467 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(29).getChildBlocks().get(0).getChildBlocks(), 33, PlsqlBlockType.IF, "ELSIF (name_ = 'BUDGET_VERSION')", true, 63437, 63517, 0);
 53.2468 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(29).getChildBlocks().get(0).getChildBlocks(), 34, PlsqlBlockType.IF, "ELSIF (name_ = 'FROM_BUDPRO')", true, 63524, 63591, 0);
 53.2469 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(29).getChildBlocks().get(0).getChildBlocks(), 35, PlsqlBlockType.IF, "ELSE", true, 63598, 63676, 0);
 53.2470 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(29).getChildBlocks(), 1, PlsqlBlockType.IF, "IF ( newrec_.scorecard_object IS NOT NULL AND from_budpro_ = 'FALSE')", true, 63695, 65823, 13);
 53.2471 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(29).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.IF, "IF ( newrec_.year_value != NVL(oldrec_.year_value,0))", true, 63885, 64029, 0);
 53.2472 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(29).getChildBlocks().get(1).getChildBlocks(), 1, PlsqlBlockType.IF, "IF ( newrec_.p1_value != NVL(oldrec_.p1_value,0))", true, 64036, 64177, 0);
 53.2473 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(29).getChildBlocks().get(1).getChildBlocks(), 2, PlsqlBlockType.IF, "IF ( newrec_.p2_value != NVL(oldrec_.p2_value,0))", true, 64184, 64325, 0);
 53.2474 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(29).getChildBlocks().get(1).getChildBlocks(), 3, PlsqlBlockType.IF, "IF ( newrec_.p3_value != NVL(oldrec_.p3_value,0))", true, 64332, 64473, 0);
 53.2475 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(29).getChildBlocks().get(1).getChildBlocks(), 4, PlsqlBlockType.IF, "IF ( newrec_.p4_value != NVL(oldrec_.p4_value,0))", true, 64480, 64621, 0);
 53.2476 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(29).getChildBlocks().get(1).getChildBlocks(), 5, PlsqlBlockType.IF, "IF ( newrec_.p5_value != NVL(oldrec_.p5_value,0))", true, 64628, 64769, 0);
 53.2477 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(29).getChildBlocks().get(1).getChildBlocks(), 6, PlsqlBlockType.IF, "IF ( newrec_.p6_value != NVL(oldrec_.p6_value,0))", true, 64776, 64917, 0);
 53.2478 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(29).getChildBlocks().get(1).getChildBlocks(), 7, PlsqlBlockType.IF, "IF ( newrec_.p7_value != NVL(oldrec_.p7_value,0))", true, 64924, 65065, 0);
 53.2479 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(29).getChildBlocks().get(1).getChildBlocks(), 8, PlsqlBlockType.IF, "IF ( newrec_.p8_value != NVL(oldrec_.p8_value,0))", true, 65072, 65213, 0);
 53.2480 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(29).getChildBlocks().get(1).getChildBlocks(), 9, PlsqlBlockType.IF, "IF ( newrec_.p9_value != NVL(oldrec_.p9_value,0))", true, 65220, 65361, 0);
 53.2481 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(29).getChildBlocks().get(1).getChildBlocks(), 10, PlsqlBlockType.IF, "IF ( newrec_.p10_value != NVL(oldrec_.p10_value,0))", true, 65368, 65511, 0);
 53.2482 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(29).getChildBlocks().get(1).getChildBlocks(), 11, PlsqlBlockType.IF, "IF ( newrec_.p11_value != NVL(oldrec_.p11_value,0))", true, 65518, 65661, 0);
 53.2483 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(29).getChildBlocks().get(1).getChildBlocks(), 12, PlsqlBlockType.IF, "IF ( newrec_.p12_value != NVL(oldrec_.p12_value,0))", true, 65668, 65811, 0);
 53.2484 -            assertBlock(lstBlockFac.get(20).getChildBlocks(), 30, PlsqlBlockType.PROCEDURE_IMPL, "Update___", true, 66408, 69988, 2);
 53.2485 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(30).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  by_keys_", true, 66756, 68416, 1);
 53.2486 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(30).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "UPDATE scorecard_input_value_tab", true, 66779, 68415, 0);
 53.2487 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(30).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSE", true, 68420, 69893, 1);
 53.2488 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(30).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "UPDATE scorecard_input_value_tab", true, 68431, 69881, 0);
 53.2489 -            assertBlock(lstBlockFac.get(20).getChildBlocks(), 31, PlsqlBlockType.COMMENT, "-- IMPLEMENTATION BASE METHODS FOR DELETE ", true, 69990, 70587, 0);
 53.2490 -            assertBlock(lstBlockFac.get(20).getChildBlocks(), 32, PlsqlBlockType.PROCEDURE_IMPL, "Check_Delete___", true, 70589, 70910, 0);
 53.2491 -            assertBlock(lstBlockFac.get(20).getChildBlocks(), 33, PlsqlBlockType.PROCEDURE_IMPL, "Delete___", true, 70913, 71317, 1);
 53.2492 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(33).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "DELETE", true, 71229, 71301, 0);
 53.2493 -            assertBlock(lstBlockFac.get(20).getChildBlocks(), 34, PlsqlBlockType.COMMENT, "-- PRIVATE BASE METHODS ", true, 71319, 73620, 0);
 53.2494 -            assertBlock(lstBlockFac.get(20).getChildBlocks(), 35, PlsqlBlockType.PROCEDURE_IMPL, "Lock__", true, 73622, 73917, 0);
 53.2495 -            assertBlock(lstBlockFac.get(20).getChildBlocks(), 36, PlsqlBlockType.PROCEDURE_IMPL, "New__", true, 73920, 74524, 3);
 53.2496 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(36).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (action_ = 'PREPARE')", true, 74193, 74254, 0);
 53.2497 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(36).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSIF (action_ = 'CHECK')", true, 74258, 74334, 0);
 53.2498 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(36).getChildBlocks(), 2, PlsqlBlockType.IF, "ELSIF (action_ = 'DO')", true, 74338, 74476, 0);
 53.2499 -            assertBlock(lstBlockFac.get(20).getChildBlocks(), 37, PlsqlBlockType.PROCEDURE_IMPL, "Modify__", true, 74527, 75249, 2);
 53.2500 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(37).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (action_ = 'CHECK')", true, 74833, 74960, 0);
 53.2501 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(37).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSIF (action_ = 'DO')", true, 74964, 75198, 0);
 53.2502 -            assertBlock(lstBlockFac.get(20).getChildBlocks(), 38, PlsqlBlockType.PROCEDURE_IMPL, "Remove__", true, 75252, 75804, 2);
 53.2503 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(38).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (action_ = 'CHECK')", true, 75487, 75592, 0);
 53.2504 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(38).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSIF (action_ = 'DO')", true, 75596, 75753, 0);
 53.2505 -            assertBlock(lstBlockFac.get(20).getChildBlocks(), 39, PlsqlBlockType.COMMENT, "-- PUBLIC BASE METHODS ", true, 75806, 76259, 0);
 53.2506 -            assertBlock(lstBlockFac.get(20).getChildBlocks(), 40, PlsqlBlockType.PROCEDURE_IMPL, "Exist", true, 76261, 76646, 1);
 53.2507 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(40).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (NOT Check_Exist___(environment_, scorecard_, year_, version_, scorecard_object_))", true, 76490, 76635, 0);
 53.2508 -            assertBlock(lstBlockFac.get(20).getChildBlocks(), 41, PlsqlBlockType.COMMENT, "-- PUBLIC TRANSLATION METHODS ", true, 76648, 76881, 0);
 53.2509 -            assertBlock(lstBlockFac.get(20).getChildBlocks(), 42, PlsqlBlockType.PROCEDURE_IMPL, "Language_Refreshed", true, 76882, 77029, 0);
 53.2510 -            assertBlock(lstBlockFac.get(20).getChildBlocks(), 43, PlsqlBlockType.COMMENT, "-- LU SPECIFIC IMPLEMENTATION METHODS ", true, 77030, 77263, 0);
 53.2511 -            assertBlock(lstBlockFac.get(20).getChildBlocks(), 44, PlsqlBlockType.PROCEDURE_IMPL, "Distribute_Input_Values___", true, 77266, 93408, 9);
 53.2512 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(44).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "get_child_scorecards", true, 77559, 77716, 0);
 53.2513 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(44).getChildBlocks(), 1, PlsqlBlockType.CURSOR, "get_open_child_scr", true, 77721, 77889, 0);
 53.2514 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(44).getChildBlocks(), 2, PlsqlBlockType.CURSOR, "get_input_values", true, 77894, 78348, 0);
 53.2515 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(44).getChildBlocks(), 3, PlsqlBlockType.CURSOR, "get_attribute_value_sum", true, 78353, 78709, 0);
 53.2516 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(44).getChildBlocks(), 4, PlsqlBlockType.STATEMENT, "INDEX BY BINARY_INTEGER", true, 80236, 80259, 0);
 53.2517 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(44).getChildBlocks(), 5, PlsqlBlockType.IF, "IF  value_distribution_type_ IS NULL", true, 80724, 81173, 2);
 53.2518 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(44).getChildBlocks().get(5).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  object_type_='MEASURE'", true, 80771, 80968, 0);
 53.2519 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(44).getChildBlocks().get(5).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSE", true, 80975, 81162, 0);
 53.2520 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(44).getChildBlocks(), 6, PlsqlBlockType.COMMENT, "-- END IF;", true, 82098, 82107, 0);
 53.2521 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(44).getChildBlocks(), 7, PlsqlBlockType.FOR_LOOP, "temp_period_count_ IN 1..period_count_", true, 82113, 82390, 1);
 53.2522 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(44).getChildBlocks().get(7).getChildBlocks(), 0, PlsqlBlockType.IF, "IF   parent_val_arr_(temp_period_count_) IS NULL", true, 82168, 82376, 0);
 53.2523 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(44).getChildBlocks(), 8, PlsqlBlockType.FOR_LOOP, "child_scorecards_ IN get_child_scorecards", true, 82471, 93376, 3);
 53.2524 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(44).getChildBlocks().get(8).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (temp_val_ = '1')", true, 82742, 82922, 0);
 53.2525 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(44).getChildBlocks().get(8).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  NOT Check_Exist___(environment_,child_scorecards_.scorecard,year_,version_,scorecard_object_)", true, 82930, 83184, 0);
 53.2526 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(44).getChildBlocks().get(8).getChildBlocks(), 2, PlsqlBlockType.IF, "ELSE", true, 83192, 93363, 2);
 53.2527 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(44).getChildBlocks().get(8).getChildBlocks().get(2).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  value_distribution_type_ = 'PERCENTAGE'", true, 83901, 88188, 3);
 53.2528 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(44).getChildBlocks().get(8).getChildBlocks().get(2).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  hierachical_dist_logic_ IS NULL", true, 83961, 84255, 1);
 53.2529 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(44).getChildBlocks().get(8).getChildBlocks().get(2).getChildBlocks().get(0).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.FOR_LOOP, "temp_period_count_ IN 1..period_count_", true, 84015, 84255, 0);
 53.2530 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(44).getChildBlocks().get(8).getChildBlocks().get(2).getChildBlocks().get(0).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSIF hierachical_dist_logic_='VERSION'", true, 84269, 85607, 2);
 53.2531 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(44).getChildBlocks().get(8).getChildBlocks().get(2).getChildBlocks().get(0).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  distribution_version_ IS NULL", true, 84328, 84834, 2);
 53.2532 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(44).getChildBlocks().get(8).getChildBlocks().get(2).getChildBlocks().get(0).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  object_type_='MEASURE'", true, 84383, 84588, 0);
 53.2533 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(44).getChildBlocks().get(8).getChildBlocks().get(2).getChildBlocks().get(0).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSE", true, 84606, 84812, 0);
 53.2534 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(44).getChildBlocks().get(8).getChildBlocks().get(2).getChildBlocks().get(0).getChildBlocks().get(1).getChildBlocks(), 1, PlsqlBlockType.FOR_LOOP, "temp_period_count_ IN 1..period_count_", true, 85159, 85607, 0);
 53.2535 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(44).getChildBlocks().get(8).getChildBlocks().get(2).getChildBlocks().get(0).getChildBlocks(), 2, PlsqlBlockType.IF, "ELSIF hierachical_dist_logic_='ATTRIBUTE'", true, 85620, 88135, 5);
 53.2536 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(44).getChildBlocks().get(8).getChildBlocks().get(2).getChildBlocks().get(0).getChildBlocks().get(2).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  distribution_attribute_ IS NULL", true, 85681, 86195, 2);
 53.2537 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(44).getChildBlocks().get(8).getChildBlocks().get(2).getChildBlocks().get(0).getChildBlocks().get(2).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  object_type_='MEASURE'", true, 85738, 85946, 0);
 53.2538 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(44).getChildBlocks().get(8).getChildBlocks().get(2).getChildBlocks().get(0).getChildBlocks().get(2).getChildBlocks().get(0).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSE", true, 85964, 86173, 0);
 53.2539 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(44).getChildBlocks().get(8).getChildBlocks().get(2).getChildBlocks().get(0).getChildBlocks().get(2).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  attribute_val_str_ IS NULL", true, 86415, 86613, 0);
 53.2540 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(44).getChildBlocks().get(8).getChildBlocks().get(2).getChildBlocks().get(0).getChildBlocks().get(2).getChildBlocks(), 2, PlsqlBlockType.IF, "ELSE", true, 86628, 87029, 1);
 53.2541 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(44).getChildBlocks().get(8).getChildBlocks().get(2).getChildBlocks().get(0).getChildBlocks().get(2).getChildBlocks().get(2).getChildBlocks(), 0, PlsqlBlockType.BEGIN_END, "", true, 86650, 87007, 0);
 53.2542 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(44).getChildBlocks().get(8).getChildBlocks().get(2).getChildBlocks().get(0).getChildBlocks().get(2).getChildBlocks(), 3, PlsqlBlockType.BEGIN_END, "", true, 87044, 87751, 1);
 53.2543 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(44).getChildBlocks().get(8).getChildBlocks().get(2).getChildBlocks().get(0).getChildBlocks().get(2).getChildBlocks().get(3).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  attribute_value_sum_=0", true, 87262, 87480, 0);
 53.2544 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(44).getChildBlocks().get(8).getChildBlocks().get(2).getChildBlocks().get(0).getChildBlocks().get(2).getChildBlocks(), 4, PlsqlBlockType.FOR_LOOP, "temp_period_count_ IN 1..period_count_", true, 87767, 88115, 0);
 53.2545 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(44).getChildBlocks().get(8).getChildBlocks().get(2).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSIF value_distribution_type_ = 'VALUE'", true, 88198, 92475, 3);
 53.2546 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(44).getChildBlocks().get(8).getChildBlocks().get(2).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  hierachical_dist_logic_ IS NULL", true, 88256, 88567, 1);
 53.2547 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(44).getChildBlocks().get(8).getChildBlocks().get(2).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.FOR_LOOP, "temp_period_count_ IN 1..period_count_", true, 88311, 88567, 0);
 53.2548 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(44).getChildBlocks().get(8).getChildBlocks().get(2).getChildBlocks().get(1).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSIF hierachical_dist_logic_='VERSION'", true, 88580, 89916, 2);
 53.2549 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(44).getChildBlocks().get(8).getChildBlocks().get(2).getChildBlocks().get(1).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  distribution_version_ IS NULL", true, 88640, 89154, 2);
 53.2550 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(44).getChildBlocks().get(8).getChildBlocks().get(2).getChildBlocks().get(1).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  object_type_='MEASURE'", true, 88696, 88903, 0);
 53.2551 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(44).getChildBlocks().get(8).getChildBlocks().get(2).getChildBlocks().get(1).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSE", true, 88923, 89131, 0);
 53.2552 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(44).getChildBlocks().get(8).getChildBlocks().get(2).getChildBlocks().get(1).getChildBlocks().get(1).getChildBlocks(), 1, PlsqlBlockType.FOR_LOOP, "temp_period_count_ IN 1..period_count_", true, 89481, 89916, 0);
 53.2553 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(44).getChildBlocks().get(8).getChildBlocks().get(2).getChildBlocks().get(1).getChildBlocks(), 2, PlsqlBlockType.IF, "ELSIF hierachical_dist_logic_='ATTRIBUTE'", true, 89929, 92458, 5);
 53.2554 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(44).getChildBlocks().get(8).getChildBlocks().get(2).getChildBlocks().get(1).getChildBlocks().get(2).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  distribution_attribute_ IS NULL", true, 89991, 90511, 2);
 53.2555 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(44).getChildBlocks().get(8).getChildBlocks().get(2).getChildBlocks().get(1).getChildBlocks().get(2).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  object_type_='MEASURE'", true, 90049, 90258, 0);
 53.2556 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(44).getChildBlocks().get(8).getChildBlocks().get(2).getChildBlocks().get(1).getChildBlocks().get(2).getChildBlocks().get(0).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSE", true, 90277, 90488, 0);
 53.2557 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(44).getChildBlocks().get(8).getChildBlocks().get(2).getChildBlocks().get(1).getChildBlocks().get(2).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  attribute_val_str_ IS NULL", true, 90732, 90931, 0);
 53.2558 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(44).getChildBlocks().get(8).getChildBlocks().get(2).getChildBlocks().get(1).getChildBlocks().get(2).getChildBlocks(), 2, PlsqlBlockType.IF, "ELSE", true, 90947, 91352, 1);
 53.2559 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(44).getChildBlocks().get(8).getChildBlocks().get(2).getChildBlocks().get(1).getChildBlocks().get(2).getChildBlocks().get(2).getChildBlocks(), 0, PlsqlBlockType.BEGIN_END, "", true, 90970, 91329, 0);
 53.2560 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(44).getChildBlocks().get(8).getChildBlocks().get(2).getChildBlocks().get(1).getChildBlocks().get(2).getChildBlocks(), 3, PlsqlBlockType.BEGIN_END, "", true, 91368, 92084, 1);
 53.2561 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(44).getChildBlocks().get(8).getChildBlocks().get(2).getChildBlocks().get(1).getChildBlocks().get(2).getChildBlocks().get(3).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  attribute_value_sum_=0", true, 91590, 91809, 0);
 53.2562 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(44).getChildBlocks().get(8).getChildBlocks().get(2).getChildBlocks().get(1).getChildBlocks().get(2).getChildBlocks(), 4, PlsqlBlockType.FOR_LOOP, "temp_period_count_ IN 1..period_count_", true, 92101, 92438, 0);
 53.2563 -            assertBlock(lstBlockFac.get(20).getChildBlocks(), 45, PlsqlBlockType.PROCEDURE_IMPL, "Object_Planned_Date___", true, 93409, 93630, 0);
 53.2564 -            assertBlock(lstBlockFac.get(20).getChildBlocks(), 46, PlsqlBlockType.FUNCTION_IMPL, "Find_Column___", true, 93632, 95238, 2);
 53.2565 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(46).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "get_record", true, 93883, 94265, 0);
 53.2566 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(46).getChildBlocks(), 1, PlsqlBlockType.FOR_LOOP, "rec_ IN get_record", true, 94301, 95198, 12);
 53.2567 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(46).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (rec_.p1_key = key_)", true, 94335, 94395, 0);
 53.2568 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(46).getChildBlocks().get(1).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSIF (rec_.p2_key = key_)", true, 94402, 94465, 0);
 53.2569 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(46).getChildBlocks().get(1).getChildBlocks(), 2, PlsqlBlockType.IF, "ELSIF (rec_.p3_key = key_)", true, 94472, 94535, 0);
 53.2570 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(46).getChildBlocks().get(1).getChildBlocks(), 3, PlsqlBlockType.IF, "ELSIF (rec_.p4_key = key_)", true, 94542, 94605, 0);
 53.2571 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(46).getChildBlocks().get(1).getChildBlocks(), 4, PlsqlBlockType.IF, "ELSIF (rec_.p5_key = key_)", true, 94612, 94675, 0);
 53.2572 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(46).getChildBlocks().get(1).getChildBlocks(), 5, PlsqlBlockType.IF, "ELSIF (rec_.p6_key = key_)", true, 94682, 94745, 0);
 53.2573 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(46).getChildBlocks().get(1).getChildBlocks(), 6, PlsqlBlockType.IF, "ELSIF (rec_.p7_key = key_)", true, 94752, 94815, 0);
 53.2574 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(46).getChildBlocks().get(1).getChildBlocks(), 7, PlsqlBlockType.IF, "ELSIF (rec_.p8_key = key_)", true, 94822, 94885, 0);
 53.2575 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(46).getChildBlocks().get(1).getChildBlocks(), 8, PlsqlBlockType.IF, "ELSIF (rec_.p9_key = key_)", true, 94892, 94955, 0);
 53.2576 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(46).getChildBlocks().get(1).getChildBlocks(), 9, PlsqlBlockType.IF, "ELSIF (rec_.p10_key = key_)", true, 94962, 95027, 0);
 53.2577 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(46).getChildBlocks().get(1).getChildBlocks(), 10, PlsqlBlockType.IF, "ELSIF (rec_.p11_key = key_)", true, 95034, 95099, 0);
 53.2578 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(46).getChildBlocks().get(1).getChildBlocks(), 11, PlsqlBlockType.IF, "ELSIF (rec_.p12_key = key_)", true, 95106, 95185, 0);
 53.2579 -            assertBlock(lstBlockFac.get(20).getChildBlocks(), 47, PlsqlBlockType.COMMENT, "-- LU SPECIFIC PRIVATE METHODS ", true, 95239, 95472, 0);
 53.2580 -            assertBlock(lstBlockFac.get(20).getChildBlocks(), 48, PlsqlBlockType.PROCEDURE_IMPL, "Update_Versions__", true, 95475, 96735, 5);
 53.2581 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(48).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  version_ = 'TAR'", true, 96010, 96102, 0);
 53.2582 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(48).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSIF version_ = 'ACT'", true, 96105, 96200, 0);
 53.2583 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(48).getChildBlocks(), 2, PlsqlBlockType.IF, "ELSE", true, 96203, 96289, 0);
 53.2584 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(48).getChildBlocks(), 3, PlsqlBlockType.IF, "IF  data_mart_='TRUE'", true, 96292, 96508, 0);
 53.2585 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(48).getChildBlocks(), 4, PlsqlBlockType.IF, "ELSE", true, 96511, 96712, 0);
 53.2586 -            assertBlock(lstBlockFac.get(20).getChildBlocks(), 49, PlsqlBlockType.PROCEDURE_IMPL, "Publish__", true, 96737, 98923, 3);
 53.2587 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(49).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  data_mart_enabled_='TRUE'", true, 97361, 98021, 1);
 53.2588 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(49).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  Bp_Scorecard_Fact_API.Check_Exist_By_Object(environment_,scorecard_,period_,object_type_,measure_)='FALSE'", true, 97401, 98021, 2);
 53.2589 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(49).getChildBlocks().get(0).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  value_ IS NOT NULL", true, 97525, 97940, 0);
 53.2590 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(49).getChildBlocks().get(0).getChildBlocks().get(0).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSE", true, 97950, 98005, 0);
 53.2591 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(49).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSE", true, 98027, 98685, 1);
 53.2592 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(49).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  Scorecard_Value_API.Check_Exist_By_Object(environment_,scorecard_,period_,object_type_,measure_)='FALSE'", true, 98040, 98672, 2);
 53.2593 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(49).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  value_ IS NOT NULL", true, 98164, 98589, 0);
 53.2594 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(49).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSE", true, 98601, 98656, 0);
 53.2595 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(49).getChildBlocks(), 2, PlsqlBlockType.IF, "IF  (flag_ = 'TRUE' AND value_ IS NOT NULL)", true, 98692, 98888, 0);
 53.2596 -            assertBlock(lstBlockFac.get(20).getChildBlocks(), 50, PlsqlBlockType.PROCEDURE_IMPL, "Publish_Score__", true, 98924, 103003, 5);
 53.2597 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(50).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- get measures and components for a specific environment_, scorecard_", true, 99124, 99193, 0);
 53.2598 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(50).getChildBlocks(), 1, PlsqlBlockType.CURSOR, "get_measure", true, 99196, 99373, 0);
 53.2599 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(50).getChildBlocks(), 2, PlsqlBlockType.COMMENT, "-- get Id, version of a scorecard record by keys", true, 99377, 99425, 0);
 53.2600 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(50).getChildBlocks(), 3, PlsqlBlockType.CURSOR, "get_objid", true, 99428, 99568, 0);
 53.2601 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(50).getChildBlocks(), 4, PlsqlBlockType.FOR_LOOP, "get_rec_ in get_measure", true, 99808, 102807, 3);
 53.2602 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(50).getChildBlocks().get(4).getChildBlocks(), 0, PlsqlBlockType.IF, "if  publish_type_ = 'ENV'", true, 99986, 100144, 0);
 53.2603 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(50).getChildBlocks().get(4).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSE", true, 100150, 100262, 0);
 53.2604 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(50).getChildBlocks().get(4).getChildBlocks(), 2, PlsqlBlockType.IF, "if  (isScorecardPlan = 'TRUE' or isEnvPlan = 'TRUE' )", true, 100269, 102795, 13);
 53.2605 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(50).getChildBlocks().get(4).getChildBlocks().get(2).getChildBlocks(), 0, PlsqlBlockType.IF, "if  get_rec_.p1_key is not null", true, 100336, 100528, 0);
 53.2606 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(50).getChildBlocks().get(4).getChildBlocks().get(2).getChildBlocks(), 1, PlsqlBlockType.IF, "if  get_rec_.p2_key is not null", true, 100537, 100728, 0);
 53.2607 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(50).getChildBlocks().get(4).getChildBlocks().get(2).getChildBlocks(), 2, PlsqlBlockType.IF, "if  get_rec_.p3_key is not null", true, 100737, 100928, 0);
 53.2608 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(50).getChildBlocks().get(4).getChildBlocks().get(2).getChildBlocks(), 3, PlsqlBlockType.IF, "if  get_rec_.p4_key is not null", true, 100937, 101129, 0);
 53.2609 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(50).getChildBlocks().get(4).getChildBlocks().get(2).getChildBlocks(), 4, PlsqlBlockType.IF, "if  get_rec_.p5_key is not null", true, 101137, 101329, 0);
 53.2610 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(50).getChildBlocks().get(4).getChildBlocks().get(2).getChildBlocks(), 5, PlsqlBlockType.IF, "if  get_rec_.p6_key is not null", true, 101338, 101531, 0);
 53.2611 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(50).getChildBlocks().get(4).getChildBlocks().get(2).getChildBlocks(), 6, PlsqlBlockType.IF, "if  get_rec_.p7_key is not null", true, 101540, 101733, 0);
 53.2612 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(50).getChildBlocks().get(4).getChildBlocks().get(2).getChildBlocks(), 7, PlsqlBlockType.IF, "if  get_rec_.p8_key is not null", true, 101742, 101934, 0);
 53.2613 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(50).getChildBlocks().get(4).getChildBlocks().get(2).getChildBlocks(), 8, PlsqlBlockType.IF, "if  get_rec_.p9_key is not null", true, 101943, 102136, 0);
 53.2614 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(50).getChildBlocks().get(4).getChildBlocks().get(2).getChildBlocks(), 9, PlsqlBlockType.IF, "if  get_rec_.p10_key is not null", true, 102145, 102341, 0);
 53.2615 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(50).getChildBlocks().get(4).getChildBlocks().get(2).getChildBlocks(), 10, PlsqlBlockType.COMMENT, "-- Call Id ", true, 102350, 102372, 0);
 53.2616 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(50).getChildBlocks().get(4).getChildBlocks().get(2).getChildBlocks(), 11, PlsqlBlockType.IF, "if  get_rec_.p11_key is not null", true, 102381, 102577, 0);
 53.2617 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(50).getChildBlocks().get(4).getChildBlocks().get(2).getChildBlocks(), 12, PlsqlBlockType.IF, "if  get_rec_.p12_key is not null", true, 102586, 102782, 0);
 53.2618 -            assertBlock(lstBlockFac.get(20).getChildBlocks(), 51, PlsqlBlockType.PROCEDURE_IMPL, "Start_Publish_Environments__", true, 103004, 103459, 0);
 53.2619 -            assertBlock(lstBlockFac.get(20).getChildBlocks(), 52, PlsqlBlockType.PROCEDURE_IMPL, "Set_Publish_Environments__", true, 103460, 103746, 0);
 53.2620 -            assertBlock(lstBlockFac.get(20).getChildBlocks(), 53, PlsqlBlockType.PROCEDURE_IMPL, "Start_Publish_Scorecards__", true, 103747, 104196, 0);
 53.2621 -            assertBlock(lstBlockFac.get(20).getChildBlocks(), 54, PlsqlBlockType.PROCEDURE_IMPL, "Prepare_Scorecard_Publish__", true, 104197, 104576, 0);
 53.2622 -            assertBlock(lstBlockFac.get(20).getChildBlocks(), 55, PlsqlBlockType.PROCEDURE_IMPL, "Plan__", true, 104577, 105195, 2);
 53.2623 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(55).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (action_ = 'CHECK')", true, 104849, 104888, 0);
 53.2624 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(55).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSIF (action_ = 'DO')", true, 104892, 105146, 0);
 53.2625 -            assertBlock(lstBlockFac.get(20).getChildBlocks(), 56, PlsqlBlockType.COMMENT, "-- LU SPECIFIC PROTECTED METHODS ", true, 105196, 105665, 0);
 53.2626 -            assertBlock(lstBlockFac.get(20).getChildBlocks(), 57, PlsqlBlockType.FUNCTION_IMPL, "Get_Year", true, 105668, 106214, 1);
 53.2627 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(57).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "get_attr", true, 105876, 106110, 0);
 53.2628 -            assertBlock(lstBlockFac.get(20).getChildBlocks(), 58, PlsqlBlockType.FUNCTION_IMPL, "Get_Distributed_Attr", true, 106215, 107799, 6);
 53.2629 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(58).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- distribute_str_       VARCHAR2(20);", true, 106631, 106668, 0);
 53.2630 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(58).getChildBlocks(), 1, PlsqlBlockType.CURSOR, "version_cur_", true, 106673, 106882, 0);
 53.2631 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(58).getChildBlocks(), 2, PlsqlBlockType.CURSOR, "total_cur_", true, 106890, 107095, 0);
 53.2632 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(58).getChildBlocks(), 3, PlsqlBlockType.IF, "IF  total_val_ IS NULL", true, 107255, 107378, 0);
 53.2633 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(58).getChildBlocks(), 4, PlsqlBlockType.COMMENT, "-- distribute_string_ := \"\";", true, 107382, 107409, 0);
 53.2634 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(58).getChildBlocks(), 5, PlsqlBlockType.FOR_LOOP, "temp_ IN version_cur_", true, 107413, 107744, 0);
 53.2635 -            assertBlock(lstBlockFac.get(20).getChildBlocks(), 59, PlsqlBlockType.FUNCTION_IMPL, "Get_Action", true, 107800, 108354, 1);
 53.2636 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(59).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "get_attr", true, 108012, 108248, 0);
 53.2637 -            assertBlock(lstBlockFac.get(20).getChildBlocks(), 60, PlsqlBlockType.FUNCTION_IMPL, "Get_Mea_State_Change_Date", true, 108355, 108965, 1);
 53.2638 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(60).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "get_attr", true, 108593, 108844, 0);
 53.2639 -            assertBlock(lstBlockFac.get(20).getChildBlocks(), 61, PlsqlBlockType.FUNCTION_IMPL, "Get_Budget_Version", true, 108966, 109552, 1);
 53.2640 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(61).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "get_attr", true, 109194, 109438, 0);
 53.2641 -            assertBlock(lstBlockFac.get(20).getChildBlocks(), 62, PlsqlBlockType.PROCEDURE_IMPL, "Update_Sales_Values", true, 109553, 127635, 23);
 53.2642 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(62).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "INDEX BY BINARY_INTEGER", true, 110844, 110867, 0);
 53.2643 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(62).getChildBlocks(), 1, PlsqlBlockType.CURSOR, "total_index_cur_", true, 110953, 111109, 0);
 53.2644 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(62).getChildBlocks(), 2, PlsqlBlockType.CURSOR, "get_period", true, 111114, 111273, 0);
 53.2645 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(62).getChildBlocks(), 3, PlsqlBlockType.COMMENT, "-- Bug 65540, begin", true, 111278, 111297, 0);
 53.2646 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(62).getChildBlocks(), 4, PlsqlBlockType.COMMENT, "-- Bug 65540, end", true, 111369, 111386, 0);
 53.2647 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(62).getChildBlocks(), 5, PlsqlBlockType.COMMENT, "-- val_arr_  Val_Array_Type;", true, 111562, 111589, 0);
 53.2648 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(62).getChildBlocks(), 6, PlsqlBlockType.IF, "IF  (from_where_ = 'FROM_COMPONENT')", true, 111594, 112151, 0);
 53.2649 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(62).getChildBlocks(), 7, PlsqlBlockType.IF, "IF  (from_where_ = 'FROM_MEASURE')", true, 112156, 112708, 0);
 53.2650 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(62).getChildBlocks(), 8, PlsqlBlockType.IF, "IF  (dist_logic_ = 'INDEX')", true, 112713, 114046, 2);
 53.2651 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(62).getChildBlocks().get(8).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (total_index_ IS NULL)", true, 112863, 113011, 0);
 53.2652 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(62).getChildBlocks().get(8).getChildBlocks(), 1, PlsqlBlockType.LOOP, "", true, 113136, 114022, 3);
 53.2653 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(62).getChildBlocks().get(8).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (index_value_ IS NULL)", true, 113366, 113556, 0);
 53.2654 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(62).getChildBlocks().get(8).getChildBlocks().get(1).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  (dist_type_ = 'PERCENTAGE')", true, 113566, 113747, 0);
 53.2655 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(62).getChildBlocks().get(8).getChildBlocks().get(1).getChildBlocks(), 2, PlsqlBlockType.IF, "ELSIF (dist_type_ = 'VALUE')", true, 113757, 113885, 0);
 53.2656 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(62).getChildBlocks(), 9, PlsqlBlockType.IF, "ELSIF (dist_logic_ != 'INDEX')", true, 114050, 118620, 18);
 53.2657 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(62).getChildBlocks().get(9).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (dist_ver_ = 'ACT')", true, 114092, 114162, 0);
 53.2658 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(62).getChildBlocks().get(9).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSIF (dist_ver_ = 'TAR')", true, 114169, 114242, 0);
 53.2659 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(62).getChildBlocks().get(9).getChildBlocks(), 2, PlsqlBlockType.IF, "ELSIF (dist_ver_ = 'V1')", true, 114249, 114317, 0);
 53.2660 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(62).getChildBlocks().get(9).getChildBlocks(), 3, PlsqlBlockType.IF, "ELSIF (dist_ver_ = 'V2')", true, 114324, 114392, 0);
 53.2661 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(62).getChildBlocks().get(9).getChildBlocks(), 4, PlsqlBlockType.IF, "ELSIF (dist_ver_ = 'V3')", true, 114399, 114467, 0);
 53.2662 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(62).getChildBlocks().get(9).getChildBlocks(), 5, PlsqlBlockType.IF, "ELSIF (dist_ver_ = 'V4')", true, 114474, 114542, 0);
 53.2663 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(62).getChildBlocks().get(9).getChildBlocks(), 6, PlsqlBlockType.IF, "ELSIF (dist_ver_ = 'V5')", true, 114549, 114617, 0);
 53.2664 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(62).getChildBlocks().get(9).getChildBlocks(), 7, PlsqlBlockType.IF, "ELSIF (dist_ver_ = 'V6')", true, 114624, 114692, 0);
 53.2665 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(62).getChildBlocks().get(9).getChildBlocks(), 8, PlsqlBlockType.IF, "ELSIF (dist_ver_ = 'V7')", true, 114699, 114767, 0);
 53.2666 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(62).getChildBlocks().get(9).getChildBlocks(), 9, PlsqlBlockType.IF, "ELSIF (dist_ver_ = 'V8')", true, 114774, 114842, 0);
 53.2667 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(62).getChildBlocks().get(9).getChildBlocks(), 10, PlsqlBlockType.IF, "ELSIF (dist_ver_ = 'V9')", true, 114849, 114917, 0);
 53.2668 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(62).getChildBlocks().get(9).getChildBlocks(), 11, PlsqlBlockType.IF, "ELSIF (dist_ver_ = 'V10')", true, 114924, 115008, 0);
 53.2669 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(62).getChildBlocks().get(9).getChildBlocks(), 12, PlsqlBlockType.IF, "IF ( from_where_= 'FROM_COMPONENT')", true, 115016, 115714, 0);
 53.2670 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(62).getChildBlocks().get(9).getChildBlocks(), 13, PlsqlBlockType.IF, "IF ( from_where_= 'FROM_MEASURE')", true, 115722, 116412, 0);
 53.2671 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(62).getChildBlocks().get(9).getChildBlocks(), 14, PlsqlBlockType.COMMENT, "-- ifs_assert_safe shsalk 20060117", true, 116420, 116454, 0);
 53.2672 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(62).getChildBlocks().get(9).getChildBlocks(), 15, PlsqlBlockType.IF, "IF  (total_val_ IS NULL)", true, 116610, 116767, 0);
 53.2673 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(62).getChildBlocks().get(9).getChildBlocks(), 16, PlsqlBlockType.COMMENT, "-- ifs_assert_safe shsalk 20060117", true, 116828, 116862, 0);
 53.2674 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(62).getChildBlocks().get(9).getChildBlocks(), 17, PlsqlBlockType.FOR_LOOP, "temp1_ USING environment_,scorecard_,component_,year_;", true, 116887, 118583, 2);
 53.2675 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(62).getChildBlocks().get(9).getChildBlocks().get(17).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (version_val_ IS NULL)", true, 117095, 117278, 0);
 53.2676 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(62).getChildBlocks().get(9).getChildBlocks().get(17).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSE", true, 117288, 118457, 2);
 53.2677 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(62).getChildBlocks().get(9).getChildBlocks().get(17).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (dist_logic_ = 'SYB')", true, 117305, 118034, 3);
 53.2678 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(62).getChildBlocks().get(9).getChildBlocks().get(17).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (index_value_ IS NULL)", true, 117448, 117671, 0);
 53.2679 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(62).getChildBlocks().get(9).getChildBlocks().get(17).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  (dist_type_ = 'PERCENTAGE')", true, 117687, 117873, 0);
 53.2680 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(62).getChildBlocks().get(9).getChildBlocks().get(17).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks(), 2, PlsqlBlockType.IF, "ELSIF (dist_type_ = 'VALUE')", true, 117889, 118034, 0);
 53.2681 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(62).getChildBlocks().get(9).getChildBlocks().get(17).getChildBlocks().get(1).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSIF (dist_logic_ = 'VERSION')", true, 118047, 118440, 2);
 53.2682 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(62).getChildBlocks().get(9).getChildBlocks().get(17).getChildBlocks().get(1).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (dist_type_ = 'PERCENTAGE')", true, 118099, 118272, 0);
 53.2683 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(62).getChildBlocks().get(9).getChildBlocks().get(17).getChildBlocks().get(1).getChildBlocks().get(1).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSIF (dist_type_ = 'VALUE')", true, 118288, 118420, 0);
 53.2684 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(62).getChildBlocks(), 10, PlsqlBlockType.IF, "IF  (dist_logic_ != 'VERSION')", true, 118778, 119134, 2);
 53.2685 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(62).getChildBlocks().get(10).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (dist_type_ = 'PERCENTAGE')", true, 118820, 118921, 0);
 53.2686 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(62).getChildBlocks().get(10).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  (year_value_ != total_dist_val_)", true, 118929, 119123, 1);
 53.2687 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(62).getChildBlocks().get(10).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.FOR_LOOP, "i IN 1..count_", true, 118979, 119109, 0);
 53.2688 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(62).getChildBlocks(), 11, PlsqlBlockType.IF, "IF  (count_= 1)", true, 119139, 119608, 1);
 53.2689 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(62).getChildBlocks().get(11).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "UPDATE scorecard_input_value_tab", true, 119164, 119607, 0);
 53.2690 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(62).getChildBlocks(), 12, PlsqlBlockType.IF, "ELSIF (count_= 2)", true, 119612, 120125, 1);
 53.2691 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(62).getChildBlocks().get(12).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "UPDATE scorecard_input_value_tab", true, 119640, 120124, 0);
 53.2692 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(62).getChildBlocks(), 13, PlsqlBlockType.IF, "ELSIF (count_= 3)", true, 120129, 120686, 1);
 53.2693 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(62).getChildBlocks().get(13).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "UPDATE scorecard_input_value_tab", true, 120157, 120685, 0);
 53.2694 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(62).getChildBlocks(), 14, PlsqlBlockType.IF, "ELSIF (count_= 4)", true, 120690, 121288, 1);
 53.2695 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(62).getChildBlocks().get(14).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "UPDATE scorecard_input_value_tab", true, 120718, 121287, 0);
 53.2696 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(62).getChildBlocks(), 15, PlsqlBlockType.IF, "ELSIF (count_= 5)", true, 121292, 121929, 1);
 53.2697 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(62).getChildBlocks().get(15).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "UPDATE scorecard_input_value_tab", true, 121320, 121928, 0);
 53.2698 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(62).getChildBlocks(), 16, PlsqlBlockType.IF, "ELSIF (count_= 6)", true, 121933, 122613, 1);
 53.2699 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(62).getChildBlocks().get(16).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "UPDATE scorecard_input_value_tab", true, 121961, 122612, 0);
 53.2700 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(62).getChildBlocks(), 17, PlsqlBlockType.IF, "ELSIF (count_= 7)", true, 122617, 123338, 1);
 53.2701 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(62).getChildBlocks().get(17).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "UPDATE scorecard_input_value_tab", true, 122645, 123337, 0);
 53.2702 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(62).getChildBlocks(), 18, PlsqlBlockType.IF, "ELSIF (count_= 8)", true, 123342, 124104, 1);
 53.2703 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(62).getChildBlocks().get(18).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "UPDATE scorecard_input_value_tab", true, 123370, 124103, 0);
 53.2704 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(62).getChildBlocks(), 19, PlsqlBlockType.IF, "ELSIF (count_= 9)", true, 124108, 124911, 1);
 53.2705 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(62).getChildBlocks().get(19).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "UPDATE scorecard_input_value_tab", true, 124136, 124910, 0);
 53.2706 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(62).getChildBlocks(), 20, PlsqlBlockType.IF, "ELSIF (count_= 10)", true, 124915, 125762, 1);
 53.2707 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(62).getChildBlocks().get(20).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "UPDATE scorecard_input_value_tab", true, 124944, 125761, 0);
 53.2708 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(62).getChildBlocks(), 21, PlsqlBlockType.IF, "ELSIF (count_= 11)", true, 125766, 126657, 1);
 53.2709 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(62).getChildBlocks().get(21).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "UPDATE scorecard_input_value_tab", true, 125796, 126656, 0);
 53.2710 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(62).getChildBlocks(), 22, PlsqlBlockType.IF, "ELSIF (count_= 12)", true, 126661, 127609, 1);
 53.2711 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(62).getChildBlocks().get(22).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "UPDATE scorecard_input_value_tab", true, 126691, 127594, 0);
 53.2712 -            assertBlock(lstBlockFac.get(20).getChildBlocks(), 63, PlsqlBlockType.PROCEDURE_IMPL, "Update_Distributed_Values", true, 127636, 151802, 2);
 53.2713 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(63).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (action_value_ = 'TRUE')", true, 128411, 151438, 3);
 53.2714 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(63).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.IF, "IF (from_where_ = 'FROM_COMPONENT')", true, 128546, 128772, 0);
 53.2715 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(63).getChildBlocks().get(0).getChildBlocks(), 1, PlsqlBlockType.IF, "IF (from_where_ = 'FROM_MEASURE')", true, 128780, 128861, 0);
 53.2716 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(63).getChildBlocks().get(0).getChildBlocks(), 2, PlsqlBlockType.IF, "IF  NOT(ref_type_ = 'REFERENCE')", true, 128869, 151438, 4);
 53.2717 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(63).getChildBlocks().get(0).getChildBlocks().get(2).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (from_where_ = 'FROM_COMPONENT')", true, 128916, 129190, 0);
 53.2718 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(63).getChildBlocks().get(0).getChildBlocks().get(2).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  (from_where_ = 'FROM_MEASURE')", true, 129201, 129471, 0);
 53.2719 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(63).getChildBlocks().get(0).getChildBlocks().get(2).getChildBlocks(), 2, PlsqlBlockType.IF, "IF  (year_value_ IS NULL)", true, 129543, 129971, 1);
 53.2720 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(63).getChildBlocks().get(0).getChildBlocks().get(2).getChildBlocks().get(2).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "UPDATE scorecard_input_value_tab", true, 129585, 129970, 0);
 53.2721 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(63).getChildBlocks().get(0).getChildBlocks().get(2).getChildBlocks(), 3, PlsqlBlockType.IF, "ELSE", true, 129981, 151424, 3);
 53.2722 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(63).getChildBlocks().get(0).getChildBlocks().get(2).getChildBlocks().get(3).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (dist_type_ = 'PERCENTAGE' AND dist_logic_ IS NULL)", true, 129998, 140747, 12);
 53.2723 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(63).getChildBlocks().get(0).getChildBlocks().get(2).getChildBlocks().get(3).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (period_count_ = 1)", true, 130073, 130652, 1);
 53.2724 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(63).getChildBlocks().get(0).getChildBlocks().get(2).getChildBlocks().get(3).getChildBlocks().get(0).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "UPDATE scorecard_input_value_tab", true, 130120, 130651, 0);
 53.2725 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(63).getChildBlocks().get(0).getChildBlocks().get(2).getChildBlocks().get(3).getChildBlocks().get(0).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSIF (period_count_ = 2)", true, 130668, 131302, 1);
 53.2726 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(63).getChildBlocks().get(0).getChildBlocks().get(2).getChildBlocks().get(3).getChildBlocks().get(0).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "UPDATE scorecard_input_value_tab", true, 130718, 131301, 0);
 53.2727 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(63).getChildBlocks().get(0).getChildBlocks().get(2).getChildBlocks().get(3).getChildBlocks().get(0).getChildBlocks(), 2, PlsqlBlockType.IF, "ELSIF (period_count_ = 3)", true, 131318, 132005, 1);
 53.2728 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(63).getChildBlocks().get(0).getChildBlocks().get(2).getChildBlocks().get(3).getChildBlocks().get(0).getChildBlocks().get(2).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "UPDATE scorecard_input_value_tab", true, 131368, 132004, 0);
 53.2729 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(63).getChildBlocks().get(0).getChildBlocks().get(2).getChildBlocks().get(3).getChildBlocks().get(0).getChildBlocks(), 3, PlsqlBlockType.IF, "ELSIF (period_count_ = 4)", true, 132021, 132761, 1);
 53.2730 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(63).getChildBlocks().get(0).getChildBlocks().get(2).getChildBlocks().get(3).getChildBlocks().get(0).getChildBlocks().get(3).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "UPDATE scorecard_input_value_tab", true, 132071, 132760, 0);
 53.2731 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(63).getChildBlocks().get(0).getChildBlocks().get(2).getChildBlocks().get(3).getChildBlocks().get(0).getChildBlocks(), 4, PlsqlBlockType.IF, "ELSIF (period_count_ = 5)", true, 132777, 133570, 1);
 53.2732 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(63).getChildBlocks().get(0).getChildBlocks().get(2).getChildBlocks().get(3).getChildBlocks().get(0).getChildBlocks().get(4).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "UPDATE scorecard_input_value_tab", true, 132827, 133569, 0);
 53.2733 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(63).getChildBlocks().get(0).getChildBlocks().get(2).getChildBlocks().get(3).getChildBlocks().get(0).getChildBlocks(), 5, PlsqlBlockType.IF, "ELSIF (period_count_ = 6)", true, 133586, 134432, 1);
 53.2734 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(63).getChildBlocks().get(0).getChildBlocks().get(2).getChildBlocks().get(3).getChildBlocks().get(0).getChildBlocks().get(5).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "UPDATE scorecard_input_value_tab", true, 133636, 134431, 0);
 53.2735 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(63).getChildBlocks().get(0).getChildBlocks().get(2).getChildBlocks().get(3).getChildBlocks().get(0).getChildBlocks(), 6, PlsqlBlockType.IF, "ELSIF (period_count_ = 7)", true, 134448, 135347, 1);
 53.2736 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(63).getChildBlocks().get(0).getChildBlocks().get(2).getChildBlocks().get(3).getChildBlocks().get(0).getChildBlocks().get(6).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "UPDATE scorecard_input_value_tab", true, 134498, 135346, 0);
 53.2737 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(63).getChildBlocks().get(0).getChildBlocks().get(2).getChildBlocks().get(3).getChildBlocks().get(0).getChildBlocks(), 7, PlsqlBlockType.IF, "ELSIF (period_count_ = 8)", true, 135363, 136315, 1);
 53.2738 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(63).getChildBlocks().get(0).getChildBlocks().get(2).getChildBlocks().get(3).getChildBlocks().get(0).getChildBlocks().get(7).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "UPDATE scorecard_input_value_tab", true, 135413, 136314, 0);
 53.2739 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(63).getChildBlocks().get(0).getChildBlocks().get(2).getChildBlocks().get(3).getChildBlocks().get(0).getChildBlocks(), 8, PlsqlBlockType.IF, "ELSIF (period_count_ = 9)", true, 136331, 137336, 1);
 53.2740 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(63).getChildBlocks().get(0).getChildBlocks().get(2).getChildBlocks().get(3).getChildBlocks().get(0).getChildBlocks().get(8).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "UPDATE scorecard_input_value_tab", true, 136381, 137335, 0);
 53.2741 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(63).getChildBlocks().get(0).getChildBlocks().get(2).getChildBlocks().get(3).getChildBlocks().get(0).getChildBlocks(), 9, PlsqlBlockType.IF, "ELSIF (period_count_ = 10)", true, 137352, 138412, 1);
 53.2742 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(63).getChildBlocks().get(0).getChildBlocks().get(2).getChildBlocks().get(3).getChildBlocks().get(0).getChildBlocks().get(9).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "UPDATE scorecard_input_value_tab", true, 137403, 138411, 0);
 53.2743 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(63).getChildBlocks().get(0).getChildBlocks().get(2).getChildBlocks().get(3).getChildBlocks().get(0).getChildBlocks(), 10, PlsqlBlockType.IF, "ELSIF (period_count_ = 11)", true, 138426, 139540, 1);
 53.2744 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(63).getChildBlocks().get(0).getChildBlocks().get(2).getChildBlocks().get(3).getChildBlocks().get(0).getChildBlocks().get(10).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "UPDATE scorecard_input_value_tab", true, 138477, 139539, 0);
 53.2745 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(63).getChildBlocks().get(0).getChildBlocks().get(2).getChildBlocks().get(3).getChildBlocks().get(0).getChildBlocks(), 11, PlsqlBlockType.IF, "ELSIF (period_count_ = 12)", true, 139556, 140747, 1);
 53.2746 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(63).getChildBlocks().get(0).getChildBlocks().get(2).getChildBlocks().get(3).getChildBlocks().get(0).getChildBlocks().get(11).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "UPDATE scorecard_input_value_tab", true, 139607, 140723, 0);
 53.2747 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(63).getChildBlocks().get(0).getChildBlocks().get(2).getChildBlocks().get(3).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSIF (dist_type_ = 'VALUE' AND dist_logic_ IS NULL)", true, 140762, 151120, 12);
 53.2748 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(63).getChildBlocks().get(0).getChildBlocks().get(2).getChildBlocks().get(3).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (period_count_ = 1)", true, 140912, 141484, 1);
 53.2749 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(63).getChildBlocks().get(0).getChildBlocks().get(2).getChildBlocks().get(3).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "UPDATE scorecard_input_value_tab", true, 140959, 141483, 0);
 53.2750 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(63).getChildBlocks().get(0).getChildBlocks().get(2).getChildBlocks().get(3).getChildBlocks().get(1).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSIF (period_count_ = 2)", true, 141500, 142122, 1);
 53.2751 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(63).getChildBlocks().get(0).getChildBlocks().get(2).getChildBlocks().get(3).getChildBlocks().get(1).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "UPDATE scorecard_input_value_tab", true, 141550, 142121, 0);
 53.2752 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(63).getChildBlocks().get(0).getChildBlocks().get(2).getChildBlocks().get(3).getChildBlocks().get(1).getChildBlocks(), 2, PlsqlBlockType.IF, "ELSIF (period_count_ = 3)", true, 142138, 142807, 1);
 53.2753 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(63).getChildBlocks().get(0).getChildBlocks().get(2).getChildBlocks().get(3).getChildBlocks().get(1).getChildBlocks().get(2).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "UPDATE scorecard_input_value_tab", true, 142188, 142806, 0);
 53.2754 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(63).getChildBlocks().get(0).getChildBlocks().get(2).getChildBlocks().get(3).getChildBlocks().get(1).getChildBlocks(), 3, PlsqlBlockType.IF, "ELSIF (period_count_ = 4)", true, 142823, 143539, 1);
 53.2755 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(63).getChildBlocks().get(0).getChildBlocks().get(2).getChildBlocks().get(3).getChildBlocks().get(1).getChildBlocks().get(3).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "UPDATE scorecard_input_value_tab", true, 142873, 143538, 0);
 53.2756 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(63).getChildBlocks().get(0).getChildBlocks().get(2).getChildBlocks().get(3).getChildBlocks().get(1).getChildBlocks(), 4, PlsqlBlockType.IF, "ELSIF (period_count_ = 5)", true, 143555, 144318, 1);
 53.2757 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(63).getChildBlocks().get(0).getChildBlocks().get(2).getChildBlocks().get(3).getChildBlocks().get(1).getChildBlocks().get(4).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "UPDATE scorecard_input_value_tab", true, 143605, 144317, 0);
 53.2758 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(63).getChildBlocks().get(0).getChildBlocks().get(2).getChildBlocks().get(3).getChildBlocks().get(1).getChildBlocks(), 5, PlsqlBlockType.IF, "ELSIF (period_count_ = 6)", true, 144334, 145144, 1);
 53.2759 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(63).getChildBlocks().get(0).getChildBlocks().get(2).getChildBlocks().get(3).getChildBlocks().get(1).getChildBlocks().get(5).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "UPDATE scorecard_input_value_tab", true, 144384, 145143, 0);
 53.2760 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(63).getChildBlocks().get(0).getChildBlocks().get(2).getChildBlocks().get(3).getChildBlocks().get(1).getChildBlocks(), 6, PlsqlBlockType.IF, "ELSIF (period_count_ = 7)", true, 145160, 146017, 1);
 53.2761 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(63).getChildBlocks().get(0).getChildBlocks().get(2).getChildBlocks().get(3).getChildBlocks().get(1).getChildBlocks().get(6).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "UPDATE scorecard_input_value_tab", true, 145210, 146016, 0);
 53.2762 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(63).getChildBlocks().get(0).getChildBlocks().get(2).getChildBlocks().get(3).getChildBlocks().get(1).getChildBlocks(), 7, PlsqlBlockType.IF, "ELSIF (period_count_ = 8)", true, 146033, 146937, 1);
 53.2763 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(63).getChildBlocks().get(0).getChildBlocks().get(2).getChildBlocks().get(3).getChildBlocks().get(1).getChildBlocks().get(7).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "UPDATE scorecard_input_value_tab", true, 146083, 146936, 0);
 53.2764 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(63).getChildBlocks().get(0).getChildBlocks().get(2).getChildBlocks().get(3).getChildBlocks().get(1).getChildBlocks(), 8, PlsqlBlockType.IF, "ELSIF (period_count_ = 9)", true, 146953, 147904, 1);
 53.2765 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(63).getChildBlocks().get(0).getChildBlocks().get(2).getChildBlocks().get(3).getChildBlocks().get(1).getChildBlocks().get(8).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "UPDATE scorecard_input_value_tab", true, 147003, 147903, 0);
 53.2766 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(63).getChildBlocks().get(0).getChildBlocks().get(2).getChildBlocks().get(3).getChildBlocks().get(1).getChildBlocks(), 9, PlsqlBlockType.IF, "ELSIF (period_count_ = 10)", true, 147920, 148920, 1);
 53.2767 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(63).getChildBlocks().get(0).getChildBlocks().get(2).getChildBlocks().get(3).getChildBlocks().get(1).getChildBlocks().get(9).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "UPDATE scorecard_input_value_tab", true, 147971, 148919, 0);
 53.2768 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(63).getChildBlocks().get(0).getChildBlocks().get(2).getChildBlocks().get(3).getChildBlocks().get(1).getChildBlocks(), 10, PlsqlBlockType.IF, "ELSIF (period_count_ = 11)", true, 148936, 149984, 1);
 53.2769 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(63).getChildBlocks().get(0).getChildBlocks().get(2).getChildBlocks().get(3).getChildBlocks().get(1).getChildBlocks().get(10).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "UPDATE scorecard_input_value_tab", true, 148987, 149983, 0);
 53.2770 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(63).getChildBlocks().get(0).getChildBlocks().get(2).getChildBlocks().get(3).getChildBlocks().get(1).getChildBlocks(), 11, PlsqlBlockType.IF, "ELSIF (period_count_ = 12)", true, 150000, 151120, 1);
 53.2771 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(63).getChildBlocks().get(0).getChildBlocks().get(2).getChildBlocks().get(3).getChildBlocks().get(1).getChildBlocks().get(11).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "UPDATE scorecard_input_value_tab", true, 150051, 151095, 0);
 53.2772 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(63).getChildBlocks().get(0).getChildBlocks().get(2).getChildBlocks().get(3).getChildBlocks(), 2, PlsqlBlockType.IF, "ELSIF ((dist_logic_ = 'SYB' OR dist_logic_ = 'VERSION' OR dist_logic_ = 'INDEX') AND (dist_type_ IS NOT NULL))", true, 151133, 151407, 0);
 53.2773 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(63).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSIF (action_value_ = 'FALSE')", true, 151442, 151771, 1);
 53.2774 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(63).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "UPDATE scorecard_input_value_tab", true, 151485, 151759, 0);
 53.2775 -            assertBlock(lstBlockFac.get(20).getChildBlocks(), 64, PlsqlBlockType.PROCEDURE_IMPL, "Publish_Scorecard", true, 151803, 152215, 1);
 53.2776 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(64).getChildBlocks(), 0, PlsqlBlockType.IF, "if  can_modify_ = 'TRUE'", true, 152091, 152192, 0);
 53.2777 -            assertBlock(lstBlockFac.get(20).getChildBlocks(), 65, PlsqlBlockType.PROCEDURE_IMPL, "Publish_Environment", true, 152216, 153414, 2);
 53.2778 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(65).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "get_scorecard", true, 152335, 152526, 0);
 53.2779 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(65).getChildBlocks(), 1, PlsqlBlockType.FOR_LOOP, "get_rec in get_scorecard", true, 152635, 153389, 2);
 53.2780 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(65).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (get_rec.objstate = 'Open')", true, 152676, 152951, 0);
 53.2781 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(65).getChildBlocks().get(1).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSE", true, 152958, 153376, 1);
 53.2782 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(65).getChildBlocks().get(1).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.IF, "if  can_modify_ = 'TRUE'", true, 153072, 153362, 0);
 53.2783 -            assertBlock(lstBlockFac.get(20).getChildBlocks(), 66, PlsqlBlockType.PROCEDURE_IMPL, "Calculate_Measures", true, 153417, 170886, 5);
 53.2784 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(66).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "measure_components_", true, 155976, 156206, 0);
 53.2785 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(66).getChildBlocks(), 1, PlsqlBlockType.CURSOR, "version_value_", true, 156210, 156570, 0);
 53.2786 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(66).getChildBlocks(), 2, PlsqlBlockType.CURSOR, "measure_value_", true, 156574, 156933, 0);
 53.2787 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(66).getChildBlocks(), 3, PlsqlBlockType.IF, "IF  plan_formula_ IS NOT NULL", true, 157772, 170604, 16);
 53.2788 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(66).getChildBlocks().get(3).getChildBlocks(), 0, PlsqlBlockType.FOR_LOOP, "measure_comp_ IN measure_components_", true, 158468, 161462, 1);
 53.2789 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(66).getChildBlocks().get(3).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  byteOffSet_ > 0", true, 158635, 161446, 13);
 53.2790 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(66).getChildBlocks().get(3).getChildBlocks().get(0).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (year_value_ IS NULL)", true, 158912, 159006, 0);
 53.2791 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(66).getChildBlocks().get(3).getChildBlocks().get(0).getChildBlocks().get(0).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  (p1_value_ IS NULL)", true, 159019, 159109, 0);
 53.2792 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(66).getChildBlocks().get(3).getChildBlocks().get(0).getChildBlocks().get(0).getChildBlocks(), 2, PlsqlBlockType.IF, "IF  (p2_value_ IS NULL)", true, 159122, 159212, 0);
 53.2793 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(66).getChildBlocks().get(3).getChildBlocks().get(0).getChildBlocks().get(0).getChildBlocks(), 3, PlsqlBlockType.IF, "IF  (p3_value_ IS NULL)", true, 159225, 159315, 0);
 53.2794 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(66).getChildBlocks().get(3).getChildBlocks().get(0).getChildBlocks().get(0).getChildBlocks(), 4, PlsqlBlockType.IF, "IF  (p4_value_ IS NULL)", true, 159328, 159418, 0);
 53.2795 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(66).getChildBlocks().get(3).getChildBlocks().get(0).getChildBlocks().get(0).getChildBlocks(), 5, PlsqlBlockType.IF, "IF  (p5_value_ IS NULL)", true, 159431, 159521, 0);
 53.2796 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(66).getChildBlocks().get(3).getChildBlocks().get(0).getChildBlocks().get(0).getChildBlocks(), 6, PlsqlBlockType.IF, "IF  (p6_value_ IS NULL)", true, 159534, 159624, 0);
 53.2797 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(66).getChildBlocks().get(3).getChildBlocks().get(0).getChildBlocks().get(0).getChildBlocks(), 7, PlsqlBlockType.IF, "IF  (p7_value_ IS NULL)", true, 159637, 159727, 0);
 53.2798 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(66).getChildBlocks().get(3).getChildBlocks().get(0).getChildBlocks().get(0).getChildBlocks(), 8, PlsqlBlockType.IF, "IF  (p8_value_ IS NULL)", true, 159740, 159830, 0);
 53.2799 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(66).getChildBlocks().get(3).getChildBlocks().get(0).getChildBlocks().get(0).getChildBlocks(), 9, PlsqlBlockType.IF, "IF  (p9_value_ IS NULL)", true, 159843, 159933, 0);
 53.2800 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(66).getChildBlocks().get(3).getChildBlocks().get(0).getChildBlocks().get(0).getChildBlocks(), 10, PlsqlBlockType.IF, "IF  (p10_value_ IS NULL)", true, 159946, 160038, 0);
 53.2801 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(66).getChildBlocks().get(3).getChildBlocks().get(0).getChildBlocks().get(0).getChildBlocks(), 11, PlsqlBlockType.IF, "IF  (p11_value_ IS NULL)", true, 160051, 160143, 0);
 53.2802 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(66).getChildBlocks().get(3).getChildBlocks().get(0).getChildBlocks().get(0).getChildBlocks(), 12, PlsqlBlockType.IF, "IF  (p12_value_ IS NULL)", true, 160156, 160248, 0);
 53.2803 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(66).getChildBlocks().get(3).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  (period_count_ = 1)", true, 162313, 162874, 1);
 53.2804 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(66).getChildBlocks().get(3).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- ifs_assert_safe samwlk 070515", true, 162350, 162382, 0);
 53.2805 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(66).getChildBlocks().get(3).getChildBlocks(), 2, PlsqlBlockType.IF, "IF  (period_count_ = 2)", true, 162881, 163447, 1);
 53.2806 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(66).getChildBlocks().get(3).getChildBlocks().get(2).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- ifs_assert_safe samwlk 070515", true, 162918, 162950, 0);
 53.2807 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(66).getChildBlocks().get(3).getChildBlocks(), 3, PlsqlBlockType.IF, "IF  (period_count_ = 3)", true, 163454, 164035, 1);
 53.2808 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(66).getChildBlocks().get(3).getChildBlocks().get(3).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- ifs_assert_safe samwlk 070515", true, 163491, 163523, 0);
 53.2809 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(66).getChildBlocks().get(3).getChildBlocks(), 4, PlsqlBlockType.IF, "IF  (period_count_ = 4)", true, 164042, 164628, 1);
 53.2810 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(66).getChildBlocks().get(3).getChildBlocks().get(4).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- ifs_assert_safe samwlk 070515", true, 164079, 164111, 0);
 53.2811 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(66).getChildBlocks().get(3).getChildBlocks(), 5, PlsqlBlockType.IF, "IF  (period_count_ = 5)", true, 164635, 165226, 1);
 53.2812 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(66).getChildBlocks().get(3).getChildBlocks().get(5).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- ifs_assert_safe samwlk 070515", true, 164672, 164704, 0);
 53.2813 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(66).getChildBlocks().get(3).getChildBlocks(), 6, PlsqlBlockType.IF, "IF  (period_count_ = 6)", true, 165233, 165829, 1);
 53.2814 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(66).getChildBlocks().get(3).getChildBlocks().get(6).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- ifs_assert_safe samwlk 070515", true, 165270, 165302, 0);
 53.2815 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(66).getChildBlocks().get(3).getChildBlocks(), 7, PlsqlBlockType.IF, "IF  (period_count_ = 7)", true, 165836, 166447, 1);
 53.2816 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(66).getChildBlocks().get(3).getChildBlocks().get(7).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- ifs_assert_safe samwlk 070515", true, 165873, 165905, 0);
 53.2817 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(66).getChildBlocks().get(3).getChildBlocks(), 8, PlsqlBlockType.IF, "IF  (period_count_ = 8)", true, 166454, 167080, 1);
 53.2818 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(66).getChildBlocks().get(3).getChildBlocks().get(8).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- ifs_assert_safe samwlk 070515", true, 166491, 166523, 0);
 53.2819 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(66).getChildBlocks().get(3).getChildBlocks(), 9, PlsqlBlockType.IF, "IF  (period_count_ = 9)", true, 167087, 167718, 1);
 53.2820 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(66).getChildBlocks().get(3).getChildBlocks().get(9).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- ifs_assert_safe samwlk 070515", true, 167124, 167156, 0);
 53.2821 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(66).getChildBlocks().get(3).getChildBlocks(), 10, PlsqlBlockType.IF, "IF  (period_count_ = 10)", true, 167725, 168363, 1);
 53.2822 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(66).getChildBlocks().get(3).getChildBlocks().get(10).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- ifs_assert_safe samwlk 070515", true, 167763, 167795, 0);
 53.2823 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(66).getChildBlocks().get(3).getChildBlocks(), 11, PlsqlBlockType.IF, "IF  (period_count_ = 11)", true, 168370, 169024, 1);
 53.2824 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(66).getChildBlocks().get(3).getChildBlocks().get(11).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- ifs_assert_safe samwlk 070515", true, 168408, 168440, 0);
 53.2825 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(66).getChildBlocks().get(3).getChildBlocks(), 12, PlsqlBlockType.IF, "IF  (period_count_ = 12)", true, 169031, 169690, 1);
 53.2826 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(66).getChildBlocks().get(3).getChildBlocks().get(12).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- ifs_assert_safe samwlk 070515", true, 169069, 169101, 0);
 53.2827 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(66).getChildBlocks().get(3).getChildBlocks(), 13, PlsqlBlockType.STATEMENT, "UPDATE scorecard_input_value_tab", true, 169697, 170446, 0);
 53.2828 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(66).getChildBlocks().get(3).getChildBlocks(), 14, PlsqlBlockType.COMMENT, "-- Bug 76573 Begin. Set the measure to planned state", true, 170454, 170506, 0);
 53.2829 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(66).getChildBlocks().get(3).getChildBlocks(), 15, PlsqlBlockType.COMMENT, "-- Bug 76573 End", true, 170588, 170604, 0);
 53.2830 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(66).getChildBlocks(), 4, PlsqlBlockType.IF, "ELSE", true, 170615, 170861, 0);
 53.2831 -            assertBlock(lstBlockFac.get(20).getChildBlocks(), 67, PlsqlBlockType.PROCEDURE_IMPL, "Update_Referred_Component", true, 170887, 173569, 3);
 53.2832 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(67).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "value_cur", true, 171156, 171526, 0);
 53.2833 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(67).getChildBlocks(), 1, PlsqlBlockType.CURSOR, "component_cur", true, 171530, 171811, 0);
 53.2834 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(67).getChildBlocks(), 2, PlsqlBlockType.FOR_LOOP, "component_cur_ IN component_cur", true, 171933, 173538, 1);
 53.2835 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(67).getChildBlocks().get(2).getChildBlocks(), 0, PlsqlBlockType.FOR_LOOP, "value_cur_ IN value_cur", true, 172109, 173438, 1);
 53.2836 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(67).getChildBlocks().get(2).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "UPDATE scorecard_input_value_tab", true, 172262, 173420, 0);
 53.2837 -            assertBlock(lstBlockFac.get(20).getChildBlocks(), 68, PlsqlBlockType.PROCEDURE_IMPL, "Delete_By_Passed_Value", true, 173570, 174182, 3);
 53.2838 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(68).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- objversion_ VARCHAR2(2000);", true, 173732, 173761, 0);
 53.2839 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(68).getChildBlocks(), 1, PlsqlBlockType.CURSOR, "Get_rows", true, 173765, 173900, 0);
 53.2840 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(68).getChildBlocks(), 2, PlsqlBlockType.FOR_LOOP, "get_rec in Get_rows", true, 174003, 174154, 1);
 53.2841 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(68).getChildBlocks().get(2).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- Delete___(get_rec.objid,get_rec);", true, 174038, 174075, 0);
 53.2842 -            assertBlock(lstBlockFac.get(20).getChildBlocks(), 69, PlsqlBlockType.PROCEDURE_IMPL, "Delete_Version_Passed", true, 174183, 174687, 2);
 53.2843 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(69).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "Get_rows", true, 174304, 174449, 0);
 53.2844 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(69).getChildBlocks(), 1, PlsqlBlockType.FOR_LOOP, "get_rec in Get_rows", true, 174552, 174660, 0);
 53.2845 -            assertBlock(lstBlockFac.get(20).getChildBlocks(), 70, PlsqlBlockType.PROCEDURE_IMPL, "Delete_Scorecard_Passed", true, 174688, 175204, 2);
 53.2846 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(70).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "Get_rows", true, 174814, 174963, 0);
 53.2847 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(70).getChildBlocks(), 1, PlsqlBlockType.FOR_LOOP, "get_rec in Get_rows", true, 175067, 175175, 0);
 53.2848 -            assertBlock(lstBlockFac.get(20).getChildBlocks(), 71, PlsqlBlockType.PROCEDURE_IMPL, "Insert_Data", true, 175205, 176460, 0);
 53.2849 -            assertBlock(lstBlockFac.get(20).getChildBlocks(), 72, PlsqlBlockType.PROCEDURE_IMPL, "Modify_Data", true, 176461, 177849, 0);
 53.2850 -            assertBlock(lstBlockFac.get(20).getChildBlocks(), 73, PlsqlBlockType.PROCEDURE_IMPL, "Delete_Data", true, 177850, 178313, 0);
 53.2851 -            assertBlock(lstBlockFac.get(20).getChildBlocks(), 74, PlsqlBlockType.PROCEDURE_IMPL, "Scorecard_Inputs_By_Batch", true, 178314, 179189, 2);
 53.2852 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(74).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (execution_ != 'NOW')", true, 179021, 179103, 0);
 53.2853 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(74).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSE", true, 179107, 179158, 0);
 53.2854 -            assertBlock(lstBlockFac.get(20).getChildBlocks(), 75, PlsqlBlockType.PROCEDURE_IMPL, "Input_Scorecard_Data", true, 179190, 190918, 12);
 53.2855 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(75).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "get_year_conn", true, 180690, 180849, 0);
 53.2856 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(75).getChildBlocks(), 1, PlsqlBlockType.CURSOR, "get_mea", true, 180854, 181056, 0);
 53.2857 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(75).getChildBlocks(), 2, PlsqlBlockType.CURSOR, "get_comp", true, 181061, 181308, 0);
 53.2858 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(75).getChildBlocks(), 3, PlsqlBlockType.CURSOR, "chk_exist", true, 181313, 181609, 0);
 53.2859 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(75).getChildBlocks(), 4, PlsqlBlockType.IF, "IF  scorecard_ IS null", true, 182611, 182812, 0);
 53.2860 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(75).getChildBlocks(), 5, PlsqlBlockType.IF, "ELSE", true, 182818, 182981, 0);
 53.2861 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(75).getChildBlocks(), 6, PlsqlBlockType.IF, "if  version_ IS null", true, 182988, 183260, 0);
 53.2862 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(75).getChildBlocks(), 7, PlsqlBlockType.IF, "ELSE", true, 183266, 183430, 0);
 53.2863 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(75).getChildBlocks(), 8, PlsqlBlockType.IF, "if  years_ IS null", true, 183437, 183592, 0);
 53.2864 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(75).getChildBlocks(), 9, PlsqlBlockType.IF, "ELSE", true, 183598, 183755, 0);
 53.2865 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(75).getChildBlocks(), 10, PlsqlBlockType.COMMENT, "-- ifs_assert_safe shsalk 20060117", true, 183762, 183796, 0);
 53.2866 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(75).getChildBlocks(), 11, PlsqlBlockType.FOR_LOOP, "ssql_;", true, 183813, 190872, 2);
 53.2867 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(75).getChildBlocks().get(11).getChildBlocks(), 0, PlsqlBlockType.FOR_LOOP, "meaNo IN get_mea(env, tempscr_)", true, 183941, 187181, 2);
 53.2868 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(75).getChildBlocks().get(11).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- ifs_assert_safe shsalk 20060117", true, 183993, 184027, 0);
 53.2869 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(75).getChildBlocks().get(11).getChildBlocks().get(0).getChildBlocks(), 1, PlsqlBlockType.FOR_LOOP, "ssql2_;", true, 184050, 187134, 2);
 53.2870 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(75).getChildBlocks().get(11).getChildBlocks().get(0).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- ifs_assert_safe shsalk 20060117", true, 184173, 184207, 0);
 53.2871 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(75).getChildBlocks().get(11).getChildBlocks().get(0).getChildBlocks().get(1).getChildBlocks(), 1, PlsqlBlockType.FOR_LOOP, "ssql3_;", true, 184234, 187083, 1);
 53.2872 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(75).getChildBlocks().get(11).getChildBlocks().get(0).getChildBlocks().get(1).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (tempver_ != 'ASS')", true, 184567, 187057, 4);
 53.2873 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(75).getChildBlocks().get(11).getChildBlocks().get(0).getChildBlocks().get(1).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (get_year_conn%FOUND)", true, 184729, 184802, 0);
 53.2874 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(75).getChildBlocks().get(11).getChildBlocks().get(0).getChildBlocks().get(1).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSE", true, 184824, 184901, 0);
 53.2875 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(75).getChildBlocks().get(11).getChildBlocks().get(0).getChildBlocks().get(1).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks(), 2, PlsqlBlockType.IF, "IF  (rec_not_exist = 1)", true, 184966, 186362, 4);
 53.2876 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(75).getChildBlocks().get(11).getChildBlocks().get(0).getChildBlocks().get(1).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks().get(2).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (chk_exist%FOUND)", true, 185214, 185283, 0);
 53.2877 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(75).getChildBlocks().get(11).getChildBlocks().get(0).getChildBlocks().get(1).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks().get(2).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSE", true, 185308, 185388, 0);
 53.2878 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(75).getChildBlocks().get(11).getChildBlocks().get(0).getChildBlocks().get(1).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks().get(2).getChildBlocks(), 2, PlsqlBlockType.IF, "IF  (rec_exists = 1)", true, 185455, 185761, 0);
 53.2879 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(75).getChildBlocks().get(11).getChildBlocks().get(0).getChildBlocks().get(1).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks().get(2).getChildBlocks(), 3, PlsqlBlockType.IF, "ELSE", true, 185786, 186111, 0);
 53.2880 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(75).getChildBlocks().get(11).getChildBlocks().get(0).getChildBlocks().get(1).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks(), 3, PlsqlBlockType.IF, "ELSE", true, 186385, 187030, 3);
 53.2881 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(75).getChildBlocks().get(11).getChildBlocks().get(0).getChildBlocks().get(1).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks().get(3).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (chk_exist%FOUND)", true, 186560, 186633, 0);
 53.2882 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(75).getChildBlocks().get(11).getChildBlocks().get(0).getChildBlocks().get(1).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks().get(3).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSE", true, 186658, 186741, 0);
 53.2883 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(75).getChildBlocks().get(11).getChildBlocks().get(0).getChildBlocks().get(1).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks().get(3).getChildBlocks(), 2, PlsqlBlockType.IF, "IF  (rec_exists_del = 1)", true, 186808, 187001, 0);
 53.2884 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(75).getChildBlocks().get(11).getChildBlocks(), 1, PlsqlBlockType.FOR_LOOP, "meaNo IN get_mea(env, tempscr_)", true, 187192, 190855, 1);
 53.2885 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(75).getChildBlocks().get(11).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.FOR_LOOP, "compNo IN get_comp(env, tempscr_, meaNo.level_id)", true, 187245, 190836, 2);
 53.2886 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(75).getChildBlocks().get(11).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- ifs_assert_safe shsalk 20060117", true, 187351, 187385, 0);
 53.2887 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(75).getChildBlocks().get(11).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks(), 1, PlsqlBlockType.FOR_LOOP, "ssql2_;", true, 187412, 190784, 2);
 53.2888 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(75).getChildBlocks().get(11).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- ifs_assert_safe shsalk 20060117", true, 187590, 187624, 0);
 53.2889 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(75).getChildBlocks().get(11).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks().get(1).getChildBlocks(), 1, PlsqlBlockType.FOR_LOOP, "ssql3_;", true, 187655, 190727, 1);
 53.2890 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(75).getChildBlocks().get(11).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks().get(1).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (tempver_ != 'ASS')", true, 188053, 190699, 4);
 53.2891 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(75).getChildBlocks().get(11).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks().get(1).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (get_year_conn%FOUND)", true, 188224, 188301, 0);
 53.2892 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(75).getChildBlocks().get(11).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks().get(1).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSE", true, 188326, 188410, 0);
 53.2893 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(75).getChildBlocks().get(11).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks().get(1).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks(), 2, PlsqlBlockType.IF, "IF  (rec_not_exist2 = 1)", true, 188481, 189951, 4);
 53.2894 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(75).getChildBlocks().get(11).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks().get(1).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks().get(2).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (chk_exist%FOUND)", true, 188744, 188817, 0);
 53.2895 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(75).getChildBlocks().get(11).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks().get(1).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks().get(2).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSE", true, 188845, 188932, 0);
 53.2896 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(75).getChildBlocks().get(11).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks().get(1).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks().get(2).getChildBlocks(), 2, PlsqlBlockType.IF, "IF  (rec_exists2 = 1)", true, 189005, 189319, 0);
 53.2897 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(75).getChildBlocks().get(11).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks().get(1).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks().get(2).getChildBlocks(), 3, PlsqlBlockType.IF, "ELSE", true, 189347, 189687, 0);
 53.2898 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(75).getChildBlocks().get(11).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks().get(1).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks(), 3, PlsqlBlockType.IF, "ELSE", true, 189977, 190669, 3);
 53.2899 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(75).getChildBlocks().get(11).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks().get(1).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks().get(3).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (chk_exist%FOUND)", true, 190162, 190239, 0);
 53.2900 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(75).getChildBlocks().get(11).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks().get(1).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks().get(3).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSE", true, 190267, 190358, 0);
 53.2901 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(75).getChildBlocks().get(11).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks().get(1).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks().get(3).getChildBlocks(), 2, PlsqlBlockType.IF, "IF  (rec_exists_del2 = 1)", true, 190431, 190637, 0);
 53.2902 -            assertBlock(lstBlockFac.get(20).getChildBlocks(), 76, PlsqlBlockType.PROCEDURE_IMPL, "Start_Inputing_Scorecards", true, 190920, 191375, 0);
 53.2903 -            assertBlock(lstBlockFac.get(20).getChildBlocks(), 77, PlsqlBlockType.PROCEDURE_IMPL, "Hierachical_Distribution", true, 191376, 196033, 7);
 53.2904 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(77).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "get_scorecard_objects", true, 191618, 191868, 0);
 53.2905 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(77).getChildBlocks(), 1, PlsqlBlockType.CURSOR, "get_components", true, 191873, 192136, 0);
 53.2906 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(77).getChildBlocks(), 2, PlsqlBlockType.CURSOR, "get_child_scorecards", true, 192141, 192298, 0);
 53.2907 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(77).getChildBlocks(), 3, PlsqlBlockType.CURSOR, "check_component_selected", true, 192303, 192597, 0);
 53.2908 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(77).getChildBlocks(), 4, PlsqlBlockType.STATEMENT, "INDEX BY BINARY_INTEGER", true, 192698, 192721, 0);
 53.2909 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(77).getChildBlocks(), 5, PlsqlBlockType.IF, "IF  object_type_ = 'COMPONENT'", true, 193192, 195709, 7);
 53.2910 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(77).getChildBlocks().get(5).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- Get measure components in parent", true, 193233, 193268, 0);
 53.2911 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(77).getChildBlocks().get(5).getChildBlocks(), 1, PlsqlBlockType.FOR_LOOP, "components_ IN get_components(scorecard_)", true, 193313, 193786, 1);
 53.2912 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(77).getChildBlocks().get(5).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  check_component_selected%FOUND", true, 193570, 193729, 0);
 53.2913 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(77).getChildBlocks().get(5).getChildBlocks(), 2, PlsqlBlockType.IF, "IF  index_>0", true, 193794, 194916, 1);
 53.2914 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(77).getChildBlocks().get(5).getChildBlocks().get(2).getChildBlocks(), 0, PlsqlBlockType.FOR_LOOP, "child_scorecards_ IN get_child_scorecards", true, 193862, 194916, 2);
 53.2915 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(77).getChildBlocks().get(5).getChildBlocks().get(2).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.FOR_LOOP, "components_ IN get_components(child_scorecards_.scorecard)", true, 193964, 194650, 2);
 53.2916 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(77).getChildBlocks().get(5).getChildBlocks().get(2).getChildBlocks().get(0).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.FOR_LOOP, "index_ IN 1 .. parent_component_count_", true, 194087, 194327, 1);
 53.2917 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(77).getChildBlocks().get(5).getChildBlocks().get(2).getChildBlocks().get(0).getChildBlocks().get(0).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  component_arr_(index_)=components_.level_id", true, 194153, 194302, 0);
 53.2918 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(77).getChildBlocks().get(5).getChildBlocks().get(2).getChildBlocks().get(0).getChildBlocks().get(0).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  NOT component_exist_", true, 194343, 194563, 0);
 53.2919 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(77).getChildBlocks().get(5).getChildBlocks().get(2).getChildBlocks().get(0).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  child_component_count_!=parent_component_count_", true, 194663, 194897, 0);
 53.2920 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(77).getChildBlocks().get(5).getChildBlocks(), 3, PlsqlBlockType.IF, "ELSE", true, 194923, 195050, 0);
 53.2921 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(77).getChildBlocks().get(5).getChildBlocks(), 4, PlsqlBlockType.IF, "IF  sel_index_>0", true, 195058, 195273, 1);
 53.2922 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(77).getChildBlocks().get(5).getChildBlocks().get(4).getChildBlocks(), 0, PlsqlBlockType.FOR_LOOP, "index_ IN 1..sel_index_", true, 195088, 195273, 0);
 53.2923 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(77).getChildBlocks().get(5).getChildBlocks(), 5, PlsqlBlockType.IF, "ELSE", true, 195280, 195412, 0);
 53.2924 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(77).getChildBlocks().get(5).getChildBlocks(), 6, PlsqlBlockType.FOR_LOOP, "child_scorecards_ IN get_child_scorecards", true, 195419, 195709, 1);
 53.2925 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(77).getChildBlocks().get(5).getChildBlocks().get(6).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- Bug 76573 Removed the call to Set_To_Planned() since it is called inside Calculate_Measures() method", true, 195590, 195693, 0);
 53.2926 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(77).getChildBlocks(), 6, PlsqlBlockType.IF, "ELSE", true, 195713, 196002, 1);
 53.2927 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(77).getChildBlocks().get(6).getChildBlocks(), 0, PlsqlBlockType.FOR_LOOP, "scorecard_objects_ IN get_scorecard_objects", true, 195724, 195991, 0);
 53.2928 -            assertBlock(lstBlockFac.get(20).getChildBlocks(), 78, PlsqlBlockType.PROCEDURE_IMPL, "Publish_Environment_Batch", true, 196035, 196725, 3);
 53.2929 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(78).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- Start_Publish_Environments___(attr_);", true, 196416, 196455, 0);
 53.2930 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(78).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  (schedule_ != 'NOW')", true, 196552, 196632, 0);
 53.2931 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(78).getChildBlocks(), 2, PlsqlBlockType.IF, "ELSE", true, 196636, 196694, 0);
 53.2932 -            assertBlock(lstBlockFac.get(20).getChildBlocks(), 79, PlsqlBlockType.PROCEDURE_IMPL, "Set_Publish_Scorecards", true, 196726, 197262, 0);
 53.2933 -            assertBlock(lstBlockFac.get(20).getChildBlocks(), 80, PlsqlBlockType.PROCEDURE_IMPL, "Publish_Scorecard_Batch", true, 197263, 198029, 3);
 53.2934 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(80).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- Start_Publish_Environments___(attr_);", true, 197725, 197764, 0);
 53.2935 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(80).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  (schedule_ != 'NOW')", true, 197859, 197939, 0);
 53.2936 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(80).getChildBlocks(), 2, PlsqlBlockType.IF, "ELSE", true, 197943, 197999, 0);
 53.2937 -            assertBlock(lstBlockFac.get(20).getChildBlocks(), 81, PlsqlBlockType.PROCEDURE_IMPL, "Hierarchical_Consolidation", true, 198030, 203117, 9);
 53.2938 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(81).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "get_scorecard_objects", true, 198261, 198511, 0);
 53.2939 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(81).getChildBlocks(), 1, PlsqlBlockType.CURSOR, "get_components", true, 198516, 198779, 0);
 53.2940 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(81).getChildBlocks(), 2, PlsqlBlockType.CURSOR, "get_child_scorecards", true, 198784, 198941, 0);
 53.2941 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(81).getChildBlocks(), 3, PlsqlBlockType.CURSOR, "check_child_scorecards", true, 198946, 199097, 0);
 53.2942 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(81).getChildBlocks(), 4, PlsqlBlockType.CURSOR, "check_component_selected", true, 199102, 199396, 0);
 53.2943 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(81).getChildBlocks(), 5, PlsqlBlockType.STATEMENT, "INDEX BY BINARY_INTEGER", true, 199497, 199520, 0);
 53.2944 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(81).getChildBlocks(), 6, PlsqlBlockType.IF, "IF  (check_child_scorecards%NOTFOUND)", true, 200127, 200337, 0);
 53.2945 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(81).getChildBlocks(), 7, PlsqlBlockType.IF, "IF  object_type_ = 'COMPONENT'", true, 200376, 202795, 6);
 53.2946 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(81).getChildBlocks().get(7).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- Get measure components in parent", true, 200417, 200452, 0);
 53.2947 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(81).getChildBlocks().get(7).getChildBlocks(), 1, PlsqlBlockType.FOR_LOOP, "components_ IN get_components(scorecard_)", true, 200497, 200970, 1);
 53.2948 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(81).getChildBlocks().get(7).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  check_component_selected%FOUND", true, 200754, 200913, 0);
 53.2949 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(81).getChildBlocks().get(7).getChildBlocks(), 2, PlsqlBlockType.IF, "IF  index_>0", true, 200978, 202100, 1);
 53.2950 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(81).getChildBlocks().get(7).getChildBlocks().get(2).getChildBlocks(), 0, PlsqlBlockType.FOR_LOOP, "child_scorecards_ IN get_child_scorecards", true, 201046, 202100, 2);
 53.2951 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(81).getChildBlocks().get(7).getChildBlocks().get(2).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.FOR_LOOP, "components_ IN get_components(child_scorecards_.scorecard)", true, 201148, 201834, 2);
 53.2952 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(81).getChildBlocks().get(7).getChildBlocks().get(2).getChildBlocks().get(0).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.FOR_LOOP, "index_ IN 1 .. parent_component_count_", true, 201271, 201511, 1);
 53.2953 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(81).getChildBlocks().get(7).getChildBlocks().get(2).getChildBlocks().get(0).getChildBlocks().get(0).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  component_arr_(index_)=components_.level_id", true, 201337, 201486, 0);
 53.2954 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(81).getChildBlocks().get(7).getChildBlocks().get(2).getChildBlocks().get(0).getChildBlocks().get(0).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  NOT component_exist_", true, 201527, 201747, 0);
 53.2955 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(81).getChildBlocks().get(7).getChildBlocks().get(2).getChildBlocks().get(0).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  child_component_count_!=parent_component_count_", true, 201847, 202081, 0);
 53.2956 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(81).getChildBlocks().get(7).getChildBlocks(), 3, PlsqlBlockType.IF, "ELSE", true, 202107, 202234, 0);
 53.2957 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(81).getChildBlocks().get(7).getChildBlocks(), 4, PlsqlBlockType.IF, "IF  sel_index_>0", true, 202242, 202656, 2);
 53.2958 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(81).getChildBlocks().get(7).getChildBlocks().get(4).getChildBlocks(), 0, PlsqlBlockType.FOR_LOOP, "index_ IN 1..sel_index_", true, 202272, 202449, 0);
 53.2959 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(81).getChildBlocks().get(7).getChildBlocks().get(4).getChildBlocks(), 1, PlsqlBlockType.COMMENT, "-- Bug 76573 Removed the call to Set_To_Planned() since it is called inside Calculate_Measures() method", true, 202553, 202656, 0);
 53.2960 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(81).getChildBlocks().get(7).getChildBlocks(), 5, PlsqlBlockType.IF, "ELSE", true, 202663, 202795, 0);
 53.2961 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(81).getChildBlocks(), 8, PlsqlBlockType.IF, "ELSE", true, 202801, 203084, 1);
 53.2962 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(81).getChildBlocks().get(8).getChildBlocks(), 0, PlsqlBlockType.FOR_LOOP, "scorecard_objects_ IN get_scorecard_objects", true, 202813, 203072, 0);
 53.2963 -            assertBlock(lstBlockFac.get(20).getChildBlocks(), 82, PlsqlBlockType.PROCEDURE_IMPL, "Consolidate_Values", true, 203118, 212627, 11);
 53.2964 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(82).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "INDEX BY BINARY_INTEGER", true, 203834, 203857, 0);
 53.2965 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(82).getChildBlocks(), 1, PlsqlBlockType.CURSOR, "get_child_scorecards", true, 204206, 204375, 0);
 53.2966 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(82).getChildBlocks(), 2, PlsqlBlockType.CURSOR, "get_open_child_scr", true, 204380, 204562, 0);
 53.2967 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(82).getChildBlocks(), 3, PlsqlBlockType.CURSOR, "get_total_period_val_", true, 204568, 206389, 0);
 53.2968 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(82).getChildBlocks(), 4, PlsqlBlockType.CURSOR, "get_period_val_", true, 206395, 208204, 0);
 53.2969 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(82).getChildBlocks(), 5, PlsqlBlockType.COMMENT, "-- value_distribution_type_ := scorecard_Structure_api.Get_Value_Dist_Type_Db(scorecard_,scorecard_object_,environment_,object_type_);", true, 208305, 208438, 0);
 53.2970 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(82).getChildBlocks(), 6, PlsqlBlockType.IF, "IF  value_distribution_type_ IS NULL", true, 208558, 209007, 2);
 53.2971 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(82).getChildBlocks().get(6).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  object_type_='MEASURE'", true, 208605, 208802, 0);
 53.2972 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(82).getChildBlocks().get(6).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSE", true, 208809, 208996, 0);
 53.2973 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(82).getChildBlocks(), 7, PlsqlBlockType.FOR_LOOP, "child_scorecards_ IN get_child_scorecards", true, 209013, 209733, 2);
 53.2974 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(82).getChildBlocks().get(7).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (temp_val_ = '1')", true, 209262, 209443, 0);
 53.2975 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(82).getChildBlocks().get(7).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  NOT Check_Exist___(environment_,child_scorecards_.scorecard,year_,version_,scorecard_object_)", true, 209451, 209719, 0);
 53.2976 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(82).getChildBlocks(), 8, PlsqlBlockType.FOR_LOOP, "temp_period_count_ IN 1..period_count_", true, 209738, 210210, 1);
 53.2977 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(82).getChildBlocks().get(8).getChildBlocks(), 0, PlsqlBlockType.LOOP, "", true, 209841, 210168, 1);
 53.2978 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(82).getChildBlocks().get(8).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (temp_period_value_ IS NULL)", true, 209963, 210152, 0);
 53.2979 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(82).getChildBlocks(), 9, PlsqlBlockType.IF, "IF  (value_distribution_type_ = 'PERCENTAGE')", true, 210859, 211452, 1);
 53.2980 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(82).getChildBlocks().get(9).getChildBlocks(), 0, PlsqlBlockType.FOR_LOOP, "temp_period_count_ IN 1..period_count_", true, 210993, 211405, 0);
 53.2981 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(82).getChildBlocks(), 10, PlsqlBlockType.IF, "ELSIF (value_distribution_type_ = 'VALUE')", true, 211457, 211836, 1);
 53.2982 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(82).getChildBlocks().get(10).getChildBlocks(), 0, PlsqlBlockType.FOR_LOOP, "temp_period_count_ IN 1..period_count_", true, 211512, 211824, 0);
 53.2983 -            assertBlock(lstBlockFac.get(20).getChildBlocks(), 83, PlsqlBlockType.PROCEDURE_IMPL, "All_Hierarchical_Logic", true, 212628, 217991, 8);
 53.2984 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(83).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "get_scorecard_objects", true, 213291, 213535, 0);
 53.2985 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(83).getChildBlocks(), 1, PlsqlBlockType.CURSOR, "get_period_count", true, 213540, 213679, 0);
 53.2986 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(83).getChildBlocks(), 2, PlsqlBlockType.CURSOR, "get_scorecard_measures", true, 213684, 213906, 0);
 53.2987 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(83).getChildBlocks(), 3, PlsqlBlockType.CURSOR, "get_childs", true, 213911, 214086, 0);
 53.2988 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(83).getChildBlocks(), 4, PlsqlBlockType.CURSOR, "get_childs_for_cons", true, 214091, 214406, 0);
 53.2989 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(83).getChildBlocks(), 5, PlsqlBlockType.IF, "IF  (get_childs%NOTFOUND)", true, 214575, 214660, 0);
 53.2990 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(83).getChildBlocks(), 6, PlsqlBlockType.IF, "ELSE", true, 214664, 214703, 0);
 53.2991 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(83).getChildBlocks(), 7, PlsqlBlockType.IF, "IF  (child_exists_ = 'TRUE')", true, 214708, 217963, 3);
 53.2992 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(83).getChildBlocks().get(7).getChildBlocks(), 0, PlsqlBlockType.FOR_LOOP, "get_scorecard_objects_ IN get_scorecard_objects(scorecard_)", true, 214748, 215118, 0);
 53.2993 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(83).getChildBlocks().get(7).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  (action_ = 'DISTRIBUTION')", true, 215344, 216008, 3);
 53.2994 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(83).getChildBlocks().get(7).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (comp_level_ = 'TRUE')", true, 215388, 215705, 1);
 53.2995 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(83).getChildBlocks().get(7).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.FOR_LOOP, "get_scorecard_measures_ IN get_scorecard_measures(scorecard_)", true, 215431, 215705, 0);
 53.2996 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(83).getChildBlocks().get(7).getChildBlocks().get(1).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSE", true, 215715, 215849, 0);
 53.2997 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(83).getChildBlocks().get(7).getChildBlocks().get(1).getChildBlocks(), 2, PlsqlBlockType.FOR_LOOP, "get_childs_ IN get_childs", true, 215859, 216008, 0);
 53.2998 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(83).getChildBlocks().get(7).getChildBlocks(), 2, PlsqlBlockType.IF, "ELSIF (action_ = 'CONSOLIDATION')", true, 216016, 217952, 3);
 53.2999 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(83).getChildBlocks().get(7).getChildBlocks().get(2).getChildBlocks(), 0, PlsqlBlockType.FOR_LOOP, "get_childs_for_cons_ IN  get_childs_for_cons", true, 216064, 217307, 2);
 53.3000 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(83).getChildBlocks().get(7).getChildBlocks().get(2).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.FOR_LOOP, "get_scorecard_objects_ IN get_scorecard_objects(get_childs_for_cons_.scorecard)", true, 216130, 216586, 0);
 53.3001 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(83).getChildBlocks().get(7).getChildBlocks().get(2).getChildBlocks().get(0).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  (Scorecard_API.Get_Child_Count(get_childs_for_cons_.scorecard,environment_) >=1)", true, 216599, 217288, 2);
 53.3002 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(83).getChildBlocks().get(7).getChildBlocks().get(2).getChildBlocks().get(0).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (comp_level_ = 'TRUE')", true, 216703, 217084, 1);
 53.3003 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(83).getChildBlocks().get(7).getChildBlocks().get(2).getChildBlocks().get(0).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.FOR_LOOP, "get_scorecard_measures_ IN get_scorecard_measures(get_childs_for_cons_.scorecard)", true, 216752, 217084, 0);
 53.3004 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(83).getChildBlocks().get(7).getChildBlocks().get(2).getChildBlocks().get(0).getChildBlocks().get(1).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSE", true, 217100, 217268, 0);
 53.3005 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(83).getChildBlocks().get(7).getChildBlocks().get(2).getChildBlocks(), 1, PlsqlBlockType.COMMENT, "-- for the selected scorecard", true, 217317, 217346, 0);
 53.3006 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(83).getChildBlocks().get(7).getChildBlocks().get(2).getChildBlocks(), 2, PlsqlBlockType.IF, "IF  (Scorecard_API.Get_Child_Count(scorecard_,environment_) >=1)", true, 217356, 217938, 2);
 53.3007 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(83).getChildBlocks().get(7).getChildBlocks().get(2).getChildBlocks().get(2).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (comp_level_ = 'TRUE')", true, 217437, 217766, 1);
 53.3008 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(83).getChildBlocks().get(7).getChildBlocks().get(2).getChildBlocks().get(2).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.FOR_LOOP, "get_scorecard_measures_ IN get_scorecard_measures(scorecard_)", true, 217483, 217766, 0);
 53.3009 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(83).getChildBlocks().get(7).getChildBlocks().get(2).getChildBlocks().get(2).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSE", true, 217779, 217921, 0);
 53.3010 -            assertBlock(lstBlockFac.get(20).getChildBlocks(), 84, PlsqlBlockType.PROCEDURE_IMPL, "Call_Hierarchical_Logic", true, 217992, 218913, 0);
 53.3011 -            assertBlock(lstBlockFac.get(20).getChildBlocks(), 85, PlsqlBlockType.PROCEDURE_IMPL, "Start_Hierarchical_Logic", true, 218914, 219428, 0);
 53.3012 -            assertBlock(lstBlockFac.get(20).getChildBlocks(), 86, PlsqlBlockType.PROCEDURE_IMPL, "Background_Hierarchical_Logic", true, 219429, 220430, 2);
 53.3013 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(86).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (execution_plan_ != 'NOW')", true, 220245, 220337, 0);
 53.3014 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(86).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSE", true, 220341, 220395, 0);
 53.3015 -            assertBlock(lstBlockFac.get(20).getChildBlocks(), 87, PlsqlBlockType.PROCEDURE_IMPL, "Set_To_Planned", true, 220431, 221614, 2);
 53.3016 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(87).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "get_attr", true, 220766, 220995, 0);
 53.3017 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(87).getChildBlocks(), 1, PlsqlBlockType.COMMENT, "-- rec2_:=Lock_By_Keys___(environment_,scorecard_,year_,version_,scorecard_object_);", true, 221311, 221505, 0);
 53.3018 -            assertBlock(lstBlockFac.get(20).getChildBlocks(), 88, PlsqlBlockType.FUNCTION_IMPL, "Get_Sco_Obj_State_Date", true, 221615, 222103, 1);
 53.3019 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(88).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "get_attr", true, 221794, 221985, 0);
 53.3020 -            assertBlock(lstBlockFac.get(20).getChildBlocks(), 89, PlsqlBlockType.PROCEDURE_IMPL, "Budget_And_Calculate", true, 222104, 233629, 9);
 53.3021 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(89).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "INDEX BY BINARY_INTEGER", true, 223409, 223432, 0);
 53.3022 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(89).getChildBlocks(), 1, PlsqlBlockType.CURSOR, "get_comp_details", true, 224030, 224139, 0);
 53.3023 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(89).getChildBlocks(), 2, PlsqlBlockType.CURSOR, "get_period_details", true, 224141, 224315, 0);
 53.3024 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(89).getChildBlocks(), 3, PlsqlBlockType.CURSOR, "get_code_part", true, 224317, 224438, 0);
 53.3025 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(89).getChildBlocks(), 4, PlsqlBlockType.IF, "IF  NOT scr_code_part_ IS NULL", true, 225344, 225684, 0);
 53.3026 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(89).getChildBlocks(), 5, PlsqlBlockType.IF, "ELSE", true, 225691, 225740, 0);
 53.3027 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(89).getChildBlocks(), 6, PlsqlBlockType.COMMENT, "-- since table_name_ is hardcoded we can set asserted", true, 225748, 225842, 0);
 53.3028 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(89).getChildBlocks(), 7, PlsqlBlockType.FOR_LOOP, "input_value_tab_stmt_;\n\n      OPEN get_period_details;", true, 225875, 226165, 0);
 53.3029 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(89).getChildBlocks(), 8, PlsqlBlockType.LOOP, "", true, 226242, 233463, 18);
 53.3030 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(89).getChildBlocks().get(8).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- check amount type", true, 226564, 226646, 0);
 53.3031 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(89).getChildBlocks().get(8).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  component_rec_.amount_type = 'AMTBAL'", true, 226656, 226921, 0);
 53.3032 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(89).getChildBlocks().get(8).getChildBlocks(), 2, PlsqlBlockType.IF, "ELSIF component_rec_.amount_type = 'CURBAL'", true, 226931, 227244, 0);
 53.3033 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(89).getChildBlocks().get(8).getChildBlocks(), 3, PlsqlBlockType.IF, "ELSIF component_rec_.amount_type = 'QTYBAL'", true, 227254, 227528, 0);
 53.3034 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(89).getChildBlocks().get(8).getChildBlocks(), 4, PlsqlBlockType.IF, "ELSIF component_rec_.amount_type = 'PROJBAL'", true, 227538, 227807, 0);
 53.3035 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(89).getChildBlocks().get(8).getChildBlocks(), 5, PlsqlBlockType.IF, "ELSIF component_rec_.amount_type = 'PRJCURBAL'", true, 227817, 228133, 0);
 53.3036 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(89).getChildBlocks().get(8).getChildBlocks(), 6, PlsqlBlockType.IF, "ELSIF component_rec_.amount_type = 'PROJQTY'", true, 228143, 228435, 0);
 53.3037 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(89).getChildBlocks().get(8).getChildBlocks(), 7, PlsqlBlockType.COMMENT, "-- Add ledger Id", true, 228746, 228762, 0);
 53.3038 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(89).getChildBlocks().get(8).getChildBlocks(), 8, PlsqlBlockType.COMMENT, "-- Add account list", true, 228848, 228867, 0);
 53.3039 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(89).getChildBlocks().get(8).getChildBlocks(), 9, PlsqlBlockType.IF, "IF  NOT account_list_ IS null", true, 228985, 229234, 0);
 53.3040 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(89).getChildBlocks().get(8).getChildBlocks(), 10, PlsqlBlockType.COMMENT, "-- check amount type", true, 229245, 229265, 0);
 53.3041 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(89).getChildBlocks().get(8).getChildBlocks(), 11, PlsqlBlockType.IF, "IF  component_rec_.amount_type = 'PROJBAL'  OR component_rec_.amount_type = 'PROJQTY' OR component_rec_.amount_type ='PRJCURBAL'", true, 229275, 229498, 0);
 53.3042 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(89).getChildBlocks().get(8).getChildBlocks(), 12, PlsqlBlockType.COMMENT, "-- Initialize field values", true, 229745, 229771, 0);
 53.3043 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(89).getChildBlocks().get(8).getChildBlocks(), 13, PlsqlBlockType.COMMENT, "-- ifs_assert_safe shsalk 20060117", true, 230238, 230272, 0);
 53.3044 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(89).getChildBlocks().get(8).getChildBlocks(), 14, PlsqlBlockType.FOR_LOOP, "source_stmt_ USING company_,budget_version_,year_,component_rec_.ledger_id;\n         count_period_ :=1;\n         is_visited_:=false;", true, 230306, 231846, 14);
 53.3045 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(89).getChildBlocks().get(8).getChildBlocks().get(14).getChildBlocks(), 0, PlsqlBlockType.FOR_LOOP, "i IN 1..count_", true, 230598, 230796, 1);
 53.3046 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(89).getChildBlocks().get(8).getChildBlocks().get(14).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  budget_year_ = per_match_identity_type_(i)", true, 230638, 230774, 0);
 53.3047 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(89).getChildBlocks().get(8).getChildBlocks().get(14).getChildBlocks(), 1, PlsqlBlockType.CASE, "CASE  count_period_\n                   WHEN 1", true, 230810, 230898, 0);
 53.3048 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(89).getChildBlocks().get(8).getChildBlocks().get(14).getChildBlocks(), 2, PlsqlBlockType.CASE, "WHEN 2", true, 230918, 230968, 0);
 53.3049 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(89).getChildBlocks().get(8).getChildBlocks().get(14).getChildBlocks(), 3, PlsqlBlockType.CASE, "WHEN 3", true, 230988, 231038, 0);
 53.3050 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(89).getChildBlocks().get(8).getChildBlocks().get(14).getChildBlocks(), 4, PlsqlBlockType.CASE, "WHEN 4", true, 231058, 231108, 0);
 53.3051 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(89).getChildBlocks().get(8).getChildBlocks().get(14).getChildBlocks(), 5, PlsqlBlockType.CASE, "WHEN 5", true, 231128, 231178, 0);
 53.3052 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(89).getChildBlocks().get(8).getChildBlocks().get(14).getChildBlocks(), 6, PlsqlBlockType.CASE, "WHEN 6", true, 231198, 231248, 0);
 53.3053 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(89).getChildBlocks().get(8).getChildBlocks().get(14).getChildBlocks(), 7, PlsqlBlockType.CASE, "WHEN 7", true, 231268, 231318, 0);
 53.3054 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(89).getChildBlocks().get(8).getChildBlocks().get(14).getChildBlocks(), 8, PlsqlBlockType.CASE, "WHEN 8", true, 231338, 231388, 0);
 53.3055 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(89).getChildBlocks().get(8).getChildBlocks().get(14).getChildBlocks(), 9, PlsqlBlockType.CASE, "WHEN 9", true, 231408, 231458, 0);
 53.3056 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(89).getChildBlocks().get(8).getChildBlocks().get(14).getChildBlocks(), 10, PlsqlBlockType.CASE, "WHEN 10", true, 231478, 231528, 0);
 53.3057 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(89).getChildBlocks().get(8).getChildBlocks().get(14).getChildBlocks(), 11, PlsqlBlockType.CASE, "WHEN 11", true, 231548, 231598, 0);
 53.3058 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(89).getChildBlocks().get(8).getChildBlocks().get(14).getChildBlocks(), 12, PlsqlBlockType.CASE, "WHEN 12", true, 231618, 231668, 0);
 53.3059 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(89).getChildBlocks().get(8).getChildBlocks().get(14).getChildBlocks(), 13, PlsqlBlockType.CASE, "ELSE", true, 231688, 231794, 0);
 53.3060 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(89).getChildBlocks().get(8).getChildBlocks(), 15, PlsqlBlockType.IF, "IF  NOT is_visited_", true, 231892, 232086, 0);
 53.3061 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(89).getChildBlocks().get(8).getChildBlocks(), 16, PlsqlBlockType.IF, "IF  mea_type_ = 'PERCENTAGE'", true, 233124, 233249, 0);
 53.3062 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(89).getChildBlocks().get(8).getChildBlocks(), 17, PlsqlBlockType.IF, "ELSIF mea_type_ = 'VALUE'", true, 233259, 233354, 0);
 53.3063 -            assertBlock(lstBlockFac.get(20).getChildBlocks(), 90, PlsqlBlockType.PROCEDURE_IMPL, "Get_Error_Msg_For_Comp", true, 233631, 234162, 2);
 53.3064 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(90).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (check_value_ = 'TRUE')", true, 233838, 233900, 0);
 53.3065 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(90).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSE", true, 233904, 234134, 1);
 53.3066 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(90).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  invalid_comp_ <> 0", true, 233973, 234123, 0);
 53.3067 -            assertBlock(lstBlockFac.get(20).getChildBlocks(), 91, PlsqlBlockType.PROCEDURE_IMPL, "Return_Periods", true, 234163, 236217, 3);
 53.3068 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(91).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "get_period", true, 234598, 234755, 0);
 53.3069 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(91).getChildBlocks(), 1, PlsqlBlockType.CURSOR, "get_periodCount", true, 234760, 234901, 0);
 53.3070 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(91).getChildBlocks(), 2, PlsqlBlockType.FOR_LOOP, "i IN 1..per_no", true, 235350, 236175, 12);
 53.3071 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(91).getChildBlocks().get(2).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (i = 1)", true, 235420, 235468, 0);
 53.3072 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(91).getChildBlocks().get(2).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSIF (i = 2)", true, 235478, 235529, 0);
 53.3073 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(91).getChildBlocks().get(2).getChildBlocks(), 2, PlsqlBlockType.IF, "ELSIF (i = 3)", true, 235539, 235590, 0);
 53.3074 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(91).getChildBlocks().get(2).getChildBlocks(), 3, PlsqlBlockType.IF, "ELSIF (i = 4)", true, 235600, 235651, 0);
 53.3075 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(91).getChildBlocks().get(2).getChildBlocks(), 4, PlsqlBlockType.IF, "ELSIF (i = 5)", true, 235661, 235712, 0);
 53.3076 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(91).getChildBlocks().get(2).getChildBlocks(), 5, PlsqlBlockType.IF, "ELSIF (i = 6)", true, 235722, 235773, 0);
 53.3077 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(91).getChildBlocks().get(2).getChildBlocks(), 6, PlsqlBlockType.IF, "ELSIF (i = 7)", true, 235783, 235834, 0);
 53.3078 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(91).getChildBlocks().get(2).getChildBlocks(), 7, PlsqlBlockType.IF, "ELSIF (i = 8)", true, 235844, 235895, 0);
 53.3079 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(91).getChildBlocks().get(2).getChildBlocks(), 8, PlsqlBlockType.IF, "ELSIF (i = 9)", true, 235905, 235956, 0);
 53.3080 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(91).getChildBlocks().get(2).getChildBlocks(), 9, PlsqlBlockType.IF, "ELSIF (i = 10)", true, 235966, 236019, 0);
 53.3081 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(91).getChildBlocks().get(2).getChildBlocks(), 10, PlsqlBlockType.IF, "ELSIF (i = 11)", true, 236029, 236082, 0);
 53.3082 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(91).getChildBlocks().get(2).getChildBlocks(), 11, PlsqlBlockType.IF, "ELSIF (i = 12)", true, 236092, 236162, 0);
 53.3083 -            assertBlock(lstBlockFac.get(20).getChildBlocks(), 92, PlsqlBlockType.PROCEDURE_IMPL, "Import_Planned_Values", true, 236218, 238930, 2);
 53.3084 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(92).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "get_update_record", true, 236818, 237113, 0);
 53.3085 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(92).getChildBlocks(), 1, PlsqlBlockType.LOOP, "", true, 237212, 238902, 2);
 53.3086 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(92).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.WHILE_LOOP, "( Client_SYS.Get_Next_From_Attr(key_value_attr_, ptr_, name_, value_) )", true, 237224, 237618, 2);
 53.3087 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(92).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (name_ = 'KEY')", true, 237317, 237492, 0);
 53.3088 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(92).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSIF (name_ = 'VALUE')", true, 237502, 237601, 0);
 53.3089 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(92).getChildBlocks().get(1).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  ((get_update_record%FOUND) AND (column_ IS NOT NULL))", true, 237975, 238765, 1);
 53.3090 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(92).getChildBlocks().get(1).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "BLOCK COMMENT", true, 238522, 238751, 0);
 53.3091 -            assertBlock(lstBlockFac.get(20).getChildBlocks(), 93, PlsqlBlockType.PROCEDURE_IMPL, "Calculate_Year_Value", true, 238932, 242594, 16);
 53.3092 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(93).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "measure_value", true, 239923, 240318, 0);
 53.3093 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(93).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  (formula_p1_ IS NOT NULL)", true, 240756, 240866, 0);
 53.3094 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(93).getChildBlocks(), 2, PlsqlBlockType.IF, "IF  (formula_p2_ IS NOT NULL)", true, 240871, 240981, 0);
 53.3095 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(93).getChildBlocks(), 3, PlsqlBlockType.IF, "IF  (formula_p3_ IS NOT NULL)", true, 240986, 241096, 0);
 53.3096 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(93).getChildBlocks(), 4, PlsqlBlockType.IF, "IF  (formula_p4_ IS NOT NULL)", true, 241101, 241211, 0);
 53.3097 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(93).getChildBlocks(), 5, PlsqlBlockType.IF, "IF  (formula_p5_ IS NOT NULL)", true, 241216, 241326, 0);
 53.3098 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(93).getChildBlocks(), 6, PlsqlBlockType.IF, "IF  (formula_p6_ IS NOT NULL)", true, 241331, 241441, 0);
 53.3099 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(93).getChildBlocks(), 7, PlsqlBlockType.IF, "IF  (formula_p7_ IS NOT NULL)", true, 241446, 241556, 0);
 53.3100 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(93).getChildBlocks(), 8, PlsqlBlockType.IF, "IF  (formula_p8_ IS NOT NULL)", true, 241561, 241671, 0);
 53.3101 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(93).getChildBlocks(), 9, PlsqlBlockType.IF, "IF  (formula_p9_ IS NOT NULL)", true, 241676, 241786, 0);
 53.3102 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(93).getChildBlocks(), 10, PlsqlBlockType.IF, "IF  (formula_p10_ IS NOT NULL)", true, 241791, 241903, 0);
 53.3103 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(93).getChildBlocks(), 11, PlsqlBlockType.IF, "IF  (formula_p11_ IS NOT NULL)", true, 241908, 242020, 0);
 53.3104 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(93).getChildBlocks(), 12, PlsqlBlockType.IF, "IF  (formula_p12_ IS NOT NULL)", true, 242025, 242137, 0);
 53.3105 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(93).getChildBlocks(), 13, PlsqlBlockType.IF, "IF  (measure_type_ = 'PERCENTAGE' AND count_ > 0)", true, 242142, 242228, 0);
 53.3106 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(93).getChildBlocks(), 14, PlsqlBlockType.IF, "ELSIF NOT(measure_type_ = 'VALUE')", true, 242232, 242304, 0);
 53.3107 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(93).getChildBlocks(), 15, PlsqlBlockType.IF, "IF  (total_ IS NOT NULL)", true, 242309, 242567, 0);
 53.3108 -            assertBlock(lstBlockFac.get(20).getChildBlocks(), 94, PlsqlBlockType.PROCEDURE_IMPL, "Aggregate_Planned_Values", true, 242595, 244073, 2);
 53.3109 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(94).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "get_update_record", true, 242893, 243172, 0);
 53.3110 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(94).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  (get_update_record%FOUND)", true, 243323, 244014, 1);
 53.3111 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(94).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "BLOCK COMMENT", true, 243789, 244003, 0);
 53.3112 -            assertBlock(lstBlockFac.get(20).getChildBlocks(), 95, PlsqlBlockType.PROCEDURE_IMPL, "Load_Planned_Values", true, 244075, 251638, 4);
 53.3113 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(95).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- Bug 66984 Begin", true, 244483, 244500, 0);
 53.3114 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(95).getChildBlocks(), 1, PlsqlBlockType.COMMENT, "-- Bug 66984 End", true, 244545, 244560, 0);
 53.3115 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(95).getChildBlocks(), 2, PlsqlBlockType.CURSOR, "get_keys", true, 245134, 245355, 0);
 53.3116 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(95).getChildBlocks(), 3, PlsqlBlockType.IF, "IF  ( bp_installed_ )", true, 245435, 251606, 17);
 53.3117 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(95).getChildBlocks().get(3).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (rec_.p1_key IS NOT NULL)", true, 245634, 245744, 0);
 53.3118 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(95).getChildBlocks().get(3).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  (rec_.p2_key IS NOT NULL)", true, 245752, 245862, 0);
 53.3119 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(95).getChildBlocks().get(3).getChildBlocks(), 2, PlsqlBlockType.IF, "IF  (rec_.p3_key IS NOT NULL)", true, 245870, 245980, 0);
 53.3120 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(95).getChildBlocks().get(3).getChildBlocks(), 3, PlsqlBlockType.IF, "IF  (rec_.p4_key IS NOT NULL)", true, 245988, 246098, 0);
 53.3121 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(95).getChildBlocks().get(3).getChildBlocks(), 4, PlsqlBlockType.IF, "IF  (rec_.p5_key IS NOT NULL)", true, 246106, 246216, 0);
 53.3122 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(95).getChildBlocks().get(3).getChildBlocks(), 5, PlsqlBlockType.IF, "IF  (rec_.p6_key IS NOT NULL)", true, 246224, 246334, 0);
 53.3123 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(95).getChildBlocks().get(3).getChildBlocks(), 6, PlsqlBlockType.IF, "IF  (rec_.p7_key IS NOT NULL)", true, 246342, 246452, 0);
 53.3124 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(95).getChildBlocks().get(3).getChildBlocks(), 7, PlsqlBlockType.IF, "IF  (rec_.p8_key IS NOT NULL)", true, 246460, 246570, 0);
 53.3125 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(95).getChildBlocks().get(3).getChildBlocks(), 8, PlsqlBlockType.IF, "IF  (rec_.p9_key IS NOT NULL)", true, 246578, 246688, 0);
 53.3126 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(95).getChildBlocks().get(3).getChildBlocks(), 9, PlsqlBlockType.IF, "IF  (rec_.p10_key IS NOT NULL)", true, 246696, 246809, 0);
 53.3127 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(95).getChildBlocks().get(3).getChildBlocks(), 10, PlsqlBlockType.IF, "IF  (rec_.p11_key IS NOT NULL)", true, 246817, 246930, 0);
 53.3128 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(95).getChildBlocks().get(3).getChildBlocks(), 11, PlsqlBlockType.IF, "IF  (rec_.p12_key IS NOT NULL)", true, 246938, 247051, 0);
 53.3129 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(95).getChildBlocks().get(3).getChildBlocks(), 12, PlsqlBlockType.IF, "IF  (attr_ IS NOT NULL)", true, 247059, 247146, 0);
 53.3130 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(95).getChildBlocks().get(3).getChildBlocks(), 13, PlsqlBlockType.COMMENT, "-- Bug 66984 Begin,Added the line for Budget_Template_API.Is_Period_Matching() method call to stop loading values from templates which don't have matching periods", true, 247153, 247399, 0);
 53.3131 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(95).getChildBlocks().get(3).getChildBlocks(), 14, PlsqlBlockType.COMMENT, "-- ifs_assert_safe iswalk 060111", true, 247833, 247865, 0);
 53.3132 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(95).getChildBlocks().get(3).getChildBlocks(), 15, PlsqlBlockType.FOR_LOOP, "stmt_bp_call_ USING scorecard_, environment_,'TRUE';", true, 247889, 251573, 4);
 53.3133 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(95).getChildBlocks().get(3).getChildBlocks().get(15).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- Bug 66984 Begin,Added the if condition line and the else part", true, 248013, 248076, 0);
 53.3134 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(95).getChildBlocks().get(3).getChildBlocks().get(15).getChildBlocks(), 1, PlsqlBlockType.IF, "IF   get_budpro%FOUND", true, 248086, 251453, 3);
 53.3135 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(95).getChildBlocks().get(3).getChildBlocks().get(15).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  ((template_rec_.company IS NULL) AND (attr_ IS NOT NULL))", true, 248124, 250274, 3);
 53.3136 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(95).getChildBlocks().get(3).getChildBlocks().get(15).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- ifs_assert_safe iswalk 060111", true, 248622, 248654, 0);
 53.3137 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(95).getChildBlocks().get(3).getChildBlocks().get(15).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  (node_rec_.company IS NOT NULL)", true, 248850, 250077, 2);
 53.3138 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(95).getChildBlocks().get(3).getChildBlocks().get(15).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- Load the value from Budget Node", true, 248908, 248941, 0);
 53.3139 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(95).getChildBlocks().get(3).getChildBlocks().get(15).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks().get(1).getChildBlocks(), 1, PlsqlBlockType.COMMENT, "-- ifs_assert_safe iswalk 060111", true, 249595, 249627, 0);
 53.3140 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(95).getChildBlocks().get(3).getChildBlocks().get(15).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks(), 2, PlsqlBlockType.IF, "ELSE", true, 250093, 250274, 0);
 53.3141 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(95).getChildBlocks().get(3).getChildBlocks().get(15).getChildBlocks().get(1).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSIF (attr_ IS NOT NULL)", true, 250287, 251165, 2);
 53.3142 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(95).getChildBlocks().get(3).getChildBlocks().get(15).getChildBlocks().get(1).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- Load the value from Budget Template", true, 250330, 250367, 0);
 53.3143 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(95).getChildBlocks().get(3).getChildBlocks().get(15).getChildBlocks().get(1).getChildBlocks().get(1).getChildBlocks(), 1, PlsqlBlockType.COMMENT, "-- ifs_assert_safe iswalk 060111", true, 250806, 250838, 0);
 53.3144 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(95).getChildBlocks().get(3).getChildBlocks().get(15).getChildBlocks().get(1).getChildBlocks(), 2, PlsqlBlockType.IF, "IF  (attr_ IS NOT NULL)", true, 251178, 251453, 0);
 53.3145 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(95).getChildBlocks().get(3).getChildBlocks().get(15).getChildBlocks(), 2, PlsqlBlockType.IF, "ELSE", true, 251463, 251532, 0);
 53.3146 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(95).getChildBlocks().get(3).getChildBlocks().get(15).getChildBlocks(), 3, PlsqlBlockType.COMMENT, "-- Bug 66984 End", true, 251542, 251557, 0);
 53.3147 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(95).getChildBlocks().get(3).getChildBlocks(), 16, PlsqlBlockType.COMMENT, "-- Bug 66984 End", true, 251580, 251595, 0);
 53.3148 -            assertBlock(lstBlockFac.get(20).getChildBlocks(), 96, PlsqlBlockType.FUNCTION_IMPL, "Get_No_Of_Periods", true, 251640, 253416, 13);
 53.3149 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(96).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "get_record", true, 251895, 252168, 0);
 53.3150 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(96).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  (rec_.p1_key IS NOT NULL)", true, 252252, 252340, 0);
 53.3151 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(96).getChildBlocks(), 2, PlsqlBlockType.IF, "IF  (rec_.p2_key IS NOT NULL)", true, 252345, 252433, 0);
 53.3152 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(96).getChildBlocks(), 3, PlsqlBlockType.IF, "IF  (rec_.p3_key IS NOT NULL)", true, 252438, 252526, 0);
 53.3153 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(96).getChildBlocks(), 4, PlsqlBlockType.IF, "IF  (rec_.p4_key IS NOT NULL)", true, 252531, 252619, 0);
 53.3154 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(96).getChildBlocks(), 5, PlsqlBlockType.IF, "IF  (rec_.p5_key IS NOT NULL)", true, 252624, 252712, 0);
 53.3155 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(96).getChildBlocks(), 6, PlsqlBlockType.IF, "IF  (rec_.p6_key IS NOT NULL)", true, 252717, 252805, 0);
 53.3156 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(96).getChildBlocks(), 7, PlsqlBlockType.IF, "IF  (rec_.p7_key IS NOT NULL)", true, 252810, 252898, 0);
 53.3157 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(96).getChildBlocks(), 8, PlsqlBlockType.IF, "IF  (rec_.p8_key IS NOT NULL)", true, 252903, 252991, 0);
 53.3158 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(96).getChildBlocks(), 9, PlsqlBlockType.IF, "IF  (rec_.p9_key IS NOT NULL)", true, 252996, 253084, 0);
 53.3159 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(96).getChildBlocks(), 10, PlsqlBlockType.IF, "IF  (rec_.p10_key IS NOT NULL)", true, 253089, 253178, 0);
 53.3160 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(96).getChildBlocks(), 11, PlsqlBlockType.IF, "IF  (rec_.p11_key IS NOT NULL)", true, 253183, 253272, 0);
 53.3161 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(96).getChildBlocks(), 12, PlsqlBlockType.IF, "IF  (rec_.p12_key IS NOT NULL)", true, 253277, 253366, 0);
 53.3162 -            assertBlock(lstBlockFac.get(20).getChildBlocks(), 97, PlsqlBlockType.PROCEDURE_IMPL, "Import_Fin_Values", true, 253418, 271245, 10);
 53.3163 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(97).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- Bug 71089, Begin", true, 253670, 253689, 0);
 53.3164 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(97).getChildBlocks(), 1, PlsqlBlockType.COMMENT, "-- Bug 71089, End", true, 253740, 253757, 0);
 53.3165 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(97).getChildBlocks(), 2, PlsqlBlockType.COMMENT, "-- Bug 71089, Begin", true, 254548, 254567, 0);
 53.3166 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(97).getChildBlocks(), 3, PlsqlBlockType.COMMENT, "-- Bug 71089, End", true, 254610, 254627, 0);
 53.3167 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(97).getChildBlocks(), 4, PlsqlBlockType.COMMENT, "-- Bug 68118, Begin", true, 255079, 255098, 0);
 53.3168 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(97).getChildBlocks(), 5, PlsqlBlockType.COMMENT, "-- Bug 68118, End", true, 255288, 255305, 0);
 53.3169 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(97).getChildBlocks(), 6, PlsqlBlockType.CURSOR, "get_keys", true, 255310, 255629, 0);
 53.3170 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(97).getChildBlocks(), 7, PlsqlBlockType.CURSOR, "get_measure_accounts", true, 255633, 255754, 0);
 53.3171 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(97).getChildBlocks(), 8, PlsqlBlockType.COMMENT, "-- Bug 68118, Begin", true, 255764, 255894, 0);
 53.3172 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(97).getChildBlocks(), 9, PlsqlBlockType.IF, "IF  ( bp_installed_ )", true, 255976, 271222, 15);
 53.3173 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(97).getChildBlocks().get(9).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- Bug 71089, Begin", true, 256045, 256064, 0);
 53.3174 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(97).getChildBlocks().get(9).getChildBlocks(), 1, PlsqlBlockType.COMMENT, "-- ifs_assert_safe makrlk 080205", true, 256459, 256515, 0);
 53.3175 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(97).getChildBlocks().get(9).getChildBlocks(), 2, PlsqlBlockType.IF, "IF  (temp_rec_.p1_key IS NOT NULL)", true, 256605, 256974, 0);
 53.3176 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(97).getChildBlocks().get(9).getChildBlocks(), 3, PlsqlBlockType.IF, "IF  (temp_rec_.p2_key IS NOT NULL)", true, 256982, 257351, 0);
 53.3177 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(97).getChildBlocks().get(9).getChildBlocks(), 4, PlsqlBlockType.IF, "IF  (temp_rec_.p3_key IS NOT NULL)", true, 257359, 257728, 0);
 53.3178 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(97).getChildBlocks().get(9).getChildBlocks(), 5, PlsqlBlockType.IF, "IF  (temp_rec_.p4_key IS NOT NULL)", true, 257736, 258105, 0);
 53.3179 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(97).getChildBlocks().get(9).getChildBlocks(), 6, PlsqlBlockType.IF, "IF  (temp_rec_.p5_key IS NOT NULL)", true, 258113, 258482, 0);
 53.3180 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(97).getChildBlocks().get(9).getChildBlocks(), 7, PlsqlBlockType.IF, "IF  (temp_rec_.p6_key IS NOT NULL)", true, 258490, 258859, 0);
 53.3181 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(97).getChildBlocks().get(9).getChildBlocks(), 8, PlsqlBlockType.IF, "IF  (temp_rec_.p7_key IS NOT NULL)", true, 258867, 259236, 0);
 53.3182 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(97).getChildBlocks().get(9).getChildBlocks(), 9, PlsqlBlockType.IF, "IF  (temp_rec_.p8_key IS NOT NULL)", true, 259244, 259613, 0);
 53.3183 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(97).getChildBlocks().get(9).getChildBlocks(), 10, PlsqlBlockType.IF, "IF  (temp_rec_.p9_key IS NOT NULL)", true, 259621, 259990, 0);
 53.3184 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(97).getChildBlocks().get(9).getChildBlocks(), 11, PlsqlBlockType.IF, "IF  (temp_rec_.p10_key IS NOT NULL)", true, 259998, 260373, 0);
 53.3185 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(97).getChildBlocks().get(9).getChildBlocks(), 12, PlsqlBlockType.IF, "IF  (temp_rec_.p11_key IS NOT NULL)", true, 260381, 260756, 0);
 53.3186 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(97).getChildBlocks().get(9).getChildBlocks(), 13, PlsqlBlockType.IF, "IF  (temp_rec_.p12_key IS NOT NULL)", true, 260764, 261139, 0);
 53.3187 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(97).getChildBlocks().get(9).getChildBlocks(), 14, PlsqlBlockType.IF, "IF  (attr_ IS NOT NULL)", true, 261147, 271210, 2);
 53.3188 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(97).getChildBlocks().get(9).getChildBlocks().get(14).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- ifs_assert_safe iswalk 060220", true, 261561, 261593, 0);
 53.3189 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(97).getChildBlocks().get(9).getChildBlocks().get(14).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  (template_rec_.company IS NOT NULL)", true, 261802, 271195, 1);
 53.3190 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(97).getChildBlocks().get(9).getChildBlocks().get(14).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.FOR_LOOP, "rec_ IN get_keys", true, 261859, 271101, 6);
 53.3191 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(97).getChildBlocks().get(9).getChildBlocks().get(14).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.FOR_LOOP, "i IN 0..11", true, 261954, 262036, 0);
 53.3192 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(97).getChildBlocks().get(9).getChildBlocks().get(14).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks(), 1, PlsqlBlockType.COMMENT, "-- the call has been made from busper side which means only selected measures should be updated", true, 262214, 262308, 0);
 53.3193 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(97).getChildBlocks().get(9).getChildBlocks().get(14).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks(), 2, PlsqlBlockType.WHILE_LOOP, "(Client_SYS.Get_Next_From_Attr(scorecard_object_, mea_ptr_, mea_name_, mea_value_))", true, 262324, 265132, 1);
 53.3194 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(97).getChildBlocks().get(9).getChildBlocks().get(14).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks().get(2).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (current_ = mea_value_)", true, 262438, 265106, 2);
 53.3195 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(97).getChildBlocks().get(9).getChildBlocks().get(14).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks().get(2).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- get the list of accounts connected to the current measure...", true, 262491, 262553, 0);
 53.3196 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(97).getChildBlocks().get(9).getChildBlocks().get(14).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks().get(2).getChildBlocks().get(0).getChildBlocks(), 1, PlsqlBlockType.FOR_LOOP, "acc_rec_ IN get_measure_accounts", true, 262575, 265080, 5);
 53.3197 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(97).getChildBlocks().get(9).getChildBlocks().get(14).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks().get(2).getChildBlocks().get(0).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- Bug 68118, Begin", true, 262639, 262658, 0);
 53.3198 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(97).getChildBlocks().get(9).getChildBlocks().get(14).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks().get(2).getChildBlocks().get(0).getChildBlocks().get(1).getChildBlocks(), 1, PlsqlBlockType.COMMENT, "-- Bug 71089, Begin. change the OPEN line", true, 263003, 263103, 0);
 53.3199 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(97).getChildBlocks().get(9).getChildBlocks().get(14).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks().get(2).getChildBlocks().get(0).getChildBlocks().get(1).getChildBlocks(), 2, PlsqlBlockType.COMMENT, "-- Bug 71089, End", true, 263405, 263528, 0);
 53.3200 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(97).getChildBlocks().get(9).getChildBlocks().get(14).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks().get(2).getChildBlocks().get(0).getChildBlocks().get(1).getChildBlocks(), 3, PlsqlBlockType.IF, "IF  (temp_measure_ = acc_rec_.account)", true, 263554, 264988, 1);
 53.3201 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(97).getChildBlocks().get(9).getChildBlocks().get(14).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks().get(2).getChildBlocks().get(0).getChildBlocks().get(1).getChildBlocks().get(3).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- ifs_assert_safe iswalk 060220", true, 264313, 264345, 0);
 53.3202 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(97).getChildBlocks().get(9).getChildBlocks().get(14).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks().get(2).getChildBlocks().get(0).getChildBlocks().get(1).getChildBlocks(), 4, PlsqlBlockType.COMMENT, "-- Bug 68118, End the IF condition  ", true, 265013, 265049, 0);
 53.3203 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(97).getChildBlocks().get(9).getChildBlocks().get(14).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks(), 3, PlsqlBlockType.COMMENT, "-- the call has been made from budpro side which means all measures should be updated", true, 265149, 265233, 0);
 53.3204 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(97).getChildBlocks().get(9).getChildBlocks().get(14).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks(), 4, PlsqlBlockType.IF, "IF  (scorecard_object_ IS NULL)", true, 265249, 267816, 2);
 53.3205 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(97).getChildBlocks().get(9).getChildBlocks().get(14).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks().get(4).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- get the list of accounts connected to the current measure...", true, 265303, 265365, 0);
 53.3206 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(97).getChildBlocks().get(9).getChildBlocks().get(14).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks().get(4).getChildBlocks(), 1, PlsqlBlockType.FOR_LOOP, "acc_rec_ IN get_measure_accounts", true, 265384, 267793, 5);
 53.3207 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(97).getChildBlocks().get(9).getChildBlocks().get(14).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks().get(4).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- Bug 68118, Begin", true, 265447, 265466, 0);
 53.3208 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(97).getChildBlocks().get(9).getChildBlocks().get(14).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks().get(4).getChildBlocks().get(1).getChildBlocks(), 1, PlsqlBlockType.COMMENT, "-- Bug 71089, Begin. change the OPEN line", true, 265796, 265893, 0);
 53.3209 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(97).getChildBlocks().get(9).getChildBlocks().get(14).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks().get(4).getChildBlocks().get(1).getChildBlocks(), 2, PlsqlBlockType.COMMENT, "-- Bug 71089, End", true, 266183, 266300, 0);
 53.3210 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(97).getChildBlocks().get(9).getChildBlocks().get(14).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks().get(4).getChildBlocks().get(1).getChildBlocks(), 3, PlsqlBlockType.IF, "IF  (temp_measure_ = acc_rec_.account)", true, 266322, 267708, 1);
 53.3211 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(97).getChildBlocks().get(9).getChildBlocks().get(14).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks().get(4).getChildBlocks().get(1).getChildBlocks().get(3).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- ifs_assert_safe iswalk 060220", true, 267057, 267089, 0);
 53.3212 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(97).getChildBlocks().get(9).getChildBlocks().get(14).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks().get(4).getChildBlocks().get(1).getChildBlocks(), 4, PlsqlBlockType.COMMENT, "-- Bug 68118, End the IF condition", true, 267730, 267764, 0);
 53.3213 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(97).getChildBlocks().get(9).getChildBlocks().get(14).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks(), 5, PlsqlBlockType.IF, "IF  (cum_val_attr_ IS NOT NULL)", true, 267833, 271078, 2);
 53.3214 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(97).getChildBlocks().get(9).getChildBlocks().get(14).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks().get(5).getChildBlocks(), 0, PlsqlBlockType.WHILE_LOOP, "(Client_SYS.Get_Next_From_Attr(cum_val_attr_, ptr_, name_, value_))", true, 267921, 270243, 12);
 53.3215 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(97).getChildBlocks().get(9).getChildBlocks().get(14).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks().get(5).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (temp_rec_.p1_key = name_)", true, 268022, 268183, 0);
 53.3216 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(97).getChildBlocks().get(9).getChildBlocks().get(14).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks().get(5).getChildBlocks().get(0).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  (temp_rec_.p2_key = name_)", true, 268206, 268367, 0);
 53.3217 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(97).getChildBlocks().get(9).getChildBlocks().get(14).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks().get(5).getChildBlocks().get(0).getChildBlocks(), 2, PlsqlBlockType.IF, "IF  (temp_rec_.p3_key = name_)", true, 268390, 268551, 0);
 53.3218 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(97).getChildBlocks().get(9).getChildBlocks().get(14).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks().get(5).getChildBlocks().get(0).getChildBlocks(), 3, PlsqlBlockType.IF, "IF  (temp_rec_.p4_key = name_)", true, 268574, 268735, 0);
 53.3219 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(97).getChildBlocks().get(9).getChildBlocks().get(14).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks().get(5).getChildBlocks().get(0).getChildBlocks(), 4, PlsqlBlockType.IF, "IF  (temp_rec_.p5_key = name_)", true, 268758, 268919, 0);
 53.3220 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(97).getChildBlocks().get(9).getChildBlocks().get(14).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks().get(5).getChildBlocks().get(0).getChildBlocks(), 5, PlsqlBlockType.IF, "IF  (temp_rec_.p6_key = name_)", true, 268942, 269103, 0);
 53.3221 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(97).getChildBlocks().get(9).getChildBlocks().get(14).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks().get(5).getChildBlocks().get(0).getChildBlocks(), 6, PlsqlBlockType.IF, "IF  (temp_rec_.p7_key = name_)", true, 269126, 269287, 0);
 53.3222 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(97).getChildBlocks().get(9).getChildBlocks().get(14).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks().get(5).getChildBlocks().get(0).getChildBlocks(), 7, PlsqlBlockType.IF, "IF  (temp_rec_.p8_key = name_)", true, 269310, 269471, 0);
 53.3223 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(97).getChildBlocks().get(9).getChildBlocks().get(14).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks().get(5).getChildBlocks().get(0).getChildBlocks(), 8, PlsqlBlockType.IF, "IF  (temp_rec_.p9_key = name_)", true, 269494, 269655, 0);
 53.3224 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(97).getChildBlocks().get(9).getChildBlocks().get(14).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks().get(5).getChildBlocks().get(0).getChildBlocks(), 9, PlsqlBlockType.IF, "IF  (temp_rec_.p10_key = name_)", true, 269678, 269840, 0);
 53.3225 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(97).getChildBlocks().get(9).getChildBlocks().get(14).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks().get(5).getChildBlocks().get(0).getChildBlocks(), 10, PlsqlBlockType.IF, "IF  (temp_rec_.p11_key = name_)", true, 269863, 270027, 0);
 53.3226 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(97).getChildBlocks().get(9).getChildBlocks().get(14).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks().get(5).getChildBlocks().get(0).getChildBlocks(), 11, PlsqlBlockType.IF, "IF  (temp_rec_.p12_key = name_)", true, 270050, 270214, 0);
 53.3227 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(97).getChildBlocks().get(9).getChildBlocks().get(14).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks().get(5).getChildBlocks(), 1, PlsqlBlockType.FOR_LOOP, "i IN 0..11", true, 270320, 270580, 2);
 53.3228 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(97).getChildBlocks().get(9).getChildBlocks().get(14).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks().get(5).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- Bug 68118, Begin remove the the IF condition", true, 270363, 270410, 0);
 53.3229 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(97).getChildBlocks().get(9).getChildBlocks().get(14).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks().get(5).getChildBlocks().get(1).getChildBlocks(), 1, PlsqlBlockType.COMMENT, "-- Bug 68118, End", true, 270534, 270551, 0);
 53.3230 -            assertBlock(lstBlockFac.get(20).getChildBlocks(), 98, PlsqlBlockType.PROCEDURE_IMPL, "Calc_Measure_From_Budpro", true, 271246, 274564, 5);
 53.3231 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(98).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "get_level_type", true, 271886, 272115, 0);
 53.3232 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(98).getChildBlocks(), 1, PlsqlBlockType.CURSOR, "get_measures_planform", true, 272120, 272370, 0);
 53.3233 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(98).getChildBlocks(), 2, PlsqlBlockType.CURSOR, "get_years", true, 272375, 272503, 0);
 53.3234 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(98).getChildBlocks(), 3, PlsqlBlockType.CURSOR, "get_period_count", true, 272508, 272683, 0);
 53.3235 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(98).getChildBlocks(), 4, PlsqlBlockType.WHILE_LOOP, "( Client_SYS.Get_Next_From_Attr(comp_attr_, ptr_, name_, value_) )", true, 272904, 274534, 2);
 53.3236 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(98).getChildBlocks().get(4).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (name_ = 'OBJECT_ID')", true, 272988, 273062, 0);
 53.3237 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(98).getChildBlocks().get(4).getChildBlocks(), 1, PlsqlBlockType.IF, "IF (level_type_ = 'COMPONENT')", true, 273172, 274521, 2);
 53.3238 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(98).getChildBlocks().get(4).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.FOR_LOOP, "get_measures_planform_ IN get_measures_planform", true, 273238, 273492, 1);
 53.3239 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(98).getChildBlocks().get(4).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.IF, "IF ( INSTR(get_measures_planform_.measure_calc_formula,object_id_) > 0)", true, 273307, 273473, 0);
 53.3240 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(98).getChildBlocks().get(4).getChildBlocks().get(1).getChildBlocks(), 1, PlsqlBlockType.IF, "IF ( measures_tab.COUNT > 0 )", true, 273591, 274507, 1);
 53.3241 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(98).getChildBlocks().get(4).getChildBlocks().get(1).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.FOR_LOOP, "x IN measures_tab.FIRST..measures_tab.LAST", true, 273638, 274490, 1);
 53.3242 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(98).getChildBlocks().get(4).getChildBlocks().get(1).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.FOR_LOOP, "get_years_ IN get_years", true, 273705, 274468, 1);
 53.3243 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(98).getChildBlocks().get(4).getChildBlocks().get(1).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.IF, "IF ( Check_Exist___ (environment_,scorecard_,year_,budget_version_,measures_tab(x)))", true, 273950, 274443, 0);
 53.3244 -            assertBlock(lstBlockFac.get(20).getChildBlocks(), 99, PlsqlBlockType.FUNCTION_IMPL, "Get", true, 274567, 275123, 1);
 53.3245 -            assertBlock(lstBlockFac.get(20).getChildBlocks().get(99).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "get_attr", true, 274765, 275024, 0);
 53.3246 -            assertBlock(lstBlockFac.get(20).getChildBlocks(), 100, PlsqlBlockType.COMMENT, "-- FOUNDATION1 METHODS ", true, 275124, 275588, 0);
 53.3247 -            assertBlock(lstBlockFac.get(20).getChildBlocks(), 101, PlsqlBlockType.PROCEDURE_IMPL, "Init", true, 275590, 275632, 0);
 53.3248 -            assertBlock(lstBlockFac, 21, PlsqlBlockType.COMMENT, "COMMENT...", false, 275876, 275953, 0);
 53.3249 +            assertEquals(24, lstBlockFac.size());
 53.3250 +            processBlocks(plsqlFileName, lstBlockFac);
 53.3251          } finally {
 53.3252              if (fileObject != null) {
 53.3253                  fileObject.delete();
 53.3254 @@ -3254,146 +418,18 @@
 53.3255      @Test
 53.3256      public void testAdvanced13() throws IOException, BadLocationException {
 53.3257          System.out.println("Advanced test case 13");
 53.3258 -        FileObject fileObject = fs.getRoot().createData("Trainer.apy");
 53.3259 +        final String plsqlFileName = "Trainer.apy";
 53.3260 +        FileObject fileObject = fs.getRoot().createData(plsqlFileName);
 53.3261          assertNotNull(fileObject);
 53.3262          try {
 53.3263 -            PlsqlBlockFactory blockFac = loadAsTmpFile(fileObject, "Trainer.apy");
 53.3264 +            PlsqlBlockFactory blockFac = loadAsTmpFile(fileObject, plsqlFileName);
 53.3265              assertNotNull(blockFac);
 53.3266  
 53.3267              List<PlsqlBlock> lstBlockFac = blockFac.getBlockHierarchy();
 53.3268  //         printHierarchy(lstBlockFac, "");
 53.3269  //         generateAssert(lstBlockFac, "lstBlockFac", "false");
 53.3270 -            assertTrue(lstBlockFac.size() == 11);
 53.3271 -            assertBlock(lstBlockFac, 0, PlsqlBlockType.COMMENT, "-- Logical unit: Trainer", false, 0, 601, 0);
 53.3272 -            assertBlock(lstBlockFac, 1, PlsqlBlockType.COMMENT, "-- VIEWS FOR SELECTS ", false, 933, 1166, 0);
 53.3273 -            assertBlock(lstBlockFac, 2, PlsqlBlockType.VIEW, "TRAINER", false, 1196, 1939, 0);
 53.3274 -            assertBlock(lstBlockFac, 3, PlsqlBlockType.TABLE_COMMENT, "TRAINER", false, 1942, 2010, 0);
 53.3275 -            assertBlock(lstBlockFac, 4, PlsqlBlockType.COLUMN_COMMENT, "TRAINER", false, 2013, 2956, 0);
 53.3276 -            assertBlock(lstBlockFac, 5, PlsqlBlockType.VIEW, "TRAINER_LOV1", false, 2993, 3251, 0);
 53.3277 -            assertBlock(lstBlockFac, 6, PlsqlBlockType.TABLE_COMMENT, "TRAINER_LOV1", false, 3254, 3342, 0);
 53.3278 -            assertBlock(lstBlockFac, 7, PlsqlBlockType.COLUMN_COMMENT, "TRAINER_LOV1", false, 3345, 3658, 0);
 53.3279 -            assertBlock(lstBlockFac, 8, PlsqlBlockType.COMMENT, "-- PACKAGES FOR METHODS ", false, 3661, 3894, 0);
 53.3280 -            assertBlock(lstBlockFac, 9, PlsqlBlockType.PACKAGE_BODY, "TRAINER_API", false, 3933, 28781, 34);
 53.3281 -            assertBlock(lstBlockFac.get(9).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- LU SPECIFIC IMPLEMENTATION METHOD DECLARATIONS ", true, 3973, 5083, 0);
 53.3282 -            assertBlock(lstBlockFac.get(9).getChildBlocks(), 1, PlsqlBlockType.FUNCTION_IMPL, "Lock_By_Id___", true, 5084, 6240, 5);
 53.3283 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "lock_control", true, 5378, 5530, 0);
 53.3284 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(1).getChildBlocks(), 1, PlsqlBlockType.CURSOR, "exist_control", true, 5534, 5624, 0);
 53.3285 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(1).getChildBlocks(), 2, PlsqlBlockType.IF, "IF  (lock_control%FOUND)", true, 5689, 5773, 0);
 53.3286 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(1).getChildBlocks(), 3, PlsqlBlockType.IF, "IF  (exist_control%FOUND)", true, 5859, 5940, 0);
 53.3287 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(1).getChildBlocks(), 4, PlsqlBlockType.IF, "ELSE", true, 5944, 6011, 0);
 53.3288 -            assertBlock(lstBlockFac.get(9).getChildBlocks(), 2, PlsqlBlockType.FUNCTION_IMPL, "Lock_By_Keys___", true, 6242, 6797, 3);
 53.3289 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(2).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "lock_control", true, 6382, 6491, 0);
 53.3290 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(2).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  (lock_control%FOUND)", true, 6556, 6629, 0);
 53.3291 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(2).getChildBlocks(), 2, PlsqlBlockType.IF, "ELSE", true, 6633, 6699, 0);
 53.3292 -            assertBlock(lstBlockFac.get(9).getChildBlocks(), 3, PlsqlBlockType.FUNCTION_IMPL, "Get_Object_By_Id___", true, 6799, 7208, 2);
 53.3293 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(3).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "getrec", true, 6909, 6992, 0);
 53.3294 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(3).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  (getrec%NOTFOUND)", true, 7048, 7146, 0);
 53.3295 -            assertBlock(lstBlockFac.get(9).getChildBlocks(), 4, PlsqlBlockType.FUNCTION_IMPL, "Get_Object_By_Keys___", true, 7210, 7528, 1);
 53.3296 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(4).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "getrec", true, 7326, 7412, 0);
 53.3297 -            assertBlock(lstBlockFac.get(9).getChildBlocks(), 5, PlsqlBlockType.FUNCTION_IMPL, "Check_Exist___", true, 7530, 7935, 2);
 53.3298 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(5).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "exist_control", true, 7623, 7717, 0);
 53.3299 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(5).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  (exist_control%FOUND)", true, 7786, 7873, 0);
 53.3300 -            assertBlock(lstBlockFac.get(9).getChildBlocks(), 6, PlsqlBlockType.PROCEDURE_IMPL, "Get_Id_Version_By_Keys___", true, 7937, 8307, 1);
 53.3301 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(6).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "get_version", true, 8072, 8180, 0);
 53.3302 -            assertBlock(lstBlockFac.get(9).getChildBlocks(), 7, PlsqlBlockType.COMMENT, "-- IMPLEMENTATION BASE METHODS FOR INSERT ", true, 8308, 9053, 0);
 53.3303 -            assertBlock(lstBlockFac.get(9).getChildBlocks(), 8, PlsqlBlockType.PROCEDURE_IMPL, "Prepare_Insert___", true, 9055, 9176, 0);
 53.3304 -            assertBlock(lstBlockFac.get(9).getChildBlocks(), 9, PlsqlBlockType.PROCEDURE_IMPL, "Unpack_Check_Insert___", true, 9179, 12003, 6);
 53.3305 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(9).getChildBlocks(), 0, PlsqlBlockType.WHILE_LOOP, "(Client_SYS.Get_Next_From_Attr(attr_, ptr_, name_, value_))", true, 9496, 10607, 9);
 53.3306 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(9).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (name_ = 'PERSON_ID')", true, 9573, 9640, 0);
 53.3307 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(9).getChildBlocks().get(0).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSIF (name_ = 'INTERNAL')", true, 9647, 9715, 0);
 53.3308 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(9).getChildBlocks().get(0).getChildBlocks(), 2, PlsqlBlockType.IF, "ELSIF (name_ = 'FNAME')", true, 9722, 9787, 0);
 53.3309 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(9).getChildBlocks().get(0).getChildBlocks(), 3, PlsqlBlockType.IF, "ELSIF (name_ = 'LNAME')", true, 9794, 9859, 0);
 53.3310 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(9).getChildBlocks().get(0).getChildBlocks(), 4, PlsqlBlockType.IF, "ELSIF (name_ = 'TRAINING_INSTITUTION_NAME')", true, 9866, 10131, 1);
 53.3311 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(9).getChildBlocks().get(0).getChildBlocks().get(4).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (value_ IS NOT NULL)", true, 10009, 10131, 0);
 53.3312 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(9).getChildBlocks().get(0).getChildBlocks(), 5, PlsqlBlockType.IF, "ELSIF (name_ = 'DATE_OF_BIRTH')", true, 10138, 10250, 0);
 53.3313 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(9).getChildBlocks().get(0).getChildBlocks(), 6, PlsqlBlockType.IF, "ELSIF (name_ = 'SEX')", true, 10257, 10438, 1);
 53.3314 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(9).getChildBlocks().get(0).getChildBlocks().get(6).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (value_ IS NOT NULL)", true, 10351, 10438, 0);
 53.3315 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(9).getChildBlocks().get(0).getChildBlocks(), 7, PlsqlBlockType.IF, "ELSIF (name_ = 'REMARK')", true, 10445, 10509, 0);
 53.3316 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(9).getChildBlocks().get(0).getChildBlocks(), 8, PlsqlBlockType.IF, "ELSE", true, 10516, 10594, 0);
 53.3317 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(9).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  (dummy_rec_.name1 IS NULL) OR (dummy_rec_.name4 IS NULL)", true, 10715, 11035, 2);
 53.3318 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(9).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (dummy_rec_.name1 IS NULL)", true, 10847, 10932, 0);
 53.3319 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(9).getChildBlocks().get(1).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  (dummy_rec_.name4 IS NULL)", true, 10939, 11024, 0);
 53.3320 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(9).getChildBlocks(), 2, PlsqlBlockType.IF, "IF  (dummy_rec_.date_of_birth IS NULL)", true, 11106, 11240, 0);
 53.3321 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(9).getChildBlocks(), 3, PlsqlBlockType.IF, "IF  (dummy_rec_.sex IS NULL)", true, 11244, 11371, 0);
 53.3322 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(9).getChildBlocks(), 4, PlsqlBlockType.IF, "IF  (newrec_.internal = '1')", true, 11444, 11671, 1);
 53.3323 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(9).getChildBlocks().get(4).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (Trainer_API.Check_Person_Internal(newrec_.person_id) = 0)", true, 11483, 11671, 0);
 53.3324 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(9).getChildBlocks(), 5, PlsqlBlockType.IF, "ELSE", true, 11675, 11885, 1);
 53.3325 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(9).getChildBlocks().get(5).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (Trainer_API.Check_Person_Internal(newrec_.person_id) = 1)", true, 11686, 11874, 0);
 53.3326 -            assertBlock(lstBlockFac.get(9).getChildBlocks(), 10, PlsqlBlockType.PROCEDURE_IMPL, "Insert___", true, 12006, 13457, 4);
 53.3327 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(10).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "get_objid", true, 12270, 12373, 0);
 53.3328 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(10).getChildBlocks(), 1, PlsqlBlockType.STATEMENT, "INSERT", true, 12458, 12766, 0);
 53.3329 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(10).getChildBlocks(), 2, PlsqlBlockType.COMMENT, "-- update person register", true, 12768, 12799, 0);
 53.3330 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(10).getChildBlocks(), 3, PlsqlBlockType.IF, "IF  (get_objid_)", true, 13248, 13359, 0);
 53.3331 -            assertBlock(lstBlockFac.get(9).getChildBlocks(), 11, PlsqlBlockType.COMMENT, "-- IMPLEMENTATION BASE METHODS FOR UPDATE ", true, 13459, 14043, 0);
 53.3332 -            assertBlock(lstBlockFac.get(9).getChildBlocks(), 12, PlsqlBlockType.PROCEDURE_IMPL, "Unpack_Check_Update___", true, 14045, 16803, 6);
 53.3333 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(12).getChildBlocks(), 0, PlsqlBlockType.WHILE_LOOP, "(Client_SYS.Get_Next_From_Attr(attr_, ptr_, name_, value_))", true, 14351, 15479, 9);
 53.3334 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(12).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (name_ = 'PERSON_ID')", true, 14428, 14512, 0);
 53.3335 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(12).getChildBlocks().get(0).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSIF (name_ = 'INTERNAL')", true, 14519, 14587, 0);
 53.3336 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(12).getChildBlocks().get(0).getChildBlocks(), 2, PlsqlBlockType.IF, "ELSIF (name_ = 'FNAME')", true, 14594, 14659, 0);
 53.3337 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(12).getChildBlocks().get(0).getChildBlocks(), 3, PlsqlBlockType.IF, "ELSIF (name_ = 'LNAME')", true, 14666, 14731, 0);
 53.3338 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(12).getChildBlocks().get(0).getChildBlocks(), 4, PlsqlBlockType.IF, "ELSIF (name_ = 'TRAINING_INSTITUTION_NAME')", true, 14738, 15003, 1);
 53.3339 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(12).getChildBlocks().get(0).getChildBlocks().get(4).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (value_ IS NOT NULL)", true, 14881, 15003, 0);
 53.3340 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(12).getChildBlocks().get(0).getChildBlocks(), 5, PlsqlBlockType.IF, "ELSIF (name_ = 'DATE_OF_BIRTH')", true, 15010, 15122, 0);
 53.3341 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(12).getChildBlocks().get(0).getChildBlocks(), 6, PlsqlBlockType.IF, "ELSIF (name_ = 'SEX')", true, 15129, 15310, 1);
 53.3342 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(12).getChildBlocks().get(0).getChildBlocks().get(6).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (value_ IS NOT NULL)", true, 15223, 15310, 0);
 53.3343 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(12).getChildBlocks().get(0).getChildBlocks(), 7, PlsqlBlockType.IF, "ELSIF (name_ = 'REMARK')", true, 15317, 15381, 0);
 53.3344 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(12).getChildBlocks().get(0).getChildBlocks(), 8, PlsqlBlockType.IF, "ELSE", true, 15388, 15466, 0);
 53.3345 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(12).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  (dummy_rec_.name1 IS NULL) OR (dummy_rec_.name4 IS NULL)", true, 15516, 15836, 2);
 53.3346 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(12).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (dummy_rec_.name1 IS NULL)", true, 15648, 15733, 0);
 53.3347 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(12).getChildBlocks().get(1).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  (dummy_rec_.name4 IS NULL)", true, 15740, 15825, 0);
 53.3348 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(12).getChildBlocks(), 2, PlsqlBlockType.IF, "IF  (dummy_rec_.date_of_birth IS NULL)", true, 15907, 16041, 0);
 53.3349 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(12).getChildBlocks(), 3, PlsqlBlockType.IF, "IF  (dummy_rec_.sex IS NULL)", true, 16045, 16172, 0);
 53.3350 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(12).getChildBlocks(), 4, PlsqlBlockType.IF, "IF  (newrec_.internal = '1')", true, 16245, 16472, 1);
 53.3351 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(12).getChildBlocks().get(4).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (Trainer_API.Check_Person_Internal(newrec_.person_id) = 0)", true, 16284, 16472, 0);
 53.3352 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(12).getChildBlocks(), 5, PlsqlBlockType.IF, "ELSE", true, 16476, 16686, 1);
 53.3353 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(12).getChildBlocks().get(5).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (Trainer_API.Check_Person_Internal(newrec_.person_id) = 1)", true, 16487, 16675, 0);
 53.3354 -            assertBlock(lstBlockFac.get(9).getChildBlocks(), 13, PlsqlBlockType.PROCEDURE_IMPL, "Update___", true, 16806, 18487, 3);
 53.3355 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(13).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  by_keys_", true, 17217, 17547, 1);
 53.3356 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(13).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "UPDATE trainer_tab t", true, 17240, 17546, 0);
 53.3357 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(13).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSE", true, 17551, 17866, 1);
 53.3358 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(13).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "UPDATE trainer_tab t", true, 17562, 17854, 0);
 53.3359 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(13).getChildBlocks(), 2, PlsqlBlockType.COMMENT, "-- update person register", true, 17874, 17917, 0);
 53.3360 -            assertBlock(lstBlockFac.get(9).getChildBlocks(), 14, PlsqlBlockType.COMMENT, "-- IMPLEMENTATION BASE METHODS FOR DELETE ", true, 18489, 19086, 0);
 53.3361 -            assertBlock(lstBlockFac.get(9).getChildBlocks(), 15, PlsqlBlockType.PROCEDURE_IMPL, "Check_Delete___", true, 19088, 19295, 0);
 53.3362 -            assertBlock(lstBlockFac.get(9).getChildBlocks(), 16, PlsqlBlockType.PROCEDURE_IMPL, "Delete___", true, 19298, 19788, 2);
 53.3363 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(16).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (by_keys_)", true, 19565, 19680, 1);
 53.3364 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(16).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "DELETE FROM &TABLE", true, 19616, 19679, 0);
 53.3365 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(16).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSE", true, 19684, 19773, 1);
 53.3366 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(16).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "DELETE", true, 19695, 19761, 0);
 53.3367 -            assertBlock(lstBlockFac.get(9).getChildBlocks(), 17, PlsqlBlockType.COMMENT, "-- PRIVATE BASE METHODS ", true, 19790, 22085, 0);
 53.3368 -            assertBlock(lstBlockFac.get(9).getChildBlocks(), 18, PlsqlBlockType.PROCEDURE_IMPL, "Lock__", true, 22087, 22382, 0);
 53.3369 -            assertBlock(lstBlockFac.get(9).getChildBlocks(), 19, PlsqlBlockType.PROCEDURE_IMPL, "New__", true, 22385, 23047, 3);
 53.3370 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(19).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (action_ = 'PREPARE')", true, 22683, 22744, 0);
 53.3371 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(19).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSIF (action_ = 'CHECK')", true, 22748, 22835, 0);
 53.3372 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(19).getChildBlocks(), 2, PlsqlBlockType.IF, "ELSIF (action_ = 'DO')", true, 22839, 22999, 0);
 53.3373 -            assertBlock(lstBlockFac.get(9).getChildBlocks(), 20, PlsqlBlockType.PROCEDURE_IMPL, "Modify__", true, 23050, 23830, 2);
 53.3374 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(20).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (action_ = 'CHECK')", true, 23381, 23519, 0);
 53.3375 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(20).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSIF (action_ = 'DO')", true, 23523, 23779, 0);
 53.3376 -            assertBlock(lstBlockFac.get(9).getChildBlocks(), 21, PlsqlBlockType.PROCEDURE_IMPL, "Remove__", true, 23833, 24385, 2);
 53.3377 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(21).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (action_ = 'CHECK')", true, 24068, 24173, 0);
 53.3378 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(21).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSIF (action_ = 'DO')", true, 24177, 24334, 0);
 53.3379 -            assertBlock(lstBlockFac.get(9).getChildBlocks(), 22, PlsqlBlockType.COMMENT, "-- PUBLIC BASE METHODS ", true, 24387, 24840, 0);
 53.3380 -            assertBlock(lstBlockFac.get(9).getChildBlocks(), 23, PlsqlBlockType.PROCEDURE_IMPL, "Exist", true, 24842, 25067, 1);
 53.3381 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(23).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (NOT Check_Exist___(person_id_))", true, 24961, 25056, 0);
 53.3382 -            assertBlock(lstBlockFac.get(9).getChildBlocks(), 24, PlsqlBlockType.COMMENT, "-- LU SPECIFIC IMPLEMENTATION METHODS ", true, 25069, 26009, 0);
 53.3383 -            assertBlock(lstBlockFac.get(9).getChildBlocks(), 25, PlsqlBlockType.FUNCTION_IMPL, "Get_Training_Institution_Name", true, 26011, 26416, 1);
 53.3384 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(25).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "get_attr", true, 26149, 26258, 0);
 53.3385 -            assertBlock(lstBlockFac.get(9).getChildBlocks(), 26, PlsqlBlockType.FUNCTION_IMPL, "Get_Fname", true, 26419, 26549, 0);
 53.3386 -            assertBlock(lstBlockFac.get(9).getChildBlocks(), 27, PlsqlBlockType.FUNCTION_IMPL, "Get_Lname", true, 26552, 26682, 0);
 53.3387 -            assertBlock(lstBlockFac.get(9).getChildBlocks(), 28, PlsqlBlockType.FUNCTION_IMPL, "Get_Name", true, 26684, 26819, 0);
 53.3388 -            assertBlock(lstBlockFac.get(9).getChildBlocks(), 29, PlsqlBlockType.FUNCTION_IMPL, "Check_Person_Internal", true, 26821, 26997, 0);
 53.3389 -            assertBlock(lstBlockFac.get(9).getChildBlocks(), 30, PlsqlBlockType.FUNCTION_IMPL, "Get_Internal_External", true, 26999, 27309, 2);
 53.3390 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(30).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (internal_ = '0')", true, 27086, 27169, 0);
 53.3391 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(30).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSIF (internal_ = '1')", true, 27173, 27266, 0);
 53.3392 -            assertBlock(lstBlockFac.get(9).getChildBlocks(), 31, PlsqlBlockType.FUNCTION_IMPL, "Replace_Person_Id", true, 27311, 28260, 4);
 53.3393 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(31).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "get_pers", true, 27425, 27536, 0);
 53.3394 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(31).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  (new_person_id_ = old_person_id_)", true, 27704, 27777, 0);
 53.3395 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(31).getChildBlocks(), 2, PlsqlBlockType.IF, "IF  (Check_Exist___(new_person_id_) = TRUE)", true, 27781, 27861, 0);
 53.3396 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(31).getChildBlocks(), 3, PlsqlBlockType.WHILE_LOOP, "(get_pers%FOUND)", true, 27927, 28199, 1);
 53.3397 -            assertBlock(lstBlockFac.get(9).getChildBlocks().get(31).getChildBlocks().get(3).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "UPDATE trainer_tab t", true, 28014, 28138, 0);
 53.3398 -            assertBlock(lstBlockFac.get(9).getChildBlocks(), 32, PlsqlBlockType.COMMENT, "-- FOUNDATION1 METHODS ", true, 28261, 28725, 0);
 53.3399 -            assertBlock(lstBlockFac.get(9).getChildBlocks(), 33, PlsqlBlockType.PROCEDURE_IMPL, "Init", true, 28727, 28769, 0);
 53.3400 -            assertBlock(lstBlockFac, 10, PlsqlBlockType.COMMENT, "COMMENT...", false, 28796, 28873, 0);
 53.3401 +            assertEquals(11, lstBlockFac.size());
 53.3402 +            processBlocks(plsqlFileName, lstBlockFac);
 53.3403          } finally {
 53.3404              if (fileObject != null) {
 53.3405                  fileObject.delete();
 53.3406 @@ -3404,32 +440,18 @@
 53.3407      @Test
 53.3408      public void testAdvanced14() throws IOException, BadLocationException {
 53.3409          System.out.println("Advanced test case 14");
 53.3410 -        FileObject fileObject = fs.getRoot().createData("fndbas_ora.cre");
 53.3411 +        final String plsqlFileName = "fndbas_ora.cre";
 53.3412 +        FileObject fileObject = fs.getRoot().createData(plsqlFileName);
 53.3413          assertNotNull(fileObject);
 53.3414          try {
 53.3415 -            PlsqlBlockFactory blockFac = loadAsTmpFile(fileObject, "fndbas_ora.cre");
 53.3416 +            PlsqlBlockFactory blockFac = loadAsTmpFile(fileObject, plsqlFileName);
 53.3417              assertNotNull(blockFac);
 53.3418  
 53.3419              List<PlsqlBlock> lstBlockFac = blockFac.getBlockHierarchy();
 53.3420  //         printHierarchy(lstBlockFac, "");
 53.3421  //         generateAssert(lstBlockFac, "lstBlockFac", "false");
 53.3422 -            assertTrue(lstBlockFac.size() == 12);
 53.3423 -            assertBlock(lstBlockFac, 0, PlsqlBlockType.COMMENT, "-- File : fndbas_ora.cre", false, 0, 232, 0);
 53.3424 -            assertBlock(lstBlockFac, 1, PlsqlBlockType.STATEMENT, "TABLE &AO..X_ACTIVITY_GRANT_FILTER_TAB", false, 234, 556, 0);
 53.3425 -            assertBlock(lstBlockFac, 2, PlsqlBlockType.STATEMENT, "TABLE &AO..X_ACTIVITY_GRANT_FILTER_TAB", false, 558, 770, 0);
 53.3426 -            assertBlock(lstBlockFac, 3, PlsqlBlockType.STATEMENT, "TABLE &AO..X_FNDDR_ACTIVITY_ENT_USAGE_TAB", false, 773, 1079, 0);
 53.3427 -            assertBlock(lstBlockFac, 4, PlsqlBlockType.STATEMENT, "TABLE &AO..X_FNDDR_ACTIVITY_ENT_USAGE_TAB", false, 1081, 1291, 0);
 53.3428 -            assertBlock(lstBlockFac, 5, PlsqlBlockType.STATEMENT, "INDEX &AO..X_FNDDR_ACTIVITY_ENT_USEAGE_FK", false, 1293, 1435, 0);
 53.3429 -            assertBlock(lstBlockFac, 6, PlsqlBlockType.COMMENT, "-- CREATE sequence", false, 1438, 1456, 0);
 53.3430 -            assertBlock(lstBlockFac, 7, PlsqlBlockType.STATEMENT, "SEQUENCE &AO..X_Ext_File_Batch_Param_Seq", false, 1458, 1505, 0);
 53.3431 -            assertBlock(lstBlockFac, 8, PlsqlBlockType.COMMENT, "-- CREATE trigger", false, 1508, 1525, 0);
 53.3432 -            assertBlock(lstBlockFac, 9, PlsqlBlockType.TRIGGER, "x_vmogss_base_usermap_change", false, 1527, 1958, 1);
 53.3433 -            assertBlock(lstBlockFac.get(9).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "insert into &AO..vmo_base_gss_scope(gss_id, created, source_tbl, source_info) values(:newrec.gss_id, sysdate, 'VMO_BASE_GSS_USERMAP_CHANGE', :newrec.gss_id)", true, 1757, 1913, 0);
 53.3434 -            assertBlock(lstBlockFac, 10, PlsqlBlockType.COMMENT, "-- CREATE trigger dynamically", false, 1962, 1991, 0);
 53.3435 -            assertBlock(lstBlockFac, 11, PlsqlBlockType.BEGIN_END, "", false, 1993, 2612, 3);
 53.3436 -            assertBlock(lstBlockFac.get(11).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- OK if ORA ", true, 2430, 2479, 0);
 53.3437 -            assertBlock(lstBlockFac.get(11).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  INSTR(SQLERRM,'-00942') != 0", true, 2488, 2530, 0);
 53.3438 -            assertBlock(lstBlockFac.get(11).getChildBlocks(), 2, PlsqlBlockType.IF, "ELSE", true, 2539, 2605, 0);
 53.3439 +            assertEquals(13, lstBlockFac.size());
 53.3440 +            processBlocks(plsqlFileName, lstBlockFac);
 53.3441          } finally {
 53.3442              if (fileObject != null) {
 53.3443                  fileObject.delete();
 53.3444 @@ -3440,92 +462,18 @@
 53.3445      @Test
 53.3446      public void testAdvanced15() throws IOException, BadLocationException {
 53.3447          System.out.println("Advanced test case 15");
 53.3448 -        FileObject fileObject = fs.getRoot().createData("person.ins");
 53.3449 +        final String plsqlFileName = "person.ins";
 53.3450 +        FileObject fileObject = fs.getRoot().createData(plsqlFileName);
 53.3451          assertNotNull(fileObject);
 53.3452          try {
 53.3453 -            PlsqlBlockFactory blockFac = loadAsTmpFile(fileObject, "person.ins");
 53.3454 +            PlsqlBlockFactory blockFac = loadAsTmpFile(fileObject, plsqlFileName);
 53.3455              assertNotNull(blockFac);
 53.3456  
 53.3457              List<PlsqlBlock> lstBlockFac = blockFac.getBlockHierarchy();
 53.3458  //         printHierarchy(lstBlockFac, "");
 53.3459  //         generateAssert(lstBlockFac, "lstBlockFac", "false");
 53.3460 -            assertTrue(lstBlockFac.size() == 23);
 53.3461 -            assertBlock(lstBlockFac, 0, PlsqlBlockType.COMMENT, "-- Module: PERSON", false, 0, 1680, 0);
 53.3462 -            assertBlock(lstBlockFac, 1, PlsqlBlockType.BEGIN_END, "", false, 1683, 1814, 1);
 53.3463 -            assertBlock(lstBlockFac.get(1).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "INSERT", true, 1689, 1808, 0);
 53.3464 -            assertBlock(lstBlockFac, 2, PlsqlBlockType.DECLARE_END, "", false, 1817, 2105, 1);
 53.3465 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (val_ is NULL or val_='Yes,No')", true, 1939, 2100, 0);
 53.3466 -            assertBlock(lstBlockFac, 3, PlsqlBlockType.COMMENT, "-- Transfer companies from finance to hr", false, 2108, 2148, 0);
 53.3467 -            assertBlock(lstBlockFac, 4, PlsqlBlockType.BEGIN_END, "", false, 2375, 2664, 1);
 53.3468 -            assertBlock(lstBlockFac.get(4).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "INSERT INTO person_company_tab (", true, 2381, 2658, 0);
 53.3469 -            assertBlock(lstBlockFac, 5, PlsqlBlockType.DECLARE_END, "", false, 2667, 3275, 2);
 53.3470 -            assertBlock(lstBlockFac.get(5).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "check_exits", true, 2678, 2860, 0);
 53.3471 -            assertBlock(lstBlockFac.get(5).getChildBlocks(), 1, PlsqlBlockType.FOR_LOOP, "rec_ IN ( * FROM company_emp_tab)", true, 2887, 3270, 1);
 53.3472 -            assertBlock(lstBlockFac.get(5).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (check_exits%NOTFOUND)", true, 3024, 3232, 1);
 53.3473 -            assertBlock(lstBlockFac.get(5).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "INSERT INTO company_person_tab(company_id,emp_no,master_employment,operator,rowversion)", true, 3061, 3218, 0);
 53.3474 -            assertBlock(lstBlockFac, 6, PlsqlBlockType.DECLARE_END, "", false, 3278, 3823, 2);
 53.3475 -            assertBlock(lstBlockFac.get(6).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "check_exits", true, 3289, 3415, 0);
 53.3476 -            assertBlock(lstBlockFac.get(6).getChildBlocks(), 1, PlsqlBlockType.FOR_LOOP, "rec_ IN ( * FROM  person_info_tab)", true, 3446, 3818, 1);
 53.3477 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (check_exits%NOTFOUND)", true, 3578, 3767, 1);
 53.3478 -            assertBlock(lstBlockFac.get(6).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "INSERT INTO pers_tab(person_id,have_child,external_display_name,rowversion)", true, 3621, 3748, 0);
 53.3479 -            assertBlock(lstBlockFac, 7, PlsqlBlockType.BEGIN_END, "", false, 3826, 4088, 1);
 53.3480 -            assertBlock(lstBlockFac.get(7).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "INSERT INTO employee_name_configurator_tab", true, 3832, 4082, 0);
 53.3481 -            assertBlock(lstBlockFac, 8, PlsqlBlockType.DECLARE_END, "", false, 4100, 5981, 5);
 53.3482 -            assertBlock(lstBlockFac.get(8).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "COMMENT...", true, 4142, 4145, 0);
 53.3483 -            assertBlock(lstBlockFac.get(8).getChildBlocks(), 1, PlsqlBlockType.COMMENT, "COMMENT...", true, 4807, 4810, 0);
 53.3484 -            assertBlock(lstBlockFac.get(8).getChildBlocks(), 2, PlsqlBlockType.COMMENT, "-- Bug 58601, Modified hardcoded date values to Database_SYS.get_first_calendar_date and get_last_calendar_date.", true, 5053, 5165, 0);
 53.3485 -            assertBlock(lstBlockFac.get(8).getChildBlocks(), 3, PlsqlBlockType.COMMENT, "COMMENT...", true, 5390, 5393, 0);
 53.3486 -            assertBlock(lstBlockFac.get(8).getChildBlocks(), 4, PlsqlBlockType.COMMENT, "-- Bug 58601, Modified hardcoded date values to Database_SYS.get_first_calendar_date and get_last_calendar_date.", true, 5641, 5753, 0);
 53.3487 -            assertBlock(lstBlockFac, 9, PlsqlBlockType.DECLARE_END, "", false, 5993, 7846, 5);
 53.3488 -            assertBlock(lstBlockFac.get(9).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "COMMENT...", true, 6035, 6038, 0);
 53.3489 -            assertBlock(lstBlockFac.get(9).getChildBlocks(), 1, PlsqlBlockType.COMMENT, "COMMENT...", true, 6700, 6703, 0);
 53.3490 -            assertBlock(lstBlockFac.get(9).getChildBlocks(), 2, PlsqlBlockType.COMMENT, "-- Bug 58601, Modified hardcoded date values to Database_SYS.get_first_calendar_date and get_last_calendar_date.", true, 6934, 7046, 0);
 53.3491 -            assertBlock(lstBlockFac.get(9).getChildBlocks(), 3, PlsqlBlockType.COMMENT, "COMMENT...", true, 7271, 7274, 0);
 53.3492 -            assertBlock(lstBlockFac.get(9).getChildBlocks(), 4, PlsqlBlockType.COMMENT, "-- Bug 58601, Modified hardcoded date values to Database_SYS.get_first_calendar_date and get_last_calendar_date.", true, 7506, 7618, 0);
 53.3493 -            assertBlock(lstBlockFac, 10, PlsqlBlockType.DECLARE_END, "", false, 7858, 8561, 1);
 53.3494 -            assertBlock(lstBlockFac.get(10).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "COMMENT...", true, 7900, 7903, 0);
 53.3495 -            assertBlock(lstBlockFac, 11, PlsqlBlockType.DECLARE_END, "", false, 8574, 9270, 2);
 53.3496 -            assertBlock(lstBlockFac.get(11).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "check_comp_exist", true, 8585, 8757, 0);
 53.3497 -            assertBlock(lstBlockFac.get(11).getChildBlocks(), 1, PlsqlBlockType.FOR_LOOP, "get_company_ IN ( DISTINCT company_id FROM person_company_tab)", true, 8794, 9265, 1);
 53.3498 -            assertBlock(lstBlockFac.get(11).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (check_comp_exist%NOTFOUND)", true, 8983, 9219, 1);
 53.3499 -            assertBlock(lstBlockFac.get(11).getChildBlocks().get(1).getChildBlocks().get(0).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "INSERT INTO EMPLOYEE_STATUS_TAB(company_id, seq_no, employee_status, active, status_obsolete, rowversion)", true, 9028, 9203, 0);
 53.3500 -            assertBlock(lstBlockFac, 12, PlsqlBlockType.BEGIN_END, "", false, 9273, 9978, 0);
 53.3501 -            assertBlock(lstBlockFac, 13, PlsqlBlockType.PROCEDURE_IMPL, "Temp_Person_Document_Default", false, 10084, 11481, 2);
 53.3502 -            assertBlock(lstBlockFac.get(13).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "existdoc", true, 10416, 10546, 0);
 53.3503 -            assertBlock(lstBlockFac.get(13).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  existdoc%NOTFOUND", true, 10635, 11428, 1);
 53.3504 -            assertBlock(lstBlockFac.get(13).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "INSERT", true, 10667, 11116, 0);
 53.3505 -            assertBlock(lstBlockFac, 14, PlsqlBlockType.DECLARE_END, "", false, 11484, 11672, 0);
 53.3506 -            assertBlock(lstBlockFac, 15, PlsqlBlockType.STATEMENT, "DROP PROCEDURE Temp_Person_Document_Default", false, 11722, 11765, 0);
 53.3507 -            assertBlock(lstBlockFac, 16, PlsqlBlockType.BEGIN_END, "", false, 11769, 11973, 0);
 53.3508 -            assertBlock(lstBlockFac, 17, PlsqlBlockType.DECLARE_END, "", false, 12190, 14461, 2);
 53.3509 -            assertBlock(lstBlockFac.get(17).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "check_exits", true, 12201, 12307, 0);
 53.3510 -            assertBlock(lstBlockFac.get(17).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  (check_exits%NOTFOUND)", true, 12475, 14428, 6);
 53.3511 -            assertBlock(lstBlockFac.get(17).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "SELECT MARITAL_STATUS_ID.NEXTVAL INTO married_seq_ FROM dual", true, 12512, 12572, 0);
 53.3512 -            assertBlock(lstBlockFac.get(17).getChildBlocks().get(1).getChildBlocks(), 1, PlsqlBlockType.STATEMENT, "INSERT", true, 12581, 12835, 0);
 53.3513 -            assertBlock(lstBlockFac.get(17).getChildBlocks().get(1).getChildBlocks(), 2, PlsqlBlockType.STATEMENT, "SELECT MARITAL_STATUS_ID.NEXTVAL INTO unmarried_seq_ FROM dual", true, 13113, 13175, 0);
 53.3514 -            assertBlock(lstBlockFac.get(17).getChildBlocks().get(1).getChildBlocks(), 3, PlsqlBlockType.STATEMENT, "INSERT", true, 13187, 13475, 0);
 53.3515 -            assertBlock(lstBlockFac.get(17).getChildBlocks().get(1).getChildBlocks(), 4, PlsqlBlockType.STATEMENT, "SELECT MARITAL_STATUS_ID.NEXTVAL INTO widower_seq_ FROM dual", true, 13775, 13835, 0);
 53.3516 -            assertBlock(lstBlockFac.get(17).getChildBlocks().get(1).getChildBlocks(), 5, PlsqlBlockType.STATEMENT, "INSERT", true, 13847, 14133, 0);
 53.3517 -            assertBlock(lstBlockFac, 18, PlsqlBlockType.BEGIN_END, "", false, 14497, 14715, 0);
 53.3518 -            assertBlock(lstBlockFac, 19, PlsqlBlockType.DECLARE_END, "", false, 14939, 16749, 2);
 53.3519 -            assertBlock(lstBlockFac.get(19).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "check_exits", true, 14950, 15100, 0);
 53.3520 -            assertBlock(lstBlockFac.get(19).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  (check_exits%NOTFOUND)", true, 15185, 16719, 11);
 53.3521 -            assertBlock(lstBlockFac.get(19).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.STATEMENT, "INSERT INTO protected_information_tab(Protected_Field,Protected_Value,Rowversion)", true, 15226, 15355, 0);
 53.3522 -            assertBlock(lstBlockFac.get(19).getChildBlocks().get(1).getChildBlocks(), 1, PlsqlBlockType.STATEMENT, "INSERT INTO protected_information_tab(Protected_Field,Protected_Value,Rowversion)", true, 15362, 15482, 0);
 53.3523 -            assertBlock(lstBlockFac.get(19).getChildBlocks().get(1).getChildBlocks(), 2, PlsqlBlockType.STATEMENT, "INSERT INTO protected_information_tab(Protected_Field,Protected_Value,Rowversion)", true, 15490, 15633, 0);
 53.3524 -            assertBlock(lstBlockFac.get(19).getChildBlocks().get(1).getChildBlocks(), 3, PlsqlBlockType.STATEMENT, "INSERT INTO protected_information_tab(Protected_Field,Protected_Value,Rowversion)", true, 15640, 15767, 0);
 53.3525 -            assertBlock(lstBlockFac.get(19).getChildBlocks().get(1).getChildBlocks(), 4, PlsqlBlockType.STATEMENT, "INSERT INTO protected_information_tab(Protected_Field,Protected_Value,Rowversion)", true, 15776, 15904, 0);
 53.3526 -            assertBlock(lstBlockFac.get(19).getChildBlocks().get(1).getChildBlocks(), 5, PlsqlBlockType.STATEMENT, "INSERT INTO protected_information_tab(Protected_Field,Protected_Value,Rowversion)", true, 15911, 16035, 0);
 53.3527 -            assertBlock(lstBlockFac.get(19).getChildBlocks().get(1).getChildBlocks(), 6, PlsqlBlockType.STATEMENT, "INSERT INTO protected_information_tab(Protected_Field,Protected_Value,Rowversion)", true, 16044, 16170, 0);
 53.3528 -            assertBlock(lstBlockFac.get(19).getChildBlocks().get(1).getChildBlocks(), 7, PlsqlBlockType.STATEMENT, "INSERT INTO protected_information_tab(Protected_Field,Protected_Value,Rowversion)", true, 16177, 16297, 0);
 53.3529 -            assertBlock(lstBlockFac.get(19).getChildBlocks().get(1).getChildBlocks(), 8, PlsqlBlockType.STATEMENT, "INSERT INTO protected_information_tab(Protected_Field,Protected_Value,Rowversion)", true, 16306, 16430, 0);
 53.3530 -            assertBlock(lstBlockFac.get(19).getChildBlocks().get(1).getChildBlocks(), 9, PlsqlBlockType.STATEMENT, "INSERT INTO protected_information_tab(Protected_Field,Protected_Value,Rowversion)", true, 16438, 16566, 0);
 53.3531 -            assertBlock(lstBlockFac.get(19).getChildBlocks().get(1).getChildBlocks(), 10, PlsqlBlockType.STATEMENT, "INSERT INTO protected_information_tab(Protected_Field,Protected_Value,Rowversion)", true, 16574, 16701, 0);
 53.3532 -            assertBlock(lstBlockFac, 20, PlsqlBlockType.COMMENT, "-- Bug 73297, Start", false, 16761, 16779, 0);
 53.3533 -            assertBlock(lstBlockFac, 21, PlsqlBlockType.DECLARE_END, "", false, 17024, 18309, 2);
 53.3534 -            assertBlock(lstBlockFac.get(21).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "COMMENT...", true, 17066, 17069, 0);
 53.3535 -            assertBlock(lstBlockFac.get(21).getChildBlocks(), 1, PlsqlBlockType.COMMENT, "COMMENT...", true, 17686, 17689, 0);
 53.3536 -            assertBlock(lstBlockFac, 22, PlsqlBlockType.COMMENT, "-- Bug 73297, End", false, 18320, 18336, 0);
 53.3537 +            assertEquals(22, lstBlockFac.size());
 53.3538 +            processBlocks(plsqlFileName, lstBlockFac);
 53.3539          } finally {
 53.3540              if (fileObject != null) {
 53.3541                  fileObject.delete();
 53.3542 @@ -3536,30 +484,18 @@
 53.3543      @Test
 53.3544      public void testAdvanced16() throws IOException, BadLocationException {
 53.3545          System.out.println("Advanced test case 16");
 53.3546 -        FileObject fileObject = fs.getRoot().createData("sys_IalObjectSlave.api");
 53.3547 +        final String plsqlFileName = "sys_IalObjectSlave.api";
 53.3548 +        FileObject fileObject = fs.getRoot().createData(plsqlFileName);
 53.3549          assertNotNull(fileObject);
 53.3550          try {
 53.3551 -            PlsqlBlockFactory blockFac = loadAsTmpFile(fileObject, "sys_IalObjectSlave.api");
 53.3552 +            PlsqlBlockFactory blockFac = loadAsTmpFile(fileObject, plsqlFileName);
 53.3553              assertNotNull(blockFac);
 53.3554  
 53.3555              List<PlsqlBlock> lstBlockFac = blockFac.getBlockHierarchy();
 53.3556  //         printHierarchy(lstBlockFac, "");
 53.3557  //         generateAssert(lstBlockFac, "lstBlockFac", "false");
 53.3558 -            assertTrue(lstBlockFac.size() == 3);
 53.3559 -            assertBlock(lstBlockFac, 0, PlsqlBlockType.COMMENT, "-- Logical unit: IalObjectSlave", false, 0, 513, 0);
 53.3560 -            assertBlock(lstBlockFac, 1, PlsqlBlockType.PACKAGE, "IAL_OBJECT_SLAVE_API", false, 679, 2462, 11);
 53.3561 -            assertBlock(lstBlockFac.get(1).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- LU SPECIFIC PRIVATE METHODS ", true, 814, 1519, 0);
 53.3562 -            assertBlock(lstBlockFac.get(1).getChildBlocks(), 1, PlsqlBlockType.PROCEDURE_DEF, "Exec_Ddl_Statement", true, 1521, 1582, 0);
 53.3563 -            assertBlock(lstBlockFac.get(1).getChildBlocks(), 2, PlsqlBlockType.PROCEDURE_DEF, "Enumerate_Column_Info", true, 1584, 1665, 0);
 53.3564 -            assertBlock(lstBlockFac.get(1).getChildBlocks(), 3, PlsqlBlockType.PROCEDURE_DEF, "Enumerate_Index_Info", true, 1667, 1759, 0);
 53.3565 -            assertBlock(lstBlockFac.get(1).getChildBlocks(), 4, PlsqlBlockType.PROCEDURE_DEF, "Add_Index", true, 1761, 1842, 0);
 53.3566 -            assertBlock(lstBlockFac.get(1).getChildBlocks(), 5, PlsqlBlockType.PROCEDURE_DEF, "Remove_Index", true, 1844, 1928, 0);
 53.3567 -            assertBlock(lstBlockFac.get(1).getChildBlocks(), 6, PlsqlBlockType.PROCEDURE_DEF, "Get_Object_Info", true, 1930, 2011, 0);
 53.3568 -            assertBlock(lstBlockFac.get(1).getChildBlocks(), 7, PlsqlBlockType.FUNCTION_DEF, "Check_Index", true, 2013, 2111, 0);
 53.3569 -            assertBlock(lstBlockFac.get(1).getChildBlocks(), 8, PlsqlBlockType.PROCEDURE_DEF, "Get_Table_Info", true, 2113, 2199, 0);
 53.3570 -            assertBlock(lstBlockFac.get(1).getChildBlocks(), 9, PlsqlBlockType.COMMENT, "-- FOUNDATION1 METHODS ", true, 2201, 2434, 0);
 53.3571 -            assertBlock(lstBlockFac.get(1).getChildBlocks(), 10, PlsqlBlockType.PROCEDURE_DEF, "Init", true, 2436, 2451, 0);
 53.3572 -            assertBlock(lstBlockFac, 2, PlsqlBlockType.COMMENT, "COMMENT...", false, 2477, 2554, 0);
 53.3573 +            assertEquals(3, lstBlockFac.size());
 53.3574 +            processBlocks(plsqlFileName, lstBlockFac);
 53.3575          } finally {
 53.3576              if (fileObject != null) {
 53.3577                  fileObject.delete();
 53.3578 @@ -3570,82 +506,18 @@
 53.3579      @Test
 53.3580      public void testAdvanced17() throws IOException, BadLocationException {
 53.3581          System.out.println("Advanced test case 17");
 53.3582 -        FileObject fileObject = fs.getRoot().createData("sys_IalObjectSlave.apy");
 53.3583 +        final String plsqlFileName = "sys_IalObjectSlave.apy";
 53.3584 +        FileObject fileObject = fs.getRoot().createData(plsqlFileName);
 53.3585          assertNotNull(fileObject);
 53.3586          try {
 53.3587 -            PlsqlBlockFactory blockFac = loadAsTmpFile(fileObject, "sys_IalObjectSlave.apy");
 53.3588 +            PlsqlBlockFactory blockFac = loadAsTmpFile(fileObject, plsqlFileName);
 53.3589              assertNotNull(blockFac);
 53.3590  
 53.3591              List<PlsqlBlock> lstBlockFac = blockFac.getBlockHierarchy();
 53.3592  //         printHierarchy(lstBlockFac, "");
 53.3593  //         generateAssert(lstBlockFac, "lstBlockFac", "false");
 53.3594 -            assertTrue(lstBlockFac.size() == 4);
 53.3595 -            assertBlock(lstBlockFac, 0, PlsqlBlockType.COMMENT, "-- Logical unit: IalObjectSlave", false, 0, 1094, 0);
 53.3596 -            assertBlock(lstBlockFac, 1, PlsqlBlockType.COMMENT, "-- PACKAGES FOR METHODS ", false, 1209, 1442, 0);
 53.3597 -            assertBlock(lstBlockFac, 2, PlsqlBlockType.PACKAGE_BODY, "IAL_OBJECT_SLAVE_API", false, 1494, 13066, 21);
 53.3598 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- LU SPECIFIC IMPLEMENTATION METHOD DECLARATIONS ", true, 1547, 1780, 0);
 53.3599 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 1, PlsqlBlockType.FUNCTION_DEF, "Is_Locally_Managed___", true, 1782, 1859, 0);
 53.3600 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 2, PlsqlBlockType.FUNCTION_DEF, "Is_Column_Indexed___", true, 1861, 1968, 0);
 53.3601 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 3, PlsqlBlockType.FUNCTION_DEF, "Get_Column_Id___", true, 1970, 2073, 0);
 53.3602 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 4, PlsqlBlockType.FUNCTION_DEF, "Table_Exist___", true, 2075, 2145, 0);
 53.3603 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 5, PlsqlBlockType.COMMENT, "-- LU SPECIFIC IMPLEMENTATION METHODS ", true, 2147, 2380, 0);
 53.3604 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 6, PlsqlBlockType.FUNCTION_IMPL, "Is_Locally_Managed___", true, 2382, 2830, 1);
 53.3605 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(6).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "get_extent_management", true, 2502, 2638, 0);
 53.3606 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 7, PlsqlBlockType.FUNCTION_IMPL, "Is_Column_Indexed___", true, 2832, 3438, 3);
 53.3607 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(7).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "get_index", true, 3075, 3196, 0);
 53.3608 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(7).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  get_index%FOUND", true, 3283, 3330, 0);
 53.3609 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(7).getChildBlocks(), 2, PlsqlBlockType.IF, "ELSE", true, 3334, 3374, 0);
 53.3610 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 8, PlsqlBlockType.FUNCTION_IMPL, "Get_Column_Id___", true, 3440, 3824, 1);
 53.3611 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(8).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "get_id", true, 3565, 3713, 0);
 53.3612 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 9, PlsqlBlockType.FUNCTION_IMPL, "Table_Exist___", true, 3826, 4230, 2);
 53.3613 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(9).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "exist_control", true, 3922, 4012, 0);
 53.3614 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(9).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  exist_control%FOUND", true, 4081, 4167, 0);
 53.3615 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 10, PlsqlBlockType.COMMENT, "-- LU SPECIFIC PRIVATE METHODS ", true, 4232, 4937, 0);
 53.3616 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 11, PlsqlBlockType.PROCEDURE_IMPL, "Exec_Ddl_Statement", true, 4939, 5143, 1);
 53.3617 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(11).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- Safe as package is in IAL Owner schema", true, 5012, 5091, 0);
 53.3618 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 12, PlsqlBlockType.PROCEDURE_IMPL, "Enumerate_Column_Info", true, 5145, 6488, 3);
 53.3619 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(12).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "get_column_info", true, 5389, 5531, 0);
 53.3620 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(12).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  Table_Exist___(table_name_)", true, 5541, 6017, 1);
 53.3621 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(12).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.FOR_LOOP, "rec_ IN get_column_info(table_name_)", true, 5583, 6017, 0);
 53.3622 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(12).getChildBlocks(), 2, PlsqlBlockType.IF, "ELSE", true, 6021, 6438, 1);
 53.3623 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(12).getChildBlocks().get(2).getChildBlocks(), 0, PlsqlBlockType.FOR_LOOP, "rec_ IN get_column_info(view_name_)", true, 6032, 6427, 0);
 53.3624 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 13, PlsqlBlockType.PROCEDURE_IMPL, "Enumerate_Index_Info", true, 6490, 8726, 3);
 53.3625 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(13).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "get_index_info", true, 6793, 6896, 0);
 53.3626 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(13).getChildBlocks(), 1, PlsqlBlockType.CURSOR, "get_columns", true, 6901, 7071, 0);
 53.3627 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(13).getChildBlocks(), 2, PlsqlBlockType.FOR_LOOP, "ind_ IN get_index_info", true, 7081, 8672, 4);
 53.3628 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(13).getChildBlocks().get(2).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  (ind_.uniqueness = 'UNIQUE')", true, 7119, 7253, 0);
 53.3629 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(13).getChildBlocks().get(2).getChildBlocks(), 1, PlsqlBlockType.IF, "ELSE", true, 7260, 7369, 0);
 53.3630 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(13).getChildBlocks().get(2).getChildBlocks(), 2, PlsqlBlockType.FOR_LOOP, "col_ IN get_columns(ind_.index_name)", true, 7423, 7571, 0);
 53.3631 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(13).getChildBlocks().get(2).getChildBlocks(), 3, PlsqlBlockType.IF, "IF  (col_list_ IS NOT NULL)", true, 7578, 8659, 3);
 53.3632 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(13).getChildBlocks().get(2).getChildBlocks().get(3).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- Statements only necessary if not locally managed tablespace", true, 7765, 7827, 0);
 53.3633 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(13).getChildBlocks().get(2).getChildBlocks().get(3).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  NOT Is_Locally_Managed___(ind_.tablespace_name)", true, 7837, 8538, 0);
 53.3634 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(13).getChildBlocks().get(2).getChildBlocks().get(3).getChildBlocks(), 2, PlsqlBlockType.COMMENT, "-- Add this index to the list for all indexes", true, 8548, 8593, 0);
 53.3635 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 14, PlsqlBlockType.PROCEDURE_IMPL, "Add_Index", true, 8728, 9019, 0);
 53.3636 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 15, PlsqlBlockType.PROCEDURE_IMPL, "Remove_Index", true, 9021, 9272, 0);
 53.3637 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 16, PlsqlBlockType.PROCEDURE_IMPL, "Get_Object_Info", true, 9274, 10356, 3);
 53.3638 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(16).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "find_objdate_column", true, 9469, 9615, 0);
 53.3639 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(16).getChildBlocks(), 1, PlsqlBlockType.IF, "IF  Table_Exist___(table_name_)", true, 9625, 10145, 4);
 53.3640 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(16).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- Add table name", true, 9667, 9684, 0);
 53.3641 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(16).getChildBlocks().get(1).getChildBlocks(), 1, PlsqlBlockType.COMMENT, "-- Add info about objdate column", true, 9781, 9813, 0);
 53.3642 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(16).getChildBlocks().get(1).getChildBlocks(), 2, PlsqlBlockType.IF, "IF  find_objdate_column%FOUND", true, 9897, 10008, 0);
 53.3643 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(16).getChildBlocks().get(1).getChildBlocks(), 3, PlsqlBlockType.IF, "ELSE", true, 10015, 10112, 0);
 53.3644 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(16).getChildBlocks(), 2, PlsqlBlockType.IF, "ELSE", true, 10149, 10312, 1);
 53.3645 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(16).getChildBlocks().get(2).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- If no table exist, then no objdate column will exist either...", true, 10160, 10225, 0);
 53.3646 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 17, PlsqlBlockType.FUNCTION_IMPL, "Check_Index", true, 10358, 11197, 3);
 53.3647 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(17).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "get_indexes", true, 10534, 10641, 0);
 53.3648 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(17).getChildBlocks(), 1, PlsqlBlockType.CURSOR, "find_index_column", true, 10646, 10816, 0);
 53.3649 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(17).getChildBlocks(), 2, PlsqlBlockType.FOR_LOOP, "rec_ IN get_indexes", true, 10826, 11160, 1);
 53.3650 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(17).getChildBlocks().get(2).getChildBlocks(), 0, PlsqlBlockType.IF, "IF  find_index_column%FOUND", true, 10951, 11116, 0);
 53.3651 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 18, PlsqlBlockType.PROCEDURE_IMPL, "Get_Table_Info", true, 11199, 12544, 2);
 53.3652 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(18).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "get_table_information", true, 11330, 11463, 0);
 53.3653 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(18).getChildBlocks(), 1, PlsqlBlockType.FOR_LOOP, "tab_ IN get_table_information(name_ || '_TAB')", true, 11473, 12498, 4);
 53.3654 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(18).getChildBlocks().get(1).getChildBlocks(), 0, PlsqlBlockType.COMMENT, "-- Initial statement", true, 11535, 11555, 0);
 53.3655 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(18).getChildBlocks().get(1).getChildBlocks(), 1, PlsqlBlockType.COMMENT, "-- Statements only necessary if not locally managed tablespace", true, 11680, 11742, 0);
 53.3656 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(18).getChildBlocks().get(1).getChildBlocks(), 2, PlsqlBlockType.IF, "IF  NOT Is_Locally_Managed___(tab_.tablespace_name)", true, 11749, 12391, 0);
 53.3657 -            assertBlock(lstBlockFac.get(2).getChildBlocks().get(18).getChildBlocks().get(1).getChildBlocks(), 3, PlsqlBlockType.COMMENT, "-- Final statement", true, 12398, 12416, 0);
 53.3658 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 19, PlsqlBlockType.COMMENT, "-- FOUNDATION1 METHODS ", true, 12546, 13010, 0);
 53.3659 -            assertBlock(lstBlockFac.get(2).getChildBlocks(), 20, PlsqlBlockType.PROCEDURE_IMPL, "Init", true, 13012, 13054, 0);
 53.3660 -            assertBlock(lstBlockFac, 3, PlsqlBlockType.COMMENT, "COMMENT...", false, 13081, 13158, 0);
 53.3661 +            assertEquals(4, lstBlockFac.size());
 53.3662 +            processBlocks(plsqlFileName, lstBlockFac);
 53.3663          } finally {
 53.3664              if (fileObject != null) {
 53.3665                  fileObject.delete();
 53.3666 @@ -3656,27 +528,18 @@
 53.3667      @Test
 53.3668      public void testAdvanced18() throws IOException, BadLocationException {
 53.3669          System.out.println("Advanced test case 18");
 53.3670 -        FileObject fileObject = fs.getRoot().createData("txtser.ins");
 53.3671 +        final String plsqlFileName = "txtser.ins";
 53.3672 +        FileObject fileObject = fs.getRoot().createData(plsqlFileName);
 53.3673          assertNotNull(fileObject);
 53.3674          try {
 53.3675 -            PlsqlBlockFactory blockFac = loadAsTmpFile(fileObject, "txtser.ins");
 53.3676 +            PlsqlBlockFactory blockFac = loadAsTmpFile(fileObject, plsqlFileName);
 53.3677              assertNotNull(blockFac);
 53.3678  
 53.3679              List<PlsqlBlock> lstBlockFac = blockFac.getBlockHierarchy();
 53.3680  //         printHierarchy(lstBlockFac, "");
 53.3681  //         generateAssert(lstBlockFac, "lstBlockFac", "false");
 53.3682 -            assertTrue(lstBlockFac.size() == 4);
 53.3683 -            assertBlock(lstBlockFac, 0, PlsqlBlockType.COMMENT, "-- File: txtser.ins", false, 0, 977, 0);
 53.3684 -            assertBlock(lstBlockFac, 1, PlsqlBlockType.JAVA_SOURCE, "", false, 995, 6190, 0);
 53.3685 -            assertBlock(lstBlockFac, 2, PlsqlBlockType.COMMENT, "-- Creation of Schedules", false, 6194, 6218, 0);
 53.3686 -            assertBlock(lstBlockFac, 3, PlsqlBlockType.DECLARE_END, "", false, 6289, 9815, 7);
 53.3687 -            assertBlock(lstBlockFac.get(3).getChildBlocks(), 0, PlsqlBlockType.CURSOR, "check_exist", true, 6654, 6753, 0);
 53.3688 -            assertBlock(lstBlockFac.get(3).getChildBlocks(), 1, PlsqlBlockType.COMMENT, "-- Sync Index", true, 6773, 6799, 0);
 53.3689 -            assertBlock(lstBlockFac.get(3).getChildBlocks(), 2, PlsqlBlockType.IF, "IF  (check_exist%NOTFOUND)", true, 6999, 7666, 0);
 53.3690 -            assertBlock(lstBlockFac.get(3).getChildBlocks(), 3, PlsqlBlockType.COMMENT, "-- Optimize Index", true, 7698, 7728, 0);
 53.3691 -            assertBlock(lstBlockFac.get(3).getChildBlocks(), 4, PlsqlBlockType.IF, "IF  (check_exist%NOTFOUND)", true, 7971, 8639, 0);
 53.3692 -            assertBlock(lstBlockFac.get(3).getChildBlocks(), 5, PlsqlBlockType.COMMENT, "-- Delete old Search Results         ", true, 8669, 8881, 0);
 53.3693 -            assertBlock(lstBlockFac.get(3).getChildBlocks(), 6, PlsqlBlockType.IF, "IF  (check_exist%NOTFOUND)", true, 9117, 9786, 0);
 53.3694 +            assertEquals(4, lstBlockFac.size());
 53.3695 +            processBlocks(plsqlFileName, lstBlockFac);
 53.3696          } finally {
 53.3697              if (fileObject != null) {
 53.3698                  fileObject.delete();
 53.3699 @@ -3685,7 +548,7 @@
 53.3700      }
 53.3701  
 53.3702      private PlsqlBlockFactory loadAsTmpFile(FileObject fileObj, String fileName) throws IOException, BadLocationException {
 53.3703 -        InputStream inputStream = PlsqlBlockFactoryTest.class.getResourceAsStream(fileName);
 53.3704 +        InputStream inputStream = new FileInputStream(new File(getDataDir(), fileName));
 53.3705          InputStreamReader indexReader = new InputStreamReader(inputStream);
 53.3706          BufferedReader input = new BufferedReader(indexReader);
 53.3707          String content = "";
 53.3708 @@ -3730,14 +593,12 @@
 53.3709          }
 53.3710      }
 53.3711  
 53.3712 -    private void assertBlock(List<PlsqlBlock> lstBlock, int index, PlsqlBlockType type, String name, boolean parentExisting, int startOffset, int endOffset, int childCount) {
 53.3713 +    private void assertBlock(List<PlsqlBlock> lstBlock, int index, PlsqlBlockType type, String name, boolean parentExisting, int childCount) {
 53.3714          PlsqlBlock block = lstBlock.get(index);
 53.3715          assertNotNull(block);
 53.3716 -        assertTrue(block.getType() == type);
 53.3717 -        assertTrue(block.getName().equals(name));
 53.3718 -        assertTrue(block.getStartOffset() == startOffset);
 53.3719 -        assertTrue(block.getEndOffset() == endOffset);
 53.3720 -        assertTrue(block.getChildCount() == childCount);
 53.3721 +        assertEquals(type, block.getType());
 53.3722 +        assertEquals(name, block.getName());
 53.3723 +        assertEquals(childCount, block.getChildCount());
 53.3724  
 53.3725          if (parentExisting) {
 53.3726              assertNotNull(block.getParent());
    54.1 --- a/PLSQL/Lexer/test/unit/src/org/netbeans/modules/plsql/lexer/ScorecardInputValue.apy	Wed May 15 16:07:35 2013 +0200
    54.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    54.3 @@ -1,6810 +0,0 @@
    54.4 ------------------------------------------------------------------------------
    54.5 ---
    54.6 ---  Logical unit: ScorecardInputValue
    54.7 ---
    54.8 ---  Purpose:
    54.9 ---
   54.10 ---  IFS/Design Template Version 2.2
   54.11 ---
   54.12 ---  Date    Sign     History
   54.13 ---  ------  ----  -----------------------------------------------------------
   54.14 ---  090402  ASJALK   Created.
   54.15 ---  230402  ASJALK   Changed the view comments.
   54.16 ---  150502  ASJALK   Added method Get_Distributed_Attr.
   54.17 ---  200502  ASJALK   Added method Update_Distributed_Values and removed the method Get_Distributed_Attr.
   54.18 ---  200502  ASJALK   Added method Update_Sales_Values.
   54.19 ---  220502  SHWILK   Call Id: 84289 - Changed the Modify__ method.
   54.20 ---  230502  ASJALK   Added method Calculate_Measures.
   54.21 ---  240502  ASJALK   Modified method Calculate_Measures.
   54.22 ---  300502  ASJALK   Added method Update_Referred_Component.
   54.23 ---  310502  ASJALK   Modified method Calculate_Measures.
   54.24 ---  110602  ASJALK   Modified method Update_Sales_Values.
   54.25 ---  120602  ASJALK   Added a new parameter for method Update_Reffered_Component.
   54.26 ---  130602  MAWELK   Fixed Call Id 85475.(Added a update satement to Scorecard_Structure_tab in the Modify__ method.)
   54.27 ---  170602  ASJALK   Added a update statement to Scorecard_Structure_tab in the Calculate_Measures and removed the
   54.28 ---                   update statement in Modify__ method.
   54.29 ---  180602  UMDOLK   Call Id 85764,85765 Corrected.
   54.30 ---  200602  ASJALK   Call Id 85793.
   54.31 ---  210602  MAWELK   CALL ID 85518 Decimal Problem.
   54.32 ---  250602  UMDOLK   Call Id 85913, 85775 Corrected.
   54.33 ---  250602  ASJALK   Call Id 85606.
   54.34 ---  250602  UMDOLK   Changed methods Publish__,Publish_Scorecard, and Update_Versions__.
   54.35 ---  250602  ASJALK   Modified Update_Distributed_Values method.
   54.36 ---  250602  MAWELK   CALL ID 85518 Decimal Problem(made the database more than 2 decimals).
   54.37 ---  260602  UMDOLK   Corrected a bug in planned data publishing ( Changed Publish__ Method).
   54.38 ---  190802  INGULK   Meathod added Check_Table.(Call Id 86123)
   54.39 ---  030902  INGULK   Removed the check for the valid table in the Publish_Score__(Call Id 88441).
   54.40 ---  250902  SHWILK   Added the field Action
   54.41 ---  011002  ASJALK   Modified methods Update_Distributed_Values and Update_Sales_Values.
   54.42 ---  011002  MAWELK   Added a new parameter called from_where_ to Update_Distributed_Values and Update_Sales_Values. Also change the code for measures too.
   54.43 ---  041002  ASJALK   Added new parameter "action_value_" to Update_Distributed_Values and Update_Sales_Values methods.
   54.44 ---  071002  ASJALK   Changed the error messages of Update_Sales_Values.
   54.45 ---  210103  ASJALK   Rewrite all the get methods used for scorecard planning in the scorecard_structure_apy which was
   54.46 ---                   previously written in the scorecard_measure_apy.
   54.47 ---  130203  ASJALK   Modified Update_Distributed_Values,Update_Sales_Values,Calculate_Measures methods in order to calculate the version and index (new logic).
   54.48 ---  130203  PRWELK   modified input_scorecard_value procedure with ref cursors.
   54.49 ---  190203  ASJALK   Modified Update_Distributed_Values,Update_Sales_Values methods.
   54.50 ---  240203  ASJALK   Modified cursors 'get_period' of Update_Sales_Values and Input_Scorecard_Data methods.
   54.51 ---  290303  ASJALK   Added methods Hierachical_Distribution and Distribute_Input_Values___.
   54.52 ---  010403  PRWELK   Added support for administrating individual items in input_scorecard_data().
   54.53 ---  090903  PRWELK   Added set_Publishing_environment,start_publishing_environment__,Publish_Environment_Batch.
   54.54 ---  090403  ASJALK   Modified the method Distribute_Input_Values___.
   54.55 ---  100403  PRWELK   Added Set_Publish_Scorecards()
   54.56 ---  230403  PRWELK   Added prepare_scorecar_publish__,publish_scorecard_batch(),start_publish_scorecard_.
   54.57 ---  250403  MAAMLK   Call Id 96585 - Added the new error message in Distribute_Input_Values___.
   54.58 ---  300403  ASJALK   Added methods Hierarchical_Consolidation and Consolidate_Values.
   54.59 ---  060503  ASJALK   Added methods All_Hierarchical_Logic,Background_Hierarchical_Logic,
   54.60 ---                   Call_Hierarchical_Logic and Start_Hierarchical_Logic.
   54.61 ---  080503  ASJALK   Modified method Start_Hierarchical_Logic.
   54.62 ---  190503  MAAMLK   Call Id 97124 - Added a new view Scorecard_Input_Value2 (VIEW2)
   54.63 ---  210503  ASJALK   Modified All_Hierarchical_Logic method in order to make the ACTION field value TRUE.
   54.64 ---  040603  UMDOLK   Call Id 97125 - Created a new view SCORECARD_INPUT_VALUE3.
   54.65 ---  050603  UMDOLK   Modified Calculate_Measures method.
   54.66 ---  190603  ASJALK   Added new field plan_seq_no to the view SCORECARD_INPUT_VALUE3.
   54.67 ---  070703  ASJALK   Modified Calculate_Measures method.
   54.68 ---  210703  ANGALK   Call Id 98470 - Cannot plan in a year with one period. Calculate_Measures method updated
   54.69 ---  240703  ANGALK   Call Id 98225 - Changed message displayed when no plan formula in Calculate_Measures method
   54.70 ---  200803  CHPALK   Added objid and objversion to view SCORECARD_INPUT_VALUE2.
   54.71 ---  280803  INGULK   Call Id 101075 Added Rowversion to the Update statement in the Update_Versions__ method.
   54.72 ---  010903  ANGALK   Call Id 98762 - CalculateMeasures() method was updated
   54.73 ---  020903  ANGALK   Call Id 98855 - CalculateMeasures() method was updated
   54.74 ---  040903  CHPALK   Call Id 101406 Changed methods Publish_Score__ ,Publish__
   54.75 ---                   and Update_Versions__ to improve performace.
   54.76 ---  170903  INGULK   Call Id 102095 Changed lenghs of 4 variables in Input_Scorecard_Data & Scorecard_Inputs_By_Batch.
   54.77 ---  220903  ASJALK   Call Id 103595 Changed dynamic cursors used in Update_Sales_Values to use bind variables.
   54.78 ---  230903  MAAMLK   Call Id 99040 Changed the IID check from INF_WAR to DATA_WAR.
   54.79 ---  171003  ASJALK   Call Id 105967 Modified method Update_Sales_Values.
   54.80 ---  231003  ANGALK   Call Id 108864 Modified Update_Versions_() and Publish_Score methods
   54.81 ---  280104  UMDOLK   FIPR408A1 Unicode (changed instrb to instr)
   54.82 ---  050304  CHPALK   Modified Insert___ to use RETURNING INTO to select rowid.
   54.83 ---  040304  MAAMLK   Call Id 40712
   54.84 ---  240304  MAWELK   SP1 Merge (LCS Bug Id 42350)
   54.85 ---  080404  ASJALK   Modified the code in order to align with the removed fields planned,scorecard_published,
   54.86 ---                   environment_published from scorecard_tab.
   54.87 ---  200404  ASJALK   Called the method Set_To_Planned in Distribute_Input_Values___ and Consolidate_Values.
   54.88 ---  200404  PRWELK   Value_distribution_type is replaced by scorecard_measure_api.get_match_type()
   54.89 ---  210404  PRWELK   Removed Plan formula field and references
   54.90 ---  210404  ASJALK   Modified methods Distribute_Input_Values___ and Consolidate_Values.
   54.91 ---  220404  ASJALK   Modified methods Update_Distributed_Values,Update_Sales_Values,Distribute_Input_Values___ and Consolidate_Values.
   54.92 ---  280404  ASJALK   Aligned the code according to the added state machine.
   54.93 ---  280404  ASJALK   Added method Set_To_Planned and called this method in the planning methods.
   54.94 ---  280404  ASJALK   Added method Get_Sco_Obj_State_Date.
   54.95 ---  190704  PRWELK   Added Method Budget_And_Calculate
   54.96 ---  090804  PRWELK   Changed Budget_And_Calculate method (Bug Id 116291)
   54.97 ---  260804  ASJALK   Call Id 116850 Modified method Insert__.
   54.98 ---  030904  INGULK   Call Id 117467 Changed cursor get_open_child_scr in the method Distribute_Input_Values___.
   54.99 ---  251004  ASJALK   Call Id 118165 Modified method Budget_And_Calculate.
  54.100 ---  101104  MAAMLK   Call Id 119453 Modified 'where' condition for consolidation error message
  54.101 ---  111104  MAAMLK   Call Id 119454 Modified the 'where' condition
  54.102 ---  101204  INGULK   Added General_SYS.Init_Method for procedures and Pragma for functions.
  54.103 ---  300305  MAWELK   FIPR375 Added a method called Get_Error_Msg_For_Comp().
  54.104 ---  211205  ISWALK   Added method Import_Planned_Values(), Calculate_Year_Value(), Aggregate_Planned_Values()
  54.105 ---                   and SCORECARD_INPUT_VALUE_BUDPRO... views.
  54.106 ---  110106  ISWALK   Modified SCORECARD_INPUT_VALUE3,SCORECARD_INPUT_VALUE_BUDPRO1
  54.107 ---  140106  ISWALK   Added method Load_Planned_Values(), Get_No_Of_Periods().
  54.108 ---  090206  MAAMLK   Call Id 132397 This problem was caused due to the assert comments introduced. As such
  54.109 ---                   these changes were reversed.
  54.110 ---  170206  ISWALK   Added functionality to load financials type data from budget process.
  54.111 ---  090306  ISWALK   B136588 modified Import_Fin_Values().
  54.112 ---  090306  ISWALK   B136601 modified Calculate_Year_Value() and Import_Fin_Values().
  54.113 ---  220306  ISWALK   B136602 modified Load_Planned_Values() and Import_Fin_Values().
  54.114 ---  220207  INGULK   Bug 63415, Changes to the WHERE clause of the view SCORECARD_INPUT_VALUE_BUDPRO2.
  54.115 ---  070515  SURMLK   Added ifs_assert_safe comment
  54.116 ---  070523  CHSALK   LCS Merge 64779, added a method Calc_Measure_From_Budpro() to calculate the measure values.
  54.117 ---  060707  MAAMLK   LCS Merge Bug 65000, Corrected in all_hierarchical_logic.
  54.118 ---  110707  MAAMLK   LCS Merge Bug 66326, Corrected in Publish_Environment.
  54.119 ---  160707  MAAMLK   LCS Merge Bug 64779, added a method Calc_Measure_From_Budpro() to calculate the measure values.
  54.120 ---  200707  MAAMLK   LCS Merge Bug 66082, Added calculate measure for FIN measures
  54.121 ---  051107  MAWELK   Bug 68118, Changes to Import_Fin_Values()
  54.122 ---  060208  MAKRLK   Bug 71089, Changes to Import_Fin_Values(), added dynamic calls to BUDPRO when required.
  54.123 ---  080318  Nsillk   Bug 72069, Added assert_safe to places where it was missing.
  54.124 ---  080331  MAKRLK   Bug 66984, changed method Load_Planned_Values() 
  54.125 ---  160908  MAAYLK   Bug 76573, Set measure to planned state at the end of Calculate_Measures() method 
  54.126 ------------------------------------------------------------------------------
  54.127 -
  54.128 -DEFINE MODULE        = BUSPER
  54.129 -DEFINE LU            = ScorecardInputValue
  54.130 -DEFINE TABLE         = SCORECARD_INPUT_VALUE_TAB
  54.131 -DEFINE VIEW          = SCORECARD_INPUT_VALUE
  54.132 -DEFINE VIEW2         = SCORECARD_INPUT_VALUE2
  54.133 -DEFINE VIEW3         = SCORECARD_INPUT_VALUE3
  54.134 -DEFINE VIEW4         = SCORECARD_INPUT_VALUE_BUDPRO1
  54.135 -DEFINE VIEW5         = SCORECARD_INPUT_VALUE_BUDPRO2
  54.136 -DEFINE PKG           = SCORECARD_INPUT_VALUE_API
  54.137 -
  54.138 -DEFINE OBJID         = rowid
  54.139 -DEFINE OBJVERSION    = "ltrim(lpad(to_char(rowversion,'YYYYMMDDHH24MISS'),2000))"
  54.140 -
  54.141 -DEFINE OBJSTATE      = rowstate
  54.142 -DEFINE OBJEVENTS     = &PKG..Finite_State_Events__(&OBJSTATE)
  54.143 -DEFINE STATE         = &PKG..Finite_State_Decode__(&OBJSTATE)
  54.144 ------------------------------------------------------------------------------
  54.145 --------------------- VIEWS FOR SELECTS --------------------------------------
  54.146 ------------------------------------------------------------------------------
  54.147 -
  54.148 -PROMPT Creating &VIEW view
  54.149 -
  54.150 -CREATE OR REPLACE FORCE VIEW &VIEW AS
  54.151 -SELECT environment                    environment,
  54.152 -       scorecard                      scorecard,
  54.153 -       year                           year,
  54.154 -       version                        version,
  54.155 -       scorecard_object               scorecard_object,
  54.156 -       object_type                    object_type,
  54.157 -       year_value                     year_value,
  54.158 -       p1_key                         p1_key,
  54.159 -       p1_value                       p1_value,
  54.160 -       p2_key                         p2_key,
  54.161 -       p2_value                       p2_value,
  54.162 -       p3_key                         p3_key,
  54.163 -       p3_value                       p3_value,
  54.164 -       p4_key                         p4_key,
  54.165 -       p4_value                       p4_value,
  54.166 -       p5_key                         p5_key,
  54.167 -       p5_value                       p5_value,
  54.168 -       p6_key                         p6_key,
  54.169 -       p6_value                       p6_value,
  54.170 -       p7_key                         p7_key,
  54.171 -       p7_value                       p7_value,
  54.172 -       p8_key                         p8_key,
  54.173 -       p8_value                       p8_value,
  54.174 -       p9_key                         p9_key,
  54.175 -       p9_value                       p9_value,
  54.176 -       p10_key                        p10_key,
  54.177 -       p10_value                      p10_value,
  54.178 -       p11_key                        p11_key,
  54.179 -       p11_value                      p11_value,
  54.180 -       p12_key                        p12_key,
  54.181 -       p12_value                      p12_value,
  54.182 -       action                         action,
  54.183 -       mea_state_change_date          mea_state_change_date,
  54.184 -       budget_version                 budget_version,
  54.185 -       &OBJID                         objid,
  54.186 -       &OBJVERSION                    objversion,
  54.187 -       &OBJSTATE                      objstate,
  54.188 -       &OBJEVENTS                     objevents,
  54.189 -       &STATE                         state
  54.190 -FROM   scorecard_input_value_tab
  54.191 -WITH   read only;
  54.192 -
  54.193 -COMMENT ON TABLE &VIEW
  54.194 -   IS 'LU=&LU^PROMPT=Scorecard Input Value^MODULE=&MODULE^';
  54.195 -
  54.196 -COMMENT ON COLUMN &VIEW..environment
  54.197 -   IS 'FLAGS=KMIU-^DATATYPE=STRING(10)^PROMPT=Environment^REF=ScorecardEnvironment^';
  54.198 -COMMENT ON COLUMN &VIEW..scorecard
  54.199 -   IS 'FLAGS=KMIU-^DATATYPE=STRING(10)^PROMPT=Scorecard^REF=Scorecard(environment)^';
  54.200 -COMMENT ON COLUMN &VIEW..year
  54.201 -   IS 'FLAGS=KMIU-^DATATYPE=STRING(20)^PROMPT=Year^REF=EnvironmentYear(environment)^';
  54.202 -COMMENT ON COLUMN &VIEW..version
  54.203 -   IS 'FLAGS=KMI-L^DATATYPE=STRING(20)^PROMPT=Version^';
  54.204 -COMMENT ON COLUMN &VIEW..scorecard_object
  54.205 -   IS 'FLAGS=KMIU-^DATATYPE=STRING(10)^PROMPT=Scorecard Object^';
  54.206 -COMMENT ON COLUMN &VIEW..object_type
  54.207 -   IS 'FLAGS=AMIU-^DATATYPE=STRING(10)^PROMPT=Object Type^';
  54.208 -COMMENT ON COLUMN &VIEW..year_value
  54.209 -   IS 'FLAGS=A-IU-^DATATYPE=NUMBER^PROMPT=Year Value^';
  54.210 -COMMENT ON COLUMN &VIEW..p1_key
  54.211 -   IS 'FLAGS=A-IU-^DATATYPE=STRING(10)^PROMPT=P1 Key^';
  54.212 -COMMENT ON COLUMN &VIEW..p1_value
  54.213 -   IS 'FLAGS=A-IU-^DATATYPE=NUMBER^PROMPT=P1 Value^';
  54.214 -COMMENT ON COLUMN &VIEW..p2_key
  54.215 -   IS 'FLAGS=A-IU-^DATATYPE=STRING(10)^PROMPT=P2 Key^';
  54.216 -COMMENT ON COLUMN &VIEW..p2_value
  54.217 -   IS 'FLAGS=A-IU-^DATATYPE=NUMBER^PROMPT=P2 Value^';
  54.218 -COMMENT ON COLUMN &VIEW..p3_key
  54.219 -   IS 'FLAGS=A-IU-^DATATYPE=STRING(10)^PROMPT=P3 Key^';
  54.220 -COMMENT ON COLUMN &VIEW..p3_value
  54.221 -   IS 'FLAGS=A-IU-^DATATYPE=NUMBER^PROMPT=P3 Value^';
  54.222 -COMMENT ON COLUMN &VIEW..p4_key
  54.223 -   IS 'FLAGS=A-IU-^DATATYPE=STRING(10)^PROMPT=P4 Key^';
  54.224 -COMMENT ON COLUMN &VIEW..p4_value
  54.225 -   IS 'FLAGS=A-IU-^DATATYPE=NUMBER^PROMPT=P4 Value^';
  54.226 -COMMENT ON COLUMN &VIEW..p5_key
  54.227 -   IS 'FLAGS=A-IU-^DATATYPE=STRING(10)^PROMPT=P5 Key^';
  54.228 -COMMENT ON COLUMN &VIEW..p5_value
  54.229 -   IS 'FLAGS=A-IU-^DATATYPE=NUMBER^PROMPT=P5 Value^';
  54.230 -COMMENT ON COLUMN &VIEW..p6_key
  54.231 -   IS 'FLAGS=A-IU-^DATATYPE=STRING(10)^PROMPT=P6 Key^';
  54.232 -COMMENT ON COLUMN &VIEW..p6_value
  54.233 -   IS 'FLAGS=A-IU-^DATATYPE=NUMBER^PROMPT=P6 Value^';
  54.234 -COMMENT ON COLUMN &VIEW..p7_key
  54.235 -   IS 'FLAGS=A-IU-^DATATYPE=STRING(10)^PROMPT=P7 Key^';
  54.236 -COMMENT ON COLUMN &VIEW..p7_value
  54.237 -   IS 'FLAGS=A-IU-^DATATYPE=NUMBER^PROMPT=P7 Value^';
  54.238 -COMMENT ON COLUMN &VIEW..p8_key
  54.239 -   IS 'FLAGS=A-IU-^DATATYPE=STRING(10)^PROMPT=P8 Key^';
  54.240 -COMMENT ON COLUMN &VIEW..p8_value
  54.241 -   IS 'FLAGS=A-IU-^DATATYPE=NUMBER^PROMPT=P8 Value^';
  54.242 -COMMENT ON COLUMN &VIEW..p9_key
  54.243 -   IS 'FLAGS=A-IU-^DATATYPE=STRING(10)^PROMPT=P9 Key^';
  54.244 -COMMENT ON COLUMN &VIEW..p9_value
  54.245 -   IS 'FLAGS=A-IU-^DATATYPE=NUMBER^PROMPT=P9 Value^';
  54.246 -COMMENT ON COLUMN &VIEW..p10_key
  54.247 -   IS 'FLAGS=A-IU-^DATATYPE=STRING(10)^PROMPT=P10 Key^';
  54.248 -COMMENT ON COLUMN &VIEW..p10_value
  54.249 -   IS 'FLAGS=A-IU-^DATATYPE=NUMBER^PROMPT=P10 Value^';
  54.250 -COMMENT ON COLUMN &VIEW..p11_key
  54.251 -   IS 'FLAGS=A-IU-^DATATYPE=STRING(10)^PROMPT=P11 Key^';
  54.252 -COMMENT ON COLUMN &VIEW..p11_value
  54.253 -   IS 'FLAGS=A-IU-^DATATYPE=NUMBER^PROMPT=P11 Value^';
  54.254 -COMMENT ON COLUMN &VIEW..p12_key
  54.255 -   IS 'FLAGS=A-IU-^DATATYPE=STRING(10)^PROMPT=P12 Key^';
  54.256 -COMMENT ON COLUMN &VIEW..p12_value
  54.257 -   IS 'FLAGS=A-IU-^DATATYPE=NUMBER^PROMPT=P12 Value^';
  54.258 -COMMENT ON COLUMN &VIEW..action
  54.259 -   IS 'FLAGS=AMIUL^DATATYPE=STRING^PROMPT=Action^';
  54.260 -COMMENT ON COLUMN &VIEW..mea_state_change_date
  54.261 -   IS 'FLAGS=A-IU-^DATATYPE=DATE/DATE^PROMPT=Mea State Change Date^';
  54.262 -COMMENT ON COLUMN &VIEW..budget_version
  54.263 -   IS 'FLAGS=A-IUL^DATATYPE=STRING(10)^PROMPT=Budget Version^';
  54.264 -
  54.265 -
  54.266 -PROMPT Creating &VIEW2 view
  54.267 -
  54.268 -CREATE OR REPLACE FORCE VIEW &VIEW2 AS
  54.269 -SELECT a.environment                    environment,
  54.270 -       a.scorecard                      scorecard,
  54.271 -       a.year                           year,
  54.272 -       a.version                        version,
  54.273 -       a.scorecard_object               scorecard_object,
  54.274 -       a.object_type                    object_type,
  54.275 -       DECODE(c.decimal_places,NULL,a.year_value/TO_NUMBER(c.measure_format),ROUND(a.year_value/TO_NUMBER(c.measure_format), c.decimal_places))  year_value,
  54.276 -       a.p1_key                         p1_key,
  54.277 -       DECODE(c.decimal_places,NULL,a.p1_value/TO_NUMBER(c.measure_format),ROUND(a.p1_value/TO_NUMBER(c.measure_format), c.decimal_places))  p1_value,
  54.278 -       a.p2_key                         p2_key,
  54.279 -       DECODE(c.decimal_places,NULL,a.p2_value/TO_NUMBER(c.measure_format),ROUND(a.p2_value/TO_NUMBER(c.measure_format), c.decimal_places))  p2_value,
  54.280 -       a.p3_key                         p3_key,
  54.281 -       DECODE(c.decimal_places,NULL,a.p3_value/TO_NUMBER(c.measure_format),ROUND(a.p3_value/TO_NUMBER(c.measure_format), c.decimal_places))  p3_value,
  54.282 -       a.p4_key                         p4_key,
  54.283 -       DECODE(c.decimal_places,NULL,a.p4_value/TO_NUMBER(c.measure_format),ROUND(a.p4_value/TO_NUMBER(c.measure_format), c.decimal_places))  p4_value,
  54.284 -       a.p5_key                         p5_key,
  54.285 -       DECODE(c.decimal_places,NULL,a.p5_value/TO_NUMBER(c.measure_format),ROUND(a.p5_value/TO_NUMBER(c.measure_format), c.decimal_places))  p5_value,
  54.286 -       a.p6_key                         p6_key,
  54.287 -       DECODE(c.decimal_places,NULL,a.p6_value/TO_NUMBER(c.measure_format),ROUND(a.p6_value/TO_NUMBER(c.measure_format), c.decimal_places))  p6_value,
  54.288 -       a.p7_key                         p7_key,
  54.289 -       DECODE(c.decimal_places,NULL,a.p7_value/TO_NUMBER(c.measure_format),ROUND(a.p7_value/TO_NUMBER(c.measure_format), c.decimal_places))  p7_value,
  54.290 -       a.p8_key                         p8_key,
  54.291 -       DECODE(c.decimal_places,NULL,a.p8_value/TO_NUMBER(c.measure_format),ROUND(a.p8_value/TO_NUMBER(c.measure_format), c.decimal_places))  p8_value,
  54.292 -       a.p9_key                         p9_key,
  54.293 -       DECODE(c.decimal_places,NULL,a.p9_value/TO_NUMBER(c.measure_format),ROUND(a.p9_value/TO_NUMBER(c.measure_format), c.decimal_places))  p9_value,
  54.294 -       a.p10_key                        p10_key,
  54.295 -       DECODE(c.decimal_places,NULL,a.p10_value/TO_NUMBER(c.measure_format),ROUND(a.p10_value/TO_NUMBER(c.measure_format), c.decimal_places))  p10_value,
  54.296 -       a.p11_key                        p11_key,
  54.297 -       DECODE(c.decimal_places,NULL,a.p11_value/TO_NUMBER(c.measure_format),ROUND(a.p11_value/TO_NUMBER(c.measure_format), c.decimal_places))  p11_value,
  54.298 -       a.p12_key                        p12_key,
  54.299 -       DECODE(c.decimal_places,NULL,a.p12_value/TO_NUMBER(c.measure_format),ROUND(a.p12_value/TO_NUMBER(c.measure_format), c.decimal_places))  p12_value,
  54.300 -       a.action                         action,
  54.301 -       a.rowid                          objid,
  54.302 -       ltrim(lpad(to_char(a.rowversion,'YYYYMMDDHH24MISS'),2000))   objversion
  54.303 -FROM   scorecard_input_value_tab a, measure_version_tab b, scorecard_measure_tab c
  54.304 -WHERE  a.environment = b.environment
  54.305 -AND    a.version = b.version
  54.306 -AND    b.rowstate = 'Open'
  54.307 -AND    a.object_type = 'MEASURE'
  54.308 -AND    a.scorecard_object = c.measure
  54.309 -WITH   read only;
  54.310 -
  54.311 -COMMENT ON TABLE &VIEW2
  54.312 -   IS 'LU=&LU^PROMPT=Scorecard Input Value^MODULE=&MODULE^';
  54.313 -
  54.314 -COMMENT ON COLUMN &VIEW2..environment
  54.315 -   IS 'FLAGS=KMIU-^DATATYPE=STRING(10)^PROMPT=Environment^REF=ScorecardEnvironment^';
  54.316 -COMMENT ON COLUMN &VIEW2..scorecard
  54.317 -   IS 'FLAGS=KMIU-^DATATYPE=STRING(10)^PROMPT=Scorecard^REF=Scorecard(environment)^';
  54.318 -COMMENT ON COLUMN &VIEW2..year
  54.319 -   IS 'FLAGS=KMIU-^DATATYPE=STRING(20)^PROMPT=Year^REF=EnvironmentYear(environment)^';
  54.320 -COMMENT ON COLUMN &VIEW2..version
  54.321 -   IS 'FLAGS=KMI-L^DATATYPE=STRING(20)^PROMPT=Version^';
  54.322 -COMMENT ON COLUMN &VIEW2..scorecard_object
  54.323 -   IS 'FLAGS=KMIU-^DATATYPE=STRING(10)^PROMPT=Scorecard Object^';
  54.324 -COMMENT ON COLUMN &VIEW2..object_type
  54.325 -   IS 'FLAGS=AMIU-^DATATYPE=STRING(10)^PROMPT=Object Type^';
  54.326 -COMMENT ON COLUMN &VIEW2..year_value
  54.327 -   IS 'FLAGS=A-IU-^DATATYPE=NUMBER^PROMPT=Year Value^';
  54.328 -COMMENT ON COLUMN &VIEW2..p1_key
  54.329 -   IS 'FLAGS=A-IU-^DATATYPE=STRING(10)^PROMPT=P1 Key^';
  54.330 -COMMENT ON COLUMN &VIEW2..p1_value
  54.331 -   IS 'FLAGS=A-IU-^DATATYPE=NUMBER^PROMPT=P1 Value^';
  54.332 -COMMENT ON COLUMN &VIEW2..p2_key
  54.333 -   IS 'FLAGS=A-IU-^DATATYPE=STRING(10)^PROMPT=P2 Key^';
  54.334 -COMMENT ON COLUMN &VIEW2..p2_value
  54.335 -   IS 'FLAGS=A-IU-^DATATYPE=NUMBER^PROMPT=P2 Value^';
  54.336 -COMMENT ON COLUMN &VIEW2..p3_key
  54.337 -   IS 'FLAGS=A-IU-^DATATYPE=STRING(10)^PROMPT=P3 Key^';
  54.338 -COMMENT ON COLUMN &VIEW2..p3_value
  54.339 -   IS 'FLAGS=A-IU-^DATATYPE=NUMBER^PROMPT=P3 Value^';
  54.340 -COMMENT ON COLUMN &VIEW2..p4_key
  54.341 -   IS 'FLAGS=A-IU-^DATATYPE=STRING(10)^PROMPT=P4 Key^';
  54.342 -COMMENT ON COLUMN &VIEW2..p4_value
  54.343 -   IS 'FLAGS=A-IU-^DATATYPE=NUMBER^PROMPT=P4 Value^';
  54.344 -COMMENT ON COLUMN &VIEW2..p5_key
  54.345 -   IS 'FLAGS=A-IU-^DATATYPE=STRING(10)^PROMPT=P5 Key^';
  54.346 -COMMENT ON COLUMN &VIEW2..p5_value
  54.347 -   IS 'FLAGS=A-IU-^DATATYPE=NUMBER^PROMPT=P5 Value^';
  54.348 -COMMENT ON COLUMN &VIEW2..p6_key
  54.349 -   IS 'FLAGS=A-IU-^DATATYPE=STRING(10)^PROMPT=P6 Key^';
  54.350 -COMMENT ON COLUMN &VIEW2..p6_value
  54.351 -   IS 'FLAGS=A-IU-^DATATYPE=NUMBER^PROMPT=P6 Value^';
  54.352 -COMMENT ON COLUMN &VIEW2..p7_key
  54.353 -   IS 'FLAGS=A-IU-^DATATYPE=STRING(10)^PROMPT=P7 Key^';
  54.354 -COMMENT ON COLUMN &VIEW2..p7_value
  54.355 -   IS 'FLAGS=A-IU-^DATATYPE=NUMBER^PROMPT=P7 Value^';
  54.356 -COMMENT ON COLUMN &VIEW2..p8_key
  54.357 -   IS 'FLAGS=A-IU-^DATATYPE=STRING(10)^PROMPT=P8 Key^';
  54.358 -COMMENT ON COLUMN &VIEW2..p8_value
  54.359 -   IS 'FLAGS=A-IU-^DATATYPE=NUMBER^PROMPT=P8 Value^';
  54.360 -COMMENT ON COLUMN &VIEW2..p9_key
  54.361 -   IS 'FLAGS=A-IU-^DATATYPE=STRING(10)^PROMPT=P9 Key^';
  54.362 -COMMENT ON COLUMN &VIEW2..p9_value
  54.363 -   IS 'FLAGS=A-IU-^DATATYPE=NUMBER^PROMPT=P9 Value^';
  54.364 -COMMENT ON COLUMN &VIEW2..p10_key
  54.365 -   IS 'FLAGS=A-IU-^DATATYPE=STRING(10)^PROMPT=P10 Key^';
  54.366 -COMMENT ON COLUMN &VIEW2..p10_value
  54.367 -   IS 'FLAGS=A-IU-^DATATYPE=NUMBER^PROMPT=P10 Value^';
  54.368 -COMMENT ON COLUMN &VIEW2..p11_key
  54.369 -   IS 'FLAGS=A-IU-^DATATYPE=STRING(10)^PROMPT=P11 Key^';
  54.370 -COMMENT ON COLUMN &VIEW2..p11_value
  54.371 -   IS 'FLAGS=A-IU-^DATATYPE=NUMBER^PROMPT=P11 Value^';
  54.372 -COMMENT ON COLUMN &VIEW2..p12_key
  54.373 -   IS 'FLAGS=A-IU-^DATATYPE=STRING(10)^PROMPT=P12 Key^';
  54.374 -COMMENT ON COLUMN &VIEW2..p12_value
  54.375 -   IS 'FLAGS=A-IU-^DATATYPE=NUMBER^PROMPT=P12 Value^';
  54.376 -COMMENT ON COLUMN &VIEW2..action
  54.377 -   IS 'FLAGS=AMIUL^DATATYPE=STRING^PROMPT=Action^';
  54.378 -
  54.379 -
  54.380 -
  54.381 -PROMPT Creating &VIEW3 view
  54.382 -
  54.383 -CREATE OR REPLACE FORCE VIEW &VIEW3 AS
  54.384 -SELECT siv.environment                environment,
  54.385 -       siv.scorecard                  scorecard,
  54.386 -       year                           year,
  54.387 -       version                        version,
  54.388 -       scorecard_object               scorecard_object,
  54.389 -       object_type                    object_type,
  54.390 -       DECODE(sm.decimal_places,NULL  ,siv.year_value/TO_NUMBER(sm.measure_format),ROUND(siv.year_value/TO_NUMBER(sm.measure_format), sm.decimal_places))  year_value,
  54.391 -       p1_key                         p1_key,
  54.392 -       DECODE(sm.decimal_places,NULL  ,siv.p1_value/TO_NUMBER(sm.measure_format)  ,ROUND(siv.p1_value/TO_NUMBER(sm.measure_format)  , sm.decimal_places))  p1_value,
  54.393 -       p2_key                         p2_key,
  54.394 -       DECODE(sm.decimal_places,NULL  ,siv.p2_value/TO_NUMBER(sm.measure_format)  ,ROUND(siv.p2_value/TO_NUMBER(sm.measure_format)  , sm.decimal_places))  p2_value,
  54.395 -       p3_key                         p3_key,
  54.396 -       DECODE(sm.decimal_places,NULL  ,siv.p3_value/TO_NUMBER(sm.measure_format)  ,ROUND(siv.p3_value/TO_NUMBER(sm.measure_format)  , sm.decimal_places))  p3_value,
  54.397 -       p4_key                         p4_key,
  54.398 -       DECODE(sm.decimal_places,NULL  ,siv.p4_value/TO_NUMBER(sm.measure_format)  ,ROUND(siv.p4_value/TO_NUMBER(sm.measure_format)  , sm.decimal_places))  p4_value,
  54.399 -       p5_key                         p5_key,
  54.400 -       DECODE(sm.decimal_places,NULL  ,siv.p5_value/TO_NUMBER(sm.measure_format)  ,ROUND(siv.p5_value/TO_NUMBER(sm.measure_format)  , sm.decimal_places))  p5_value,
  54.401 -       p6_key                         p6_key,
  54.402 -       DECODE(sm.decimal_places,NULL  ,siv.p6_value/TO_NUMBER(sm.measure_format)  ,ROUND(siv.p6_value/TO_NUMBER(sm.measure_format)  , sm.decimal_places))  p6_value,
  54.403 -       p7_key                         p7_key,
  54.404 -       DECODE(sm.decimal_places,NULL  ,siv.p7_value/TO_NUMBER(sm.measure_format)  ,ROUND(siv.p7_value/TO_NUMBER(sm.measure_format)  , sm.decimal_places))  p7_value,
  54.405 -       p8_key                         p8_key,
  54.406 -       DECODE(sm.decimal_places,NULL  ,siv.p8_value/TO_NUMBER(sm.measure_format)  ,ROUND(siv.p8_value/TO_NUMBER(sm.measure_format)  , sm.decimal_places))  p8_value,
  54.407 -       p9_key                         p9_key,
  54.408 -       DECODE(sm.decimal_places,NULL  ,siv.p9_value/TO_NUMBER(sm.measure_format)  ,ROUND(siv.p9_value/TO_NUMBER(sm.measure_format)  , sm.decimal_places))  p9_value,
  54.409 -       p10_key                        p10_key,
  54.410 -       DECODE(sm.decimal_places,NULL  ,siv.p10_value/TO_NUMBER(sm.measure_format) ,ROUND(siv.p10_value/TO_NUMBER(sm.measure_format) , sm.decimal_places))  p10_value,
  54.411 -       p11_key                        p11_key,
  54.412 -       DECODE(sm.decimal_places,NULL  ,siv.p11_value/TO_NUMBER(sm.measure_format) ,ROUND(siv.p11_value/TO_NUMBER(sm.measure_format) , sm.decimal_places))  p11_value,
  54.413 -       p12_key                        p12_key,
  54.414 -       DECODE(sm.decimal_places,NULL  ,siv.p12_value/TO_NUMBER(sm.measure_format) ,ROUND(siv.p12_value/TO_NUMBER(sm.measure_format) , sm.decimal_places))  p12_value,
  54.415 -       siv.action                     action,
  54.416 -       ss.plan_seq_no                 plan_seq_no,
  54.417 -       Budget_Process_Type_API.Encode(Measure_Version_API.Get_Budget_Process_Type(version,
  54.418 -                                                                                  siv.environment))
  54.419 -                                      budget_process_type,
  54.420 -       DECODE(sm.measure_format,'1',sm.description,sm.description ||' ('||sm.measure_format||' )' )                                            scorecard_object_desc,
  54.421 -       siv.rowid                      objid,
  54.422 -       ltrim(lpad(to_char(siv.rowversion,'YYYYMMDDHH24MISS'),2000)) objversion
  54.423 -FROM   scorecard_input_value_tab siv, scorecard_measure_tab sm, scorecard_structure_tab ss
  54.424 -WHERE  siv.scorecard_object = sm.measure
  54.425 -AND    siv.environment      =  ss.environment
  54.426 -AND    siv.scorecard        =  ss.scorecard
  54.427 -AND    siv.object_type      =  ss.child_level_type
  54.428 -AND    siv.scorecard_object =  ss.level_id
  54.429 -WITH   read only;
  54.430 -
  54.431 -COMMENT ON TABLE &VIEW3
  54.432 -   IS 'LU=&LU^PROMPT=Scorecard Input Value^MODULE=&MODULE^';
  54.433 -
  54.434 -COMMENT ON COLUMN &VIEW3..environment
  54.435 -   IS 'FLAGS=KMIU-^DATATYPE=STRING(10)^PROMPT=Environment^REF=ScorecardEnvironment^';
  54.436 -COMMENT ON COLUMN &VIEW3..scorecard
  54.437 -   IS 'FLAGS=KMIU-^DATATYPE=STRING(10)^PROMPT=Scorecard^REF=Scorecard(environment)^';
  54.438 -COMMENT ON COLUMN &VIEW3..year
  54.439 -   IS 'FLAGS=KMIU-^DATATYPE=STRING(20)^PROMPT=Year^REF=EnvironmentYear(environment)^';
  54.440 -COMMENT ON COLUMN &VIEW3..version
  54.441 -   IS 'FLAGS=KMI-L^DATATYPE=STRING(20)^PROMPT=Version^';
  54.442 -COMMENT ON COLUMN &VIEW3..scorecard_object
  54.443 -   IS 'FLAGS=KMIU-^DATATYPE=STRING(10)^PROMPT=Scorecard Object^';
  54.444 -COMMENT ON COLUMN &VIEW3..object_type
  54.445 -   IS 'FLAGS=AMIU-^DATATYPE=STRING(10)^PROMPT=Object Type^';
  54.446 -COMMENT ON COLUMN &VIEW3..year_value
  54.447 -   IS 'FLAGS=A-IU-^DATATYPE=NUMBER^PROMPT=Year Value^';
  54.448 -COMMENT ON COLUMN &VIEW3..p1_key
  54.449 -   IS 'FLAGS=A-IU-^DATATYPE=STRING(10)^PROMPT=P1 Key^';
  54.450 -COMMENT ON COLUMN &VIEW3..p1_value
  54.451 -   IS 'FLAGS=A-IU-^DATATYPE=NUMBER^PROMPT=P1 Value^';
  54.452 -COMMENT ON COLUMN &VIEW3..p2_key
  54.453 -   IS 'FLAGS=A-IU-^DATATYPE=STRING(10)^PROMPT=P2 Key^';
  54.454 -COMMENT ON COLUMN &VIEW3..p2_value
  54.455 -   IS 'FLAGS=A-IU-^DATATYPE=NUMBER^PROMPT=P2 Value^';
  54.456 -COMMENT ON COLUMN &VIEW3..p3_key
  54.457 -   IS 'FLAGS=A-IU-^DATATYPE=STRING(10)^PROMPT=P3 Key^';
  54.458 -COMMENT ON COLUMN &VIEW3..p3_value
  54.459 -   IS 'FLAGS=A-IU-^DATATYPE=NUMBER^PROMPT=P3 Value^';
  54.460 -COMMENT ON COLUMN &VIEW3..p4_key
  54.461 -   IS 'FLAGS=A-IU-^DATATYPE=STRING(10)^PROMPT=P4 Key^';
  54.462 -COMMENT ON COLUMN &VIEW3..p4_value
  54.463 -   IS 'FLAGS=A-IU-^DATATYPE=NUMBER^PROMPT=P4 Value^';
  54.464 -COMMENT ON COLUMN &VIEW3..p5_key
  54.465 -   IS 'FLAGS=A-IU-^DATATYPE=STRING(10)^PROMPT=P5 Key^';
  54.466 -COMMENT ON COLUMN &VIEW3..p5_value
  54.467 -   IS 'FLAGS=A-IU-^DATATYPE=NUMBER^PROMPT=P5 Value^';
  54.468 -COMMENT ON COLUMN &VIEW3..p6_key
  54.469 -   IS 'FLAGS=A-IU-^DATATYPE=STRING(10)^PROMPT=P6 Key^';
  54.470 -COMMENT ON COLUMN &VIEW3..p6_value
  54.471 -   IS 'FLAGS=A-IU-^DATATYPE=NUMBER^PROMPT=P6 Value^';
  54.472 -COMMENT ON COLUMN &VIEW3..p7_key
  54.473 -   IS 'FLAGS=A-IU-^DATATYPE=STRING(10)^PROMPT=P7 Key^';
  54.474 -COMMENT ON COLUMN &VIEW3..p7_value
  54.475 -   IS 'FLAGS=A-IU-^DATATYPE=NUMBER^PROMPT=P7 Value^';
  54.476 -COMMENT ON COLUMN &VIEW3..p8_key
  54.477 -   IS 'FLAGS=A-IU-^DATATYPE=STRING(10)^PROMPT=P8 Key^';
  54.478 -COMMENT ON COLUMN &VIEW3..p8_value
  54.479 -   IS 'FLAGS=A-IU-^DATATYPE=NUMBER^PROMPT=P8 Value^';
  54.480 -COMMENT ON COLUMN &VIEW3..p9_key
  54.481 -   IS 'FLAGS=A-IU-^DATATYPE=STRING(10)^PROMPT=P9 Key^';
  54.482 -COMMENT ON COLUMN &VIEW3..p9_value
  54.483 -   IS 'FLAGS=A-IU-^DATATYPE=NUMBER^PROMPT=P9 Value^';
  54.484 -COMMENT ON COLUMN &VIEW3..p10_key
  54.485 -   IS 'FLAGS=A-IU-^DATATYPE=STRING(10)^PROMPT=P10 Key^';
  54.486 -COMMENT ON COLUMN &VIEW3..p10_value
  54.487 -   IS 'FLAGS=A-IU-^DATATYPE=NUMBER^PROMPT=P10 Value^';
  54.488 -COMMENT ON COLUMN &VIEW3..p11_key
  54.489 -   IS 'FLAGS=A-IU-^DATATYPE=STRING(10)^PROMPT=P11 Key^';
  54.490 -COMMENT ON COLUMN &VIEW3..p11_value
  54.491 -   IS 'FLAGS=A-IU-^DATATYPE=NUMBER^PROMPT=P11 Value^';
  54.492 -COMMENT ON COLUMN &VIEW3..p12_key
  54.493 -   IS 'FLAGS=A-IU-^DATATYPE=STRING(10)^PROMPT=P12 Key^';
  54.494 -COMMENT ON COLUMN &VIEW3..p12_value
  54.495 -   IS 'FLAGS=A-IU-^DATATYPE=NUMBER^PROMPT=P12 Value^';
  54.496 -COMMENT ON COLUMN &VIEW3..action
  54.497 -   IS 'FLAGS=AMIUL^DATATYPE=STRING^PROMPT=Action^';
  54.498 -COMMENT ON COLUMN &VIEW3..plan_seq_no
  54.499 -   IS 'FLAGS=A---L^DATATYPE=STRING^PROMPT=Plan seq no^';
  54.500 -COMMENT ON COLUMN &VIEW3..budget_process_type
  54.501 -   IS 'FLAGS=A----^DATATYPE=STRING(10)^PROMPT=Budget Process Type^';
  54.502 -COMMENT ON COLUMN &VIEW3..scorecard_object_desc
  54.503 -   IS 'FLAGS=A----^DATATYPE=STRING(40)^PROMPT=Level Description^';
  54.504 -
  54.505 ---THIS VIEW IS USED AS A BASE FOR THE VIEW5 WHICH IS USED TO DISPLAY BUDGET REQUIREMENTS VS. TARGETS.
  54.506 -PROMPT Creating &VIEW4 view
  54.507 -
  54.508 -CREATE OR REPLACE FORCE VIEW &VIEW4 AS
  54.509 -SELECT environment                    environment,
  54.510 -       scorecard                      scorecard,
  54.511 -       year                           year,
  54.512 -       version                        version,
  54.513 -       scorecard_object               measure,
  54.514 -       p1_key                         period,
  54.515 -       p1_value                       period_value
  54.516 -FROM   scorecard_input_value_tab
  54.517 -WHERE  p1_key IS NOT NULL
  54.518 -UNION
  54.519 -SELECT environment                    environment,
  54.520 -       scorecard                      scorecard,
  54.521 -       year                           year,
  54.522 -       version                        version,
  54.523 -       scorecard_object               scorecard_object,
  54.524 -       p2_key                         period,
  54.525 -       p2_value                       period_value
  54.526 -FROM   scorecard_input_value_tab
  54.527 -WHERE  p2_key IS NOT NULL
  54.528 -UNION
  54.529 -SELECT environment                    environment,
  54.530 -       scorecard                      scorecard,
  54.531 -       year                           year,
  54.532 -       version                        version,
  54.533 -       scorecard_object               measure,
  54.534 -       p3_key                         period,
  54.535 -       p3_value                       period_value
  54.536 -FROM   scorecard_input_value_tab
  54.537 -WHERE  p3_key IS NOT NULL
  54.538 -UNION
  54.539 -SELECT environment                    environment,
  54.540 -       scorecard                      scorecard,
  54.541 -       year                           year,
  54.542 -       version                        version,
  54.543 -       scorecard_object               measure,
  54.544 -       p4_key                         period,
  54.545 -       p4_value                       period_value
  54.546 -FROM   scorecard_input_value_tab
  54.547 -WHERE  p4_key IS NOT NULL
  54.548 -UNION
  54.549 -SELECT environment                    environment,
  54.550 -       scorecard                      scorecard,
  54.551 -       year                           year,
  54.552 -       version                        version,
  54.553 -       scorecard_object               measure,
  54.554 -       p5_key                         period,
  54.555 -       p5_value                       period_value
  54.556 -FROM   scorecard_input_value_tab
  54.557 -WHERE  p5_key IS NOT NULL
  54.558 -UNION
  54.559 -SELECT environment                    environment,
  54.560 -       scorecard                      scorecard,
  54.561 -       year                           year,
  54.562 -       version                        version,
  54.563 -       scorecard_object               measure,
  54.564 -       p6_key                         period,
  54.565 -       p6_value                       period_value
  54.566 -FROM   scorecard_input_value_tab
  54.567 -WHERE  p6_key IS NOT NULL
  54.568 -UNION
  54.569 -SELECT environment                    environment,
  54.570 -       scorecard                      scorecard,
  54.571 -       year                           year,
  54.572 -       version                        version,
  54.573 -       scorecard_object               measure,
  54.574 -       p7_key                         period,
  54.575 -       p7_value                       period_value
  54.576 -FROM   scorecard_input_value_tab
  54.577 -WHERE  p7_key IS NOT NULL
  54.578 -UNION
  54.579 -SELECT environment                    environment,
  54.580 -       scorecard                      scorecard,
  54.581 -       year                           year,
  54.582 -       version                        version,
  54.583 -       scorecard_object               measure,
  54.584 -       p8_key                         period,
  54.585 -       p8_value                       period_value
  54.586 -FROM   scorecard_input_value_tab
  54.587 -WHERE  p8_key IS NOT NULL
  54.588 -UNION
  54.589 -SELECT environment                    environment,
  54.590 -       scorecard                      scorecard,
  54.591 -       year                           year,
  54.592 -       version                        version,
  54.593 -       scorecard_object               measure,
  54.594 -       p9_key                         period,
  54.595 -       p9_value                       period_value
  54.596 -FROM   scorecard_input_value_tab
  54.597 -WHERE  p9_key IS NOT NULL
  54.598 -UNION
  54.599 -SELECT environment                    environment,
  54.600 -       scorecard                      scorecard,
  54.601 -       year                           year,
  54.602 -       version                        version,
  54.603 -       scorecard_object               measure,
  54.604 -       p10_key                        period,
  54.605 -       p10_value                      period_value
  54.606 -FROM   scorecard_input_value_tab
  54.607 -WHERE  p10_key IS NOT NULL
  54.608 -UNION
  54.609 -SELECT environment                    environment,
  54.610 -       scorecard                      scorecard,
  54.611 -       year                           year,
  54.612 -       version                        version,
  54.613 -       scorecard_object               measure,
  54.614 -       p11_key                        period,
  54.615 -       p11_value                      period_value
  54.616 -FROM   scorecard_input_value_tab
  54.617 -WHERE  p11_key IS NOT NULL
  54.618 -UNION
  54.619 -SELECT environment                    environment,
  54.620 -       scorecard                      scorecard,
  54.621 -       year                           year,
  54.622 -       version                        version,
  54.623 -       scorecard_object               measure,
  54.624 -       p12_key                        period,
  54.625 -       p12_value                      period_value
  54.626 -FROM   scorecard_input_value_tab
  54.627 -WHERE  p12_key IS NOT NULL
  54.628 -WITH   read only;
  54.629 -
  54.630 -COMMENT ON TABLE &VIEW4
  54.631 -   IS 'LU=&LU^PROMPT=View Budget Requirements/Targets[BASE]^MODULE=&MODULE^';
  54.632 -
  54.633 -
  54.634 ---THIS VIEW IS USED TO DISPLAY BUDGET REQUIREMENTS VS. TARGETS.[Client is BudgetRequirementsTargets.java]
  54.635 -PROMPT Creating &VIEW5 view
  54.636 --- Bug 63415, begin, Added another condition to where clause of the view
  54.637 -CREATE OR REPLACE FORCE VIEW &VIEW5 AS
  54.638 -SELECT t1.environment                    environment,
  54.639 -       t1.scorecard                      scorecard,
  54.640 -       t1.year                           year,
  54.641 -       t1.version                        version,
  54.642 -       t1.measure                        measure,
  54.643 -       t1.period                         period,
  54.644 -       t1.period_value/TO_NUMBER(t5.measure_format)  planned_value,
  54.645 -       t2.period_value/TO_NUMBER(t5.measure_format)  target_value
  54.646 -FROM   &VIEW4 t1,
  54.647 -       &VIEW4 t2,
  54.648 -       measure_version_tab t3,
  54.649 -       measure_version_tab t4,
  54.650 -       scorecard_measure_tab t5
  54.651 -WHERE  t1.environment          = t2.environment
  54.652 -AND    t1.scorecard            = t2.scorecard
  54.653 -AND    t1.year                 = t2.YEAR
  54.654 -AND    t5.measure              = t2.measure
  54.655 -AND    t1.measure              = t2.measure
  54.656 -AND    t1.period               = t2.period
  54.657 -AND    t1.environment          = t3.environment
  54.658 -AND    t1.version              = t3.version
  54.659 -AND    t2.environment          = t4.environment
  54.660 -AND    t2.version              = t4.version
  54.661 -AND    t3.budget_process_type  = 'BUDPLAN'
  54.662 -AND    t4.budget_process_type  = 'TARGET'
  54.663 -AND    ((t1.measure IN (SELECT measure
  54.664 -                       FROM   measure_role_access_tab
  54.665 -                       WHERE  role IN (SELECT oracle_role
  54.666 -                                       FROM   fnd_user_role_runtime
  54.667 -                                       WHERE  identity  = (SELECT fnd_user
  54.668 -                                                           FROM   fnd_session))))
  54.669 -        OR t1.measure IN (SELECT measure
  54.670 -                          FROM   measure_user_access_tab
  54.671 -                          WHERE  identity = (SELECT fnd_user
  54.672 -                                             FROM   fnd_session))
  54.673 -        OR EXISTS (SELECT 1
  54.674 -                  FROM  BP_ADMINISTRATOR_TAB
  54.675 -                  WHERE identity = (SELECT fnd_user
  54.676 -                                    FROM   fnd_session)))
  54.677 -AND   (t1.scorecard IN (SELECT scorecard
  54.678 -                        FROM   scorecard_user_access_tab
  54.679 -                        WHERE  identity = (SELECT fnd_user
  54.680 -                                           FROM   fnd_session)
  54.681 -                        AND environment = t1.environment
  54.682 -                        AND scorecard   = t1.scorecard)
  54.683 -       OR t1.scorecard IN (SELECT scorecard
  54.684 -                           FROM   scorecard_role_access_tab
  54.685 -                           WHERE  environment = t1.environment
  54.686 -                           AND    scorecard   = t1.scorecard
  54.687 -                           AND    role IN (SELECT oracle_role
  54.688 -                                           FROM   fnd_user_role_runtime
  54.689 -                                           WHERE  identity = (SELECT fnd_user
  54.690 -                                                              FROM   fnd_session)))
  54.691 -       OR EXISTS (SELECT 1
  54.692 -                  FROM BP_ADMINISTRATOR_TAB
  54.693 -                  WHERE identity = (SELECT fnd_user
  54.694 -                                    FROM   fnd_session)))
  54.695 -WITH   read only;
  54.696 -
  54.697 -COMMENT ON TABLE &VIEW5
  54.698 -   IS 'LU=&LU^PROMPT=View Budget Requirements/Targets^MODULE=&MODULE^';
  54.699 -
  54.700 -COMMENT ON COLUMN &VIEW5..environment
  54.701 -   IS 'FLAGS=KMIU-^DATATYPE=STRING(10)^PROMPT=Environment^';
  54.702 -COMMENT ON COLUMN &VIEW5..scorecard
  54.703 -   IS 'FLAGS=KMIU-^DATATYPE=STRING(10)^PROMPT=Scorecard^';
  54.704 -COMMENT ON COLUMN &VIEW5..year
  54.705 -   IS 'FLAGS=KMIU-^DATATYPE=STRING(20)^PROMPT=Year^';
  54.706 -COMMENT ON COLUMN &VIEW5..version
  54.707 -   IS 'FLAGS=KMI-L^DATATYPE=STRING(20)^PROMPT=Version^';
  54.708 -COMMENT ON COLUMN &VIEW5..measure
  54.709 -   IS 'FLAGS=KMIU-^DATATYPE=STRING(10)^PROMPT=Measure^';
  54.710 -COMMENT ON COLUMN &VIEW5..period
  54.711 -   IS 'FLAGS=A-IU-^DATATYPE=STRING(10)^PROMPT=Period^';
  54.712 -COMMENT ON COLUMN &VIEW5..planned_value
  54.713 -   IS 'FLAGS=A-IU-^DATATYPE=NUMBER^PROMPT=Planned Value^';
  54.714 -COMMENT ON COLUMN &VIEW5..target_value
  54.715 -   IS 'FLAGS=A-IU-^DATATYPE=NUMBER^PROMPT=Target Value^';
  54.716 -
  54.717 --- Bug 63415, end
  54.718 -
  54.719 -
  54.720 -
  54.721 --- Bug 63415, end
  54.722 -
  54.723 ------------------------------------------------------------------------------
  54.724 --------------------- PACKAGES FOR METHODS -----------------------------------
  54.725 ------------------------------------------------------------------------------
  54.726 -
  54.727 -PROMPT Creating &PKG implementation
  54.728 -
  54.729 -CREATE OR REPLACE PACKAGE BODY &PKG IS
  54.730 -
  54.731 ------------------------------------------------------------------------------
  54.732 --------------------- FINITE STATE DECLARATIONS ------------------------------
  54.733 ------------------------------------------------------------------------------
  54.734 -db_state_list_     CONSTANT VARCHAR2(13) := 'Open^Planned^';
  54.735 -client_state_list_ CONSTANT VARCHAR2(13) := 'Open^Planned^';
  54.736 -active_state_list_          VARCHAR2(52) := Language_SYS.Translate_State_(lu_name_, client_state_list_);
  54.737 -state_separator_   CONSTANT VARCHAR2(1)  := Client_SYS.field_separator_;
  54.738 -
  54.739 -bp_installed_      CONSTANT BOOLEAN      := Dictionary_SYS.Component_Is_Installed('BUDPRO');
  54.740 ------------------------------------------------------------------------------
  54.741 --------------------- LU SPECIFIC IMPLEMENTATION METHOD DECLARATIONS ---------
  54.742 ------------------------------------------------------------------------------
  54.743 -
  54.744 -
  54.745 -PROCEDURE Distribute_Input_Values___ (
  54.746 -   environment_ IN VARCHAR2,
  54.747 -   scorecard_ IN VARCHAR2,
  54.748 -   year_ IN VARCHAR2,
  54.749 -   version_ IN VARCHAR2,
  54.750 -   object_type_ IN VARCHAR2,
  54.751 -   period_count_ IN NUMBER,
  54.752 -   scorecard_object_ IN VARCHAR2 );
  54.753 ---PROCHEAD.Start_Publish_Environments___
  54.754 -
  54.755 -
  54.756 -PROCEDURE Object_Planned_Date___ (
  54.757 -   rec_  IN     &TABLE%ROWTYPE,
  54.758 -   attr_ IN OUT VARCHAR2 );
  54.759 -
  54.760 -FUNCTION Find_Column___(
  54.761 -   environment_      IN VARCHAR2,
  54.762 -   scorecard_        IN VARCHAR2,
  54.763 -   year_             IN VARCHAR2,
  54.764 -   version_          IN VARCHAR2,
  54.765 -   scorecard_object_ IN VARCHAR2,
  54.766 -   key_              IN VARCHAR2) RETURN VARCHAR2;
  54.767 ------------------------------------------------------------------------------
  54.768 --------------------- IMPLEMENTATION BASE METHODS ----------------------------
  54.769 ------------------------------------------------------------------------------
  54.770 --- Lock_By_Id___
  54.771 ---    Client-support to lock a specific instance of the logical unit.
  54.772 ---
  54.773 --- Lock_By_Keys___
  54.774 ---    Server support to lock a specific instance of the logical unit.
  54.775 ---
  54.776 --- Get_Object_By_Id___
  54.777 ---    Get LU-record from the database with a specified object identity.
  54.778 ---
  54.779 --- Get_Object_By_Keys___
  54.780 ---    Get LU-record from the database with specified key columns.
  54.781 ---
  54.782 --- Check_Exist___
  54.783 ---    Check if a specific LU-instance already exist in the database.
  54.784 ---
  54.785 --- Get_Id_Version_By_Keys___
  54.786 ---    Get the current OBJID and OBJVERSION for a specific LU-instance.
  54.787 ------------------------------------------------------------------------------
  54.788 -
  54.789 -FUNCTION Lock_By_Id___ (
  54.790 -   objid_      IN  VARCHAR2,
  54.791 -   objversion_ IN  VARCHAR2 ) RETURN &TABLE%ROWTYPE
  54.792 -IS
  54.793 -   row_changed EXCEPTION;
  54.794 -   row_deleted EXCEPTION;
  54.795 -   row_locked  EXCEPTION;
  54.796 -   PRAGMA      exception_init(row_locked, -0054);
  54.797 -   rec_        &TABLE%ROWTYPE;
  54.798 -   dummy_      NUMBER;
  54.799 -   CURSOR lock_control IS
  54.800 -      SELECT *
  54.801 -      FROM   &TABLE
  54.802 -      WHERE  &OBJID = objid_
  54.803 -      AND    &OBJVERSION = objversion_
  54.804 -      FOR UPDATE NOWAIT;
  54.805 -   CURSOR exist_control IS
  54.806 -      SELECT 1
  54.807 -      FROM   &TABLE
  54.808 -      WHERE  &OBJID = objid_;
  54.809 -BEGIN
  54.810 -   OPEN lock_control;
  54.811 -   FETCH lock_control INTO rec_;
  54.812 -   IF (lock_control%FOUND) THEN
  54.813 -      CLOSE lock_control;
  54.814 -      RETURN rec_;
  54.815 -   END IF;
  54.816 -   CLOSE lock_control;
  54.817 -   OPEN exist_control;
  54.818 -   FETCH exist_control INTO dummy_;
  54.819 -   IF (exist_control%FOUND) THEN
  54.820 -      CLOSE exist_control;
  54.821 -      RAISE row_changed;
  54.822 -   ELSE
  54.823 -      CLOSE exist_control;
  54.824 -      RAISE row_deleted;
  54.825 -   END IF;
  54.826 -EXCEPTION
  54.827 -   WHEN row_locked THEN
  54.828 -      Error_SYS.Record_Locked(lu_name_);
  54.829 -   WHEN row_changed THEN
  54.830 -      Error_SYS.Record_Modified(lu_name_);
  54.831 -   WHEN row_deleted THEN
  54.832 -      Error_SYS.Record_Removed(lu_name_);
  54.833 -END Lock_By_Id___;
  54.834 -
  54.835 -FUNCTION Lock_By_Keys___ (
  54.836 -   environment_ IN VARCHAR2,
  54.837 -   scorecard_ IN VARCHAR2,
  54.838 -   year_ IN VARCHAR2,
  54.839 -   version_ IN VARCHAR2,
  54.840 -   scorecard_object_ IN VARCHAR2 ) RETURN &TABLE%ROWTYPE
  54.841 -IS
  54.842 -   row_deleted EXCEPTION;
  54.843 -   rec_        &TABLE%ROWTYPE;
  54.844 -   CURSOR lock_control IS
  54.845 -      SELECT *
  54.846 -      FROM  &TABLE
  54.847 -      WHERE environment = environment_
  54.848 -      AND   scorecard = scorecard_
  54.849 -      AND   year = year_
  54.850 -      AND   version = version_
  54.851 -      AND   scorecard_object = scorecard_object_
  54.852 -      FOR UPDATE;
  54.853 -BEGIN
  54.854 -   OPEN lock_control;
  54.855 -   FETCH lock_control INTO rec_;
  54.856 -   IF (lock_control%FOUND) THEN
  54.857 -      CLOSE lock_control;
  54.858 -      RETURN rec_;
  54.859 -   ELSE
  54.860 -      CLOSE lock_control;
  54.861 -      RAISE row_deleted;
  54.862 -   END IF;
  54.863 -EXCEPTION
  54.864 -   WHEN row_deleted THEN
  54.865 -      Error_SYS.Record_Removed(lu_name_);
  54.866 -END Lock_By_Keys___;
  54.867 -
  54.868 -FUNCTION Get_Object_By_Id___ (
  54.869 -   objid_ IN VARCHAR2 ) RETURN &TABLE%ROWTYPE
  54.870 -IS
  54.871 -   lu_rec_ &TABLE%ROWTYPE;
  54.872 -   CURSOR getrec IS
  54.873 -      SELECT *
  54.874 -      FROM   &TABLE
  54.875 -      WHERE  &OBJID = objid_;
  54.876 -BEGIN
  54.877 -   OPEN getrec;
  54.878 -   FETCH getrec INTO lu_rec_;
  54.879 -   IF (getrec%NOTFOUND) THEN
  54.880 -      CLOSE getrec;
  54.881 -      Error_SYS.Record_Removed(lu_name_);
  54.882 -   END IF;
  54.883 -   CLOSE getrec;
  54.884 -   RETURN(lu_rec_);
  54.885 -END Get_Object_By_Id___;
  54.886 -
  54.887 -
  54.888 -FUNCTION Get_Object_By_Keys___ (
  54.889 -   environment_ IN VARCHAR2,
  54.890 -   scorecard_ IN VARCHAR2,
  54.891 -   year_ IN VARCHAR2,
  54.892 -   version_ IN VARCHAR2,
  54.893 -   scorecard_object_ IN VARCHAR2 ) RETURN &TABLE%ROWTYPE
  54.894 -IS
  54.895 -   lu_rec_ &TABLE%ROWTYPE;
  54.896 -   CURSOR getrec IS
  54.897 -      SELECT *
  54.898 -      FROM  &TABLE
  54.899 -      WHERE environment = environment_
  54.900 -      AND   scorecard = scorecard_
  54.901 -      AND   year = year_
  54.902 -      AND   version = version_
  54.903 -      AND   scorecard_object = scorecard_object_;
  54.904 -BEGIN
  54.905 -   OPEN getrec;
  54.906 -   FETCH getrec INTO lu_rec_;
  54.907 -   CLOSE getrec;
  54.908 -   RETURN(lu_rec_);
  54.909 -END Get_Object_By_Keys___;
  54.910 -
  54.911 -FUNCTION Check_Exist___ (
  54.912 -   environment_ IN VARCHAR2,
  54.913 -   scorecard_ IN VARCHAR2,
  54.914 -   year_ IN VARCHAR2,
  54.915 -   version_ IN VARCHAR2,
  54.916 -   scorecard_object_ IN VARCHAR2 ) RETURN BOOLEAN
  54.917 -IS
  54.918 -   dummy_ NUMBER;
  54.919 -   CURSOR exist_control IS
  54.920 -      SELECT 1
  54.921 -      FROM   &TABLE
  54.922 -      WHERE environment = environment_
  54.923 -      AND   scorecard = scorecard_
  54.924 -      AND   year = year_
  54.925 -      AND   version = version_
  54.926 -      AND   scorecard_object = scorecard_object_;
  54.927 -BEGIN
  54.928 -   OPEN exist_control;
  54.929 -   FETCH exist_control INTO dummy_;
  54.930 -   IF (exist_control%FOUND) THEN
  54.931 -      CLOSE exist_control;
  54.932 -      RETURN(TRUE);
  54.933 -   END IF;
  54.934 -   CLOSE exist_control;
  54.935 -   RETURN(FALSE);
  54.936 -END Check_Exist___;
  54.937 -
  54.938 -PROCEDURE Get_Id_Version_By_Keys___ (
  54.939 -   objid_      IN OUT VARCHAR2,
  54.940 -   objversion_ IN OUT VARCHAR2,
  54.941 -   environment_ IN VARCHAR2,
  54.942 -   scorecard_ IN VARCHAR2,
  54.943 -   year_ IN VARCHAR2,
  54.944 -   version_ IN VARCHAR2,
  54.945 -   scorecard_object_ IN VARCHAR2)
  54.946 -IS
  54.947 -   CURSOR get_version IS
  54.948 -   SELECT &OBJID, &OBJVERSION
  54.949 -      FROM  &TABLE
  54.950 -      WHERE environment = environment_
  54.951 -      AND   scorecard = scorecard_
  54.952 -      AND   year = year_
  54.953 -      AND   version = version_
  54.954 -      AND   scorecard_object = scorecard_object_;
  54.955 -BEGIN
  54.956 -   OPEN get_version;
  54.957 -   FETCH get_version INTO objid_, objversion_;
  54.958 -   CLOSE get_version;
  54.959 -END Get_Id_Version_By_Keys___;
  54.960 -
  54.961 ------------------------------------------------------------------------------
  54.962 --------------------- IMPLEMENTATION FINITE STATE MACHINE --------------------
  54.963 ------------------------------------------------------------------------------
  54.964 --- Finite_State_Set___
  54.965 ---    Updates the finite state indicator for an existing LU-instance.
  54.966 ---
  54.967 --- Finite_State_Machine___
  54.968 ---    Processes an event by:
  54.969 ---    1. Fetching the current state
  54.970 ---    2. Evaluating any conditions for given event at current state
  54.971 ---    3. executing any exit code for the old state
  54.972 ---    4. Performing any action associated with given event
  54.973 ---    5. update the database to the new state
  54.974 ---    6. execute any entry code for the new state
  54.975 ---    7. Executing a state change to the new state
  54.976 ---
  54.977 --- Finite_State_Add_To_Attr___
  54.978 ---    Adds the current state and allowed events to the attribute string.
  54.979 ---
  54.980 --- Finite_State_Init___
  54.981 ---    Sets the initial finite state indicator for an existing LU-instance
  54.982 ---    and processes any automatic events.
  54.983 ------------------------------------------------------------------------------
  54.984 -PROCEDURE Finite_State_Set___ (
  54.985 -   rec_   IN OUT &TABLE%ROWTYPE,
  54.986 -   state_ IN     VARCHAR2 )
  54.987 -IS
  54.988 -BEGIN
  54.989 -   rec_.rowversion := sysdate;
  54.990 -    UPDATE scorecard_input_value_tab
  54.991 -      SET &OBJSTATE = state_,
  54.992 -          mea_state_change_date = rec_.rowversion,
  54.993 -          rowversion = rec_.rowversion
  54.994 -      WHERE environment = rec_.environment
  54.995 -      AND   scorecard = rec_.scorecard
  54.996 -      AND   year = rec_.year
  54.997 -      AND   version = rec_.version
  54.998 -      AND   scorecard_object = rec_.scorecard_object;
  54.999 -   rec_.rowstate := state_;
 54.1000 -END Finite_State_Set___;
 54.1001 -PROCEDURE Finite_State_Machine___ (
 54.1002 -   rec_   IN OUT &TABLE%ROWTYPE,
 54.1003 -   event_ IN     VARCHAR2,
 54.1004 -   attr_  IN OUT VARCHAR2 )
 54.1005 -IS
 54.1006 -   state_ VARCHAR2(30);
 54.1007 -BEGIN
 54.1008 -   state_ := rec_.rowstate;
 54.1009 -   IF (state_ IS NULL) THEN
 54.1010 -      IF (event_ IS NULL) THEN
 54.1011 -         rec_.rowstate := 'Open';
 54.1012 -      ELSE
 54.1013 -         Error_SYS.State_Event_Not_Handled(lu_name_, event_, Finite_State_Decode__(state_));
 54.1014 -      END IF;
 54.1015 -   ELSIF (state_ = 'Open') THEN
 54.1016 -      IF (event_ = 'Plan') THEN
 54.1017 -         Finite_State_Set___(rec_, 'Planned');
 54.1018 -      ELSE
 54.1019 -         Error_SYS.State_Event_Not_Handled(lu_name_, event_, Finite_State_Decode__(state_));
 54.1020 -      END IF;
 54.1021 -   ELSIF (state_ = 'Planned') THEN
 54.1022 -      IF (event_ = 'Plan') THEN
 54.1023 -         Object_Planned_Date___(rec_, attr_);
 54.1024 -      ELSE
 54.1025 -         Error_SYS.State_Event_Not_Handled(lu_name_, event_, Finite_State_Decode__(state_));
 54.1026 -      END IF;
 54.1027 -   ELSE
 54.1028 -      Error_SYS.State_Not_Exist(lu_name_, Finite_State_Decode__(state_));
 54.1029 -   END IF;
 54.1030 -END Finite_State_Machine___;
 54.1031 -PROCEDURE Finite_State_Add_To_Attr___ (
 54.1032 -   rec_   IN     &TABLE%ROWTYPE,
 54.1033 -   attr_  IN OUT VARCHAR2 )
 54.1034 -IS
 54.1035 -   state_ VARCHAR2(30);
 54.1036 -BEGIN
 54.1037 -   state_ := rec_.rowstate;
 54.1038 -   Client_SYS.Add_To_Attr('__OBJSTATE', state_, attr_);
 54.1039 -   Client_SYS.Add_To_Attr('__OBJEVENTS', Finite_State_Events__(state_), attr_);
 54.1040 -   Client_SYS.Add_To_Attr('STATE', Finite_State_Decode__(state_), attr_);
 54.1041 -END Finite_State_Add_To_Attr___;
 54.1042 -PROCEDURE Finite_State_Init___ (
 54.1043 -   rec_  IN OUT &TABLE%ROWTYPE,
 54.1044 -   attr_ IN OUT VARCHAR2 )
 54.1045 -IS
 54.1046 -   state_ VARCHAR2(30);
 54.1047 -BEGIN
 54.1048 -   Finite_State_Machine___(rec_, NULL, attr_);
 54.1049 -   Finite_State_Add_To_Attr___(rec_, attr_);
 54.1050 -END Finite_State_Init___;
 54.1051 ------------------------------------------------------------------------------
 54.1052 --------------------- PRIVATE FINITE STATE MACHINE ---------------------------
 54.1053 ------------------------------------------------------------------------------
 54.1054 --- Finite_State_Decode__
 54.1055 ---   Returns the client equivalent for any database representation of
 54.1056 ---   a state name = objstate.
 54.1057 ---
 54.1058 --- Finite_State_Encode__
 54.1059 ---   Returns the database equivalent for any client representation of
 54.1060 ---   a state name = state.
 54.1061 ---
 54.1062 --- Enumerate_States__
 54.1063 ---   Returns a list of all possible finite states in client terminology.
 54.1064 ---
 54.1065 --- Finite_State_Events__
 54.1066 ---   Returns a list of allowed events for a given state
 54.1067 ---   NOTE! Regardless of conditions if not otherwize encoded
 54.1068 ---
 54.1069 --- Enumerate_Events__
 54.1070 ---   Returns a list of all possible events.
 54.1071 ------------------------------------------------------------------------------
 54.1072 -FUNCTION Finite_State_Decode__ (
 54.1073 -   db_state_ IN VARCHAR2 ) RETURN VARCHAR2
 54.1074 -IS
 54.1075 -BEGIN
 54.1076 -   RETURN(Domain_SYS.Decode_(active_state_list_, db_state_list_, db_state_));
 54.1077 -END Finite_State_Decode__;
 54.1078 -FUNCTION Finite_State_Encode__ (
 54.1079 -   client_state_ IN VARCHAR2 ) RETURN VARCHAR2
 54.1080 -IS
 54.1081 -BEGIN
 54.1082 -   RETURN(Domain_SYS.Encode_(active_state_list_, db_state_list_, client_state_));
 54.1083 -END Finite_State_Encode__;
 54.1084 -PROCEDURE Enumerate_States__ (
 54.1085 -   client_values_ OUT VARCHAR2)
 54.1086 -IS
 54.1087 -BEGIN
 54.1088 -   client_values_ := Domain_SYS.Enumerate_(active_state_list_);
 54.1089 -END Enumerate_States__;
 54.1090 -FUNCTION Finite_State_Events__ (
 54.1091 -   db_state_ IN VARCHAR2 ) RETURN VARCHAR2
 54.1092 -IS
 54.1093 -BEGIN
 54.1094 -   IF (db_state_ IS NULL) THEN
 54.1095 -      RETURN NULL;
 54.1096 -   ELSIF (db_state_ = 'Open') THEN
 54.1097 -      RETURN 'Plan^';
 54.1098 -   ELSIF (db_state_ = 'Planned') THEN
 54.1099 -      RETURN 'Plan^';
 54.1100 -   ELSE
 54.1101 -      RETURN NULL;
 54.1102 -   END IF;
 54.1103 -END Finite_State_Events__;
 54.1104 -PROCEDURE Enumerate_Events__ (
 54.1105 -   db_events_ OUT VARCHAR2 )
 54.1106 -IS
 54.1107 -BEGIN
 54.1108 -   db_events_ := 'Plan^';
 54.1109 -END Enumerate_Events__;
 54.1110 ------------------------------------------------------------------------------
 54.1111 --------------------- IMPLEMENTATION BASE METHODS FOR INSERT -----------------
 54.1112 ------------------------------------------------------------------------------
 54.1113 --- Prepare_Insert___
 54.1114 ---    Set all default values for a new instance (ON-NEW-RECORD) of this
 54.1115 ---    logical unit by calling procedure Add_Attr.
 54.1116 ---
 54.1117 --- Unpack_Check_Insert___
 54.1118 ---    Unpack the attribute list, check all attributes from the client
 54.1119 ---    and generate all default values before creation of the new object.
 54.1120 ---
 54.1121 --- Insert___
 54.1122 ---    Insert a new LU-instance into the database and return the values
 54.1123 ---    for OBJID and OBJVERSION.
 54.1124 ------------------------------------------------------------------------------
 54.1125 -
 54.1126 -PROCEDURE Prepare_Insert___ (
 54.1127 -   attr_ IN OUT VARCHAR2 )
 54.1128 -IS
 54.1129 -BEGIN
 54.1130 -   Client_SYS.Clear_Attr(attr_);
 54.1131 -END Prepare_Insert___;
 54.1132 -
 54.1133 -
 54.1134 -PROCEDURE Unpack_Check_Insert___ (
 54.1135 -   attr_   IN OUT VARCHAR2,
 54.1136 -   newrec_ IN OUT &TABLE%ROWTYPE )
 54.1137 -IS
 54.1138 -   ptr_   NUMBER;
 54.1139 -   name_  VARCHAR2(30);
 54.1140 -   value_ VARCHAR2(2000);
 54.1141 -
 54.1142 -   measure_format_    NUMBER;
 54.1143 -
 54.1144 -BEGIN
 54.1145 -   ptr_ := NULL;
 54.1146 -   WHILE (Client_SYS.Get_Next_From_Attr(attr_, ptr_, name_, value_)) LOOP
 54.1147 -      IF (name_ = 'ENVIRONMENT') THEN
 54.1148 -         newrec_.environment := value_;
 54.1149 -         Scorecard_Environment_API.Exist(newrec_.environment);
 54.1150 -      ELSIF (name_ = 'SCORECARD') THEN
 54.1151 -         newrec_.scorecard := value_;
 54.1152 -         Scorecard_API.Exist(newrec_.environment, newrec_.scorecard);
 54.1153 -      ELSIF (name_ = 'YEAR') THEN
 54.1154 -         newrec_.year := value_;
 54.1155 -         Environment_Year_API.Exist(newrec_.environment, newrec_.year);
 54.1156 -      ELSIF (name_ = 'VERSION') THEN
 54.1157 -         newrec_.version := value_;
 54.1158 -      ELSIF (name_ = 'SCORECARD_OBJECT') THEN
 54.1159 -         newrec_.scorecard_object := value_;
 54.1160 -      ELSIF (name_ = 'OBJECT_TYPE') THEN
 54.1161 -         newrec_.object_type := value_;
 54.1162 -      ELSIF (name_ = 'YEAR_VALUE') THEN
 54.1163 -         newrec_.year_value := Client_SYS.Attr_Value_To_Number(value_);
 54.1164 -      ELSIF (name_ = 'P1_KEY') THEN
 54.1165 -         newrec_.p1_key := value_;
 54.1166 -      ELSIF (name_ = 'P1_VALUE') THEN
 54.1167 -         newrec_.p1_value := Client_SYS.Attr_Value_To_Number(value_);
 54.1168 -      ELSIF (name_ = 'P2_KEY') THEN
 54.1169 -         newrec_.p2_key := value_;
 54.1170 -      ELSIF (name_ = 'P2_VALUE') THEN
 54.1171 -         newrec_.p2_value := Client_SYS.Attr_Value_To_Number(value_);
 54.1172 -      ELSIF (name_ = 'P3_KEY') THEN
 54.1173 -         newrec_.p3_key := value_;
 54.1174 -      ELSIF (name_ = 'P3_VALUE') THEN
 54.1175 -         newrec_.p3_value := Client_SYS.Attr_Value_To_Number(value_);
 54.1176 -      ELSIF (name_ = 'P4_KEY') THEN
 54.1177 -         newrec_.p4_key := value_;
 54.1178 -      ELSIF (name_ = 'P4_VALUE') THEN
 54.1179 -         newrec_.p4_value := Client_SYS.Attr_Value_To_Number(value_);
 54.1180 -      ELSIF (name_ = 'P5_KEY') THEN
 54.1181 -         newrec_.p5_key := value_;
 54.1182 -      ELSIF (name_ = 'P5_VALUE') THEN
 54.1183 -         newrec_.p5_value := Client_SYS.Attr_Value_To_Number(value_);
 54.1184 -      ELSIF (name_ = 'P6_KEY') THEN
 54.1185 -         newrec_.p6_key := value_;
 54.1186 -      ELSIF (name_ = 'P6_VALUE') THEN
 54.1187 -         newrec_.p6_value := Client_SYS.Attr_Value_To_Number(value_);
 54.1188 -      ELSIF (name_ = 'P7_KEY') THEN
 54.1189 -         newrec_.p7_key := value_;
 54.1190 -      ELSIF (name_ = 'P7_VALUE') THEN
 54.1191 -         newrec_.p7_value := Client_SYS.Attr_Value_To_Number(value_);
 54.1192 -      ELSIF (name_ = 'P8_KEY') THEN
 54.1193 -         newrec_.p8_key := value_;
 54.1194 -      ELSIF (name_ = 'P8_VALUE') THEN
 54.1195 -         newrec_.p8_value := Client_SYS.Attr_Value_To_Number(value_);
 54.1196 -      ELSIF (name_ = 'P9_KEY') THEN
 54.1197 -         newrec_.p9_key := value_;
 54.1198 -      ELSIF (name_ = 'P9_VALUE') THEN
 54.1199 -         newrec_.p9_value := Client_SYS.Attr_Value_To_Number(value_);
 54.1200 -      ELSIF (name_ = 'P10_KEY') THEN
 54.1201 -         newrec_.p10_key := value_;
 54.1202 -      ELSIF (name_ = 'P10_VALUE') THEN
 54.1203 -         newrec_.p10_value := Client_SYS.Attr_Value_To_Number(value_);
 54.1204 -      ELSIF (name_ = 'P11_KEY') THEN
 54.1205 -         newrec_.p11_key := value_;
 54.1206 -      ELSIF (name_ = 'P11_VALUE') THEN
 54.1207 -         newrec_.p11_value := Client_SYS.Attr_Value_To_Number(value_);
 54.1208 -      ELSIF (name_ = 'P12_KEY') THEN
 54.1209 -         newrec_.p12_key := value_;
 54.1210 -      ELSIF (name_ = 'P12_VALUE') THEN
 54.1211 -         newrec_.p12_value := Client_SYS.Attr_Value_To_Number(value_);
 54.1212 -      ELSIF (name_ = 'ACTION') THEN
 54.1213 -         newrec_.action := value_;
 54.1214 -      ELSIF (name_ = 'MEA_STATE_CHANGE_DATE') THEN
 54.1215 -         newrec_.mea_state_change_date := Client_SYS.Attr_Value_To_Date(value_);
 54.1216 -      ELSIF (name_ = 'BUDGET_VERSION') THEN
 54.1217 -         newrec_.budget_version := value_;
 54.1218 -      ELSE
 54.1219 -         Error_SYS.Item_Not_Exist(lu_name_, name_, value_);
 54.1220 -      END IF;
 54.1221 -   END LOOP;
 54.1222 -
 54.1223 -
 54.1224 -   IF( newrec_.scorecard_object IS NOT NULL) THEN
 54.1225 -
 54.1226 -      measure_format_      := TO_NUMBER(Scorecard_Measure_API.Get_Measure_Format(newrec_.scorecard_object));
 54.1227 -
 54.1228 -      newrec_.year_value   := newrec_.year_value  *  measure_format_;
 54.1229 -      newrec_.p1_value     := newrec_.p1_value     *  measure_format_;
 54.1230 -      newrec_.p2_value     := newrec_.p2_value     *  measure_format_;
 54.1231 -      newrec_.p3_value     := newrec_.p3_value     *  measure_format_;
 54.1232 -      newrec_.p4_value     := newrec_.p4_value     *  measure_format_;
 54.1233 -      newrec_.p5_value     := newrec_.p5_value     *  measure_format_;
 54.1234 -      newrec_.p6_value     := newrec_.p6_value     *  measure_format_;
 54.1235 -      newrec_.p7_value     := newrec_.p7_value     *  measure_format_;
 54.1236 -      newrec_.p8_value     := newrec_.p8_value     *  measure_format_;
 54.1237 -      newrec_.p9_value     := newrec_.p9_value     *  measure_format_;
 54.1238 -      newrec_.p10_value    := newrec_.p10_value    *  measure_format_;
 54.1239 -      newrec_.p11_value    := newrec_.p11_value    *  measure_format_;
 54.1240 -      newrec_.p12_value    := newrec_.p12_value    *  measure_format_;
 54.1241 -
 54.1242 -   END IF;
 54.1243 -
 54.1244 -   Client_SYS.Clear_Attr(attr_);
 54.1245 -   Error_SYS.Check_Not_Null(lu_name_, 'ENVIRONMENT', newrec_.environment);
 54.1246 -   Error_SYS.Check_Not_Null(lu_name_, 'SCORECARD', newrec_.scorecard);
 54.1247 -   Error_SYS.Check_Not_Null(lu_name_, 'YEAR', newrec_.year);
 54.1248 -   Error_SYS.Check_Not_Null(lu_name_, 'VERSION', newrec_.version);
 54.1249 -   Error_SYS.Check_Not_Null(lu_name_, 'SCORECARD_OBJECT', newrec_.scorecard_object);
 54.1250 -   Error_SYS.Check_Not_Null(lu_name_, 'OBJECT_TYPE', newrec_.object_type);
 54.1251 -   Error_SYS.Check_Not_Null(lu_name_, 'ACTION', newrec_.action);
 54.1252 -EXCEPTION
 54.1253 -   WHEN value_error THEN
 54.1254 -      Error_SYS.Item_Format(lu_name_, name_, value_);
 54.1255 -END Unpack_Check_Insert___;
 54.1256 -
 54.1257 -
 54.1258 -PROCEDURE Insert___ (
 54.1259 -   objid_      OUT    VARCHAR2,
 54.1260 -   objversion_ OUT    VARCHAR2,
 54.1261 -   newrec_     IN OUT &TABLE%ROWTYPE,
 54.1262 -   attr_       IN OUT VARCHAR2 )
 54.1263 -IS
 54.1264 -BEGIN
 54.1265 -   newrec_.rowversion := sysdate;
 54.1266 -   objversion_ := to_char(newrec_.rowversion,'YYYYMMDDHH24MISS');
 54.1267 -   newrec_.mea_state_change_date := sysdate;
 54.1268 -   INSERT
 54.1269 -      INTO scorecard_input_value_tab (
 54.1270 -         environment,
 54.1271 -         scorecard,
 54.1272 -         year,
 54.1273 -         version,
 54.1274 -         scorecard_object,
 54.1275 -         object_type,
 54.1276 -         year_value,
 54.1277 -         p1_key,
 54.1278 -         p1_value,
 54.1279 -         p2_key,
 54.1280 -         p2_value,
 54.1281 -         p3_key,
 54.1282 -         p3_value,
 54.1283 -         p4_key,
 54.1284 -         p4_value,
 54.1285 -         p5_key,
 54.1286 -         p5_value,
 54.1287 -         p6_key,
 54.1288 -         p6_value,
 54.1289 -         p7_key,
 54.1290 -         p7_value,
 54.1291 -         p8_key,
 54.1292 -         p8_value,
 54.1293 -         p9_key,
 54.1294 -         p9_value,
 54.1295 -         p10_key,
 54.1296 -         p10_value,
 54.1297 -         p11_key,
 54.1298 -         p11_value,
 54.1299 -         p12_key,
 54.1300 -         p12_value,
 54.1301 -         action,
 54.1302 -         mea_state_change_date,
 54.1303 -         budget_version,
 54.1304 -         rowversion,
 54.1305 -         rowstate)
 54.1306 -      VALUES (
 54.1307 -         newrec_.environment,
 54.1308 -         newrec_.scorecard,
 54.1309 -         newrec_.year,
 54.1310 -         newrec_.version,
 54.1311 -         newrec_.scorecard_object,
 54.1312 -         newrec_.object_type,
 54.1313 -         newrec_.year_value,
 54.1314 -         newrec_.p1_key,
 54.1315 -         newrec_.p1_value,
 54.1316 -         newrec_.p2_key,
 54.1317 -         newrec_.p2_value,
 54.1318 -         newrec_.p3_key,
 54.1319 -         newrec_.p3_value,
 54.1320 -         newrec_.p4_key,
 54.1321 -         newrec_.p4_value,
 54.1322 -         newrec_.p5_key,
 54.1323 -         newrec_.p5_value,
 54.1324 -         newrec_.p6_key,
 54.1325 -         newrec_.p6_value,
 54.1326 -         newrec_.p7_key,
 54.1327 -         newrec_.p7_value,
 54.1328 -         newrec_.p8_key,
 54.1329 -         newrec_.p8_value,
 54.1330 -         newrec_.p9_key,
 54.1331 -         newrec_.p9_value,
 54.1332 -         newrec_.p10_key,
 54.1333 -         newrec_.p10_value,
 54.1334 -         newrec_.p11_key,
 54.1335 -         newrec_.p11_value,
 54.1336 -         newrec_.p12_key,
 54.1337 -         newrec_.p12_value,
 54.1338 -         newrec_.action,
 54.1339 -         newrec_.mea_state_change_date,
 54.1340 -         newrec_.budget_version,
 54.1341 -         newrec_.rowversion,
 54.1342 -         'Open')
 54.1343 -      RETURNING &OBJID INTO objid_;
 54.1344 -   Finite_State_Init___(newrec_, attr_);
 54.1345 -EXCEPTION
 54.1346 -   WHEN dup_val_on_index THEN
 54.1347 -      Error_SYS.Record_Exist(lu_name_);
 54.1348 -END Insert___;
 54.1349 -
 54.1350 ------------------------------------------------------------------------------
 54.1351 --------------------- IMPLEMENTATION BASE METHODS FOR UPDATE -----------------
 54.1352 ------------------------------------------------------------------------------
 54.1353 --- Unpack_Check_Update___
 54.1354 ---    Unpack the attribute list, check all attributes from the client
 54.1355 ---    and generate all default values before modifying the object.
 54.1356 ---
 54.1357 --- Update___
 54.1358 ---    Update an existing LU-instance in the database and return the
 54.1359 ---    the new OBJVERSION.
 54.1360 ------------------------------------------------------------------------------
 54.1361 -
 54.1362 -PROCEDURE Unpack_Check_Update___ (
 54.1363 -   attr_   IN OUT VARCHAR2,
 54.1364 -   newrec_ IN OUT &TABLE%ROWTYPE,
 54.1365 -   objid_  IN     VARCHAR2 )
 54.1366 -IS
 54.1367 -   ptr_   NUMBER;
 54.1368 -   name_  VARCHAR2(30);
 54.1369 -   value_ VARCHAR2(2000);
 54.1370 -
 54.1371 -
 54.1372 -   measure_format_    NUMBER;
 54.1373 -   from_budpro_       VARCHAR2(5):= 'FALSE';
 54.1374 -   oldrec_           Scorecard_Input_Value_Tab%ROWTYPE;
 54.1375 -
 54.1376 -BEGIN
 54.1377 -   ptr_ := NULL;
 54.1378 -   oldrec_  := newrec_;
 54.1379 -   WHILE (Client_SYS.Get_Next_From_Attr(attr_, ptr_, name_, value_)) LOOP
 54.1380 -      IF (name_ = 'ENVIRONMENT') THEN
 54.1381 -         newrec_.environment := value_;
 54.1382 -         Scorecard_Environment_API.Exist(newrec_.environment);
 54.1383 -      ELSIF (name_ = 'SCORECARD') THEN
 54.1384 -         newrec_.scorecard := value_;
 54.1385 -         Scorecard_API.Exist(newrec_.environment, newrec_.scorecard);
 54.1386 -      ELSIF (name_ = 'YEAR') THEN
 54.1387 -         newrec_.year := value_;
 54.1388 -         Environment_Year_API.Exist(newrec_.environment, newrec_.year);
 54.1389 -      ELSIF (name_ = 'VERSION') THEN
 54.1390 -         Error_SYS.Item_Update(lu_name_, 'VERSION');
 54.1391 -      ELSIF (name_ = 'SCORECARD_OBJECT') THEN
 54.1392 -         newrec_.scorecard_object := value_;
 54.1393 -      ELSIF (name_ = 'OBJECT_TYPE') THEN
 54.1394 -         newrec_.object_type := value_;
 54.1395 -      ELSIF (name_ = 'YEAR_VALUE') THEN
 54.1396 -         newrec_.year_value := Client_SYS.Attr_Value_To_Number(value_);
 54.1397 -      ELSIF (name_ = 'P1_KEY') THEN
 54.1398 -         newrec_.p1_key := value_;
 54.1399 -      ELSIF (name_ = 'P1_VALUE') THEN
 54.1400 -         newrec_.p1_value := Client_SYS.Attr_Value_To_Number(value_);
 54.1401 -      ELSIF (name_ = 'P2_KEY') THEN
 54.1402 -         newrec_.p2_key := value_;
 54.1403 -      ELSIF (name_ = 'P2_VALUE') THEN
 54.1404 -         newrec_.p2_value := Client_SYS.Attr_Value_To_Number(value_);
 54.1405 -      ELSIF (name_ = 'P3_KEY') THEN
 54.1406 -         newrec_.p3_key := value_;
 54.1407 -      ELSIF (name_ = 'P3_VALUE') THEN
 54.1408 -         newrec_.p3_value := Client_SYS.Attr_Value_To_Number(value_);
 54.1409 -      ELSIF (name_ = 'P4_KEY') THEN
 54.1410 -         newrec_.p4_key := value_;
 54.1411 -      ELSIF (name_ = 'P4_VALUE') THEN
 54.1412 -         newrec_.p4_value := Client_SYS.Attr_Value_To_Number(value_);
 54.1413 -      ELSIF (name_ = 'P5_KEY') THEN
 54.1414 -         newrec_.p5_key := value_;
 54.1415 -      ELSIF (name_ = 'P5_VALUE') THEN
 54.1416 -         newrec_.p5_value := Client_SYS.Attr_Value_To_Number(value_);
 54.1417 -      ELSIF (name_ = 'P6_KEY') THEN
 54.1418 -         newrec_.p6_key := value_;
 54.1419 -      ELSIF (name_ = 'P6_VALUE') THEN
 54.1420 -         newrec_.p6_value := Client_SYS.Attr_Value_To_Number(value_);
 54.1421 -      ELSIF (name_ = 'P7_KEY') THEN
 54.1422 -         newrec_.p7_key := value_;
 54.1423 -      ELSIF (name_ = 'P7_VALUE') THEN
 54.1424 -         newrec_.p7_value := Client_SYS.Attr_Value_To_Number(value_);
 54.1425 -      ELSIF (name_ = 'P8_KEY') THEN
 54.1426 -         newrec_.p8_key := value_;
 54.1427 -      ELSIF (name_ = 'P8_VALUE') THEN
 54.1428 -         newrec_.p8_value := Client_SYS.Attr_Value_To_Number(value_);
 54.1429 -      ELSIF (name_ = 'P9_KEY') THEN
 54.1430 -         newrec_.p9_key := value_;
 54.1431 -      ELSIF (name_ = 'P9_VALUE') THEN
 54.1432 -         newrec_.p9_value := Client_SYS.Attr_Value_To_Number(value_);
 54.1433 -      ELSIF (name_ = 'P10_KEY') THEN
 54.1434 -         newrec_.p10_key := value_;
 54.1435 -      ELSIF (name_ = 'P10_VALUE') THEN
 54.1436 -         newrec_.p10_value := Client_SYS.Attr_Value_To_Number(value_);
 54.1437 -      ELSIF (name_ = 'P11_KEY') THEN
 54.1438 -         newrec_.p11_key := value_;
 54.1439 -      ELSIF (name_ = 'P11_VALUE') THEN
 54.1440 -         newrec_.p11_value := Client_SYS.Attr_Value_To_Number(value_);
 54.1441 -      ELSIF (name_ = 'P12_KEY') THEN
 54.1442 -         newrec_.p12_key := value_;
 54.1443 -      ELSIF (name_ = 'P12_VALUE') THEN
 54.1444 -         newrec_.p12_value := Client_SYS.Attr_Value_To_Number(value_);
 54.1445 -      ELSIF (name_ = 'ACTION') THEN
 54.1446 -         newrec_.action := value_;
 54.1447 -      ELSIF (name_ = 'MEA_STATE_CHANGE_DATE') THEN
 54.1448 -         newrec_.mea_state_change_date := Client_SYS.Attr_Value_To_Date(value_);
 54.1449 -      ELSIF (name_ = 'BUDGET_VERSION') THEN
 54.1450 -         newrec_.budget_version := value_;
 54.1451 -      ELSIF (name_ = 'FROM_BUDPRO') THEN
 54.1452 -         from_budpro_ := value_;
 54.1453 -      ELSE
 54.1454 -         Error_SYS.Item_Not_Exist(lu_name_, name_, value_);
 54.1455 -      END IF;
 54.1456 -   END LOOP;
 54.1457 -
 54.1458 -
 54.1459 -   IF( newrec_.scorecard_object IS NOT NULL AND from_budpro_ = 'FALSE') THEN
 54.1460 -
 54.1461 -      measure_format_      := TO_NUMBER(Scorecard_Measure_API.Get_Measure_Format(newrec_.scorecard_object));
 54.1462 -      IF( newrec_.year_value != NVL(oldrec_.year_value,0)) THEN
 54.1463 -         newrec_.year_value   := newrec_.year_value  *  measure_format_;
 54.1464 -      END IF;
 54.1465 -      IF( newrec_.p1_value != NVL(oldrec_.p1_value,0)) THEN
 54.1466 -         newrec_.p1_value     := newrec_.p1_value     *  measure_format_;
 54.1467 -      END IF;
 54.1468 -      IF( newrec_.p2_value != NVL(oldrec_.p2_value,0)) THEN
 54.1469 -         newrec_.p2_value     := newrec_.p2_value     *  measure_format_;
 54.1470 -      END IF;
 54.1471 -      IF( newrec_.p3_value != NVL(oldrec_.p3_value,0)) THEN
 54.1472 -         newrec_.p3_value     := newrec_.p3_value     *  measure_format_;
 54.1473 -      END IF;
 54.1474 -      IF( newrec_.p4_value != NVL(oldrec_.p4_value,0)) THEN
 54.1475 -         newrec_.p4_value     := newrec_.p4_value     *  measure_format_;
 54.1476 -      END IF;
 54.1477 -      IF( newrec_.p5_value != NVL(oldrec_.p5_value,0)) THEN
 54.1478 -         newrec_.p5_value     := newrec_.p5_value     *  measure_format_;
 54.1479 -      END IF;
 54.1480 -      IF( newrec_.p6_value != NVL(oldrec_.p6_value,0)) THEN
 54.1481 -         newrec_.p6_value     := newrec_.p6_value     *  measure_format_;
 54.1482 -      END IF;
 54.1483 -      IF( newrec_.p7_value != NVL(oldrec_.p7_value,0)) THEN
 54.1484 -         newrec_.p7_value     := newrec_.p7_value     *  measure_format_;
 54.1485 -      END IF;
 54.1486 -      IF( newrec_.p8_value != NVL(oldrec_.p8_value,0)) THEN
 54.1487 -         newrec_.p8_value     := newrec_.p8_value     *  measure_format_;
 54.1488 -      END IF;
 54.1489 -      IF( newrec_.p9_value != NVL(oldrec_.p9_value,0)) THEN
 54.1490 -         newrec_.p9_value     := newrec_.p9_value     *  measure_format_;
 54.1491 -      END IF;
 54.1492 -      IF( newrec_.p10_value != NVL(oldrec_.p10_value,0)) THEN
 54.1493 -         newrec_.p10_value    := newrec_.p10_value    *  measure_format_;
 54.1494 -      END IF;
 54.1495 -      IF( newrec_.p11_value != NVL(oldrec_.p11_value,0)) THEN
 54.1496 -         newrec_.p11_value    := newrec_.p11_value    *  measure_format_;
 54.1497 -      END IF;
 54.1498 -      IF( newrec_.p12_value != NVL(oldrec_.p12_value,0)) THEN
 54.1499 -         newrec_.p12_value    := newrec_.p12_value    *  measure_format_;
 54.1500 -      END IF;
 54.1501 -
 54.1502 -   END IF;
 54.1503 -   Client_SYS.Clear_Attr(attr_);
 54.1504 -   Error_SYS.Check_Not_Null(lu_name_, 'ENVIRONMENT', newrec_.environment);
 54.1505 -   Error_SYS.Check_Not_Null(lu_name_, 'SCORECARD', newrec_.scorecard);
 54.1506 -   Error_SYS.Check_Not_Null(lu_name_, 'YEAR', newrec_.year);
 54.1507 -   Error_SYS.Check_Not_Null(lu_name_, 'SCORECARD_OBJECT', newrec_.scorecard_object);
 54.1508 -   Error_SYS.Check_Not_Null(lu_name_, 'OBJECT_TYPE', newrec_.object_type);
 54.1509 -   Error_SYS.Check_Not_Null(lu_name_, 'ACTION', newrec_.action);
 54.1510 -EXCEPTION
 54.1511 -   WHEN value_error THEN
 54.1512 -      Error_SYS.Item_Format(lu_name_, name_, value_);
 54.1513 -END Unpack_Check_Update___;
 54.1514 -
 54.1515 -
 54.1516 -PROCEDURE Update___ (
 54.1517 -   objid_      IN     VARCHAR2,
 54.1518 -   oldrec_     IN     &TABLE%ROWTYPE,
 54.1519 -   newrec_     IN OUT &TABLE%ROWTYPE,
 54.1520 -   attr_       IN OUT VARCHAR2,
 54.1521 -   objversion_ IN OUT VARCHAR2,
 54.1522 -   by_keys_    IN BOOLEAN DEFAULT FALSE )
 54.1523 -IS
 54.1524 -BEGIN
 54.1525 -   newrec_.rowversion := sysdate;
 54.1526 -   objversion_ := to_char(newrec_.rowversion,'YYYYMMDDHH24MISS');
 54.1527 -   IF by_keys_ THEN
 54.1528 -      UPDATE scorecard_input_value_tab
 54.1529 -      SET environment = newrec_.environment,
 54.1530 -          scorecard = newrec_.scorecard,
 54.1531 -          year = newrec_.year,
 54.1532 -          version = newrec_.version,
 54.1533 -          scorecard_object = newrec_.scorecard_object,
 54.1534 -          object_type = newrec_.object_type,
 54.1535 -          year_value = newrec_.year_value,
 54.1536 -          p1_key = newrec_.p1_key,
 54.1537 -          p1_value = newrec_.p1_value,
 54.1538 -          p2_key = newrec_.p2_key,
 54.1539 -          p2_value = newrec_.p2_value,
 54.1540 -          p3_key = newrec_.p3_key,
 54.1541 -          p3_value = newrec_.p3_value,
 54.1542 -          p4_key = newrec_.p4_key,
 54.1543 -          p4_value = newrec_.p4_value,
 54.1544 -          p5_key = newrec_.p5_key,
 54.1545 -          p5_value = newrec_.p5_value,
 54.1546 -          p6_key = newrec_.p6_key,
 54.1547 -          p6_value = newrec_.p6_value,
 54.1548 -          p7_key = newrec_.p7_key,
 54.1549 -          p7_value = newrec_.p7_value,
 54.1550 -          p8_key = newrec_.p8_key,
 54.1551 -          p8_value = newrec_.p8_value,
 54.1552 -          p9_key = newrec_.p9_key,
 54.1553 -          p9_value = newrec_.p9_value,
 54.1554 -          p10_key = newrec_.p10_key,
 54.1555 -          p10_value = newrec_.p10_value,
 54.1556 -          p11_key = newrec_.p11_key,
 54.1557 -          p11_value = newrec_.p11_value,
 54.1558 -          p12_key = newrec_.p12_key,
 54.1559 -          p12_value = newrec_.p12_value,
 54.1560 -          action = newrec_.action,
 54.1561 -          mea_state_change_date = newrec_.mea_state_change_date,
 54.1562 -          budget_version = newrec_.budget_version,
 54.1563 -          rowversion = newrec_.rowversion
 54.1564 -      WHERE environment = newrec_.environment
 54.1565 -      AND   scorecard = newrec_.scorecard
 54.1566 -      AND   year = newrec_.year
 54.1567 -      AND   version = newrec_.version
 54.1568 -      AND   scorecard_object = newrec_.scorecard_object;
 54.1569 -   ELSE
 54.1570 -      UPDATE scorecard_input_value_tab
 54.1571 -      SET environment = newrec_.environment,
 54.1572 -          scorecard = newrec_.scorecard,
 54.1573 -          year = newrec_.year,
 54.1574 -          version = newrec_.version,
 54.1575 -          scorecard_object = newrec_.scorecard_object,
 54.1576 -          object_type = newrec_.object_type,
 54.1577 -          year_value = newrec_.year_value,
 54.1578 -          p1_key = newrec_.p1_key,
 54.1579 -          p1_value = newrec_.p1_value,
 54.1580 -          p2_key = newrec_.p2_key,
 54.1581 -          p2_value = newrec_.p2_value,
 54.1582 -          p3_key = newrec_.p3_key,
 54.1583 -          p3_value = newrec_.p3_value,
 54.1584 -          p4_key = newrec_.p4_key,
 54.1585 -          p4_value = newrec_.p4_value,
 54.1586 -          p5_key = newrec_.p5_key,
 54.1587 -          p5_value = newrec_.p5_value,
 54.1588 -          p6_key = newrec_.p6_key,
 54.1589 -          p6_value = newrec_.p6_value,
 54.1590 -          p7_key = newrec_.p7_key,
 54.1591 -          p7_value = newrec_.p7_value,
 54.1592 -          p8_key = newrec_.p8_key,
 54.1593 -          p8_value = newrec_.p8_value,
 54.1594 -          p9_key = newrec_.p9_key,
 54.1595 -          p9_value = newrec_.p9_value,
 54.1596 -          p10_key = newrec_.p10_key,
 54.1597 -          p10_value = newrec_.p10_value,
 54.1598 -          p11_key = newrec_.p11_key,
 54.1599 -          p11_value = newrec_.p11_value,
 54.1600 -          p12_key = newrec_.p12_key,
 54.1601 -          p12_value = newrec_.p12_value,
 54.1602 -          action = newrec_.action,
 54.1603 -          mea_state_change_date = newrec_.mea_state_change_date,
 54.1604 -          budget_version = newrec_.budget_version,
 54.1605 -          rowversion = newrec_.rowversion
 54.1606 -      WHERE &OBJID = objid_;
 54.1607 -   END IF;
 54.1608 -EXCEPTION
 54.1609 -   WHEN dup_val_on_index THEN
 54.1610 -      Error_SYS.Record_Exist(lu_name_);
 54.1611 -END Update___;
 54.1612 -
 54.1613 ------------------------------------------------------------------------------
 54.1614 --------------------- IMPLEMENTATION BASE METHODS FOR DELETE -----------------
 54.1615 ------------------------------------------------------------------------------
 54.1616 --- Check_Delete___
 54.1617 ---    Checks whether a specific LU-record may be removed or not.
 54.1618 ---    The procedure should check business rules like attribute values
 54.1619 ---    as well as database constraints (defined or not).
 54.1620 ---
 54.1621 --- Delete___
 54.1622 ---    Deletion of the specific LU-object from the database.
 54.1623 ------------------------------------------------------------------------------
 54.1624 -
 54.1625 -PROCEDURE Check_Delete___ (
 54.1626 -   remrec_ IN &TABLE%ROWTYPE )
 54.1627 -IS
 54.1628 -   key_ VARCHAR2(2000);
 54.1629 -BEGIN
 54.1630 -   key_ := remrec_.environment || '^' || remrec_.scorecard || '^' || remrec_.year || '^' || remrec_.version || '^' || remrec_.scorecard_object || '^';
 54.1631 -   Reference_SYS.Check_Restricted_Delete(lu_name_, key_);
 54.1632 -END Check_Delete___;
 54.1633 -
 54.1634 -
 54.1635 -PROCEDURE Delete___ (
 54.1636 -   objid_  IN VARCHAR2,
 54.1637 -   remrec_ IN &TABLE%ROWTYPE )
 54.1638 -IS
 54.1639 -   key_ VARCHAR2(2000);
 54.1640 -BEGIN
 54.1641 -   key_ := remrec_.environment || '^' || remrec_.scorecard || '^' || remrec_.year || '^' || remrec_.version || '^' || remrec_.scorecard_object || '^';
 54.1642 -   Reference_SYS.Do_Cascade_Delete(lu_name_, key_);
 54.1643 -   DELETE
 54.1644 -      FROM  scorecard_input_value_tab
 54.1645 -      WHERE &OBJID = objid_;
 54.1646 -END Delete___;
 54.1647 -
 54.1648 ------------------------------------------------------------------------------
 54.1649 --------------------- PRIVATE BASE METHODS -----------------------------------
 54.1650 ------------------------------------------------------------------------------
 54.1651 --- Lock__
 54.1652 ---    Client-support to lock a specific instance of the logical unit.
 54.1653 ---
 54.1654 --- New__
 54.1655 ---    Client-support interface to create LU instances.
 54.1656 ---       action_ = 'PREPARE'
 54.1657 ---          Default values and handle of information to client.
 54.1658 ---          The default values are set in procedure Prepare_Insert___.
 54.1659 ---       action_ = 'CHECK'
 54.1660 ---          Check all attributes before creating new object and handle of
 54.1661 ---          information to client. The attribute list is unpacked, checked
 54.1662 ---          and prepared (defaults) in procedure Unpack_Check_Insert___.
 54.1663 ---       action_ = 'DO'
 54.1664 ---          Creation of new instances of the logical unit and handle of
 54.1665 ---          information to client. The attribute list is unpacked, checked
 54.1666 ---          and prepared (defaults) in procedure Unpack_Check_Insert___
 54.1667 ---          before calling procedure Insert___.
 54.1668 ---
 54.1669 --- Modify__
 54.1670 ---    Client-support interface to modify attributes for LU instances.
 54.1671 ---       action_ = 'CHECK'
 54.1672 ---          Check all attributes before modifying an existing object and
 54.1673 ---          handle of information to client. The attribute list is unpacked,
 54.1674 ---          checked and prepared(defaults) in procedure Unpack_Check_Update___.
 54.1675 ---       action_ = 'DO'
 54.1676 ---          Modification of an existing instance of the logical unit. The
 54.1677 ---          procedure unpacks the attributes, checks all values before
 54.1678 ---          procedure Update___ is called.
 54.1679 ---
 54.1680 --- Remove__
 54.1681 ---    Client-support interface to remove LU instances.
 54.1682 ---       action_ = 'CHECK'
 54.1683 ---          Check whether a specific LU-instance may be removed or not.
 54.1684 ---          The procedure fetches the complete record by calling procedure
 54.1685 ---          Get_Object_By_Id___. Then the check is made by calling procedure
 54.1686 ---          Check_Delete___.
 54.1687 ---       action_ = 'DO'
 54.1688 ---          Remove an existing instance of the logical unit. The procedure
 54.1689 ---          fetches the complete LU-record, checks for a delete and then
 54.1690 ---          deletes the record by calling procedure Delete___.
 54.1691 ------------------------------------------------------------------------------
 54.1692 -
 54.1693 -PROCEDURE Lock__ (
 54.1694 -   info_       OUT VARCHAR2,
 54.1695 -   objid_      IN  VARCHAR2,
 54.1696 -   objversion_ IN  VARCHAR2 )
 54.1697 -IS
 54.1698 -   dummy_ &TABLE%ROWTYPE;
 54.1699 -BEGIN
 54.1700 -   General_SYS.Init_Method(lu_name_, '&PKG', 'Lock__');
 54.1701 -   dummy_ := Lock_By_Id___(objid_, objversion_);
 54.1702 -   info_ := Client_SYS.Get_All_Info;
 54.1703 -END Lock__;
 54.1704 -
 54.1705 -
 54.1706 -PROCEDURE New__ (
 54.1707 -   info_       OUT    VARCHAR2,
 54.1708 -   objid_      OUT    VARCHAR2,
 54.1709 -   objversion_ OUT    VARCHAR2,
 54.1710 -   attr_       IN OUT VARCHAR2,
 54.1711 -   action_     IN     VARCHAR2 )
 54.1712 -IS
 54.1713 -   newrec_ &TABLE%ROWTYPE;
 54.1714 -BEGIN
 54.1715 -   General_SYS.Init_Method(lu_name_, '&PKG', 'New__');
 54.1716 -   IF (action_ = 'PREPARE') THEN
 54.1717 -      Prepare_Insert___(attr_);
 54.1718 -   ELSIF (action_ = 'CHECK') THEN
 54.1719 -      Unpack_Check_Insert___(attr_, newrec_);
 54.1720 -   ELSIF (action_ = 'DO') THEN
 54.1721 -      Unpack_Check_Insert___(attr_, newrec_);
 54.1722 -      Insert___(objid_, objversion_, newrec_, attr_);
 54.1723 -   END IF;
 54.1724 -   info_ := Client_SYS.Get_All_Info;
 54.1725 -END New__;
 54.1726 -
 54.1727 -
 54.1728 -PROCEDURE Modify__ (
 54.1729 -   info_       OUT    VARCHAR2,
 54.1730 -   objid_      IN     VARCHAR2,
 54.1731 -   objversion_ IN OUT VARCHAR2,
 54.1732 -   attr_       IN OUT VARCHAR2,
 54.1733 -   action_     IN     VARCHAR2 )
 54.1734 -IS
 54.1735 -   oldrec_ &TABLE%ROWTYPE;
 54.1736 -   newrec_ &TABLE%ROWTYPE;
 54.1737 -BEGIN
 54.1738 -   General_SYS.Init_Method(lu_name_, '&PKG', 'Modify__');
 54.1739 -   IF (action_ = 'CHECK') THEN
 54.1740 -      newrec_ := Get_Object_By_Id___(objid_);
 54.1741 -      Unpack_Check_Update___(attr_, newrec_, objid_);
 54.1742 -   ELSIF (action_ = 'DO') THEN
 54.1743 -      oldrec_ := Lock_By_Id___(objid_, objversion_);
 54.1744 -      newrec_ := oldrec_;
 54.1745 -      Unpack_Check_Update___(attr_, newrec_, objid_);
 54.1746 -      Update___(objid_, oldrec_, newrec_, attr_, objversion_);
 54.1747 -   END IF;
 54.1748 -   info_ := Client_SYS.Get_All_Info;
 54.1749 -END Modify__;
 54.1750 -
 54.1751 -
 54.1752 -PROCEDURE Remove__ (
 54.1753 -   info_       OUT VARCHAR2,
 54.1754 -   objid_      IN  VARCHAR2,
 54.1755 -   objversion_ IN  VARCHAR2,
 54.1756 -   action_     IN  VARCHAR2 )
 54.1757 -IS
 54.1758 -   remrec_ &TABLE%ROWTYPE;
 54.1759 -BEGIN
 54.1760 -   General_SYS.Init_Method(lu_name_, '&PKG', 'Remove__');
 54.1761 -   IF (action_ = 'CHECK') THEN
 54.1762 -      remrec_ := Get_Object_By_Id___(objid_);
 54.1763 -      Check_Delete___(remrec_);
 54.1764 -   ELSIF (action_ = 'DO') THEN
 54.1765 -      remrec_ := Lock_By_Id___(objid_, objversion_);
 54.1766 -      Check_Delete___(remrec_);
 54.1767 -      Delete___(objid_, remrec_);
 54.1768 -   END IF;
 54.1769 -   info_ := Client_SYS.Get_All_Info;
 54.1770 -END Remove__;
 54.1771 -
 54.1772 ------------------------------------------------------------------------------
 54.1773 --------------------- PUBLIC BASE METHODS ------------------------------------
 54.1774 ------------------------------------------------------------------------------
 54.1775 --- Exist
 54.1776 ---   Checks if given pointer (e.g. primary key) to an instance of this
 54.1777 ---   logical unit exists. If not an exception will be raised.
 54.1778 ------------------------------------------------------------------------------
 54.1779 -
 54.1780 -PROCEDURE Exist (
 54.1781 -   environment_ IN VARCHAR2,
 54.1782 -   scorecard_ IN VARCHAR2,
 54.1783 -   year_ IN VARCHAR2,
 54.1784 -   version_ IN VARCHAR2,
 54.1785 -   scorecard_object_ IN VARCHAR2 )
 54.1786 -IS
 54.1787 -BEGIN
 54.1788 -   General_SYS.Init_Method(lu_name_, '&PKG', 'Exist', TRUE);
 54.1789 -   IF (NOT Check_Exist___(environment_, scorecard_, year_, version_, scorecard_object_)) THEN
 54.1790 -      Error_SYS.Record_Not_Exist(lu_name_);
 54.1791 -   END IF;
 54.1792 -END Exist;
 54.1793 -
 54.1794 ------------------------------------------------------------------------------
 54.1795 --------------------- PUBLIC TRANSLATION METHODS -----------------------------
 54.1796 ------------------------------------------------------------------------------
 54.1797 -PROCEDURE Language_Refreshed
 54.1798 -IS
 54.1799 -BEGIN
 54.1800 -   active_state_list_ := Language_SYS.Translate_State_(lu_name_, client_state_list_);
 54.1801 -END Language_Refreshed;
 54.1802 ------------------------------------------------------------------------------
 54.1803 --------------------- LU SPECIFIC IMPLEMENTATION METHODS ---------------------
 54.1804 ------------------------------------------------------------------------------
 54.1805 -
 54.1806 -
 54.1807 -PROCEDURE Distribute_Input_Values___ (
 54.1808 -   environment_ IN VARCHAR2,
 54.1809 -   scorecard_ IN VARCHAR2,
 54.1810 -   year_ IN VARCHAR2,
 54.1811 -   version_ IN VARCHAR2,
 54.1812 -   object_type_ IN VARCHAR2,
 54.1813 -   period_count_ IN NUMBER,
 54.1814 -   scorecard_object_ IN VARCHAR2 )
 54.1815 -IS
 54.1816 -   child_scr_                        VARCHAR2(20);
 54.1817 -
 54.1818 -
 54.1819 -   CURSOR get_child_scorecards IS        --- Move to scorecard
 54.1820 -   SELECT scorecard
 54.1821 -   FROM scorecard
 54.1822 -   WHERE parent=scorecard_
 54.1823 -   AND environment=environment_;
 54.1824 -
 54.1825 -   CURSOR get_open_child_scr IS
 54.1826 -   SELECT '1'
 54.1827 -   FROM scorecard
 54.1828 -   WHERE scorecard = child_scr_
 54.1829 -   AND environment=environment_
 54.1830 -   AND objstate NOT IN ('Open', 'Planned');
 54.1831 -
 54.1832 -   CURSOR get_input_values (scorecard_object_  VARCHAR2,temp_scorecard_  VARCHAR2) IS
 54.1833 -   SELECT year_value,p1_value,p2_value,p3_value,p4_value,p5_value,p6_value,
 54.1834 -          p7_value,p8_value,p9_value,p10_value,p11_value,p12_value
 54.1835 -   FROM scorecard_input_value_tab
 54.1836 -   WHERE environment = environment_
 54.1837 -   AND scorecard = temp_scorecard_
 54.1838 -   AND year = year_
 54.1839 -   AND version = version_
 54.1840 -   AND scorecard_object = scorecard_object_
 54.1841 -   AND object_type_=object_type_;
 54.1842 -
 54.1843 -   CURSOR get_attribute_value_sum(attribute_  VARCHAR2) IS
 54.1844 -   SELECT SUM(TO_NUMBER(value))
 54.1845 -   FROM scorecard_attribute_tab
 54.1846 -   WHERE environment=environment_
 54.1847 -   AND scorecard IN (SELECT scorecard
 54.1848 -                     FROM scorecard
 54.1849 -                     WHERE environment = environment_
 54.1850 -                     AND parent = scorecard_)
 54.1851 -   AND attribute=attribute_;
 54.1852 -
 54.1853 -   value_distribution_type_          VARCHAR2(20);
 54.1854 -   hierachical_dist_logic_           VARCHAR2(20);
 54.1855 -   distribution_version_             VARCHAR2(20);
 54.1856 -   distribution_attribute_           VARCHAR2(20);
 54.1857 -   temp_val_                         VARCHAR2(5);
 54.1858 -   newrec_                           SCORECARD_INPUT_VALUE_TAB%ROWTYPE;
 54.1859 -   oldrec_                           SCORECARD_INPUT_VALUE_TAB%ROWTYPE;
 54.1860 -   objid_                            VARCHAR2(2000);
 54.1861 -   attr_                             VARCHAR2(2000);
 54.1862 -   objversion_                       VARCHAR2(2000);
 54.1863 -   child_count_                      NUMBER;
 54.1864 -   temp_period_count_                NUMBER;
 54.1865 -   attribute_val_str_                VARCHAR2(2000);
 54.1866 -   attribute_value_                  NUMBER;
 54.1867 -   attribute_value_sum_              NUMBER;
 54.1868 -
 54.1869 -   parent_year_value_                NUMBER;
 54.1870 -   parent_p1_value_                  NUMBER;
 54.1871 -   parent_p2_value_                  NUMBER;
 54.1872 -   parent_p3_value_                  NUMBER;
 54.1873 -   parent_p4_value_                  NUMBER;
 54.1874 -   parent_p5_value_                  NUMBER;
 54.1875 -   parent_p6_value_                  NUMBER;
 54.1876 -   parent_p7_value_                  NUMBER;
 54.1877 -   parent_p8_value_                  NUMBER;
 54.1878 -   parent_p9_value_                  NUMBER;
 54.1879 -   parent_p10_value_                 NUMBER;
 54.1880 -   parent_p11_value_                 NUMBER;
 54.1881 -   parent_p12_value_                 NUMBER;
 54.1882 -
 54.1883 -   period_val_arr_                   PeriodValArrType;
 54.1884 -   TYPE ValArrType                   IS TABLE OF NUMBER
 54.1885 -                                     INDEX BY BINARY_INTEGER;
 54.1886 -   parent_val_arr_                   ValArrType;
 54.1887 -   child_val_arr_                    ValArrType;
 54.1888 -   year_value_                       NUMBER;
 54.1889 -
 54.1890 -BEGIN
 54.1891 -
 54.1892 -   Scorecard_Structure_API.Get_Dist_Logic_Details(value_distribution_type_,hierachical_dist_logic_,
 54.1893 -                                                    distribution_version_,distribution_attribute_,
 54.1894 -                                                    scorecard_,scorecard_object_,environment_,object_type_);
 54.1895 -
 54.1896 -   IF value_distribution_type_ IS NULL THEN
 54.1897 -      IF object_type_='MEASURE' THEN
 54.1898 -         Error_SYS.Appl_General(lu_name_,'VALDIST1: Value distribution type must have a value for measure :P1 in parent scorecard :P2.',scorecard_object_,scorecard_);
 54.1899 -      ELSE
 54.1900 -         Error_SYS.Appl_General(lu_name_,'VALDIST2: Value distribution type must have a value for component :P1 in parent scorecard :P2.',scorecard_object_,scorecard_);
 54.1901 -      END IF;
 54.1902 -   END IF;
 54.1903 -
 54.1904 -   OPEN get_input_values(scorecard_object_,scorecard_);
 54.1905 -   FETCH get_input_values INTO  parent_year_value_,parent_p1_value_,parent_p2_value_,parent_p3_value_,parent_p4_value_,
 54.1906 -                                parent_p5_value_,parent_p6_value_,parent_p7_value_,parent_p8_value_,parent_p9_value_,
 54.1907 -                                parent_p10_value_,parent_p11_value_,parent_p12_value_;
 54.1908 -   CLOSE get_input_values;
 54.1909 -
 54.1910 -    parent_val_arr_(1):=parent_p1_value_;
 54.1911 -    parent_val_arr_(2):=parent_p2_value_;
 54.1912 -    parent_val_arr_(3):=parent_p3_value_;
 54.1913 -    parent_val_arr_(4):=parent_p4_value_;
 54.1914 -    parent_val_arr_(5):=parent_p5_value_;
 54.1915 -    parent_val_arr_(6):=parent_p6_value_;
 54.1916 -    parent_val_arr_(7):=parent_p7_value_;
 54.1917 -    parent_val_arr_(8):=parent_p8_value_;
 54.1918 -    parent_val_arr_(9):=parent_p9_value_;
 54.1919 -    parent_val_arr_(10):=parent_p10_value_;
 54.1920 -    parent_val_arr_(11):=parent_p11_value_;
 54.1921 -    parent_val_arr_(12):=parent_p12_value_;
 54.1922 -    --END IF;
 54.1923 -
 54.1924 -    FOR temp_period_count_ IN 1..period_count_ LOOP
 54.1925 -       IF  parent_val_arr_(temp_period_count_) IS NULL THEN
 54.1926 -          Error_SYS.Appl_General(lu_name_,'PERVAL1: One or more periods in parent scorecard :P1 does not contain input values.',scorecard_);
 54.1927 -       END IF;
 54.1928 -    END LOOP;
 54.1929 -
 54.1930 -    child_count_:=Scorecard_API.Get_Child_Count(scorecard_,environment_);
 54.1931 -
 54.1932 -    FOR child_scorecards_ IN get_child_scorecards LOOP  -- fetch the child scorecards
 54.1933 -
 54.1934 -      year_value_:=0;
 54.1935 -      child_scr_ := child_scorecards_.scorecard;
 54.1936 -      OPEN get_open_child_scr;
 54.1937 -      FETCH get_open_child_scr INTO temp_val_;
 54.1938 -      CLOSE get_open_child_scr;
 54.1939 -
 54.1940 -      IF (temp_val_ = '1') THEN
 54.1941 -         Error_SYS.Appl_General(lu_name_,'TMPVAL: Not all scorecards in the hierarchy are opened for planning. Distribution not possible.');
 54.1942 -      END IF;
 54.1943 -
 54.1944 -      IF NOT Check_Exist___(environment_,child_scorecards_.scorecard,year_,version_,scorecard_object_) THEN
 54.1945 -         Error_SYS.Appl_General(lu_name_,'INPVAL: Scorecard object :P1 does not exist in scorecard :P2.',scorecard_object_,child_scorecards_.scorecard);
 54.1946 -
 54.1947 -      ELSE
 54.1948 -         oldrec_:=Lock_By_Keys___(environment_,child_scorecards_.scorecard,year_,version_,scorecard_object_);
 54.1949 -         child_val_arr_(1):=oldrec_.p1_value;
 54.1950 -         child_val_arr_(2):=oldrec_.p2_value;
 54.1951 -         child_val_arr_(3):=oldrec_.p3_value;
 54.1952 -         child_val_arr_(4):=oldrec_.p4_value;
 54.1953 -         child_val_arr_(5):=oldrec_.p5_value;
 54.1954 -         child_val_arr_(6):=oldrec_.p6_value;
 54.1955 -         child_val_arr_(7):=oldrec_.p7_value;
 54.1956 -         child_val_arr_(8):=oldrec_.p8_value;
 54.1957 -         child_val_arr_(9):=oldrec_.p9_value;
 54.1958 -         child_val_arr_(10):=oldrec_.p10_value;
 54.1959 -         child_val_arr_(11):=oldrec_.p11_value;
 54.1960 -         child_val_arr_(12):=oldrec_.p12_value;
 54.1961 -         newrec_:=oldrec_;
 54.1962 -         IF value_distribution_type_ = 'PERCENTAGE' THEN
 54.1963 -            IF hierachical_dist_logic_ IS NULL THEN
 54.1964 -              FOR temp_period_count_ IN 1..period_count_ LOOP
 54.1965 -                 child_val_arr_(temp_period_count_):=parent_val_arr_(temp_period_count_);
 54.1966 -                 year_value_:=year_value_ +child_val_arr_(temp_period_count_);
 54.1967 -              END LOOP;
 54.1968 -
 54.1969 -            ELSIF hierachical_dist_logic_='VERSION' THEN
 54.1970 -              IF distribution_version_ IS NULL THEN
 54.1971 -                 IF object_type_='MEASURE' THEN
 54.1972 -                    Error_SYS.Appl_General(lu_name_,'DISTVER1: Distribution version must have a value for measure :P1 in parent scorecard :P2.',scorecard_object_,scorecard_);
 54.1973 -                 ELSE
 54.1974 -                    Error_SYS.Appl_General(lu_name_,'DISTVER2: Distribution version must have a value for component :P1 in parent scorecard :P2.',scorecard_object_,scorecard_);
 54.1975 -                 END IF;
 54.1976 -              END IF;
 54.1977 -              Scorecard_Value_API.Get_Period_Values__ (period_val_arr_,child_scorecards_.scorecard,object_type_,
 54.1978 -                                                       period_count_,environment_,scorecard_,year_,
 54.1979 -                                                       distribution_version_,scorecard_object_);
 54.1980 -              FOR temp_period_count_ IN 1..period_count_ LOOP
 54.1981 -                 child_val_arr_(temp_period_count_):=parent_val_arr_(temp_period_count_)
 54.1982 -                                                    *(period_val_arr_(temp_period_count_).value
 54.1983 -                                                       /(period_val_arr_(temp_period_count_).sum/child_count_));
 54.1984 -                 year_value_:=year_value_ +child_val_arr_(temp_period_count_);
 54.1985 -              END LOOP;
 54.1986 -            ELSIF hierachical_dist_logic_='ATTRIBUTE' THEN
 54.1987 -              IF distribution_attribute_ IS NULL THEN
 54.1988 -                 IF object_type_='MEASURE' THEN
 54.1989 -                    Error_SYS.Appl_General(lu_name_,'DISTATTR1: Distribution attribute must have a value for measure :P1 in parent scorecard :P2.',scorecard_object_,scorecard_);
 54.1990 -                 ELSE
 54.1991 -                    Error_SYS.Appl_General(lu_name_,'DISTATTR2: Distribution attribute must have a value for component :P1 in parent scorecard :P2.',scorecard_object_,scorecard_);
 54.1992 -                 END IF;
 54.1993 -              END IF;
 54.1994 -
 54.1995 -              attribute_val_str_:=Scorecard_Attribute_API.Get_Value(environment_,child_scorecards_.scorecard,
 54.1996 -                                                                    distribution_attribute_);
 54.1997 -              IF attribute_val_str_ IS NULL THEN
 54.1998 -                 Error_SYS.Appl_General(lu_name_,'ATTRERR: Attribute :P1 must have a value in scorecard :P2.',distribution_attribute_,child_scorecards_.scorecard);
 54.1999 -              ELSE
 54.2000 -                 BEGIN
 54.2001 -                    attribute_value_:=TO_NUMBER(attribute_val_str_);
 54.2002 -                 EXCEPTION
 54.2003 -                    WHEN OTHERS THEN
 54.2004 -                       Error_SYS.Appl_General(lu_name_,'NUMVALERR: Value of the attribute :P1 in all child scorecards of parent scorecard :P2 must be numeric.',distribution_attribute_,scorecard_);
 54.2005 -                 END;
 54.2006 -              END IF;
 54.2007 -              BEGIN
 54.2008 -                 OPEN get_attribute_value_sum(distribution_attribute_);
 54.2009 -                 FETCH get_attribute_value_sum INTO attribute_value_sum_;
 54.2010 -                 CLOSE get_attribute_value_sum;
 54.2011 -
 54.2012 -                 IF attribute_value_sum_=0 THEN
 54.2013 -                     Error_SYS.Appl_General(lu_name_,'ATTRSUM : Attribute value of at least one child scorecard of parent scorecard :P1 must be greater than 0.');
 54.2014 -                 END IF;
 54.2015 -              EXCEPTION
 54.2016 -                 WHEN OTHERS THEN
 54.2017 -                    Error_SYS.Appl_General(lu_name_,'NUMVALERR: Value of the attribute :P1 in all child scorecards of parent scorecard :P2 must be numeric.',distribution_attribute_,scorecard_);
 54.2018 -              END;
 54.2019 -
 54.2020 -              FOR temp_period_count_ IN 1..period_count_ LOOP
 54.2021 -                 child_val_arr_(temp_period_count_):=parent_val_arr_(temp_period_count_)
 54.2022 -                                                    *(attribute_value_/(attribute_value_sum_/child_count_));
 54.2023 -                 year_value_:=year_value_ +child_val_arr_(temp_period_count_);
 54.2024 -              END LOOP;
 54.2025 -            END IF;
 54.2026 -            year_value_:=year_value_ /period_count_;
 54.2027 -         ELSIF value_distribution_type_ = 'VALUE' THEN
 54.2028 -            IF hierachical_dist_logic_ IS NULL THEN
 54.2029 -               FOR temp_period_count_ IN 1..period_count_ LOOP
 54.2030 -                  child_val_arr_(temp_period_count_):=parent_val_arr_(temp_period_count_)/child_count_;
 54.2031 -                  year_value_:=year_value_ +child_val_arr_(temp_period_count_);
 54.2032 -               END LOOP;
 54.2033 -            ELSIF hierachical_dist_logic_='VERSION' THEN
 54.2034 -               IF distribution_version_ IS NULL THEN
 54.2035 -                  IF object_type_='MEASURE' THEN
 54.2036 -                      Error_SYS.Appl_General(lu_name_,'DISTVER1: Distribution version must have a value for measure :P1 in parent scorecard :P2.',scorecard_object_,scorecard_);
 54.2037 -                   ELSE
 54.2038 -                      Error_SYS.Appl_General(lu_name_,'DISTVER2: Distribution version must have a value for component :P1 in parent scorecard :P2.',scorecard_object_,scorecard_);
 54.2039 -                 END IF;
 54.2040 -               END IF;
 54.2041 -               Scorecard_Value_API.Get_Period_Values__ (period_val_arr_,child_scorecards_.scorecard,object_type_,
 54.2042 -                                                       period_count_,environment_,scorecard_,year_,
 54.2043 -                                                       distribution_version_,scorecard_object_);
 54.2044 -               FOR temp_period_count_ IN 1..period_count_ LOOP
 54.2045 -                  child_val_arr_(temp_period_count_):=parent_val_arr_(temp_period_count_)
 54.2046 -                                                    *(period_val_arr_(temp_period_count_).value
 54.2047 -                                                      /period_val_arr_(temp_period_count_).sum);
 54.2048 -                  year_value_:=year_value_ +child_val_arr_(temp_period_count_);
 54.2049 -               END LOOP;
 54.2050 -            ELSIF hierachical_dist_logic_='ATTRIBUTE' THEN
 54.2051 -               IF distribution_attribute_ IS NULL THEN
 54.2052 -                  IF object_type_='MEASURE' THEN
 54.2053 -                     Error_SYS.Appl_General(lu_name_,'DISTATTR1: Distribution attribute must have a value for measure :P1 in parent scorecard :P2.',scorecard_object_,scorecard_);
 54.2054 -                  ELSE
 54.2055 -                     Error_SYS.Appl_General(lu_name_,'DISTATTR2: Distribution attribute must have a value for component :P1 in parent scorecard :P2.',scorecard_object_,scorecard_);
 54.2056 -                  END IF;
 54.2057 -               END IF;
 54.2058 -               attribute_val_str_:=Scorecard_Attribute_API.Get_Value(environment_,child_scorecards_.scorecard,
 54.2059 -                                                                    distribution_attribute_);
 54.2060 -               IF attribute_val_str_ IS NULL THEN
 54.2061 -                  Error_SYS.Appl_General(lu_name_,'ATTRERR: Attribute :P1 must have a value in scorecard :P2.',distribution_attribute_,child_scorecards_.scorecard);
 54.2062 -               ELSE
 54.2063 -                  BEGIN
 54.2064 -                     attribute_value_:=TO_NUMBER(attribute_val_str_);
 54.2065 -                  EXCEPTION
 54.2066 -                     WHEN OTHERS THEN
 54.2067 -	                    Error_SYS.Appl_General(lu_name_,'NUMVALERR: Value of the attribute :P1 in all child scorecards of parent scorecard :P2 must be numeric.',distribution_attribute_,scorecard_);
 54.2068 -                  END;
 54.2069 -               END IF;
 54.2070 -               BEGIN
 54.2071 -                  OPEN get_attribute_value_sum(distribution_attribute_);
 54.2072 -                  FETCH get_attribute_value_sum INTO attribute_value_sum_;
 54.2073 -                  CLOSE get_attribute_value_sum;
 54.2074 -
 54.2075 -                  IF attribute_value_sum_=0 THEN
 54.2076 -                     Error_SYS.Appl_General(lu_name_,'ATTRSUM : Attribute value of at least one child scorecard of parent scorecard :P1 must be greater than 0.');
 54.2077 -                  END IF;
 54.2078 -               EXCEPTION
 54.2079 -                  WHEN OTHERS THEN
 54.2080 -                     Error_SYS.Appl_General(lu_name_,'NUMVALERR: Value of the attribute :P1 in all child scorecards of parent scorecard :P2 must be numeric.',distribution_attribute_,scorecard_);
 54.2081 -               END;
 54.2082 -
 54.2083 -               FOR temp_period_count_ IN 1..period_count_ LOOP
 54.2084 -                  child_val_arr_(temp_period_count_):=parent_val_arr_(temp_period_count_)
 54.2085 -                                                     *(attribute_value_/attribute_value_sum_);
 54.2086 -                  year_value_:=year_value_ +child_val_arr_(temp_period_count_);
 54.2087 -               END LOOP;
 54.2088 -            END IF;
 54.2089 -         END IF;
 54.2090 -         newrec_.year_value:=year_value_;
 54.2091 -         newrec_.p1_value:=child_val_arr_(1);
 54.2092 -         newrec_.p2_value:=child_val_arr_(2);
 54.2093 -         newrec_.p3_value:=child_val_arr_(3);
 54.2094 -         newrec_.p4_value:=child_val_arr_(4);
 54.2095 -         newrec_.p5_value:=child_val_arr_(5);
 54.2096 -         newrec_.p6_value:=child_val_arr_(6);
 54.2097 -         newrec_.p7_value:=child_val_arr_(7);
 54.2098 -         newrec_.p8_value:=child_val_arr_(8);
 54.2099 -         newrec_.p9_value:=child_val_arr_(9);
 54.2100 -         newrec_.p10_value:=child_val_arr_(10);
 54.2101 -         newrec_.p11_value:=child_val_arr_(11);
 54.2102 -         newrec_.p12_value:=child_val_arr_(12);
 54.2103 -         Update___(objid_,oldrec_,newrec_,attr_,objversion_,TRUE);
 54.2104 -         Scorecard_api.Set_To_Planned(environment_,child_scorecards_.scorecard);
 54.2105 -         Scorecard_Input_Value_api.Set_To_Planned(environment_,child_scorecards_.scorecard,year_,version_,scorecard_object_);
 54.2106 -      END IF;
 54.2107 -   END LOOP;
 54.2108 -END Distribute_Input_Values___;
 54.2109 -PROCEDURE Object_Planned_Date___ (
 54.2110 -   rec_  IN     &TABLE%ROWTYPE,
 54.2111 -   attr_ IN OUT VARCHAR2 )
 54.2112 -IS
 54.2113 -   newrec_ &TABLE%ROWTYPE;
 54.2114 -BEGIN
 54.2115 -   newrec_ := rec_;
 54.2116 -   Finite_State_Set___(newrec_, 'Planned');
 54.2117 -END Object_Planned_Date___;
 54.2118 -
 54.2119 -FUNCTION Find_Column___(
 54.2120 -   environment_      IN VARCHAR2,
 54.2121 -   scorecard_        IN VARCHAR2,
 54.2122 -   year_             IN VARCHAR2,
 54.2123 -   version_          IN VARCHAR2,
 54.2124 -   scorecard_object_ IN VARCHAR2,
 54.2125 -   key_              IN VARCHAR2) RETURN VARCHAR2
 54.2126 -IS
 54.2127 -   CURSOR get_record IS
 54.2128 -      SELECT p1_key, p2_key, p3_key, p4_key, p5_key, p6_key,
 54.2129 -             p7_key, p8_key, p9_key, p10_key, p11_key, p12_key
 54.2130 -      FROM   &TABLE
 54.2131 -      WHERE  environment      = environment_
 54.2132 -      AND    scorecard        = scorecard_
 54.2133 -      AND    year             = year_
 54.2134 -      AND    version          = version_
 54.2135 -      AND    scorecard_object = scorecard_object_;
 54.2136 -
 54.2137 -   column_ VARCHAR2(30);
 54.2138 -BEGIN
 54.2139 -   FOR rec_ IN get_record LOOP
 54.2140 -      IF (rec_.p1_key = key_) THEN
 54.2141 -         column_ := 'P1_VALUE';
 54.2142 -      ELSIF (rec_.p2_key = key_) THEN
 54.2143 -         column_ := 'P2_VALUE';
 54.2144 -      ELSIF (rec_.p3_key = key_) THEN
 54.2145 -         column_ := 'P3_VALUE';
 54.2146 -      ELSIF (rec_.p4_key = key_) THEN
 54.2147 -         column_ := 'P4_VALUE';
 54.2148 -      ELSIF (rec_.p5_key = key_) THEN
 54.2149 -         column_ := 'P5_VALUE';
 54.2150 -      ELSIF (rec_.p6_key = key_) THEN
 54.2151 -         column_ := 'P6_VALUE';
 54.2152 -      ELSIF (rec_.p7_key = key_) THEN
 54.2153 -         column_ := 'P7_VALUE';
 54.2154 -      ELSIF (rec_.p8_key = key_) THEN
 54.2155 -         column_ := 'P8_VALUE';
 54.2156 -      ELSIF (rec_.p9_key = key_) THEN
 54.2157 -         column_ := 'P9_VALUE';
 54.2158 -      ELSIF (rec_.p10_key = key_) THEN
 54.2159 -         column_ := 'P10_VALUE';
 54.2160 -      ELSIF (rec_.p11_key = key_) THEN
 54.2161 -         column_ := 'P11_VALUE';
 54.2162 -      ELSIF (rec_.p12_key = key_) THEN
 54.2163 -         column_ := 'P12_VALUE';
 54.2164 -      END IF;
 54.2165 -   END LOOP;
 54.2166 -
 54.2167 -   RETURN column_;
 54.2168 -END Find_Column___;
 54.2169 ------------------------------------------------------------------------------
 54.2170 --------------------- LU SPECIFIC PRIVATE METHODS ----------------------------
 54.2171 ------------------------------------------------------------------------------
 54.2172 -
 54.2173 -
 54.2174 -PROCEDURE Update_Versions__ (
 54.2175 -   environment_ IN VARCHAR2,
 54.2176 -   scorecard_ IN VARCHAR2,
 54.2177 -   measure_ IN VARCHAR2,
 54.2178 -   object_type_ IN VARCHAR2,
 54.2179 -   period_ IN VARCHAR2,
 54.2180 -   version_ IN VARCHAR2,
 54.2181 -   version_value_ IN NUMBER,
 54.2182 -   plan_type_ IN VARCHAR2,
 54.2183 -   data_mart_ IN VARCHAR2 )
 54.2184 -IS
 54.2185 -  attr_               VARCHAR2(32000);
 54.2186 -  objid_              VARCHAR2(2000);
 54.2187 -  objversion_         VARCHAR2(2000);
 54.2188 -  info_               VARCHAR2(2000);
 54.2189 -BEGIN
 54.2190 -  General_SYS.Init_Method(lu_name_, '&PKG', 'Update_Versions__');
 54.2191 -  Client_SYS.Clear_Attr(attr_);
 54.2192 -  IF version_ = 'TAR' THEN
 54.2193 -     Client_SYS.Add_To_Attr('TARGET_VALUE', version_value_, attr_);
 54.2194 -  ELSIF version_ = 'ACT' THEN
 54.2195 -     Client_SYS.Add_To_Attr('ACTUAL_VALUE', version_value_, attr_);
 54.2196 -  ELSE
 54.2197 -     Client_SYS.Add_To_Attr(version_||'_VALUE', version_value_, attr_);
 54.2198 -  END IF;
 54.2199 -  IF data_mart_='TRUE' THEN
 54.2200 -     Bp_Scorecard_Fact_API.Get_Id_Version(objid_,objversion_,environment_,scorecard_,period_,object_type_,measure_);
 54.2201 -     Bp_Scorecard_Fact_API.Modify__(info_,objid_,objversion_,attr_,'DO');
 54.2202 -  ELSE
 54.2203 -     Scorecard_Value_API.Get_Id_Version(objid_,objversion_,environment_,scorecard_,period_,object_type_,measure_);
 54.2204 -     Scorecard_Value_API.Modify__(info_,objid_,objversion_,attr_,'DO');
 54.2205 -  END IF;
 54.2206 -END Update_Versions__;
 54.2207 -
 54.2208 -PROCEDURE Publish__ (
 54.2209 -   environment_ IN VARCHAR2,
 54.2210 -   scorecard_ IN VARCHAR2,
 54.2211 -   measure_ IN VARCHAR2,
 54.2212 -   object_type_ IN VARCHAR2,
 54.2213 -   period_ IN VARCHAR2,
 54.2214 -   version_ IN VARCHAR2,
 54.2215 -   value_ IN NUMBER,
 54.2216 -   plan_type_ IN VARCHAR2 )
 54.2217 -IS
 54.2218 -  attr_               VARCHAR2(32000);
 54.2219 -  objid_              VARCHAR2(2000);
 54.2220 -  objversion_         VARCHAR2(2000);
 54.2221 -  info_               VARCHAR2(2000);
 54.2222 -  flag_               VARCHAR2(5);
 54.2223 -  data_mart_enabled_  VARCHAR2(5);
 54.2224 -BEGIN
 54.2225 -   General_SYS.Init_Method(lu_name_, '&PKG', 'Publish__');
 54.2226 -   flag_ := 'TRUE';
 54.2227 -   data_mart_enabled_:= Scorecard_Environment_API.Get_Data_Mart(environment_);
 54.2228 -
 54.2229 -   IF data_mart_enabled_='TRUE' THEN
 54.2230 -      IF Bp_Scorecard_Fact_API.Check_Exist_By_Object(environment_,scorecard_,period_,object_type_,measure_)='FALSE' THEN
 54.2231 -         IF value_ IS NOT NULL THEN
 54.2232 -            Client_SYS.Clear_Attr(attr_);
 54.2233 -            Client_SYS.Add_To_Attr('ENVIRONMENT', environment_, attr_);
 54.2234 -            Client_SYS.Add_To_Attr('SCORECARD', scorecard_, attr_);
 54.2235 -            Client_SYS.Add_To_Attr('PERIOD', period_, attr_);
 54.2236 -            Client_SYS.Add_To_Attr(object_type_, measure_, attr_);
 54.2237 -            Bp_Scorecard_Fact_API.New__(info_,objid_,objversion_,attr_,'DO');
 54.2238 -         ELSE
 54.2239 -              flag_ := 'FALSE';
 54.2240 -           END IF;
 54.2241 -        END IF;
 54.2242 -     ELSE
 54.2243 -        IF Scorecard_Value_API.Check_Exist_By_Object(environment_,scorecard_,period_,object_type_,measure_)='FALSE' THEN
 54.2244 -           IF value_ IS NOT NULL THEN
 54.2245 -              Client_SYS.Clear_Attr(attr_);
 54.2246 -              Client_SYS.Add_To_Attr('ENVIRONMENT', environment_, attr_);
 54.2247 -              Client_SYS.Add_To_Attr('SCORECARD', scorecard_, attr_);
 54.2248 -              Client_SYS.Add_To_Attr('PERIOD', period_, attr_);
 54.2249 -              Client_SYS.Add_To_Attr(object_type_, measure_, attr_);
 54.2250 -              Scorecard_Value_API.New__(info_,objid_,objversion_,attr_,'DO');
 54.2251 -           ELSE
 54.2252 -              flag_ := 'FALSE';
 54.2253 -           END IF;
 54.2254 -        END IF;
 54.2255 -     END IF;
 54.2256 -
 54.2257 -     IF (flag_ = 'TRUE' AND value_ IS NOT NULL) THEN
 54.2258 -        Update_Versions__(environment_,scorecard_,measure_ ,object_type_, period_ , version_, value_ , plan_type_ ,data_mart_enabled_);
 54.2259 -     END IF;
 54.2260 -  flag_ := 'FALSE';
 54.2261 -END Publish__;
 54.2262 -PROCEDURE Publish_Score__ (
 54.2263 -   environment_ IN VARCHAR2,
 54.2264 -   scorecard_ IN VARCHAR2,
 54.2265 -   publish_type_ IN VARCHAR2 )
 54.2266 -IS
 54.2267 -  measure_ VARCHAR2(40);
 54.2268 -  version_ VARCHAR2(15);
 54.2269 -  target_tab_  VARCHAR2(30);
 54.2270 -
 54.2271 -  --get measures and components for a specific environment_, scorecard_
 54.2272 -  CURSOR get_measure IS
 54.2273 -     select * from scorecard_input_value_tab
 54.2274 -        where scorecard = scorecard_
 54.2275 -        and environment = environment_
 54.2276 -        order by scorecard_object;
 54.2277 -
 54.2278 -  -- get Id, version of a scorecard record by keys
 54.2279 -  CURSOR get_objid IS
 54.2280 -     select objid,objversion from scorecard
 54.2281 -        where scorecard = scorecard_
 54.2282 -        and environment = environment_;
 54.2283 -
 54.2284 -  attr_   VARCHAR2(32000);
 54.2285 -  objid_  VARCHAR2(32000);
 54.2286 -  objversion_ VARCHAR2(32000);
 54.2287 -  info_  VARCHAR2(2000);
 54.2288 -  isScorecardPlan VARCHAR2(5);
 54.2289 -  isEnvPlan VARCHAR2(5);
 54.2290 -BEGIN
 54.2291 -  General_SYS.Init_Method(lu_name_, '&PKG', 'Publish_Score__');
 54.2292 -  FOR get_rec_ in get_measure LOOP
 54.2293 -     isEnvPlan := 'FALSE';
 54.2294 -     isScorecardPlan := 'FALSE';
 54.2295 -
 54.2296 -     measure_ := get_rec_.scorecard_object;
 54.2297 -     version_ := get_rec_.version;
 54.2298 -     if publish_type_ = 'ENV' then  --plublish only environment plan data
 54.2299 -        isEnvPlan := MEASURE_VERSION_API.GET_ENVIRONMENT_PLANNING(version_,environment_);
 54.2300 -     else
 54.2301 -        isScorecardPlan := MEASURE_VERSION_API.Get_Scorecard_Planning (version_,environment_);
 54.2302 -     end if;
 54.2303 -
 54.2304 -     if (isScorecardPlan = 'TRUE' or isEnvPlan = 'TRUE' ) then
 54.2305 -
 54.2306 -        if get_rec_.p1_key is not null then
 54.2307 -           Publish__(environment_, scorecard_,measure_,  get_rec_.object_type, get_rec_.p1_key, version_ , get_rec_.p1_value,publish_type_);
 54.2308 -        end if;
 54.2309 -        if get_rec_.p2_key is not null then
 54.2310 -           Publish__(environment_, scorecard_,measure_, get_rec_.object_type ,get_rec_.p2_key, version_ , get_rec_.p2_value,publish_type_);
 54.2311 -        end if;
 54.2312 -        if get_rec_.p3_key is not null then
 54.2313 -           Publish__(environment_, scorecard_,measure_, get_rec_.object_type ,get_rec_.p3_key, version_ , get_rec_.p3_value,publish_type_);
 54.2314 -        end if;
 54.2315 -        if get_rec_.p4_key is not null then
 54.2316 -           Publish__(environment_, scorecard_,measure_, get_rec_.object_type,  get_rec_.p4_key, version_ , get_rec_.p4_value,publish_type_);
 54.2317 -        end if;
 54.2318 -       if get_rec_.p5_key is not null then
 54.2319 -           Publish__(environment_, scorecard_,measure_, get_rec_.object_type,  get_rec_.p5_key, version_ , get_rec_.p5_value,publish_type_);
 54.2320 -        end if;
 54.2321 -        if get_rec_.p6_key is not null then
 54.2322 -           Publish__(environment_, scorecard_,measure_,  get_rec_.object_type , get_rec_.p6_key, version_ , get_rec_.p6_value,publish_type_);
 54.2323 -        end if;
 54.2324 -        if get_rec_.p7_key is not null then
 54.2325 -           Publish__(environment_, scorecard_,measure_,  get_rec_.object_type , get_rec_.p7_key, version_ , get_rec_.p7_value,publish_type_);
 54.2326 -        end if;
 54.2327 -        if get_rec_.p8_key is not null then
 54.2328 -           Publish__(environment_, scorecard_,measure_,  get_rec_.object_type, get_rec_.p8_key, version_ , get_rec_.p8_value,publish_type_);
 54.2329 -        end if;
 54.2330 -        if get_rec_.p9_key is not null then
 54.2331 -           Publish__(environment_, scorecard_,measure_,  get_rec_.object_type , get_rec_.p9_key, version_ , get_rec_.p9_value,publish_type_);
 54.2332 -        end if;
 54.2333 -        if get_rec_.p10_key is not null then
 54.2334 -           Publish__(environment_, scorecard_,measure_,  get_rec_.object_type , get_rec_.p10_key, version_ , get_rec_.p10_value,publish_type_);
 54.2335 -        end if;
 54.2336 -        -- Call Id - 85775 Fix
 54.2337 -        if get_rec_.p11_key is not null then
 54.2338 -           Publish__(environment_, scorecard_,measure_,  get_rec_.object_type , get_rec_.p11_key, version_ , get_rec_.p11_value,publish_type_);
 54.2339 -        end if;
 54.2340 -        if get_rec_.p12_key is not null then
 54.2341 -           Publish__(environment_, scorecard_,measure_,  get_rec_.object_type , get_rec_.p12_key, version_ , get_rec_.p12_value,publish_type_);
 54.2342 -        end if;
 54.2343 -     end if;
 54.2344 -  END LOOP;
 54.2345 -  open get_objid;
 54.2346 -  fetch get_objid into objid_,objversion_;
 54.2347 -  close get_objid;
 54.2348 -
 54.2349 -  SCORECARD_API.MODIFY__(info_,objid_,objversion_,attr_,'DO');
 54.2350 -
 54.2351 -  isScorecardPlan := 'FALSE';
 54.2352 -END Publish_Score__;
 54.2353 -PROCEDURE Start_Publish_Environments__ (
 54.2354 -   attr_ IN VARCHAR2 )
 54.2355 -IS
 54.2356 -   new_attr_ VARCHAR2(32000) := attr_;
 54.2357 -   desc_     VARCHAR2(2000);
 54.2358 -BEGIN
 54.2359 -   General_SYS.Init_Method(lu_name_, '&PKG', 'Start_Publish_Environments__');
 54.2360 -   desc_ := Language_SYS.Translate_Constant (lu_name_, 'BGJOB_INPUTSSC:Publish Environment.');
 54.2361 -   Transaction_SYS.Deferred_Call ('Scorecard_Input_Value_API.Set_Publish_Environments__',new_attr_, desc_);
 54.2362 -END Start_Publish_Environments__;
 54.2363 -PROCEDURE Set_Publish_Environments__ (
 54.2364 -   attr_ IN VARCHAR2 )
 54.2365 -IS
 54.2366 -   env VARCHAR2(20);
 54.2367 -
 54.2368 -BEGIN
 54.2369 -   General_SYS.Init_Method(lu_name_, '&PKG', 'Set_Publish_Environments__');
 54.2370 -   env:=Client_SYS.Get_Item_Value('ENVIRONMENT',attr_);
 54.2371 -   Publish_Environment(env);
 54.2372 -
 54.2373 -END Set_Publish_Environments__;
 54.2374 -PROCEDURE Start_Publish_Scorecards__ (
 54.2375 -   attr_ IN VARCHAR2 )
 54.2376 -IS
 54.2377 -   new_attr_ VARCHAR2(32000) := attr_;
 54.2378 -   desc_     VARCHAR2(2000);
 54.2379 -BEGIN
 54.2380 -   General_SYS.Init_Method(lu_name_, '&PKG', 'Start_Publish_Scorecards__');
 54.2381 -   desc_ := Language_SYS.Translate_Constant (lu_name_, 'BGJOB_INPUTSSC:Publish Scorecards.');
 54.2382 -   Transaction_SYS.Deferred_Call ('Scorecard_Input_Value_API.Prepare_Scorecard_Publish__',new_attr_, desc_);
 54.2383 -END Start_Publish_Scorecards__;
 54.2384 -PROCEDURE Prepare_Scorecard_Publish__ (
 54.2385 -   attr_ IN VARCHAR2 )
 54.2386 -IS
 54.2387 -   env_ VARCHAR2(2000);
 54.2388 -   scr_ VARCHAR2(2000);
 54.2389 -BEGIN
 54.2390 -   General_SYS.Init_Method(lu_name_, '&PKG', 'Prepare_Scorecard_Publish__');
 54.2391 -   env_:=Client_SYS.Get_Item_Value('ENVIRONMENT',attr_);
 54.2392 -   scr_:=Client_SYS.Get_Item_Value('SCORECARD',attr_);
 54.2393 -   Set_Publish_Scorecards(env_,scr_);
 54.2394 -END Prepare_Scorecard_Publish__;
 54.2395 -PROCEDURE Plan__ (
 54.2396 -   info_       OUT    VARCHAR2,
 54.2397 -   objid_      IN     VARCHAR2,
 54.2398 -   objversion_ IN OUT VARCHAR2,
 54.2399 -   attr_       IN OUT VARCHAR2,
 54.2400 -   action_     IN     VARCHAR2 )
 54.2401 -IS
 54.2402 -   rec_ &TABLE%ROWTYPE;
 54.2403 -BEGIN
 54.2404 -   General_SYS.Init_Method(lu_name_, '&PKG', 'Plan__');
 54.2405 -   IF (action_ = 'CHECK') THEN
 54.2406 -      NULL;
 54.2407 -   ELSIF (action_ = 'DO') THEN
 54.2408 -      rec_ := Lock_By_Id___(objid_, objversion_);
 54.2409 -      Finite_State_Machine___(rec_, 'Plan', attr_);
 54.2410 -      objversion_ := to_char(rec_.rowversion,'YYYYMMDDHH24MISS');
 54.2411 -      Finite_State_Add_To_Attr___(rec_, attr_);
 54.2412 -   END IF;
 54.2413 -   info_ := Client_SYS.Get_All_Info;
 54.2414 -END Plan__;
 54.2415 ------------------------------------------------------------------------------
 54.2416 --------------------- LU SPECIFIC PROTECTED METHODS --------------------------
 54.2417 ------------------------------------------------------------------------------
 54.2418 -
 54.2419 -
 54.2420 ------------------------------------------------------------------------------
 54.2421 --------------------- LU SPECIFIC PUBLIC METHODS -----------------------------
 54.2422 ------------------------------------------------------------------------------
 54.2423 -
 54.2424 -
 54.2425 -FUNCTION Get_Year (
 54.2426 -   environment_ IN VARCHAR2,
 54.2427 -   scorecard_ IN VARCHAR2,
 54.2428 -   year_ IN VARCHAR2,
 54.2429 -   version_ IN VARCHAR2,
 54.2430 -   scorecard_object_ IN VARCHAR2 ) RETURN VARCHAR2
 54.2431 -IS
 54.2432 -   temp_ &TABLE..year%TYPE;
 54.2433 -   CURSOR get_attr IS
 54.2434 -      SELECT year
 54.2435 -      FROM &TABLE
 54.2436 -      WHERE environment = environment_
 54.2437 -      AND   scorecard = scorecard_
 54.2438 -      AND   year = year_
 54.2439 -      AND   version = version_
 54.2440 -      AND   scorecard_object = scorecard_object_;
 54.2441 -BEGIN
 54.2442 -   OPEN get_attr;
 54.2443 -   FETCH get_attr INTO temp_;
 54.2444 -   CLOSE get_attr;
 54.2445 -   RETURN temp_;
 54.2446 -END Get_Year;
 54.2447 -FUNCTION Get_Distributed_Attr (
 54.2448 -   environment_ IN VARCHAR2,
 54.2449 -   scorecard_ IN VARCHAR2,
 54.2450 -   component_ IN VARCHAR2,
 54.2451 -   year_ IN VARCHAR2,
 54.2452 -   year_value_ IN NUMBER ) RETURN VARCHAR2
 54.2453 -IS
 54.2454 -   period_                  VARCHAR2(20);
 54.2455 -   version_val_             NUMBER;
 54.2456 -   distribute_string_       VARCHAR2(2000);
 54.2457 -   index_value_             NUMBER;
 54.2458 -   distribute_val_          NUMBER;
 54.2459 -   total_val_               NUMBER;
 54.2460 -   --distribute_str_       VARCHAR2(20);
 54.2461 -
 54.2462 -   CURSOR version_cur_ IS
 54.2463 -      SELECT period,v4_value
 54.2464 -      FROM scorecard_value11
 54.2465 -      WHERE environment = environment_
 54.2466 -      AND scorecard = scorecard_
 54.2467 -      AND component = component_
 54.2468 -      AND year = year_;
 54.2469 -
 54.2470 -      CURSOR total_cur_ IS
 54.2471 -      SELECT sum(v4_value)
 54.2472 -      FROM scorecard_value11
 54.2473 -      WHERE environment = environment_
 54.2474 -      AND scorecard = scorecard_
 54.2475 -      AND component = component_
 54.2476 -      AND year = year_;
 54.2477 -BEGIN
 54.2478 -   General_SYS.Init_Method(lu_name_, '&PKG', 'Get_Distributed_Attr');
 54.2479 -   OPEN total_cur_;
 54.2480 -     FETCH total_cur_ INTO total_val_;
 54.2481 -   CLOSE total_cur_;
 54.2482 -   IF total_val_ IS NULL THEN
 54.2483 -      Error_SYS.Appl_General(lu_name_,'SCDISVAL : There are no values for version6');
 54.2484 -   END IF;
 54.2485 -
 54.2486 -  --distribute_string_ := "";
 54.2487 -
 54.2488 -  FOR temp_ IN version_cur_ LOOP
 54.2489 -
 54.2490 -  version_val_ := temp_.v4_value;
 54.2491 -  period_  := temp_.period;
 54.2492 -  index_value_   := scorecard_index_api.Get_Value(environment_,period_,'k_index');
 54.2493 -  distribute_val_ := (version_val_/total_val_)*year_value_*index_value_;
 54.2494 -  distribute_string_ := distribute_string_ || '^' ||distribute_val_;
 54.2495 -
 54.2496 -  END LOOP;
 54.2497 -  RETURN distribute_string_;
 54.2498 -END Get_Distributed_Attr;
 54.2499 -FUNCTION Get_Action (
 54.2500 -   environment_ IN VARCHAR2,
 54.2501 -   scorecard_ IN VARCHAR2,
 54.2502 -   year_ IN VARCHAR2,
 54.2503 -   version_ IN VARCHAR2,
 54.2504 -   scorecard_object_ IN VARCHAR2 ) RETURN VARCHAR2
 54.2505 -IS
 54.2506 -   temp_ &TABLE..action%TYPE;
 54.2507 -   CURSOR get_attr IS
 54.2508 -      SELECT action
 54.2509 -      FROM &TABLE
 54.2510 -      WHERE environment = environment_
 54.2511 -      AND   scorecard = scorecard_
 54.2512 -      AND   year = year_
 54.2513 -      AND   version = version_
 54.2514 -      AND   scorecard_object = scorecard_object_;
 54.2515 -BEGIN
 54.2516 -   OPEN get_attr;
 54.2517 -   FETCH get_attr INTO temp_;
 54.2518 -   CLOSE get_attr;
 54.2519 -   RETURN temp_;
 54.2520 -END Get_Action;
 54.2521 -FUNCTION Get_Mea_State_Change_Date (
 54.2522 -   environment_ IN VARCHAR2,
 54.2523 -   scorecard_ IN VARCHAR2,
 54.2524 -   year_ IN VARCHAR2,
 54.2525 -   version_ IN VARCHAR2,
 54.2526 -   scorecard_object_ IN VARCHAR2 ) RETURN DATE
 54.2527 -IS
 54.2528 -   temp_ &TABLE..mea_state_change_date%TYPE;
 54.2529 -   CURSOR get_attr IS
 54.2530 -      SELECT mea_state_change_date
 54.2531 -      FROM &TABLE
 54.2532 -      WHERE environment = environment_
 54.2533 -      AND   scorecard = scorecard_
 54.2534 -      AND   year = year_
 54.2535 -      AND   version = version_
 54.2536 -      AND   scorecard_object = scorecard_object_;
 54.2537 -BEGIN
 54.2538 -   OPEN get_attr;
 54.2539 -   FETCH get_attr INTO temp_;
 54.2540 -   CLOSE get_attr;
 54.2541 -   RETURN temp_;
 54.2542 -END Get_Mea_State_Change_Date;
 54.2543 -FUNCTION Get_Budget_Version (
 54.2544 -   environment_ IN VARCHAR2,
 54.2545 -   scorecard_ IN VARCHAR2,
 54.2546 -   year_ IN VARCHAR2,
 54.2547 -   version_ IN VARCHAR2,
 54.2548 -   scorecard_object_ IN VARCHAR2 ) RETURN VARCHAR2
 54.2549 -IS
 54.2550 -   temp_ &TABLE..budget_version%TYPE;
 54.2551 -   CURSOR get_attr IS
 54.2552 -      SELECT budget_version
 54.2553 -      FROM &TABLE
 54.2554 -      WHERE environment = environment_
 54.2555 -      AND   scorecard = scorecard_
 54.2556 -      AND   year = year_
 54.2557 -      AND   version = version_
 54.2558 -      AND   scorecard_object = scorecard_object_;
 54.2559 -BEGIN
 54.2560 -   OPEN get_attr;
 54.2561 -   FETCH get_attr INTO temp_;
 54.2562 -   CLOSE get_attr;
 54.2563 -   RETURN temp_;
 54.2564 -END Get_Budget_Version;
 54.2565 -PROCEDURE Update_Sales_Values (
 54.2566 -   environment_ IN VARCHAR2,
 54.2567 -   scorecard_ IN VARCHAR2,
 54.2568 -   year_ IN VARCHAR2,
 54.2569 -   version_ IN VARCHAR2,
 54.2570 -   component_ IN VARCHAR2,
 54.2571 -   year_value_ IN NUMBER,
 54.2572 -   period_count_ IN NUMBER,
 54.2573 -   from_where_ IN VARCHAR2,
 54.2574 -   action_value_ IN VARCHAR2 )
 54.2575 -IS
 54.2576 -   period_                  VARCHAR2(20);
 54.2577 -   version_val_             NUMBER;
 54.2578 -   distribute_string_       VARCHAR2(2000);
 54.2579 -   index_value_             NUMBER;
 54.2580 -   distribute_val_          NUMBER;
 54.2581 -   total_val_               NUMBER;
 54.2582 -   total_dist_val_          NUMBER;
 54.2583 -   avarage_val_             NUMBER;
 54.2584 -   count_null_              NUMBER;
 54.2585 -   total_index_             NUMBER;
 54.2586 -   period_index_            VARCHAR2(20);
 54.2587 -   avarage_index_val_       NUMBER;
 54.2588 -   distribute_index_val_    NUMBER;
 54.2589 -   index_val_               NUMBER;
 54.2590 -
 54.2591 -   count_                   NUMBER;
 54.2592 -   dist_type_               VARCHAR2(30);
 54.2593 -   dist_index_              VARCHAR2(20);
 54.2594 -   dist_version_            VARCHAR2(20);
 54.2595 -   dist_ver_                VARCHAR2(10);
 54.2596 -   dist_logic_              VARCHAR2(10);
 54.2597 -   temp1_                   VARCHAR2(1000);
 54.2598 -   temp2_                   VARCHAR2(1000);
 54.2599 -
 54.2600 -   TYPE RefCurTyp IS REF CURSOR;
 54.2601 -
 54.2602 -   version_cur_      RefCurTyp;
 54.2603 -   total_cur_        RefCurTyp;
 54.2604 -
 54.2605 -   TYPE Val_Array_Type IS TABLE OF NUMBER
 54.2606 -            INDEX BY BINARY_INTEGER;
 54.2607 -
 54.2608 -   val_arr_  Val_Array_Type;
 54.2609 -   rec_        SCORECARD_INPUT_VALUE_TAB%ROWTYPE;
 54.2610 -
 54.2611 -   CURSOR total_index_cur_ IS
 54.2612 -      SELECT SUM(value)
 54.2613 -      FROM scorecard_index_tab
 54.2614 -      WHERE environment = environment_
 54.2615 -      AND index_type = dist_index_;
 54.2616 -
 54.2617 -   CURSOR get_period IS
 54.2618 -      SELECT period
 54.2619 -      FROM scorecard_period_tab
 54.2620 -      WHERE environment = environment_
 54.2621 -      AND year = year_
 54.2622 -      ORDER BY end_date;
 54.2623 -
 54.2624 -   -- Bug 65540, begin
 54.2625 -   final_year_value_      NUMBER;
 54.2626 -   measure_format_        NUMBER;
 54.2627 -   -- Bug 65540, end
 54.2628 -
 54.2629 -
 54.2630 -BEGIN
 54.2631 -   General_SYS.Init_Method(lu_name_, '&PKG', 'Update_Sales_Values');
 54.2632 -   rec_ := Lock_By_Keys___(environment_,scorecard_,year_,version_,component_);
 54.2633 -   count_ := 0;
 54.2634 -   --val_arr_  Val_Array_Type;
 54.2635 -
 54.2636 -   IF (from_where_ = 'FROM_COMPONENT') THEN
 54.2637 -
 54.2638 -   dist_type_ := measure_type_api.Encode(scorecard_Measure_api.Get_Measure_type(component_));
 54.2639 -   dist_index_ := scorecard_Structure_api.Get_Distribution_Index(scorecard_,component_,environment_,Scorecard_Level_Type_api.Decode('COMPONENT'));
 54.2640 -   dist_ver_ := UPPER(scorecard_Structure_api.Get_Distribution_Version(scorecard_,component_,environment_,Scorecard_Level_Type_api.Decode('COMPONENT')));
 54.2641 -   dist_logic_ := scorecard_Structure_api.Get_Dist_Logic_Db(scorecard_,component_,environment_,'COMPONENT');
 54.2642 -
 54.2643 -   END IF;
 54.2644 -
 54.2645 -   IF (from_where_ = 'FROM_MEASURE') THEN
 54.2646 -
 54.2647 -   dist_type_  := measure_type_api.Encode(scorecard_Measure_api.Get_Measure_type(component_));
 54.2648 -   dist_index_ := scorecard_Structure_api.Get_Distribution_Index(scorecard_,component_,environment_,Scorecard_Level_Type_api.Decode('MEASURE'));
 54.2649 -   dist_ver_   := UPPER(scorecard_Structure_api.Get_Distribution_Version(scorecard_,component_,environment_,Scorecard_Level_Type_api.Decode('MEASURE')));
 54.2650 -   dist_logic_ := scorecard_Structure_api.Get_Dist_Logic_Db(scorecard_,component_,environment_,'MEASURE');
 54.2651 -
 54.2652 -   END IF;
 54.2653 -
 54.2654 -   IF (dist_logic_ = 'INDEX') THEN
 54.2655 -
 54.2656 -      OPEN total_index_cur_;
 54.2657 -         FETCH total_index_cur_ INTO total_index_;
 54.2658 -      CLOSE total_index_cur_;
 54.2659 -
 54.2660 -      IF (total_index_ IS NULL) THEN
 54.2661 -         Error_SYS.Appl_General(lu_name_,'SCDISVAL : There are no values for indexes :P1',dist_index_);
 54.2662 -      END IF;
 54.2663 -
 54.2664 -      total_dist_val_ := 0;
 54.2665 -      avarage_index_val_ := 0;
 54.2666 -      distribute_index_val_ := 0;
 54.2667 -
 54.2668 -      OPEN get_period;
 54.2669 -      LOOP
 54.2670 -         FETCH get_period INTO period_index_;
 54.2671 -            EXIT WHEN get_period%NOTFOUND;
 54.2672 -         count_ := count_+1;
 54.2673 -         index_value_   := scorecard_index_api.Get_Value(environment_,period_index_,dist_index_);
 54.2674 -         IF (index_value_ IS NULL) THEN
 54.2675 -            CLOSE get_period;
 54.2676 -            Error_SYS.Appl_General(lu_name_,'SCDISNOINDEXVAL1 : There are no values for index :P1',dist_index_);
 54.2677 -         END IF;
 54.2678 -         IF (dist_type_ = 'PERCENTAGE') THEN
 54.2679 -            avarage_index_val_ := total_index_/period_count_;
 54.2680 -            distribute_index_val_ := (index_value_/avarage_index_val_)*year_value_;
 54.2681 -         ELSIF (dist_type_ = 'VALUE') THEN
 54.2682 -            distribute_index_val_ := (index_value_/total_index_)*year_value_;
 54.2683 -         END IF;
 54.2684 -         val_arr_(count_) := distribute_index_val_;
 54.2685 -         total_dist_val_ := total_dist_val_ + distribute_index_val_;
 54.2686 -      END LOOP;
 54.2687 -      CLOSE get_period;
 54.2688 -   ELSIF (dist_logic_ != 'INDEX') THEN
 54.2689 -      IF (dist_ver_ = 'ACT') THEN
 54.2690 -          dist_version_ := 'actual_value';
 54.2691 -      ELSIF (dist_ver_ = 'TAR') THEN
 54.2692 -          dist_version_ := 'target_value';
 54.2693 -      ELSIF (dist_ver_ = 'V1') THEN
 54.2694 -          dist_version_ := 'v1_value';
 54.2695 -      ELSIF (dist_ver_ = 'V2') THEN
 54.2696 -          dist_version_ := 'v2_value';
 54.2697 -      ELSIF (dist_ver_ = 'V3') THEN
 54.2698 -          dist_version_ := 'v3_value';
 54.2699 -      ELSIF (dist_ver_ = 'V4') THEN
 54.2700 -          dist_version_ := 'v4_value';
 54.2701 -      ELSIF (dist_ver_ = 'V5') THEN
 54.2702 -          dist_version_ := 'v5_value';
 54.2703 -      ELSIF (dist_ver_ = 'V6') THEN
 54.2704 -          dist_version_ := 'v6_value';
 54.2705 -      ELSIF (dist_ver_ = 'V7') THEN
 54.2706 -          dist_version_ := 'v7_value';
 54.2707 -      ELSIF (dist_ver_ = 'V8') THEN
 54.2708 -          dist_version_ := 'v8_value';
 54.2709 -      ELSIF (dist_ver_ = 'V9') THEN
 54.2710 -          dist_version_ := 'v9_value';
 54.2711 -      ELSIF (dist_ver_ = 'V10') THEN
 54.2712 -          dist_version_ := 'v10_value';
 54.2713 -      END IF;
 54.2714 -
 54.2715 -      IF( from_where_= 'FROM_COMPONENT') THEN
 54.2716 -         temp1_  := 'SELECT period,'|| dist_version_ ||'
 54.2717 -                    FROM  scorecard_value11
 54.2718 -                    WHERE environment= :p_environment
 54.2719 -                    AND   scorecard = :p_scorecard
 54.2720 -                    AND   component = :p_component
 54.2721 -                    AND   year = :p_year
 54.2722 -                    ORDER BY end_date';
 54.2723 -
 54.2724 -         temp2_  := 'SELECT sum('|| dist_version_ ||') '||'
 54.2725 -                    FROM  scorecard_value11
 54.2726 -                    WHERE environment= :p_environment
 54.2727 -                    AND   scorecard  = :p_scorecard
 54.2728 -                    AND   component  = :p_component
 54.2729 -                    AND   year = :p_year ';
 54.2730 -      END IF;
 54.2731 -
 54.2732 -      IF( from_where_= 'FROM_MEASURE') THEN
 54.2733 -         temp1_  := 'SELECT period,'|| dist_version_ ||'
 54.2734 -                    FROM  scorecard_value11
 54.2735 -                    WHERE environment= :p_environment
 54.2736 -                    AND   scorecard = :p_scorecard
 54.2737 -                    AND   measure = :p_component
 54.2738 -                    AND   year = :p_year
 54.2739 -                    ORDER BY end_date';
 54.2740 -
 54.2741 -         temp2_  := 'SELECT sum('|| dist_version_ ||') '||'
 54.2742 -                    FROM  scorecard_value11
 54.2743 -                    WHERE environment= :p_environment
 54.2744 -                    AND   scorecard = :p_scorecard
 54.2745 -                    AND   measure = :p_component
 54.2746 -                    AND   year = :p_year ';
 54.2747 -      END IF;
 54.2748 -
 54.2749 -      -- ifs_assert_safe shsalk 20060117
 54.2750 -      OPEN total_cur_ FOR temp2_ USING environment_,scorecard_,component_,year_;
 54.2751 -         FETCH total_cur_ INTO total_val_;
 54.2752 -      CLOSE total_cur_;
 54.2753 -
 54.2754 -      IF (total_val_ IS NULL) THEN
 54.2755 -         Error_SYS.Appl_General(lu_name_,'SCDISVAL : There are no values for distribution version :P1',dist_ver_);
 54.2756 -      END IF;
 54.2757 -
 54.2758 -      total_dist_val_ := 0;
 54.2759 -      avarage_val_ := 0;
 54.2760 -      -- ifs_assert_safe shsalk 20060117
 54.2761 -      OPEN version_cur_ FOR temp1_ USING environment_,scorecard_,component_,year_;
 54.2762 -      LOOP
 54.2763 -         FETCH version_cur_ INTO period_,version_val_;
 54.2764 -            EXIT WHEN version_cur_%NOTFOUND;
 54.2765 -         count_ := count_+1;
 54.2766 -         IF (version_val_ IS NULL) THEN
 54.2767 -            CLOSE version_cur_;
 54.2768 -            Error_SYS.Appl_General(lu_name_,'SCDISNOVAL1 : There are no values for distribution version :P1',dist_ver_);
 54.2769 -         ELSE
 54.2770 -            IF (dist_logic_ = 'SYB') THEN
 54.2771 -               index_value_   := scorecard_index_api.Get_Value(environment_,period_,dist_index_);
 54.2772 -               IF (index_value_ IS NULL) THEN
 54.2773 -                  CLOSE version_cur_;
 54.2774 -                  Error_SYS.Appl_General(lu_name_,'SCDISNOINDEXVAL1 : There are no values for distribution index :P1',dist_index_);
 54.2775 -               END IF;
 54.2776 -               IF (dist_type_ = 'PERCENTAGE') THEN
 54.2777 -                  avarage_val_ := total_val_/period_count_;
 54.2778 -                  distribute_val_ := (version_val_/avarage_val_)*year_value_*index_value_;
 54.2779 -               ELSIF (dist_type_ = 'VALUE') THEN
 54.2780 -                  distribute_val_ := (version_val_/total_val_)*year_value_*index_value_;
 54.2781 -               END IF;
 54.2782 -            ELSIF (dist_logic_ = 'VERSION') THEN
 54.2783 -               IF (dist_type_ = 'PERCENTAGE') THEN
 54.2784 -                  avarage_val_ := total_val_/period_count_;
 54.2785 -                  distribute_val_ := (version_val_/avarage_val_)*year_value_;
 54.2786 -               ELSIF (dist_type_ = 'VALUE') THEN
 54.2787 -                  distribute_val_ := (version_val_/total_val_)*year_value_;
 54.2788 -               END IF;
 54.2789 -            END IF;
 54.2790 -         END IF;
 54.2791 -
 54.2792 -         val_arr_(count_) := distribute_val_;
 54.2793 -         total_dist_val_ := total_dist_val_ + distribute_val_;
 54.2794 -      END LOOP;
 54.2795 -      CLOSE version_cur_;
 54.2796 -   END IF;
 54.2797 -
 54.2798 -
 54.2799 -   measure_format_      := TO_NUMBER(Scorecard_Measure_API.Get_Measure_Format(component_));
 54.2800 -
 54.2801 -   final_year_value_    := year_value_ * measure_format_;
 54.2802 -
 54.2803 -   IF (dist_logic_ != 'VERSION') THEN
 54.2804 -
 54.2805 -      IF (dist_type_ = 'PERCENTAGE') THEN
 54.2806 -         total_dist_val_ := total_dist_val_/count_;
 54.2807 -      END IF;
 54.2808 -
 54.2809 -      IF (year_value_ != total_dist_val_) THEN
 54.2810 -         FOR i IN 1..count_ LOOP
 54.2811 -            val_arr_(i) := (val_arr_(i)/total_dist_val_)*year_value_ * measure_format_;
 54.2812 -         END LOOP;
 54.2813 -      END IF;
 54.2814 -   END IF;
 54.2815 -
 54.2816 -   IF (count_= 1) THEN
 54.2817 -     UPDATE scorecard_input_value_tab
 54.2818 -          SET action = action_value_,
 54.2819 -                 year_value = final_year_value_,
 54.2820 -                 p1_value = val_arr_(1)
 54.2821 -             WHERE
 54.2822 -                 environment = environment_
 54.2823 -             AND
 54.2824 -                 scorecard = scorecard_
 54.2825 -             AND
 54.2826 -                 year = year_
 54.2827 -             AND
 54.2828 -                 version = version_
 54.2829 -             AND
 54.2830 -                 scorecard_object = component_;
 54.2831 -   ELSIF (count_= 2) THEN
 54.2832 -     UPDATE scorecard_input_value_tab
 54.2833 -          SET action = action_value_,
 54.2834 -                 year_value = final_year_value_,
 54.2835 -                 p1_value = val_arr_(1),
 54.2836 -                 p2_value = val_arr_(2)
 54.2837 -             WHERE
 54.2838 -                 environment = environment_
 54.2839 -             AND
 54.2840 -                 scorecard = scorecard_
 54.2841 -             AND
 54.2842 -                 year = year_
 54.2843 -             AND
 54.2844 -                 version = version_
 54.2845 -             AND
 54.2846 -                 scorecard_object = component_;
 54.2847 -   ELSIF (count_= 3) THEN
 54.2848 -     UPDATE scorecard_input_value_tab
 54.2849 -             SET action = action_value_,
 54.2850 -                 year_value = final_year_value_,
 54.2851 -                 p1_value = val_arr_(1),
 54.2852 -                 p2_value = val_arr_(2),
 54.2853 -                 p3_value = val_arr_(3)
 54.2854 -             WHERE
 54.2855 -                 environment = environment_
 54.2856 -             AND
 54.2857 -                 scorecard = scorecard_
 54.2858 -             AND
 54.2859 -                 year = year_
 54.2860 -             AND
 54.2861 -                 version = version_
 54.2862 -             AND
 54.2863 -                 scorecard_object = component_;
 54.2864 -   ELSIF (count_= 4) THEN
 54.2865 -     UPDATE scorecard_input_value_tab
 54.2866 -             SET action = action_value_,
 54.2867 -                 year_value = final_year_value_,
 54.2868 -                 p1_value = val_arr_(1),
 54.2869 -                 p2_value = val_arr_(2),
 54.2870 -                 p3_value = val_arr_(3),
 54.2871 -                 p4_value = val_arr_(4)
 54.2872 -             WHERE
 54.2873 -                 environment = environment_
 54.2874 -             AND
 54.2875 -                 scorecard = scorecard_
 54.2876 -             AND
 54.2877 -                 year = year_
 54.2878 -             AND
 54.2879 -                 version = version_
 54.2880 -             AND
 54.2881 -                 scorecard_object = component_;
 54.2882 -   ELSIF (count_= 5) THEN
 54.2883 -     UPDATE scorecard_input_value_tab
 54.2884 -             SET action = final_year_value_,
 54.2885 -                 year_value = year_value_,
 54.2886 -                 p1_value = val_arr_(1),
 54.2887 -                 p2_value = val_arr_(2),
 54.2888 -                 p3_value = val_arr_(3),
 54.2889 -                 p4_value = val_arr_(4),
 54.2890 -                 p5_value = val_arr_(5)
 54.2891 -             WHERE
 54.2892 -                 environment = environment_
 54.2893 -             AND
 54.2894 -                 scorecard = scorecard_
 54.2895 -             AND
 54.2896 -                 year = year_
 54.2897 -             AND
 54.2898 -                 version = version_
 54.2899 -             AND
 54.2900 -                 scorecard_object = component_;
 54.2901 -   ELSIF (count_= 6) THEN
 54.2902 -     UPDATE scorecard_input_value_tab
 54.2903 -             SET action = action_value_,
 54.2904 -                 year_value = final_year_value_,
 54.2905 -                 p1_value = val_arr_(1),
 54.2906 -                 p2_value = val_arr_(2),
 54.2907 -                 p3_value = val_arr_(3),
 54.2908 -                 p4_value = val_arr_(4),
 54.2909 -                 p5_value = val_arr_(5),
 54.2910 -                 p6_value = val_arr_(6)
 54.2911 -             WHERE
 54.2912 -                 environment = environment_
 54.2913 -             AND
 54.2914 -                 scorecard = scorecard_
 54.2915 -             AND
 54.2916 -                 year = year_
 54.2917 -             AND
 54.2918 -                 version = version_
 54.2919 -             AND
 54.2920 -                 scorecard_object = component_;
 54.2921 -   ELSIF (count_= 7) THEN
 54.2922 -     UPDATE scorecard_input_value_tab
 54.2923 -             SET action = action_value_,
 54.2924 -                 year_value = final_year_value_,
 54.2925 -                 p1_value = val_arr_(1),
 54.2926 -                 p2_value = val_arr_(2),
 54.2927 -                 p3_value = val_arr_(3),
 54.2928 -                 p4_value = val_arr_(4),
 54.2929 -                 p5_value = val_arr_(5),
 54.2930 -                 p6_value = val_arr_(6),
 54.2931 -                 p7_value = val_arr_(7)
 54.2932 -             WHERE
 54.2933 -                 environment = environment_
 54.2934 -             AND
 54.2935 -                 scorecard = scorecard_
 54.2936 -             AND
 54.2937 -                 year = year_
 54.2938 -             AND
 54.2939 -                 version = version_
 54.2940 -             AND
 54.2941 -                 scorecard_object = component_;
 54.2942 -   ELSIF (count_= 8) THEN
 54.2943 -     UPDATE scorecard_input_value_tab
 54.2944 -             SET action = action_value_,
 54.2945 -                 year_value = final_year_value_,
 54.2946 -                 p1_value = val_arr_(1),
 54.2947 -                 p2_value = val_arr_(2),
 54.2948 -                 p3_value = val_arr_(3),
 54.2949 -                 p4_value = val_arr_(4),
 54.2950 -                 p5_value = val_arr_(5),
 54.2951 -                 p6_value = val_arr_(6),
 54.2952 -                 p7_value = val_arr_(7),
 54.2953 -                 p8_value = val_arr_(8)
 54.2954 -             WHERE
 54.2955 -                 environment = environment_
 54.2956 -             AND
 54.2957 -                 scorecard = scorecard_
 54.2958 -             AND
 54.2959 -                 year = year_
 54.2960 -             AND
 54.2961 -                 version = version_
 54.2962 -             AND
 54.2963 -                 scorecard_object = component_;
 54.2964 -   ELSIF (count_= 9) THEN
 54.2965 -     UPDATE scorecard_input_value_tab
 54.2966 -             SET action = action_value_,
 54.2967 -                 year_value = final_year_value_,
 54.2968 -                 p1_value = val_arr_(1),
 54.2969 -                 p2_value = val_arr_(2),
 54.2970 -                 p3_value = val_arr_(3),
 54.2971 -                 p4_value = val_arr_(4),
 54.2972 -                 p5_value = val_arr_(5),
 54.2973 -                 p6_value = val_arr_(6),
 54.2974 -                 p7_value = val_arr_(7),
 54.2975 -                 p8_value = val_arr_(8),
 54.2976 -                 p9_value = val_arr_(9)
 54.2977 -             WHERE
 54.2978 -                 environment = environment_
 54.2979 -             AND
 54.2980 -                 scorecard = scorecard_
 54.2981 -             AND
 54.2982 -                 year = year_
 54.2983 -             AND
 54.2984 -                 version = version_
 54.2985 -             AND
 54.2986 -                 scorecard_object = component_;
 54.2987 -   ELSIF (count_= 10) THEN
 54.2988 -     UPDATE scorecard_input_value_tab
 54.2989 -             SET action = action_value_,
 54.2990 -                 year_value = final_year_value_,
 54.2991 -                 p1_value = val_arr_(1),
 54.2992 -                 p2_value = val_arr_(2),
 54.2993 -                 p3_value = val_arr_(3),
 54.2994 -                 p4_value = val_arr_(4),
 54.2995 -                 p5_value = val_arr_(5),
 54.2996 -                 p6_value = val_arr_(6),
 54.2997 -                 p7_value = val_arr_(7),
 54.2998 -                 p8_value = val_arr_(8),
 54.2999 -                 p9_value = val_arr_(9),
 54.3000 -                 p10_value = val_arr_(10)
 54.3001 -             WHERE
 54.3002 -                 environment = environment_
 54.3003 -             AND
 54.3004 -                 scorecard = scorecard_
 54.3005 -             AND
 54.3006 -                 year = year_
 54.3007 -             AND
 54.3008 -                 version = version_
 54.3009 -             AND
 54.3010 -                 scorecard_object = component_;
 54.3011 -   ELSIF (count_= 11) THEN
 54.3012 -      UPDATE scorecard_input_value_tab
 54.3013 -             SET action = action_value_,
 54.3014 -                 year_value = final_year_value_,
 54.3015 -                 p1_value = val_arr_(1),
 54.3016 -                 p2_value = val_arr_(2),
 54.3017 -                 p3_value = val_arr_(3),
 54.3018 -                 p4_value = val_arr_(4),
 54.3019 -                 p5_value = val_arr_(5),
 54.3020 -                 p6_value = val_arr_(6),
 54.3021 -                 p7_value = val_arr_(7),
 54.3022 -                 p8_value = val_arr_(8),
 54.3023 -                 p9_value = val_arr_(9),
 54.3024 -                 p10_value = val_arr_(10),
 54.3025 -                 p11_value = val_arr_(11)
 54.3026 -             WHERE
 54.3027 -                 environment = environment_
 54.3028 -             AND
 54.3029 -                 scorecard = scorecard_
 54.3030 -             AND
 54.3031 -                 year = year_
 54.3032 -             AND
 54.3033 -                 version = version_
 54.3034 -             AND
 54.3035 -                 scorecard_object = component_;
 54.3036 -   ELSIF (count_= 12) THEN
 54.3037 -      UPDATE scorecard_input_value_tab
 54.3038 -             SET action = action_value_,
 54.3039 -                 year_value = final_year_value_,
 54.3040 -                 p1_value = val_arr_(1),
 54.3041 -                 p2_value = val_arr_(2),
 54.3042 -                 p3_value = val_arr_(3),
 54.3043 -                 p4_value = val_arr_(4),
 54.3044 -                 p5_value = val_arr_(5),
 54.3045 -                 p6_value = val_arr_(6),
 54.3046 -                 p7_value = val_arr_(7),
 54.3047 -                 p8_value = val_arr_(8),
 54.3048 -                 p9_value = val_arr_(9),
 54.3049 -                 p10_value = val_arr_(10),
 54.3050 -                 p11_value = val_arr_(11),
 54.3051 -                 p12_value = val_arr_(12)
 54.3052 -             WHERE
 54.3053 -                 environment = environment_
 54.3054 -             AND
 54.3055 -                 scorecard = scorecard_
 54.3056 -             AND
 54.3057 -                 year = year_
 54.3058 -             AND
 54.3059 -                 version = version_
 54.3060 -             AND
 54.3061 -                 scorecard_object = component_;
 54.3062 -      END IF;
 54.3063 -
 54.3064 -END Update_Sales_Values;
 54.3065 -PROCEDURE Update_Distributed_Values (
 54.3066 -   environment_ IN VARCHAR2,
 54.3067 -   scorecard_ IN VARCHAR2,
 54.3068 -   year_ IN VARCHAR2,
 54.3069 -   version_ IN VARCHAR2,
 54.3070 -   component_ IN VARCHAR2,
 54.3071 -   year_value_ IN NUMBER,
 54.3072 -   period_count_ IN NUMBER,
 54.3073 -   from_where_ IN VARCHAR2,
 54.3074 -   action_value_ IN VARCHAR2 )
 54.3075 -IS
 54.3076 -   dist_type_               VARCHAR2(30);
 54.3077 -   dist_logic_              VARCHAR2(10);
 54.3078 -   mean_value_              NUMBER;
 54.3079 -   reference_type_          VARCHAR2(10);
 54.3080 -   ref_type_                VARCHAR2(10);
 54.3081 -   rec_        SCORECARD_INPUT_VALUE_TAB%ROWTYPE;
 54.3082 -   measure_format_          NUMBER;
 54.3083 -   final_year_value_        NUMBER;
 54.3084 -
 54.3085 -BEGIN
 54.3086 -   General_SYS.Init_Method(lu_name_, '&PKG', 'Update_Distributed_Values');
 54.3087 -   rec_ := Lock_By_Keys___(environment_,scorecard_,year_,version_,component_);
 54.3088 -
 54.3089 -   IF (action_value_ = 'TRUE') THEN
 54.3090 -
 54.3091 -      measure_format_      := TO_NUMBER(Scorecard_Measure_API.Get_Measure_Format(component_));
 54.3092 -      IF(from_where_ = 'FROM_COMPONENT') THEN
 54.3093 -         reference_type_ := scorecard_structure_api.Get_Planning_Type_Db(scorecard_,component_,environment_,'COMPONENT');
 54.3094 -         ref_type_ := NVL(reference_type_,'BASE');
 54.3095 -      END IF;
 54.3096 -
 54.3097 -      IF(from_where_ = 'FROM_MEASURE') THEN
 54.3098 -         ref_type_ := 'BASE';
 54.3099 -      END IF;
 54.3100 -
 54.3101 -      IF NOT(ref_type_ = 'REFERENCE') THEN
 54.3102 -
 54.3103 -         IF (from_where_ = 'FROM_COMPONENT') THEN
 54.3104 -
 54.3105 -         dist_type_ := measure_type_api.Encode(scorecard_Measure_api.Get_Measure_type(component_));
 54.3106 -         dist_logic_ := scorecard_Structure_api.Get_Dist_Logic_Db(scorecard_,component_,environment_,'COMPONENT');
 54.3107 -
 54.3108 -         END IF;
 54.3109 -
 54.3110 -         IF (from_where_ = 'FROM_MEASURE') THEN
 54.3111 -
 54.3112 -         dist_type_ := measure_type_api.Encode(scorecard_Measure_api.Get_Measure_type(component_));
 54.3113 -         dist_logic_ := scorecard_Structure_api.Get_Dist_Logic_Db(scorecard_,component_,environment_,'MEASURE');
 54.3114 -
 54.3115 -         END IF;
 54.3116 -
 54.3117 -         final_year_value_ := year_value_ * measure_format_;
 54.3118 -         IF (year_value_ IS NULL) THEN
 54.3119 -            UPDATE scorecard_input_value_tab
 54.3120 -                SET year_value = final_year_value_
 54.3121 -                WHERE
 54.3122 -                    environment = environment_
 54.3123 -                AND
 54.3124 -                 scorecard = scorecard_
 54.3125 -                AND
 54.3126 -                 year = year_
 54.3127 -                AND
 54.3128 -                 version = version_
 54.3129 -                AND
 54.3130 -                 scorecard_object = component_;
 54.3131 -         ELSE
 54.3132 -            IF (dist_type_ = 'PERCENTAGE' AND dist_logic_ IS NULL) THEN
 54.3133 -               IF (period_count_ = 1) THEN
 54.3134 -                   UPDATE scorecard_input_value_tab
 54.3135 -                   SET action = final_year_value_,
 54.3136 -                       year_value = final_year_value_,
 54.3137 -                       p1_value = final_year_value_
 54.3138 -                   WHERE
 54.3139 -                       environment = environment_
 54.3140 -                   AND
 54.3141 -                       scorecard = scorecard_
 54.3142 -                   AND
 54.3143 -                       year = year_
 54.3144 -                   AND
 54.3145 -                       version = version_
 54.3146 -                   AND
 54.3147 -                    scorecard_object = component_;
 54.3148 -               ELSIF (period_count_ = 2) THEN
 54.3149 -                   UPDATE scorecard_input_value_tab
 54.3150 -                   SET action = action_value_,
 54.3151 -                       year_value = final_year_value_,
 54.3152 -                       p1_value = final_year_value_,
 54.3153 -                       p2_value = final_year_value_
 54.3154 -                   WHERE
 54.3155 -                       environment = environment_
 54.3156 -                   AND
 54.3157 -                       scorecard = scorecard_
 54.3158 -                   AND
 54.3159 -                       year = year_
 54.3160 -                   AND
 54.3161 -                       version = version_
 54.3162 -                   AND
 54.3163 -                       scorecard_object = component_;
 54.3164 -               ELSIF (period_count_ = 3) THEN
 54.3165 -                   UPDATE scorecard_input_value_tab
 54.3166 -                   SET action = action_value_,
 54.3167 -                       year_value = final_year_value_,
 54.3168 -                       p1_value = final_year_value_,
 54.3169 -                       p2_value = final_year_value_,
 54.3170 -                       p3_value = final_year_value_
 54.3171 -                   WHERE
 54.3172 -                       environment = environment_
 54.3173 -                   AND
 54.3174 -                       scorecard = scorecard_
 54.3175 -                   AND
 54.3176 -                       year = year_
 54.3177 -                   AND
 54.3178 -                       version = version_
 54.3179 -                   AND
 54.3180 -                       scorecard_object = component_;
 54.3181 -               ELSIF (period_count_ = 4) THEN
 54.3182 -                   UPDATE scorecard_input_value_tab
 54.3183 -                   SET action = action_value_,
 54.3184 -                       year_value = final_year_value_,
 54.3185 -                       p1_value = final_year_value_,
 54.3186 -                       p2_value = final_year_value_,
 54.3187 -                       p3_value = final_year_value_,
 54.3188 -                       p4_value = final_year_value_
 54.3189 -                   WHERE
 54.3190 -                       environment = environment_
 54.3191 -                   AND
 54.3192 -                       scorecard = scorecard_
 54.3193 -                   AND
 54.3194 -                       year = year_
 54.3195 -                   AND
 54.3196 -                       version = version_
 54.3197 -                   AND
 54.3198 -                       scorecard_object = component_;
 54.3199 -               ELSIF (period_count_ = 5) THEN
 54.3200 -                   UPDATE scorecard_input_value_tab
 54.3201 -                   SET action = action_value_,
 54.3202 -                       year_value = final_year_value_,
 54.3203 -                       p1_value = final_year_value_,
 54.3204 -                       p2_value = final_year_value_,
 54.3205 -                       p3_value = final_year_value_,
 54.3206 -                       p4_value = final_year_value_,
 54.3207 -                       p5_value = final_year_value_
 54.3208 -                   WHERE
 54.3209 -                       environment = environment_
 54.3210 -                   AND
 54.3211 -                       scorecard = scorecard_
 54.3212 -                   AND
 54.3213 -                       year = year_
 54.3214 -                   AND
 54.3215 -                       version = version_
 54.3216 -                   AND
 54.3217 -                       scorecard_object = component_;
 54.3218 -               ELSIF (period_count_ = 6) THEN
 54.3219 -                   UPDATE scorecard_input_value_tab
 54.3220 -                   SET action = action_value_,
 54.3221 -                       year_value = final_year_value_,
 54.3222 -                       p1_value = final_year_value_,
 54.3223 -                       p2_value = final_year_value_,
 54.3224 -                       p3_value = final_year_value_,
 54.3225 -                       p4_value = final_year_value_,
 54.3226 -                       p5_value = final_year_value_,
 54.3227 -                       p6_value = final_year_value_
 54.3228 -                   WHERE
 54.3229 -                       environment = environment_
 54.3230 -                   AND
 54.3231 -                       scorecard = scorecard_
 54.3232 -                   AND
 54.3233 -                       year = year_
 54.3234 -                   AND
 54.3235 -                       version = version_
 54.3236 -                   AND
 54.3237 -                       scorecard_object = component_;
 54.3238 -               ELSIF (period_count_ = 7) THEN
 54.3239 -                   UPDATE scorecard_input_value_tab
 54.3240 -                   SET action = action_value_,
 54.3241 -                       year_value = final_year_value_,
 54.3242 -                       p1_value = final_year_value_,
 54.3243 -                       p2_value = final_year_value_,
 54.3244 -                       p3_value = final_year_value_,
 54.3245 -                       p4_value = final_year_value_,
 54.3246 -                       p5_value = final_year_value_,
 54.3247 -                       p6_value = final_year_value_,
 54.3248 -                       p7_value = final_year_value_
 54.3249 -                   WHERE
 54.3250 -                       environment = environment_
 54.3251 -                   AND
 54.3252 -                       scorecard = scorecard_
 54.3253 -                   AND
 54.3254 -                       year = year_
 54.3255 -                   AND
 54.3256 -                       version = version_
 54.3257 -                   AND
 54.3258 -                       scorecard_object = component_;
 54.3259 -               ELSIF (period_count_ = 8) THEN
 54.3260 -                   UPDATE scorecard_input_value_tab
 54.3261 -                   SET action = action_value_,
 54.3262 -                       year_value = final_year_value_,
 54.3263 -                       p1_value = final_year_value_,
 54.3264 -                       p2_value = final_year_value_,
 54.3265 -                       p3_value = final_year_value_,
 54.3266 -                       p4_value = final_year_value_,
 54.3267 -                       p5_value = final_year_value_,
 54.3268 -                       p6_value = final_year_value_,
 54.3269 -                       p7_value = final_year_value_,
 54.3270 -                       p8_value = final_year_value_
 54.3271 -                   WHERE
 54.3272 -                       environment = environment_
 54.3273 -                   AND
 54.3274 -                       scorecard = scorecard_
 54.3275 -                   AND
 54.3276 -                       year = year_
 54.3277 -                   AND
 54.3278 -                       version = version_
 54.3279 -                   AND
 54.3280 -                       scorecard_object = component_;
 54.3281 -               ELSIF (period_count_ = 9) THEN
 54.3282 -                   UPDATE scorecard_input_value_tab
 54.3283 -                   SET action = action_value_,
 54.3284 -                       year_value = final_year_value_,
 54.3285 -                       p1_value = final_year_value_,
 54.3286 -                       p2_value = final_year_value_,
 54.3287 -                       p3_value = final_year_value_,
 54.3288 -                       p4_value = final_year_value_,
 54.3289 -                       p5_value = final_year_value_,
 54.3290 -                       p6_value = final_year_value_,
 54.3291 -                       p7_value = final_year_value_,
 54.3292 -                       p8_value = final_year_value_,
 54.3293 -                       p9_value = final_year_value_
 54.3294 -                   WHERE
 54.3295 -                       environment = environment_
 54.3296 -                   AND
 54.3297 -                       scorecard = scorecard_
 54.3298 -                   AND
 54.3299 -                       year = year_
 54.3300 -                   AND
 54.3301 -                       version = version_
 54.3302 -                   AND
 54.3303 -                       scorecard_object = component_;
 54.3304 -               ELSIF (period_count_ = 10) THEN
 54.3305 -                   UPDATE scorecard_input_value_tab
 54.3306 -                   SET action = action_value_,
 54.3307 -                       year_value = final_year_value_,
 54.3308 -                       p1_value = final_year_value_,
 54.3309 -                       p2_value = final_year_value_,
 54.3310 -                       p3_value = final_year_value_,
 54.3311 -                       p4_value = final_year_value_,
 54.3312 -                       p5_value = final_year_value_,
 54.3313 -                       p6_value = final_year_value_,
 54.3314 -                       p7_value = final_year_value_,
 54.3315 -                       p8_value = final_year_value_,
 54.3316 -                       p9_value = final_year_value_,
 54.3317 -                       p10_value = final_year_value_
 54.3318 -                   WHERE
 54.3319 -                       environment = environment_
 54.3320 -                   AND
 54.3321 -                       scorecard = scorecard_
 54.3322 -                   AND
 54.3323 -                       year = year_
 54.3324 -                   AND
 54.3325 -                       version = version_
 54.3326 -                   AND
 54.3327 -                       scorecard_object = component_;
 54.3328 -             ELSIF (period_count_ = 11) THEN
 54.3329 -                   UPDATE scorecard_input_value_tab
 54.3330 -                   SET action = action_value_,
 54.3331 -                       year_value = final_year_value_,
 54.3332 -                       p1_value = final_year_value_,
 54.3333 -                       p2_value = final_year_value_,
 54.3334 -                       p3_value = final_year_value_,
 54.3335 -                       p4_value = final_year_value_,
 54.3336 -                       p5_value = final_year_value_,
 54.3337 -                       p6_value = final_year_value_,
 54.3338 -                       p7_value = final_year_value_,
 54.3339 -                       p8_value = final_year_value_,
 54.3340 -                       p9_value = final_year_value_,
 54.3341 -                       p10_value = final_year_value_,
 54.3342 -                       p11_value = final_year_value_
 54.3343 -                   WHERE
 54.3344 -                       environment = environment_
 54.3345 -                   AND
 54.3346 -                       scorecard = scorecard_
 54.3347 -                   AND
 54.3348 -                       year = year_
 54.3349 -                   AND
 54.3350 -                       version = version_
 54.3351 -                   AND
 54.3352 -                       scorecard_object = component_;
 54.3353 -               ELSIF (period_count_ = 12) THEN
 54.3354 -                   UPDATE scorecard_input_value_tab
 54.3355 -                   SET action = action_value_,
 54.3356 -                       year_value = final_year_value_,
 54.3357 -                       p1_value = final_year_value_,
 54.3358 -                       p2_value = final_year_value_,
 54.3359 -                       p3_value = final_year_value_,
 54.3360 -                       p4_value = final_year_value_,
 54.3361 -                       p5_value = final_year_value_,
 54.3362 -                       p6_value = final_year_value_,
 54.3363 -                       p7_value = final_year_value_,
 54.3364 -                       p8_value = final_year_value_,
 54.3365 -                       p9_value = final_year_value_,
 54.3366 -                       p10_value = final_year_value_,
 54.3367 -                       p11_value = final_year_value_,
 54.3368 -                       p12_value = final_year_value_
 54.3369 -                   WHERE
 54.3370 -                       environment = environment_
 54.3371 -                   AND
 54.3372 -                       scorecard = scorecard_
 54.3373 -                   AND
 54.3374 -                       year = year_
 54.3375 -                   AND
 54.3376 -                       version = version_
 54.3377 -                   AND
 54.3378 -                       scorecard_object = component_;
 54.3379 -               END IF;
 54.3380 -
 54.3381 -
 54.3382 -            ELSIF (dist_type_ = 'VALUE' AND dist_logic_ IS NULL) THEN
 54.3383 -               mean_value_ := (year_value_ * measure_format_)/period_count_;
 54.3384 -               IF (period_count_ = 1) THEN
 54.3385 -                   UPDATE scorecard_input_value_tab
 54.3386 -                   SET action = action_value_,
 54.3387 -                       year_value = final_year_value_,
 54.3388 -                       p1_value = mean_value_
 54.3389 -                   WHERE
 54.3390 -                       environment = environment_
 54.3391 -                   AND
 54.3392 -                       scorecard = scorecard_
 54.3393 -                   AND
 54.3394 -                       year = year_
 54.3395 -                   AND
 54.3396 -                       version = version_
 54.3397 -                   AND
 54.3398 -                       scorecard_object = component_;
 54.3399 -               ELSIF (period_count_ = 2) THEN
 54.3400 -                   UPDATE scorecard_input_value_tab
 54.3401 -                   SET action = action_value_,
 54.3402 -                       year_value = final_year_value_,
 54.3403 -                       p1_value = mean_value_,
 54.3404 -                       p2_value = mean_value_
 54.3405 -                   WHERE
 54.3406 -                       environment = environment_
 54.3407 -                   AND
 54.3408 -                       scorecard = scorecard_
 54.3409 -                   AND
 54.3410 -                       year = year_
 54.3411 -                   AND
 54.3412 -                       version = version_
 54.3413 -                   AND
 54.3414 -                       scorecard_object = component_;
 54.3415 -               ELSIF (period_count_ = 3) THEN
 54.3416 -                   UPDATE scorecard_input_value_tab
 54.3417 -                   SET action = action_value_,
 54.3418 -                       year_value = final_year_value_,
 54.3419 -                       p1_value = mean_value_,
 54.3420 -                       p2_value = mean_value_,
 54.3421 -                       p3_value = mean_value_
 54.3422 -                   WHERE
 54.3423 -                       environment = environment_
 54.3424 -                   AND
 54.3425 -                       scorecard = scorecard_
 54.3426 -                   AND
 54.3427 -                       year = year_
 54.3428 -                   AND
 54.3429 -                       version = version_
 54.3430 -                   AND
 54.3431 -                       scorecard_object = component_;
 54.3432 -               ELSIF (period_count_ = 4) THEN
 54.3433 -                   UPDATE scorecard_input_value_tab
 54.3434 -                   SET action = action_value_,
 54.3435 -                       year_value = final_year_value_,
 54.3436 -                       p1_value = mean_value_,
 54.3437 -                       p2_value = mean_value_,
 54.3438 -                       p3_value = mean_value_,
 54.3439 -                       p4_value = mean_value_
 54.3440 -                   WHERE
 54.3441 -                       environment = environment_
 54.3442 -                   AND
 54.3443 -                       scorecard = scorecard_
 54.3444 -                   AND
 54.3445 -                       year = year_
 54.3446 -                   AND
 54.3447 -                       version = version_
 54.3448 -                   AND
 54.3449 -                       scorecard_object = component_;
 54.3450 -               ELSIF (period_count_ = 5) THEN
 54.3451 -                   UPDATE scorecard_input_value_tab
 54.3452 -                   SET action = action_value_,
 54.3453 -                       year_value = final_year_value_,
 54.3454 -                       p1_value = mean_value_,
 54.3455 -                       p2_value = mean_value_,
 54.3456 -                       p3_value = mean_value_,
 54.3457 -                       p4_value = mean_value_,
 54.3458 -                       p5_value = mean_value_
 54.3459 -                   WHERE
 54.3460 -                       environment = environment_
 54.3461 -                   AND
 54.3462 -                       scorecard = scorecard_
 54.3463 -                   AND
 54.3464 -                       year = year_
 54.3465 -                   AND
 54.3466 -                       version = version_
 54.3467 -                   AND
 54.3468 -                       scorecard_object = component_;
 54.3469 -               ELSIF (period_count_ = 6) THEN
 54.3470 -                   UPDATE scorecard_input_value_tab
 54.3471 -                   SET action = action_value_,
 54.3472 -                       year_value = final_year_value_,
 54.3473 -                       p1_value = mean_value_,
 54.3474 -                       p2_value = mean_value_,
 54.3475 -                       p3_value = mean_value_,
 54.3476 -                       p4_value = mean_value_,
 54.3477 -                       p5_value = mean_value_,
 54.3478 -                       p6_value = mean_value_
 54.3479 -                   WHERE
 54.3480 -                       environment = environment_
 54.3481 -                   AND
 54.3482 -                       scorecard = scorecard_
 54.3483 -                   AND
 54.3484 -                       year = year_
 54.3485 -                   AND
 54.3486 -                       version = version_
 54.3487 -                   AND
 54.3488 -                       scorecard_object = component_;
 54.3489 -               ELSIF (period_count_ = 7) THEN
 54.3490 -                   UPDATE scorecard_input_value_tab
 54.3491 -                   SET action = action_value_,
 54.3492 -                       year_value = final_year_value_,
 54.3493 -                       p1_value = mean_value_,
 54.3494 -                       p2_value = mean_value_,
 54.3495 -                       p3_value = mean_value_,
 54.3496 -                       p4_value = mean_value_,
 54.3497 -                       p5_value = mean_value_,
 54.3498 -                       p6_value = mean_value_,
 54.3499 -                       p7_value = mean_value_
 54.3500 -                   WHERE
 54.3501 -                       environment = environment_
 54.3502 -                   AND
 54.3503 -                       scorecard = scorecard_
 54.3504 -                   AND
 54.3505 -                       year = year_
 54.3506 -                   AND
 54.3507 -                       version = version_
 54.3508 -                   AND
 54.3509 -                       scorecard_object = component_;
 54.3510 -               ELSIF (period_count_ = 8) THEN
 54.3511 -                   UPDATE scorecard_input_value_tab
 54.3512 -                   SET action = action_value_,
 54.3513 -                       year_value = final_year_value_,
 54.3514 -                       p1_value = mean_value_,
 54.3515 -                       p2_value = mean_value_,
 54.3516 -                       p3_value = mean_value_,
 54.3517 -                       p4_value = mean_value_,
 54.3518 -                       p5_value = mean_value_,
 54.3519 -                       p6_value = mean_value_,
 54.3520 -                       p7_value = mean_value_,
 54.3521 -                       p8_value = mean_value_
 54.3522 -                   WHERE
 54.3523 -                       environment = environment_
 54.3524 -                   AND
 54.3525 -                       scorecard = scorecard_
 54.3526 -                   AND
 54.3527 -                       year = year_
 54.3528 -                   AND
 54.3529 -                       version = version_
 54.3530 -                   AND
 54.3531 -                       scorecard_object = component_;
 54.3532 -               ELSIF (period_count_ = 9) THEN
 54.3533 -                   UPDATE scorecard_input_value_tab
 54.3534 -                   SET action = action_value_,
 54.3535 -                       year_value = final_year_value_,
 54.3536 -                       p1_value = mean_value_,
 54.3537 -                       p2_value = mean_value_,
 54.3538 -                       p3_value = mean_value_,
 54.3539 -                       p4_value = mean_value_,
 54.3540 -                       p5_value = mean_value_,
 54.3541 -                       p6_value = mean_value_,
 54.3542 -                       p7_value = mean_value_,
 54.3543 -                       p8_value = mean_value_,
 54.3544 -                       p9_value = mean_value_
 54.3545 -                   WHERE
 54.3546 -                       environment = environment_
 54.3547 -                   AND
 54.3548 -                       scorecard = scorecard_
 54.3549 -                   AND
 54.3550 -                       year = year_
 54.3551 -                   AND
 54.3552 -                       version = version_
 54.3553 -                   AND
 54.3554 -                       scorecard_object = component_;
 54.3555 -               ELSIF (period_count_ = 10) THEN
 54.3556 -                   UPDATE scorecard_input_value_tab
 54.3557 -                   SET action = action_value_,
 54.3558 -                       year_value = final_year_value_,
 54.3559 -                       p1_value = mean_value_,
 54.3560 -                       p2_value = mean_value_,
 54.3561 -                       p3_value = mean_value_,
 54.3562 -                       p4_value = mean_value_,
 54.3563 -                       p5_value = mean_value_,
 54.3564 -                       p6_value = mean_value_,
 54.3565 -                       p7_value = mean_value_,
 54.3566 -                       p8_value = mean_value_,
 54.3567 -                       p9_value = mean_value_,
 54.3568 -                       p10_value = mean_value_
 54.3569 -                   WHERE
 54.3570 -                       environment = environment_
 54.3571 -                   AND
 54.3572 -                       scorecard = scorecard_
 54.3573 -                   AND
 54.3574 -                       year = year_
 54.3575 -                   AND
 54.3576 -                       version = version_
 54.3577 -                   AND
 54.3578 -                       scorecard_object = component_;
 54.3579 -               ELSIF (period_count_ = 11) THEN
 54.3580 -                   UPDATE scorecard_input_value_tab
 54.3581 -                   SET action = action_value_,
 54.3582 -                       year_value = final_year_value_,
 54.3583 -                       p1_value = mean_value_,
 54.3584 -                       p2_value = mean_value_,
 54.3585 -                       p3_value = mean_value_,
 54.3586 -                       p4_value = mean_value_,
 54.3587 -                       p5_value = mean_value_,
 54.3588 -                       p6_value = mean_value_,
 54.3589 -                       p7_value = mean_value_,
 54.3590 -                       p8_value = mean_value_,
 54.3591 -                       p9_value = mean_value_,
 54.3592 -                       p10_value = mean_value_,
 54.3593 -                       p11_value = mean_value_
 54.3594 -                   WHERE
 54.3595 -                       environment = environment_
 54.3596 -                   AND
 54.3597 -                       scorecard = scorecard_
 54.3598 -                   AND
 54.3599 -                       year = year_
 54.3600 -                   AND
 54.3601 -                       version = version_
 54.3602 -                   AND
 54.3603 -                       scorecard_object = component_;
 54.3604 -               ELSIF (period_count_ = 12) THEN
 54.3605 -                   UPDATE scorecard_input_value_tab
 54.3606 -                   SET action = action_value_,
 54.3607 -                       year_value = final_year_value_,
 54.3608 -                       p1_value = mean_value_,
 54.3609 -                       p2_value = mean_value_,
 54.3610 -                       p3_value = mean_value_,
 54.3611 -                       p4_value = mean_value_,
 54.3612 -                       p5_value = mean_value_,
 54.3613 -                       p6_value = mean_value_,
 54.3614 -                       p7_value = mean_value_,
 54.3615 -                       p8_value = mean_value_,
 54.3616 -                       p9_value = mean_value_,
 54.3617 -                       p10_value = mean_value_,
 54.3618 -                       p11_value = mean_value_,
 54.3619 -                       p12_value = mean_value_
 54.3620 -                   WHERE
 54.3621 -                       environment = environment_
 54.3622 -                   AND
 54.3623 -                       scorecard = scorecard_
 54.3624 -                   AND
 54.3625 -                       year = year_
 54.3626 -                   AND
 54.3627 -                       version = version_
 54.3628 -                   AND
 54.3629 -                       scorecard_object = component_;
 54.3630 -
 54.3631 -               END IF;
 54.3632 -            ELSIF ((dist_logic_ = 'SYB' OR dist_logic_ = 'VERSION' OR dist_logic_ = 'INDEX') AND (dist_type_ IS NOT NULL)) THEN
 54.3633 -               Update_Sales_Values(environment_,scorecard_,year_,version_,component_,year_value_,period_count_,from_where_,action_value_);
 54.3634 -            END IF;
 54.3635 -         END IF;
 54.3636 -      END IF;
 54.3637 -   ELSIF (action_value_ = 'FALSE') THEN
 54.3638 -      UPDATE scorecard_input_value_tab
 54.3639 -      SET action = action_value_
 54.3640 -      WHERE
 54.3641 -         environment = environment_
 54.3642 -      AND
 54.3643 -         scorecard = scorecard_
 54.3644 -      AND
 54.3645 -         year = year_
 54.3646 -      AND
 54.3647 -         version = version_
 54.3648 -      AND
 54.3649 -         scorecard_object = component_;
 54.3650 -   END IF;
 54.3651 -END Update_Distributed_Values;
 54.3652 -PROCEDURE Publish_Scorecard (
 54.3653 -   environment_ IN VARCHAR2,
 54.3654 -   scorecard_ IN VARCHAR2 )
 54.3655 -IS
 54.3656 -   can_modify_  VARCHAR2(5);
 54.3657 -BEGIN
 54.3658 -     General_SYS.Init_Method(lu_name_, '&PKG', 'Publish_Scorecard');
 54.3659 -     can_modify_ := Scorecard_User_Access_Api.Check_Modify_Acc(environment_,scorecard_);
 54.3660 -     if can_modify_ = 'TRUE' then
 54.3661 -        Publish_Score__(environment_, scorecard_, 'SCORE');
 54.3662 -     end if;
 54.3663 -END Publish_Scorecard;
 54.3664 -PROCEDURE Publish_Environment (
 54.3665 -   environment_ IN VARCHAR2 )
 54.3666 -IS
 54.3667 -   attr_ VARCHAR2(2000);
 54.3668 -   info_ VARCHAR2(2000);
 54.3669 -
 54.3670 -   CURSOR get_scorecard IS
 54.3671 -     SELECT DISTINCT scorecard, objstate
 54.3672 -     FROM   scorecard_input
 54.3673 -     WHERE  environment = environment_
 54.3674 -     AND   (objstate = 'Open' OR     objstate = 'Planned');
 54.3675 -
 54.3676 -   can_modify_  VARCHAR2(5);
 54.3677 -BEGIN
 54.3678 -   General_SYS.Init_Method(lu_name_, '&PKG', 'Publish_Environment');
 54.3679 -   FOR get_rec in get_scorecard  loop
 54.3680 -      IF (get_rec.objstate = 'Open')  THEN
 54.3681 -         info_ := Language_SYS.Translate_Constant(lu_name_,'TRANS: The operation "Publish" is not allowed for Scorecard :P1 in state "Open"',Fnd_Session_API.Get_Language,get_rec.scorecard);
 54.3682 -         Transaction_SYS.Set_Status_Info(info_);
 54.3683 -      ELSE
 54.3684 -         can_modify_ := Scorecard_User_Access_Api.Check_Modify_Acc(environment_,get_rec.scorecard);
 54.3685 -         if can_modify_ = 'TRUE' then
 54.3686 -            Publish_Score__(environment_, get_rec.scorecard, 'ENV');
 54.3687 -            Client_SYS.Clear_Attr(attr_);
 54.3688 -            Scorecard_Api.Force_Publish__(info_,attr_,'DO',environment_,get_rec.scorecard);
 54.3689 -            Client_SYS.Clear_Attr(attr_);
 54.3690 -         end if;
 54.3691 -      END IF;
 54.3692 -   end loop;
 54.3693 -END Publish_Environment;
 54.3694 -
 54.3695 -
 54.3696 -PROCEDURE Calculate_Measures (
 54.3697 -   environment_ IN VARCHAR2,
 54.3698 -   scorecard_ IN VARCHAR2,
 54.3699 -   year_ IN VARCHAR2,
 54.3700 -   version_ IN VARCHAR2,
 54.3701 -   measure_ IN VARCHAR2,
 54.3702 -   period_count_ IN NUMBER,
 54.3703 -   from_budpro_ IN VARCHAR2 DEFAULT 'FALSE' )
 54.3704 -IS
 54.3705 -   plan_formula_            VARCHAR2(2000);
 54.3706 -   plan_formula_year_       VARCHAR2(2000);
 54.3707 -   plan_formula_p1_         VARCHAR2(2000);
 54.3708 -   plan_formula_p2_         VARCHAR2(2000);
 54.3709 -   plan_formula_p3_         VARCHAR2(2000);
 54.3710 -   plan_formula_p4_         VARCHAR2(2000);
 54.3711 -   plan_formula_p5_         VARCHAR2(2000);
 54.3712 -   plan_formula_p6_         VARCHAR2(2000);
 54.3713 -   plan_formula_p7_         VARCHAR2(2000);
 54.3714 -   plan_formula_p8_         VARCHAR2(2000);
 54.3715 -   plan_formula_p9_         VARCHAR2(2000);
 54.3716 -   plan_formula_p10_        VARCHAR2(2000);
 54.3717 -   plan_formula_p11_        VARCHAR2(2000);
 54.3718 -   plan_formula_p12_        VARCHAR2(2000);
 54.3719 -   count_                   NUMBER;
 54.3720 -   p1_value_                NUMBER;
 54.3721 -   p2_value_                NUMBER;
 54.3722 -   p3_value_                NUMBER;
 54.3723 -   p4_value_                NUMBER;
 54.3724 -   p5_value_                NUMBER;
 54.3725 -   p6_value_                NUMBER;
 54.3726 -   p7_value_                NUMBER;
 54.3727 -   p8_value_                NUMBER;
 54.3728 -   p9_value_                NUMBER;
 54.3729 -   p10_value_               NUMBER;
 54.3730 -   p11_value_               NUMBER;
 54.3731 -   p12_value_               NUMBER;
 54.3732 -   year_value_              NUMBER;
 54.3733 -   level_id_                VARCHAR2(30);
 54.3734 -
 54.3735 -   formula_year_            NUMBER;
 54.3736 -   formula_p1_              NUMBER;
 54.3737 -   formula_p2_              NUMBER;
 54.3738 -   formula_p3_              NUMBER;
 54.3739 -   formula_p4_              NUMBER;
 54.3740 -   formula_p5_              NUMBER;
 54.3741 -   formula_p6_              NUMBER;
 54.3742 -   formula_p7_              NUMBER;
 54.3743 -   formula_p8_              NUMBER;
 54.3744 -   formula_p9_              NUMBER;
 54.3745 -   formula_p10_             NUMBER;
 54.3746 -   formula_p11_             NUMBER;
 54.3747 -   formula_p12_             NUMBER;
 54.3748 -
 54.3749 -   check_year_value_        VARCHAR2(10);
 54.3750 -   check_p1_value_          VARCHAR2(10);
 54.3751 -   check_p2_value_          VARCHAR2(10);
 54.3752 -   check_p3_value_          VARCHAR2(10);
 54.3753 -   check_p4_value_          VARCHAR2(10);
 54.3754 -   check_p5_value_          VARCHAR2(10);
 54.3755 -   check_p6_value_          VARCHAR2(10);
 54.3756 -   check_p7_value_          VARCHAR2(10);
 54.3757 -   check_p8_value_          VARCHAR2(10);
 54.3758 -   check_p9_value_          VARCHAR2(10);
 54.3759 -   check_p10_value_          VARCHAR2(10);
 54.3760 -   check_p11_value_          VARCHAR2(10);
 54.3761 -   check_p12_value_          VARCHAR2(10);
 54.3762 -   level_type_val_           VARCHAR2(20);
 54.3763 -
 54.3764 -   stmt_                   VARCHAR2(2000);
 54.3765 -
 54.3766 -   rec_        SCORECARD_INPUT_VALUE_TAB%ROWTYPE;
 54.3767 -
 54.3768 -   CURSOR measure_components_ IS
 54.3769 -      SELECT level_id
 54.3770 -      FROM scorecard_structure_tab
 54.3771 -      WHERE environment = environment_
 54.3772 -      AND scorecard = scorecard_
 54.3773 -      AND parent_level_type = 'MEASURE'
 54.3774 -      AND parent_id = measure_;
 54.3775 -   CURSOR version_value_ IS
 54.3776 -      SELECT Year_Value,P1_Value,P2_Value,P3_Value,P4_Value,P5_Value,P6_Value,P7_Value,P8_Value,P9_Value,P10_Value,P11_Value,P12_Value
 54.3777 -      FROM scorecard_input_value_tab
 54.3778 -      WHERE environment = environment_
 54.3779 -      AND scorecard = scorecard_
 54.3780 -      AND year = year_
 54.3781 -      AND version = version_
 54.3782 -      AND scorecard_object = level_id_;
 54.3783 -   CURSOR measure_value_ IS
 54.3784 -      SELECT Year_Value,P1_Value,P2_Value,P3_Value,P4_Value,P5_Value,P6_Value,P7_Value,P8_Value,P9_Value,P10_Value,P11_Value,P12_Value
 54.3785 -      FROM scorecard_input_value_tab
 54.3786 -      WHERE environment = environment_
 54.3787 -      AND scorecard = scorecard_
 54.3788 -      AND year = year_
 54.3789 -      AND version = version_
 54.3790 -      AND scorecard_object = measure_;
 54.3791 -
 54.3792 -   byteOffSet_ Number := 0;
 54.3793 -
 54.3794 -   invalid_comp_ NUMBER;
 54.3795 -BEGIN
 54.3796 -   General_SYS.Init_Method(lu_name_, '&PKG', 'Calculate_Measures');
 54.3797 -   rec_ := Lock_By_Keys___(environment_,scorecard_,year_,version_,measure_);
 54.3798 -   level_type_val_ := Scorecard_Level_Type_API.Decode('MEASURE');
 54.3799 -   plan_formula_ := scorecard_structure_api.Get_Measure_Calc_Formula(scorecard_,measure_,environment_,level_type_val_);
 54.3800 -   check_year_value_  := 'FALSE';
 54.3801 -   check_p1_value_    := 'FALSE';
 54.3802 -   check_p2_value_    := 'FALSE';
 54.3803 -   check_p3_value_    := 'FALSE';
 54.3804 -   check_p4_value_    := 'FALSE';
 54.3805 -   check_p5_value_    := 'FALSE';
 54.3806 -   check_p6_value_    := 'FALSE';
 54.3807 -   check_p7_value_    := 'FALSE';
 54.3808 -   check_p8_value_    := 'FALSE';
 54.3809 -   check_p9_value_    := 'FALSE';
 54.3810 -   check_p10_value_   := 'FALSE';
 54.3811 -   check_p11_value_   := 'FALSE';
 54.3812 -   check_p12_value_   := 'FALSE';
 54.3813 -
 54.3814 -   IF plan_formula_ IS NOT NULL THEN
 54.3815 -      plan_formula_ := REPLACE(plan_formula_,' ','');
 54.3816 -      plan_formula_ := UPPER(plan_formula_);
 54.3817 -      plan_formula_year_ := plan_formula_;
 54.3818 -      plan_formula_p1_ := plan_formula_;
 54.3819 -      plan_formula_p2_ := plan_formula_;
 54.3820 -      plan_formula_p3_ := plan_formula_;
 54.3821 -      plan_formula_p4_ := plan_formula_;
 54.3822 -      plan_formula_p5_ := plan_formula_;
 54.3823 -      plan_formula_p6_ := plan_formula_;
 54.3824 -      plan_formula_p7_ := plan_formula_;
 54.3825 -      plan_formula_p8_ := plan_formula_;
 54.3826 -      plan_formula_p9_ := plan_formula_;
 54.3827 -      plan_formula_p10_ := plan_formula_;
 54.3828 -      plan_formula_p11_ := plan_formula_;
 54.3829 -      plan_formula_p12_ := plan_formula_;
 54.3830 -      count_ := 0;
 54.3831 -      FOR measure_comp_ IN measure_components_ LOOP
 54.3832 -         level_id_ := measure_comp_.level_id;
 54.3833 -         byteOffset_ := INSTR(plan_formula_,'COMP.'||level_id_);
 54.3834 -
 54.3835 -         IF byteOffSet_ > 0 THEN
 54.3836 -            OPEN version_value_;
 54.3837 -            FETCH version_value_ INTO year_value_,p1_value_,p2_value_,p3_value_,p4_value_,p5_value_,p6_value_,p7_value_,p8_value_,p9_value_,p10_value_,p11_value_,p12_value_;
 54.3838 -            CLOSE version_value_;
 54.3839 -            IF (year_value_ IS NULL) THEN
 54.3840 -               check_year_value_  := 'TRUE';
 54.3841 -            END IF;
 54.3842 -            IF (p1_value_ IS NULL) THEN
 54.3843 -               check_p1_value_  := 'TRUE';
 54.3844 -            END IF;
 54.3845 -            IF (p2_value_ IS NULL) THEN
 54.3846 -               check_p2_value_  := 'TRUE';
 54.3847 -            END IF;
 54.3848 -            IF (p3_value_ IS NULL) THEN
 54.3849 -               check_p3_value_  := 'TRUE';
 54.3850 -            END IF;
 54.3851 -            IF (p4_value_ IS NULL) THEN
 54.3852 -               check_p4_value_  := 'TRUE';
 54.3853 -            END IF;
 54.3854 -            IF (p5_value_ IS NULL) THEN
 54.3855 -               check_p5_value_  := 'TRUE';
 54.3856 -            END IF;
 54.3857 -            IF (p6_value_ IS NULL) THEN
 54.3858 -               check_p6_value_  := 'TRUE';
 54.3859 -            END IF;
 54.3860 -            IF (p7_value_ IS NULL) THEN
 54.3861 -               check_p7_value_  := 'TRUE';
 54.3862 -            END IF;
 54.3863 -            IF (p8_value_ IS NULL) THEN
 54.3864 -               check_p8_value_  := 'TRUE';
 54.3865 -            END IF;
 54.3866 -            IF (p9_value_ IS NULL) THEN
 54.3867 -               check_p9_value_  := 'TRUE';
 54.3868 -            END IF;
 54.3869 -            IF (p10_value_ IS NULL) THEN
 54.3870 -               check_p10_value_  := 'TRUE';
 54.3871 -            END IF;
 54.3872 -            IF (p11_value_ IS NULL) THEN
 54.3873 -               check_p11_value_  := 'TRUE';
 54.3874 -            END IF;
 54.3875 -            IF (p12_value_ IS NULL) THEN
 54.3876 -               check_p12_value_  := 'TRUE';
 54.3877 -            END IF;
 54.3878 -
 54.3879 -            plan_formula_year_ := REPLACE(plan_formula_year_,'COMP.'||level_id_,year_value_);
 54.3880 -            plan_formula_p1_   := REPLACE(plan_formula_p1_,'COMP.'||level_id_,p1_value_);
 54.3881 -            plan_formula_p2_   := REPLACE(plan_formula_p2_,'COMP.'||level_id_,p2_value_);
 54.3882 -            plan_formula_p3_   := REPLACE(plan_formula_p3_,'COMP.'||level_id_,p3_value_);
 54.3883 -            plan_formula_p4_   := REPLACE(plan_formula_p4_,'COMP.'||level_id_,p4_value_);
 54.3884 -            plan_formula_p5_   := REPLACE(plan_formula_p5_,'COMP.'||level_id_,p5_value_);
 54.3885 -            plan_formula_p6_   := REPLACE(plan_formula_p6_,'COMP.'||level_id_,p6_value_);
 54.3886 -            plan_formula_p7_   := REPLACE(plan_formula_p7_,'COMP.'||level_id_,p7_value_);
 54.3887 -            plan_formula_p8_   := REPLACE(plan_formula_p8_,'COMP.'||level_id_,p8_value_);
 54.3888 -            plan_formula_p9_   := REPLACE(plan_formula_p9_,'COMP.'||level_id_,p9_value_);
 54.3889 -            plan_formula_p10_  := REPLACE(plan_formula_p10_,'COMP.'||level_id_,p10_value_);
 54.3890 -            plan_formula_p11_  := REPLACE(plan_formula_p11_,'COMP.'||level_id_,p11_value_);
 54.3891 -            plan_formula_p12_  := REPLACE(plan_formula_p12_,'COMP.'||level_id_,p12_value_);
 54.3892 -         END IF;
 54.3893 -      END LOOP;
 54.3894 -
 54.3895 -      Get_Error_Msg_For_Comp(plan_formula_year_,check_year_value_);
 54.3896 -      Get_Error_Msg_For_Comp(plan_formula_p1_,check_p1_value_);
 54.3897 -      Get_Error_Msg_For_Comp(plan_formula_p2_,check_p2_value_);
 54.3898 -      Get_Error_Msg_For_Comp(plan_formula_p3_,check_p3_value_);
 54.3899 -      Get_Error_Msg_For_Comp(plan_formula_p4_,check_p4_value_);
 54.3900 -      Get_Error_Msg_For_Comp(plan_formula_p5_,check_p5_value_);
 54.3901 -      Get_Error_Msg_For_Comp(plan_formula_p6_,check_p6_value_);
 54.3902 -      Get_Error_Msg_For_Comp(plan_formula_p7_,check_p7_value_);
 54.3903 -      Get_Error_Msg_For_Comp(plan_formula_p8_,check_p8_value_);
 54.3904 -      Get_Error_Msg_For_Comp(plan_formula_p9_,check_p9_value_);
 54.3905 -      Get_Error_Msg_For_Comp(plan_formula_p10_,check_p10_value_);
 54.3906 -      Get_Error_Msg_For_Comp(plan_formula_p11_,check_p11_value_);
 54.3907 -      Get_Error_Msg_For_Comp(plan_formula_p12_,check_p12_value_);
 54.3908 -
 54.3909 -      IF (period_count_ = 1) THEN
 54.3910 -         -- ifs_assert_safe samwlk 070515
 54.3911 -         EXECUTE IMMEDIATE 'select '||plan_formula_year_||','||plan_formula_p1_||' from dual'
 54.3912 -         INTO
 54.3913 -         formula_year_,formula_p1_;
 54.3914 -
 54.3915 -         formula_p2_ := NULL;
 54.3916 -         formula_p3_ := NULL;
 54.3917 -         formula_p4_ := NULL;
 54.3918 -         formula_p5_ := NULL;
 54.3919 -         formula_p6_ := NULL;
 54.3920 -         formula_p7_ := NULL;
 54.3921 -         formula_p8_ := NULL;
 54.3922 -         formula_p9_ := NULL;
 54.3923 -         formula_p10_ := NULL;
 54.3924 -         formula_p11_ := NULL;
 54.3925 -         formula_p12_ := NULL;
 54.3926 -      END IF;
 54.3927 -      IF (period_count_ = 2) THEN
 54.3928 -         -- ifs_assert_safe samwlk 070515
 54.3929 -         EXECUTE IMMEDIATE 'select '||plan_formula_year_||','||plan_formula_p1_||','||plan_formula_p2_||' from dual'
 54.3930 -         INTO
 54.3931 -         formula_year_,formula_p1_,formula_p2_;
 54.3932 -
 54.3933 -         formula_p3_ := NULL;
 54.3934 -         formula_p4_ := NULL;
 54.3935 -         formula_p5_ := NULL;
 54.3936 -         formula_p6_ := NULL;
 54.3937 -         formula_p7_ := NULL;
 54.3938 -         formula_p8_ := NULL;
 54.3939 -         formula_p9_ := NULL;
 54.3940 -         formula_p10_ := NULL;
 54.3941 -         formula_p11_ := NULL;
 54.3942 -         formula_p12_ := NULL;
 54.3943 -      END IF;
 54.3944 -      IF (period_count_ = 3) THEN
 54.3945 -         -- ifs_assert_safe samwlk 070515
 54.3946 -         EXECUTE IMMEDIATE 'select '||plan_formula_year_||','||plan_formula_p1_||','||plan_formula_p2_||','
 54.3947 -         ||plan_formula_p3_||' from dual'
 54.3948 -         INTO
 54.3949 -         formula_year_,formula_p1_,formula_p2_,formula_p3_;
 54.3950 -
 54.3951 -         formula_p4_ := NULL;
 54.3952 -         formula_p5_ := NULL;
 54.3953 -         formula_p6_ := NULL;
 54.3954 -         formula_p7_ := NULL;
 54.3955 -         formula_p8_ := NULL;
 54.3956 -         formula_p9_ := NULL;
 54.3957 -         formula_p10_ := NULL;
 54.3958 -         formula_p11_ := NULL;
 54.3959 -         formula_p12_ := NULL;
 54.3960 -      END IF;
 54.3961 -      IF (period_count_ = 4) THEN
 54.3962 -         -- ifs_assert_safe samwlk 070515
 54.3963 -         EXECUTE IMMEDIATE 'select '||plan_formula_year_||','||plan_formula_p1_||','||plan_formula_p2_||','
 54.3964 -         ||plan_formula_p3_||','||plan_formula_p4_||' from dual'
 54.3965 -         INTO
 54.3966 -         formula_year_,formula_p1_,formula_p2_,formula_p3_,formula_p4_;
 54.3967 -
 54.3968 -         formula_p5_ := NULL;
 54.3969 -         formula_p6_ := NULL;
 54.3970 -         formula_p7_ := NULL;
 54.3971 -         formula_p8_ := NULL;
 54.3972 -         formula_p9_ := NULL;
 54.3973 -         formula_p10_ := NULL;
 54.3974 -         formula_p11_ := NULL;
 54.3975 -         formula_p12_ := NULL;
 54.3976 -      END IF;
 54.3977 -      IF (period_count_ = 5) THEN
 54.3978 -         -- ifs_assert_safe samwlk 070515
 54.3979 -         EXECUTE IMMEDIATE 'select '||plan_formula_year_||','||plan_formula_p1_||','||plan_formula_p2_||','
 54.3980 -         ||plan_formula_p3_||','||plan_formula_p4_||','||plan_formula_p5_||' from dual'
 54.3981 -         INTO
 54.3982 -         formula_year_,formula_p1_,formula_p2_,formula_p3_,formula_p4_,formula_p5_;
 54.3983 -
 54.3984 -         formula_p6_ := NULL;
 54.3985 -         formula_p7_ := NULL;
 54.3986 -         formula_p8_ := NULL;
 54.3987 -         formula_p9_ := NULL;
 54.3988 -         formula_p10_ := NULL;
 54.3989 -         formula_p11_ := NULL;
 54.3990 -         formula_p12_ := NULL;
 54.3991 -      END IF;
 54.3992 -      IF (period_count_ = 6) THEN
 54.3993 -         -- ifs_assert_safe samwlk 070515
 54.3994 -         EXECUTE IMMEDIATE 'select '||plan_formula_year_||','||plan_formula_p1_||','||plan_formula_p2_||','
 54.3995 -         ||plan_formula_p3_||','||plan_formula_p4_||','||plan_formula_p5_||','||plan_formula_p6_||' from dual'
 54.3996 -         INTO
 54.3997 -         formula_year_,formula_p1_,formula_p2_,formula_p3_,formula_p4_,formula_p5_,formula_p6_;
 54.3998 -
 54.3999 -         formula_p7_ := NULL;
 54.4000 -         formula_p8_ := NULL;
 54.4001 -         formula_p9_ := NULL;
 54.4002 -         formula_p10_ := NULL;
 54.4003 -         formula_p11_ := NULL;
 54.4004 -         formula_p12_ := NULL;
 54.4005 -      END IF;
 54.4006 -      IF (period_count_ = 7) THEN
 54.4007 -         -- ifs_assert_safe samwlk 070515
 54.4008 -         EXECUTE IMMEDIATE 'select '||plan_formula_year_||','||plan_formula_p1_||','||plan_formula_p2_||','
 54.4009 -         ||plan_formula_p3_||','||plan_formula_p4_||','||plan_formula_p5_||','||plan_formula_p6_||','
 54.4010 -         ||plan_formula_p7_||' from dual'
 54.4011 -         INTO
 54.4012 -         formula_year_,formula_p1_,formula_p2_,formula_p3_,formula_p4_,formula_p5_,formula_p6_,formula_p7_;
 54.4013 -
 54.4014 -         formula_p8_ := NULL;
 54.4015 -         formula_p9_ := NULL;
 54.4016 -         formula_p10_ := NULL;
 54.4017 -         formula_p11_ := NULL;
 54.4018 -         formula_p12_ := NULL;
 54.4019 -      END IF;
 54.4020 -      IF (period_count_ = 8) THEN
 54.4021 -         -- ifs_assert_safe samwlk 070515
 54.4022 -         EXECUTE IMMEDIATE 'select '||plan_formula_year_||','||plan_formula_p1_||','||plan_formula_p2_||','
 54.4023 -         ||plan_formula_p3_||','||plan_formula_p4_||','||plan_formula_p5_||','||plan_formula_p6_||','
 54.4024 -         ||plan_formula_p7_||','||plan_formula_p8_||' from dual'
 54.4025 -         INTO
 54.4026 -         formula_year_,formula_p1_,formula_p2_,formula_p3_,formula_p4_,formula_p5_,formula_p6_,formula_p7_,
 54.4027 -         formula_p8_;
 54.4028 -
 54.4029 -         formula_p9_ := NULL;
 54.4030 -         formula_p10_ := NULL;
 54.4031 -         formula_p11_ := NULL;
 54.4032 -         formula_p12_ := NULL;
 54.4033 -      END IF;
 54.4034 -      IF (period_count_ = 9) THEN
 54.4035 -         -- ifs_assert_safe samwlk 070515
 54.4036 -         EXECUTE IMMEDIATE 'select '||plan_formula_year_||','||plan_formula_p1_||','||plan_formula_p2_||','
 54.4037 -         ||plan_formula_p3_||','||plan_formula_p4_||','||plan_formula_p5_||','||plan_formula_p6_||','
 54.4038 -         ||plan_formula_p7_||','||plan_formula_p8_||','||plan_formula_p9_||' from dual'
 54.4039 -         INTO
 54.4040 -         formula_year_,formula_p1_,formula_p2_,formula_p3_,formula_p4_,formula_p5_,formula_p6_,formula_p7_,
 54.4041 -         formula_p8_,formula_p9_;
 54.4042 -
 54.4043 -         formula_p10_ := NULL;
 54.4044 -         formula_p11_ := NULL;
 54.4045 -         formula_p12_ := NULL;
 54.4046 -      END IF;
 54.4047 -      IF (period_count_ = 10) THEN
 54.4048 -         -- ifs_assert_safe samwlk 070515
 54.4049 -         EXECUTE IMMEDIATE 'select '||plan_formula_year_||','||plan_formula_p1_||','||plan_formula_p2_||','
 54.4050 -         ||plan_formula_p3_||','||plan_formula_p4_||','||plan_formula_p5_||','||plan_formula_p6_||','
 54.4051 -         ||plan_formula_p7_||','||plan_formula_p8_||','||plan_formula_p9_||','||plan_formula_p10_||' from dual'
 54.4052 -         INTO
 54.4053 -         formula_year_,formula_p1_,formula_p2_,formula_p3_,formula_p4_,formula_p5_,formula_p6_,formula_p7_,
 54.4054 -         formula_p8_,formula_p9_,formula_p10_;
 54.4055 -
 54.4056 -         formula_p11_ := NULL;
 54.4057 -         formula_p12_ := NULL;
 54.4058 -      END IF;
 54.4059 -      IF (period_count_ = 11) THEN
 54.4060 -         -- ifs_assert_safe samwlk 070515
 54.4061 -         EXECUTE IMMEDIATE 'select '||plan_formula_year_||','||plan_formula_p1_||','||plan_formula_p2_||','
 54.4062 -         ||plan_formula_p3_||','||plan_formula_p4_||','||plan_formula_p5_||','||plan_formula_p6_||','
 54.4063 -         ||plan_formula_p7_||','||plan_formula_p8_||','||plan_formula_p9_||','||plan_formula_p10_||','
 54.4064 -         ||plan_formula_p11_||' from dual'
 54.4065 -         INTO
 54.4066 -         formula_year_,formula_p1_,formula_p2_,formula_p3_,formula_p4_,formula_p5_,formula_p6_,formula_p7_,
 54.4067 -         formula_p8_,formula_p9_,formula_p10_,formula_p11_;
 54.4068 -
 54.4069 -         formula_p12_ := NULL;
 54.4070 -      END IF;
 54.4071 -      IF (period_count_ = 12) THEN
 54.4072 -         -- ifs_assert_safe samwlk 070515
 54.4073 -         EXECUTE IMMEDIATE 'select '||plan_formula_year_||','||plan_formula_p1_||','||plan_formula_p2_||','
 54.4074 -         ||plan_formula_p3_||','||plan_formula_p4_||','||plan_formula_p5_||','||plan_formula_p6_||','
 54.4075 -         ||plan_formula_p7_||','||plan_formula_p8_||','||plan_formula_p9_||','||plan_formula_p10_||','
 54.4076 -         ||plan_formula_p11_||','||plan_formula_p12_||' from dual'
 54.4077 -         INTO
 54.4078 -         formula_year_,formula_p1_,formula_p2_,formula_p3_,formula_p4_,formula_p5_,formula_p6_,formula_p7_,
 54.4079 -         formula_p8_,formula_p9_,formula_p10_,formula_p11_,formula_p12_;
 54.4080 -      END IF;
 54.4081 -      UPDATE scorecard_input_value_tab
 54.4082 -         SET
 54.4083 -            year_value = formula_year_,
 54.4084 -            p1_value = formula_p1_,
 54.4085 -            p2_value = formula_p2_,
 54.4086 -            p3_value = formula_p3_,
 54.4087 -            p4_value = formula_p4_,
 54.4088 -            p5_value = formula_p5_,
 54.4089 -            p6_value = formula_p6_,
 54.4090 -            p7_value = formula_p7_,
 54.4091 -            p8_value = formula_p8_,
 54.4092 -            p9_value = formula_p9_,
 54.4093 -            p10_value = formula_p10_,
 54.4094 -            p11_value = formula_p11_,
 54.4095 -            p12_value = formula_p12_
 54.4096 -         WHERE
 54.4097 -            environment = environment_ AND
 54.4098 -            scorecard = scorecard_     AND
 54.4099 -            year = year_               AND
 54.4100 -            version = version_         AND
 54.4101 -            scorecard_object = measure_;
 54.4102 -      -- Bug 76573 Begin. Set the measure to planned state
 54.4103 -      Set_To_Planned(environment_, scorecard_, year_, version_, measure_);
 54.4104 -      -- Bug 76573 End
 54.4105 -      
 54.4106 -   ELSE
 54.4107 -       Error_SYS.Appl_General(lu_name_,'ERRPLANFOR : No Calculation formula is connected to the measure :P1 in Scorecard :P2',Scorecard_Measure_API.Get_Description(measure_),Scorecard_API.Get_Description(scorecard_,environment_));
 54.4108 -   END IF;
 54.4109 -
 54.4110 -END Calculate_Measures;
 54.4111 -PROCEDURE Update_Referred_Component (
 54.4112 -   check_reference_ IN OUT VARCHAR2,
 54.4113 -   environment_ IN VARCHAR2,
 54.4114 -   scorecard_ IN VARCHAR2,
 54.4115 -   year_ IN VARCHAR2,
 54.4116 -   version_ IN VARCHAR2,
 54.4117 -   scorecard_object_ IN VARCHAR2 )
 54.4118 -IS
 54.4119 -   rec_        SCORECARD_INPUT_VALUE_TAB%ROWTYPE;
 54.4120 -   CURSOR value_cur IS
 54.4121 -      SELECT year_value,p1_value,p2_value,p3_value,p4_value,p5_value,p6_value,p7_value,p8_value,p9_value,p10_value,
 54.4122 -      p11_value,p12_value
 54.4123 -      FROM scorecard_input_value_tab
 54.4124 -      WHERE environment = environment_
 54.4125 -      AND scorecard = scorecard_
 54.4126 -      AND year = year_
 54.4127 -      AND version = version_
 54.4128 -      AND scorecard_object = scorecard_object_;
 54.4129 -   CURSOR component_cur IS
 54.4130 -      SELECT level_id
 54.4131 -      FROM scorecard_structure_tab
 54.4132 -      WHERE environment = environment_
 54.4133 -      AND scorecard = scorecard_
 54.4134 -      AND planning_type = 'REFERENCE'
 54.4135 -      AND planning_reference = scorecard_object_
 54.4136 -      AND child_level_type = 'COMPONENT';
 54.4137 -      measure_format_        NUMBER;
 54.4138 -BEGIN
 54.4139 -   General_SYS.Init_Method(lu_name_, '&PKG', 'Update_Referred_Component');
 54.4140 -   FOR component_cur_ IN component_cur LOOP
 54.4141 -      check_reference_ := 'TRUE';
 54.4142 -      rec_ := Lock_By_Keys___(environment_,scorecard_,year_,version_,component_cur_.level_id);
 54.4143 -      FOR value_cur_ IN value_cur LOOP
 54.4144 -         measure_format_      := TO_NUMBER(Scorecard_Measure_API.Get_Measure_Format(component_cur_.level_id));
 54.4145 -         UPDATE scorecard_input_value_tab
 54.4146 -         SET year_value = value_cur_.year_value * measure_format_,
 54.4147 -             p1_value = value_cur_.p1_value     * measure_format_,
 54.4148 -             p2_value = value_cur_.p2_value     * measure_format_,
 54.4149 -             p3_value = value_cur_.p3_value     * measure_format_,
 54.4150 -             p4_value = value_cur_.p4_value     * measure_format_,
 54.4151 -             p5_value = value_cur_.p5_value     * measure_format_,
 54.4152 -             p6_value = value_cur_.p6_value     * measure_format_,
 54.4153 -             p7_value = value_cur_.p7_value     * measure_format_,
 54.4154 -             p8_value = value_cur_.p8_value     * measure_format_,
 54.4155 -             p9_value = value_cur_.p9_value     * measure_format_,
 54.4156 -             p10_value = value_cur_.p10_value   * measure_format_,
 54.4157 -             p11_value = value_cur_.p11_value   * measure_format_,
 54.4158 -             p12_value = value_cur_.p12_value   * measure_format_         
 54.4159 -         WHERE
 54.4160 -             environment = environment_ AND
 54.4161 -             scorecard = scorecard_     AND
 54.4162 -             year = year_               AND
 54.4163 -             version = version_         AND
 54.4164 -             scorecard_object = component_cur_.level_id;
 54.4165 -       END LOOP;
 54.4166 -       Set_To_Planned(environment_,scorecard_,year_,version_,component_cur_.level_id);
 54.4167 -   END LOOP;
 54.4168 -END Update_Referred_Component;
 54.4169 -PROCEDURE Delete_By_Passed_Value (
 54.4170 -   key_value_ IN VARCHAR2,
 54.4171 -   year_ IN VARCHAR2 )
 54.4172 -IS
 54.4173 -   dummy_ SCORECARD_INPUT_VALUE_TAB%ROWTYPE;
 54.4174 -   info_  VARCHAR2(2000);
 54.4175 -   --objversion_ VARCHAR2(2000);
 54.4176 -   CURSOR Get_rows IS
 54.4177 -      SELECT objid,objversion FROM scorecard_input_value
 54.4178 -      WHERE environment=key_value_
 54.4179 -      AND   year=year_ ;
 54.4180 -BEGIN
 54.4181 -   General_SYS.Init_Method(lu_name_, 'SCORECARD_INPUT_VALUE_API', 'Delete_By_Passed_Value');
 54.4182 -   FOR get_rec in Get_rows  loop
 54.4183 -     --  Delete___(get_rec.objid,get_rec);
 54.4184 -       Remove__ (info_ ,get_rec.objid ,get_rec.objversion,'DO' );
 54.4185 -   end loop;
 54.4186 -END Delete_By_Passed_Value;
 54.4187 -PROCEDURE Delete_Version_Passed (
 54.4188 -   environment_ IN VARCHAR2,
 54.4189 -   version_ IN VARCHAR2 )
 54.4190 -IS
 54.4191 -   info_  VARCHAR2(2000);
 54.4192 -   CURSOR Get_rows IS
 54.4193 -      SELECT objid,objversion FROM scorecard_input_value
 54.4194 -      WHERE  environment=environment_
 54.4195 -      AND    version=version_ ;
 54.4196 -
 54.4197 -BEGIN
 54.4198 -   General_SYS.Init_Method(lu_name_, 'SCORECARD_INPUT_VALUE_API', 'Delete_Version_passed');
 54.4199 -   FOR get_rec in Get_rows  loop
 54.4200 -       Remove__ (info_ ,get_rec.objid ,get_rec.objversion,'DO' );
 54.4201 -   end loop;
 54.4202 -END Delete_Version_Passed;
 54.4203 -PROCEDURE Delete_Scorecard_Passed (
 54.4204 -   environment_ IN VARCHAR2,
 54.4205 -   scorecard_ IN VARCHAR2 )
 54.4206 -IS
 54.4207 -
 54.4208 -   info_  VARCHAR2(2000);
 54.4209 -   CURSOR Get_rows IS
 54.4210 -      SELECT objid,objversion FROM scorecard_input_value
 54.4211 -      WHERE  environment=environment_
 54.4212 -      AND    scorecard=scorecard_ ;
 54.4213 -BEGIN
 54.4214 -   General_SYS.Init_Method(lu_name_, 'SCORECARD_INPUT_VALUE_API', 'Delete_Scorecard_passed');
 54.4215 -   FOR get_rec in Get_rows  loop
 54.4216 -       Remove__ (info_ ,get_rec.objid ,get_rec.objversion,'DO' );
 54.4217 -   end loop;
 54.4218 -END Delete_Scorecard_Passed;
 54.4219 -PROCEDURE Insert_Data (
 54.4220 -   env_ IN VARCHAR2,
 54.4221 -   scr_ IN VARCHAR2,
 54.4222 -   year_ IN VARCHAR2,
 54.4223 -   version_ IN VARCHAR2,
 54.4224 -   obj_ IN VARCHAR2,
 54.4225 -   type_ IN VARCHAR2,
 54.4226 -   p1_ IN VARCHAR2,
 54.4227 -   p2_ IN VARCHAR2,
 54.4228 -   p3_ IN VARCHAR2,
 54.4229 -   p4_ IN VARCHAR2,
 54.4230 -   p5_ IN VARCHAR2,
 54.4231 -   p6_ IN VARCHAR2,
 54.4232 -   p7_ IN VARCHAR2,
 54.4233 -   p8_ IN VARCHAR2,
 54.4234 -   p9_ IN VARCHAR2,
 54.4235 -   p10_ IN VARCHAR2,
 54.4236 -   p11_ IN VARCHAR2,
 54.4237 -   p12_ IN VARCHAR2 )
 54.4238 -IS
 54.4239 -    newrec_ SCORECARD_INPUT_VALUE_TAB%ROWTYPE;
 54.4240 -    objid_ VARCHAR2(2000);
 54.4241 -    objversion_ VARCHAR2(2000);
 54.4242 -    attr_  VARCHAR2(2000);
 54.4243 -
 54.4244 -BEGIN
 54.4245 -    General_SYS.Init_Method(lu_name_, '&PKG', 'Insert_Data');
 54.4246 -    newrec_.environment := env_;
 54.4247 -    newrec_.scorecard := scr_;
 54.4248 -    newrec_.year := year_;
 54.4249 -    newrec_.version := version_ ;
 54.4250 -    newrec_.scorecard_object := obj_;
 54.4251 -    newrec_.object_type := type_;
 54.4252 -    newrec_.p1_key := p1_;
 54.4253 -    newrec_.p2_key := p2_;
 54.4254 -    newrec_.p3_key := p3_;
 54.4255 -    newrec_.p4_key := p4_;
 54.4256 -    newrec_.p5_key := p5_;
 54.4257 -    newrec_.p6_key := p6_;
 54.4258 -    newrec_.p7_key := p7_;
 54.4259 -    newrec_.p8_key := p8_;
 54.4260 -    newrec_.p9_key := p9_;
 54.4261 -    newrec_.p10_key :=p10_;
 54.4262 -    newrec_.p11_key :=p11_;
 54.4263 -    newrec_.p12_key :=p12_;
 54.4264 -    newrec_.p12_key :=p12_;
 54.4265 -    newrec_.action :='TRUE';
 54.4266 -
 54.4267 -    Insert___(objid_, objversion_, newrec_, attr_);
 54.4268 -END Insert_Data;
 54.4269 -PROCEDURE Modify_Data (
 54.4270 -   p1_ IN VARCHAR2,
 54.4271 -   p2_ IN VARCHAR2,
 54.4272 -   p3_ IN VARCHAR2,
 54.4273 -   p4_ IN VARCHAR2,
 54.4274 -   p5_ IN VARCHAR2,
 54.4275 -   p6_ IN VARCHAR2,
 54.4276 -   p7_ IN VARCHAR2,
 54.4277 -   p8_ IN VARCHAR2,
 54.4278 -   p9_ IN VARCHAR2,
 54.4279 -   p10_ IN VARCHAR2,
 54.4280 -   p11_ IN VARCHAR2,
 54.4281 -   p12_ IN VARCHAR2,
 54.4282 -   env_ IN VARCHAR2,
 54.4283 -   scr_ IN VARCHAR2,
 54.4284 -   year_ IN VARCHAR2,
 54.4285 -   version_ IN VARCHAR2,
 54.4286 -   level_ IN VARCHAR2 )
 54.4287 -IS
 54.4288 -   objid_ VARCHAR2(2000);
 54.4289 -   objversion_ VARCHAR2(2000);
 54.4290 -   info_ VARCHAR2(32000);
 54.4291 -   attr_ VARCHAR2(32000);
 54.4292 -BEGIN
 54.4293 -   General_SYS.Init_Method(lu_name_, '&PKG', 'Modify_Data');
 54.4294 -   Get_Id_Version_By_Keys___(objid_,objversion_,env_ ,scr_,year_,version_,level_);
 54.4295 -   Client_SYS.Clear_Attr(attr_);
 54.4296 -   Client_SYS.Add_To_Attr('P1_KEY', p1_, attr_);
 54.4297 -   Client_SYS.Add_To_Attr('P2_KEY', p2_, attr_);
 54.4298 -   Client_SYS.Add_To_Attr('P3_KEY', p3_, attr_);
 54.4299 -   Client_SYS.Add_To_Attr('P4_KEY', p4_, attr_);
 54.4300 -   Client_SYS.Add_To_Attr('P5_KEY', p5_, attr_);
 54.4301 -   Client_SYS.Add_To_Attr('P6_KEY', p6_, attr_);
 54.4302 -   Client_SYS.Add_To_Attr('P7_KEY', p7_, attr_);
 54.4303 -   Client_SYS.Add_To_Attr('P8_KEY', p8_, attr_);
 54.4304 -   Client_SYS.Add_To_Attr('P9_KEY', p9_, attr_);
 54.4305 -   Client_SYS.Add_To_Attr('P10_KEY', p10_, attr_);
 54.4306 -   Client_SYS.Add_To_Attr('P11_KEY', p11_, attr_);
 54.4307 -   Client_SYS.Add_To_Attr('P12_KEY', p12_, attr_);
 54.4308 -   Client_SYS.Add_To_Attr('ACTION', 'TRUE',attr_);
 54.4309 -   Modify__(info_,objid_,objversion_,attr_,'DO');
 54.4310 -
 54.4311 -
 54.4312 -END Modify_Data;
 54.4313 -PROCEDURE Delete_Data (
 54.4314 -   env_ IN VARCHAR2,
 54.4315 -   scr_ IN VARCHAR2,
 54.4316 -   year_ IN VARCHAR2,
 54.4317 -   version_ IN VARCHAR2,
 54.4318 -   level_ IN VARCHAR2 )
 54.4319 -IS
 54.4320 -
 54.4321 -   objid_ VARCHAR2(2000);
 54.4322 -   objversion_ VARCHAR2(2000);
 54.4323 -   info_ VARCHAR2(32000);
 54.4324 -   attr_ VARCHAR2(32000);
 54.4325 -BEGIN
 54.4326 -   General_SYS.Init_Method(lu_name_, '&PKG', 'Delete_Data');
 54.4327 -   Get_Id_Version_By_Keys___(objid_,objversion_,env_ ,scr_,year_,version_,level_);
 54.4328 -   Remove__ (info_ ,objid_,objversion_,'DO' );
 54.4329 -END Delete_Data;
 54.4330 -PROCEDURE Scorecard_Inputs_By_Batch (
 54.4331 -   environment_ IN VARCHAR2,
 54.4332 -   scorecard_ IN VARCHAR2,
 54.4333 -   years_ IN VARCHAR2,
 54.4334 -   version_ IN VARCHAR2,
 54.4335 -   execution_ IN VARCHAR2 )
 54.4336 -IS
 54.4337 -   job_id_     NUMBER;
 54.4338 -   method_     VARCHAR2(32000);
 54.4339 -   attr_       VARCHAR2(32000);
 54.4340 -BEGIN
 54.4341 -   General_SYS.Init_Method(lu_name_, 'SCORECARD_INPUT_VALUE_API','Scorecard_Inputs_By_Batch');
 54.4342 -   Client_SYS.Clear_Attr(attr_);
 54.4343 -   Client_SYS.Add_To_Attr('ENVIRONMENT',environment_,attr_);
 54.4344 -   Client_SYS.Add_To_Attr('SCORECARD',scorecard_ ,attr_);
 54.4345 -   Client_SYS.Add_To_Attr('YEAR',years_,attr_);
 54.4346 -   Client_SYS.Add_To_Attr('VERSION',version_,attr_);
 54.4347 -   method_ := 'Scorecard_Input_Value_API.Start_Inputing_Scorecards('''''||attr_||''''')';
 54.4348 -   IF (execution_ != 'NOW') THEN
 54.4349 -      Batch_SYS.New_Job(job_id_,method_,execution_);
 54.4350 -   ELSE
 54.4351 -      Input_Scorecard_Data (attr_);
 54.4352 -   END IF;
 54.4353 -END Scorecard_Inputs_By_Batch;
 54.4354 -PROCEDURE Input_Scorecard_Data (
 54.4355 -   attr_ IN VARCHAR2 )
 54.4356 -IS
 54.4357 -
 54.4358 -   TYPE RefCurTyp IS REF CURSOR;
 54.4359 -   rcScr      RefCurTyp;
 54.4360 -   rcYear     RefCurTyp;
 54.4361 -   rcVer      RefCurTyp;
 54.4362 -   ssql_      varchar2(32000);
 54.4363 -   ssql2_     varchar2(32000);
 54.4364 -   ssql3_     varchar2(32000);
 54.4365 -   tempscr_   varchar2(20);
 54.4366 -   tempver_   varchar2(20);
 54.4367 -   tempyear_  varchar2(20);
 54.4368 -   env        VARCHAR2(10);
 54.4369 -   scorecard_ VARCHAR2(32000);
 54.4370 -   years_     VARCHAR2(2000);
 54.4371 -   version_   VARCHAR2(2000);
 54.4372 -   period1_   VARCHAR2(10);
 54.4373 -   period2_   VARCHAR2(10);
 54.4374 -   period3_   VARCHAR2(10);
 54.4375 -   period4_   VARCHAR2(10);
 54.4376 -   period5_   VARCHAR2(10);
 54.4377 -   period6_   VARCHAR2(10);
 54.4378 -   period7_   VARCHAR2(10);
 54.4379 -   period8_   VARCHAR2(10);
 54.4380 -   period9_   VARCHAR2(10);
 54.4381 -   period10_  VARCHAR2(10);
 54.4382 -   period11_  VARCHAR2(10);
 54.4383 -   period12_  VARCHAR2(10);
 54.4384 -   ExistEnv   VARCHAR2(10);
 54.4385 -   dummy2_    VARCHAR2(10);
 54.4386 -   dummy_               NUMBER;
 54.4387 -   scr_exist            NUMBER;
 54.4388 -   mea_exist            NUMBER;
 54.4389 -   mea_ver_exist        NUMBER;
 54.4390 -   mea_year_exist       NUMBER;
 54.4391 -   mea_year_conn_exist  NUMBER;
 54.4392 -   comp_exist           NUMBER;
 54.4393 -   comp_ver_exist       NUMBER;
 54.4394 -   comp_year_exist      NUMBER;
 54.4395 -   comp_year_conn_exist NUMBER;
 54.4396 -   del_mea_rec          NUMBER;
 54.4397 -   del_comp_rec         NUMBER;
 54.4398 -   insert_mea_rec       NUMBER;
 54.4399 -   insert_comp_rec      NUMBER;
 54.4400 -   rec_exists           NUMBER;
 54.4401 -   rec_exists2          NUMBER;
 54.4402 -   rec_not_exist        NUMBER;
 54.4403 -   rec_not_exist2       NUMBER;
 54.4404 -   rec_exists_del       NUMBER;
 54.4405 -   rec_exists_del2      NUMBER;
 54.4406 -
 54.4407 -   CURSOR get_year_conn(env_ varchar2, year_ varchar2) IS
 54.4408 -      SELECT year
 54.4409 -      FROM scorecard_period_tab
 54.4410 -      WHERE environment = env_
 54.4411 -      AND year = year_;
 54.4412 -
 54.4413 -   CURSOR get_mea(env_ varchar2, scr_ varchar2) IS
 54.4414 -      SELECT level_id
 54.4415 -      FROM scorecard_structure_tab
 54.4416 -      WHERE environment = env_
 54.4417 -      AND scorecard = scr_
 54.4418 -      AND child_level_type = 'MEASURE';
 54.4419 -
 54.4420 -   CURSOR get_comp(env_ varchar2, scr_ varchar2, mea_ varchar2) IS
 54.4421 -      SELECT level_id
 54.4422 -      FROM scorecard_structure_tab
 54.4423 -      WHERE environment = env_
 54.4424 -      AND scorecard = scr_
 54.4425 -      AND child_level_type = 'COMPONENT'
 54.4426 -      AND parent_id = mea_;
 54.4427 -
 54.4428 -   CURSOR chk_exist(env_ varchar2, scr_ varchar2, year_ varchar2, ver_ varchar2, scr_obj_ varchar2) IS
 54.4429 -      SELECT 1
 54.4430 -      FROM scorecard_input_value_tab
 54.4431 -      WHERE environment = env_
 54.4432 -      AND scorecard = scr_
 54.4433 -      AND year = year_
 54.4434 -      AND version = ver_
 54.4435 -      AND scorecard_object = scr_obj_;
 54.4436 -BEGIN
 54.4437 -     General_SYS.Init_Method(lu_name_, '&PKG', 'Input_Scorecard_Data');
 54.4438 -     env:=Client_SYS.Get_Item_Value('ENVIRONMENT',attr_);
 54.4439 -     scorecard_:= Client_SYS.Get_Item_Value('SCORECARD',attr_);
 54.4440 -     version_  := Client_SYS.Get_Item_Value('VERSION',attr_);
 54.4441 -     years_    := Client_SYS.Get_Item_Value('YEAR',attr_);
 54.4442 -     scorecard_:= Replace(scorecard_,'^','''');
 54.4443 -     version_  := Replace(version_,'^','''');
 54.4444 -     years_    := Replace(years_,'^','''');
 54.4445 -     scr_exist := 0;
 54.4446 -     mea_exist := 0;
 54.4447 -     mea_ver_exist        := 0;
 54.4448 -     mea_year_exist       := 0;
 54.4449 -     mea_year_conn_exist  := 0;
 54.4450 -     comp_exist           := 0;
 54.4451 -     comp_ver_exist       := 0;
 54.4452 -     comp_year_exist      := 0;
 54.4453 -     comp_year_conn_exist := 0;
 54.4454 -     del_mea_rec     := 0;
 54.4455 -     del_comp_rec    := 0;
 54.4456 -     insert_mea_rec  := 0;
 54.4457 -     insert_comp_rec := 0;
 54.4458 -     rec_exists      := 0;
 54.4459 -     rec_exists2     := 0;
 54.4460 -     rec_not_exist   := 0;
 54.4461 -     rec_not_exist2  := 0;
 54.4462 -     rec_exists_del  := 0;
 54.4463 -     rec_exists_del2 := 0;
 54.4464 -
 54.4465 -     IF scorecard_ IS null then
 54.4466 -         ssql_:='SELECT scorecard FROM scorecard_tab WHERE environment='|| '''' || env || '''' || ' AND (rowstate = '||'''Open''' || ' OR  rowstate = '||'''Published'''||')';
 54.4467 -     else
 54.4468 -         ssql_ := 'SELECT scorecard FROM scorecard_tab WHERE environment='|| '''' || env || '''' || ' AND SCORECARD IN (' ||  scorecard_ || ')' ;
 54.4469 -     end if;
 54.4470 -
 54.4471 -     if version_ IS null then
 54.4472 -         ssql2_:= 'SELECT version FROM measure_version_tab WHERE environment ='|| '''' || env || '''' || 'AND USE_VERSIONS = ' || '''TRUE''' || ' AND (VERSION NOT IN (' || '''ASS'''||','||'''IND'''||','||'''TRN'''||')) AND rowstate='|| '''Open''';
 54.4473 -     else
 54.4474 -         ssql2_:= 'SELECT version FROM measure_version_tab WHERE environment ='|| '''' || env || '''' || ' AND VERSION IN (' ||  version_ || ')' ;
 54.4475 -     end if;
 54.4476 -
 54.4477 -     if years_ IS null then
 54.4478 -         ssql3_:= 'SELECT year FROM environment_year_tab WHERE environment ='|| '''' || env || '''' ||' AND rowstate= '||'''Open''';
 54.4479 -     else
 54.4480 -         ssql3_:= 'SELECT year FROM environment_year_tab WHERE environment ='|| '''' || env || '''' || ' AND YEAR IN (' ||  years_ || ')' ;
 54.4481 -     end if;
 54.4482 -
 54.4483 -     -- ifs_assert_safe shsalk 20060117
 54.4484 -     open rcScr for ssql_;
 54.4485 -
 54.4486 -     LOOP
 54.4487 -         FETCH rcScr INTO tempscr_;
 54.4488 -         EXIT WHEN rcScr%NOTFOUND;
 54.4489 -         scr_exist := 1;
 54.4490 -
 54.4491 -         FOR meaNo IN get_mea(env, tempscr_) LOOP
 54.4492 -           -- ifs_assert_safe shsalk 20060117
 54.4493 -           open rcVer for ssql2_;
 54.4494 -           LOOP
 54.4495 -              FETCH rcVer INTO tempver_;
 54.4496 -              EXIT WHEN rcVer%NOTFOUND;
 54.4497 -              -- ifs_assert_safe shsalk 20060117
 54.4498 -              open rcYear for ssql3_;
 54.4499 -              LOOP
 54.4500 -                FETCH rcYear INTO tempyear_;
 54.4501 -                EXIT WHEN rcYear%NOTFOUND;
 54.4502 -                  Return_Periods(period1_,period2_,period3_,period4_,period5_,period6_,period7_,
 54.4503 -                                 period8_,period9_,period10_,period11_,period12_,env, tempyear_);
 54.4504 -
 54.4505 -                  IF (tempver_ != 'ASS') THEN
 54.4506 -
 54.4507 -                     OPEN get_year_conn(env, tempyear_);
 54.4508 -                     FETCH get_year_conn INTO dummy2_;
 54.4509 -                     IF (get_year_conn%FOUND) THEN
 54.4510 -                        rec_not_exist := 1;
 54.4511 -                     ELSE
 54.4512 -                        rec_not_exist := 0;
 54.4513 -                     END IF;
 54.4514 -                     CLOSE get_year_conn;
 54.4515 -
 54.4516 -                     IF (rec_not_exist = 1) THEN
 54.4517 -                        mea_year_conn_exist := 1;
 54.4518 -
 54.4519 -                        OPEN chk_exist(env, tempscr_, tempyear_, tempver_, meaNo.level_id);
 54.4520 -                        FETCH chk_exist INTO dummy_;
 54.4521 -                        IF (chk_exist%FOUND) THEN
 54.4522 -                           rec_exists := 1;
 54.4523 -                        ELSE
 54.4524 -                           rec_exists := 0;
 54.4525 -                        END IF;
 54.4526 -                        CLOSE chk_exist;
 54.4527 -
 54.4528 -                        IF (rec_exists = 1) THEN
 54.4529 -                            Modify_Data(period1_,period2_,period3_,period4_,period5_,period6_,
 54.4530 -                                        period7_,period8_,period9_,period10_,period11_,period12_,
 54.4531 -                                        env,tempscr_,tempyear_,tempver_,meaNo.level_id);
 54.4532 -                        ELSE
 54.4533 -                           Insert_Data(env,tempscr_,tempyear_,tempver_,meaNo.level_id,'MEASURE',
 54.4534 -                                       period1_,period2_,period3_,period4_,period5_,period6_,
 54.4535 -                                       period7_,period8_,period9_,period10_,period11_,period12_);
 54.4536 -                        END IF;
 54.4537 -                        Environment_Year_Api.Force_Open(env,tempyear_);
 54.4538 -                        Scorecard_Api.Force_Open(env,tempscr_);
 54.4539 -                        Measure_Version_Api.Force_Open(env,tempver_);
 54.4540 -                        insert_mea_rec := 1;
 54.4541 -
 54.4542 -                     ELSE
 54.4543 -
 54.4544 -                        OPEN chk_exist(env, tempscr_, tempyear_, tempver_, meaNo.level_id);
 54.4545 -                        FETCH chk_exist INTO dummy_;
 54.4546 -                        IF (chk_exist%FOUND) THEN
 54.4547 -                           rec_exists_del := 1;
 54.4548 -                        ELSE
 54.4549 -                           rec_exists_del:= 0;
 54.4550 -                        END IF;
 54.4551 -                        CLOSE chk_exist;
 54.4552 -
 54.4553 -                        IF (rec_exists_del = 1) THEN
 54.4554 -                           Delete_Data(env,tempscr_,tempyear_,tempver_,meaNo.level_id);
 54.4555 -                           del_mea_rec := 1;
 54.4556 -                        END IF;
 54.4557 -                     END IF;
 54.4558 -
 54.4559 -                  END IF;
 54.4560 -
 54.4561 -               END LOOP;
 54.4562 -               close rcYear;
 54.4563 -            END LOOP;
 54.4564 -             close rcVer;
 54.4565 -           END LOOP;
 54.4566 -
 54.4567 -         FOR meaNo IN get_mea(env, tempscr_) LOOP
 54.4568 -            FOR compNo IN get_comp(env, tempscr_, meaNo.level_id) LOOP
 54.4569 -               comp_exist := 1;
 54.4570 -               -- ifs_assert_safe shsalk 20060117
 54.4571 -               open rcVer for ssql2_;
 54.4572 -               LOOP
 54.4573 -                  FETCH rcVer INTO tempver_;
 54.4574 -                  EXIT WHEN rcVer%NOTFOUND;
 54.4575 -                  comp_ver_exist := 1;
 54.4576 -                  -- ifs_assert_safe shsalk 20060117
 54.4577 -                  open rcYear for ssql3_;
 54.4578 -                  LOOP
 54.4579 -                    FETCH rcYear INTO tempyear_;
 54.4580 -                    EXIT WHEN rcYear%NOTFOUND;
 54.4581 -                     comp_year_exist := 1;
 54.4582 -
 54.4583 -                     Return_Periods(period1_,period2_,period3_,period4_,period5_,period6_,period7_,
 54.4584 -                                    period8_,period9_,period10_,period11_,period12_,env, tempyear_);
 54.4585 -
 54.4586 -                     IF (tempver_ != 'ASS') THEN
 54.4587 -
 54.4588 -                        OPEN get_year_conn(env, tempyear_);
 54.4589 -                        FETCH get_year_conn INTO dummy2_;
 54.4590 -                        IF (get_year_conn%FOUND) THEN
 54.4591 -                           rec_not_exist2 := 1;
 54.4592 -                        ELSE
 54.4593 -                           rec_not_exist2 := 0;
 54.4594 -                        END IF;
 54.4595 -                        CLOSE get_year_conn;
 54.4596 -
 54.4597 -                        IF (rec_not_exist2 = 1) THEN
 54.4598 -                           comp_year_conn_exist := 1;
 54.4599 -
 54.4600 -                           OPEN chk_exist(env, tempscr_, tempyear_, tempver_, compNo.level_id);
 54.4601 -                           FETCH chk_exist INTO dummy_;
 54.4602 -                           IF (chk_exist%FOUND) THEN
 54.4603 -                              rec_exists2 := 1;
 54.4604 -                           ELSE
 54.4605 -                              rec_exists2 := 0;
 54.4606 -                           END IF;
 54.4607 -                           CLOSE chk_exist;
 54.4608 -
 54.4609 -                           IF (rec_exists2 = 1) THEN
 54.4610 -                              Modify_Data(period1_,period2_,period3_,period4_,period5_,period6_,
 54.4611 -                                          period7_,period8_,period9_,period10_,period11_,period12_,
 54.4612 -                                          env,tempscr_,tempyear_,tempver_,compNo.level_id);
 54.4613 -                           ELSE
 54.4614 -                              Insert_Data(env,tempscr_,tempyear_,tempver_,compNo.level_id,'COMPONENT',
 54.4615 -                                          period1_,period2_,period3_,period4_,period5_,period6_,
 54.4616 -                                          period7_,period8_,period9_,period10_,period11_,period12_);
 54.4617 -                           END IF;
 54.4618 -                           Environment_Year_Api.Force_Open(env,tempyear_);
 54.4619 -                           Scorecard_Api.Force_Open(env,tempscr_);
 54.4620 -                           Measure_Version_Api.Force_Open(env,tempver_);
 54.4621 -                           insert_comp_rec := 1;
 54.4622 -
 54.4623 -                        ELSE
 54.4624 -
 54.4625 -                           OPEN chk_exist(env, tempscr_, tempyear_, tempver_, compNo.level_id);
 54.4626 -                           FETCH chk_exist INTO dummy_;
 54.4627 -                           IF (chk_exist%FOUND) THEN
 54.4628 -                              rec_exists_del2 := 1;
 54.4629 -                           ELSE
 54.4630 -                              rec_exists_del2 := 0;
 54.4631 -                           END IF;
 54.4632 -                           CLOSE chk_exist;
 54.4633 -
 54.4634 -                           IF (rec_exists_del2 = 1) THEN
 54.4635 -                              Delete_Data(env,tempscr_,tempyear_,tempver_, compNo.level_id);
 54.4636 -                              del_comp_rec := 1;
 54.4637 -                           END IF;
 54.4638 -                        END IF;
 54.4639 -
 54.4640 -                     END IF;
 54.4641 -                  END LOOP;
 54.4642 -                  close rcYear;
 54.4643 -               END LOOP;
 54.4644 -                close rcVer;
 54.4645 -
 54.4646 -            END LOOP;
 54.4647 -         END LOOP;
 54.4648 -
 54.4649 -      END LOOP;
 54.4650 -      close rcScr;
 54.4651 -
 54.4652 -END Input_Scorecard_Data;
 54.4653 -
 54.4654 -PROCEDURE Start_Inputing_Scorecards (
 54.4655 -   attr_ IN VARCHAR2 )
 54.4656 -IS
 54.4657 -   new_attr_ VARCHAR2(32000) := attr_;
 54.4658 -   desc_     VARCHAR2(2000);
 54.4659 -BEGIN
 54.4660 -   General_SYS.Init_Method(lu_name_, '&PKG', 'Start_Inputing_Scorecards');
 54.4661 -   desc_ := Language_SYS.Translate_Constant (lu_name_, 'BGJOB_INPUTSSC:Update Scorecard Input Value Table.');
 54.4662 -   Transaction_SYS.Deferred_Call ('Scorecard_Input_Value_API.Input_Scorecard_Data',new_attr_, desc_);
 54.4663 -END Start_Inputing_Scorecards;
 54.4664 -PROCEDURE Hierachical_Distribution (
 54.4665 -   environment_ IN VARCHAR2,
 54.4666 -   scorecard_ IN VARCHAR2,
 54.4667 -   year_ IN VARCHAR2,
 54.4668 -   version_ IN VARCHAR2,
 54.4669 -   object_type_ IN VARCHAR2,
 54.4670 -   period_count_ IN NUMBER,
 54.4671 -   measure_ IN VARCHAR2 DEFAULT NULL )
 54.4672 -IS
 54.4673 -   CURSOR get_scorecard_objects IS
 54.4674 -   SELECT scorecard_object
 54.4675 -   FROM scorecard_input_value_tab
 54.4676 -   WHERE scorecard=scorecard_
 54.4677 -   AND environment=environment_
 54.4678 -   AND object_type=object_type_
 54.4679 -   AND year=year_
 54.4680 -   AND version=version_
 54.4681 -   AND action='TRUE';
 54.4682 -
 54.4683 -   CURSOR get_components(scorecard_id_  VARCHAR2) IS       -- Move to scorecard structure
 54.4684 -   SELECT level_id
 54.4685 -   FROM scorecard_structure
 54.4686 -   WHERE parent_id=measure_
 54.4687 -   AND parent_level_type_db='MEASURE'
 54.4688 -   AND scorecard=scorecard_id_
 54.4689 -   AND environment=environment_;
 54.4690 -
 54.4691 -   CURSOR get_child_scorecards IS         -- Move to scorecard
 54.4692 -   SELECT scorecard
 54.4693 -   FROM scorecard
 54.4694 -   WHERE parent=scorecard_
 54.4695 -   AND environment=environment_;
 54.4696 -
 54.4697 -   CURSOR check_component_selected (component_  VARCHAR2)IS
 54.4698 -   SELECT 1
 54.4699 -   FROM scorecard_input_value_tab
 54.4700 -   WHERE action='TRUE'
 54.4701 -   AND object_type='COMPONENT'
 54.4702 -   AND year=year_
 54.4703 -   AND version=version_
 54.4704 -   AND environment=environment_
 54.4705 -   AND scorecard=scorecard_
 54.4706 -   AND scorecard_object=component_;
 54.4707 -
 54.4708 -   TYPE component_arr_type           IS TABLE OF VARCHAR2(10)
 54.4709 -                                     INDEX BY BINARY_INTEGER;
 54.4710 -   component_arr_                    component_arr_type;
 54.4711 -   index_                            NUMBER;
 54.4712 -   parent_component_count_           NUMBER;
 54.4713 -   child_component_count_            NUMBER;
 54.4714 -   component_exist_                  BOOLEAN;
 54.4715 -   sel_component_arr_                component_arr_type;
 54.4716 -   sel_index_                        NUMBER;
 54.4717 -   temp_                             NUMBER;
 54.4718 -
 54.4719 -BEGIN
 54.4720 -   General_SYS.Init_Method(lu_name_, '&PKG', 'Hierachical_Distribution');
 54.4721 -   IF object_type_ = 'COMPONENT' THEN
 54.4722 -      -- Get measure components in parent
 54.4723 -      index_:=0;
 54.4724 -      sel_index_:=0;
 54.4725 -      FOR components_ IN get_components(scorecard_) LOOP
 54.4726 -         index_:=index_+1;
 54.4727 -         component_arr_(index_):=components_.level_id;
 54.4728 -         OPEN check_component_selected (components_.level_id);
 54.4729 -         FETCH check_component_selected INTO temp_;
 54.4730 -         IF check_component_selected%FOUND THEN
 54.4731 -            sel_index_:=sel_index_+1;
 54.4732 -            sel_component_arr_(sel_index_):=components_.level_id;
 54.4733 -         END IF;
 54.4734 -         CLOSE check_component_selected;
 54.4735 -      END LOOP;
 54.4736 -
 54.4737 -      IF index_>0 THEN
 54.4738 -         parent_component_count_:=index_;
 54.4739 -         FOR child_scorecards_ IN get_child_scorecards LOOP
 54.4740 -            child_component_count_:=0;
 54.4741 -            FOR components_ IN get_components(child_scorecards_.scorecard) LOOP
 54.4742 -               component_exist_:=FALSE;
 54.4743 -               FOR index_ IN 1 .. parent_component_count_ LOOP
 54.4744 -                  IF component_arr_(index_)=components_.level_id THEN
 54.4745 -                     component_exist_:=TRUE;
 54.4746 -                     EXIT;
 54.4747 -                  END IF;
 54.4748 -               END LOOP;
 54.4749 -               IF NOT component_exist_ THEN
 54.4750 -                  Error_SYS.Appl_General(lu_name_,'SAMESTRUCT1: Child scorecard :P1 does not contain component :P2 .',child_scorecards_.scorecard,components_.level_id);
 54.4751 -               END IF;
 54.4752 -               child_component_count_:=child_component_count_+1;
 54.4753 -            END LOOP;
 54.4754 -            IF child_component_count_!=parent_component_count_ THEN
 54.4755 -               Error_SYS.Appl_General(lu_name_,'SAMESTRUCT2: Child scorecard :P1 does not contain the same structure as parent.',child_scorecards_.scorecard);
 54.4756 -            END IF;
 54.4757 -         END LOOP;
 54.4758 -      ELSE
 54.4759 -         Error_SYS.Appl_General(lu_name_,'NOCOMPSEL1: Selected scorecard does not contain any components.');
 54.4760 -      END IF;
 54.4761 -
 54.4762 -      IF sel_index_>0 THEN
 54.4763 -         FOR index_ IN 1..sel_index_ LOOP
 54.4764 -            Distribute_Input_Values___(environment_,scorecard_,year_,version_,object_type_,period_count_,sel_component_arr_(index_));
 54.4765 -         END LOOP;
 54.4766 -      ELSE
 54.4767 -         Error_SYS.Appl_General(lu_name_,'NOCOMPSEL2: No components are selected for hierachical distribution.');
 54.4768 -      END IF;
 54.4769 -      FOR child_scorecards_ IN get_child_scorecards LOOP
 54.4770 -         Calculate_Measures (environment_,child_scorecards_.scorecard ,year_,version_,measure_,period_count_);
 54.4771 -         -- Bug 76573 Removed the call to Set_To_Planned() since it is called inside Calculate_Measures() method
 54.4772 -      END LOOP;
 54.4773 -   ELSE
 54.4774 -      FOR scorecard_objects_ IN get_scorecard_objects LOOP   -- fetch the measures that are selected in planning page
 54.4775 -         Distribute_Input_Values___(environment_,scorecard_,year_,version_,object_type_,period_count_,scorecard_objects_.scorecard_object);
 54.4776 -      END LOOP;
 54.4777 -   END IF;
 54.4778 -
 54.4779 -END Hierachical_Distribution;
 54.4780 -
 54.4781 -PROCEDURE Publish_Environment_Batch (
 54.4782 -   environment_ IN VARCHAR2,
 54.4783 -   schedule_ IN VARCHAR2 )
 54.4784 -IS
 54.4785 -   job_id_     NUMBER;
 54.4786 -   method_     VARCHAR2(2000);
 54.4787 -   attr_       VARCHAR2(32000);
 54.4788 -BEGIN
 54.4789 -   General_SYS.Init_Method(lu_name_, 'SCORECARD_INPUT_VALUE_API','Publish_Environment_Batch');
 54.4790 -   Client_SYS.Clear_Attr(attr_);
 54.4791 -   Client_SYS.Add_To_Attr('ENVIRONMENT',environment_,attr_);
 54.4792 -   --Start_Publish_Environments___(attr_);
 54.4793 -   method_ := 'Scorecard_Input_Value_API.Start_Publish_Environments__('''''||attr_||''''')';
 54.4794 -   IF (schedule_ != 'NOW') THEN
 54.4795 -      Batch_SYS.New_Job(job_id_,method_,schedule_);
 54.4796 -   ELSE
 54.4797 -      Start_Publish_Environments__(attr_);
 54.4798 -   END IF;
 54.4799 -END Publish_Environment_Batch;
 54.4800 -PROCEDURE Set_Publish_Scorecards (
 54.4801 -   environment_ IN VARCHAR2,
 54.4802 -   scorecard_ IN VARCHAR2 )
 54.4803 -IS
 54.4804 -   rec_    SCORECARD%ROWTYPE;
 54.4805 -   rec2_   SCORECARD_TAB%ROWTYPE;
 54.4806 -   attr_   VARCHAR2(2000);
 54.4807 -   info_   VARCHAR2(32000);
 54.4808 -   objver_ VARCHAR2(2000);
 54.4809 -
 54.4810 -BEGIN
 54.4811 -   General_SYS.Init_Method(lu_name_, '&PKG', 'Set_Publish_Scorecards');
 54.4812 -   Publish_Scorecard(environment_,scorecard_);
 54.4813 -   Client_SYS.Clear_Attr(attr_);
 54.4814 -   Scorecard_Api.Force_Publish__(info_,attr_,'DO',environment_,scorecard_);
 54.4815 -   Client_SYS.Clear_Attr(attr_);
 54.4816 -END Set_Publish_Scorecards;
 54.4817 -PROCEDURE Publish_Scorecard_Batch (
 54.4818 -   environment_ IN VARCHAR2,
 54.4819 -   scorecard_ IN VARCHAR2,
 54.4820 -   schedule_ IN VARCHAR2 )
 54.4821 -IS
 54.4822 -   job_id_     NUMBER;
 54.4823 -   method_     VARCHAR2(2000);
 54.4824 -   attr_       VARCHAR2(32000);
 54.4825 -
 54.4826 -BEGIN
 54.4827 -   General_SYS.Init_Method(lu_name_, 'SCORECARD_INPUT_VALUE_API','Publish_Scorecard_Batch');
 54.4828 -   Client_SYS.Clear_Attr(attr_);
 54.4829 -   Client_SYS.Add_To_Attr('ENVIRONMENT',environment_,attr_);
 54.4830 -   Client_SYS.Add_To_Attr('SCORECARD',scorecard_,attr_);
 54.4831 -   --Start_Publish_Environments___(attr_);
 54.4832 -   method_ := 'Scorecard_Input_Value_API.Start_Publish_Scorecards__('''''||attr_||''''')';
 54.4833 -   IF (schedule_ != 'NOW') THEN
 54.4834 -      Batch_SYS.New_Job(job_id_,method_,schedule_);
 54.4835 -   ELSE
 54.4836 -      Start_Publish_Scorecards__(attr_);
 54.4837 -   END IF;
 54.4838 -
 54.4839 -END Publish_Scorecard_Batch;
 54.4840 -PROCEDURE Hierarchical_Consolidation (
 54.4841 -   environment_ IN VARCHAR2,
 54.4842 -   scorecard_ IN VARCHAR2,
 54.4843 -   year_ IN VARCHAR2,
 54.4844 -   version_ IN VARCHAR2,
 54.4845 -   object_type_ IN VARCHAR2,
 54.4846 -   period_count_ IN NUMBER,
 54.4847 -   measure_ IN VARCHAR2 )
 54.4848 -IS
 54.4849 -   CURSOR get_scorecard_objects IS
 54.4850 -   SELECT scorecard_object
 54.4851 -   FROM scorecard_input_value_tab
 54.4852 -   WHERE scorecard=scorecard_
 54.4853 -   AND environment=environment_
 54.4854 -   AND object_type=object_type_
 54.4855 -   AND year=year_
 54.4856 -   AND version=version_
 54.4857 -   AND action='TRUE';
 54.4858 -
 54.4859 -   CURSOR get_components(scorecard_id_  VARCHAR2) IS       -- Move to scorecard structure
 54.4860 -   SELECT level_id
 54.4861 -   FROM scorecard_structure
 54.4862 -   WHERE parent_id=measure_
 54.4863 -   AND parent_level_type_db='MEASURE'
 54.4864 -   AND scorecard=scorecard_id_
 54.4865 -   AND environment=environment_;
 54.4866 -
 54.4867 -   CURSOR get_child_scorecards IS         -- Move to scorecard
 54.4868 -   SELECT scorecard
 54.4869 -   FROM scorecard
 54.4870 -   WHERE parent=scorecard_
 54.4871 -   AND environment=environment_;
 54.4872 -
 54.4873 -   CURSOR check_child_scorecards IS        --- Move to scorecard
 54.4874 -   SELECT 1
 54.4875 -   FROM scorecard
 54.4876 -   WHERE parent=scorecard_
 54.4877 -   AND environment=environment_;
 54.4878 -
 54.4879 -   CURSOR check_component_selected (component_  VARCHAR2)IS
 54.4880 -   SELECT 1
 54.4881 -   FROM scorecard_input_value_tab
 54.4882 -   WHERE action='TRUE'
 54.4883 -   AND object_type='COMPONENT'
 54.4884 -   AND year=year_
 54.4885 -   AND version=version_
 54.4886 -   AND environment=environment_
 54.4887 -   AND scorecard=scorecard_
 54.4888 -   AND scorecard_object=component_;
 54.4889 -
 54.4890 -   TYPE component_arr_type           IS TABLE OF VARCHAR2(10)
 54.4891 -                                     INDEX BY BINARY_INTEGER;
 54.4892 -   component_arr_                    component_arr_type;
 54.4893 -   index_                            NUMBER;
 54.4894 -   parent_component_count_           NUMBER;
 54.4895 -   child_component_count_            NUMBER;
 54.4896 -   component_exist_                  BOOLEAN;
 54.4897 -   sel_component_arr_                component_arr_type;
 54.4898 -   sel_index_                        NUMBER;
 54.4899 -   temp_                             NUMBER;
 54.4900 -   check_child_                      NUMBER;
 54.4901 -
 54.4902 -BEGIN
 54.4903 -   General_SYS.Init_Method(lu_name_, '&PKG', 'Hierarchical_Consolidation');
 54.4904 -   OPEN check_child_scorecards;
 54.4905 -      FETCH check_child_scorecards INTO check_child_;
 54.4906 -      IF (check_child_scorecards%NOTFOUND) THEN
 54.4907 -         CLOSE check_child_scorecards;
 54.4908 -         Error_SYS.Appl_General(lu_name_,'CHECHISC1: No child scorecards found for the scorecard :P1.',scorecard_);
 54.4909 -      END IF;
 54.4910 -   CLOSE check_child_scorecards;
 54.4911 -
 54.4912 -
 54.4913 -   IF object_type_ = 'COMPONENT' THEN
 54.4914 -      -- Get measure components in parent
 54.4915 -      index_:=0;
 54.4916 -      sel_index_:=0;
 54.4917 -      FOR components_ IN get_components(scorecard_) LOOP
 54.4918 -         index_:=index_+1;
 54.4919 -         component_arr_(index_):=components_.level_id;
 54.4920 -         OPEN check_component_selected (components_.level_id);
 54.4921 -         FETCH check_component_selected INTO temp_;
 54.4922 -         IF check_component_selected%FOUND THEN
 54.4923 -            sel_index_:=sel_index_+1;
 54.4924 -            sel_component_arr_(sel_index_):=components_.level_id;
 54.4925 -         END IF;
 54.4926 -         CLOSE check_component_selected;
 54.4927 -      END LOOP;
 54.4928 -
 54.4929 -      IF index_>0 THEN
 54.4930 -         parent_component_count_:=index_;
 54.4931 -         FOR child_scorecards_ IN get_child_scorecards LOOP
 54.4932 -            child_component_count_:=0;
 54.4933 -            FOR components_ IN get_components(child_scorecards_.scorecard) LOOP
 54.4934 -               component_exist_:=FALSE;
 54.4935 -               FOR index_ IN 1 .. parent_component_count_ LOOP
 54.4936 -                  IF component_arr_(index_)=components_.level_id THEN
 54.4937 -                     component_exist_:=TRUE;
 54.4938 -                     EXIT;
 54.4939 -                  END IF;
 54.4940 -               END LOOP;
 54.4941 -               IF NOT component_exist_ THEN
 54.4942 -                  Error_SYS.Appl_General(lu_name_,'SAMESTRUCT1: Child scorecard :P1 does not contain component :P2 .',child_scorecards_.scorecard,components_.level_id);
 54.4943 -               END IF;
 54.4944 -               child_component_count_:=child_component_count_+1;
 54.4945 -            END LOOP;
 54.4946 -            IF child_component_count_!=parent_component_count_ THEN
 54.4947 -               Error_SYS.Appl_General(lu_name_,'SAMESTRUCT2: Child scorecard :P1 does not contain the same structure as parent.',child_scorecards_.scorecard);
 54.4948 -            END IF;
 54.4949 -         END LOOP;
 54.4950 -      ELSE
 54.4951 -         Error_SYS.Appl_General(lu_name_,'NOCOMPSEL1: Selected scorecard does not contain any components.');
 54.4952 -      END IF;
 54.4953 -
 54.4954 -      IF sel_index_>0 THEN
 54.4955 -         FOR index_ IN 1..sel_index_ LOOP
 54.4956 -            Consolidate_Values(environment_,scorecard_,year_,version_,object_type_,period_count_,sel_component_arr_(index_));
 54.4957 -         END LOOP;
 54.4958 -         Calculate_Measures (environment_,scorecard_ ,year_,version_,measure_,period_count_);
 54.4959 -         -- Bug 76573 Removed the call to Set_To_Planned() since it is called inside Calculate_Measures() method
 54.4960 -      ELSE
 54.4961 -         Error_SYS.Appl_General(lu_name_,'NOCOMPSEL2: No components are selected for hierachical distribution.');
 54.4962 -      END IF;
 54.4963 -
 54.4964 -
 54.4965 -   ELSE
 54.4966 -
 54.4967 -      FOR scorecard_objects_ IN get_scorecard_objects LOOP   -- fetch the measures that are selected in planning page
 54.4968 -         Consolidate_Values(environment_,scorecard_,year_,version_,object_type_,period_count_,scorecard_objects_.scorecard_object);
 54.4969 -      END LOOP;
 54.4970 -
 54.4971 -   END IF;
 54.4972 -
 54.4973 -END Hierarchical_Consolidation;
 54.4974 -PROCEDURE Consolidate_Values (
 54.4975 -   environment_ IN VARCHAR2,
 54.4976 -   scorecard_ IN VARCHAR2,
 54.4977 -   year_ IN VARCHAR2,
 54.4978 -   version_ IN VARCHAR2,
 54.4979 -   object_type_ IN VARCHAR2,
 54.4980 -   period_count_ IN NUMBER,
 54.4981 -   scorecard_object_ IN VARCHAR2 )
 54.4982 -IS
 54.4983 -
 54.4984 -   year_value_                       NUMBER;
 54.4985 -   newrec_                           SCORECARD_INPUT_VALUE_TAB%ROWTYPE;
 54.4986 -   oldrec_                           SCORECARD_INPUT_VALUE_TAB%ROWTYPE;
 54.4987 -   objid_                            VARCHAR2(2000);
 54.4988 -   attr_                             VARCHAR2(2000);
 54.4989 -   objversion_                       VARCHAR2(2000);
 54.4990 -   child_count_                      NUMBER;
 54.4991 -   TYPE ValArrType                   IS TABLE OF NUMBER
 54.4992 -                                     INDEX BY BINARY_INTEGER;
 54.4993 -   period_val_arr_                   ValArrType;
 54.4994 -   temp_period_count_                NUMBER;
 54.4995 -   value_distribution_type_          VARCHAR2(20);
 54.4996 -   period_val_                       VARCHAR2(30);
 54.4997 -   child_scr_                        VARCHAR2(20);
 54.4998 -   temp_val_                         VARCHAR2(5);
 54.4999 -   temp_period_value_                NUMBER;
 54.5000 -
 54.5001 -
 54.5002 -   CURSOR get_child_scorecards IS        --- Move to scorecard
 54.5003 -      SELECT scorecard
 54.5004 -      FROM scorecard
 54.5005 -      WHERE parent=scorecard_
 54.5006 -      AND environment=environment_;
 54.5007 -
 54.5008 -   CURSOR get_open_child_scr IS
 54.5009 -      SELECT '1'
 54.5010 -      FROM scorecard
 54.5011 -      WHERE scorecard = child_scr_
 54.5012 -      AND environment=environment_
 54.5013 -      AND objstate NOT IN ('Open','Planned');
 54.5014 -
 54.5015 -
 54.5016 -   CURSOR get_total_period_val_ (period_value_  NUMBER) IS
 54.5017 -      SELECT SUM(DECODE(period_value_,1,p1_value,2,p2_value,3,p3_value,
 54.5018 -                                   4,p4_value,5,p5_value,6,p6_value,7,p7_value,
 54.5019 -                                   8,p8_value,9,p9_value,10,p10_value,11,p11_value,
 54.5020 -                                   12,p12_value))
 54.5021 -      FROM  scorecard_input_value_tab
 54.5022 -      WHERE environment= environment_
 54.5023 -      AND   scorecard IN (SELECT sc.scorecard
 54.5024 -                          FROM scorecard_tab sc
 54.5025 -                          WHERE sc.environment = environment_
 54.5026 -                          AND sc.parent = scorecard_
 54.5027 -                          AND (sc.scorecard IN (SELECT scorecard
 54.5028 -                                                FROM scorecard_user_access_tab
 54.5029 -                                                WHERE identity = (SELECT fnd_user
 54.5030 -                                                                  FROM   fnd_session)
 54.5031 -                                                AND environment=sc.environment
 54.5032 -                                                AND scorecard=sc.scorecard)
 54.5033 -                          OR sc.scorecard IN (SELECT scorecard
 54.5034 -                                           FROM scorecard_role_access_tab
 54.5035 -                                           WHERE environment=sc.environment
 54.5036 -                                           AND scorecard=sc.scorecard
 54.5037 -                                           AND role IN (SELECT oracle_role
 54.5038 -                                           FROM fnd_user_role_runtime
 54.5039 -                                           WHERE identity = (SELECT fnd_user
 54.5040 -                                                             FROM   fnd_session)))))
 54.5041 -      AND   year = year_
 54.5042 -      AND version = version_
 54.5043 -      AND scorecard_object = scorecard_object_
 54.5044 -      AND object_type_=object_type_;
 54.5045 -
 54.5046 -
 54.5047 -   CURSOR get_period_val_ (period_value_  NUMBER) IS
 54.5048 -      SELECT DECODE(period_value_,1,p1_value,2,p2_value,3,p3_value,
 54.5049 -                                   4,p4_value,5,p5_value,6,p6_value,7,p7_value,
 54.5050 -                                   8,p8_value,9,p9_value,10,p10_value,11,p1_value,
 54.5051 -                                   12,p12_value)
 54.5052 -      FROM  scorecard_input_value_tab
 54.5053 -      WHERE environment= environment_
 54.5054 -      AND   scorecard IN (SELECT sc.scorecard
 54.5055 -                          FROM scorecard_tab sc
 54.5056 -                          WHERE sc.environment = environment_
 54.5057 -                          AND sc.parent = scorecard_
 54.5058 -                          AND (sc.scorecard IN (SELECT scorecard
 54.5059 -                                                FROM scorecard_user_access_tab
 54.5060 -                                                WHERE identity = (SELECT fnd_user
 54.5061 -                                                                  FROM   fnd_session)
 54.5062 -                                                AND environment=sc.environment
 54.5063 -                                                AND scorecard=sc.scorecard)
 54.5064 -                          OR sc.scorecard IN (SELECT scorecard
 54.5065 -                                           FROM scorecard_role_access_tab
 54.5066 -                                           WHERE environment=sc.environment
 54.5067 -                                           AND scorecard=sc.scorecard
 54.5068 -                                           AND role IN (SELECT oracle_role
 54.5069 -                                           FROM fnd_user_role_runtime
 54.5070 -                                           WHERE identity = (SELECT fnd_user
 54.5071 -                                                             FROM   fnd_session)))))
 54.5072 -      AND   year = year_
 54.5073 -      AND version = version_
 54.5074 -      AND scorecard_object = scorecard_object_
 54.5075 -      AND object_type_=object_type_;
 54.5076 -
 54.5077 -BEGIN
 54.5078 -    General_SYS.Init_Method(lu_name_, '&PKG', 'Consolidate_Values');
 54.5079 -   year_value_ := 0;
 54.5080 -   --value_distribution_type_ := scorecard_Structure_api.Get_Value_Dist_Type_Db(scorecard_,scorecard_object_,environment_,object_type_);
 54.5081 -   value_distribution_type_ := measure_type_api.Encode(scorecard_Measure_api.Get_Measure_type(scorecard_object_));
 54.5082 -
 54.5083 -   IF value_distribution_type_ IS NULL THEN
 54.5084 -      IF object_type_='MEASURE' THEN
 54.5085 -         Error_SYS.Appl_General(lu_name_,'VALDIST1: Value distribution type must have a value for measure :P1 in parent scorecard :P2.',scorecard_object_,scorecard_);
 54.5086 -      ELSE
 54.5087 -         Error_SYS.Appl_General(lu_name_,'VALDIST2: Value distribution type must have a value for component :P1 in parent scorecard :P2.',scorecard_object_,scorecard_);
 54.5088 -      END IF;
 54.5089 -   END IF;
 54.5090 -
 54.5091 -
 54.5092 -   FOR child_scorecards_ IN get_child_scorecards LOOP  -- fetch the child scorecards
 54.5093 -
 54.5094 -      child_scr_ := child_scorecards_.scorecard;
 54.5095 -      OPEN get_open_child_scr;
 54.5096 -      FETCH get_open_child_scr INTO temp_val_;
 54.5097 -      CLOSE get_open_child_scr;
 54.5098 -
 54.5099 -      IF (temp_val_ = '1') THEN
 54.5100 -         Error_SYS.Appl_General(lu_name_,'TMPVAL: Not all scorecards in the hierarchy are opened for planning. Consolidation not possible.');
 54.5101 -      END IF;
 54.5102 -
 54.5103 -      IF NOT Check_Exist___(environment_,child_scorecards_.scorecard,year_,version_,scorecard_object_) THEN
 54.5104 -         Error_SYS.Appl_General(lu_name_,'INPVAL: Scorecard object :P1 does not exist in scorecard :P2.',scorecard_object_,child_scorecards_.scorecard);
 54.5105 -      END IF;
 54.5106 -
 54.5107 -   END LOOP;
 54.5108 -
 54.5109 -   FOR temp_period_count_ IN 1..period_count_ LOOP
 54.5110 -
 54.5111 -      OPEN get_period_val_(temp_period_count_);
 54.5112 -      LOOP
 54.5113 -            FETCH get_period_val_ INTO temp_period_value_;
 54.5114 -            EXIT WHEN get_period_val_%NOTFOUND;
 54.5115 -
 54.5116 -         IF (temp_period_value_ IS NULL) THEN
 54.5117 -            Error_SYS.Appl_General(lu_name_,'SCINPUTVALNO :  One of the child scorecard objects does not have values for the periods');
 54.5118 -         END IF;
 54.5119 -      END LOOP;
 54.5120 -      CLOSE get_period_val_;
 54.5121 -   END LOOP;
 54.5122 -
 54.5123 -
 54.5124 -   oldrec_:=Lock_By_Keys___(environment_,scorecard_,year_,version_,scorecard_object_);
 54.5125 -
 54.5126 -
 54.5127 -   period_val_arr_(1)  := oldrec_.p1_value;
 54.5128 -   period_val_arr_(2)  := oldrec_.p2_value;
 54.5129 -   period_val_arr_(3)  := oldrec_.p3_value;
 54.5130 -   period_val_arr_(4)  := oldrec_.p4_value;
 54.5131 -   period_val_arr_(5)  := oldrec_.p5_value;
 54.5132 -   period_val_arr_(6)  := oldrec_.p6_value;
 54.5133 -   period_val_arr_(7)  := oldrec_.p7_value;
 54.5134 -   period_val_arr_(8)  := oldrec_.p8_value;
 54.5135 -   period_val_arr_(9)  := oldrec_.p9_value;
 54.5136 -   period_val_arr_(10) := oldrec_.p10_value;
 54.5137 -   period_val_arr_(11) := oldrec_.p11_value;
 54.5138 -   period_val_arr_(12) := oldrec_.p12_value;
 54.5139 -
 54.5140 -   newrec_:=oldrec_;
 54.5141 -
 54.5142 -   IF (value_distribution_type_ = 'PERCENTAGE') THEN
 54.5143 -
 54.5144 -      child_count_:=Scorecard_API.Get_Child_Count(scorecard_,environment_);
 54.5145 -
 54.5146 -      FOR temp_period_count_ IN 1..period_count_ LOOP
 54.5147 -
 54.5148 -         OPEN get_total_period_val_ (temp_period_count_);
 54.5149 -         FETCH get_total_period_val_ INTO period_val_arr_(temp_period_count_);
 54.5150 -         period_val_arr_(temp_period_count_) := (period_val_arr_(temp_period_count_)/child_count_);
 54.5151 -         year_value_:=year_value_ +period_val_arr_(temp_period_count_);
 54.5152 -         CLOSE get_total_period_val_;
 54.5153 -
 54.5154 -      END LOOP;
 54.5155 -      year_value_:=year_value_ /period_count_;
 54.5156 -
 54.5157 -   ELSIF (value_distribution_type_ = 'VALUE') THEN
 54.5158 -
 54.5159 -      FOR temp_period_count_ IN 1..period_count_ LOOP
 54.5160 -
 54.5161 -         OPEN get_total_period_val_ (temp_period_count_);
 54.5162 -         FETCH get_total_period_val_ INTO period_val_arr_(temp_period_count_);
 54.5163 -         year_value_:=year_value_ +period_val_arr_(temp_period_count_);
 54.5164 -         CLOSE get_total_period_val_;
 54.5165 -
 54.5166 -      END LOOP;
 54.5167 -
 54.5168 -   END IF;
 54.5169 -
 54.5170 -   newrec_.year_value:=year_value_;
 54.5171 -   newrec_.p1_value :=period_val_arr_(1);
 54.5172 -   newrec_.p2_value :=period_val_arr_(2);
 54.5173 -   newrec_.p3_value :=period_val_arr_(3);
 54.5174 -   newrec_.p4_value :=period_val_arr_(4);
 54.5175 -   newrec_.p5_value :=period_val_arr_(5);
 54.5176 -   newrec_.p6_value :=period_val_arr_(6);
 54.5177 -   newrec_.p7_value :=period_val_arr_(7);
 54.5178 -   newrec_.p8_value :=period_val_arr_(8);
 54.5179 -   newrec_.p9_value :=period_val_arr_(9);
 54.5180 -   newrec_.p10_value:=period_val_arr_(10);
 54.5181 -   newrec_.p11_value:=period_val_arr_(11);
 54.5182 -   newrec_.p12_value:=period_val_arr_(12);
 54.5183 -
 54.5184 -   Update___(objid_,oldrec_,newrec_,attr_,objversion_,TRUE);
 54.5185 -   Scorecard_api.Set_To_Planned(environment_,scorecard_);
 54.5186 -   Scorecard_Input_Value_api.Set_To_Planned(environment_,scorecard_,year_,version_,scorecard_object_);
 54.5187 -END Consolidate_Values;
 54.5188 -PROCEDURE All_Hierarchical_Logic (
 54.5189 -   environment_ IN VARCHAR2,
 54.5190 -   scorecard_ IN VARCHAR2,
 54.5191 -   year_ IN VARCHAR2,
 54.5192 -   version_ IN VARCHAR2,
 54.5193 -   action_ IN VARCHAR2 )
 54.5194 -IS
 54.5195 -   comp_level_             VARCHAR2(5);
 54.5196 -   period_count_           NUMBER;
 54.5197 -   measures_               VARCHAR2(10);
 54.5198 -   scorecard_object_       VARCHAR2(10);
 54.5199 -   newrec_                 SCORECARD_INPUT_VALUE_TAB%ROWTYPE;
 54.5200 -   oldrec_                 SCORECARD_INPUT_VALUE_TAB%ROWTYPE;
 54.5201 -   attr_                   VARCHAR2(2000);
 54.5202 -   objid_                  VARCHAR2(2000);
 54.5203 -   objversion_             VARCHAR2(2000);
 54.5204 -   get_childs_             VARCHAR2(10);
 54.5205 -   child_exists_           VARCHAR2(10);
 54.5206 -
 54.5207 -
 54.5208 -   CURSOR get_scorecard_objects(scorecard_ VARCHAR2) IS
 54.5209 -      SELECT scorecard_object
 54.5210 -      FROM scorecard_input_value_tab
 54.5211 -      WHERE environment = environment_
 54.5212 -      AND scorecard = scorecard_
 54.5213 -      AND year = year_
 54.5214 -      AND version = version_;
 54.5215 -
 54.5216 -   CURSOR get_period_count IS
 54.5217 -     SELECT count(1)
 54.5218 -     FROM scorecard_period_tab
 54.5219 -     WHERE environment = environment_
 54.5220 -     AND year = year_;
 54.5221 -
 54.5222 -   CURSOR get_scorecard_measures(scorecard_ VARCHAR2) IS
 54.5223 -      SELECT level_id
 54.5224 -      FROM scorecard_structure_tab
 54.5225 -      WHERE environment = environment_
 54.5226 -      AND scorecard = scorecard_
 54.5227 -      AND child_level_type = 'MEASURE';
 54.5228 -
 54.5229 -   CURSOR get_childs IS
 54.5230 -      SELECT scorecard
 54.5231 -      FROM scorecard
 54.5232 -      WHERE environment = environment_
 54.5233 -      AND parent = scorecard_
 54.5234 -      AND objstate IN ('Open','Planned');
 54.5235 -
 54.5236 -   CURSOR get_childs_for_cons IS
 54.5237 -      SELECT scorecard
 54.5238 -      FROM   scorecard
 54.5239 -      WHERE  environment = environment_
 54.5240 -      START WITH parent = scorecard_
 54.5241 -      CONNECT BY parent = PRIOR scorecard
 54.5242 -      AND   environment = PRIOR environment
 54.5243 -      AND objstate IN ('Open','Planned')
 54.5244 -      ORDER BY level_sequence desc;
 54.5245 -
 54.5246 -BEGIN
 54.5247 -   General_SYS.Init_Method(lu_name_, '&PKG', 'All_Hierarchical_Logic');
 54.5248 -   child_exists_ := 'TRUE';
 54.5249 -   OPEN get_childs;
 54.5250 -   FETCH get_childs INTO get_childs_;
 54.5251 -   IF (get_childs%NOTFOUND) THEN
 54.5252 -      CLOSE get_childs;
 54.5253 -      child_exists_ := 'FALSE';
 54.5254 -   ELSE
 54.5255 -      CLOSE get_childs;
 54.5256 -   END IF;
 54.5257 -
 54.5258 -   IF (child_exists_ = 'TRUE') THEN
 54.5259 -
 54.5260 -      FOR get_scorecard_objects_ IN get_scorecard_objects(scorecard_) LOOP
 54.5261 -        scorecard_object_ := get_scorecard_objects_.scorecard_object;
 54.5262 -        oldrec_:=Lock_By_Keys___(environment_,scorecard_,year_,version_,scorecard_object_);
 54.5263 -        newrec_:=oldrec_;
 54.5264 -        newrec_.action:='TRUE';
 54.5265 -        Update___(objid_,oldrec_,newrec_,attr_,objversion_,TRUE);
 54.5266 -      END LOOP;
 54.5267 -
 54.5268 -      measures_ := null;
 54.5269 -      comp_level_ := scorecard_environment_api.Get_Component_Level(environment_ );
 54.5270 -
 54.5271 -      OPEN get_period_count;
 54.5272 -      FETCH get_period_count INTO period_count_;
 54.5273 -      CLOSE get_period_count;
 54.5274 -
 54.5275 -      IF (action_ = 'DISTRIBUTION') THEN
 54.5276 -         IF (comp_level_ = 'TRUE') THEN
 54.5277 -            FOR get_scorecard_measures_ IN get_scorecard_measures(scorecard_) LOOP
 54.5278 -                measures_ := get_scorecard_measures_.level_id;
 54.5279 -                Hierachical_Distribution(environment_,scorecard_,year_,version_ ,'COMPONENT',period_count_,measures_);
 54.5280 -            END LOOP;
 54.5281 -         ELSE
 54.5282 -            Hierachical_Distribution(environment_,scorecard_,year_,version_ ,'MEASURE',period_count_,measures_);
 54.5283 -         END IF;
 54.5284 -         FOR get_childs_ IN get_childs LOOP
 54.5285 -            All_Hierarchical_Logic(environment_,get_childs_.scorecard,year_,version_ ,action_);
 54.5286 -         END LOOP;
 54.5287 -
 54.5288 -      ELSIF (action_ = 'CONSOLIDATION') THEN
 54.5289 -         FOR get_childs_for_cons_ IN  get_childs_for_cons LOOP
 54.5290 -            FOR get_scorecard_objects_ IN get_scorecard_objects(get_childs_for_cons_.scorecard) LOOP
 54.5291 -                scorecard_object_ := get_scorecard_objects_.scorecard_object;
 54.5292 -                oldrec_:=Lock_By_Keys___(environment_,get_childs_for_cons_.scorecard,year_,version_,scorecard_object_);
 54.5293 -                newrec_:=oldrec_;
 54.5294 -                newrec_.action:='TRUE';
 54.5295 -                Update___(objid_,oldrec_,newrec_,attr_,objversion_,TRUE);
 54.5296 -            END LOOP;
 54.5297 -            IF (Scorecard_API.Get_Child_Count(get_childs_for_cons_.scorecard,environment_) >=1) THEN
 54.5298 -               IF (comp_level_ = 'TRUE') THEN
 54.5299 -                  FOR get_scorecard_measures_ IN get_scorecard_measures(get_childs_for_cons_.scorecard) LOOP
 54.5300 -                     measures_ := get_scorecard_measures_.level_id;
 54.5301 -                     Hierarchical_Consolidation(environment_,get_childs_for_cons_.scorecard,year_,version_ ,'COMPONENT',period_count_,measures_);
 54.5302 -                  END LOOP;
 54.5303 -               ELSE
 54.5304 -                  Hierarchical_Consolidation(environment_,get_childs_for_cons_.scorecard,year_,version_ ,'MEASURE',period_count_,measures_);
 54.5305 -               END IF;
 54.5306 -            END IF;
 54.5307 -         END LOOP;
 54.5308 -         -- for the selected scorecard
 54.5309 -         IF (Scorecard_API.Get_Child_Count(scorecard_,environment_) >=1) THEN
 54.5310 -            IF (comp_level_ = 'TRUE') THEN
 54.5311 -               FOR get_scorecard_measures_ IN get_scorecard_measures(scorecard_) LOOP
 54.5312 -                  measures_ := get_scorecard_measures_.level_id;
 54.5313 -                  Hierarchical_Consolidation(environment_,scorecard_,year_,version_ ,'COMPONENT',period_count_,measures_);
 54.5314 -               END LOOP;
 54.5315 -            ELSE
 54.5316 -               Hierarchical_Consolidation(environment_,scorecard_,year_,version_ ,'MEASURE',period_count_,measures_);
 54.5317 -            END IF;
 54.5318 -         END IF;
 54.5319 -      END IF;
 54.5320 -   END IF;
 54.5321 -END All_Hierarchical_Logic;
 54.5322 -PROCEDURE Call_Hierarchical_Logic (
 54.5323 -   attr_ IN VARCHAR2 )
 54.5324 -IS
 54.5325 -   environment_          Scorecard_Environment_Tab.environment%TYPE;
 54.5326 -   scorecard_            Scorecard_Tab.scorecard%TYPE;
 54.5327 -   year_                 VARCHAR2(20);
 54.5328 -   version_              VARCHAR2(20);
 54.5329 -   action_               VARCHAR2(30);
 54.5330 -BEGIN
 54.5331 -   General_SYS.Init_Method(lu_name_, '&PKG', 'Call_Hierarchical_Logic');
 54.5332 -   environment_         := Client_SYS.Get_Item_Value('ENVIRONMENT'       ,attr_);
 54.5333 -   scorecard_           := Client_SYS.Get_Item_Value('SCORECARD'         ,attr_);
 54.5334 -   year_                := Client_SYS.Get_Item_Value('YEAR'              ,attr_);
 54.5335 -   version_             := Client_SYS.Get_Item_Value('VERSION'           ,attr_);
 54.5336 -   action_              := Client_SYS.Get_Item_Value('ACTION'            ,attr_);
 54.5337 -   Scorecard_Input_Value_API.All_Hierarchical_Logic(environment_,scorecard_,year_,version_,action_);
 54.5338 -END Call_Hierarchical_Logic;
 54.5339 -PROCEDURE Start_Hierarchical_Logic (
 54.5340 -   attr_ IN VARCHAR2 )
 54.5341 -IS
 54.5342 -   new_attr_  VARCHAR2(2000) := attr_;
 54.5343 -   desc_         VARCHAR2(2000);
 54.5344 -BEGIN
 54.5345 -   General_SYS.Init_Method(lu_name_, '&PKG', 'Start_Hierarchical_Logic');
 54.5346 -   desc_ := Language_SYS.Translate_Constant (lu_name_, 'BGJOB_HR_LOGIC:Update Scorecard objects in the scorecard input value according to the hierarchical logic.');
 54.5347 -   Transaction_SYS.Deferred_Call ('Scorecard_Input_Value_API.Call_Hierarchical_Logic',new_attr_, desc_);
 54.5348 -END Start_Hierarchical_Logic;
 54.5349 -PROCEDURE Background_Hierarchical_Logic (
 54.5350 -   environment_ IN VARCHAR2,
 54.5351 -   scorecard_ IN VARCHAR2,
 54.5352 -   year_ IN VARCHAR2,
 54.5353 -   version_ IN VARCHAR2,
 54.5354 -   action_ IN VARCHAR2,
 54.5355 -   execution_plan_ IN VARCHAR2 )
 54.5356 -IS
 54.5357 -   job_id_             NUMBER;
 54.5358 -   method_             VARCHAR2(2000);
 54.5359 -   attr_               VARCHAR2(2000);
 54.5360 -BEGIN
 54.5361 -   General_SYS.Init_Method(lu_name_, 'Scorecard_Input_Value_API','Background_Hierarchical_Logic');
 54.5362 -   Client_SYS.Clear_Attr(attr_);
 54.5363 -   Client_SYS.Add_To_Attr('ENVIRONMENT',environment_,attr_);
 54.5364 -   Client_SYS.Add_To_Attr('SCORECARD',scorecard_ ,attr_);
 54.5365 -   Client_SYS.Add_To_Attr('YEAR',year_ ,attr_);
 54.5366 -   Client_SYS.Add_To_Attr('VERSION',version_ ,attr_);
 54.5367 -   Client_SYS.Add_To_Attr('ACTION',action_ ,attr_);
 54.5368 -   method_:='Scorecard_Input_Value_API.Start_Hierarchical_Logic_('''''||attr_||''''')';
 54.5369 -   IF (execution_plan_ != 'NOW') THEN
 54.5370 -      Batch_SYS.New_Job(job_id_,method_,execution_plan_);
 54.5371 -   ELSE
 54.5372 -      Start_Hierarchical_Logic(attr_);
 54.5373 -   END IF;
 54.5374 -END Background_Hierarchical_Logic;
 54.5375 -PROCEDURE Set_To_Planned (
 54.5376 -   environment_ IN VARCHAR2,
 54.5377 -   scorecard_ IN VARCHAR2,
 54.5378 -   year_ IN VARCHAR2,
 54.5379 -   version_ IN VARCHAR2,
 54.5380 -   scorecard_object_ IN VARCHAR2 )
 54.5381 -IS
 54.5382 -  rec_    SCORECARD_INPUT_VALUE%ROWTYPE;
 54.5383 -  rec2_   SCORECARD_INPUT_VALUE_TAB%ROWTYPE;
 54.5384 -  attr_   VARCHAR2(2000);
 54.5385 -  info_   VARCHAR2(32000);
 54.5386 -  objver_ VARCHAR2(2000);
 54.5387 -  CURSOR get_attr IS
 54.5388 -     SELECT *
 54.5389 -     FROM SCORECARD_INPUT_VALUE
 54.5390 -     WHERE environment=environment_
 54.5391 -     AND   scorecard=scorecard_
 54.5392 -     AND   year=year_
 54.5393 -     AND   version=version_
 54.5394 -     AND   scorecard_object=scorecard_object_;
 54.5395 -BEGIN
 54.5396 -   General_SYS.Init_Method(lu_name_, 'SCORECARD_INPUT_VALUE_API', 'Set_To_Planned');
 54.5397 -   OPEN get_attr;
 54.5398 -   FETCH get_attr INTO rec_;
 54.5399 -   CLOSE get_attr;
 54.5400 -   Client_SYS.Clear_Attr(attr_);
 54.5401 -   Client_SYS.Add_To_Attr ('OBJID', rec_.objid, attr_);
 54.5402 -   Client_SYS.Add_To_Attr ('OBJVERSION', rec_.objversion, attr_);
 54.5403 -   --rec2_:=Lock_By_Keys___(environment_,scorecard_,year_,version_,scorecard_object_);
 54.5404 -   --objver_:= to_char(rec2_.rowversion,'YYYYMMDDHH24MISS');
 54.5405 -   --Plan__(info_,rec_.objid,objver_,attr_,'DO');
 54.5406 -   Plan__(info_,rec_.objid,rec_.objversion,attr_,'DO');
 54.5407 -   Client_SYS.Clear_Attr(attr_);
 54.5408 -END Set_To_Planned;
 54.5409 -FUNCTION Get_Sco_Obj_State_Date (
 54.5410 -   environment_ IN VARCHAR2,
 54.5411 -   scorecard_ IN VARCHAR2,
 54.5412 -   measure_ IN VARCHAR2 ) RETURN DATE
 54.5413 -IS
 54.5414 -   temp_ &TABLE..mea_state_change_date%TYPE;
 54.5415 -   CURSOR get_attr IS
 54.5416 -      SELECT max(mea_state_change_date)
 54.5417 -      FROM &TABLE
 54.5418 -      WHERE environment = environment_
 54.5419 -      AND   scorecard = scorecard_
 54.5420 -      AND   scorecard_object = measure_;
 54.5421 -BEGIN
 54.5422 -   OPEN get_attr;
 54.5423 -   FETCH get_attr INTO temp_;
 54.5424 -   CLOSE get_attr;
 54.5425 -   RETURN temp_;
 54.5426 -END Get_Sco_Obj_State_Date;
 54.5427 -PROCEDURE Budget_And_Calculate (
 54.5428 -   components_not_used_ OUT VARCHAR2,
 54.5429 -   company_ IN VARCHAR2,
 54.5430 -   environment_ IN VARCHAR2,
 54.5431 -   scorecard_ IN VARCHAR2,
 54.5432 -   year_ IN VARCHAR2,
 54.5433 -   measure_ IN VARCHAR2,
 54.5434 -   version_ IN VARCHAR2,
 54.5435 -   budget_version_ IN VARCHAR2,
 54.5436 -   component_list_ IN VARCHAR2 )
 54.5437 -IS
 54.5438 -
 54.5439 -   TYPE RefCurTyp IS        REF CURSOR;
 54.5440 -   scorecard_input_rec_     RefCurTyp;
 54.5441 -   budget_period_rec_       RefCurTyp;
 54.5442 -   source_stmt_             VARCHAR2(2000);
 54.5443 -   code_part_str_           VARCHAR2(50);
 54.5444 -   code_part_values_        VARCHAR2(2000);
 54.5445 -   account_list_            VARCHAR2(2000);
 54.5446 -   component_rec_           SCORECARD_MEASURE_TAB%ROWTYPE;
 54.5447 -   period_val_              SCORECARD_PERIOD_TAB.PERIOD_MATCH_IDENTITY%TYPE;
 54.5448 -   temp_input_val_rec_      SCORECARD_INPUT_VALUE_TAB%ROWTYPE;
 54.5449 -   code_part_value_         VARCHAR2(20);
 54.5450 -   scr_code_part_           VARCHAR2(20);
 54.5451 -   in_values_               VARCHAR2(2000);
 54.5452 -   input_value_tab_stmt_    VARCHAR2(2000);
 54.5453 -   table_name_              VARCHAR2(50);
 54.5454 -   aggregated_value_        NUMBER;
 54.5455 -   budget_year_             NUMBER;
 54.5456 -   new_account_list_        VARCHAR2(2000);
 54.5457 -   replace_from_            VARCHAR2(1) ;
 54.5458 -   replace_with_            VARCHAR2(4);
 54.5459 -   count_period_            NUMBER;
 54.5460 -   TYPE PeriodMatchType     IS TABLE OF NUMBER
 54.5461 -                         INDEX BY BINARY_INTEGER;
 54.5462 -   per_match_identity_type_ PeriodMatchType;
 54.5463 -   newrec_                  SCORECARD_INPUT_VALUE_TAB%ROWTYPE;
 54.5464 -   oldrec_                  SCORECARD_INPUT_VALUE_TAB%ROWTYPE;
 54.5465 -   objid_                   VARCHAR2(2000);
 54.5466 -   attr_                    VARCHAR2(2000);
 54.5467 -   objversion_              VARCHAR2(2000);
 54.5468 -   is_visited_              BOOLEAN:=false;
 54.5469 -   field_separator_         CONSTANT VARCHAR2(1)  := chr(31);
 54.5470 -   i                        NUMBER;
 54.5471 -   count_                   NUMBER;
 54.5472 -   mea_type_                VARCHAR2(20);
 54.5473 -   total_value_             NUMBER;
 54.5474 -   avg_value_               NUMBER;
 54.5475 -
 54.5476 -CURSOR get_comp_details (comp_ VARCHAR2) IS
 54.5477 -   SELECT * FROM  SCORECARD_MEASURE_TAB
 54.5478 -   WHERE measure = comp_;
 54.5479 -
 54.5480 -CURSOR get_period_details IS
 54.5481 -   SELECT period_match_identity FROM  SCORECARD_PERIOD_TAB
 54.5482 -   WHERE Environment = environment_
 54.5483 -   AND   YEAR        = year_
 54.5484 -   ORDER BY end_date;
 54.5485 -
 54.5486 -CURSOR get_code_part IS
 54.5487 -   SELECT scorecard_code_part FROM SCORECARD_ENVIRONMENT_TAB
 54.5488 -   WHERE environment = environment_;
 54.5489 -
 54.5490 -
 54.5491 -BEGIN
 54.5492 -      General_SYS.Init_Method(lu_name_, 'Scorecard_Input_Value_API','Budget_And_Calculate');
 54.5493 -      replace_from_:=',';
 54.5494 -      replace_with_:=''',''';
 54.5495 -      count_period_ :=1;
 54.5496 -
 54.5497 -      in_values_:=Replace(component_list_,'^','''');
 54.5498 -
 54.5499 -      table_name_ :='SCORECARD_INPUT_VALUE_TAB';
 54.5500 -      input_value_tab_stmt_ :=  ' SELECT * FROM  ' || table_name_ ||
 54.5501 -                                ' WHERE  environment ='|| '''' ||environment_ || '''' ||
 54.5502 -                                ' AND    scorecard ='  ||'''' ||scorecard_   ||  '''' ||
 54.5503 -                                ' AND    year ='       ||'''' ||year_       || '''' ||
 54.5504 -                                ' AND    version ='    ||'''' || version_    || '''' ||
 54.5505 -                                ' AND    scorecard_object in (' || in_values_ || ')';
 54.5506 -
 54.5507 -      OPEN get_code_part;
 54.5508 -         FETCH get_code_part INTO scr_code_part_;
 54.5509 -      CLOSE get_code_part;
 54.5510 -
 54.5511 -      IF NOT scr_code_part_ IS NULL THEN
 54.5512 -         code_part_values_ := scorecard_attribute_api.Get_Value(environment_,scorecard_,'CODE_PART_VALUE');
 54.5513 -         code_part_values_:=Replace(code_part_values_,replace_from_,replace_with_);
 54.5514 -         code_part_str_ :=' AND CODE_' || scr_code_part_ || ' IN ( ' || '''' || code_part_values_ || '''' ||' )';
 54.5515 -      ELSE
 54.5516 -          code_part_str_ :='';
 54.5517 -      END IF;
 54.5518 -
 54.5519 -      -- since table_name_ is hardcoded we can set asserted
 54.5520 -      -- ifs_assert_safe shsalk 20060117
 54.5521 -      open scorecard_input_rec_ for input_value_tab_stmt_;
 54.5522 -
 54.5523 -      OPEN get_period_details;
 54.5524 -      LOOP
 54.5525 -         FETCH get_period_details INTO period_val_;
 54.5526 -         EXIT WHEN get_period_details%NOTFOUND;
 54.5527 -         per_match_identity_type_(count_period_):=period_val_;
 54.5528 -         count_period_ :=count_period_+1;
 54.5529 -      END LOOP;
 54.5530 -
 54.5531 -      CLOSE get_period_details;
 54.5532 -
 54.5533 -      count_:= count_period_ - 1 ;
 54.5534 -
 54.5535 -      LOOP
 54.5536 -         source_stmt_ :='SELECT ';
 54.5537 -
 54.5538 -         FETCH scorecard_input_rec_ INTO temp_input_val_rec_;
 54.5539 -         EXIT WHEN scorecard_input_rec_%NOTFOUND;
 54.5540 -
 54.5541 -         OPEN get_comp_details(temp_input_val_rec_.scorecard_object);
 54.5542 -           FETCH get_comp_details INTO component_rec_;
 54.5543 -         CLOSE get_comp_details;
 54.5544 -
 54.5545 -         -- check amount type
 54.5546 -         --'AMTBAL^CURBAL^QTYBAL^PROJBAL^PROJQTY^PRJCURBAL^';
 54.5547 -         IF component_rec_.amount_type = 'AMTBAL' THEN
 54.5548 -            source_stmt_ := source_stmt_ || 'SUM(DECODE(LOGICAL_ACCOUNT_TYPE,' || '''' ||'L' || '''' ||',' || '-AMOUNT' || ',' || '''' || 'R' || '''' ||  ',' ||'-AMOUNT' || ',' || 'AMOUNT'|| '))' || ',YEAR_PERIOD_KEY ';
 54.5549 -         ELSIF component_rec_.amount_type = 'CURBAL' THEN
 54.5550 -            source_stmt_ := source_stmt_ || 'SUM(DECODE(LOGICAL_ACCOUNT_TYPE,' || '''' ||'L' || '''' ||',' || '-THIRD_CURRENCY_AMOUNT' || ',' || '''' || 'R' || '''' ||  ',' ||'-THIRD_CURRENCY_AMOUNT' || ',' || 'THIRD_CURRENCY_AMOUNT'|| '))' || ',YEAR_PERIOD_KEY ';
 54.5551 -         ELSIF component_rec_.amount_type = 'QTYBAL' THEN
 54.5552 -            source_stmt_ := source_stmt_ || 'SUM(DECODE(LOGICAL_ACCOUNT_TYPE,' || '''' ||'L' || '''' ||',' || '-QUANTITY' || ',' || '''' || 'R' || '''' ||  ',' ||'-QUANTITY' || ',' || 'QUANTITY'|| '))' || ',YEAR_PERIOD_KEY ';
 54.5553 -         ELSIF component_rec_.amount_type = 'PROJBAL' THEN
 54.5554 -            source_stmt_ := source_stmt_ || 'SUM(DECODE(LOGICAL_ACCOUNT_TYPE,' || '''' ||'L' || '''' ||',' || '-AMOUNT' || ',' || '''' || 'R' || '''' ||  ',' ||'-AMOUNT' || ',' || 'AMOUNT'|| '))' || ',YEAR_PERIOD_KEY ';
 54.5555 -         ELSIF component_rec_.amount_type = 'PRJCURBAL' THEN
 54.5556 -            source_stmt_ := source_stmt_ || 'SUM(DECODE(LOGICAL_ACCOUNT_TYPE,' || '''' ||'L' || '''' ||',' || '-THIRD_CURRENCY_AMOUNT' || ',' || '''' || 'R' || '''' ||  ',' ||'-THIRD_CURRENCY_AMOUNT' || ',' || 'THIRD_CURRENCY_AMOUNT'|| '))' || ',YEAR_PERIOD_KEY ';
 54.5557 -         ELSIF component_rec_.amount_type = 'PROJQTY' THEN
 54.5558 -            source_stmt_ := source_stmt_ || 'SUM(DECODE(LOGICAL_ACCOUNT_TYPE,' || '''' ||'L' || '''' ||',' || '-QUANTITY' || ',' || '''' || 'R' || '''' ||  ',' ||'-QUANTITY' || ',' || 'QUANTITY'|| '))' || ',YEAR_PERIOD_KEY ';
 54.5559 -         END IF;
 54.5560 -
 54.5561 -         source_stmt_ :=source_stmt_ || ' FROM budget_period_amount_pub
 54.5562 -                        WHERE COMPANY=:c_company
 54.5563 -                        AND BUDGET_VERSION=:b_budget_Version
 54.5564 -                        AND BUDGET_YEAR=:b_budget_year';
 54.5565 -
 54.5566 -         source_stmt_ := source_stmt_ || code_part_str_ ;
 54.5567 -
 54.5568 -
 54.5569 -         -- Add ledger Id
 54.5570 -          source_stmt_ := source_stmt_ || ' AND LEDGER_ID=:l_ledger_id ' ;
 54.5571 -
 54.5572 -         -- Add account list
 54.5573 -         account_list_:=bp_measure_accounts_api.Get_Measure_Accounts(temp_input_val_rec_.scorecard_object);
 54.5574 -         IF NOT account_list_ IS null THEN
 54.5575 -            new_account_list_ := '''' || Replace(account_list_,replace_from_,replace_with_) || '''' ;
 54.5576 -            source_stmt_ := source_stmt_ || ' AND ACCOUNT IN ( ' || new_account_list_ || ')  ' ;
 54.5577 -         END IF;
 54.5578 -
 54.5579 -         -- check amount type
 54.5580 -         IF component_rec_.amount_type = 'PROJBAL'  OR component_rec_.amount_type = 'PROJQTY' OR component_rec_.amount_type ='PRJCURBAL' THEN
 54.5581 -            source_stmt_ := source_stmt_ || 'AND Project_Id IS NOT NULL';
 54.5582 -         END IF;
 54.5583 -         source_stmt_ := source_stmt_ || 'GROUP BY  year_period_key';
 54.5584 -
 54.5585 -         oldrec_:=scorecard_input_value_api.Lock_By_Keys___(environment_,scorecard_,year_,version_,temp_input_val_rec_.scorecard_object);
 54.5586 -         newrec_:=oldrec_;
 54.5587 -
 54.5588 -         -- Initialize field values
 54.5589 -
 54.5590 -         newrec_.p1_value  :=NULL;
 54.5591 -         newrec_.p2_value  :=NULL;
 54.5592 -         newrec_.p3_value  :=NULL;
 54.5593 -         newrec_.p4_value  :=NULL;
 54.5594 -         newrec_.p4_value  :=NULL;
 54.5595 -         newrec_.p5_value  :=NULL;
 54.5596 -         newrec_.p6_value  :=NULL;
 54.5597 -         newrec_.p7_value  :=NULL;
 54.5598 -         newrec_.p8_value  :=NULL;
 54.5599 -         newrec_.p9_value  :=NULL;
 54.5600 -         newrec_.p10_value :=NULL;
 54.5601 -         newrec_.p11_value :=NULL;
 54.5602 -         newrec_.p12_value :=NULL;
 54.5603 -
 54.5604 -         -- ifs_assert_safe shsalk 20060117
 54.5605 -         OPEN budget_period_rec_ FOR source_stmt_ USING company_,budget_version_,year_,component_rec_.ledger_id;
 54.5606 -         count_period_ :=1;
 54.5607 -         is_visited_:=false;
 54.5608 -         LOOP
 54.5609 -            FETCH budget_period_rec_ INTO aggregated_value_,budget_year_;
 54.5610 -               EXIT WHEN budget_period_rec_%NOTFOUND;
 54.5611 -
 54.5612 -            FOR i IN 1..count_ LOOP
 54.5613 -                IF budget_year_ = per_match_identity_type_(i) THEN
 54.5614 -                   count_period_:=i;
 54.5615 -                   EXIT;
 54.5616 -                END IF;
 54.5617 -            END LOOP;
 54.5618 -
 54.5619 -            CASE count_period_
 54.5620 -                   WHEN 1  THEN newrec_.p1_value :=aggregated_value_;
 54.5621 -                   WHEN 2  THEN newrec_.p2_value :=aggregated_value_;
 54.5622 -                   WHEN 3  THEN newrec_.p3_value :=aggregated_value_;
 54.5623 -                   WHEN 4  THEN newrec_.p4_value :=aggregated_value_;
 54.5624 -                   WHEN 5  THEN newrec_.p5_value :=aggregated_value_;
 54.5625 -                   WHEN 6  THEN newrec_.p6_value :=aggregated_value_;
 54.5626 -                   WHEN 7  THEN newrec_.p7_value :=aggregated_value_;
 54.5627 -                   WHEN 8  THEN newrec_.p8_value :=aggregated_value_;
 54.5628 -                   WHEN 9  THEN newrec_.p9_value :=aggregated_value_;
 54.5629 -                   WHEN 10 THEN newrec_.p10_value:=aggregated_value_;
 54.5630 -                   WHEN 11 THEN newrec_.p11_value:=aggregated_value_;
 54.5631 -                   WHEN 12 THEN newrec_.p12_value:=aggregated_value_;
 54.5632 -                   ELSE Error_SYS.Appl_General(lu_name_,'SCOINPUTVALLOADMES22: Invaild no of periods');
 54.5633 -            END CASE;
 54.5634 -
 54.5635 -            is_visited_:=true;
 54.5636 -
 54.5637 -         END LOOP;
 54.5638 -         CLOSE budget_period_rec_;
 54.5639 -
 54.5640 -         IF NOT is_visited_ THEN
 54.5641 -            components_not_used_:=components_not_used_|| scorecard_measure_api.Get_Description(temp_input_val_rec_.scorecard_object) || field_separator_;
 54.5642 -         END IF;
 54.5643 -
 54.5644 -         newrec_.budget_version:=budget_version_;
 54.5645 -
 54.5646 -         newrec_.p1_value :=NVL(newrec_.p1_value,0);
 54.5647 -         newrec_.p2_value :=NVL(newrec_.p2_value,0);
 54.5648 -         newrec_.p3_value :=NVL(newrec_.p3_value,0);
 54.5649 -         newrec_.p4_value :=NVL(newrec_.p4_value,0);
 54.5650 -         newrec_.p5_value :=NVL(newrec_.p5_value,0);
 54.5651 -         newrec_.p6_value :=NVL(newrec_.p6_value,0);
 54.5652 -         newrec_.p7_value :=NVL(newrec_.p7_value,0);
 54.5653 -         newrec_.p8_value :=NVL(newrec_.p8_value,0);
 54.5654 -         newrec_.p9_value :=NVL(newrec_.p9_value,0);
 54.5655 -         newrec_.p10_value:=NVL(newrec_.p10_value,0);
 54.5656 -         newrec_.p11_value:=NVL(newrec_.p11_value,0);
 54.5657 -         newrec_.p12_value:=NVL(newrec_.p12_value,0);
 54.5658 -
 54.5659 -         mea_type_ := scorecard_Measure_api.Get_Measure_Type_Db(temp_input_val_rec_.scorecard_object);
 54.5660 -         total_value_ := newrec_.p1_value+newrec_.p2_value+newrec_.p3_value+newrec_.p4_value+newrec_.p5_value+newrec_.p6_value+newrec_.p7_value+newrec_.p8_value+newrec_.p9_value+newrec_.p10_value+newrec_.p11_value+newrec_.p12_value;
 54.5661 -         IF mea_type_ = 'PERCENTAGE' THEN
 54.5662 -            avg_value_ := total_value_/count_;
 54.5663 -            newrec_.year_value := avg_value_;
 54.5664 -         ELSIF mea_type_ = 'VALUE' THEN
 54.5665 -            newrec_.year_value := total_value_;
 54.5666 -         END IF;
 54.5667 -         scorecard_input_value_api.Update___(objid_,oldrec_,newrec_,attr_,objversion_,TRUE);
 54.5668 -      END LOOP;
 54.5669 -      close scorecard_input_rec_;
 54.5670 -      scorecard_input_value_api.Calculate_Measures (environment_,scorecard_ ,year_,version_,measure_,12);
 54.5671 -END Budget_And_Calculate;
 54.5672 -
 54.5673 -PROCEDURE Get_Error_Msg_For_Comp (
 54.5674 -   plan_formula_ IN OUT VARCHAR2,
 54.5675 -   check_value_ IN VARCHAR2 )
 54.5676 -IS
 54.5677 -  invalid_comp_ NUMBER;
 54.5678 -BEGIN
 54.5679 -   General_SYS.Init_Method(lu_name_, '&PKG', 'Get_Error_Msg_For_Comp');
 54.5680 -   IF (check_value_ = 'TRUE') THEN
 54.5681 -      plan_formula_ := 'NULL';
 54.5682 -   ELSE
 54.5683 -      invalid_comp_ := INSTR(plan_formula_,'COMP', 1, 1);
 54.5684 -      IF invalid_comp_ <> 0 THEN
 54.5685 -         Error_SYS.Appl_General(lu_name_,'INPVALCOMPNFND: A component in Calculation formula is not found ');
 54.5686 -      END IF;
 54.5687 -   END IF;
 54.5688 -END Get_Error_Msg_For_Comp;
 54.5689 -PROCEDURE Return_Periods (
 54.5690 -   period1_ OUT VARCHAR2,
 54.5691 -   period2_ OUT VARCHAR2,
 54.5692 -   period3_ OUT VARCHAR2,
 54.5693 -   period4_ OUT VARCHAR2,
 54.5694 -   period5_ OUT VARCHAR2,
 54.5695 -   period6_ OUT VARCHAR2,
 54.5696 -   period7_ OUT VARCHAR2,
 54.5697 -   period8_ OUT VARCHAR2,
 54.5698 -   period9_ OUT VARCHAR2,
 54.5699 -   period10_ OUT VARCHAR2,
 54.5700 -   period11_ OUT VARCHAR2,
 54.5701 -   period12_ OUT VARCHAR2,
 54.5702 -   env_ IN VARCHAR2,
 54.5703 -   year_ IN VARCHAR2 )
 54.5704 -IS
 54.5705 -   per_no NUMBER;
 54.5706 -   period_ VARCHAR2(10);
 54.5707 -   CURSOR get_period IS
 54.5708 -      SELECT period
 54.5709 -      FROM   scorecard_period_tab
 54.5710 -      WHERE  environment = env_
 54.5711 -      AND    year = year_
 54.5712 -      ORDER BY end_date;
 54.5713 -
 54.5714 -   CURSOR get_periodCount IS
 54.5715 -      SELECT count (1)
 54.5716 -      FROM   scorecard_period_tab
 54.5717 -      WHERE  environment = env_
 54.5718 -      AND    year = year_;
 54.5719 -BEGIN
 54.5720 -   General_SYS.Init_Method(lu_name_, '&PKG', 'Return_Periods');
 54.5721 -   OPEN get_periodCount;
 54.5722 -   FETCH get_periodCount INTO per_no;
 54.5723 -   CLOSE get_periodCount;
 54.5724 -
 54.5725 -   OPEN get_period;
 54.5726 -   period1_  := null;
 54.5727 -   period2_  := null;
 54.5728 -   period3_  := null;
 54.5729 -   period4_  := null;
 54.5730 -   period5_  := null;
 54.5731 -   period6_  := null;
 54.5732 -   period7_  := null;
 54.5733 -   period8_  := null;
 54.5734 -   period9_  := null;
 54.5735 -   period10_ := null;
 54.5736 -   period11_ := null;
 54.5737 -   period12_ := null;
 54.5738 -
 54.5739 -   FOR i IN 1..per_no LOOP
 54.5740 -      FETCH get_period INTO period_;
 54.5741 -         IF (i = 1) THEN
 54.5742 -            period1_ := period_;
 54.5743 -         ELSIF (i = 2) THEN
 54.5744 -            period2_ := period_;
 54.5745 -         ELSIF (i = 3) THEN
 54.5746 -            period3_ := period_;
 54.5747 -         ELSIF (i = 4) THEN
 54.5748 -            period4_ := period_;
 54.5749 -         ELSIF (i = 5) THEN
 54.5750 -            period5_ := period_;
 54.5751 -         ELSIF (i = 6) THEN
 54.5752 -            period6_ := period_;
 54.5753 -         ELSIF (i = 7) THEN
 54.5754 -            period7_ := period_;
 54.5755 -         ELSIF (i = 8) THEN
 54.5756 -            period8_ := period_;
 54.5757 -         ELSIF (i = 9) THEN
 54.5758 -            period9_ := period_;
 54.5759 -         ELSIF (i = 10) THEN
 54.5760 -            period10_ := period_;
 54.5761 -         ELSIF (i = 11) THEN
 54.5762 -            period11_ := period_;
 54.5763 -         ELSIF (i = 12) THEN
 54.5764 -            period12_ := period_;
 54.5765 -         END IF;
 54.5766 -   END LOOP;
 54.5767 -   CLOSE get_period;
 54.5768 -
 54.5769 -END Return_Periods;
 54.5770 -PROCEDURE Import_Planned_Values(
 54.5771 -   environment_      IN VARCHAR2,
 54.5772 -   scorecard_        IN VARCHAR2,
 54.5773 -   p_year_           IN VARCHAR2,
 54.5774 -   version_          IN VARCHAR2,
 54.5775 -   scorecard_object_ IN VARCHAR2,
 54.5776 -   key_value_attr_   IN VARCHAR2)
 54.5777 -IS
 54.5778 -   year_        &TABLE..year%TYPE;
 54.5779 -   key_         &TABLE..p1_key%TYPE;
 54.5780 -   trans_value_ &TABLE..p1_value%TYPE;
 54.5781 -
 54.5782 -   ptr_         NUMBER;
 54.5783 -   name_        VARCHAR2(30);
 54.5784 -   column_      VARCHAR2(30);
 54.5785 -   value_       VARCHAR2(2000);
 54.5786 -   info_        VARCHAR2(2000);
 54.5787 -   objid_       VARCHAR2(2000);
 54.5788 -   objversion_  VARCHAR2(2000);
 54.5789 -   attr_        VARCHAR2(2000);
 54.5790 -
 54.5791 -   CURSOR get_update_record IS
 54.5792 -      SELECT objid, objversion
 54.5793 -      FROM   &VIEW
 54.5794 -      WHERE  environment      = environment_
 54.5795 -      AND    scorecard        = scorecard_
 54.5796 -      AND    year             = year_
 54.5797 -      AND    version          = version_
 54.5798 -      AND    scorecard_object = scorecard_object_;
 54.5799 -BEGIN
 54.5800 -   General_SYS.Init_Method(lu_name_, '&PKG', 'Import_Planned_Values');
 54.5801 -   ptr_ := NULL;
 54.5802 -
 54.5803 -   LOOP
 54.5804 -
 54.5805 -      WHILE ( Client_SYS.Get_Next_From_Attr(key_value_attr_, ptr_, name_, value_) ) LOOP
 54.5806 -
 54.5807 -         IF (name_ = 'KEY') THEN
 54.5808 -            key_  := value_;
 54.5809 -            year_ := Scorecard_Period_API.Get_Year(environment_,
 54.5810 -                                                   key_);
 54.5811 -         ELSIF (name_ = 'VALUE') THEN
 54.5812 -            trans_value_ := value_;
 54.5813 -            EXIT;
 54.5814 -         END IF;
 54.5815 -
 54.5816 -      END LOOP;
 54.5817 -
 54.5818 -      column_ := Find_Column___(environment_,
 54.5819 -                                scorecard_,
 54.5820 -                                year_,
 54.5821 -                                version_,
 54.5822 -                                scorecard_object_,
 54.5823 -                                key_);
 54.5824 -      OPEN  get_update_record;
 54.5825 -      FETCH get_update_record INTO objid_, objversion_;
 54.5826 -
 54.5827 -      IF ((get_update_record%FOUND) AND (column_ IS NOT NULL)) THEN
 54.5828 -         Client_SYS.Clear_Attr(attr_);
 54.5829 -         Client_SYS.Add_To_Attr(column_, trans_value_, attr_);
 54.5830 -         Client_SYS.Add_To_Attr('FROM_BUDPRO', 'TRUE', attr_);
 54.5831 -         Modify__(info_, objid_, objversion_, attr_, 'DO');
 54.5832 -         Calculate_Year_Value(environment_,
 54.5833 -                              scorecard_,
 54.5834 -                              year_,
 54.5835 -                              version_,
 54.5836 -                              scorecard_object_,
 54.5837 -                              'TRUE');
 54.5838 -         /*Calculate_Measures(environment_,
 54.5839 -                            scorecard_,
 54.5840 -                            year_,
 54.5841 -                            version_,
 54.5842 -                            scorecard_object_,
 54.5843 -                            12);*/
 54.5844 -      END IF;
 54.5845 -
 54.5846 -      CLOSE get_update_record;
 54.5847 -      EXIT WHEN NOT (Client_SYS.Get_Next_From_Attr(key_value_attr_, ptr_, name_, value_));
 54.5848 -
 54.5849 -   END LOOP;
 54.5850 -
 54.5851 -END Import_Planned_Values;
 54.5852 -
 54.5853 -PROCEDURE Calculate_Year_Value (
 54.5854 -   environment_  IN VARCHAR2,
 54.5855 -   scorecard_    IN VARCHAR2,
 54.5856 -   year_         IN VARCHAR2,
 54.5857 -   version_      IN VARCHAR2,
 54.5858 -   measure_      IN VARCHAR2,
 54.5859 -   from_budpro_ IN VARCHAR2 DEFAULT 'FALSE' )
 54.5860 -IS
 54.5861 -   total_        &TABLE..year_value%TYPE := 0;
 54.5862 -   measure_type_ scorecard_measure_tab.measure_type%TYPE;
 54.5863 -
 54.5864 -   objid_                   VARCHAR2(2000);
 54.5865 -   objversion_              VARCHAR2(2000);
 54.5866 -   info_                    VARCHAR2(2000);
 54.5867 -   attr_                    VARCHAR2(2000);
 54.5868 -   count_                   NUMBER := 0;
 54.5869 -   formula_p1_              NUMBER;
 54.5870 -   formula_p2_              NUMBER;
 54.5871 -   formula_p3_              NUMBER;
 54.5872 -   formula_p4_              NUMBER;
 54.5873 -   formula_p5_              NUMBER;
 54.5874 -   formula_p6_              NUMBER;
 54.5875 -   formula_p7_              NUMBER;
 54.5876 -   formula_p8_              NUMBER;
 54.5877 -   formula_p9_              NUMBER;
 54.5878 -   formula_p10_             NUMBER;
 54.5879 -   formula_p11_             NUMBER;
 54.5880 -   formula_p12_             NUMBER;
 54.5881 -
 54.5882 -   CURSOR    measure_value IS
 54.5883 -      SELECT objid,objversion,P1_Value,P2_Value,P3_Value,P4_Value,P5_Value,P6_Value,P7_Value,P8_Value,P9_Value,P10_Value,P11_Value,P12_Value
 54.5884 -      FROM   &VIEW
 54.5885 -      WHERE  environment      = environment_
 54.5886 -      AND    scorecard        = scorecard_
 54.5887 -      AND    year             = year_
 54.5888 -      AND    version          = version_
 54.5889 -      AND    scorecard_object = measure_;
 54.5890 -BEGIN
 54.5891 -   General_SYS.Init_Method(lu_name_, '&PKG', 'Calculate_Year_Value');
 54.5892 -   measure_type_ := Scorecard_measure_API.Get_Measure_Type_Db(measure_);
 54.5893 -   OPEN  measure_value;
 54.5894 -   FETCH measure_value INTO objid_, objversion_, formula_p1_, formula_p2_, formula_p3_, formula_p4_, formula_p5_,
 54.5895 -                            formula_p6_, formula_p7_, formula_p8_, formula_p9_, formula_p10_, formula_p11_, formula_p12_;
 54.5896 -   CLOSE measure_value;
 54.5897 -
 54.5898 -   IF (formula_p1_ IS NOT NULL) THEN
 54.5899 -      total_ := total_ + formula_p1_;
 54.5900 -      count_ := count_ + 1;
 54.5901 -   END IF;
 54.5902 -
 54.5903 -   IF (formula_p2_ IS NOT NULL) THEN
 54.5904 -      total_ := total_ + formula_p2_;
 54.5905 -      count_ := count_ + 1;
 54.5906 -   END IF;
 54.5907 -
 54.5908 -   IF (formula_p3_ IS NOT NULL) THEN
 54.5909 -      total_ := total_ + formula_p3_;
 54.5910 -      count_ := count_ + 1;
 54.5911 -   END IF;
 54.5912 -
 54.5913 -   IF (formula_p4_ IS NOT NULL) THEN
 54.5914 -      total_ := total_ + formula_p4_;
 54.5915 -      count_ := count_ + 1;
 54.5916 -   END IF;
 54.5917 -
 54.5918 -   IF (formula_p5_ IS NOT NULL) THEN
 54.5919 -      total_ := total_ + formula_p5_;
 54.5920 -      count_ := count_ + 1;
 54.5921 -   END IF;
 54.5922 -
 54.5923 -   IF (formula_p6_ IS NOT NULL) THEN
 54.5924 -      total_ := total_ + formula_p6_;
 54.5925 -      count_ := count_ + 1;
 54.5926 -   END IF;
 54.5927 -
 54.5928 -   IF (formula_p7_ IS NOT NULL) THEN
 54.5929 -      total_ := total_ + formula_p7_;
 54.5930 -      count_ := count_ + 1;
 54.5931 -   END IF;
 54.5932 -
 54.5933 -   IF (formula_p8_ IS NOT NULL) THEN
 54.5934 -      total_ := total_ + formula_p8_;
 54.5935 -      count_ := count_ + 1;
 54.5936 -   END IF;
 54.5937 -
 54.5938 -   IF (formula_p9_ IS NOT NULL) THEN
 54.5939 -      total_ := total_ + formula_p9_;
 54.5940 -      count_ := count_ + 1;
 54.5941 -   END IF;
 54.5942 -
 54.5943 -   IF (formula_p10_ IS NOT NULL) THEN
 54.5944 -      total_ := total_ + formula_p10_;
 54.5945 -      count_ := count_ + 1;
 54.5946 -   END IF;
 54.5947 -
 54.5948 -   IF (formula_p11_ IS NOT NULL) THEN
 54.5949 -      total_ := total_ + formula_p11_;
 54.5950 -      count_ := count_ + 1;
 54.5951 -   END IF;
 54.5952 -
 54.5953 -   IF (formula_p12_ IS NOT NULL) THEN
 54.5954 -      total_ := total_ + formula_p12_;
 54.5955 -      count_ := count_ + 1;
 54.5956 -   END IF;
 54.5957 -
 54.5958 -   IF (measure_type_ = 'PERCENTAGE' AND count_ > 0) THEN
 54.5959 -      total_ := total_ / count_;
 54.5960 -   ELSIF NOT(measure_type_ = 'VALUE') THEN
 54.5961 -      total_ := NULL;
 54.5962 -   END IF;
 54.5963 -
 54.5964 -   IF (total_ IS NOT NULL) THEN
 54.5965 -      Client_SYS.Clear_Attr(attr_);
 54.5966 -      Client_SYS.Add_To_Attr('YEAR_VALUE', total_, attr_);
 54.5967 -      Client_SYS.Add_To_Attr('FROM_BUDPRO', from_budpro_, attr_);
 54.5968 -      Modify__(info_, objid_, objversion_, attr_ , 'DO');
 54.5969 -   END IF;
 54.5970 -
 54.5971 -END Calculate_Year_Value;
 54.5972 -PROCEDURE Aggregate_Planned_Values(
 54.5973 -   environment_      IN VARCHAR2,
 54.5974 -   scorecard_        IN VARCHAR2,
 54.5975 -   year_             IN VARCHAR2,
 54.5976 -   version_          IN VARCHAR2,
 54.5977 -   scorecard_object_ IN VARCHAR2,
 54.5978 -   type_             IN VARCHAR2)
 54.5979 -IS
 54.5980 -   my_year_ &TABLE..year%TYPE;
 54.5981 -   num_     NUMBER;
 54.5982 -
 54.5983 -   CURSOR get_update_record IS
 54.5984 -      SELECT 1
 54.5985 -      FROM   &VIEW
 54.5986 -      WHERE  environment      = environment_
 54.5987 -      AND    scorecard        = scorecard_
 54.5988 -      AND    year             = year_
 54.5989 -      AND    version          = version_
 54.5990 -      AND    scorecard_object = scorecard_object_;
 54.5991 -BEGIN
 54.5992 -   General_SYS.Init_Method(lu_name_, '&PKG', 'Aggregate_Planned_Values');
 54.5993 -   OPEN  get_update_record;
 54.5994 -   FETCH get_update_record INTO num_;
 54.5995 -
 54.5996 -   IF (get_update_record%FOUND) THEN
 54.5997 -      my_year_ := Scorecard_Period_API.Get_Year(environment_,
 54.5998 -                                                year_);
 54.5999 -      Hierarchical_Consolidation(environment_,
 54.6000 -                                 scorecard_,
 54.6001 -                                 my_year_,
 54.6002 -                                 version_,
 54.6003 -                                 type_,
 54.6004 -                                 12,
 54.6005 -                                 scorecard_object_);
 54.6006 -      /*Calculate_Measures(environment_,
 54.6007 -                         scorecard_,
 54.6008 -                         year_,
 54.6009 -                         version_,
 54.6010 -                         scorecard_object_,
 54.6011 -                         12);*/
 54.6012 -   END IF;
 54.6013 -
 54.6014 -   CLOSE get_update_record;
 54.6015 -END Aggregate_Planned_Values;
 54.6016 -
 54.6017 -PROCEDURE Load_Planned_Values (
 54.6018 -   environment_ IN VARCHAR2,
 54.6019 -   scorecard_ IN VARCHAR2,
 54.6020 -   year_ IN VARCHAR2,
 54.6021 -   version_ IN VARCHAR2,
 54.6022 -   scorecard_object_ IN VARCHAR2,
 54.6023 -   from_ IN VARCHAR2,
 54.6024 -   period_count_ IN VARCHAR2 )
 54.6025 -IS
 54.6026 -   stmt_bp_call_ VARCHAR2(2000);
 54.6027 -   attr_         VARCHAR2(2000);
 54.6028 -   dummy_        VARCHAR2(2000);
 54.6029 -
 54.6030 -   TYPE GetTemplateNode IS REF CURSOR;
 54.6031 -   get_budpro           GetTemplateNode;
 54.6032 -   --Bug 66984 Begin
 54.6033 -   get_budpro_node      GetTemplateNode;
 54.6034 -   --Bug 66984 End
 54.6035 -   TYPE BudTemplateRec  IS RECORD (company VARCHAR2(60),
 54.6036 -                                   budget_process_id VARCHAR2(30),
 54.6037 -                                   budget_template_id VARCHAR2(60));
 54.6038 -   template_rec_        BudTemplateRec;
 54.6039 -   TYPE BudNodeRec      IS RECORD (company VARCHAR2(60),
 54.6040 -                                   budget_process_id VARCHAR2(30),
 54.6041 -                                   budget_structure_id VARCHAR2(90),
 54.6042 -                                   budget_node_id VARCHAR2(90));
 54.6043 -   node_rec_            BudNodeRec;
 54.6044 -
 54.6045 -   rec_                 &TABLE.%ROWTYPE;
 54.6046 -
 54.6047 -   CURSOR get_keys IS
 54.6048 -      SELECT *
 54.6049 -      FROM   &TABLE
 54.6050 -      WHERE  environment      = environment_
 54.6051 -      AND    scorecard        = scorecard_
 54.6052 -      AND    year             = year_
 54.6053 -      AND    version          = version_;
 54.6054 -BEGIN
 54.6055 -   General_SYS.Init_Method(lu_name_, '&PKG', 'Load_Planned_Values');
 54.6056 -
 54.6057 -   IF ( bp_installed_ ) THEN
 54.6058 -      Client_SYS.Clear_Attr(attr_);
 54.6059 -
 54.6060 -      OPEN  get_keys;
 54.6061 -      FETCH get_keys INTO rec_;
 54.6062 -      CLOSE get_keys;
 54.6063 -
 54.6064 -      Client_SYS.Add_To_Attr('FROM', from_, attr_);
 54.6065 -
 54.6066 -      IF (rec_.p1_key IS NOT NULL) THEN
 54.6067 -         Client_SYS.Add_To_Attr('P1_KEY', rec_.p1_key, attr_);
 54.6068 -      END IF;
 54.6069 -
 54.6070 -      IF (rec_.p2_key IS NOT NULL) THEN
 54.6071 -         Client_SYS.Add_To_Attr('P2_KEY', rec_.p2_key, attr_);
 54.6072 -      END IF;
 54.6073 -
 54.6074 -      IF (rec_.p3_key IS NOT NULL) THEN
 54.6075 -         Client_SYS.Add_To_Attr('P3_KEY', rec_.p3_key, attr_);
 54.6076 -      END IF;
 54.6077 -
 54.6078 -      IF (rec_.p4_key IS NOT NULL) THEN
 54.6079 -         Client_SYS.Add_To_Attr('P4_KEY', rec_.p4_key, attr_);
 54.6080 -      END IF;
 54.6081 -
 54.6082 -      IF (rec_.p5_key IS NOT NULL) THEN
 54.6083 -         Client_SYS.Add_To_Attr('P5_KEY', rec_.p5_key, attr_);
 54.6084 -      END IF;
 54.6085 -
 54.6086 -      IF (rec_.p6_key IS NOT NULL) THEN
 54.6087 -         Client_SYS.Add_To_Attr('P6_KEY', rec_.p6_key, attr_);
 54.6088 -      END IF;
 54.6089 -
 54.6090 -      IF (rec_.p7_key IS NOT NULL) THEN
 54.6091 -         Client_SYS.Add_To_Attr('P7_KEY', rec_.p7_key, attr_);
 54.6092 -      END IF;
 54.6093 -
 54.6094 -      IF (rec_.p8_key IS NOT NULL) THEN
 54.6095 -         Client_SYS.Add_To_Attr('P8_KEY', rec_.p8_key, attr_);
 54.6096 -      END IF;
 54.6097 -
 54.6098 -      IF (rec_.p9_key IS NOT NULL) THEN
 54.6099 -         Client_SYS.Add_To_Attr('P9_KEY', rec_.p9_key, attr_);
 54.6100 -      END IF;
 54.6101 -
 54.6102 -      IF (rec_.p10_key IS NOT NULL) THEN
 54.6103 -         Client_SYS.Add_To_Attr('P10_KEY', rec_.p10_key, attr_);
 54.6104 -      END IF;
 54.6105 -
 54.6106 -      IF (rec_.p11_key IS NOT NULL) THEN
 54.6107 -         Client_SYS.Add_To_Attr('P11_KEY', rec_.p11_key, attr_);
 54.6108 -      END IF;
 54.6109 -
 54.6110 -      IF (rec_.p12_key IS NOT NULL) THEN
 54.6111 -         Client_SYS.Add_To_Attr('P12_KEY', rec_.p12_key, attr_);
 54.6112 -      END IF;
 54.6113 -
 54.6114 -      IF (attr_ IS NOT NULL) THEN
 54.6115 -         attr_ := attr_ || scorecard_object_;
 54.6116 -      END IF;
 54.6117 -      -- Bug 66984 Begin,Added the line for Budget_Template_API.Is_Period_Matching() method call to stop loading values from templates which don't have matching periods
 54.6118 -      -- To handle multiple Budget Templates the single fetch was put inside a loop
 54.6119 -      stmt_bp_call_ := 'SELECT company, budget_process_id, budget_template_id
 54.6120 -                        FROM   budget_template_tab
 54.6121 -                        WHERE  scorecard = :scorecard
 54.6122 -                        AND    Budget_Process_API.Get_Environment(company,budget_process_id) = :environment
 54.6123 -                        AND    Budget_Template_API.Is_Period_Matching(company, budget_process_id, budget_template_id)= :value ';
 54.6124 -      
 54.6125 -      -- ifs_assert_safe iswalk 060111
 54.6126 -      OPEN  get_budpro FOR  stmt_bp_call_ USING scorecard_, environment_,'TRUE';
 54.6127 -      LOOP
 54.6128 -         FETCH get_budpro INTO template_rec_;
 54.6129 -         --Bug 66984 Begin,Added the if condition line and the else part
 54.6130 -         IF  get_budpro%FOUND THEN
 54.6131 -            IF ((template_rec_.company IS NULL) AND (attr_ IS NOT NULL)) THEN
 54.6132 -                stmt_bp_call_ := 'SELECT company, budget_process_id, budget_structure_id, budget_node_id
 54.6133 -                                  FROM   budget_node_tab
 54.6134 -                                  WHERE  scorecard = :scorecard
 54.6135 -                                  AND    Budget_Process_API.Get_Environment(company,
 54.6136 -                                                                     budget_process_id) = :environment';
 54.6137 -
 54.6138 -               -- ifs_assert_safe iswalk 060111
 54.6139 -               OPEN  get_budpro_node FOR  stmt_bp_call_ USING scorecard_, environment_;
 54.6140 -               FETCH get_budpro_node INTO node_rec_;
 54.6141 -               CLOSE get_budpro_node;
 54.6142 -
 54.6143 -               IF (node_rec_.company IS NOT NULL) THEN
 54.6144 -                  --Load the value from Budget Node
 54.6145 -                  dummy_ := 'NODE';
 54.6146 -                  stmt_bp_call_ := 'BEGIN
 54.6147 -                                    Budget_Node_API.Export_Planned_Values(:company,
 54.6148 -                                                                       :budget_process_id,
 54.6149 -                                                                       :budget_structure_id,
 54.6150 -                                                                       :budget_node_id,
 54.6151 -                                                                       :record_type,
 54.6152 -                                                                       :attr);
 54.6153 -                              END;';
 54.6154 -                  -- ifs_assert_safe iswalk 060111
 54.6155 -                  EXECUTE IMMEDIATE stmt_bp_call_ USING  IN node_rec_.company,
 54.6156 -                                                   IN node_rec_.budget_process_id,
 54.6157 -                                                   IN node_rec_.budget_structure_id,
 54.6158 -                                                   IN node_rec_.budget_node_id,
 54.6159 -                                                   IN dummy_,
 54.6160 -                                                   IN attr_;
 54.6161 -               ELSE
 54.6162 -                  Error_SYS.Appl_General(lu_name_, 'BUSPERSCOIPNOBUD: Selected scorecard object is not connected to any budget template or budget node');
 54.6163 -               END IF;
 54.6164 -            ELSIF (attr_ IS NOT NULL) THEN
 54.6165 -            --Load the value from Budget Template
 54.6166 -               stmt_bp_call_ := 'BEGIN
 54.6167 -                                 Budget_Template_API.Export_Planned_Values(:company,
 54.6168 -                                                                        :budget_process_id,
 54.6169 -                                                                        :budget_template_id,
 54.6170 -                                                                        :attr);
 54.6171 -                              END;';
 54.6172 -            -- ifs_assert_safe iswalk 060111
 54.6173 -               EXECUTE IMMEDIATE stmt_bp_call_ USING  IN template_rec_.company,
 54.6174 -                                                IN template_rec_.budget_process_id,
 54.6175 -                                                IN template_rec_.budget_template_id,
 54.6176 -                                                IN attr_;
 54.6177 -            END IF;
 54.6178 -            IF (attr_ IS NOT NULL) THEN
 54.6179 -               Import_Fin_Values(environment_,
 54.6180 -                                 scorecard_,
 54.6181 -                                 year_,
 54.6182 -                                 version_,
 54.6183 -                                 scorecard_object_);
 54.6184 -            END IF;
 54.6185 -         ELSE
 54.6186 -            CLOSE get_budpro;
 54.6187 -            EXIT;
 54.6188 -         END IF;
 54.6189 -         --Bug 66984 End
 54.6190 -      END LOOP;
 54.6191 -      --Bug 66984 End
 54.6192 -   END IF;
 54.6193 -      
 54.6194 -END Load_Planned_Values;
 54.6195 -
 54.6196 -FUNCTION Get_No_Of_Periods (
 54.6197 -   environment_ IN VARCHAR2,
 54.6198 -   scorecard_ IN VARCHAR2,
 54.6199 -   year_ IN VARCHAR2,
 54.6200 -   version_ IN VARCHAR2,
 54.6201 -   scorecard_object_ IN VARCHAR2 ) RETURN NUMBER
 54.6202 -IS
 54.6203 -   no_of_periods_ NUMBER  := 0;
 54.6204 -   rec_           &TABLE.%ROWTYPE;
 54.6205 -
 54.6206 -   CURSOR get_record IS
 54.6207 -      SELECT *
 54.6208 -      FROM   &TABLE
 54.6209 -      WHERE  environment      = environment_
 54.6210 -      AND    scorecard        = scorecard_
 54.6211 -      AND    year             = year_
 54.6212 -      AND    version          = version_
 54.6213 -      AND    scorecard_object = scorecard_object_;
 54.6214 -BEGIN
 54.6215 -   OPEN  get_record;
 54.6216 -   FETCH get_record INTO rec_;
 54.6217 -   CLOSE get_record;
 54.6218 -
 54.6219 -   IF (rec_.p1_key IS NOT NULL) THEN
 54.6220 -      no_of_periods_ := no_of_periods_ + 1;
 54.6221 -   END IF;
 54.6222 -
 54.6223 -   IF (rec_.p2_key IS NOT NULL) THEN
 54.6224 -      no_of_periods_ := no_of_periods_ + 1;
 54.6225 -   END IF;
 54.6226 -
 54.6227 -   IF (rec_.p3_key IS NOT NULL) THEN
 54.6228 -      no_of_periods_ := no_of_periods_ + 1;
 54.6229 -   END IF;
 54.6230 -
 54.6231 -   IF (rec_.p4_key IS NOT NULL) THEN
 54.6232 -      no_of_periods_ := no_of_periods_ + 1;
 54.6233 -   END IF;
 54.6234 -
 54.6235 -   IF (rec_.p5_key IS NOT NULL) THEN
 54.6236 -      no_of_periods_ := no_of_periods_ + 1;
 54.6237 -   END IF;
 54.6238 -
 54.6239 -   IF (rec_.p6_key IS NOT NULL) THEN
 54.6240 -      no_of_periods_ := no_of_periods_ + 1;
 54.6241 -   END IF;
 54.6242 -
 54.6243 -   IF (rec_.p7_key IS NOT NULL) THEN
 54.6244 -      no_of_periods_ := no_of_periods_ + 1;
 54.6245 -   END IF;
 54.6246 -
 54.6247 -   IF (rec_.p8_key IS NOT NULL) THEN
 54.6248 -      no_of_periods_ := no_of_periods_ + 1;
 54.6249 -   END IF;
 54.6250 -
 54.6251 -   IF (rec_.p9_key IS NOT NULL) THEN
 54.6252 -      no_of_periods_ := no_of_periods_ + 1;
 54.6253 -   END IF;
 54.6254 -
 54.6255 -   IF (rec_.p10_key IS NOT NULL) THEN
 54.6256 -      no_of_periods_ := no_of_periods_ + 1;
 54.6257 -   END IF;
 54.6258 -
 54.6259 -   IF (rec_.p11_key IS NOT NULL) THEN
 54.6260 -      no_of_periods_ := no_of_periods_ + 1;
 54.6261 -   END IF;
 54.6262 -
 54.6263 -   IF (rec_.p12_key IS NOT NULL) THEN
 54.6264 -      no_of_periods_ := no_of_periods_ + 1;
 54.6265 -   END IF;
 54.6266 -
 54.6267 -   RETURN no_of_periods_;
 54.6268 -END Get_No_Of_Periods;
 54.6269 -
 54.6270 -PROCEDURE Import_Fin_Values(
 54.6271 -   environment_ IN VARCHAR2,
 54.6272 -   scorecard_ IN VARCHAR2,
 54.6273 -   year_ IN VARCHAR2,
 54.6274 -   version_ IN VARCHAR2,
 54.6275 -   scorecard_object_ IN VARCHAR2)
 54.6276 -IS
 54.6277 -   TYPE GetTemplateNode IS REF CURSOR;
 54.6278 -   get_budpro           GetTemplateNode;
 54.6279 -   -- Bug 71089, Begin
 54.6280 -   get_measure_acc      GetTemplateNode;      
 54.6281 -   -- Bug 71089, End
 54.6282 -   TYPE BudTemplateRec  IS RECORD (company VARCHAR2(60),
 54.6283 -                                   budget_process_id VARCHAR2(30),
 54.6284 -                                   budget_template_id VARCHAR2(60));
 54.6285 -   template_rec_        BudTemplateRec;
 54.6286 -   TYPE BudNodeRec      IS RECORD (company VARCHAR2(60),
 54.6287 -                                   budget_process_id VARCHAR2(30),
 54.6288 -                                   budget_structure_id VARCHAR2(90),
 54.6289 -                                   budget_node_id VARCHAR2(90));
 54.6290 -   node_rec_            BudNodeRec;
 54.6291 -   TYPE Totals          IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
 54.6292 -
 54.6293 -   name_               VARCHAR2(30);
 54.6294 -   mea_name_           VARCHAR2(30);
 54.6295 -   value_              VARCHAR2(2000);
 54.6296 -   mea_value_          VARCHAR2(2000);
 54.6297 -   stmt_bp_call_       VARCHAR2(2000);
 54.6298 -   -- Bug 71089, Begin
 54.6299 -   stmt_bp_temp_call_  VARCHAR2(2000);
 54.6300 -   -- Bug 71089, End
 54.6301 -   attr_               VARCHAR2(2000);
 54.6302 -   current_            VARCHAR2(2000);
 54.6303 -   p_value_attr_       VARCHAR2(2000);
 54.6304 -   cum_val_attr_       VARCHAR2(4000);
 54.6305 -   info_               VARCHAR2(2000);
 54.6306 -   objversion_         VARCHAR2(2000);
 54.6307 -
 54.6308 -   measure_attr_       VARCHAR2(32000);
 54.6309 -   ptr_                NUMBER;
 54.6310 -   mea_ptr_            NUMBER;
 54.6311 -   totals_tab          Totals;
 54.6312 -
 54.6313 -   rec_                &VIEW.%ROWTYPE;
 54.6314 -   temp_rec_           &VIEW.%ROWTYPE;
 54.6315 -
 54.6316 -   -- Bug 68118, Begin
 54.6317 -   company_            VARCHAR2(20);
 54.6318 -   budget_process_id_  VARCHAR2(10) ;
 54.6319 -   budget_template_id_ VARCHAR2(20);
 54.6320 -   item_value_id_      VARCHAR2(20);
 54.6321 -   temp_measure_       VARCHAR2(10);
 54.6322 -   -- Bug 68118, End
 54.6323 -
 54.6324 -   CURSOR get_keys IS
 54.6325 -      SELECT *
 54.6326 -      FROM   &VIEW
 54.6327 -      WHERE  environment      = environment_
 54.6328 -      AND    scorecard        = scorecard_
 54.6329 -      AND    year             = year_
 54.6330 -      AND    version          = version_
 54.6331 -      AND    'AUTOFIN'        = Scorecard_Measure_API.Get_Measure_Update_Type_Db(scorecard_object);
 54.6332 -   CURSOR get_measure_accounts IS
 54.6333 -      SELECT account
 54.6334 -      FROM   bp_measure_accounts_tab
 54.6335 -      WHERE  measure = current_;
 54.6336 -     
 54.6337 -   -- Bug 68118, Begin
 54.6338 -   -- Bug 71089, Begin
 54.6339 -   -- The cursor get_measure_acc was removed 
 54.6340 -   -- Bug 71089, End
 54.6341 -   -- Bug 68118, End
 54.6342 -   
 54.6343 -BEGIN
 54.6344 -   General_SYS.Init_Method(lu_name_, '&PKG', 'Import_Fin_Values');
 54.6345 -
 54.6346 -   IF ( bp_installed_ ) THEN
 54.6347 -      Client_SYS.Clear_Attr(attr_);
 54.6348 -
 54.6349 -      -- Bug 71089, Begin
 54.6350 -      stmt_bp_temp_call_ := 'SELECT item_value_id 
 54.6351 -                             FROM   budget_template_row_tab
 54.6352 -                             WHERE  company = :company
 54.6353 -                             AND    budget_process_id = :budget_process_id
 54.6354 -                             AND    budget_template_id = :budget_template_id
 54.6355 -                             AND    item_value_id = :item_value_id';
 54.6356 -
 54.6357 -      -- ifs_assert_safe makrlk 080205
 54.6358 -      -- Bug 71089, End
 54.6359 -
 54.6360 -      OPEN  get_keys;
 54.6361 -      FETCH get_keys INTO temp_rec_;
 54.6362 -      CLOSE get_keys;
 54.6363 -
 54.6364 -      IF (temp_rec_.p1_key IS NOT NULL) THEN
 54.6365 -         temp_rec_.p1_key := Scorecard_Period_API.Get_Period_Match_Identity(environment_,
 54.6366 -                                                                            temp_rec_.p1_key);
 54.6367 -         Client_SYS.Add_To_Attr('P1_KEY',
 54.6368 -                                temp_rec_.p1_key,
 54.6369 -                                attr_);
 54.6370 -      END IF;
 54.6371 -
 54.6372 -      IF (temp_rec_.p2_key IS NOT NULL) THEN
 54.6373 -         temp_rec_.p2_key := Scorecard_Period_API.Get_Period_Match_Identity(environment_,
 54.6374 -                                                                            temp_rec_.p2_key);
 54.6375 -         Client_SYS.Add_To_Attr('P2_KEY',
 54.6376 -                                temp_rec_.p2_key,
 54.6377 -                                attr_);
 54.6378 -      END IF;
 54.6379 -
 54.6380 -      IF (temp_rec_.p3_key IS NOT NULL) THEN
 54.6381 -         temp_rec_.p3_key := Scorecard_Period_API.Get_Period_Match_Identity(environment_,
 54.6382 -                                                                            temp_rec_.p3_key);
 54.6383 -         Client_SYS.Add_To_Attr('P3_KEY',
 54.6384 -                                temp_rec_.p3_key,
 54.6385 -                                attr_);
 54.6386 -      END IF;
 54.6387 -
 54.6388 -      IF (temp_rec_.p4_key IS NOT NULL) THEN
 54.6389 -         temp_rec_.p4_key := Scorecard_Period_API.Get_Period_Match_Identity(environment_,
 54.6390 -                                                                            temp_rec_.p4_key);
 54.6391 -         Client_SYS.Add_To_Attr('P4_KEY',
 54.6392 -                                temp_rec_.p4_key,
 54.6393 -                                attr_);
 54.6394 -      END IF;
 54.6395 -
 54.6396 -      IF (temp_rec_.p5_key IS NOT NULL) THEN
 54.6397 -         temp_rec_.p5_key := Scorecard_Period_API.Get_Period_Match_Identity(environment_,
 54.6398 -                                                                            temp_rec_.p5_key);
 54.6399 -         Client_SYS.Add_To_Attr('P5_KEY',
 54.6400 -                                temp_rec_.p5_key,
 54.6401 -                                attr_);
 54.6402 -      END IF;
 54.6403 -
 54.6404 -      IF (temp_rec_.p6_key IS NOT NULL) THEN
 54.6405 -         temp_rec_.p6_key := Scorecard_Period_API.Get_Period_Match_Identity(environment_,
 54.6406 -                                                                            temp_rec_.p6_key);
 54.6407 -         Client_SYS.Add_To_Attr('P6_KEY',
 54.6408 -                                temp_rec_.p6_key,
 54.6409 -                                attr_);
 54.6410 -      END IF;
 54.6411 -
 54.6412 -      IF (temp_rec_.p7_key IS NOT NULL) THEN
 54.6413 -         temp_rec_.p7_key := Scorecard_Period_API.Get_Period_Match_Identity(environment_,
 54.6414 -                                                                            temp_rec_.p7_key);
 54.6415 -         Client_SYS.Add_To_Attr('P7_KEY',
 54.6416 -                                temp_rec_.p7_key,
 54.6417 -                                attr_);
 54.6418 -      END IF;
 54.6419 -
 54.6420 -      IF (temp_rec_.p8_key IS NOT NULL) THEN
 54.6421 -         temp_rec_.p8_key := Scorecard_Period_API.Get_Period_Match_Identity(environment_,
 54.6422 -                                                                            temp_rec_.p8_key);
 54.6423 -         Client_SYS.Add_To_Attr('P8_KEY',
 54.6424 -                                temp_rec_.p8_key,
 54.6425 -                                attr_);
 54.6426 -      END IF;
 54.6427 -
 54.6428 -      IF (temp_rec_.p9_key IS NOT NULL) THEN
 54.6429 -         temp_rec_.p9_key := Scorecard_Period_API.Get_Period_Match_Identity(environment_,
 54.6430 -                                                                            temp_rec_.p9_key);
 54.6431 -         Client_SYS.Add_To_Attr('P9_KEY',
 54.6432 -                                temp_rec_.p9_key,
 54.6433 -                                attr_);
 54.6434 -      END IF;
 54.6435 -
 54.6436 -      IF (temp_rec_.p10_key IS NOT NULL) THEN
 54.6437 -         temp_rec_.p10_key := Scorecard_Period_API.Get_Period_Match_Identity(environment_,
 54.6438 -                                                                             temp_rec_.p10_key);
 54.6439 -         Client_SYS.Add_To_Attr('P10_KEY',
 54.6440 -                                temp_rec_.p10_key,
 54.6441 -                                attr_);
 54.6442 -      END IF;
 54.6443 -
 54.6444 -      IF (temp_rec_.p11_key IS NOT NULL) THEN
 54.6445 -         temp_rec_.p11_key := Scorecard_Period_API.Get_Period_Match_Identity(environment_,
 54.6446 -                                                                             temp_rec_.p11_key);
 54.6447 -         Client_SYS.Add_To_Attr('P11_KEY',
 54.6448 -                                temp_rec_.p11_key,
 54.6449 -                                attr_);
 54.6450 -      END IF;
 54.6451 -
 54.6452 -      IF (temp_rec_.p12_key IS NOT NULL) THEN
 54.6453 -         temp_rec_.p12_key := Scorecard_Period_API.Get_Period_Match_Identity(environment_,
 54.6454 -                                                                             temp_rec_.p12_key);
 54.6455 -         Client_SYS.Add_To_Attr('P12_KEY',
 54.6456 -                                temp_rec_.p12_key,
 54.6457 -                                attr_);
 54.6458 -      END IF;
 54.6459 -
 54.6460 -      IF (attr_ IS NOT NULL) THEN
 54.6461 -
 54.6462 -         stmt_bp_call_ := 'SELECT company, budget_process_id, budget_template_id
 54.6463 -                           FROM   budget_template_tab
 54.6464 -                           WHERE  scorecard = :scorecard
 54.6465 -                           AND    Budget_Process_API.Get_Environment(company,
 54.6466 -                                                                     budget_process_id) = :environment';
 54.6467 -
 54.6468 -         -- ifs_assert_safe iswalk 060220
 54.6469 -         OPEN  get_budpro FOR  stmt_bp_call_ USING scorecard_, environment_;
 54.6470 -         FETCH get_budpro INTO template_rec_;
 54.6471 -         CLOSE get_budpro;
 54.6472 -
 54.6473 -         Client_SYS.Clear_Attr(measure_attr_); 
 54.6474 -         IF (template_rec_.company IS NOT NULL) THEN
 54.6475 -
 54.6476 -            FOR rec_ IN get_keys LOOP
 54.6477 -               Client_SYS.Clear_Attr(cum_val_attr_);
 54.6478 -
 54.6479 -               FOR i IN 0..11 LOOP
 54.6480 -                  totals_tab(i) := 0;
 54.6481 -               END LOOP;
 54.6482 -
 54.6483 -               current_ := rec_.scorecard_object;
 54.6484 -
 54.6485 -               Client_SYS.Add_To_Attr('OBJECT_ID',current_,measure_attr_); 
 54.6486 -               mea_ptr_ := NULL;
 54.6487 -
 54.6488 -               --the call has been made from busper side which means only selected measures should be updated
 54.6489 -               WHILE (Client_SYS.Get_Next_From_Attr(scorecard_object_, mea_ptr_, mea_name_, mea_value_)) LOOP
 54.6490 -
 54.6491 -                  IF (current_ = mea_value_) THEN
 54.6492 -                     --get the list of accounts connected to the current measure...
 54.6493 -                     FOR acc_rec_ IN get_measure_accounts LOOP
 54.6494 -                      -- Bug 68118, Begin
 54.6495 -                        company_            := template_rec_.company;
 54.6496 -                        budget_process_id_  := template_rec_.budget_process_id;
 54.6497 -                        budget_template_id_ := template_rec_.budget_template_id;
 54.6498 -                        item_value_id_      := acc_rec_.account; 
 54.6499 -                      
 54.6500 -                        -- Bug 71089, Begin. change the OPEN line
 54.6501 -                        -- ifs_assert_safe nsillk 20080318
 54.6502 -                        OPEN  get_measure_acc FOR stmt_bp_temp_call_ USING company_, budget_process_id_, budget_template_id_, item_value_id_;                      
 54.6503 -                        FETCH get_measure_acc INTO temp_measure_;
 54.6504 -                        CLOSE get_measure_acc;
 54.6505 -                        -- Bug 71089, End
 54.6506 -                        -- Bug 68118, End
 54.6507 -
 54.6508 -                        -- Bug 68118, Begin added IF condition
 54.6509 -
 54.6510 -                        IF (temp_measure_ = acc_rec_.account) THEN
 54.6511 -                           stmt_bp_call_ := 'BEGIN
 54.6512 -                                             :p_value_attr := Budget_Template_API.Get_Period_Fin_Values(:company,
 54.6513 -                                                                                                        :budget_process_id,
 54.6514 -                                                                                                        :budget_template_id,
 54.6515 -                                                                                                        :account,
 54.6516 -                                                                                                        :attr);
 54.6517 -                                          END;';
 54.6518 -                           -- ifs_assert_safe iswalk 060220
 54.6519 -                           EXECUTE IMMEDIATE stmt_bp_call_ USING  OUT p_value_attr_,
 54.6520 -                                                               IN  template_rec_.company,
 54.6521 -                                                               IN  template_rec_.budget_process_id,
 54.6522 -                                                               IN  template_rec_.budget_template_id,
 54.6523 -                                                               IN  acc_rec_.account,
 54.6524 -                                                               IN  attr_;
 54.6525 -                           cum_val_attr_ := cum_val_attr_ || p_value_attr_;
 54.6526 -                        END IF;
 54.6527 -                        -- Bug 68118, End the IF condition  
 54.6528 -                     END LOOP;
 54.6529 -                  END IF;
 54.6530 -
 54.6531 -               END LOOP;
 54.6532 -
 54.6533 -               --the call has been made from budpro side which means all measures should be updated
 54.6534 -               IF (scorecard_object_ IS NULL) THEN
 54.6535 -                  --get the list of accounts connected to the current measure...
 54.6536 -                  FOR acc_rec_ IN get_measure_accounts LOOP
 54.6537 -                     -- Bug 68118, Begin
 54.6538 -                     company_            := template_rec_.company;
 54.6539 -                     budget_process_id_  := template_rec_.budget_process_id;
 54.6540 -                     budget_template_id_ := template_rec_.budget_template_id;
 54.6541 -                     item_value_id_      := acc_rec_.account; 
 54.6542 -                      
 54.6543 -                     -- Bug 71089, Begin. change the OPEN line
 54.6544 -                     -- ifs_assert_safe nsillk 20080318
 54.6545 -                     OPEN  get_measure_acc FOR stmt_bp_temp_call_ USING company_, budget_process_id_, budget_template_id_, item_value_id_;                      
 54.6546 -                     FETCH get_measure_acc INTO temp_measure_;
 54.6547 -                     CLOSE get_measure_acc;
 54.6548 -                     -- Bug 71089, End
 54.6549 -                     -- Bug 68118, End
 54.6550 -
 54.6551 -                     -- Bug 68118, Begin added IF condition
 54.6552 -                     IF (temp_measure_ = acc_rec_.account) THEN
 54.6553 -                        stmt_bp_call_ := 'BEGIN
 54.6554 -                                          :p_value_attr := Budget_Template_API.Get_Period_Fin_Values(:company,
 54.6555 -                                                                                                     :budget_process_id,
 54.6556 -                                                                                                     :budget_template_id,
 54.6557 -                                                                                                     :account,
 54.6558 -                                                                                                     :attr);
 54.6559 -                                       END;';
 54.6560 -                        -- ifs_assert_safe iswalk 060220
 54.6561 -                        EXECUTE IMMEDIATE stmt_bp_call_ USING  OUT p_value_attr_,
 54.6562 -                                                            IN  template_rec_.company,
 54.6563 -                                                            IN  template_rec_.budget_process_id,
 54.6564 -                                                            IN  template_rec_.budget_template_id,
 54.6565 -                                                            IN  acc_rec_.account,
 54.6566 -                                                            IN  attr_;
 54.6567 -                        cum_val_attr_ := cum_val_attr_ || p_value_attr_;
 54.6568 -                     END IF;
 54.6569 -                     -- Bug 68118, End the IF condition
 54.6570 -
 54.6571 -                  END LOOP;
 54.6572 -               END IF;
 54.6573 -
 54.6574 -               IF (cum_val_attr_ IS NOT NULL) THEN
 54.6575 -
 54.6576 -                  ptr_ := NULL;
 54.6577 -
 54.6578 -                  WHILE (Client_SYS.Get_Next_From_Attr(cum_val_attr_, ptr_, name_, value_)) LOOP
 54.6579 -
 54.6580 -                     IF (temp_rec_.p1_key = name_) THEN
 54.6581 -                        totals_tab(0) := totals_tab(0) + Client_SYS.Attr_Value_To_Number(value_);
 54.6582 -                     END IF;
 54.6583 -
 54.6584 -                     IF (temp_rec_.p2_key = name_) THEN
 54.6585 -                        totals_tab(1) := totals_tab(1) + Client_SYS.Attr_Value_To_Number(value_);
 54.6586 -                     END IF;
 54.6587 -
 54.6588 -                     IF (temp_rec_.p3_key = name_) THEN
 54.6589 -                        totals_tab(2) := totals_tab(2) + Client_SYS.Attr_Value_To_Number(value_);
 54.6590 -                     END IF;
 54.6591 -
 54.6592 -                     IF (temp_rec_.p4_key = name_) THEN
 54.6593 -                        totals_tab(3) := totals_tab(3) + Client_SYS.Attr_Value_To_Number(value_);
 54.6594 -                     END IF;
 54.6595 -
 54.6596 -                     IF (temp_rec_.p5_key = name_) THEN
 54.6597 -                        totals_tab(4) := totals_tab(4) + Client_SYS.Attr_Value_To_Number(value_);
 54.6598 -                     END IF;
 54.6599 -
 54.6600 -                     IF (temp_rec_.p6_key = name_) THEN
 54.6601 -                        totals_tab(5) := totals_tab(5) + Client_SYS.Attr_Value_To_Number(value_);
 54.6602 -                     END IF;
 54.6603 -
 54.6604 -                     IF (temp_rec_.p7_key = name_) THEN
 54.6605 -                        totals_tab(6) := totals_tab(6) + Client_SYS.Attr_Value_To_Number(value_);
 54.6606 -                     END IF;
 54.6607 -
 54.6608 -                     IF (temp_rec_.p8_key = name_) THEN
 54.6609 -                        totals_tab(7) := totals_tab(7) + Client_SYS.Attr_Value_To_Number(value_);
 54.6610 -                     END IF;
 54.6611 -
 54.6612 -                     IF (temp_rec_.p9_key = name_) THEN
 54.6613 -                        totals_tab(8) := totals_tab(8) + Client_SYS.Attr_Value_To_Number(value_);
 54.6614 -                     END IF;
 54.6615 -
 54.6616 -                     IF (temp_rec_.p10_key = name_) THEN
 54.6617 -                        totals_tab(9) := totals_tab(9) + Client_SYS.Attr_Value_To_Number(value_);
 54.6618 -                     END IF;
 54.6619 -
 54.6620 -                     IF (temp_rec_.p11_key = name_) THEN
 54.6621 -                        totals_tab(10) := totals_tab(10) + Client_SYS.Attr_Value_To_Number(value_);
 54.6622 -                     END IF;
 54.6623 -
 54.6624 -                     IF (temp_rec_.p12_key = name_) THEN
 54.6625 -                        totals_tab(11) := totals_tab(11) + Client_SYS.Attr_Value_To_Number(value_);
 54.6626 -                     END IF;
 54.6627 -
 54.6628 -                  END LOOP;
 54.6629 -
 54.6630 -                  Client_SYS.Clear_Attr(cum_val_attr_);
 54.6631 -
 54.6632 -                  FOR i IN 0..11  LOOP
 54.6633 -
 54.6634 -                     -- Bug 68118, Begin remove the the IF condition
 54.6635 -                     Client_SYS.Add_To_Attr('P'|| (i + 1) || '_VALUE', totals_tab(i), cum_val_attr_);
 54.6636 -                     -- Bug 68118, End
 54.6637 -
 54.6638 -                  END LOOP;
 54.6639 -
 54.6640 -                  objversion_ := rec_.objversion;
 54.6641 -                  Client_SYS.Add_To_Attr('FROM_BUDPRO', 'TRUE', cum_val_attr_);
 54.6642 -                  Modify__(info_, rec_.objid, objversion_, cum_val_attr_, 'DO');
 54.6643 -                  Calculate_Year_Value(environment_,
 54.6644 -                                       scorecard_,
 54.6645 -                                       year_,
 54.6646 -                                       version_,
 54.6647 -                                       rec_.scorecard_object);
 54.6648 -
 54.6649 -               END IF;
 54.6650 -
 54.6651 -            END LOOP;
 54.6652 -
 54.6653 -         Calc_Measure_From_Budpro (environment_ ,scorecard_,measure_attr_);
 54.6654 -         END IF;
 54.6655 -
 54.6656 -      END IF;
 54.6657 -
 54.6658 -   END IF;
 54.6659 -END Import_Fin_Values;
 54.6660 -PROCEDURE Calc_Measure_From_Budpro (
 54.6661 -   environment_ IN VARCHAR2,
 54.6662 -   scorecard_   IN VARCHAR2,
 54.6663 -   comp_attr_   IN VARCHAR2 )
 54.6664 -IS
 54.6665 -   ptr_                  NUMBER;
 54.6666 -   count_                NUMBER;
 54.6667 -   period_count_         NUMBER;
 54.6668 -
 54.6669 -   name_                 VARCHAR2(30);
 54.6670 -   value_                VARCHAR2(2000);
 54.6671 -   level_type_val_       VARCHAR2(20);
 54.6672 -   measure_version_      VARCHAR2(30);
 54.6673 -
 54.6674 -   object_id_            scorecard_measure_tab.measure%TYPE;
 54.6675 -   level_type_           scorecard_structure_tab.child_level_type%TYPE;
 54.6676 -   year_                 scorecard_period_tab.year%TYPE;
 54.6677 -   budget_version_       measure_version_tab.version%TYPE;
 54.6678 -
 54.6679 -   CURSOR get_level_type IS
 54.6680 -      SELECT child_level_type
 54.6681 -      FROM   Scorecard_structure_tab
 54.6682 -      WHERE  environment        = environment_
 54.6683 -      AND    scorecard          = scorecard_
 54.6684 -      AND    level_id           = object_id_;
 54.6685 -
 54.6686 -   CURSOR get_measures_planform IS
 54.6687 -      SELECT level_id,measure_calc_formula
 54.6688 -      FROM   Scorecard_Structure_TAB
 54.6689 -      WHERE  environment        = environment_
 54.6690 -      AND    scorecard          = scorecard_
 54.6691 -      AND    measure_calc_formula IS NOT NULL;
 54.6692 -
 54.6693 -   CURSOR get_years IS
 54.6694 -      SELECT DISTINCT year
 54.6695 -      FROM   Scorecard_Period_TAB
 54.6696 -      WHERE  environment        = environment_;
 54.6697 -
 54.6698 -   CURSOR get_period_count IS
 54.6699 -      SELECT COUNT(period)
 54.6700 -      FROM   Scorecard_Period_TAB
 54.6701 -      WHERE  environment        = environment_
 54.6702 -      AND    year               = year_;
 54.6703 -
 54.6704 -    TYPE MeasuresTable IS TABLE OF VARCHAR2(2000) INDEX BY BINARY_INTEGER;
 54.6705 -    measures_tab        MeasuresTable ;
 54.6706 -
 54.6707 -
 54.6708 -
 54.6709 -BEGIN
 54.6710 -   General_SYS.Init_Method(lu_name_, '&PKG', 'Calc_Measure_From_Budpro');
 54.6711 -   ptr_ := NULL;
 54.6712 -
 54.6713 -   WHILE ( Client_SYS.Get_Next_From_Attr(comp_attr_, ptr_, name_, value_) ) LOOP
 54.6714 -      IF (name_ = 'OBJECT_ID') THEN
 54.6715 -         object_id_ := value_;
 54.6716 -      END IF;
 54.6717 -
 54.6718 -      OPEN  get_level_type;
 54.6719 -      FETCH get_level_type INTO level_type_;
 54.6720 -      CLOSE get_level_type;
 54.6721 -
 54.6722 -      IF(level_type_ = 'COMPONENT') THEN
 54.6723 -         count_ := 0;
 54.6724 -         FOR get_measures_planform_ IN get_measures_planform  LOOP
 54.6725 -           IF( INSTR(get_measures_planform_.measure_calc_formula,object_id_) > 0) THEN
 54.6726 -               measures_tab(count_) := get_measures_planform_.level_id;
 54.6727 -           END IF;
 54.6728 -         END LOOP;
 54.6729 -         budget_version_ := Scorecard_Environment_API.Get_Budget_Version(environment_);
 54.6730 -
 54.6731 -         IF( measures_tab.COUNT > 0 ) THEN
 54.6732 -
 54.6733 -            FOR x IN measures_tab.FIRST..measures_tab.LAST LOOP
 54.6734 -               FOR get_years_ IN get_years LOOP
 54.6735 -                  year_    := get_years_.year;
 54.6736 -
 54.6737 -                  OPEN  get_period_count;
 54.6738 -                  FETCH get_period_count INTO period_count_;
 54.6739 -                  CLOSE get_period_count;
 54.6740 -
 54.6741 -                  IF( Check_Exist___ (environment_,scorecard_,year_,budget_version_,measures_tab(x))) THEN
 54.6742 -                     Calculate_Measures (environment_,
 54.6743 -                                         scorecard_,
 54.6744 -                                         year_,
 54.6745 -                                         budget_version_,
 54.6746 -                                         measures_tab(x),
 54.6747 -                                         period_count_,
 54.6748 -                                         'TRUE' );
 54.6749 -                  END IF;
 54.6750 -               END LOOP;
 54.6751 -            END LOOP;
 54.6752 -         END IF;
 54.6753 -      END IF;
 54.6754 -   END LOOP;
 54.6755 -END Calc_Measure_From_Budpro;
 54.6756 -
 54.6757 -
 54.6758 -FUNCTION Get (
 54.6759 -   environment_ IN VARCHAR2,
 54.6760 -   scorecard_ IN VARCHAR2,
 54.6761 -   year_ IN VARCHAR2,
 54.6762 -   version_ IN VARCHAR2,
 54.6763 -   scorecard_object_ IN VARCHAR2 ) RETURN Public_Rec
 54.6764 -IS
 54.6765 -   temp_ Public_Rec;
 54.6766 -   CURSOR get_attr IS
 54.6767 -      SELECT action, mea_state_change_date
 54.6768 -      FROM &TABLE
 54.6769 -      WHERE environment = environment_
 54.6770 -      AND   scorecard = scorecard_
 54.6771 -      AND   year = year_
 54.6772 -      AND   version = version_
 54.6773 -      AND   scorecard_object = scorecard_object_;
 54.6774 -BEGIN
 54.6775 -   OPEN get_attr;
 54.6776 -   FETCH get_attr INTO temp_;
 54.6777 -   CLOSE get_attr;
 54.6778 -   RETURN temp_;
 54.6779 -END Get;
 54.6780 ------------------------------------------------------------------------------
 54.6781 --------------------- FOUNDATION1 METHODS ------------------------------------
 54.6782 ------------------------------------------------------------------------------
 54.6783 --- Init
 54.6784 ---   Dummy procedure that can be called at database startup to ensure that
 54.6785 ---   this package is loaded into memory for performance reasons only.
 54.6786 ------------------------------------------------------------------------------
 54.6787 -
 54.6788 -PROCEDURE Init
 54.6789 -IS
 54.6790 -BEGIN
 54.6791 -   NULL;
 54.6792 -END Init;
 54.6793 -
 54.6794 -
 54.6795 -END &PKG;
 54.6796 -/
 54.6797 -SHOW ERROR
 54.6798 -
 54.6799 -UNDEFINE MODULE
 54.6800 -UNDEFINE LU
 54.6801 -UNDEFINE TABLE
 54.6802 -UNDEFINE VIEW
 54.6803 -UNDEFINE VIEW2
 54.6804 -UNDEFINE VIEW3
 54.6805 -UNDEFINE VIEW4
 54.6806 -UNDEFINE VIEW5
 54.6807 -UNDEFINE PKG
 54.6808 -UNDEFINE OBJID
 54.6809 -UNDEFINE OBJVERSION
 54.6810 -UNDEFINE OBJSTATE
 54.6811 -UNDEFINE OBJEVENTS
 54.6812 -UNDEFINE STATE
 54.6813 ------------------------------------------------------------------------------
    55.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    55.2 +++ b/PLSQL/Lexer/test/unit/src/org/netbeans/modules/plsql/lexer/TestRecordPlayer.java	Wed May 15 23:04:20 2013 +0200
    55.3 @@ -0,0 +1,91 @@
    55.4 +package org.netbeans.modules.plsql.lexer;
    55.5 +
    55.6 +import java.io.File;
    55.7 +import java.io.IOException;
    55.8 +import java.util.ArrayList;
    55.9 +import java.util.List;
   55.10 +import static junit.framework.Assert.assertEquals;
   55.11 +import org.apache.commons.io.FileUtils;
   55.12 +import org.netbeans.junit.NbTestCase;
   55.13 +
   55.14 +/**
   55.15 + * This class contains both the framework for template testing and the test settings.
   55.16 + *
   55.17 + * RUN_LAYER_TEST map states if tests for that particular layer should be run or not. true = all tests for this layer
   55.18 + * are executed, both for test data collection and for test output verification false = the layer is ignored completely,
   55.19 + * both for testing and data collection
   55.20 + *
   55.21 + * RecordTestData is a switch for testing mode true = record test data and write expected data files to their correct
   55.22 + * folders. those files should then be committed to the SVN repository NOTE: this flag should only be set when
   55.23 + * collecting data and the be reset again. Never commit this class to SVN with this flag set to true !!! false = run the
   55.24 + * test as normal
   55.25 + */
   55.26 +public class TestRecordPlayer extends NbTestCase {
   55.27 +
   55.28 +    private boolean recordTestData = false; //NOTE: Must be false when committed  !!!
   55.29 +
   55.30 +    public TestRecordPlayer(String name) {
   55.31 +        super(name);
   55.32 +    }
   55.33 +
   55.34 +    public void processBlocks(String plsqlFileName, List<PlsqlBlock> plsqlBlocks) throws IOException {
   55.35 +        List<PlsqlBlockType> expectedBlockTypes = new ArrayList<PlsqlBlockType>();
   55.36 +        populateListOfPlsqlBlocks(plsqlBlocks, expectedBlockTypes);
   55.37 +        if (recordTestData) {
   55.38 +            final File expectedDir = new File(getExpectedDir().replace(File.separator + "build" + File.separator, File.separator));
   55.39 +            expectedDir.mkdirs();
   55.40 +            FileUtils.writeLines(new File(expectedDir, plsqlFileName + ".structure"), expectedBlockTypes);
   55.41 +        } else {
   55.42 +            File expectedFile = new File(getExpectedDir(), plsqlFileName + ".structure");
   55.43 +            final File actualFile = new File(getWorkDir(), plsqlFileName + ".structure");
   55.44 +            FileUtils.writeLines(actualFile, expectedBlockTypes);
   55.45 +            assertStructure(expectedFile, actualFile);
   55.46 +        }
   55.47 +    }
   55.48 +
   55.49 +    private void populateListOfPlsqlBlocks(List<PlsqlBlock> plsqlBlocks, List<PlsqlBlockType> blockTypes) {
   55.50 +
   55.51 +        for (PlsqlBlock plsqlBlock : plsqlBlocks) {
   55.52 +            blockTypes.add(plsqlBlock.getType());
   55.53 +            final List<PlsqlBlock> childBlocks = plsqlBlock.getChildBlocks();
   55.54 +            if (childBlocks != null && !childBlocks.isEmpty()) {
   55.55 +                populateListOfPlsqlBlocks(childBlocks, blockTypes);
   55.56 +            }
   55.57 +        }
   55.58 +    }
   55.59 +
   55.60 +    public void assertStructure(File expectedFile, File actualFile) throws IOException {
   55.61 +        assertLines(FileUtils.readFileToString(expectedFile, "utf-8"), FileUtils.readFileToString(actualFile, "utf-8"));
   55.62 +    }
   55.63 +
   55.64 +    protected String getExpectedDir() {
   55.65 +        return getDataDir().getAbsolutePath() + File.separator + "expected" + File.separator;
   55.66 +    }
   55.67 +
   55.68 +    public static void assertLines(String expResult, String result) {
   55.69 +        String[] expectedLine = expResult.replace("\r", "").split("[\\r\\n]");
   55.70 +        String[] resultLine = result.replace("\r", "").split("[\\r\\n]");
   55.71 +        for (int i = 0; i < resultLine.length && i < expectedLine.length; i++) {
   55.72 +            try {
   55.73 +                assertEquals(expectedLine[i].replaceAll("\\s+", " ").trim(), resultLine[i].replaceAll("\\s+", " ").trim());
   55.74 +            } catch (AssertionError e) {
   55.75 +                System.out.println("failed on line " + i);
   55.76 +                System.out.println("EXPECTED==========================================================");
   55.77 +                for (int j = -5; j < 8; j++) {
   55.78 +                    if (i < expectedLine.length - j && i + j >= 0) {
   55.79 +                        System.out.println((j == 0 ? "--> " : "    ") + expectedLine[i + j]);
   55.80 +                    }
   55.81 +                }
   55.82 +                System.out.println("RESULT============================================================");
   55.83 +                for (int j = -5; j < 8; j++) {
   55.84 +                    if (i < resultLine.length - j && i + j >= 0) {
   55.85 +                        System.out.println((j == 0 ? "--> " : "    ") + resultLine[i + j]);
   55.86 +                    }
   55.87 +                }
   55.88 +                System.out.println("==================================================================");
   55.89 +                throw e;
   55.90 +            }
   55.91 +        }
   55.92 +        assertEquals(expectedLine.length, resultLine.length);
   55.93 +    }
   55.94 +}
    56.1 --- a/PLSQL/Lexer/test/unit/src/org/netbeans/modules/plsql/lexer/Trainer.apy	Wed May 15 16:07:35 2013 +0200
    56.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    56.3 @@ -1,877 +0,0 @@
    56.4 ------------------------------------------------------------------------------
    56.5 ---
    56.6 ---  Logical unit: Trainer
    56.7 ---
    56.8 ---  Purpose:
    56.9 ---
   56.10 ---  IFS/Design Template Version 2.2
   56.11 ---
   56.12 ---  Date    Sign  History
   56.13 ---  ------  ----  -----------------------------------------------------------
   56.14 ---  040219  NIMULK  made compatible with unicode. Substr
   56.15 ---  010509  UlPe    Remove call to dbms
   56.16 ---  010509  UlPe    Changes of General_Sys.Init_Method (technical directive)
   56.17 ---  990426  ELZ     Changed to New Template (2.2.1)
   56.18 ---  981222  ELZ     Created.
   56.19 ------------------------------------------------------------------------------
   56.20 -
   56.21 -DEFINE MODULE        = TRNADM
   56.22 -DEFINE LU            = Trainer
   56.23 -DEFINE TABLE         = TRAINER_TAB
   56.24 -DEFINE VIEW          = TRAINER
   56.25 -DEFINE VIEW_LOV1     = TRAINER_LOV1
   56.26 -DEFINE VIEW_LOV2     = TRAINER_LOV2
   56.27 -DEFINE PKG           = TRAINER_API
   56.28 -
   56.29 -DEFINE OBJID         = t.rowid
   56.30 -DEFINE OBJVERSION    = ltrim(lpad(to_char(t.rowversion),2000))
   56.31 -
   56.32 ------------------------------------------------------------------------------
   56.33 --------------------- VIEWS FOR SELECTS --------------------------------------
   56.34 ------------------------------------------------------------------------------
   56.35 -
   56.36 -PROMPT Creating &VIEW view
   56.37 -
   56.38 -CREATE OR REPLACE FORCE VIEW &VIEW AS
   56.39 -SELECT t.person_id                    person_id,
   56.40 -       internal                       internal,
   56.41 -       p.name1                        fname,
   56.42 -       p.name4                        lname,
   56.43 -       training_institution_no        training_institution_no,
   56.44 -       Training_Institution_API.Decode(training_institution_no) training_institution_name,
   56.45 -       p.date_of_birth                date_of_birth,
   56.46 -       Person_Sex_API.Decode(p.sex)   sex,
   56.47 -       p.sex                          sex_db,
   56.48 -       remark                         remark,
   56.49 -       &OBJID                         objid,
   56.50 -       &OBJVERSION                    objversion
   56.51 -FROM   trainer_tab t, pers_tab p
   56.52 -WHERE  t.person_id = p.person_id
   56.53 -WITH   read only;
   56.54 -
   56.55 -COMMENT ON TABLE &VIEW
   56.56 -   IS 'LU=&LU^PROMPT=Trainer^MODULE=&MODULE^';
   56.57 -
   56.58 -COMMENT ON COLUMN &VIEW..person_id
   56.59 -   IS 'FLAGS=KMI-L^DATATYPE=STRING(20)/UPPERCASE^PROMPT=Person Id^REF=Pers^';
   56.60 -COMMENT ON COLUMN &VIEW..internal
   56.61 -   IS 'FLAGS=AMIUL^DATATYPE=STRING(1)^PROMPT=Internal^';
   56.62 -COMMENT ON COLUMN &VIEW..fname
   56.63 -   IS 'FLAGS=A-IUL^DATATYPE=STRING(40)^PROMPT=First Name^';
   56.64 -COMMENT ON COLUMN &VIEW..lname
   56.65 -   IS 'FLAGS=AMIUL^DATATYPE=STRING(40)^PROMPT=Last Name^';
   56.66 -COMMENT ON COLUMN &VIEW..training_institution_no
   56.67 -   IS 'FLAGS=A-IU-^DATATYPE=NUMBER^PROMPT=Training Institution No^REF=TrainingInstitution^';
   56.68 -COMMENT ON COLUMN &VIEW..training_institution_name
   56.69 -   IS 'FLAGS=A-IU-^DATATYPE=STRING(100)^PROMPT=Training Institution Name^';
   56.70 -COMMENT ON COLUMN &VIEW..date_of_birth
   56.71 -   IS 'FLAGS=A-IU-^DATATYPE=DATE/DATE^PROMPT=Date of Birth^';
   56.72 -COMMENT ON COLUMN &VIEW..sex
   56.73 -   IS 'FLAGS=A-IU-^DATATYPE=STRING(200)^PROMPT=Gender^REF=PersonSex^';
   56.74 -COMMENT ON COLUMN &VIEW..remark
   56.75 -   IS 'FLAGS=A-IU-^DATATYPE=STRING(2000)^PROMPT=Remark^';
   56.76 -
   56.77 -
   56.78 -PROMPT Creating &VIEW_LOV1 view
   56.79 -
   56.80 -CREATE OR REPLACE FORCE VIEW &VIEW_LOV1 AS
   56.81 -SELECT person_id                             person_id,
   56.82 -       Trainer_API.Get_Name(person_id)       name,
   56.83 -       Trainer_API.Get_Internal_External(internal)    internal_external
   56.84 -FROM   trainer_tab 
   56.85 -WITH   read only;
   56.86 -
   56.87 -COMMENT ON TABLE &VIEW_LOV1
   56.88 -   IS 'LU=&LU^PROMPT=Trainer^MODULE=&MODULE^SORT=Person_Id^';
   56.89 -
   56.90 -COMMENT ON COLUMN &VIEW_LOV1..person_id
   56.91 -   IS 'FLAGS=K---L^DATATYPE=STRING(20)/UPPERCASE^PROMPT=Person Id^';
   56.92 -COMMENT ON COLUMN &VIEW_LOV1..name
   56.93 -   IS 'FLAGS=A---L^DATATYPE=STRING(100)^PROMPT=Name^';
   56.94 -COMMENT ON COLUMN &VIEW_LOV1..internal_external
   56.95 -   IS 'FLAGS=A---L^DATATYPE=STRING(100)^PROMPT=Internal/External^';
   56.96 -
   56.97 ------------------------------------------------------------------------------
   56.98 --------------------- PACKAGES FOR METHODS -----------------------------------
   56.99 ------------------------------------------------------------------------------
  56.100 -
  56.101 -PROMPT Creating &PKG implementation
  56.102 -
  56.103 -CREATE OR REPLACE PACKAGE BODY &PKG IS
  56.104 -
  56.105 ------------------------------------------------------------------------------
  56.106 --------------------- LU SPECIFIC IMPLEMENTATION METHOD DECLARATIONS ---------
  56.107 ------------------------------------------------------------------------------
  56.108 -
  56.109 ------------------------------------------------------------------------------
  56.110 --------------------- IMPLEMENTATION BASE METHODS ----------------------------
  56.111 ------------------------------------------------------------------------------
  56.112 --- Lock_By_Id___
  56.113 ---    Client-support to lock a specific instance of the logical unit.
  56.114 ---
  56.115 --- Lock_By_Keys___
  56.116 ---    Server support to lock a specific instance of the logical unit.
  56.117 ---
  56.118 --- Get_Object_By_Id___
  56.119 ---    Get LU-record from the database with a specified object identity.
  56.120 ---
  56.121 --- Get_Object_By_Keys___
  56.122 ---    Get LU-record from the database with specified key columns.
  56.123 ---
  56.124 --- Check_Exist___
  56.125 ---    Check if a specific LU-instance already exist in the database.
  56.126 ---
  56.127 --- Get_Id_Version_By_Keys___
  56.128 ---    Get the current OBJID and OBJVERSION for a specific LU-instance.
  56.129 ------------------------------------------------------------------------------
  56.130 -FUNCTION Lock_By_Id___ (
  56.131 -   objid_      IN  VARCHAR2,
  56.132 -   objversion_ IN  VARCHAR2 ) RETURN &TABLE%ROWTYPE
  56.133 -IS
  56.134 -   row_changed EXCEPTION;
  56.135 -   row_deleted EXCEPTION;
  56.136 -   row_locked  EXCEPTION;
  56.137 -   PRAGMA      exception_init(row_locked, -0054);
  56.138 -   rec_        &TABLE%ROWTYPE;
  56.139 -   dummy_      NUMBER;
  56.140 -   CURSOR lock_control IS
  56.141 -      SELECT *
  56.142 -      FROM   &TABLE t
  56.143 -      WHERE  &OBJID = objid_
  56.144 -      AND    &OBJVERSION = objversion_
  56.145 -      FOR UPDATE NOWAIT;
  56.146 -   CURSOR exist_control IS
  56.147 -      SELECT 1
  56.148 -      FROM   &TABLE t
  56.149 -      WHERE  &OBJID = objid_;
  56.150 -BEGIN
  56.151 -   OPEN lock_control;
  56.152 -   FETCH lock_control INTO rec_;
  56.153 -   IF (lock_control%FOUND) THEN
  56.154 -      CLOSE lock_control;
  56.155 -      RETURN rec_;
  56.156 -   END IF;
  56.157 -   CLOSE lock_control;
  56.158 -   OPEN exist_control;
  56.159 -   FETCH exist_control INTO dummy_;
  56.160 -   IF (exist_control%FOUND) THEN
  56.161 -      CLOSE exist_control;
  56.162 -      RAISE row_changed;
  56.163 -   ELSE
  56.164 -      CLOSE exist_control;
  56.165 -      RAISE row_deleted;
  56.166 -   END IF;
  56.167 -EXCEPTION
  56.168 -   WHEN row_locked THEN
  56.169 -      Error_SYS.Record_Locked(lu_name_);
  56.170 -   WHEN row_changed THEN
  56.171 -      Error_SYS.Record_Modified(lu_name_);
  56.172 -   WHEN row_deleted THEN
  56.173 -      Error_SYS.Record_Removed(lu_name_);
  56.174 -END Lock_By_Id___;
  56.175 -
  56.176 -FUNCTION Lock_By_Keys___ (
  56.177 -   person_id_ IN VARCHAR2 ) RETURN &TABLE%ROWTYPE
  56.178 -IS
  56.179 -   row_deleted EXCEPTION;
  56.180 -   rec_        &TABLE%ROWTYPE;
  56.181 -   CURSOR lock_control IS
  56.182 -      SELECT *
  56.183 -      FROM  &TABLE
  56.184 -      WHERE person_id = person_id_
  56.185 -      FOR UPDATE;
  56.186 -BEGIN
  56.187 -   OPEN lock_control;
  56.188 -   FETCH lock_control INTO rec_;
  56.189 -   IF (lock_control%FOUND) THEN
  56.190 -      CLOSE lock_control;
  56.191 -      RETURN rec_;
  56.192 -   ELSE
  56.193 -      CLOSE lock_control;
  56.194 -      RAISE row_deleted;
  56.195 -   END IF;
  56.196 -EXCEPTION
  56.197 -   WHEN row_deleted THEN
  56.198 -      Error_SYS.Record_Removed(lu_name_);
  56.199 -END Lock_By_Keys___;
  56.200 -
  56.201 -FUNCTION Get_Object_By_Id___ (
  56.202 -   objid_ IN VARCHAR2 ) RETURN &TABLE%ROWTYPE
  56.203 -IS
  56.204 -   lu_rec_ &TABLE%ROWTYPE;
  56.205 -   CURSOR getrec IS
  56.206 -      SELECT *
  56.207 -      FROM   &TABLE t
  56.208 -      WHERE  &OBJID = objid_;
  56.209 -BEGIN
  56.210 -   OPEN getrec;
  56.211 -   FETCH getrec INTO lu_rec_;
  56.212 -   IF (getrec%NOTFOUND) THEN
  56.213 -      CLOSE getrec;
  56.214 -      Error_SYS.Record_Removed(lu_name_);
  56.215 -   END IF;
  56.216 -   CLOSE getrec;
  56.217 -   RETURN(lu_rec_);
  56.218 -END Get_Object_By_Id___;
  56.219 -
  56.220 -FUNCTION Get_Object_By_Keys___ (
  56.221 -   person_id_ IN VARCHAR2 ) RETURN &TABLE%ROWTYPE
  56.222 -IS
  56.223 -   lu_rec_ &TABLE%ROWTYPE;
  56.224 -   CURSOR getrec IS
  56.225 -      SELECT *
  56.226 -      FROM  &TABLE
  56.227 -      WHERE person_id = person_id_;
  56.228 -BEGIN
  56.229 -   OPEN getrec;
  56.230 -   FETCH getrec INTO lu_rec_;
  56.231 -   CLOSE getrec;
  56.232 -   RETURN(lu_rec_);
  56.233 -END Get_Object_By_Keys___;
  56.234 -
  56.235 -FUNCTION Check_Exist___ (
  56.236 -   person_id_ IN VARCHAR2 ) RETURN BOOLEAN
  56.237 -IS
  56.238 -   dummy_ NUMBER;
  56.239 -   CURSOR exist_control IS
  56.240 -      SELECT 1
  56.241 -      FROM   &TABLE
  56.242 -      WHERE person_id = person_id_;
  56.243 -BEGIN
  56.244 -   OPEN exist_control;
  56.245 -   FETCH exist_control INTO dummy_;
  56.246 -   IF (exist_control%FOUND) THEN
  56.247 -      CLOSE exist_control;
  56.248 -      RETURN(TRUE);
  56.249 -   END IF;
  56.250 -   CLOSE exist_control;
  56.251 -   RETURN(FALSE);
  56.252 -END Check_Exist___;
  56.253 -
  56.254 -PROCEDURE Get_Id_Version_By_Keys___ (
  56.255 -   objid_      IN OUT VARCHAR2,
  56.256 -   objversion_ IN OUT VARCHAR2,
  56.257 -   person_id_ IN VARCHAR2)
  56.258 -IS
  56.259 -   CURSOR get_version IS
  56.260 -   SELECT &OBJID, &OBJVERSION
  56.261 -      FROM  &TABLE t
  56.262 -      WHERE person_id = person_id_;
  56.263 -BEGIN
  56.264 -   OPEN get_version;
  56.265 -   FETCH get_version INTO objid_, objversion_;
  56.266 -   CLOSE get_version;
  56.267 -END Get_Id_Version_By_Keys___;
  56.268 ------------------------------------------------------------------------------
  56.269 --------------------- IMPLEMENTATION BASE METHODS FOR INSERT -----------------
  56.270 ------------------------------------------------------------------------------
  56.271 --- Prepare_Insert___
  56.272 ---    Set all default values for a new instance (ON-NEW-RECORD) of this
  56.273 ---    logical unit by calling procedure Add_Attr.
  56.274 ---
  56.275 --- Unpack_Check_Insert___
  56.276 ---    Unpack the attribute list, check all attributes from the client
  56.277 ---    and generate all default values before creation of the new object.
  56.278 ---
  56.279 --- Insert___
  56.280 ---    Insert a new LU-instance into the database and return the values
  56.281 ---    for OBJID and OBJVERSION.
  56.282 ------------------------------------------------------------------------------
  56.283 -
  56.284 -PROCEDURE Prepare_Insert___ (
  56.285 -   attr_ IN OUT VARCHAR2 )
  56.286 -IS
  56.287 -BEGIN
  56.288 -   Client_SYS.Clear_Attr(attr_);
  56.289 -END Prepare_Insert___;
  56.290 -
  56.291 -
  56.292 -PROCEDURE Unpack_Check_Insert___ (
  56.293 -   attr_   IN OUT VARCHAR2,
  56.294 -   newrec_ IN OUT &TABLE%ROWTYPE,
  56.295 -   dummy_rec_ IN OUT Dummy_Rec )
  56.296 -IS
  56.297 -   ptr_           NUMBER;
  56.298 -   name_          VARCHAR2(30);
  56.299 -   value_         VARCHAR2(2000);
  56.300 -   name1_         VARCHAR2(200);
  56.301 -   name4_         VARCHAR2(200);
  56.302 -BEGIN
  56.303 -   ptr_ := NULL;
  56.304 -   WHILE (Client_SYS.Get_Next_From_Attr(attr_, ptr_, name_, value_)) LOOP
  56.305 -      IF (name_ = 'PERSON_ID') THEN
  56.306 -         newrec_.person_id := value_;
  56.307 -      ELSIF (name_ = 'INTERNAL') THEN
  56.308 -         newrec_.internal := value_;
  56.309 -      ELSIF (name_ = 'FNAME') THEN
  56.310 -         dummy_rec_.name1 := value_;
  56.311 -      ELSIF (name_ = 'LNAME') THEN
  56.312 -         dummy_rec_.name4 := value_;
  56.313 -      ELSIF (name_ = 'TRAINING_INSTITUTION_NAME') THEN
  56.314 -         newrec_.training_institution_no := Training_Institution_API.Encode(value_);
  56.315 -         IF (value_ IS NOT NULL) THEN
  56.316 -            Training_Institution_API.Exist(newrec_.training_institution_no);
  56.317 -         END IF;
  56.318 -      ELSIF (name_ = 'DATE_OF_BIRTH') THEN
  56.319 -         dummy_rec_.date_of_birth := Client_SYS.Attr_Value_To_Date(value_);
  56.320 -      ELSIF (name_ = 'SEX') THEN
  56.321 -         dummy_rec_.sex := Person_Sex_API.Encode(value_);
  56.322 -         IF (value_ IS NOT NULL) THEN
  56.323 -            Person_Sex_API.Exist(value_);
  56.324 -         END IF;
  56.325 -      ELSIF (name_ = 'REMARK') THEN
  56.326 -         newrec_.remark := value_;
  56.327 -      ELSE
  56.328 -         Error_SYS.Item_Not_Exist(lu_name_, name_, value_);
  56.329 -      END IF;
  56.330 -   END LOOP;
  56.331 -   Client_SYS.Clear_Attr(attr_);
  56.332 -   Error_SYS.Check_Not_Null(lu_name_, 'PERSON_ID', newrec_.person_id);
  56.333 -   IF (dummy_rec_.name1 IS NULL) OR (dummy_rec_.name4 IS NULL) THEN
  56.334 -      Pers_API.Get_Names(name1_, name4_, newrec_.person_id);
  56.335 -      IF (dummy_rec_.name1 IS NULL) THEN
  56.336 -         dummy_rec_.name1 := name1_;
  56.337 -      END IF;
  56.338 -      IF (dummy_rec_.name4 IS NULL) THEN
  56.339 -         dummy_rec_.name4 := name4_;
  56.340 -      END IF;
  56.341 -   END IF;
  56.342 -   Error_SYS.Check_Not_Null(lu_name_, 'LNAME', dummy_rec_.name4);
  56.343 -
  56.344 -   IF (dummy_rec_.date_of_birth IS NULL) THEN
  56.345 -      dummy_rec_.date_of_birth := Pers_API.Get_Date_Of_Birth(newrec_.person_id);
  56.346 -   END IF;
  56.347 -   IF (dummy_rec_.sex IS NULL) THEN
  56.348 -      dummy_rec_.sex := Person_Sex_API.Encode(Pers_API.Get_Sex(newrec_.person_id));
  56.349 -   END IF;
  56.350 -   Error_SYS.Check_Not_Null(lu_name_, 'INTERNAL', newrec_.internal);
  56.351 -   IF (newrec_.internal = '1') THEN
  56.352 -      IF (Trainer_API.Check_Person_Internal(newrec_.person_id) = 0) THEN
  56.353 -         Error_SYS.Item_General(lu_name_, 'INTERNAL', 'EXTTYPE: Type of the trainer should be External. ');
  56.354 -      END IF;
  56.355 -   ELSE
  56.356 -      IF (Trainer_API.Check_Person_Internal(newrec_.person_id) = 1) THEN
  56.357 -         Error_SYS.Item_General(lu_name_, 'INTERNAL', 'INTTYPE: Type of the trainer should be Internal. ');
  56.358 -      END IF;
  56.359 -   END IF;
  56.360 -
  56.361 -EXCEPTION
  56.362 -   WHEN value_error THEN
  56.363 -      Error_SYS.Item_Format(lu_name_, name_, value_);
  56.364 -END Unpack_Check_Insert___;
  56.365 -
  56.366 -
  56.367 -PROCEDURE Insert___ (
  56.368 -   objid_      OUT    VARCHAR2,
  56.369 -   objversion_ OUT    VARCHAR2,
  56.370 -   newrec_     IN OUT &TABLE%ROWTYPE,
  56.371 -   attr_       IN OUT VARCHAR2,
  56.372 -   dummy_rec_  IN Dummy_Rec,
  56.373 -   get_objid_  IN BOOLEAN DEFAULT TRUE)
  56.374 -IS
  56.375 -   temp_attr_    VARCHAR2(2000);
  56.376 -   CURSOR get_objid IS
  56.377 -      SELECT &OBJID
  56.378 -      FROM  &TABLE t
  56.379 -      WHERE person_id = newrec_.person_id;
  56.380 -BEGIN
  56.381 -   newrec_.rowversion := 1;
  56.382 -   objversion_ := to_char(newrec_.rowversion);
  56.383 -   INSERT
  56.384 -      INTO trainer_tab (
  56.385 -         person_id,
  56.386 -         internal,
  56.387 -         training_institution_no,
  56.388 -         remark,
  56.389 -         rowversion)
  56.390 -      VALUES (
  56.391 -         newrec_.person_id,
  56.392 -         newrec_.internal,
  56.393 -         newrec_.training_institution_no,
  56.394 -         newrec_.remark,
  56.395 -         newrec_.rowversion);
  56.396 ---
  56.397 --- update person register
  56.398 ---
  56.399 -   Client_SYS.Clear_Attr(temp_attr_);
  56.400 -   Client_SYS.Add_To_Attr('PERSON_ID', newrec_.person_id, temp_attr_);
  56.401 -   Client_SYS.Add_To_Attr('NAME1', dummy_rec_.name1, temp_attr_);
  56.402 -   Client_SYS.Add_To_Attr('NAME4', dummy_rec_.name4, temp_attr_);
  56.403 -   Client_SYS.Add_To_Attr('SEX', Person_Sex_API.Decode(dummy_rec_.sex), temp_attr_);
  56.404 -   Client_SYS.Add_To_Attr('DATE_OF_BIRTH', dummy_rec_.date_of_birth, temp_attr_);
  56.405 -   Pers_API.New_Modify(temp_attr_);
  56.406 -
  56.407 -   IF (get_objid_) THEN
  56.408 -      OPEN get_objid;
  56.409 -      FETCH get_objid INTO objid_;
  56.410 -      CLOSE get_objid;
  56.411 -   END IF;   
  56.412 -EXCEPTION
  56.413 -   WHEN dup_val_on_index THEN
  56.414 -      Error_SYS.Record_Exist(lu_name_);
  56.415 -END Insert___;
  56.416 -
  56.417 ------------------------------------------------------------------------------
  56.418 --------------------- IMPLEMENTATION BASE METHODS FOR UPDATE -----------------
  56.419 ------------------------------------------------------------------------------
  56.420 --- Unpack_Check_Update___
  56.421 ---    Unpack the attribute list, check all attributes from the client
  56.422 ---    and generate all default values before modifying the object.
  56.423 ---
  56.424 --- Update___
  56.425 ---    Update an existing LU-instance in the database and return the
  56.426 ---    the new OBJVERSION.
  56.427 ------------------------------------------------------------------------------
  56.428 -
  56.429 -PROCEDURE Unpack_Check_Update___ (
  56.430 -   attr_   IN OUT VARCHAR2,
  56.431 -   newrec_ IN OUT &TABLE%ROWTYPE,
  56.432 -   objid_  IN     VARCHAR2,
  56.433 -   dummy_rec_ IN OUT Dummy_Rec )
  56.434 -IS
  56.435 -   ptr_   NUMBER;
  56.436 -   name_  VARCHAR2(30);
  56.437 -   value_ VARCHAR2(2000);
  56.438 -   name1_ VARCHAR2(200);
  56.439 -   name4_ VARCHAR2(200);
  56.440 -
  56.441 -BEGIN
  56.442 -   ptr_ := NULL;
  56.443 -   WHILE (Client_SYS.Get_Next_From_Attr(attr_, ptr_, name_, value_)) LOOP
  56.444 -      IF (name_ = 'PERSON_ID') THEN
  56.445 -         Error_SYS.Item_Update(lu_name_, 'PERSON_ID');
  56.446 -      ELSIF (name_ = 'INTERNAL') THEN
  56.447 -         newrec_.internal := value_;
  56.448 -      ELSIF (name_ = 'FNAME') THEN
  56.449 -         dummy_rec_.name1 := value_;
  56.450 -      ELSIF (name_ = 'LNAME') THEN
  56.451 -         dummy_rec_.name4 := value_;
  56.452 -      ELSIF (name_ = 'TRAINING_INSTITUTION_NAME') THEN
  56.453 -         newrec_.training_institution_no := Training_institution_API.Encode(value_);
  56.454 -         IF (value_ IS NOT NULL) THEN
  56.455 -            Training_Institution_API.Exist(newrec_.training_institution_no);
  56.456 -         END IF;
  56.457 -      ELSIF (name_ = 'DATE_OF_BIRTH') THEN
  56.458 -         dummy_rec_.date_of_birth := Client_SYS.Attr_Value_To_Date(value_);
  56.459 -      ELSIF (name_ = 'SEX') THEN
  56.460 -         dummy_rec_.sex := Person_Sex_API.Encode(value_);
  56.461 -         IF (value_ IS NOT NULL) THEN
  56.462 -            Person_Sex_API.Exist(value_);
  56.463 -         END IF;
  56.464 -      ELSIF (name_ = 'REMARK') THEN
  56.465 -         newrec_.remark := value_;
  56.466 -      ELSE
  56.467 -         Error_SYS.Item_Not_Exist(lu_name_, name_, value_);
  56.468 -      END IF;
  56.469 -   END LOOP;
  56.470 -   Client_SYS.Clear_Attr(attr_);
  56.471 -   IF (dummy_rec_.name1 IS NULL) OR (dummy_rec_.name4 IS NULL) THEN
  56.472 -      Pers_API.Get_Names(name1_, name4_, newrec_.person_id);
  56.473 -      IF (dummy_rec_.name1 IS NULL) THEN
  56.474 -         dummy_rec_.name1 := name1_;
  56.475 -      END IF;
  56.476 -      IF (dummy_rec_.name4 IS NULL) THEN
  56.477 -         dummy_rec_.name4 := name4_;
  56.478 -      END IF;
  56.479 -   END IF;
  56.480 -   Error_SYS.Check_Not_Null(lu_name_, 'LNAME', dummy_rec_.name4);
  56.481 -
  56.482 -   IF (dummy_rec_.date_of_birth IS NULL) THEN
  56.483 -      dummy_rec_.date_of_birth := Pers_API.Get_Date_Of_Birth(newrec_.person_id);
  56.484 -   END IF;
  56.485 -   IF (dummy_rec_.sex IS NULL) THEN
  56.486 -      dummy_rec_.sex := Person_Sex_API.Encode(Pers_API.Get_Sex(newrec_.person_id));
  56.487 -   END IF;
  56.488 -   Error_SYS.Check_Not_Null(lu_name_, 'INTERNAL', newrec_.internal);
  56.489 -   IF (newrec_.internal = '1') THEN
  56.490 -      IF (Trainer_API.Check_Person_Internal(newrec_.person_id) = 0) THEN
  56.491 -         Error_SYS.Item_General(lu_name_, 'INTERNAL', 'EXTTYPE: Type of the trainer should be External. ');
  56.492 -      END IF;
  56.493 -   ELSE
  56.494 -      IF (Trainer_API.Check_Person_Internal(newrec_.person_id) = 1) THEN
  56.495 -         Error_SYS.Item_General(lu_name_, 'INTERNAL', 'INTTYPE: Type of the trainer should be Internal. ');
  56.496 -      END IF;
  56.497 -   END IF;
  56.498 -EXCEPTION
  56.499 -   WHEN value_error THEN
  56.500 -      Error_SYS.Item_Format(lu_name_, name_, value_);
  56.501 -END Unpack_Check_Update___;
  56.502 -
  56.503 -
  56.504 -PROCEDURE Update___ (
  56.505 -   objid_      IN     VARCHAR2,
  56.506 -   oldrec_     IN     &TABLE%ROWTYPE,
  56.507 -   newrec_     IN OUT &TABLE%ROWTYPE,
  56.508 -   attr_       IN OUT VARCHAR2,
  56.509 -   objversion_ IN OUT VARCHAR2,
  56.510 -   dummy_rec_   IN Dummy_Rec,
  56.511 -   by_keys_    IN     BOOLEAN DEFAULT FALSE )
  56.512 -IS
  56.513 -   temp_attr_    VARCHAR2(2000);
  56.514 -BEGIN
  56.515 -   newrec_.rowversion := newrec_.rowversion + 1;
  56.516 -   objversion_ := to_char(newrec_.rowversion);
  56.517 -   IF by_keys_ THEN
  56.518 -      UPDATE trainer_tab t
  56.519 -         SET person_id = newrec_.person_id,
  56.520 -             internal = newrec_.internal,
  56.521 -             training_institution_no = newrec_.training_institution_no,
  56.522 -             remark = newrec_.remark,
  56.523 -             rowversion = newrec_.rowversion
  56.524 -         WHERE person_id = newrec_.person_id;
  56.525 -   ELSE
  56.526 -      UPDATE trainer_tab t
  56.527 -         SET person_id = newrec_.person_id,
  56.528 -             internal = newrec_.internal,
  56.529 -             training_institution_no = newrec_.training_institution_no,
  56.530 -             remark = newrec_.remark,
  56.531 -             rowversion = newrec_.rowversion
  56.532 -         WHERE &OBJID = objid_;
  56.533 -   END IF;
  56.534 -
  56.535 -      --
  56.536 -      -- update person register
  56.537 -      --
  56.538 -      Client_SYS.Clear_Attr(temp_attr_);
  56.539 -      Client_SYS.Add_To_Attr('PERSON_ID', newrec_.person_id, temp_attr_);
  56.540 -      Client_SYS.Add_To_Attr('NAME1', dummy_rec_.name1, temp_attr_);
  56.541 -      Client_SYS.Add_To_Attr('NAME4', dummy_rec_.name4, temp_attr_);
  56.542 -      Client_SYS.Add_To_Attr('SEX', Person_Sex_API.Decode(dummy_rec_.sex), temp_attr_);
  56.543 -      Client_SYS.Add_To_Attr('DATE_OF_BIRTH', dummy_rec_.date_of_birth, temp_attr_);
  56.544 -      Pers_API.New_Modify(temp_attr_);
  56.545 -
  56.546 -EXCEPTION
  56.547 -      WHEN dup_val_on_index THEN
  56.548 -         Error_SYS.Record_Exist(lu_name_);
  56.549 -   END Update___;
  56.550 -
  56.551 ------------------------------------------------------------------------------
  56.552 --------------------- IMPLEMENTATION BASE METHODS FOR DELETE -----------------
  56.553 ------------------------------------------------------------------------------
  56.554 --- Check_Delete___
  56.555 ---    Checks whether a specific LU-record may be removed or not.
  56.556 ---    The procedure should check business rules like attribute values
  56.557 ---    as well as database constraints (defined or not).
  56.558 ---
  56.559 --- Delete___
  56.560 ---    Deletion of the specific LU-object from the database.
  56.561 ------------------------------------------------------------------------------
  56.562 -
  56.563 -PROCEDURE Check_Delete___ (
  56.564 -   remrec_ IN &TABLE%ROWTYPE )
  56.565 -IS
  56.566 -   key_ VARCHAR2(2000);
  56.567 -BEGIN
  56.568 -   key_ := remrec_.person_id || '^';
  56.569 -   Reference_SYS.Check_Restricted_Delete(lu_name_, key_);
  56.570 -END Check_Delete___;
  56.571 -
  56.572 -
  56.573 -PROCEDURE Delete___ (
  56.574 -   objid_  IN VARCHAR2,
  56.575 -   remrec_ IN &TABLE%ROWTYPE,
  56.576 -   by_keys_ IN BOOLEAN DEFAULT FALSE )
  56.577 -IS
  56.578 -   key_ VARCHAR2(2000);
  56.579 -   newrec_ &TABLE%ROWTYPE;
  56.580 -BEGIN
  56.581 -   key_ := remrec_.person_id || '^';
  56.582 -   Reference_SYS.Do_Cascade_Delete(lu_name_, key_);
  56.583 -   IF (by_keys_) THEN
  56.584 -      newrec_ := remrec_;
  56.585 -      DELETE FROM &TABLE
  56.586 -         WHERE person_id = newrec_.person_id;
  56.587 -   ELSE
  56.588 -      DELETE
  56.589 -         FROM  trainer_tab t
  56.590 -         WHERE &OBJID = objid_;
  56.591 -   END IF;
  56.592 -END Delete___;
  56.593 -
  56.594 ------------------------------------------------------------------------------
  56.595 --------------------- PRIVATE BASE METHODS -----------------------------------
  56.596 ------------------------------------------------------------------------------
  56.597 --- Lock__
  56.598 ---    Client-support to lock a specific instance of the logical unit.
  56.599 ---
  56.600 --- New__
  56.601 ---    Client-support interface to create LU instances.
  56.602 ---       action_ = 'PREPARE'
  56.603 ---          Default values and handle of information to client.
  56.604 ---          The default values are set in procedure Prepare_Insert___.
  56.605 ---       action_ = 'CHECK'
  56.606 ---          Check all attributes before creating new object and handle of
  56.607 ---          information to client. The attribute list is unpacked, checked
  56.608 ---          and prepared (defaults) in procedure Unpack_Check_Insert___.
  56.609 ---       action_ = 'DO'
  56.610 ---          Creation of new instances of the logical unit and handle of
  56.611 ---          information to client. The attribute list is unpacked, checked
  56.612 ---          and prepared (defaults) in procedure Unpack_Check_Insert___
  56.613 ---          before calling procedure Insert___.
  56.614 ---
  56.615 --- Modify__
  56.616 ---    Client-support interface to modify attributes for LU instances.
  56.617 ---       action_ = 'CHECK'
  56.618 ---          Check all attributes before modifying an existing object and
  56.619 ---          handle of information to client. The attribute list is unpacked,
  56.620 ---          checked and prepared(defaults) in procedure Unpack_Check_Update___.
  56.621 ---       action_ = 'DO'
  56.622 ---          Modification of an existing instance of the logical unit. The
  56.623 ---          procedure unpacks the attributes, checks all values before
  56.624 ---          procedure Update___ is called.
  56.625 ---
  56.626 --- Remove__
  56.627 ---    Client-support interface to remove LU instances.
  56.628 ---       action_ = 'CHECK'
  56.629 ---          Check whether a specific LU-instance may be removed or not.
  56.630 ---          The procedure fetches the complete record by calling procedure
  56.631 ---          Get_Record___. Then the check is made by calling procedure
  56.632 ---          Check_Delete___.
  56.633 ---       action_ = 'DO'
  56.634 ---          Remove an existing instance of the logical unit. The procedure
  56.635 ---          fetches the complete LU-record, checks for a delete and then
  56.636 ---          deletes the record by calling procedure Delete___.
  56.637 ------------------------------------------------------------------------------
  56.638 -
  56.639 -PROCEDURE Lock__ (
  56.640 -   info_       OUT VARCHAR2,
  56.641 -   objid_      IN  VARCHAR2,
  56.642 -   objversion_ IN  VARCHAR2 )
  56.643 -IS
  56.644 -   dummy_ &TABLE%ROWTYPE;
  56.645 -BEGIN
  56.646 -   General_SYS.Init_Method(lu_name_, '&PKG', 'Lock__');
  56.647 -   dummy_ := Lock_By_Id___(objid_, objversion_);
  56.648 -   info_ := Client_SYS.Get_All_Info;
  56.649 -END Lock__;
  56.650 -
  56.651 -
  56.652 -PROCEDURE New__ (
  56.653 -   info_       OUT    VARCHAR2,
  56.654 -   objid_      OUT    VARCHAR2,
  56.655 -   objversion_ OUT    VARCHAR2,
  56.656 -   attr_       IN OUT VARCHAR2,
  56.657 -   action_     IN     VARCHAR2 )
  56.658 -IS
  56.659 -   newrec_ &TABLE%ROWTYPE;
  56.660 -   dummy_rec_ Dummy_Rec;
  56.661 -BEGIN
  56.662 -   General_SYS.Init_Method(lu_name_, '&PKG', 'New__');
  56.663 -   IF (action_ = 'PREPARE') THEN
  56.664 -      Prepare_Insert___(attr_);
  56.665 -   ELSIF (action_ = 'CHECK') THEN
  56.666 -      Unpack_Check_Insert___(attr_, newrec_,dummy_rec_);
  56.667 -   ELSIF (action_ = 'DO') THEN
  56.668 -      Unpack_Check_Insert___(attr_, newrec_,dummy_rec_);
  56.669 -      Insert___(objid_, objversion_, newrec_, attr_,dummy_rec_);
  56.670 -   END IF;
  56.671 -   info_ := Client_SYS.Get_All_Info;
  56.672 -END New__;
  56.673 -
  56.674 -
  56.675 -PROCEDURE Modify__ (
  56.676 -   info_       OUT    VARCHAR2,
  56.677 -   objid_      IN     VARCHAR2,
  56.678 -   objversion_ IN OUT VARCHAR2,
  56.679 -   attr_       IN OUT VARCHAR2,
  56.680 -   action_     IN     VARCHAR2 )
  56.681 -IS
  56.682 -   oldrec_ &TABLE%ROWTYPE;
  56.683 -   newrec_ &TABLE%ROWTYPE;
  56.684 -   dummy_rec_ Dummy_Rec;
  56.685 -BEGIN
  56.686 -   General_SYS.Init_Method(lu_name_, '&PKG', 'Modify__');
  56.687 -   IF (action_ = 'CHECK') THEN
  56.688 -      newrec_ := Get_Object_By_Id___(objid_);
  56.689 -      Unpack_Check_Update___(attr_, newrec_, objid_,dummy_rec_);
  56.690 -   ELSIF (action_ = 'DO') THEN
  56.691 -      oldrec_ := Lock_By_Id___(objid_, objversion_);
  56.692 -      newrec_ := oldrec_;
  56.693 -      Unpack_Check_Update___(attr_, newrec_, objid_,dummy_rec_);
  56.694 -      Update___(objid_, oldrec_, newrec_, attr_, objversion_,dummy_rec_);
  56.695 -   END IF;
  56.696 -   info_ := Client_SYS.Get_All_Info;
  56.697 -END Modify__;
  56.698 -
  56.699 -
  56.700 -PROCEDURE Remove__ (
  56.701 -   info_       OUT VARCHAR2,
  56.702 -   objid_      IN  VARCHAR2,
  56.703 -   objversion_ IN  VARCHAR2,
  56.704 -   action_     IN  VARCHAR2 )
  56.705 -IS
  56.706 -   remrec_ &TABLE%ROWTYPE;
  56.707 -BEGIN
  56.708 -   General_SYS.Init_Method(lu_name_, '&PKG', 'Remove__');
  56.709 -   IF (action_ = 'CHECK') THEN
  56.710 -      remrec_ := Get_Object_By_Id___(objid_);
  56.711 -      Check_Delete___(remrec_);
  56.712 -   ELSIF (action_ = 'DO') THEN
  56.713 -      remrec_ := Lock_By_Id___(objid_, objversion_);
  56.714 -      Check_Delete___(remrec_);
  56.715 -      Delete___(objid_, remrec_);
  56.716 -   END IF;
  56.717 -   info_ := Client_SYS.Get_All_Info;
  56.718 -END Remove__;
  56.719 -
  56.720 ------------------------------------------------------------------------------
  56.721 --------------------- PUBLIC BASE METHODS ------------------------------------
  56.722 ------------------------------------------------------------------------------
  56.723 --- Exist
  56.724 ---   Checks if given pointer (e.g. primary key) to an instance of this
  56.725 ---   logical unit exists. If not an exception will be raised.
  56.726 ------------------------------------------------------------------------------
  56.727 -
  56.728 -PROCEDURE Exist (
  56.729 -   person_id_ IN VARCHAR2 )
  56.730 -IS
  56.731 -BEGIN
  56.732 -   General_SYS.Init_Method(lu_name_, '&PKG', 'Exist', TRUE);
  56.733 -   IF (NOT Check_Exist___(person_id_)) THEN
  56.734 -      Error_SYS.Record_Not_Exist(lu_name_);
  56.735 -   END IF;
  56.736 -END Exist;
  56.737 -
  56.738 ------------------------------------------------------------------------------
  56.739 --------------------- LU SPECIFIC IMPLEMENTATION METHODS ---------------------
  56.740 ------------------------------------------------------------------------------
  56.741 -
  56.742 ------------------------------------------------------------------------------
  56.743 --------------------- LU SPECIFIC PRIVATE METHODS ----------------------------
  56.744 ------------------------------------------------------------------------------
  56.745 -
  56.746 -
  56.747 ------------------------------------------------------------------------------
  56.748 --------------------- LU SPECIFIC PROTECTED METHODS --------------------------
  56.749 ------------------------------------------------------------------------------
  56.750 -
  56.751 -
  56.752 ------------------------------------------------------------------------------
  56.753 --------------------- LU SPECIFIC PUBLIC METHODS -----------------------------
  56.754 ------------------------------------------------------------------------------
  56.755 -
  56.756 -FUNCTION Get_Training_Institution_Name (
  56.757 -   person_id_ IN VARCHAR2 ) RETURN VARCHAR2
  56.758 -IS
  56.759 -   temp_ &TABLE..training_institution_no%TYPE;
  56.760 -   CURSOR get_attr IS
  56.761 -      SELECT training_institution_no
  56.762 -      FROM &TABLE
  56.763 -      WHERE person_id = person_id_;
  56.764 -BEGIN
  56.765 -   OPEN get_attr;
  56.766 -   FETCH get_attr INTO temp_;
  56.767 -   CLOSE get_attr;
  56.768 -   RETURN Training_Institution_API.Decode(temp_);
  56.769 -END Get_Training_Institution_Name;
  56.770 -
  56.771 -
  56.772 -FUNCTION Get_Fname (
  56.773 -   person_id_ IN VARCHAR2 ) RETURN VARCHAR2
  56.774 -IS
  56.775 -BEGIN
  56.776 -   RETURN Pers_Api.Get_Name1(person_id_);
  56.777 -END Get_Fname;
  56.778 -
  56.779 -
  56.780 -FUNCTION Get_Lname (
  56.781 -   person_id_ IN VARCHAR2 ) RETURN VARCHAR2
  56.782 -IS
  56.783 -BEGIN
  56.784 -   RETURN Pers_Api.Get_Name4(person_id_);
  56.785 -END Get_Lname;
  56.786 -
  56.787 -FUNCTION Get_Name (
  56.788 -   person_id_ IN VARCHAR2 ) RETURN VARCHAR2
  56.789 -IS
  56.790 -BEGIN
  56.791 -   RETURN Pers_Api.Get_Name(person_id_,'FIRST');
  56.792 -END Get_Name;
  56.793 -
  56.794 -FUNCTION Check_Person_Internal(
  56.795 -   person_id_  IN VARCHAR2 ) RETURN VARCHAR2
  56.796 -IS
  56.797 -BEGIN
  56.798 -   RETURN Company_Person_API.Check_Person_Internal(person_id_);
  56.799 -END Check_Person_Internal;
  56.800 -
  56.801 -FUNCTION Get_Internal_External(
  56.802 -   internal_ IN VARCHAR2) RETURN VARCHAR2
  56.803 -IS
  56.804 -
  56.805 -BEGIN
  56.806 -   IF (internal_ = '0') THEN
  56.807 -      RETURN Relationship_Type_API.Decode(internal_ + 2);
  56.808 -   ELSIF (internal_ = '1') THEN
  56.809 -      RETURN Relationship_Type_API.Decode(internal_);
  56.810 -   END IF;
  56.811 -   RETURN null;
  56.812 -END Get_Internal_External;
  56.813 -
  56.814 -FUNCTION Replace_Person_Id (
  56.815 -   new_person_id_ IN VARCHAR2,
  56.816 -   old_person_id_ IN VARCHAR2 ) RETURN VARCHAR2
  56.817 -IS
  56.818 -   CURSOR get_pers IS
  56.819 -      SELECT &OBJID, &OBJVERSION
  56.820 -      FROM &TABLE t
  56.821 -      WHERE person_id = old_person_id_;
  56.822 -   objid_       VARCHAR2(2000);
  56.823 -   objversion_  VARCHAR2(2000);
  56.824 -   oldrec_ &TABLE%ROWTYPE;
  56.825 -BEGIN
  56.826 -   General_SYS.Init_Method(lu_name_, '&PKG', 'Replace_Person_Id');
  56.827 -   IF (new_person_id_ = old_person_id_) THEN
  56.828 -      RETURN 'TRUE';
  56.829 -   END IF;
  56.830 -   IF (Check_Exist___(new_person_id_) = TRUE) THEN
  56.831 -      RETURN 'FALSE';
  56.832 -   END IF;
  56.833 -   OPEN get_pers;
  56.834 -   FETCH get_pers INTO objid_, objversion_;
  56.835 -   WHILE (get_pers%FOUND) LOOP
  56.836 -      oldrec_ := Lock_By_Id___(objid_, objversion_);
  56.837 -      UPDATE trainer_tab t
  56.838 -      SET person_id = new_person_id_,
  56.839 -          rowversion = rowversion + 1
  56.840 -      WHERE &OBJID = objid_;
  56.841 -      FETCH get_pers INTO objid_, objversion_;
  56.842 -   END LOOP;
  56.843 -   CLOSE get_pers;
  56.844 -
  56.845 -   RETURN 'TRUE';
  56.846 -END Replace_Person_Id;
  56.847 ------------------------------------------------------------------------------
  56.848 --------------------- FOUNDATION1 METHODS ------------------------------------
  56.849 ------------------------------------------------------------------------------
  56.850 --- Init
  56.851 ---   Dummy procedure that can be called at database startup to ensure that
  56.852 ---   this package is loaded into memory for performance reasons only.
  56.853 ------------------------------------------------------------------------------
  56.854 -
  56.855 -PROCEDURE Init
  56.856 -IS
  56.857 -BEGIN
  56.858 -   NULL;
  56.859 -END Init;
  56.860 -
  56.861 -
  56.862 -END &PKG;
  56.863 -/
  56.864 -SHOW ERROR
  56.865 -
  56.866 ------------------------------------------------------------------------------
  56.867 -
  56.868 -
  56.869 -
  56.870 -UNDEFINE MODULE
  56.871 -UNDEFINE LU
  56.872 -UNDEFINE TABLE
  56.873 -UNDEFINE VIEW
  56.874 -UNDEFINE VIEW_LOV1
  56.875 -UNDEFINE VIEW_LOV2
  56.876 -UNDEFINE PKG
  56.877 -UNDEFINE OBJID
  56.878 -UNDEFINE OBJVERSION
  56.879 -
  56.880 -
    57.1 --- a/PLSQL/Lexer/test/unit/src/org/netbeans/modules/plsql/lexer/fndbas_ora.cre	Wed May 15 16:07:35 2013 +0200
    57.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    57.3 @@ -1,83 +0,0 @@
    57.4 ---------------------------------------------------------------------------------------
    57.5 --- File : fndbas_ora.cre
    57.6 --- 
    57.7 ---------------------------------------------------------------------------------------
    57.8 -
    57.9 --- CREATE tables and indexes
   57.10 -
   57.11 -CREATE TABLE &AO..X_ACTIVITY_GRANT_FILTER_TAB
   57.12 -(
   57.13 -   PERMISSION_SET_ID             VARCHAR2(30)        NOT NULL,
   57.14 -   ACTIVITY_NAME                 VARCHAR2(100)       NOT NULL,
   57.15 -   FILTER_ID                     VARCHAR2(100)       NOT NULL,
   57.16 -   GRANTED_FILTER_TYPE           VARCHAR2(100)       NOT NULL
   57.17 -)
   57.18 -TABLESPACE &fnd_data
   57.19 -/
   57.20 -ALTER TABLE &AO..X_ACTIVITY_GRANT_FILTER_TAB
   57.21 -   ADD (CONSTRAINT X_ACTIVITY_GRANT_FILTER_PK PRIMARY KEY (FILTER_ID, PERMISSION_SET_ID, ACTIVITY_NAME)
   57.22 -          USING INDEX
   57.23 -          TABLESPACE &fnd_index
   57.24 -       )
   57.25 -/
   57.26 -
   57.27 -CREATE TABLE &AO..X_FNDDR_ACTIVITY_ENT_USAGE_TAB
   57.28 -(
   57.29 -   USAGE                         VARCHAR2(100),
   57.30 -   ENTITY_ID                     VARCHAR2(100),
   57.31 -   ORDINAL                       NUMBER,
   57.32 -   ACTIVITY_ID                   VARCHAR2(100),
   57.33 -   WORKSPACE_ID                  VARCHAR2(100)
   57.34 -)
   57.35 -TABLESPACE &fnd_data
   57.36 -/
   57.37 -ALTER TABLE &AO..X_FNDDR_ACTIVITY_ENT_USAGE_TAB
   57.38 -   ADD (CONSTRAINT X_FNDDR_ACTIVITY_ENT_USEAGE_PK PRIMARY KEY (ACTIVITY_ID, ORDINAL, WORKSPACE_ID)
   57.39 -          USING INDEX
   57.40 -          TABLESPACE &fnd_index
   57.41 -       )
   57.42 -/
   57.43 -CREATE INDEX &AO..X_FNDDR_ACTIVITY_ENT_USEAGE_FK
   57.44 -   ON &AO..X_FNDDR_ACTIVITY_ENT_USAGE_TAB (ENTITY_ID, WORKSPACE_ID)
   57.45 -   TABLESPACE &fnd_index
   57.46 -/
   57.47 -
   57.48 --- CREATE sequence
   57.49 -
   57.50 -CREATE SEQUENCE &AO..X_Ext_File_Batch_Param_Seq;
   57.51 -
   57.52 --- CREATE trigger
   57.53 -
   57.54 -create or replace trigger &AO..x_vmogss_base_usermap_change
   57.55 -  after insert or update or delete on &AO..vmo_base_gss_usermap_change
   57.56 -  referencing old as oldrec new as newrec
   57.57 -  for each row
   57.58 -begin
   57.59 -  if updating or inserting then
   57.60 -    insert into &AO..vmo_base_gss_scope(gss_id, created, source_tbl, source_info) values(:newrec.gss_id, sysdate, 'VMO_BASE_GSS_USERMAP_CHANGE', :newrec.gss_id);
   57.61 -  end if;
   57.62 -end x_vmogss_base_usermap_change;
   57.63 -/
   57.64 -
   57.65 --- CREATE trigger dynamically
   57.66 -
   57.67 -BEGIN
   57.68 -EXECUTE IMMEDIATE('create or replace trigger &AO..x_vmogss_base_sync_scope
   57.69 -  after insert on &AO..vmo_base_sync_scope
   57.70 -  referencing old as oldrec new as newrec
   57.71 -  for each row
   57.72 -begin
   57.73 -  if inserting then
   57.74 -    insert into &AO..vmo_base_gss_scope(gss_id, created, source_tbl, source_info) values(''ALL_GSS_ID'', sysdate, :newrec.tablename, :newrec.guid);
   57.75 -  end if;
   57.76 -end x_vmogss_base_sync_scope;');
   57.77 -EXCEPTION
   57.78 -    WHEN OTHERS THEN
   57.79 -        -- OK if ORA -00942: table or view does not exist
   57.80 -        IF INSTR(SQLERRM,'-00942') != 0 THEN NULL;
   57.81 -        ELSE raise_application_error ( -20000, SQLERRM ); 
   57.82 -        END IF;  
   57.83 -END;
   57.84 -/
   57.85 -
   57.86 -
    58.1 --- a/PLSQL/Lexer/test/unit/src/org/netbeans/modules/plsql/lexer/person.ins	Wed May 15 16:07:35 2013 +0200
    58.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    58.3 @@ -1,481 +0,0 @@
    58.4 ------------------------------------------------------------------------------
    58.5 ---  Module: PERSON
    58.6 ---
    58.7 ---  File:   PERSON.INS
    58.8 ---
    58.9 ---  IFS/Design Template Version 2.0.0
   58.10 ---
   58.11 ---  Date    Sign     History
   58.12 ---  ------  ----     -----------------------------------------------------------
   58.13 ---  080425  Deidlk   Bug 73297, Added the property codes EMPPREFIX and EMPMASK to PROPERTY_RULE_TAB
   58.14 ---  070525  Cprilk   B145522,Modified the DATA_TYPE_DB of property code 'EMPLOYEEID'.
   58.15 ---  070418  Cprilk   B142452,Added data in to PROTECTED_INFORMATION_TAB.
   58.16 ---  070409  Cprilk   Call 142241,Added property code 'EMPLOYEEID'
   58.17 ---  070320  Nueklk   Insert data into Marital_Status_Tab
   58.18 ---  061003  ChBalk   Bug 58601, Modified hardcoded date values to Database_SYS.get_first_calendar_date
   58.19 ---                   and Database_SYS.get_last_calendar_date.
   58.20 ---  040921  HiMa  Made CompanyPerson LU DOCMAN aware.
   58.21 ---  030717  Lara  Added property rule 'Allow Access to Myself'
   58.22 ---  030717  Rasi  Added property rule 'Transfer Employee Information to Biz API'
   58.23 ---  000404  WaPe  Added data insert to employee_name_configurator_tab
   58.24 ---  000222  Shir  Removed batch job for User_Access_API.Generate_Access
   58.25 ---  000215  Shir  Added code to update companies from finance to HR
   58.26 ---  000127  WaPe  Corrected the methods OBJECT_PROPERTY_API.add_value and ATTRIBUTE_DEFINITION_API.Set_Length
   58.27 ---  000124  Ravi  Called methods OBJECT_PROPERTY_API.add_value and ATTRIBUTE_DEFINITION_API.Set_Length 
   58.28 ---  991201  Shir  Added default value authority_time_tab
   58.29 ---  991201  Shir  Created a batch job for User_Access_API.Generate_Access
   58.30 ---  991201  Shir  Created
   58.31 ---  ------  ----  -----------------------------------------------------------
   58.32 -
   58.33 -
   58.34 -BEGIN
   58.35 -INSERT 
   58.36 -   INTO authority_time_tab
   58.37 -      (Time_stamp,
   58.38 -       rowversion)
   58.39 -       VALUES
   58.40 -       (sysdate,
   58.41 -       sysdate);
   58.42 -END;
   58.43 -/
   58.44 -DECLARE
   58.45 - val_   VARCHAR2(1000);
   58.46 -BEGIN
   58.47 - val_ := Object_Property_API.Get_Value('PersonCompany','*','All HR Modules 2001');
   58.48 - IF (val_ is NULL or val_='Yes,No') THEN -- old bug Yes,No means Yes
   58.49 -   OBJECT_PROPERTY_API.Set_Value('PersonCompany','*','All HR Modules 2001','Yes');  
   58.50 - END IF;
   58.51 -END;
   58.52 -/
   58.53 --- Transfer companies from finance to hr
   58.54 -PROMPT *******************************************************************
   58.55 -PROMPT Insert companies defined in IFS Financials into IFS Human Resources
   58.56 -PROMPT *******************************************************************
   58.57 -
   58.58 -BEGIN
   58.59 -INSERT INTO person_company_tab (
   58.60 -   company_id, parent_company, create_cost_center, rowversion )
   58.61 -   SELECT DISTINCT
   58.62 -      company,'0','0',1
   58.63 -   FROM company_finance_tab
   58.64 -   WHERE company NOT IN
   58.65 -               (SELECT DISTINCT company_id
   58.66 -                FROM   person_company_tab);
   58.67 -END;
   58.68 -/
   58.69 -DECLARE
   58.70 -   CURSOR check_exits(company_id_ VARCHAR2,emp_no_ VARCHAR2)IS
   58.71 -      SELECT 1             
   58.72 -      FROM company_person_tab
   58.73 -      WHERE company_id = company_id_
   58.74 -      AND emp_no = emp_no_;
   58.75 -   temp_ NUMBER;   
   58.76 -BEGIN
   58.77 -FOR rec_ IN (SELECT * FROM company_emp_tab) LOOP
   58.78 -   OPEN check_exits(rec_.company,rec_.employee_id);
   58.79 -   FETCH check_exits INTO temp_;
   58.80 -   IF (check_exits%NOTFOUND) THEN
   58.81 -      INSERT INTO company_person_tab(company_id,emp_no,master_employment,operator,rowversion)
   58.82 -      VALUES (rec_.company,rec_.employee_id,'0',User,rec_.rowversion);  
   58.83 -   END IF; 
   58.84 -   CLOSE check_exits;     
   58.85 -END LOOP;
   58.86 -END;
   58.87 -/
   58.88 -DECLARE
   58.89 -   CURSOR check_exits(person_id_ VARCHAR2) IS
   58.90 -      SELECT 1             
   58.91 -      FROM pers_tab
   58.92 -      WHERE person_id = person_id_;
   58.93 -      temp_ NUMBER;
   58.94 -
   58.95 -BEGIN
   58.96 -   FOR rec_ IN (SELECT * FROM  person_info_tab) LOOP
   58.97 -      OPEN check_exits(rec_.person_id);
   58.98 -      FETCH check_exits INTO temp_;
   58.99 -      IF (check_exits%NOTFOUND) THEN
  58.100 -            INSERT INTO pers_tab(person_id,have_child,external_display_name,rowversion)
  58.101 -            VALUES (rec_.person_id,'0',rec_.name,1);   
  58.102 -       END IF;       
  58.103 -       CLOSE check_exits;     
  58.104 -   END LOOP;
  58.105 -END;
  58.106 -/
  58.107 -BEGIN
  58.108 -INSERT INTO employee_name_configurator_tab
  58.109 - (first_name_int_seq_no, 
  58.110 -  last_name_int_seq_no, 
  58.111 -  first_name_ext_seq_no,
  58.112 -  last_name_ext_seq_no, 
  58.113 -  rowversion)
  58.114 -SELECT 1, 2,1, 2,1 FROM DUAL
  58.115 -WHERE NOT EXISTS
  58.116 -(SELECT 1 FROM employee_name_configurator_tab);
  58.117 -END;
  58.118 -/
  58.119 -commit
  58.120 -/
  58.121 -DECLARE
  58.122 -   attr_ VARCHAR2(2000);
  58.123 -BEGIN
  58.124 -   ---
  58.125 -   Client_SYS.Clear_Attr(attr_);
  58.126 -   Client_SYS.Add_To_Attr('PROPERTY_CODE',     'EMPBIZAPI', attr_);
  58.127 -   Client_SYS.Add_To_Attr('DATA_TYPE_DB',            '1', attr_);           -- String
  58.128 -   Client_SYS.Add_To_Attr('LENGTH',                   3 , attr_);
  58.129 -   Client_SYS.Add_To_Attr('MULTIPLE_INSTANCES_ALLOWED', 'FALSE' , attr_);
  58.130 -   Client_SYS.Add_To_Attr('USE_LOV_FOR_VALIDATION', '1' , attr_);             
  58.131 -   Client_SYS.Add_To_Attr('PROPERTY_OBJECT_DB',      '1', attr_);           -- Company
  58.132 -   Client_SYS.Add_To_Attr('DEFAULT_DESCRIPTION', 
  58.133 -                            'Employee Details BizAPI', attr_);
  58.134 -   Property_Rule_API.New_Modify(attr_);
  58.135 -   Commit; 
  58.136 -   ---
  58.137 -   Client_SYS.Clear_Attr(attr_);
  58.138 -   Client_SYS.Add_To_Attr('PROPERTY_CODE', 'EMPBIZAPI', attr_);
  58.139 -   Client_SYS.Add_To_Attr('PROPERTY_VALUE', 'YES', attr_); 
  58.140 -   Client_SYS.Add_To_Attr('DESCRIPTION', 'Transfer employee information', attr_);
  58.141 -   -- Bug 58601, Modified hardcoded date values to Database_SYS.get_first_calendar_date and get_last_calendar_date.
  58.142 -   Client_SYS.Add_To_Attr('VALID_FROM', Database_SYS.get_first_calendar_date, attr_);
  58.143 -   Client_SYS.Add_To_Attr('VALID_TO', Database_SYS.get_last_calendar_date, attr_);
  58.144 -   Property_Value_API.New_Modify(attr_);
  58.145 -   Commit;
  58.146 -   ---
  58.147 -   Client_SYS.Clear_Attr(attr_);
  58.148 -   Client_SYS.Add_To_Attr('PROPERTY_CODE', 'EMPBIZAPI', attr_);
  58.149 -   Client_SYS.Add_To_Attr('PROPERTY_VALUE', 'NO', attr_);
  58.150 -   Client_SYS.Add_To_Attr('DESCRIPTION', 'Do not transfer employee information', attr_);
  58.151 -   -- Bug 58601, Modified hardcoded date values to Database_SYS.get_first_calendar_date and get_last_calendar_date.
  58.152 -   Client_SYS.Add_To_Attr('VALID_FROM', Database_SYS.get_first_calendar_date, attr_);
  58.153 -   Client_SYS.Add_To_Attr('VALID_TO', Database_SYS.get_last_calendar_date, attr_);
  58.154 -   Property_Value_API.New_Modify(attr_);  
  58.155 -   Commit;
  58.156 -END;
  58.157 -/
  58.158 -commit;
  58.159 -
  58.160 -DECLARE
  58.161 -   attr_ VARCHAR2(2000);
  58.162 -BEGIN
  58.163 -   ---
  58.164 -   Client_SYS.Clear_Attr(attr_);
  58.165 -   Client_SYS.Add_To_Attr('PROPERTY_CODE',     'SELFACCESS', attr_);
  58.166 -   Client_SYS.Add_To_Attr('DATA_TYPE_DB',            '1', attr_);           -- String
  58.167 -   Client_SYS.Add_To_Attr('LENGTH',                   3 , attr_);
  58.168 -   Client_SYS.Add_To_Attr('MULTIPLE_INSTANCES_ALLOWED', 'FALSE' , attr_);             
  58.169 -   Client_SYS.Add_To_Attr('USE_LOV_FOR_VALIDATION', '1' , attr_);
  58.170 -   Client_SYS.Add_To_Attr('PROPERTY_OBJECT_DB',      '1', attr_);           -- Company
  58.171 -   Client_SYS.Add_To_Attr('DEFAULT_DESCRIPTION', 
  58.172 -                            'Allow Access to Myself', attr_);
  58.173 -   Property_Rule_API.New_Modify(attr_);
  58.174 -   Commit; 
  58.175 -   ---
  58.176 -   Client_SYS.Clear_Attr(attr_);
  58.177 -   Client_SYS.Add_To_Attr('PROPERTY_CODE', 'SELFACCESS', attr_);
  58.178 -   Client_SYS.Add_To_Attr('PROPERTY_VALUE', 'YES', attr_); 
  58.179 -   Client_SYS.Add_To_Attr('DESCRIPTION', 'Access to Myself', attr_);
  58.180 -   -- Bug 58601, Modified hardcoded date values to Database_SYS.get_first_calendar_date and get_last_calendar_date.
  58.181 -   Client_SYS.Add_To_Attr('VALID_FROM', Database_SYS.get_first_calendar_date, attr_);
  58.182 -   Client_SYS.Add_To_Attr('VALID_TO', Database_SYS.get_last_calendar_date, attr_);
  58.183 -   Property_Value_API.New_Modify(attr_);
  58.184 -   Commit;
  58.185 -   ---
  58.186 -   Client_SYS.Clear_Attr(attr_);
  58.187 -   Client_SYS.Add_To_Attr('PROPERTY_CODE', 'SELFACCESS', attr_);
  58.188 -   Client_SYS.Add_To_Attr('PROPERTY_VALUE', 'NO', attr_);
  58.189 -   Client_SYS.Add_To_Attr('DESCRIPTION', 'No Access to Myself', attr_);
  58.190 -   -- Bug 58601, Modified hardcoded date values to Database_SYS.get_first_calendar_date and get_last_calendar_date.
  58.191 -   Client_SYS.Add_To_Attr('VALID_FROM', Database_SYS.get_first_calendar_date, attr_);
  58.192 -   Client_SYS.Add_To_Attr('VALID_TO', Database_SYS.get_last_calendar_date, attr_);
  58.193 -   Property_Value_API.New_Modify(attr_);  
  58.194 -   Commit;
  58.195 -END;
  58.196 -/
  58.197 -commit;
  58.198 -
  58.199 -DECLARE
  58.200 -   attr_ VARCHAR2(2000);
  58.201 -BEGIN
  58.202 -   ---
  58.203 -   Client_SYS.Clear_Attr(attr_);
  58.204 -   Client_SYS.Add_To_Attr('PROPERTY_CODE',     'EMPLOYEEID', attr_);
  58.205 -   Client_SYS.Add_To_Attr('DATA_TYPE_DB',            '2', attr_);           -- Number
  58.206 -   Client_SYS.Add_To_Attr('LENGTH',                   10 , attr_);
  58.207 -   Client_SYS.Add_To_Attr('MULTIPLE_INSTANCES_ALLOWED', 'FALSE' , attr_);             
  58.208 -   Client_SYS.Add_To_Attr('USE_LOV_FOR_VALIDATION', '0' , attr_);
  58.209 -   Client_SYS.Add_To_Attr('PROPERTY_OBJECT_DB',      '1', attr_);           -- Company
  58.210 -   Client_SYS.Add_To_Attr('DEFAULT_DESCRIPTION', 
  58.211 -                            'Next Employee ID', attr_);
  58.212 -   Property_Rule_API.New_Modify(attr_);
  58.213 -   Commit; 
  58.214 -END;
  58.215 -/
  58.216 -Commit; 
  58.217 -
  58.218 -DECLARE
  58.219 -   CURSOR check_comp_exist(company_id_ VARCHAR2) IS
  58.220 -      SELECT 1             
  58.221 -      FROM employee_status_tab
  58.222 -      WHERE company_id = company_id_
  58.223 -        AND seq_no     = 1;
  58.224 -   chk_comp_exist_ NUMBER;
  58.225 -BEGIN
  58.226 -   FOR get_company_ IN (SELECT DISTINCT company_id FROM person_company_tab) LOOP
  58.227 -      OPEN check_comp_exist(get_company_.company_id);
  58.228 -      FETCH check_comp_exist INTO chk_comp_exist_;
  58.229 -      IF (check_comp_exist%NOTFOUND) THEN
  58.230 -         INSERT INTO EMPLOYEE_STATUS_TAB(company_id, seq_no, employee_status, active, status_obsolete, rowversion)
  58.231 -         VALUES (get_company_.company_id, 1, '*', 'TRUE', 'FALSE', 1); 
  58.232 -      END IF;
  58.233 -      CLOSE check_comp_exist;   
  58.234 -   END LOOP;
  58.235 -END;
  58.236 -/
  58.237 -BEGIN
  58.238 -   Module_Translate_Attr_Util_API.Insert_Prog_Translation( 'PERSON', 'EmployeeStatus', 'TRUE', 'True');
  58.239 -   Module_Translate_Attr_Util_API.Insert_Prog_Translation( 'PERSON', 'EmployeeStatus', 'FALSE', 'False');
  58.240 -   
  58.241 -   Module_Translate_Attr_Util_API.Insert_Prog_Translation( 'PERSON', 'WizardConfiguration', 'TRUE', 'True');
  58.242 -   Module_Translate_Attr_Util_API.Insert_Prog_Translation( 'PERSON', 'WizardConfiguration', 'FALSE', 'False');
  58.243 -   
  58.244 -   Module_Translate_Attr_Util_API.Insert_Prog_Translation( 'PERSON', 'CompanyPosition', 'TRUE', 'True');
  58.245 -   Module_Translate_Attr_Util_API.Insert_Prog_Translation( 'PERSON', 'CompanyPosition', 'FALSE', 'False');
  58.246 -                                            
  58.247 -END;
  58.248 -/
  58.249 -commit
  58.250 -/
  58.251 -prompt Insert data into PERSON_DOCUMENT_TAB
  58.252 -
  58.253 -
  58.254 -prompt creating temporary procedure for insert
  58.255 -
  58.256 -CREATE OR REPLACE procedure Temp_Person_Document_Default(document_ VARCHAR2, 
  58.257 -                                                         description_ VARCHAR2,
  58.258 -                                                         active_    VARCHAR2, 
  58.259 -                                                         rcruit_document_type_ VARCHAR2)
  58.260 -IS
  58.261 -   CURSOR existdoc(c_document_ IN VARCHAR2) IS
  58.262 -      SELECT 1
  58.263 -      FROM person_word_document_tab
  58.264 -      WHERE document = c_document_;
  58.265 -   exist_  NUMBER;
  58.266 -BEGIN
  58.267 -   OPEN existdoc(document_);
  58.268 -   FETCH existdoc INTO exist_;
  58.269 -   IF existdoc%NOTFOUND THEN
  58.270 -      INSERT
  58.271 -      INTO person_word_document_tab(
  58.272 -         document,
  58.273 -         description,
  58.274 -         active,
  58.275 -         person_document_type,
  58.276 -         inc_comp_data,
  58.277 -         inc_emp_data,
  58.278 -         inc_salary_data,
  58.279 -         inc_free_field_data,
  58.280 -         rowversion)
  58.281 -      VALUES (
  58.282 -         document_,
  58.283 -         description_,
  58.284 -         'TRUE',
  58.285 -         rcruit_document_type_,
  58.286 -         'TRUE',
  58.287 -         'TRUE',
  58.288 -         'TRUE',
  58.289 -         'TRUE',
  58.290 -         SYSDATE);
  58.291 -      Module_Translate_Attr_Util_API.Insert_Prog_Translation( 
  58.292 -                                            'PERSON', 
  58.293 -                                            'PersonWordDocument',
  58.294 -                                            document_,
  58.295 -                                            description_);  
  58.296 -   END IF;
  58.297 -   CLOSE existdoc;
  58.298 -END Temp_Person_Document_Default;
  58.299 -/
  58.300 -DECLARE
  58.301 -   document_type_     VARCHAR2(1) := '5';
  58.302 -BEGIN
  58.303 -
  58.304 -Temp_Person_Document_Default('Certificate of Employmenten.doc'	, 'Certificate of Employment - English', '1', document_type_);
  58.305 -
  58.306 -END;
  58.307 -/
  58.308 -COMMIT;
  58.309 -
  58.310 -
  58.311 -prompt dropping temporary procedure
  58.312 -
  58.313 -DROP PROCEDURE Temp_Person_Document_Default;
  58.314 -
  58.315 -
  58.316 -BEGIN
  58.317 -   Object_Connection_SYS.Disable_Logical_Unit('CompanyPerson');
  58.318 -   Object_Connection_SYS.Enable_Logical_Unit('CompanyPerson', 'DocReferenceObject^', 'COMPANY_PERSON_ALL', 'COMPANY_PERSON_API');
  58.319 -END;
  58.320 -/
  58.321 -COMMIT;
  58.322 -
  58.323 -
  58.324 -prompt ************************************************************************
  58.325 -prompt Insert data into Marital_Status_Tab
  58.326 -prompt ************************************************************************
  58.327 -
  58.328 -DECLARE
  58.329 -   CURSOR check_exits IS
  58.330 -      SELECT 1
  58.331 -      FROM marital_status_tab
  58.332 -      WHERE marital_status = 'MARRIED';
  58.333 -   temp_          NUMBER;
  58.334 -   married_seq_   NUMBER;
  58.335 -   unmarried_seq_ NUMBER;
  58.336 -   widower_seq_   NUMBER;
  58.337 -BEGIN
  58.338 -   OPEN check_exits;
  58.339 -   FETCH check_exits INTO temp_;
  58.340 -   IF (check_exits%NOTFOUND) THEN
  58.341 -      SELECT MARITAL_STATUS_ID.NEXTVAL INTO married_seq_ FROM dual;	
  58.342 -      INSERT
  58.343 -         INTO marital_status_tab (
  58.344 -            marital_status,
  58.345 -            marital_status_id,
  58.346 -            system_defined,
  58.347 -            rowversion)
  58.348 -         VALUES (
  58.349 -            'MARRIED',
  58.350 -            married_seq_,
  58.351 -            'TRUE',
  58.352 -            1);
  58.353 -   
  58.354 -         Module_Translate_Attr_Util_API.Insert_Prog_Translation( 'PERSON',
  58.355 -                                                'MaritalStatus',
  58.356 -                                                'MARRIED',
  58.357 -                                                'Married');
  58.358 -   
  58.359 -         SELECT MARITAL_STATUS_ID.NEXTVAL INTO unmarried_seq_ FROM dual;	
  58.360 -         INSERT
  58.361 -            INTO marital_status_tab (
  58.362 -               marital_status,
  58.363 -               marital_status_id,
  58.364 -               system_defined,
  58.365 -               rowversion)
  58.366 -            VALUES (
  58.367 -               'UNMARRIED',
  58.368 -               unmarried_seq_,
  58.369 -               'TRUE',
  58.370 -               1);
  58.371 -   
  58.372 -            Module_Translate_Attr_Util_API.Insert_Prog_Translation( 'PERSON',
  58.373 -                                                   'MaritalStatus',
  58.374 -                                                   'UNMARRIED',
  58.375 -                                                   'Unmarried');
  58.376 -   						
  58.377 -         SELECT MARITAL_STATUS_ID.NEXTVAL INTO widower_seq_ FROM dual;	
  58.378 -         INSERT
  58.379 -            INTO marital_status_tab (
  58.380 -               marital_status,
  58.381 -               marital_status_id,
  58.382 -               system_defined,
  58.383 -               rowversion)
  58.384 -            VALUES (
  58.385 -               'WIDOW(ER)',
  58.386 -               widower_seq_,
  58.387 -               'TRUE',
  58.388 -               1);
  58.389 -   
  58.390 -            Module_Translate_Attr_Util_API.Insert_Prog_Translation( 'PERSON',
  58.391 -                                                   'MaritalStatus',
  58.392 -                                                   'WIDOW(ER)',
  58.393 -                                                   'Widow(er)');	
  58.394 -      END IF;
  58.395 -      CLOSE check_exits;   
  58.396 -END;
  58.397 -/
  58.398 -COMMIT;
  58.399 -
  58.400 -PROMPT ADD Translations
  58.401 -BEGIN
  58.402 -   Module_Translate_Attr_Util_API.Insert_Prog_Translation( 'PERSON', 'MaritalStatus', 'TRUE', 'True');
  58.403 -   Module_Translate_Attr_Util_API.Insert_Prog_Translation( 'PERSON', 'MaritalStatus', 'FALSE', 'False');
  58.404 -END;
  58.405 -/
  58.406 -COMMIT;
  58.407 -/
  58.408 -prompt ************************************************************************
  58.409 -prompt Insert data into PROTECTED_INFORMATION_TAB
  58.410 -prompt ************************************************************************
  58.411 -
  58.412 -DECLARE
  58.413 -   CURSOR check_exits IS
  58.414 -      SELECT 1             
  58.415 -      FROM protected_information_tab
  58.416 -      WHERE protected_field = 'Personal Communication Methods';
  58.417 -   temp_ NUMBER;   
  58.418 -BEGIN 
  58.419 -   OPEN check_exits;
  58.420 -   FETCH check_exits INTO temp_;
  58.421 -   IF (check_exits%NOTFOUND) THEN     
  58.422 -     INSERT INTO protected_information_tab(Protected_Field,Protected_Value,Rowversion)
  58.423 -     VALUES ('Personal Address','TRUE',SYSDATE);
  58.424 -     INSERT INTO protected_information_tab(Protected_Field,Protected_Value,Rowversion)
  58.425 -     VALUES ('Country','TRUE',SYSDATE); 
  58.426 -     INSERT INTO protected_information_tab(Protected_Field,Protected_Value,Rowversion)
  58.427 -     VALUES ('Personal Communication Methods','TRUE',SYSDATE);
  58.428 -     INSERT INTO protected_information_tab(Protected_Field,Protected_Value,Rowversion)
  58.429 -     VALUES ('Date of Birth','FALSE',SYSDATE);  
  58.430 -     INSERT INTO protected_information_tab(Protected_Field,Protected_Value,Rowversion)
  58.431 -     VALUES ('Place of Birth','FALSE',SYSDATE);
  58.432 -     INSERT INTO protected_information_tab(Protected_Field,Protected_Value,Rowversion)
  58.433 -     VALUES ('Citizen Of','FALSE',SYSDATE);  
  58.434 -     INSERT INTO protected_information_tab(Protected_Field,Protected_Value,Rowversion)
  58.435 -     VALUES ('Insurance Id','FALSE',SYSDATE);
  58.436 -     INSERT INTO protected_information_tab(Protected_Field,Protected_Value,Rowversion)
  58.437 -     VALUES ('Gender','FALSE',SYSDATE);  
  58.438 -     INSERT INTO protected_information_tab(Protected_Field,Protected_Value,Rowversion)
  58.439 -     VALUES ('Blood Type','FALSE',SYSDATE); 
  58.440 -     INSERT INTO protected_information_tab(Protected_Field,Protected_Value,Rowversion)
  58.441 -     VALUES ('Marital Status','FALSE',SYSDATE); 
  58.442 -     INSERT INTO protected_information_tab(Protected_Field,Protected_Value,Rowversion)
  58.443 -     VALUES ('Have Children','FALSE',SYSDATE);      
  58.444 -   END IF; 
  58.445 -   CLOSE check_exits;  
  58.446 -END;
  58.447 -/
  58.448 -COMMIT;
  58.449 -
  58.450 ---Bug 73297, Start
  58.451 -PROMPT ************************************************************************
  58.452 -PROMPT Insert data INTO PROPERTY_RULE_TAB - Enhanced Automatic Employee Numbering 
  58.453 -PROMPT ************************************************************************
  58.454 -
  58.455 -DECLARE
  58.456 -   attr_ VARCHAR2(2000);
  58.457 -BEGIN
  58.458 -   ---
  58.459 -   Client_SYS.Clear_Attr(attr_);
  58.460 -   Client_SYS.Add_To_Attr('PROPERTY_CODE', 'EMPMASK', attr_);
  58.461 -   Client_SYS.Add_To_Attr('DATA_TYPE_DB', '1', attr_);                   -- String
  58.462 -   Client_SYS.Add_To_Attr('LENGTH', 15 , attr_);
  58.463 -   Client_SYS.Add_To_Attr('MULTIPLE_INSTANCES_ALLOWED', 'FALSE' , attr_);             
  58.464 -   Client_SYS.Add_To_Attr('USE_LOV_FOR_VALIDATION', '0' , attr_);
  58.465 -   Client_SYS.Add_To_Attr('PROPERTY_OBJECT_DB', '1', attr_);             -- Company
  58.466 -   Client_SYS.Add_To_Attr('DEFAULT_DESCRIPTION', 'Automatic Employee Numbering Mask', attr_);
  58.467 -   Property_Rule_API.New_Modify(attr_);
  58.468 -   COMMIT;
  58.469 -   
  58.470 -   ---
  58.471 -   Client_SYS.Clear_Attr(attr_);
  58.472 -   Client_SYS.Add_To_Attr('PROPERTY_CODE', 'EMPPREFIX', attr_);
  58.473 -   Client_SYS.Add_To_Attr('DATA_TYPE_DB', '1', attr_);                   -- String
  58.474 -   Client_SYS.Add_To_Attr('LENGTH', 10 , attr_);
  58.475 -   Client_SYS.Add_To_Attr('MULTIPLE_INSTANCES_ALLOWED', 'FALSE' , attr_);             
  58.476 -   Client_SYS.Add_To_Attr('USE_LOV_FOR_VALIDATION', '0' , attr_);
  58.477 -   Client_SYS.Add_To_Attr('PROPERTY_OBJECT_DB', '1', attr_);             -- Company
  58.478 -   Client_SYS.Add_To_Attr('DEFAULT_DESCRIPTION', 'Automatic Employee Numbering Prefix  ', attr_);
  58.479 -   Property_Rule_API.New_Modify(attr_);
  58.480 -   COMMIT;
  58.481 -END;
  58.482 -/
  58.483 -COMMIT;
  58.484 ---Bug 73297, End
    59.1 --- a/PLSQL/Lexer/test/unit/src/org/netbeans/modules/plsql/lexer/sys_IalObjectSlave.api	Wed May 15 16:07:35 2013 +0200
    59.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    59.3 @@ -1,82 +0,0 @@
    59.4 ------------------------------------------------------------------------------
    59.5 ---
    59.6 ---  Logical unit: IalObjectSlave
    59.7 ---
    59.8 ---  IFS/Design Template Version 2.2
    59.9 ---
   59.10 ---  Date    Sign  History
   59.11 ---  ------  ----  -----------------------------------------------------------
   59.12 ---  990301  MANY  Project Invader for IAL (ToDo #3177).
   59.13 ---  030131  ROOD  Removed unused public interfaces (Bug#35022).
   59.14 ---  030225  ROOD  Changed module to FNDBAS (ToDo#4149).
   59.15 ------------------------------------------------------------------------------
   59.16 -
   59.17 -DEFINE MODULE        = FNDBAS
   59.18 -DEFINE LU            = IalObjectSlave
   59.19 -DEFINE PKG           = IAL_OBJECT_SLAVE_API
   59.20 -
   59.21 -
   59.22 -
   59.23 -PROMPT Creating &INFO_OWNER..&PKG specification
   59.24 -
   59.25 -CREATE OR REPLACE PACKAGE &INFO_OWNER..&PKG IS
   59.26 -
   59.27 -module_  CONSTANT VARCHAR2(25) := '&MODULE';
   59.28 -lu_name_ CONSTANT VARCHAR2(25) := '&LU';
   59.29 -
   59.30 ------------------------------------------------------------------------------
   59.31 --------------------- LU SPECIFIC PRIVATE METHODS ----------------------------
   59.32 ------------------------------------------------------------------------------
   59.33 -
   59.34 -
   59.35 ------------------------------------------------------------------------------
   59.36 --------------------- LU SPECIFIC PROTECTED METHODS --------------------------
   59.37 ------------------------------------------------------------------------------
   59.38 -
   59.39 -
   59.40 ------------------------------------------------------------------------------
   59.41 --------------------- LU SPECIFIC PUBLIC METHODS -----------------------------
   59.42 ------------------------------------------------------------------------------
   59.43 -
   59.44 -PROCEDURE Exec_Ddl_Statement (
   59.45 -   stmt_        IN VARCHAR2 );
   59.46 -
   59.47 -PROCEDURE Enumerate_Column_Info (
   59.48 -   attr_ OUT VARCHAR2,
   59.49 -   name_ IN  VARCHAR2 );
   59.50 -
   59.51 -PROCEDURE Enumerate_Index_Info (
   59.52 -   index_list_ OUT VARCHAR2,
   59.53 -   name_       IN  VARCHAR2 );
   59.54 -
   59.55 -PROCEDURE Add_Index (
   59.56 -   name_        IN VARCHAR2,
   59.57 -   column_name_ IN VARCHAR2 );
   59.58 -
   59.59 -PROCEDURE Remove_Index (
   59.60 -   name_        IN VARCHAR2,
   59.61 -   column_name_ IN VARCHAR2 );
   59.62 -
   59.63 -PROCEDURE Get_Object_Info (
   59.64 -   attr_    OUT VARCHAR2,
   59.65 -   name_    IN  VARCHAR2 );
   59.66 -
   59.67 -FUNCTION Check_Index (
   59.68 -   name_        IN VARCHAR2,
   59.69 -   column_name_ IN VARCHAR2 ) RETURN VARCHAR2;
   59.70 -
   59.71 -PROCEDURE Get_Table_Info (
   59.72 -   table_info_ OUT VARCHAR2,
   59.73 -   name_       IN  VARCHAR2 );
   59.74 -
   59.75 ------------------------------------------------------------------------------
   59.76 --------------------- FOUNDATION1 METHODS ------------------------------------
   59.77 ------------------------------------------------------------------------------
   59.78 -
   59.79 -PROCEDURE Init;
   59.80 -
   59.81 -END &PKG;
   59.82 -/
   59.83 -SHOW ERROR
   59.84 -
   59.85 ------------------------------------------------------------------------------
    60.1 --- a/PLSQL/Lexer/test/unit/src/org/netbeans/modules/plsql/lexer/sys_IalObjectSlave.apy	Wed May 15 16:07:35 2013 +0200
    60.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    60.3 @@ -1,376 +0,0 @@
    60.4 ------------------------------------------------------------------------------
    60.5 ---
    60.6 ---  Logical unit: IalObjectSlave
    60.7 ---
    60.8 ---  Purpose:
    60.9 ---
   60.10 ---  IFS/Design Template Version 2.2
   60.11 ---
   60.12 ---  Date    Sign  History
   60.13 ---  ------  ----  -----------------------------------------------------------
   60.14 ---  990301  MANY  Project Invader for IAL (ToDo #3177).
   60.15 ---  990301  ERFO  Corrected table name paramters for Add/Remove_Index.
   60.16 ---  990322  MANY  Implemented partial replication (ToDo #3222).
   60.17 ---  030113  ROOD  Made Get_Table_Info handle locally managed tablespaces (Bug#35022).
   60.18 ---  030130  ROOD  Handling for locally managed tablespaces for indexes too (Bug#35022).
   60.19 ---                Removed unused public interfaces. Added implementation help methods.
   60.20 ---                Some other implementation modifications. 
   60.21 ---  030225  ROOD  Changed module to FNDBAS (ToDo#4149).
   60.22 ---  090107  HASP  Increased length of indexes_ variable in Enumerate_Index_Info method (Bug#79640).
   60.23 ---  090817  NABA  Certified the assert safe for dynamic SQLs (Bug#84218)
   60.24 ------------------------------------------------------------------------------
   60.25 -
   60.26 -DEFINE MODULE        = FNDBAS
   60.27 -DEFINE LU            = IalObjectSlave
   60.28 -DEFINE PKG           = IAL_OBJECT_SLAVE_API
   60.29 -
   60.30 ------------------------------------------------------------------------------
   60.31 --------------------- PACKAGES FOR METHODS -----------------------------------
   60.32 ------------------------------------------------------------------------------
   60.33 -
   60.34 -PROMPT Creating &INFO_OWNER..&PKG implementation
   60.35 -
   60.36 -CREATE OR REPLACE PACKAGE BODY &INFO_OWNER..&PKG IS
   60.37 -
   60.38 ------------------------------------------------------------------------------
   60.39 --------------------- LU SPECIFIC IMPLEMENTATION METHOD DECLARATIONS ---------
   60.40 ------------------------------------------------------------------------------
   60.41 -
   60.42 -FUNCTION Is_Locally_Managed___ (
   60.43 -   tablespace_ IN VARCHAR2 ) RETURN BOOLEAN;
   60.44 -
   60.45 -FUNCTION Is_Column_Indexed___ (
   60.46 -   name_        IN VARCHAR2,
   60.47 -   column_name_ IN VARCHAR2 ) RETURN VARCHAR2;
   60.48 -
   60.49 -FUNCTION Get_Column_Id___ (
   60.50 -   table_name_  IN VARCHAR2,
   60.51 -   column_name_ IN VARCHAR2 ) RETURN VARCHAR2;
   60.52 -
   60.53 -FUNCTION Table_Exist___ (
   60.54 -   table_name_ IN VARCHAR2 ) RETURN BOOLEAN;
   60.55 -
   60.56 ------------------------------------------------------------------------------
   60.57 --------------------- LU SPECIFIC IMPLEMENTATION METHODS ---------------------
   60.58 ------------------------------------------------------------------------------
   60.59 -
   60.60 -FUNCTION Is_Locally_Managed___ (
   60.61 -   tablespace_ IN VARCHAR2 ) RETURN BOOLEAN
   60.62 -IS
   60.63 -   extent_management_ VARCHAR2(10);
   60.64 -
   60.65 -   CURSOR get_extent_management IS
   60.66 -      SELECT extent_management
   60.67 -      FROM   user_tablespaces
   60.68 -      WHERE  tablespace_name = tablespace_;
   60.69 -BEGIN
   60.70 -   OPEN get_extent_management;
   60.71 -   FETCH get_extent_management INTO extent_management_;
   60.72 -   CLOSE get_extent_management;
   60.73 -   RETURN extent_management_ = 'LOCAL';
   60.74 -END Is_Locally_Managed___;
   60.75 -
   60.76 -FUNCTION Is_Column_Indexed___ (
   60.77 -   name_        IN VARCHAR2,
   60.78 -   column_name_ IN VARCHAR2 ) RETURN VARCHAR2
   60.79 -IS
   60.80 -   column_id_  VARCHAR2(10) := Get_Column_Id___(name_||'_TAB', column_name_);
   60.81 -   dummy_      NUMBER;
   60.82 -   found_      VARCHAR2(5);
   60.83 -
   60.84 -   CURSOR get_index(index_name_ IN VARCHAR2) IS
   60.85 -      SELECT 1
   60.86 -      FROM user_indexes
   60.87 -      WHERE index_name = index_name_;
   60.88 -
   60.89 -BEGIN
   60.90 -   OPEN get_index(name_||'_X'||column_id_);
   60.91 -   FETCH get_index INTO dummy_;
   60.92 -   IF get_index%FOUND THEN
   60.93 -      found_ := 'TRUE';
   60.94 -   ELSE
   60.95 -      found_ := 'FALSE';
   60.96 -   END IF;
   60.97 -   CLOSE get_index;
   60.98 -   RETURN found_;
   60.99 -END Is_Column_Indexed___;
  60.100 -
  60.101 -FUNCTION Get_Column_Id___ (
  60.102 -   table_name_  IN VARCHAR2,
  60.103 -   column_name_ IN VARCHAR2 ) RETURN VARCHAR2
  60.104 -IS
  60.105 -   id_ NUMBER;
  60.106 -
  60.107 -   CURSOR get_id IS
  60.108 -      SELECT column_id
  60.109 -      FROM   user_tab_columns
  60.110 -      WHERE  table_name = table_name_
  60.111 -      AND    column_name = column_name_;
  60.112 -BEGIN
  60.113 -   OPEN get_id;
  60.114 -   FETCH get_id INTO id_;
  60.115 -   CLOSE get_id;
  60.116 -   RETURN to_char(id_);
  60.117 -END Get_Column_Id___;
  60.118 -
  60.119 -FUNCTION Table_Exist___ (
  60.120 -   table_name_ IN VARCHAR2 ) RETURN BOOLEAN
  60.121 -IS
  60.122 -   dummy_  NUMBER;
  60.123 -
  60.124 -   CURSOR exist_control IS
  60.125 -   SELECT 1
  60.126 -   FROM user_tables
  60.127 -   WHERE table_name = table_name_;
  60.128 -BEGIN
  60.129 -   OPEN exist_control;
  60.130 -   FETCH exist_control INTO dummy_;
  60.131 -   IF exist_control%FOUND THEN
  60.132 -      CLOSE exist_control;
  60.133 -      RETURN (TRUE);
  60.134 -   END IF;
  60.135 -   CLOSE exist_control;
  60.136 -   RETURN (FALSE);
  60.137 -END Table_Exist___;
  60.138 -
  60.139 ------------------------------------------------------------------------------
  60.140 --------------------- LU SPECIFIC PRIVATE METHODS ----------------------------
  60.141 ------------------------------------------------------------------------------
  60.142 -
  60.143 -
  60.144 ------------------------------------------------------------------------------
  60.145 --------------------- LU SPECIFIC PROTECTED METHODS --------------------------
  60.146 ------------------------------------------------------------------------------
  60.147 -
  60.148 -
  60.149 ------------------------------------------------------------------------------
  60.150 --------------------- LU SPECIFIC PUBLIC METHODS -----------------------------
  60.151 ------------------------------------------------------------------------------
  60.152 -
  60.153 -PROCEDURE Exec_Ddl_Statement (
  60.154 -   stmt_        IN VARCHAR2 )
  60.155 -IS
  60.156 -BEGIN
  60.157 -   -- Safe as package is in IAL Owner schema
  60.158 -   -- ifs_assert_safe nabalk 20090817
  60.159 -   EXECUTE IMMEDIATE stmt_;
  60.160 -END Exec_Ddl_Statement;
  60.161 -
  60.162 -PROCEDURE Enumerate_Column_Info (
  60.163 -   attr_ OUT VARCHAR2,
  60.164 -   name_ IN  VARCHAR2 )
  60.165 -IS
  60.166 -   out_attr_   VARCHAR2(19000);
  60.167 -   tmp_attr_   VARCHAR2(32000);
  60.168 -   table_name_ VARCHAR2(30) := name_||'_TAB';
  60.169 -   view_name_  VARCHAR2(30) := name_||'_IAL';
  60.170 -
  60.171 -   CURSOR get_column_info(table_or_view_name_ IN VARCHAR2) IS
  60.172 -      SELECT * FROM user_tab_columns
  60.173 -      WHERE  table_name = table_or_view_name_;
  60.174 -BEGIN
  60.175 -   IF Table_Exist___(table_name_) THEN
  60.176 -      FOR rec_ IN get_column_info(table_name_) LOOP
  60.177 -         tmp_attr_ := NULL;
  60.178 -         tmp_attr_ := tmp_attr_ || 'NAME' || chr(31) || rec_.column_name || chr(30);
  60.179 -         tmp_attr_ := tmp_attr_ || 'DATATYPE' || chr(31) || rec_.data_type || chr(30);
  60.180 -         tmp_attr_ := tmp_attr_ || 'INDEXED' || chr(31) || Is_Column_Indexed___(name_, rec_.column_name) || chr(30);
  60.181 -         out_attr_ := out_attr_ || tmp_attr_ ||chr(29);
  60.182 -      END LOOP;
  60.183 -   ELSE
  60.184 -      FOR rec_ IN get_column_info(view_name_) LOOP
  60.185 -         tmp_attr_ := NULL;
  60.186 -         tmp_attr_ := tmp_attr_ || 'NAME' || chr(31) || rec_.column_name || chr(30);
  60.187 -         tmp_attr_ := tmp_attr_ || 'DATATYPE' || chr(31) || rec_.data_type || chr(30);
  60.188 -         tmp_attr_ := tmp_attr_ || 'INDEXED' || chr(31) || 'FALSE' || chr(30);
  60.189 -         out_attr_ := out_attr_ || tmp_attr_ ||chr(29);
  60.190 -      END LOOP;
  60.191 -   END IF;
  60.192 -   attr_ := out_attr_;
  60.193 -END Enumerate_Column_Info;
  60.194 -
  60.195 -PROCEDURE Enumerate_Index_Info (
  60.196 -   index_list_ OUT VARCHAR2,
  60.197 -   name_       IN  VARCHAR2 )
  60.198 -IS
  60.199 -   indexes_           VARCHAR2(32000);
  60.200 -   index_             VARCHAR2(2000);
  60.201 -   col_list_          VARCHAR2(400);
  60.202 -   delim_             VARCHAR2(1);
  60.203 -   table_name_        VARCHAR2(30) := name_ || '_TAB';
  60.204 -
  60.205 -   CURSOR get_index_info IS
  60.206 -      SELECT * 
  60.207 -      FROM user_indexes
  60.208 -      WHERE  table_name = table_name_;
  60.209 -
  60.210 -   CURSOR get_columns(index_name_ IN VARCHAR2) IS
  60.211 -      SELECT column_name 
  60.212 -      FROM user_ind_columns
  60.213 -      WHERE  index_name = index_name_
  60.214 -      ORDER BY column_position;
  60.215 -BEGIN
  60.216 -   FOR ind_ IN get_index_info LOOP
  60.217 -      IF (ind_.uniqueness = 'UNIQUE') THEN
  60.218 -         index_ := 'CREATE UNIQUE INDEX ' || ind_.index_name || ' ON ' || ind_.table_name || '(';
  60.219 -      ELSE
  60.220 -         index_ := 'CREATE INDEX ' || ind_.index_name || ' ON ' || ind_.table_name || '(';
  60.221 -      END IF;
  60.222 -      col_list_ := NULL;
  60.223 -      delim_ := NULL;
  60.224 -      FOR col_ IN get_columns(ind_.index_name) LOOP
  60.225 -         col_list_ := col_list_ || delim_ || col_.column_name;
  60.226 -         delim_ := ',';
  60.227 -      END LOOP;
  60.228 -      IF (col_list_ IS NOT NULL) THEN -- Can a index have zero columns? Well, just in case...
  60.229 -         index_ := index_ || col_list_ || ') TABLESPACE ' || ind_.tablespace_name || ' ';
  60.230 -         -- Statements only necessary if not locally managed tablespace
  60.231 -         IF NOT Is_Locally_Managed___(ind_.tablespace_name) THEN
  60.232 -            index_ := index_ || 'INITRANS ' || ind_.ini_trans || ' ';
  60.233 -            index_ := index_ || 'MAXTRANS ' || ind_.max_trans || ' ';
  60.234 -            index_ := index_ || 'PCTFREE ' || ind_.pct_free || ' ';
  60.235 -            index_ := index_ || 'STORAGE (INITIAL ' || ind_.initial_extent || ' NEXT ' || ind_.next_extent || ' ';
  60.236 -            index_ := index_ || 'MINEXTENTS ' || ind_.min_extents || ' MAXEXTENTS ' || ind_.max_extents || ' ';
  60.237 -            index_ := index_ || 'PCTINCREASE ' || ind_.pct_increase || ' FREELISTS ' || ind_.freelists || ' ';
  60.238 -            index_ := index_ || 'FREELIST GROUPS ' || ind_.freelist_groups || ')';
  60.239 -         END IF;
  60.240 -         -- Add this index to the list for all indexes
  60.241 -         indexes_ := indexes_ || index_ || chr(31);
  60.242 -      END IF;
  60.243 -   END LOOP;
  60.244 -   index_list_ := indexes_;
  60.245 -END Enumerate_Index_Info;
  60.246 -
  60.247 -PROCEDURE Add_Index (
  60.248 -   name_        IN VARCHAR2,
  60.249 -   column_name_ IN VARCHAR2 )
  60.250 -IS
  60.251 -   column_id_  VARCHAR2(10) := Get_Column_Id___(name_||'_TAB', column_name_);
  60.252 -BEGIN
  60.253 -   Exec_Ddl_Statement('CREATE INDEX '||name_||'_X'||column_id_||' ON '||name_||'_TAB ('||column_name_||')');
  60.254 -END Add_Index;
  60.255 -
  60.256 -PROCEDURE Remove_Index (
  60.257 -   name_        IN VARCHAR2,
  60.258 -   column_name_ IN VARCHAR2 )
  60.259 -IS
  60.260 -   column_id_  VARCHAR2(10) := Get_Column_Id___(name_||'_TAB', column_name_);
  60.261 -BEGIN
  60.262 -   Exec_Ddl_Statement('DROP INDEX '||name_||'_X'||column_id_);
  60.263 -END Remove_Index;
  60.264 -
  60.265 -PROCEDURE Get_Object_Info (
  60.266 -   attr_    OUT VARCHAR2,
  60.267 -   name_    IN  VARCHAR2 )
  60.268 -IS
  60.269 -   tmp_attr_   VARCHAR2(100) := NULL;
  60.270 -   dummy_      NUMBER;
  60.271 -   table_name_ VARCHAR2(30) := name_||'_TAB';
  60.272 -
  60.273 -   CURSOR find_objdate_column IS
  60.274 -      SELECT 1
  60.275 -      FROM user_tab_columns
  60.276 -      WHERE table_name = table_name_
  60.277 -      AND   column_name = 'OBJDATE';
  60.278 -BEGIN
  60.279 -   IF Table_Exist___(table_name_) THEN
  60.280 -      -- Add table name
  60.281 -      tmp_attr_ := tmp_attr_ || 'TABLE_NAME' || chr(31) || table_name_ || chr(30);
  60.282 -      
  60.283 -      -- Add info about objdate column
  60.284 -      OPEN find_objdate_column;
  60.285 -      FETCH find_objdate_column INTO dummy_;
  60.286 -      IF find_objdate_column%FOUND THEN
  60.287 -         tmp_attr_ := tmp_attr_ || 'OBJDATE' || chr(31) || 'TRUE' || chr(30);
  60.288 -      ELSE
  60.289 -         tmp_attr_ := tmp_attr_ || 'OBJDATE' || chr(31) || 'FALSE' || chr(30);
  60.290 -      END IF;
  60.291 -      CLOSE find_objdate_column;
  60.292 -   ELSE
  60.293 -      -- If no table exist, then no objdate column will exist either...
  60.294 -      tmp_attr_ := tmp_attr_ || 'OBJDATE' || chr(31) || 'FALSE' || chr(30);
  60.295 -   END IF;
  60.296 -   attr_ := tmp_attr_;
  60.297 -END Get_Object_Info;
  60.298 -
  60.299 -FUNCTION Check_Index (
  60.300 -   name_        IN VARCHAR2,
  60.301 -   column_name_ IN VARCHAR2 ) RETURN VARCHAR2
  60.302 -IS
  60.303 -   dummy_      NUMBER;
  60.304 -   table_name_ VARCHAR2(30) := name_ || '_TAB';
  60.305 -
  60.306 -   CURSOR get_indexes IS
  60.307 -      SELECT index_name
  60.308 -      FROM user_indexes
  60.309 -      WHERE table_name = table_name_;
  60.310 -
  60.311 -   CURSOR find_index_column(index_name_ IN VARCHAR2) IS
  60.312 -      SELECT 1
  60.313 -      FROM user_ind_columns
  60.314 -      WHERE index_name = index_name_
  60.315 -      AND column_name = column_name_;
  60.316 -BEGIN
  60.317 -   FOR rec_ IN get_indexes LOOP
  60.318 -      OPEN find_index_column(rec_.index_name);
  60.319 -      FETCH find_index_column INTO dummy_;
  60.320 -      IF find_index_column%FOUND THEN -- There is an index on this column that is probably better.
  60.321 -         CLOSE find_index_column;
  60.322 -         RETURN 'FALSE';
  60.323 -      END IF;
  60.324 -      CLOSE find_index_column;
  60.325 -   END LOOP;
  60.326 -   RETURN ('TRUE');
  60.327 -END Check_Index;
  60.328 -
  60.329 -PROCEDURE Get_Table_Info (
  60.330 -   table_info_ OUT VARCHAR2,
  60.331 -   name_       IN  VARCHAR2 )
  60.332 -IS
  60.333 -   table_             VARCHAR2(2000);
  60.334 -
  60.335 -   CURSOR get_table_information(table_name_ IN VARCHAR2) IS
  60.336 -      SELECT *
  60.337 -      FROM user_tables
  60.338 -      WHERE  table_name = table_name_;
  60.339 -BEGIN
  60.340 -   FOR tab_ IN get_table_information(name_ || '_TAB') LOOP
  60.341 -      -- Initial statement
  60.342 -      table_ := 'CREATE TABLE ' || tab_.table_name;
  60.343 -      table_ := table_ || ' TABLESPACE ' || tab_.tablespace_name;
  60.344 -      -- Statements only necessary if not locally managed tablespace
  60.345 -      IF NOT Is_Locally_Managed___(tab_.tablespace_name) THEN
  60.346 -         table_ := table_ || ' INITRANS ' || tab_.ini_trans;
  60.347 -         table_ := table_ || ' MAXTRANS ' || tab_.max_trans;
  60.348 -         table_ := table_ || ' PCTFREE ' || tab_.pct_free;
  60.349 -         table_ := table_ || ' STORAGE (INITIAL ' || tab_.initial_extent || ' NEXT ' || tab_.next_extent;
  60.350 -         table_ := table_ || ' MINEXTENTS ' || tab_.min_extents || ' MAXEXTENTS ' || tab_.max_extents;
  60.351 -         table_ := table_ || ' PCTINCREASE ' || tab_.pct_increase || ' FREELISTS ' || tab_.freelists;
  60.352 -         table_ := table_ || ' FREELIST GROUPS ' || tab_.freelist_groups || ')';
  60.353 -      END IF;
  60.354 -      -- Final statement
  60.355 -      table_ := table_ || ' AS (SELECT * FROM ' || name_ || '_IAL)';
  60.356 -   END LOOP;
  60.357 -   table_info_ := table_;
  60.358 -END Get_Table_Info;
  60.359 -
  60.360 ------------------------------------------------------------------------------
  60.361 --------------------- FOUNDATION1 METHODS ------------------------------------
  60.362 ------------------------------------------------------------------------------
  60.363 --- Init
  60.364 ---   Dummy procedure that can be called at database startup to ensure that
  60.365 ---   this package is loaded into memory for performance reasons only.
  60.366 ------------------------------------------------------------------------------
  60.367 -
  60.368 -PROCEDURE Init
  60.369 -IS
  60.370 -BEGIN
  60.371 -   NULL;
  60.372 -END Init;
  60.373 -
  60.374 -
  60.375 -END &PKG;
  60.376 -/
  60.377 -SHOW ERROR
  60.378 -
  60.379 ------------------------------------------------------------------------------
    61.1 --- a/PLSQL/Lexer/test/unit/src/org/netbeans/modules/plsql/lexer/test.api	Wed May 15 16:07:35 2013 +0200
    61.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    61.3 @@ -1,1 +0,0 @@
    61.4 ------------------------------------------------------------------------------
    61.5 --
    61.6 --  Logical unit: Formula
    61.7 --
    61.8 --  IFS/Design Template Version 2.5
    61.9 --
   61.10 --  Date    Sign    History
   61.11 --  ------  ------  ---------------------------------------------------------
   61.12 -----------------------------------------------------------------------------
   61.13 
   61.14 DEFINE MODULE        = APPSRV
   61.15 DEFINE LU            = Formula
   61.16 DEFINE PKG           = FORMULA_API
   61.17 
   61.18 PROMPT Creating &PKG context
   61.19 
   61.20 BEGIN
   61.21    Installation_SYS.Create_Context('&LU'||'_CTX', 'DOMAIN_SYS', NULL, 'GLOBALLY', TRUE);
   61.22 END;
   61.23 /
   61.24 
   61.25 PROMPT Creating &PKG specification
   61.26 
   61.27 CREATE OR REPLACE PACKAGE &PKG IS
   61.28 
   61.29 TYPE Public_Rec IS RECORD
   61.30    (description FORMULA_TAB.description%TYPE,
   61.31     formula_uom FORMULA_TAB.formula_uom%TYPE,
   61.32     uom_description FORMULA_TAB.uom_description%TYPE);
   61.33 
   61.34 -----------------------------------------------------------------------------
   61.35 -------------------- PRIVATE FINITE STATE MACHINE ---------------------------
   61.36 -----------------------------------------------------------------------------
   61.37 
   61.38 FUNCTION Finite_State_Decode__ (
   61.39    db_state_ IN VARCHAR2 ) RETURN VARCHAR2;
   61.40 PRAGMA restrict_references(Finite_State_Decode__, WNDS, TRUST);
   61.41 
   61.42 PROCEDURE Enumerate_States_Db__ (
   61.43    db_values_ OUT VARCHAR2);
   61.44 
   61.45 -----------------------------------------------------------------------------
   61.46 -------------------- LU SPECIFIC PUBLIC METHODS -----------------------------
   61.47 -----------------------------------------------------------------------------
   61.48 
   61.49 END &PKG;
   61.50 /
   61.51 SHOW ERROR
   61.52 
   61.53 UNDEFINE MODULE
   61.54 UNDEFINE LU
   61.55 UNDEFINE PKG
   61.56 \ No newline at end of file
    62.1 --- a/PLSQL/Lexer/test/unit/src/org/netbeans/modules/plsql/lexer/test.apy	Wed May 15 16:07:35 2013 +0200
    62.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    62.3 @@ -1,129 +0,0 @@
    62.4 ------------------------------------------------------------------------------
    62.5 ---
    62.6 ---  Logical unit: Formula
    62.7 ---
    62.8 ---  Purpose:
    62.9 ---
   62.10 ---  IFS/Design Template Version 2.5
   62.11 ---
   62.12 ---  Date    Sign    History
   62.13 ---  ------  ------  ---------------------------------------------------------
   62.14 ------------------------------------------------------------------------------
   62.15 -
   62.16 -DEFINE MODULE        = APPSRV
   62.17 -DEFINE LU            = Formula
   62.18 -DEFINE TABLE         = FORMULA_TAB
   62.19 -DEFINE VIEW          = FORMULA
   62.20 -DEFINE PKG           = FORMULA_API
   62.21 -
   62.22 -DEFINE OBJID         = rowid
   62.23 -DEFINE OBJVERSION    = "ltrim(lpad(to_char(rowversion,'YYYYMMDDHH24MISS'),2000))"
   62.24 -DEFINE OBJSTATE      = rowstate
   62.25 -DEFINE OBJEVENTS     = &PKG..Finite_State_Events__(&OBJSTATE)
   62.26 -DEFINE STATE         = &PKG..Finite_State_Decode__(&OBJSTATE)
   62.27 -
   62.28 -PROMPT Creating &VIEW view
   62.29 -
   62.30 -CREATE OR REPLACE VIEW &VIEW AS
   62.31 -SELECT formula_id                     formula_id,
   62.32 -       description                    description,
   62.33 -       formula_uom                    formula_uom,
   62.34 -       uom_description                uom_description,
   62.35 -       &OBJID                         objid,
   62.36 -       &OBJVERSION                    objversion,
   62.37 -       &OBJSTATE                      objstate,
   62.38 -       &OBJEVENTS                     objevents,
   62.39 -       &STATE                         state
   62.40 -FROM   formula_tab
   62.41 -WITH   read only;
   62.42 -
   62.43 -COMMENT ON TABLE &VIEW
   62.44 -   IS 'LU=&LU^PROMPT=Formula^MODULE=&MODULE^';
   62.45 -
   62.46 -COMMENT ON COLUMN &VIEW..formula_id
   62.47 -   IS 'FLAGS=KMI-L^DATATYPE=STRING(30)/UPPERCASE^PROMPT=Formula Id^';
   62.48 -COMMENT ON COLUMN &VIEW..description
   62.49 -   IS 'FLAGS=AMIUL^DATATYPE=STRING(100)^PROMPT=Description^';
   62.50 -COMMENT ON COLUMN &VIEW..formula_uom
   62.51 -   IS 'FLAGS=AMIUL^DATATYPE=STRING(30)^PROMPT=Formula Uom^REF=IsoUnit/NOCHECK^';
   62.52 -COMMENT ON COLUMN &VIEW..uom_description
   62.53 -   IS 'FLAGS=AMIUL^DATATYPE=STRING(200)^PROMPT=Uom Description^';
   62.54 -
   62.55 -PROMPT Creating &PKG implementation
   62.56 -
   62.57 -CREATE OR REPLACE PACKAGE BODY &PKG IS
   62.58 -
   62.59 -state_separator_   CONSTANT VARCHAR2(1)   := Client_SYS.field_separator_;
   62.60 -
   62.61 ------------------------------------------------------------------------------
   62.62 --------------------- LU SPECIFIC IMPLEMENTATION METHOD DECLARATIONS ---------
   62.63 ------------------------------------------------------------------------------
   62.64 -
   62.65 -PROCEDURE Check_Formula_State___ (
   62.66 -   rec_  IN OUT &TABLE%ROWTYPE,
   62.67 -   attr_ IN OUT VARCHAR2 );
   62.68 -
   62.69 -FUNCTION Get_Db_Values___ RETURN VARCHAR2 DETERMINISTIC;
   62.70 -
   62.71 -PROCEDURE Exist (
   62.72 -   formula_id_ IN VARCHAR2 )
   62.73 -IS
   62.74 -BEGIN
   62.75 -   General_SYS.Init_Method(lu_name_, '&PKG', 'Exist', TRUE);
   62.76 -   IF (NOT Check_Exist___(formula_id_)) THEN
   62.77 -      Error_SYS.Record_Not_Exist(lu_name_);
   62.78 -   END IF;
   62.79 -END Exist;
   62.80 -
   62.81 -/**Example block comment inside a package spec**/
   62.82 -
   62.83 -FUNCTION Get (
   62.84 -   formula_id_ IN VARCHAR2 ) RETURN Public_Rec
   62.85 -IS
   62.86 -   temp_ Public_Rec;
   62.87 -   CURSOR get_attr IS
   62.88 -      SELECT description, formula_uom, uom_description
   62.89 -      FROM &TABLE
   62.90 -      WHERE formula_id = formula_id_;
   62.91 -BEGIN
   62.92 -   OPEN get_attr;
   62.93 -   FETCH get_attr INTO temp_;
   62.94 -   CLOSE get_attr;
   62.95 -   RETURN temp_;
   62.96 -END Get;
   62.97 -
   62.98 ------------------------------------------------------------------------------
   62.99 --------------------- FOUNDATION1 METHODS ------------------------------------
  62.100 ------------------------------------------------------------------------------
  62.101 --- Init
  62.102 ---   Dummy procedure that can be called at database startup to ensure that
  62.103 ---   this package is loaded into memory for performance reasons only.
  62.104 ------------------------------------------------------------------------------
  62.105 -
  62.106 -PROCEDURE Init
  62.107 -IS
  62.108 -BEGIN
  62.109 -   Domain_SYS.Load_State(lu_name_, Get_Client_Values___, Get_Db_Values___);
  62.110 -END Init;
  62.111 -
  62.112 -END &PKG;
  62.113 -/
  62.114 -SHOW ERROR
  62.115 -
  62.116 -
  62.117 -BEGIN
  62.118 -   FORMULA_API.Language_Refreshed;
  62.119 -END;
  62.120 -/
  62.121 -
  62.122 -UNDEFINE MODULE
  62.123 -UNDEFINE LU
  62.124 -UNDEFINE TABLE
  62.125 -UNDEFINE VIEW
  62.126 -UNDEFINE PKG
  62.127 -UNDEFINE OBJID
  62.128 -UNDEFINE OBJVERSION
  62.129 -UNDEFINE OBJSTATE
  62.130 -UNDEFINE OBJEVENTS
  62.131 -UNDEFINE STATE
  62.132 ------------------------------------------------------------------------------
  62.133 \ No newline at end of file
    63.1 --- a/PLSQL/Lexer/test/unit/src/org/netbeans/modules/plsql/lexer/test.upg	Wed May 15 16:07:35 2013 +0200
    63.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    63.3 @@ -1,254 +0,0 @@
    63.4 -create or replace java source named "AvQuery" as
    63.5 -
    63.6 -  import java.util.*;
    63.7 -
    63.8 -  class WordData {
    63.9 -    String text;
   63.10 -    String fieldName;
   63.11 -    }
   63.12 -
   63.13 -  public class AvQuery {
   63.14 -
   63.15 -  static Vector reqWords = new Vector();
   63.16 -  static Vector optWords = new Vector();
   63.17 -  static Vector notWords = new Vector();
   63.18 -
   63.19 -  public static final int required  = 1;
   63.20 -  public static final int optional  = 2;
   63.21 -  public static final int notwanted = 3;
   63.22 -
   63.23 -  public static String translate (String input) {
   63.24 -    processString(input);
   63.25 -    return getQuery();
   63.26 -    }
   63.27 -
   63.28 -  private static void addWord (String word, int wordType, String field) {
   63.29 -
   63.30 -    WordData wd = new WordData();
   63.31 -
   63.32 -    wd.text = word;
   63.33 -    wd.fieldName = field;
   63.34 -
   63.35 -    switch (wordType) {
   63.36 -    case required:
   63.37 -      reqWords.addElement(wd);
   63.38 -      break;
   63.39 -    case optional:
   63.40 -      optWords.addElement(wd);
   63.41 -      break;
   63.42 -    case notwanted:
   63.43 -      notWords.addElement(wd);
   63.44 -      break;
   63.45 -    }
   63.46 -  }
   63.47 -
   63.48 -  public static void processString (String input) {
   63.49 -    int p = 0;
   63.50 -    int pp;
   63.51 -    int startWord;
   63.52 -    int flag;
   63.53 -    String theWord;
   63.54 -    String fieldName;
   63.55 -
   63.56 -
   63.57 -    reqWords = new Vector();
   63.58 -    optWords = new Vector();
   63.59 -    notWords = new Vector();
   63.60 -
   63.61 -    while (true) {       // Loop over all words
   63.62 -
   63.63 -      startWord = p;
   63.64 -      while (p < input.length() && input.charAt(p) != ' ') {
   63.65 -        // Check for quoted phrase
   63.66 -        if (input.charAt(p) == '"') {   // Quote - skip to next or end
   63.67 -          p++;  // skip the actual quote
   63.68 -          while (p < input.length() && input.charAt(p) != '"') {
   63.69 -            p++;
   63.70 -            }
   63.71 -          if (p < input.length()) p++;   // Skip the final quote if found
   63.72 -          }
   63.73 -        else {
   63.74 -          p++;
   63.75 -          }
   63.76 -        }
   63.77 -
   63.78 -      // Got a word. Check for required/not wanted flags (+-)
   63.79 -
   63.80 -      theWord = input.substring(startWord, p);
   63.81 -
   63.82 -      flag = optional;
   63.83 -      fieldName = "";
   63.84 -
   63.85 -      if (theWord.charAt(0) == '+') {
   63.86 -        flag = required;
   63.87 -        theWord = theWord.substring(1);
   63.88 -        }
   63.89 -
   63.90 -      else if (theWord.charAt(0) == '-') {
   63.91 -        flag = notwanted;
   63.92 -        theWord = theWord.substring(1);
   63.93 -        }
   63.94 -
   63.95 -      // Replace * wild cards with %
   63.96 -
   63.97 -      theWord = theWord.replace('*', '%');
   63.98 -
   63.99 -      // Find field indicator ":"
  63.100 -
  63.101 -      pp = theWord.indexOf(":");
  63.102 -      if (pp > 0) {
  63.103 -        fieldName = theWord.substring(0, pp);
  63.104 -        theWord = theWord.substring(pp+1, theWord.length());
  63.105 -        }
  63.106 -
  63.107 -      addWord(theWord, flag, fieldName);
  63.108 -
  63.109 -      p++;
  63.110 -      if (p >= input.length()) break;
  63.111 -      }
  63.112 -    }
  63.113 -
  63.114 -  // Get word gets a single word from the "words" vector,
  63.115 -  //  surrounds it in braces (to avoid reserved words)
  63.116 -  //  and attaches a WITHIN clause if appropriate.
  63.117 -
  63.118 -  private static String getWord (Vector words, int pos) {
  63.119 -
  63.120 -    String ts = "{" + ((WordData) words.elementAt(pos)).text + "}";
  63.121 -    if (((WordData)words.elementAt(pos)).fieldName.length() > 0) {
  63.122 -      ts += " WITHIN " + ((WordData)words.elementAt(pos)).fieldName;
  63.123 -      }
  63.124 -    return ts;
  63.125 -    }
  63.126 -
  63.127 -
  63.128 -  // getQuery returns a formatted, ready-to-run ConText query.
  63.129 -  // In order to satisfy the altavista syntax, we have to generate
  63.130 -  // the following query:
  63.131 -
  63.132 -  //  ( req1 & req2 & ... reqN)
  63.133 -  //   | ( (req1 & req2 & .. reqN)*10*10
  63.134 -  //       & (req1, req2 , ... reqN , opt1 , opt2 , ... optN) )
  63.135 -  //   NOT (not1 | not2 | ... notN)
  63.136 -
  63.137 -  public static String getQuery () {
  63.138 -    String tempString = "";
  63.139 -
  63.140 -    String boolOp = "";   //  AND, OR, NOT operator
  63.141 -    int reqCount;         //  Count of required words
  63.142 -    int optCount;         //  Count of optional words
  63.143 -    int notCount;         //  Count of not wanted words
  63.144 -    int i;                //  Loop control
  63.145 -
  63.146 -    boolOp = "";
  63.147 -    reqCount = reqWords.size();
  63.148 -    optCount = optWords.size();
  63.149 -    notCount = notWords.size();
  63.150 -
  63.151 -    if (reqWords.size() > 0) {
  63.152 -      // Required words - first time
  63.153 -
  63.154 -      tempString = "((";
  63.155 -      for (i = 0; i < reqCount; i++) {
  63.156 -        tempString += boolOp + getWord(reqWords,i);
  63.157 -        boolOp = " & ";
  63.158 -        }
  63.159 -
  63.160 -      if (reqCount > 0 && optCount > 0) {
  63.161 -        tempString += ") | ";
  63.162 -        tempString += "((";
  63.163 -        // Required words - second time (anded with optional words)
  63.164 -        boolOp = "";
  63.165 -        for (i = 0; i < reqCount; i++) {
  63.166 -          tempString += boolOp + getWord(reqWords,i);
  63.167 -          boolOp = " & ";
  63.168 -          }
  63.169 -        tempString += ")*10*10";
  63.170 -
  63.171 -        tempString += " & (";
  63.172 -
  63.173 -        // Required words - third time as part of accumulate
  63.174 -        boolOp = "";
  63.175 -        for (i = 0; i < reqCount; i++) {
  63.176 -          tempString += boolOp + getWord(reqWords,i);
  63.177 -          // tempString += "*2";// Uncomment to double weight of required words
  63.178 -          boolOp = " , ";
  63.179 -          }
  63.180 -        }
  63.181 -      }
  63.182 -    else
  63.183 -      tempString = "(";
  63.184 -
  63.185 -    // Optional words
  63.186 -    // Don't reset boolOp
  63.187 -    for (i = 0; i < optCount; i++) {
  63.188 -      tempString += boolOp + getWord(optWords,i);
  63.189 -      boolOp = " , ";  // Accumulate
  63.190 -      }
  63.191 -
  63.192 -    if (reqCount > 0)
  63.193 -      if (optCount > 0 )
  63.194 -        tempString += ")) )";
  63.195 -      else
  63.196 -        tempString += ")) ";
  63.197 -    else
  63.198 -      tempString += ")";
  63.199 -
  63.200 -    if (tempString.length() > 0)
  63.201 -      boolOp = " NOT ";
  63.202 -    else
  63.203 -      boolOp = "";
  63.204 -
  63.205 -    for (i = 0; i < notCount; i++) {
  63.206 -      tempString += boolOp + getWord(notWords,i);
  63.207 -      boolOp = " NOT ";
  63.208 -      }
  63.209 -    return tempString;
  63.210 -  }
  63.211 -}
  63.212 -/
  63.213 -
  63.214 -DECLARE
  63.215 -   CURSOR check_exits(company_id_ VARCHAR2,emp_no_ VARCHAR2)IS
  63.216 -      SELECT 1             
  63.217 -      FROM company_person_tab
  63.218 -      WHERE company_id = company_id_
  63.219 -      AND emp_no = emp_no_;
  63.220 -   temp_ NUMBER;   
  63.221 -BEGIN
  63.222 -FOR rec_ IN (SELECT * FROM company_emp_tab) LOOP
  63.223 -   OPEN check_exits(rec_.company,rec_.employee_id);
  63.224 -   FETCH check_exits INTO temp_;
  63.225 -   IF (check_exits%NOTFOUND) THEN
  63.226 -      INSERT INTO company_person_tab(company_id,emp_no,master_employment,operator,rowversion)
  63.227 -      VALUES (rec_.company,rec_.employee_id,'0',User,rec_.rowversion);  
  63.228 -   END IF; 
  63.229 -   CLOSE check_exits;     
  63.230 -END LOOP;
  63.231 -END;
  63.232 -/
  63.233 -
  63.234 -UPDATE search_domain_attribute_tab
  63.235 -SET    model_datatype = CASE datatype
  63.236 -                           WHEN 'VARCHAR2' THEN 'TEXT'
  63.237 -                           WHEN 'CHAR' THEN 'TEXT'
  63.238 -                           WHEN 'NUMBER' THEN 'NUMBER'
  63.239 -                           WHEN 'DATE' THEN 'DATE'
  63.240 -                           WHEN 'CLOB' THEN 'LONG_TEXT'
  63.241 -                           WHEN 'BLOB' THEN 'BINARY'
  63.242 -                           ELSE 'TEXT'
  63.243 -                        END
  63.244 -WHERE  model_datatype IS NULL
  63.245 -/
  63.246 -
  63.247 -
  63.248 -create or replace trigger vmogss_base_tablerestrict_tr
  63.249 -  after insert or update on vmo_base_tablerestriction
  63.250 -  referencing old as oldrec new as newrec
  63.251 -  for each row
  63.252 -begin
  63.253 -  if updating or inserting then
  63.254 -    insert into vmo_base_gss_scope(gss_id, created, source_tbl, source_info) values('ALL_GSS_ID', sysdate,  'VMO_BASE_TABLERESTRICTION', :newrec.idrole);
  63.255 -  end if;
  63.256 -end vmogss_base_tablerestrict_tr;
  63.257 -/
  63.258 \ No newline at end of file
    64.1 --- a/PLSQL/Lexer/test/unit/src/org/netbeans/modules/plsql/lexer/test1.apy	Wed May 15 16:07:35 2013 +0200
    64.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    64.3 @@ -1,338 +0,0 @@
    64.4 -PROMPT Creating &VIEW view
    64.5 -CREATE OR REPLACE VIEW &VIEW AS
    64.6 -SELECT s.sid                               sid,
    64.7 -       s.audsid                            audsid,
    64.8 -       u.identity                          fnd_user,
    64.9 -       s.osuser                            os_user,
   64.10 -       s.username                          oracle_user,
   64.11 -       s.machine                           machine,
   64.12 -       s.program                           program,
   64.13 -       s.module                            package,
   64.14 -       s.action                            method,
   64.15 -       logon_time                          log_on_time,
   64.16 -       s.status                            status,
   64.17 -       decode(s.status, 'ACTIVE', SYSDATE, sysdate - last_call_et/(24*3600)) last_query,
   64.18 -       nvl(f.info, '!FNDBAS.SESSION.INFO') info,
   64.19 -       s.serial#                           serial_no,
   64.20 -       Fnd_Session_API.Get_Sql_Statement(s.sql_address, s.sql_hash_value, s.sql_id) sql_statement,
   64.21 -       Fnd_Session_API.Get_Sql_Statement(s.prev_sql_addr, s.prev_hash_value, s.prev_sql_id) previous_sql_statement
   64.22 -FROM   &TABLE1 s, &TABLE2 f, &TABLE3 u
   64.23 -       WHERE   rtrim(substr(s.client_info, 1, 30)) = u.identity
   64.24 -       AND     s.audsid  = f.session_id (+)
   64.25 -       AND     s.audsid != 0
   64.26 -WITH   read only;
   64.27 -
   64.28 -DECLARE
   64.29 -   CURSOR Insert_Module_Data IS
   64.30 -   SELECT *
   64.31 -   FROM MODULE_TAB;
   64.32 -
   64.33 -PROCEDURE Insert_data(module_ VARCHAR2,module_name_ VARCHAR2) IS
   64.34 -
   64.35 -   tmp_attribute_key_   VARCHAR2(120);
   64.36 -   newrec_              LANGUAGE_SYS_TAB%ROWTYPE;
   64.37 -   lu_                  VARCHAR2(120) :='Module';
   64.38 -   path_                VARCHAR2(500);
   64.39 -   base_module_         VARCHAR2(120) :='FNDBAS';
   64.40 -
   64.41 -BEGIN
   64.42 -   tmp_attribute_key_ := Replace (module_, '^','~');
   64.43 -   newrec_.main_type := 'LU';
   64.44 -   newrec_.type := 'Basic Data';
   64.45 -   newrec_.path := lu_||'_'||base_module_||'.'||module_;
   64.46 -   path_ := newrec_.path;
   64.47 -   newrec_.attribute := 'Text';
   64.48 -      DECLARE
   64.49 -      BEGIN
   64.50 -         INSERT
   64.51 -            INTO language_sys_tab (
   64.52 -            main_type,
   64.53 -            type,
   64.54 -            path,
   64.55 -            attribute,
   64.56 -            lang_code,
   64.57 -            module,
   64.58 -            text,
   64.59 -            installation_text,
   64.60 -            system_defined,
   64.61 -            term_usage_version_id,
   64.62 -            bulk,
   64.63 -            rowversion)
   64.64 -         VALUES (
   64.65 -            newrec_.main_type,
   64.66 -            newrec_.type,
   64.67 -            newrec_.path,
   64.68 -            newrec_.attribute,
   64.69 -            'PROG',
   64.70 -            base_module_,
   64.71 -            module_name_,
   64.72 -            module_name_,
   64.73 -            'FALSE',
   64.74 -            NULL,
   64.75 -            0,
   64.76 -            SYSDATE);
   64.77 -      EXCEPTION
   64.78 -         WHEN dup_val_on_index THEN
   64.79 -            UPDATE language_sys_tab
   64.80 -            SET main_type = newrec_.main_type,
   64.81 -                type = newrec_.type,
   64.82 -                path = newrec_.path,
   64.83 -                attribute = newrec_.attribute,
   64.84 -                lang_code = 'PROG',
   64.85 -                module = base_module_,
   64.86 -                text = module_name_,
   64.87 -                installation_text = module_name_,
   64.88 -                system_defined = 'FALSE',
   64.89 -                rowversion = SYSDATE
   64.90 -            WHERE main_type = newrec_.main_type
   64.91 -            AND   type = newrec_.type
   64.92 -            AND   path = newrec_.path
   64.93 -            AND   attribute = newrec_.attribute
   64.94 -            AND   lang_code = 'PROG';
   64.95 -
   64.96 -         WHEN OTHERS THEN
   64.97 -            NULL;
   64.98 -         END;
   64.99 -
  64.100 -
  64.101 -END Insert_data;
  64.102 -
  64.103 -
  64.104 -BEGIN
  64.105 -   IF NOT Installation_SYS.Is_Db_Patch_Registered('FNDBAS', '70745') THEN
  64.106 -      FOR rec_ IN Insert_Module_Data LOOP
  64.107 -         Insert_data(rec_.module,rec_.name);
  64.108 -      END LOOP;
  64.109 -   END IF;
  64.110 -   Installation_SYS.Register_Db_Patch('FNDBAS', '70745','Insert Basic Data Transations for Module Name');
  64.111 -   COMMIT;
  64.112 -END;
  64.113 -/
  64.114 -
  64.115 -EXEC Installation_SYS.Log_Detail_Time_Stamp('ORDER', '100512_90590_ORDER.cdb', 'Timestamp_2');
  64.116 -PROMPT Updating the value of column SHIP_ADDR_NO in CUSTOMER_ORDER_DELIVERY_TAB
  64.117 -BEGIN
  64.118 -    IF (NOT Database_SYS.Is_Db_Patch_Registered('ORDER', 90590)) THEN
  64.119 -       DECLARE
  64.120 -          column_       Database_SYS.ColRec;
  64.121 -          table_name_   VARCHAR2(30) := 'CUSTOMER_ORDER_DELIVERY_TAB';
  64.122 -
  64.123 -       BEGIN
  64.124 -
  64.125 -          UPDATE customer_order_delivery_tab cod
  64.126 -             SET cod.ship_addr_no = (CASE WHEN (cod.delnote_no IS NOT NULL) THEN
  64.127 -                                             (SELECT codn.ship_addr_no
  64.128 -                                                 FROM  customer_order_deliv_note_tab codn
  64.129 -                                              WHERE codn.delnote_no = cod.delnote_no)
  64.130 -                                          WHEN (cod.delnote_no IS NULL AND cod.shipment_id IS NOT NULL) THEN
  64.131 -                                             (SELECT ship.ship_addr_no
  64.132 -                                                 FROM shipment_tab ship
  64.133 -                                              WHERE ship.shipment_id = cod.shipment_id)
  64.134 -                                          ELSE
  64.135 -                                             (SELECT col.ship_addr_no
  64.136 -                                                 FROM customer_order_line_tab col
  64.137 -                                              WHERE col.order_no     = cod.order_no
  64.138 -                                              AND   col.line_no      = cod.line_no
  64.139 -                                              AND   col.rel_no       = cod.rel_no
  64.140 -                                              AND   col.line_item_no = cod.line_item_no)
  64.141 -                                    END)
  64.142 -             WHERE cod.ship_addr_no IS NULL;
  64.143 -       END;
  64.144 -       Database_SYS.Register_Db_Patch('ORDER', 90590, 'Adding column SHIP_ADDR_NO into CUSTOMER_ORDER_DELIVERY_TAB');
  64.145 -    END IF;
  64.146 -END;
  64.147 -/
  64.148 -COMMIT;
  64.149 -
  64.150 -exec Installation_SYS.Log_Detail_Time_Stamp('ORDER','1340.upg','Timestamp_14');
  64.151 -PROMPT Updating the value of D3, DELIVERY_DATE in INVOICE_TAB.
  64.152 -UPDATE INVOICE_TAB
  64.153 -   SET D3            =   CASE
  64.154 -                            WHEN CREATOR = 'CUSTOMER_ORDER_INV_HEAD_API' THEN
  64.155 -                               DELIVERY_DATE
  64.156 -                            ELSE
  64.157 -                               D3
  64.158 -                         END,
  64.159 -       DELIVERY_DATE =   CASE
  64.160 -                            WHEN CREATOR = 'CUSTOMER_ORDER_INV_HEAD_API' AND INVOICE_TYPE NOT IN('CUSTORDDEB','CUSTCOLDEB','SELFBILLDEB','SELFBILLCRE','CUSTORDCRE','CUSTCOLCRE','CUSTCOLCOR','CUSTORDCOR') THEN
  64.161 -                               NULL
  64.162 -                            ELSE
  64.163 -                               DELIVERY_DATE
  64.164 -                         END;
  64.165 -ROLLBACK;
  64.166 -
  64.167 -PROMPT Creating &VIEW._DEF view
  64.168 -
  64.169 -CREATE OR REPLACE VIEW &VIEW._DEF AS
  64.170 -SELECT doc_class                      doc_class,
  64.171 -       Language_Text_API.Decode(doc_name)  doc_name,
  64.172 -       doc_name                       db_doc_name,
  64.173 -       &OBJID                         objid,
  64.174 -       &OBJVERSION                    objversion
  64.175 -FROM   doc_class_tab
  64.176 -WHERE   DOC_CLASS > ' '
  64.177 -WITH   read only;
  64.178 -
  64.179 -COMMENT ON TABLE &VIEW._DEF
  64.180 -   IS 'LU=&LU^PROMPT=Document Class^MODULE=&MODULE^';
  64.181 -
  64.182 -DECLARE
  64.183 -   execution_date_     DATE := SYSDATE + 30/86400;
  64.184 -BEGIN
  64.185 -    NULL;
  64.186 -END;
  64.187 -
  64.188 -DECLARE
  64.189 -   CURSOR check_exits(company_id_ VARCHAR2,emp_no_ VARCHAR2)IS
  64.190 -      SELECT 1
  64.191 -      FROM company_person_tab
  64.192 -      WHERE company_id = company_id_
  64.193 -      AND emp_no = emp_no_;
  64.194 -   temp_ NUMBER;
  64.195 -BEGIN
  64.196 -FOR rec_ IN (SELECT * FROM company_emp_tab) LOOP
  64.197 -   OPEN check_exits(rec_.company,rec_.employee_id);
  64.198 -   FETCH check_exits INTO temp_;
  64.199 -   IF (check_exits%NOTFOUND) THEN
  64.200 -      INSERT INTO company_person_tab(company_id,emp_no,master_employment,operator,rowversion)
  64.201 -      VALUES (rec_.company,rec_.employee_id,'0',User,rec_.rowversion);
  64.202 -   END IF;
  64.203 -   CLOSE check_exits;
  64.204 -END LOOP;
  64.205 -END;
  64.206 -/
  64.207 -
  64.208 -PROMPT dropping temporary procedure
  64.209 -
  64.210 -DROP PROCEDURE Temp_Person_Document_Default;
  64.211 -
  64.212 -BEGIN
  64.213 -   Object_Connection_SYS.Disable_Logical_Unit('CompanyPerson');
  64.214 -   Object_Connection_SYS.Enable_Logical_Unit('CompanyPerson', 'DocReferenceObject^', 'COMPANY_PERSON_ALL', 'COMPANY_PERSON_API');
  64.215 -END;
  64.216 -/
  64.217 -
  64.218 -CREATE  UNIQUE INDEX Report_Grouping_Detail_Ux ON Report_Grouping_Detail_Tab
  64.219 -   ( company,
  64.220 -     internal_key )
  64.221 -   TABLESPACE &FINREP_INDEX
  64.222 -   STORAGE
  64.223 -      ( INITIAL &FINREP_LARGE_IX
  64.224 -);
  64.225 -
  64.226 -CREATE VIEW &MODULE_VIEW1
  64.227 -( ORDER_NO, RELEASE_NO, SEQUENCE_NO, LINE_ITEM_NO, PART_NO, CONTRACT, CONFIGURATION_ID ,
  64.228 -LOCATION_NO, LOT_BATCH_NO, SERIAL_NO, WAIV_DEV_REJ_NO, ENG_CHG_LEVEL, ACTIVITY_SEQ,
  64.229 -QTY_ASSIGNED, LAST_ACTIVITY_DATE)
  64.230 -AS
  64.231 -SELECT
  64.232 -  ' ', ' ', ' ', 0,' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 0, 0, SYSDATE
  64.233 - FROM DUAL WHERE 1 = 2
  64.234 -/
  64.235 -
  64.236 -CREATE OR REPLACE VIEW &VIEW3 AS
  64.237 -SELECT contract                       contract,
  64.238 -       work_center_no                 work_center_no,
  64.239 -       work_day                       work_day,
  64.240 -       Work_Center_Int_API.Get_Work_Center_Prod_Line(contract,work_center_no) production_line,
  64.241 -       Work_Center_Int_API.Get_Department_No(contract,work_center_no) department,
  64.242 -       Shop_Order_Operation_Int_API.Planned_Load(work_day,contract,work_center_no) planned,
  64.243 -       Shop_Order_Operation_Int_API.Released_Load(work_day,contract,work_center_no) released,
  64.244 -       nvl(Crp_Mach_Op_Load_Util_API.Get_Work_Center_Load(contract,work_center_no, work_day, work_day),0) requisitioned,
  64.245 -       nvl(Crp_Mach_Op_Load_Util_API.Get_W_C_Dop_Load(contract,work_center_no, work_day, work_day),0) unreleased_dop,
  64.246 -       nvl(CRP_MACH_OP_LOAD_UTIL_API.Get_Crp_Capac_Workday(contract,work_center_no, work_day),0) wc_cap,
  64.247 -       nvl((nvl(Crp_Mach_Op_Load_Util_API.Get_Work_Center_Load(contract,work_center_no, work_day, work_day),0)
  64.248 -       + nvl(Crp_Mach_Op_Load_Util_API.Get_W_C_Dop_Load(contract,work_center_no, work_day, work_day),0)
  64.249 -       + Shop_Order_Operation_Int_API.Planned_Load(work_day,contract,work_center_no)
  64.250 -       + Shop_Order_Operation_Int_API.Released_Load(work_day,contract,work_center_no))
  64.251 -       / DECODE(Work_Center_Capacity_API.Get_Range_Avail_Capacity(contract,work_center_no, work_day, work_day), 0, .00001,
  64.252 -         CRP_MACH_OP_LOAD_UTIL_API.Get_Crp_Capac_Workday(contract,work_center_no, work_day)) * 100,0) load_pct,
  64.253 -       objid                          objid,
  64.254 -       objversion                     objversion
  64.255 -FROM   CRP_MACH_OP_LOAD2;
  64.256 -
  64.257 -CREATE TRIGGER VMOL_BASE_FIELDDEPVALUES_TIB BEFORE INSERT ON
  64.258 -   VMOL_BASE_FIELDDEPVALUES REFERENCING OLD AS OLDREC NEW AS NEWREC FOR EACH ROW
  64.259 -   BEGIN
  64.260 -      SELECT VMOL_ID_SEQ.NEXTVAL INTO :NEWREC.ID_ FROM DUAL;
  64.261 -   END;
  64.262 -/
  64.263 -
  64.264 -BEGIN
  64.265 -EXECUTE IMMEDIATE('
  64.266 -    create sequence vmo_gss_usermap_seq
  64.267 -    minvalue 1
  64.268 -    nomaxvalue
  64.269 -    start with 1
  64.270 -    increment by 1
  64.271 -    nocache
  64.272 -    order
  64.273 -');
  64.274 -EXCEPTION
  64.275 -    WHEN OTHERS THEN
  64.276 -        --OK if ORA -00955: name is already used by an existing object
  64.277 -        IF INSTR(SQLERRM,'-00955') != 0 THEN NULL;
  64.278 -        ELSE raise_application_error ( -20000, SQLERRM );
  64.279 -        END IF;
  64.280 -END;
  64.281 -/
  64.282 -
  64.283 -create or replace trigger VMO_BASE_GSS_SYNCED_RECORDS_TR before
  64.284 -insert or update
  64.285 -on VMO_BASE_GSS_SYNCED_RECORDS referencing old as oldrec new as newrec for each row
  64.286 -
  64.287 ---This trigger is only used to make sure that an old version of GSS still can be tested
  64.288 ---against this database after this database has been upgraded to version 3.15.1.15
  64.289 ---Reason is that GSS_USER is part of the primary key and is not set by previous versions.
  64.290 -
  64.291 -declare
  64.292 -
  64.293 -  FUNCTION GET_GSS_USER (
  64.294 -    GSS_ID_ in VARCHAR2,
  64.295 -    VMO_TABLE_ in VARCHAR2,
  64.296 -    GSS_TABLE_ in VARCHAR2,
  64.297 -    VMO_USER_ in VARCHAR2
  64.298 -    ) RETURN VARCHAR2 IS
  64.299 -
  64.300 -    GSS_USER_ VARCHAR2(32);
  64.301 -
  64.302 -  BEGIN
  64.303 -      SELECT U.GSS_USER INTO GSS_USER_
  64.304 -      FROM   VMO_BASE_GSS_USERMAP U
  64.305 -      WHERE  U.GSS_ID    = GSS_ID_
  64.306 -        AND  U.VMO_TABLE = VMO_TABLE_
  64.307 -        AND  U.GSS_TABLE = GSS_TABLE_
  64.308 -        AND  U.VMO_USER  = VMO_USER_
  64.309 -        AND  U.ACTIVE = 1;
  64.310 -
  64.311 -    RETURN  GSS_USER_;
  64.312 -
  64.313 -    EXCEPTION WHEN OTHERS THEN
  64.314 -        RETURN NULL; --Should not be happen in working configuration.
  64.315 -
  64.316 -  END GET_GSS_USER;
  64.317 -
  64.318 -begin
  64.319 -
  64.320 -  IF :newREC.GSS_USER IS NULL THEN
  64.321 -    :newREC.GSS_USER := GET_GSS_USER(:newREC.GSS_ID, :newREC.VMO_TABLE, :newREC.GSS_TABLE, :newREC.IDUSER);
  64.322 -  END IF;
  64.323 -
  64.324 -end;
  64.325 -/
  64.326 -
  64.327 -
  64.328 -UPDATE search_domain_attribute_tab
  64.329 -SET    model_datatype = CASE datatype
  64.330 -                           WHEN 'VARCHAR2' THEN 'TEXT'
  64.331 -                           WHEN 'CHAR' THEN 'TEXT'
  64.332 -                           WHEN 'NUMBER' THEN 'NUMBER'
  64.333 -                           WHEN 'DATE' THEN 'DATE'
  64.334 -                           WHEN 'CLOB' THEN 'LONG_TEXT'
  64.335 -                           WHEN 'BLOB' THEN 'BINARY'
  64.336 -                           ELSE 'TEXT'
  64.337 -                        END
  64.338 -WHERE  model_datatype IS NULL
  64.339 -/
  64.340 -
  64.341 -
    65.1 --- a/PLSQL/Lexer/test/unit/src/org/netbeans/modules/plsql/lexer/test2.apy	Wed May 15 16:07:35 2013 +0200
    65.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    65.3 @@ -1,916 +0,0 @@
    65.4 -
    65.5 -PROCEDURE Evaluate_Level___ (
    65.6 -   evaluation_rec_        IN OUT evaluation_record,
    65.7 -   eval_log_rec_          IN OUT config_evaluation_api.evaluation_log_record,
    65.8 -   complete_eval_log_rec_ IN OUT config_evaluation_api.complete_evaluation_log_record,
    65.9 -   parent_part_           IN VARCHAR2 )
   65.10 -IS
   65.11 -   operation_rec_              Routing_Int_API.operation_record;
   65.12 -   oper_work_guide_rec_        Routing_Int_API.oper_work_guide_record;
   65.13 -   oper_tool_rec_              Routing_Int_API.oper_tool_record;
   65.14 -   component_rec_              Manuf_Structure_Int_API.component_record;
   65.15 -   comp_work_guide_rec_        Manuf_Structure_Int_API.comp_work_guide_record;
   65.16 -   config_spec_rec_            Config_Evaluation_API.eval_config_spec_record;
   65.17 -   parent_supply_rec_          interim_order_tab%ROWTYPE;
   65.18 -   --
   65.19 -   oper_valid_                 BOOLEAN;
   65.20 -   supply_interim_order_no_    interim_order_tab.interim_order_no%TYPE;
   65.21 -   configurable_               VARCHAR2(20);
   65.22 -   dop_part_                   VARCHAR2(20);
   65.23 -   part_type_code_             VARCHAR2(20);
   65.24 -   comp_bom_type_db_           VARCHAR2(20);
   65.25 -   comp_bom_type_              VARCHAR2(200);
   65.26 -   comp_eng_chg_level_         manuf_structure_tab.eng_chg_level%TYPE;
   65.27 -   structure_alternative_no_   manuf_struct_alternate_tab.alternative_no%TYPE;
   65.28 -   comp_struct_alternative_no_ manuf_struct_alternate_tab.alternative_no%TYPE;
   65.29 -   comp_routing_revision_      routing_head_tab.routing_revision%TYPE;
   65.30 -   routing_alternative_no_     routing_alternate_tab.alternative_no%TYPE;
   65.31 -   comp_rout_alternative_no_   routing_alternate_tab.alternative_no%TYPE;
   65.32 -
   65.33 -
   65.34 -   e_row_                      NUMBER;
   65.35 -   comp_alt_state_             manuf_struct_alternate_tab.rowstate%TYPE;
   65.36 -   comp_rout_alt_state_        routing_alternate_tab.rowstate%TYPE;
   65.37 -   get_comp_flag_              BOOLEAN;
   65.38 -   qty_avail_                  NUMBER;
   65.39 -   primary_comp_qty_           NUMBER;
   65.40 -   phatom_part_exist_          BOOLEAN;
   65.41 -   parent_interim_order_no_    VARCHAR2(12);
   65.42 -   Parent_part_mrp_Code_       VARCHAR2(2);
   65.43 -
   65.44 -
   65.45 -   multi_site_part_exist_      BOOLEAN := FALSE;
   65.46 -   stmt_                       VARCHAR2(2000);
   65.47 -   check_source_               VARCHAR2(5) := 'FALSE';
   65.48 -
   65.49 -   interim_required_date_      Date;--interim_demand_head_tab.required_date%TYPE;
   65.50 -   interim_start_date_         interim_order_tab.start_date%TYPE;
   65.51 -   parent_supply_date_         interim_order_tab.supply_date%TYPE;
   65.52 -   parent_start_date_          interim_order_tab.start_date%TYPE;
   65.53 -   parent_order_no_            interim_order_tab.interim_order_no%TYPE;
   65.54 -   line_item_no_               interim_order_component_tab.line_item_no%TYPE;
   65.55 -   calendar_id_                work_time_calendar_tab.calendar_id%TYPE;
   65.56 -   leadtime_offset_            NUMBER;
   65.57 -   operation_no_               NUMBER;
   65.58 -   found_                      BOOLEAN;
   65.59 -
   65.60 -   CURSOR get_line_item_no(interim_header_ IN VARCHAR2,interim_order_no_ IN VARCHAR2) IS
   65.61 -      SELECT leadtime_offset,line_item_no, supply_interim_order_no
   65.62 -      FROM   interim_order_component_tab
   65.63 -      WHERE  interim_header_id = interim_header_
   65.64 -      AND    interim_order_no = interim_order_no_;
   65.65 -   CURSOR get_parent_supply IS
   65.66 -      SELECT *
   65.67 -      FROM   interim_order_tab
   65.68 -      WHERE  interim_header_id = evaluation_rec_.interim_header_id
   65.69 -      AND    interim_structure_level = evaluation_rec_.current_level;
   65.70 -BEGIN
   65.71 -   General_SYS.Init_Method(lu_name_, '&PKG', 'Evaluate_Level___',TRUE);
   65.72 -
   65.73 --- FOR-LOOP #1: Loop thru interim order records inserted by calling method.
   65.74 -   FOR parent_supply_ IN get_parent_supply LOOP
   65.75 -      -- Set parent_supply_rec_ as Parent_supply_
   65.76 -      parent_supply_rec_ := parent_supply_;
   65.77 -      --
   65.78 -      configurable_ := Part_Catalog_API.Get_Configurable_Db(parent_supply_.part_no);
   65.79 -      --
   65.80 -      dop_part_ := Inventory_Part_Planning_API.Get_Order_Requisition_Db(
   65.81 -                      parent_supply_.contract,
   65.82 -                      parent_supply_.part_no);
   65.83 -      --
   65.84 -      part_type_code_ := Inventory_Part_API.Get_type_code_Db(parent_supply_.contract,
   65.85 -                                                             parent_supply_.part_no);
   65.86 -
   65.87 -    dbms_output.put_line('-----> parent supply part no =  ' ||parent_supply_.part_no );
   65.88 -    dbms_output.put_line('---> before ctp planned = .... '|| evaluation_rec_.ctp_planned);
   65.89 -      --
   65.90 -      IF (part_type_code_ IN ( '1','2')) THEN
   65.91 -         comp_bom_type_db_ := 'M';
   65.92 -      ELSIF (part_type_code_ IN ('3', '4')) THEN
   65.93 -         comp_bom_type_db_ := 'P';
   65.94 -      END IF;
   65.95 -      comp_bom_type_ := Shop_Ord_Code_API.Decode(comp_bom_type_db_);
   65.96 -      --
   65.97 --- begin CTP
   65.98 -      dbms_output.put_line('---> before ctp part struct level = .... '|| parent_supply_.interim_structure_level);
   65.99 -
  65.100 --- If ctp planned, check multi-site and if true, create interim demand.
  65.101 -      multi_site_part_exist_ := FALSE;
  65.102 -      IF evaluation_rec_.ctp_planned = 1 AND
  65.103 -         --parent_supply_.interim_structure_level > 0 AND
  65.104 -         part_type_code_ IN ('3','4') THEN
  65.105 -
  65.106 -       -- check for multi-site supplies...
  65.107 -         dbms_output.put_line('---> before check_source installed = .... ');
  65.108 -         check_source_ := 'FALSE';
  65.109 -         IF Dictionary_SYS.Logical_Unit_Is_Installed('SupplySourcePartManager') THEN
  65.110 -            stmt_ := 'BEGIN :check_source := Supply_Source_Part_Manager_API.Is_Part_Internally_Sourced(:contract, :part_no); END;';
  65.111 -            -- ifs_assert_safe pemase 20051221
  65.112 -            EXECUTE IMMEDIATE stmt_
  65.113 -            USING OUT check_source_,
  65.114 -                   IN parent_supply_.contract,
  65.115 -                   IN parent_supply_.part_no;
  65.116 -         END IF;
  65.117 -         dbms_output.put_line('---> check source  = '|| check_source_);
  65.118 -
  65.119 -         IF check_source_ = 'TRUE'  THEN
  65.120 -            multi_site_part_exist_ := TRUE;
  65.121 -
  65.122 -            Interim_Ctp_Manager_API.Create_Child_Interim_Demand(evaluation_rec_.interim_header_id,
  65.123 -                                                               parent_supply_.interim_order_no,
  65.124 -                                                               parent_supply_.part_no,
  65.125 -                                                               parent_supply_.configuration_id,
  65.126 -                                                               parent_supply_.supply_date,
  65.127 -                                                               parent_supply_.supply_qty,
  65.128 -                                                               evaluation_rec_.interim_demand_usage_type_db,
  65.129 -                                                               evaluation_rec_.identity1,
  65.130 -                                                               evaluation_rec_.identity2,
  65.131 -                                                               evaluation_rec_.identity3,
  65.132 -                                                               evaluation_rec_.identity4,
  65.133 -                                                               NULL, -- lot_batch_no_
  65.134 -                                                               NULL, -- serial_begin
  65.135 -                                                               NULL, -- serial_end
  65.136 -                                                               'COMPANY OWNED', -- part_ownership
  65.137 -                                                               NULL, -- owning_customer_no_
  65.138 -                                                               parent_supply_.interim_structure_level,
  65.139 -                                                               evaluation_rec_.ctp_level
  65.140 -                                                               );
  65.141 -
  65.142 -         END IF; -- check_source = TRUE
  65.143 -
  65.144 -      END IF; -- IF evaluation_rec_.ctp_planned = 1  AND parent_supply_.interim_structure_level > 0 THEN
  65.145 -
  65.146 --- No further evaluation if multisite part.
  65.147 -    IF NOT multi_site_part_exist_ THEN
  65.148 -       dbms_output.put_line('---> not multi site  part  = ');
  65.149 -
  65.150 --- IF-ELSIF #1: If configured/manufactured or DOP requistion/manufactured,
  65.151 --- get buildable manuf structure revision.
  65.152 -      IF ((configurable_ = 'CONFIGURED') AND (part_type_code_ = '1')) OR
  65.153 -         ((dop_part_ = 'D') AND (part_type_code_ = '1')) THEN
  65.154 -         IF (evaluation_rec_.alternate_status = 'Buildable') THEN
  65.155 -            comp_eng_chg_level_ := NULL;
  65.156 -            comp_struct_alternative_no_ := NULL;
  65.157 -
  65.158 -            IF Manuf_Part_Attribute_API.Get_Structure_Effectivity(parent_supply_.contract, parent_supply_.part_no)
  65.159 -               = Effectivity_Control_API.Decode('SERIAL') THEN
  65.160 -
  65.161 -               Manuf_Structure_Util_API.Get_Buildable_Date_Alt (comp_eng_chg_level_,
  65.162 -                                                               comp_struct_alternative_no_,
  65.163 -                                                               parent_supply_.contract,
  65.164 -                                                               parent_supply_.part_no,
  65.165 -                                                               comp_bom_type_,
  65.166 -                                                               parent_supply_.start_date );
  65.167 -
  65.168 -
  65.169 -            ELSE
  65.170 -               Manuf_Structure_Int_API.Get_Buildable_Alternative (comp_eng_chg_level_,
  65.171 -                                                               comp_struct_alternative_no_,
  65.172 -                                                               parent_supply_.contract,
  65.173 -                                                               parent_supply_.part_no,
  65.174 -                                                               comp_bom_type_,
  65.175 -                                                               parent_supply_.start_date,
  65.176 -                                                               evaluation_rec_.serial_begin,
  65.177 -                                                               evaluation_rec_.serial_end );
  65.178 -            END IF;
  65.179 -
  65.180 -         END IF;
  65.181 -         evaluation_rec_.configuration_id := parent_supply_.configuration_id;
  65.182 -         config_spec_rec_ := NULL;
  65.183 -         config_spec_rec_.spec_row_count := 0;
  65.184 -
  65.185 --- Retrieve configured part routing if manufactured part.
  65.186 -         IF (comp_bom_type_db_ = 'M') THEN
  65.187 -            Config_Evaluation_API.Determine_Routing (routing_alternative_no_,
  65.188 -                                                     parent_supply_.routing_revision,
  65.189 -                                                     operation_rec_,
  65.190 -                                                     oper_work_guide_rec_,
  65.191 -                                                     oper_tool_rec_,
  65.192 -                                                     config_spec_rec_,
  65.193 -                                                     complete_eval_log_rec_,
  65.194 -                                                     eval_log_rec_,
  65.195 -                                                     parent_supply_.contract,
  65.196 -                                                     parent_supply_.part_no,
  65.197 -                                                     parent_supply_.start_date,
  65.198 -                                                     parent_supply_.order_code,
  65.199 -                                                     evaluation_rec_.alternate_status,
  65.200 -                                                     evaluation_rec_.configuration_id );
  65.201 -            IF (NVL(operation_rec_.operation_row_count,0) > 0) THEN
  65.202 -               IF (routing_alternative_no_ IS NOT NULL) THEN
  65.203 -
  65.204 -                  FOR ops IN 1..operation_rec_.operation_row_count LOOP
  65.205 -                     dbms_output.Put_Line('>>>>>> ' ||operation_rec_.operation_no_tab(ops) || operation_rec_.mach_run_factor_tab(ops));
  65.206 -                  END LOOP;
  65.207 -                  -- Note; Set Routing_alternative on InterimOrder After DetermineRouting
  65.208 -                  Interim_Order_API.Set_Rout_Rev_Alternative__(evaluation_rec_.interim_header_id,
  65.209 -                                                               parent_supply_.interim_order_no,
  65.210 -                                                               parent_supply_.routing_revision,
  65.211 -                                                               routing_alternative_no_ );
  65.212 -                  --
  65.213 -                  IF (NOT Routing_Int_API.Is_Routing_Buildable(parent_supply_.contract,
  65.214 -                                                               parent_supply_.part_no,
  65.215 -                                                               parent_supply_.routing_revision,
  65.216 -                                                               comp_bom_type_,
  65.217 -                                                               routing_alternative_no_)) THEN
  65.218 -                     Set_Rout_Rev_Alt_Warning___ (complete_eval_log_rec_,
  65.219 -                                                  parent_supply_.contract,
  65.220 -                                                  parent_supply_.part_no,
  65.221 -                                                  parent_supply_.routing_revision,
  65.222 -                                                  routing_alternative_no_,
  65.223 -                                                  comp_bom_type_db_);
  65.224 -                  END IF;
  65.225 -                  --
  65.226 -               END IF;
  65.227 -            END IF;
  65.228 -            -- Note; Create Operations that is evaluated
  65.229 -            Create_Interim_Routing___ (operation_rec_,
  65.230 -                                       oper_work_guide_rec_,
  65.231 -                                       oper_tool_rec_,
  65.232 -                                       evaluation_rec_.interim_header_id,
  65.233 -                                       parent_supply_.interim_order_no);
  65.234 -
  65.235 -         END IF;   -- of IF (comp_bom_type_db_ = 'M') THEN
  65.236 -         -- Correct the top order start date before determine the structure
  65.237 -         IF parent_supply_.interim_order_no ='1'  THEN
  65.238 -            Interim_Order_API.Set_Interim_Order_Dates__ (evaluation_rec_.interim_header_id,
  65.239 -                                                         parent_supply_.interim_order_no,
  65.240 -                                                         parent_supply_.supply_date);
  65.241 -            parent_start_date_ := interim_order_api.get_start_date( evaluation_rec_.interim_header_id, parent_supply_.interim_order_no);
  65.242 -         ELSE
  65.243 -            parent_start_date_ := parent_supply_.start_date;
  65.244 -         END IF;
  65.245 -
  65.246 --- Retrieve the components for configured part.
  65.247 -         Config_Evaluation_API.Determine_Structure (structure_alternative_no_,
  65.248 -                                                    parent_supply_.eng_chg_level,
  65.249 -                                                    component_rec_,
  65.250 -                                                    comp_work_guide_rec_,
  65.251 -                                                    config_spec_rec_,
  65.252 -                                                    complete_eval_log_rec_,
  65.253 -                                                    eval_log_rec_,
  65.254 -                                                    evaluation_rec_.contract,
  65.255 -                                                    parent_supply_.part_no,
  65.256 -                                                    parent_start_date_,
  65.257 -                                                    parent_supply_.supply_qty,
  65.258 -                                                    parent_supply_.order_code,
  65.259 -                                                    evaluation_rec_.alternate_status,
  65.260 -                                                    evaluation_rec_.configuration_id );
  65.261 -         --
  65.262 -         -- Note; Set Structure_alternative on InterimOrder After DetermineStructure
  65.263 -         IF (structure_alternative_no_ IS NOT NULL) THEN
  65.264 -            Interim_Order_API.Set_Struct_Alternative_No__(evaluation_rec_.interim_header_id,
  65.265 -                                                          parent_supply_.interim_order_no,
  65.266 -                                                          structure_alternative_no_ );
  65.267 -         END IF;
  65.268 -
  65.269 --- IF-ELSIF #1: Else if not configured part, get routing and manuf structure.
  65.270 -      ELSIF (Part_Catalog_API.Get_Configurable_Db(evaluation_rec_.part_no) = 'NOT CONFIGURED') THEN
  65.271 -         -- Note; If interim demand head part is not configured then do normal explosion
  65.272 -         -- Note; otherwise only explode Configured and manufactured Dop parts.
  65.273 -         evaluation_rec_.configuration_id := NULL;
  65.274 -         config_spec_rec_ := NULL;
  65.275 -         config_spec_rec_.spec_row_count := 0;
  65.276 -
  65.277 --- Get routing revision and alternate for non-configured manufactured part.
  65.278 -         comp_routing_revision_ := NULL;
  65.279 -         comp_rout_alternative_no_ := NULL;
  65.280 -         IF (comp_bom_type_db_ = 'M') THEN
  65.281 -            IF (evaluation_rec_.alternate_status = 'Buildable') THEN
  65.282 -               Routing_Int_API.Get_Buildable_Alternative( comp_routing_revision_,
  65.283 -                                                          comp_rout_alternative_no_,
  65.284 -                                                          parent_supply_.contract,
  65.285 -                                                          parent_supply_.part_no,
  65.286 -                                                          comp_bom_type_,
  65.287 -                                                          parent_supply_.start_date,
  65.288 -                                                          evaluation_rec_.serial_begin,
  65.289 -                                                          evaluation_rec_.serial_end );
  65.290 -
  65.291 -               IF comp_routing_revision_ IS NULL THEN
  65.292 -                   Error_Sys.Record_General(lu_name_, 'NOBUILDALTFOUND: No Buildable routing revision/alternative exists for part :P1 site :P2 on the date :P3.'
  65.293 -                                           ,parent_supply_.part_no,parent_supply_.contract,parent_supply_.start_date);
  65.294 -               END IF ;
  65.295 -            ELSE
  65.296 -
  65.297 -               Routing_Int_API.Get_Any_Revision_Alternative( comp_routing_revision_,
  65.298 -                                                             comp_rout_alternative_no_,
  65.299 -                                                             comp_rout_alt_state_,
  65.300 -                                                             parent_supply_.contract,
  65.301 -                                                             parent_supply_.part_no,
  65.302 -                                                             evaluation_rec_.mfg_order_code,
  65.303 -                                                             parent_supply_.start_date,
  65.304 -                                                             evaluation_rec_.serial_begin,
  65.305 -                                                             evaluation_rec_.serial_end );
  65.306 -
  65.307 -              IF comp_routing_revision_ IS NULL THEN
  65.308 -                 Error_Sys.Record_General(lu_name_, 'NOREVALTFOUND: No Tentative/Plannable/Buildable structure revision/alternative exists for part :P1 site :P2 on the date :P3.'
  65.309 -                                         ,parent_supply_.part_no,parent_supply_.contract,parent_supply_.start_date);
  65.310 -              END IF ;
  65.311 -            END IF;
  65.312 -
  65.313 -            Manuf_Structure_Int_API.Get_Buildable_Alternative(comp_eng_chg_level_,
  65.314 -                                                              comp_struct_alternative_no_,
  65.315 -                                                              parent_supply_.contract,
  65.316 -                                                              parent_supply_.part_no,
  65.317 -                                                              comp_bom_type_,
  65.318 -                                                              parent_supply_.start_date,
  65.319 -                                                              evaluation_rec_.serial_begin,
  65.320 -                                                              evaluation_rec_.serial_end );
  65.321 -            IF comp_struct_alternative_no_ IS NULL THEN
  65.322 -               Error_Sys.Record_General(lu_name_, 'NOBUILDSTRUCTFOUND: No Buildable Structure/Alternate exists for part :P1 site :P2 on the date :P3 .',
  65.323 -                                        parent_supply_.part_no, parent_supply_.contract, parent_supply_.start_date);
  65.324 -            END IF;
  65.325 -         -- Get routing revision and alternate for non-configured purchased part.
  65.326 -         ELSIF (comp_bom_type_db_ = 'P') THEN
  65.327 -            comp_routing_revision_ := Routing_Int_API.Get_Revision_By_Date (parent_supply_.contract,
  65.328 -                                                                            parent_supply_.part_no,
  65.329 -                                                                            comp_bom_type_,
  65.330 -                                                                            parent_supply_.start_date );
  65.331 -         END IF;   -- of IF (comp_bom_type_db_ = 'M') THEN
  65.332 -
  65.333 --- If manufactured, retrieve routing operations for non-configured part.
  65.334 -         IF (comp_bom_type_db_ = 'M') THEN
  65.335 -            Routing_Int_API.Determine_Mfgstd_Routing (operation_rec_,
  65.336 -                                                      oper_work_guide_rec_,
  65.337 -                                                      oper_tool_rec_,
  65.338 -                                                      parent_supply_.contract,
  65.339 -                                                      parent_supply_.part_no,
  65.340 -                                                      NVL(comp_routing_revision_,parent_supply_.routing_revision),
  65.341 -                                                      Shop_Ord_Code_API.Decode(parent_supply_.order_code),
  65.342 -                                                      NVL(comp_rout_alternative_no_,parent_supply_.routing_alternative_no));
  65.343 -            --
  65.344 -            IF (NVL(operation_rec_.operation_row_count,0) > 0) THEN
  65.345 -               IF (comp_rout_alternative_no_ IS NOT NULL) THEN
  65.346 -                  -- Note; Set Routing_alternative on InterimOrder After DetermineRouting
  65.347 -                  Interim_Order_API.Set_Rout_Rev_Alternative__(evaluation_rec_.interim_header_id,
  65.348 -                                                               parent_supply_.interim_order_no,
  65.349 -                                                               comp_routing_revision_,
  65.350 -                                                               comp_rout_alternative_no_ );
  65.351 -               END IF;
  65.352 -            END IF;
  65.353 -
  65.354 -            -- Note; Create Operations that is evaluated
  65.355 -            Create_Interim_Routing___ (operation_rec_,
  65.356 -                                       oper_work_guide_rec_,
  65.357 -                                       oper_tool_rec_,
  65.358 -                                       evaluation_rec_.interim_header_id,
  65.359 -                                       parent_supply_.interim_order_no);
  65.360 -         END IF;
  65.361 -
  65.362 --- Retrieve components for non-configured part.
  65.363 -         Manuf_Structure_Int_API.Determine_Mfgstd_Structure (component_rec_,
  65.364 -                                                             comp_work_guide_rec_,
  65.365 -                                                             parent_supply_.contract,
  65.366 -                                                             parent_supply_.part_no,
  65.367 -                                                             parent_supply_.eng_chg_level,
  65.368 -                                                             Shop_Ord_Code_API.Decode(parent_supply_.order_code),
  65.369 -                                                             parent_supply_.structure_alternative_no,
  65.370 -                                                             parent_supply_.start_date,
  65.371 -                                                             parent_supply_.supply_qty);
  65.372 -      END IF;  -- of IF ((configurable_ = 'CONFIGURED') AND (part_type_code_ = '1')) OR...
  65.373 --- End of IF-ELSIF #1
  65.374 -
  65.375 -      calendar_id_ := Site_Api.Get_Manuf_Calendar_Id(evaluation_rec_.contract);
  65.376 -
  65.377 --- If top-level order, set dates from there, else calculate from top-level order.
  65.378 -      IF parent_supply_.interim_order_no ='1' THEN
  65.379 -         Interim_Order_API.Set_Interim_Order_Dates__ ( evaluation_rec_.interim_header_id,
  65.380 -           parent_supply_.interim_order_no, parent_supply_.supply_date);
  65.381 -         parent_start_date_  := Interim_Order_API.Get_Start_Date( evaluation_rec_.interim_header_id, parent_supply_.interim_order_no);
  65.382 -      ELSE
  65.383 -         parent_order_no_    := interim_order_api.get_parent_interim_order_no( evaluation_rec_.interim_header_id, parent_supply_.interim_order_no);
  65.384 -         parent_supply_date_ := interim_order_api.get_supply_date( evaluation_rec_.interim_header_id, parent_order_no_);
  65.385 -         parent_start_date_  := interim_order_api.get_start_date( evaluation_rec_.interim_header_id, parent_order_no_);
  65.386 -
  65.387 -         FOR component_line_item_rec_ IN get_line_item_no(evaluation_rec_.interim_header_id, parent_order_no_) LOOP
  65.388 -            IF  (component_line_item_rec_.supply_interim_order_no = parent_supply_.interim_order_no) THEN
  65.389 -               line_item_no_ :=  component_line_item_rec_.line_item_no;
  65.390 -               leadtime_offset_ := component_line_item_rec_.leadtime_offset;
  65.391 -            END IF;
  65.392 -         END LOOP;
  65.393 -         IF (leadtime_offset_ > 0) THEN
  65.394 -            interim_required_date_ := work_time_calendar_api.get_next_work_day(calendar_id_, calculate_start_date__(evaluation_rec_.contract,parent_supply_date_ , leadtime_offset_));
  65.395 -            interim_required_date_ := Greatest(interim_required_date_, parent_start_date_);
  65.396 -         ELSE
  65.397 -            interim_required_date_ := parent_start_date_;
  65.398 -         END IF;
  65.399 -         Interim_Order_API.Set_Interim_Order_Dates__(evaluation_rec_.interim_header_id,
  65.400 -           parent_supply_.interim_order_no,
  65.401 -           Work_time_Calendar_API.Get_Previous_Work_Day(calendar_id_,interim_required_date_));
  65.402 -      END IF;
  65.403 -
  65.404 --- FOR-LOOP #2: Loop thru retrieved component records.
  65.405 -      FOR i IN 1..NVL(component_rec_.comp_row_count,0) LOOP
  65.406 -         evaluation_rec_.interim_supply_date := parent_supply_.supply_date;
  65.407 -         part_type_code_ := Inventory_Part_API.Get_type_code_Db(component_rec_.contract_tab(i),
  65.408 -                                                                component_rec_.component_part_tab(i));
  65.409 -
  65.410 -         calendar_id_ := Site_Api.Get_Manuf_Calendar_Id(component_rec_.contract_tab(i));
  65.411 -
  65.412 -         configurable_ := Part_Catalog_API.Get_Configurable_Db(component_rec_.component_part_tab(i));
  65.413 -
  65.414 -         dop_part_ := Inventory_Part_Planning_API.Get_Order_Requisition_Db(
  65.415 -                         component_rec_.contract_tab(i),
  65.416 -                         component_rec_.component_part_tab(i));
  65.417 -
  65.418 -         comp_routing_revision_ := NULL;
  65.419 -         comp_rout_alternative_no_ := NULL;
  65.420 -
  65.421 --- If by-product component line, then create warning and ignore.
  65.422 -         IF (component_rec_.qty_per_assembly_tab(i) < 0) THEN
  65.423 -             e_row_ := NVL(complete_eval_log_rec_.warning.warning_row_count,0) + 1;
  65.424 -             complete_eval_log_rec_.warning.warning_row_count  := e_row_;
  65.425 -
  65.426 -             complete_eval_log_rec_.warning.explosion_row_type_db(e_row_) := 'PartRevision';
  65.427 -             complete_eval_log_rec_.warning.contract(e_row_)                 := component_rec_.contract_tab(i);
  65.428 -             complete_eval_log_rec_.warning.part_no(e_row_)                  := parent_part_;
  65.429 -             complete_eval_log_rec_.warning.eng_chg_level(e_row_)            := NULL;
  65.430 -             complete_eval_log_rec_.warning.routing_revision(e_row_)         := NULL;
  65.431 -             complete_eval_log_rec_.warning.bom_type_db(e_row_)              := NULL;
  65.432 -             complete_eval_log_rec_.warning.routing_alternative_no(e_row_)   := NULL;
  65.433 -             complete_eval_log_rec_.warning.operation_id(e_row_)             := NULL;
  65.434 -             complete_eval_log_rec_.warning.routing_guideline_no(e_row_)     := NULL;
  65.435 -             complete_eval_log_rec_.warning.tool_sequence(e_row_)            := NULL;
  65.436 -             complete_eval_log_rec_.warning.structure_alternative_no(e_row_) := NULL;
  65.437 -             complete_eval_log_rec_.warning.line_item_no(e_row_)             := NULL;
  65.438 -             complete_eval_log_rec_.warning.structure_guideline_no(e_row_)   := NULL;
  65.439 -             complete_eval_log_rec_.warning.action_id(e_row_)                := NULL;
  65.440 -             complete_eval_log_rec_.warning.action_line_no(e_row_)           := NULL;
  65.441 -             complete_eval_log_rec_.warning.condition_id(e_row_)             := NULL;
  65.442 -             complete_eval_log_rec_.warning.condition_line_no(e_row_)        := NULL;
  65.443 -             complete_eval_log_rec_.warning.formula_id(e_row_)               := NULL;
  65.444 -
  65.445 -             complete_eval_log_rec_.warning.warning_message(e_row_)          :=
  65.446 -                Language_SYS.Translate_Constant(lu_name_, 'IOMNOBYPRODUCTS: Component part :P1 as a by-product is not handled by DOP. Hence ignored.',
  65.447 -                  Fnd_Session_API.Get_Language, component_rec_.component_part_tab(i));
  65.448 -         END IF;  -- of IF (component_rec_.qty_per_assembly_tab(i) < 0) THEN...
  65.449 -
  65.450 -         phatom_part_exist_ := FALSE;
  65.451 -         parent_interim_order_no_ := parent_supply_.interim_order_no;
  65.452 -         WHILE (parent_interim_order_no_ > 0) and (NOT phatom_part_exist_ ) LOOP
  65.453 -            parent_part_mrp_code_ := Inventory_Part_Planning_API.Get_Mrp_Order_Code(evaluation_rec_.contract,Interim_Order_Api.Get_Part_No(parent_supply_.interim_header_id,parent_interim_order_no_));
  65.454 -            IF parent_part_mrp_code_ = 'P' then
  65.455 -               phatom_part_exist_ := TRUE;
  65.456 -            END IF;
  65.457 -            parent_interim_order_no_ := Interim_Order_Api.Get_Parent_Interim_Order_No(parent_supply_.interim_header_id,parent_interim_order_no_);
  65.458 -         END LOOP;
  65.459 -
  65.460 --- If expense component line, then create warning and ignore.
  65.461 -         IF (part_type_code_ = '6') THEN
  65.462 -            e_row_ := NVL(complete_eval_log_rec_.warning.warning_row_count,0) + 1;
  65.463 -            complete_eval_log_rec_.warning.warning_row_count := e_row_;
  65.464 -
  65.465 -            complete_eval_log_rec_.warning.explosion_row_type_db(e_row_) := 'ExpensePart';
  65.466 -            complete_eval_log_rec_.warning.contract(e_row_)                 := component_rec_.contract_tab(i);
  65.467 -            complete_eval_log_rec_.warning.part_no(e_row_)                  := component_rec_.component_part_tab(i);
  65.468 -            complete_eval_log_rec_.warning.eng_chg_level(e_row_)            := NULL;
  65.469 -            complete_eval_log_rec_.warning.routing_revision(e_row_)         := NULL;
  65.470 -            complete_eval_log_rec_.warning.bom_type_db(e_row_)              := NULL;
  65.471 -            complete_eval_log_rec_.warning.routing_alternative_no(e_row_)   := NULL;
  65.472 -            complete_eval_log_rec_.warning.operation_id(e_row_)             := NULL;
  65.473 -            complete_eval_log_rec_.warning.routing_guideline_no(e_row_)     := NULL;
  65.474 -            complete_eval_log_rec_.warning.tool_sequence(e_row_)            := NULL;
  65.475 -            complete_eval_log_rec_.warning.structure_alternative_no(e_row_) := NULL;
  65.476 -            complete_eval_log_rec_.warning.line_item_no(e_row_)             := NULL;
  65.477 -            complete_eval_log_rec_.warning.structure_guideline_no(e_row_)   := NULL;
  65.478 -            complete_eval_log_rec_.warning.action_id(e_row_)                := NULL;
  65.479 -            complete_eval_log_rec_.warning.action_line_no(e_row_)           := NULL;
  65.480 -            complete_eval_log_rec_.warning.condition_id(e_row_)             := NULL;
  65.481 -            complete_eval_log_rec_.warning.condition_line_no(e_row_)        := NULL;
  65.482 -            complete_eval_log_rec_.warning.formula_id(e_row_)               := NULL;
  65.483 -
  65.484 -            complete_eval_log_rec_.warning.warning_message(e_row_)          :=
  65.485 -               Language_SYS.Translate_Constant(lu_name_, 'IOMINVPARTTYPE: Component part :P1 with part type Expense is not handled by DOP. Hence ignored.',
  65.486 -                 Fnd_Session_API.Get_Language, component_rec_.component_part_tab(i));
  65.487 -
  65.488 --- Else if not phantom parent part, process.
  65.489 -         ELSIF (parent_interim_order_no_ = 0) THEN
  65.490 -            IF (part_type_code_ IN ( '1','2')) THEN
  65.491 -               comp_bom_type_db_ := 'M';
  65.492 -            ELSIF (part_type_code_ IN ('3', '4')) THEN
  65.493 -               comp_bom_type_db_ := 'P';
  65.494 -            END IF;
  65.495 -            comp_bom_type_ := Shop_Ord_Code_API.Decode(comp_bom_type_db_);
  65.496 -
  65.497 --- IF-ELSE #4 If phantom/blow-thru, process.
  65.498 -            IF (component_rec_.mrp_order_code_tab(i) IN ('P','K') AND
  65.499 -             (part_type_code_ = '1')) THEN
  65.500 -               operation_no_:=component_rec_.comp_operation_no_tab(i);
  65.501 -               get_comp_flag_ := TRUE;
  65.502 -               IF component_rec_.mrp_order_code_tab(i) = 'P' THEN
  65.503 -                   qty_avail_ :=
  65.504 -                   inventory_part_in_stock_api.Get_Inventory_Qty_Onhand( component_rec_.contract_tab(i),   component_rec_.component_part_tab(i), NULL) -
  65.505 -                   inventory_part_in_stock_api.Get_Inventory_Qty_Reserved( component_rec_.contract_tab(i),component_rec_.component_part_tab(i), NULL)-
  65.506 -                   inventory_part_in_stock_api.Get_Inventory_Qty_Rejected( component_rec_.contract_tab(i), component_rec_.component_part_tab(i),NULL, NULL);
  65.507 -
  65.508 -                   primary_comp_qty_ := (((( component_rec_.qty_required_tab(i))
  65.509 -                                         / (1 - ( component_rec_.shrinkage_factor_tab(i) / 100)))
  65.510 -                                         +  component_rec_.component_scrap_tab(i)));
  65.511 -                   IF (qty_avail_ >=  primary_comp_qty_ ) OR (component_rec_.consumption_item_db_tab(i) = 'Not Consumed') THEN
  65.512 -                      get_comp_flag_ := FALSE;
  65.513 -                   ELSE
  65.514 -                      get_comp_flag_ := TRUE;
  65.515 -                   END IF;
  65.516 -               END IF;
  65.517 -
  65.518 -               IF get_comp_flag_ = TRUE THEN
  65.519 -                    Process_Evaluate_Phantom___ (evaluation_rec_,
  65.520 -                                                 parent_supply_rec_,
  65.521 -                                                 config_spec_rec_,
  65.522 -                                                 eval_log_rec_,
  65.523 -                                                 complete_eval_log_rec_,
  65.524 -                                                 component_rec_.contract_tab(i),
  65.525 -                                                 component_rec_.component_part_tab(i),
  65.526 -                                                 component_rec_.date_required_tab(i),
  65.527 -                                                 component_rec_.qty_required_tab(i),
  65.528 -                                                 comp_bom_type_db_,
  65.529 -                                                 evaluation_rec_.alternate_status,
  65.530 -                                                 component_rec_.configuration_id_tab(i),
  65.531 -                                                 operation_no_);
  65.532 -               ELSIF  get_comp_flag_ = FALSE THEN
  65.533 -                  interim_required_date_ := Work_time_Calendar_API.Get_Previous_Work_Day(calendar_id_,interim_order_api.get_start_date(evaluation_rec_.interim_header_id,parent_supply_.interim_order_no));
  65.534 -                  interim_start_date_ := Least( interim_required_date_,
  65.535 -                                                 component_rec_.date_required_tab(i) );
  65.536 -                  supply_interim_order_no_ := NULL;
  65.537 -                  Interim_Order_API.New(supply_interim_order_no_,
  65.538 -                                        evaluation_rec_.interim_header_id,
  65.539 -                                        parent_supply_.interim_order_no,
  65.540 -                                        evaluation_rec_.next_level,
  65.541 -                                        component_rec_.contract_tab(i),
  65.542 -                                        component_rec_.component_part_tab(i),
  65.543 -                                        component_rec_.qty_required_tab(i),
  65.544 -                                        interim_required_date_,
  65.545 -                                        interim_start_date_,
  65.546 -                                        comp_eng_chg_level_,
  65.547 -                                        comp_bom_type_db_,
  65.548 -                                        comp_struct_alternative_no_,
  65.549 -                                        comp_routing_revision_,
  65.550 -                                        comp_rout_alternative_no_,
  65.551 -                                        component_rec_.promise_planned_db_tab(i),
  65.552 -                                        component_rec_.configuration_id_tab(i),
  65.553 -                                        NULL,
  65.554 -                                        evaluation_rec_.part_ownership,
  65.555 -                                        evaluation_rec_.owning_customer_no );
  65.556 -                  Trace_SYS.Message('Supply created for : '||component_rec_.component_part_tab(i));
  65.557 -                  evaluation_rec_.line_item_no := NVL(evaluation_rec_.line_item_no,0) + 1;
  65.558 -     -- Create InterimOrderComponent
  65.559 -                  Interim_Order_Component_API.New(evaluation_rec_.line_item_no,
  65.560 -                                                  evaluation_rec_.interim_header_id,
  65.561 -                                                  parent_supply_.interim_order_no,
  65.562 -                                                  evaluation_rec_.line_item_no,
  65.563 -                                                  evaluation_rec_.contract,
  65.564 -                                                  component_rec_.component_part_tab(i),
  65.565 -                                                  supply_interim_order_no_,
  65.566 -                                                  component_rec_.qty_required_tab(i),
  65.567 -                                                  interim_required_date_,
  65.568 -                                                  component_rec_.qty_per_assembly_tab(i),
  65.569 -                                                  component_rec_.component_scrap_tab(i),
  65.570 -                                                  component_rec_.shrinkage_factor_tab(i),
  65.571 -                                                  component_rec_.comp_operation_no_tab(i),
  65.572 -                                                  component_rec_.leadtime_offset_tab(i),
  65.573 -                                                  component_rec_.consumption_item_db_tab(i),
  65.574 -                                                  evaluation_rec_.line_item_no,
  65.575 -                                                  component_rec_.issue_to_loc_tab(i),
  65.576 -                                                  component_rec_.draw_pos_no_tab(i),
  65.577 -                                                  component_rec_.note_text_tab(i),
  65.578 -                                                  component_rec_.configuration_id_tab(i) );
  65.579 -                  Trace_SYS.Message('Component created for : '||component_rec_.component_part_tab(i));
  65.580 -               END IF;  -- of IF get_comp_flag_ = TRUE THEN
  65.581 -
  65.582 -               IF (evaluation_rec_.single_level_explosion = 0) THEN
  65.583 -                  evaluation_rec_.orders_exist_to_evaluate := TRUE;
  65.584 -               ELSE
  65.585 -                  evaluation_rec_.orders_exist_to_evaluate := FALSE;
  65.586 -               END IF;
  65.587 -
  65.588 --- IF-ELSE #4 Else process non-phantom/blow-thru part.
  65.589 -            ELSE
  65.590 -               -- If ctp planned record check for orders to evaluate.
  65.591 -               IF evaluation_rec_.ctp_planned = 1 THEN
  65.592 -                  IF configurable_ = 'CONFIGURED' THEN
  65.593 -                     IF part_type_code_ IN ('3','4') THEN
  65.594 -                        IF Dictionary_SYS.Logical_Unit_Is_Installed('SupplySourcePartManager') THEN
  65.595 -                           stmt_ := 'BEGIN
  65.596 -                                       :check_source := Supply_Source_Part_Manager_API.Is_Part_Internally_Sourced(:contract, :part_no);
  65.597 -                                     END;';
  65.598 -                           -- ifs_assert_safe pemase 20051221
  65.599 -                           EXECUTE IMMEDIATE stmt_
  65.600 -                              USING OUT check_source_,
  65.601 -                                     IN evaluation_rec_.contract,
  65.602 -                                     IN component_rec_.component_part_tab(i);
  65.603 -                        END IF;
  65.604 -
  65.605 -                        IF check_source_ = 'TRUE'  THEN
  65.606 -                           evaluation_rec_.orders_exist_to_evaluate := TRUE;
  65.607 -                        ELSE
  65.608 -                           evaluation_rec_.orders_exist_to_evaluate := FALSE;
  65.609 -                        END IF;
  65.610 -                     ELSE
  65.611 -                        IF (evaluation_rec_.single_level_explosion = 0) THEN
  65.612 -                           evaluation_rec_.orders_exist_to_evaluate := TRUE;
  65.613 -                        ELSE
  65.614 -                           evaluation_rec_.orders_exist_to_evaluate := FALSE;
  65.615 -                        END IF;
  65.616 -                     END IF;
  65.617 -                  ELSE
  65.618 -                     IF (evaluation_rec_.single_level_explosion = 0) THEN
  65.619 -                        evaluation_rec_.orders_exist_to_evaluate := TRUE;
  65.620 -                     ELSE
  65.621 -                        evaluation_rec_.orders_exist_to_evaluate := FALSE;
  65.622 -                     END IF;
  65.623 -                  END IF;
  65.624 -               -- Not ctp planned, check for orders to evaluate.
  65.625 -               ELSE
  65.626 -                  IF ((configurable_ = 'CONFIGURED') AND (part_type_code_ = '1')) OR
  65.627 -                     ((dop_part_ = 'D') AND (part_type_code_ = '1')) THEN
  65.628 -
  65.629 -                     IF (evaluation_rec_.single_level_explosion = 0) THEN
  65.630 -                        evaluation_rec_.orders_exist_to_evaluate := TRUE;
  65.631 -                     ELSE
  65.632 -                        evaluation_rec_.orders_exist_to_evaluate := FALSE;
  65.633 -                     END IF;
  65.634 -
  65.635 -                  END IF;
  65.636 -               END IF;   -- of IF evaluation_rec_.ctp_planned = 1 THEN..ELSE..
  65.637 -
  65.638 -               interim_required_date_ := Work_time_Calendar_API.Get_Previous_Work_Day(calendar_id_,parent_start_date_);
  65.639 -
  65.640 -               interim_start_date_ := Least( interim_required_date_,
  65.641 -                                             component_rec_.date_required_tab(i) );
  65.642 -
  65.643 -               supply_interim_order_no_ := NULL;
  65.644 -
  65.645 -               -- Note; Create InterimOrder
  65.646 -               -- Note; Get revision and alternate both for routing and structure
  65.647 -               comp_eng_chg_level_ := NULL;
  65.648 -               comp_struct_alternative_no_ := NULL;
  65.649 -
  65.650 -               IF (comp_bom_type_db_ = 'M') THEN
  65.651 -                  -- Note; For Component part even tentative alternative is allowed as a leaf.
  65.652 -                  -- Note; Component as a leaf will always be 'Tentative'
  65.653 -
  65.654 -                  IF Manuf_Part_Attribute_API.Get_Structure_Effectivity(component_rec_.contract_tab(i), component_rec_.component_part_tab(i))
  65.655 -                     = Effectivity_Control_API.Decode('SERIAL') THEN
  65.656 -                     Manuf_Structure_Util_API.Get_Any_Date_Revision_Alt(comp_eng_chg_level_,
  65.657 -                                                                       comp_struct_alternative_no_,
  65.658 -                                                                       comp_alt_state_,
  65.659 -                                                                       component_rec_.contract_tab(i),
  65.660 -                                                                       component_rec_.component_part_tab(i),
  65.661 -                                                                       comp_bom_type_,
  65.662 -                                                                       interim_required_date_ );
  65.663 -
  65.664 -                     e_row_ := NVL(complete_eval_log_rec_.warning.warning_row_count,0) + 1;
  65.665 -                     complete_eval_log_rec_.warning.warning_row_count := e_row_;
  65.666 -
  65.667 -                     complete_eval_log_rec_.warning.explosion_row_type_db(e_row_) := 'PartRevision';
  65.668 -                     complete_eval_log_rec_.warning.contract(e_row_)                 := component_rec_.contract_tab(i);
  65.669 -                     complete_eval_log_rec_.warning.part_no(e_row_)                  := component_rec_.component_part_tab(i);
  65.670 -                     complete_eval_log_rec_.warning.eng_chg_level(e_row_)            := NULL;
  65.671 -                     complete_eval_log_rec_.warning.routing_revision(e_row_)         := NULL;
  65.672 -                     complete_eval_log_rec_.warning.bom_type_db(e_row_)              := NULL;
  65.673 -                     complete_eval_log_rec_.warning.routing_alternative_no(e_row_)   := NULL;
  65.674 -                     complete_eval_log_rec_.warning.operation_id(e_row_)             := NULL;
  65.675 -                     complete_eval_log_rec_.warning.routing_guideline_no(e_row_)     := NULL;
  65.676 -                     complete_eval_log_rec_.warning.tool_sequence(e_row_)            := NULL;
  65.677 -                     complete_eval_log_rec_.warning.structure_alternative_no(e_row_) := NULL;
  65.678 -                     complete_eval_log_rec_.warning.line_item_no(e_row_)             := NULL;
  65.679 -                     complete_eval_log_rec_.warning.structure_guideline_no(e_row_)   := NULL;
  65.680 -                     complete_eval_log_rec_.warning.action_id(e_row_)                := NULL;
  65.681 -                     complete_eval_log_rec_.warning.action_line_no(e_row_)           := NULL;
  65.682 -                     complete_eval_log_rec_.warning.condition_id(e_row_)             := NULL;
  65.683 -                     complete_eval_log_rec_.warning.condition_line_no(e_row_)        := NULL;
  65.684 -                     complete_eval_log_rec_.warning.formula_id(e_row_)               := NULL;
  65.685 -
  65.686 -                     complete_eval_log_rec_.warning.warning_message(e_row_)          :=
  65.687 -                        Language_SYS.Translate_Constant(lu_name_, 'STRUCTSERIALEFF: Component part :P1 uses serial structure effectivity which is not handled. Date effectivity is used instead.',
  65.688 -                                                        Fnd_Session_API.Get_Language,
  65.689 -                                                        component_rec_.component_part_tab(i));
  65.690 -
  65.691 -
  65.692 -                  ELSE
  65.693 -                     Manuf_Structure_Int_API.Get_Any_Revision_Alternative(comp_eng_chg_level_,
  65.694 -                                                                       comp_struct_alternative_no_,
  65.695 -                                                                       comp_alt_state_,
  65.696 -                                                                       component_rec_.contract_tab(i),
  65.697 -                                                                       component_rec_.component_part_tab(i),
  65.698 -                                                                       comp_bom_type_,
  65.699 -                                                                       interim_required_date_,
  65.700 -                                                                       evaluation_rec_.serial_begin,
  65.701 -                                                                       evaluation_rec_.serial_end );
  65.702 -
  65.703 -                     IF (evaluation_rec_.alternate_status = 'Buildable') THEN
  65.704 -                        Routing_Int_API.Get_Buildable_Alternative( comp_routing_revision_,
  65.705 -                                                          comp_rout_alternative_no_,
  65.706 -                                                          component_rec_.contract_tab(i),
  65.707 -                                                          component_rec_.component_part_tab(i),
  65.708 -                                                          comp_bom_type_,
  65.709 -                                                          interim_required_date_,
  65.710 -                                                          evaluation_rec_.serial_begin,
  65.711 -                                                          evaluation_rec_.serial_end );
  65.712 -
  65.713 -                        IF comp_routing_revision_ IS NULL THEN
  65.714 -                           Error_Sys.Record_General(lu_name_, 'NOBUILDALTFOUND: No Buildable routing revision/alternative exists for part :P1 site :P2 on the date :P3.'
  65.715 -                                               ,component_rec_.component_part_tab(i),component_rec_.contract_tab(i),interim_required_date_);
  65.716 -                        END IF ;
  65.717 -
  65.718 -                     ELSE
  65.719 -                        Routing_Int_API.Get_Any_Revision_Alternative( comp_routing_revision_,
  65.720 -                                                             comp_rout_alternative_no_,
  65.721 -                                                             comp_rout_alt_state_,
  65.722 -                                                             component_rec_.contract_tab(i),
  65.723 -                                                             component_rec_.component_part_tab(i),
  65.724 -                                                             comp_bom_type_,
  65.725 -                                                             interim_required_date_,
  65.726 -                                                             evaluation_rec_.serial_begin,
  65.727 -                                                             evaluation_rec_.serial_end );
  65.728 -
  65.729 -                        IF comp_routing_revision_ IS NULL THEN
  65.730 -                           Error_Sys.Record_General(lu_name_, 'NOREVALTFOUND: No Tentative/Plannable/Buildable structure revision/alternative exists for part :P1 site :P2 on the date :P3.'
  65.731 -                                           ,component_rec_.component_part_tab(i),component_rec_.contract_tab(i),interim_required_date_);
  65.732 -                        END IF ;
  65.733 -
  65.734 -                     END IF;
  65.735 -                  END IF; -- = Effectivity_Control_API.Decode('SERIAL') THEN
  65.736 -
  65.737 -               ELSIF (comp_bom_type_db_ = 'P') THEN
  65.738 -
  65.739 -                  comp_eng_chg_level_ := Part_Revision_API.Get_Revision_By_Date (component_rec_.contract_tab(i),
  65.740 -                                                                                 component_rec_.component_part_tab(i),
  65.741 -                                                                                 interim_required_date_);
  65.742 -                  -- Bug 77319, start
  65.743 -                  Calculate_Purch_Dates___ (interim_required_date_,
  65.744 -                                            interim_start_date_,
  65.745 -                                            evaluation_rec_,
  65.746 -                                            component_rec_.contract_tab(i),
  65.747 -                                            component_rec_.component_part_tab(i),
  65.748 -                                            parent_supply_.interim_order_no,
  65.749 -                                            component_rec_.leadtime_offset_tab(i));
  65.750 -                  -- Bug 77319, end
  65.751 -               END IF; --IF (comp_bom_type_db_ = 'M') THEN
  65.752 -
  65.753 -               IF (comp_eng_chg_level_ IS NULL) THEN
  65.754 -                  -- Note; Set a error message for part revision being null for component
  65.755 -                  e_row_ := NVL(complete_eval_log_rec_.error.error_row_count,0) + 1;
  65.756 -                  complete_eval_log_rec_.error.error_row_count  := e_row_;
  65.757 -
  65.758 -                  complete_eval_log_rec_.error.explosion_row_type_db(e_row_) := 'PartRevision';
  65.759 -                  complete_eval_log_rec_.error.contract(e_row_)                 := component_rec_.contract_tab(i);
  65.760 -                  complete_eval_log_rec_.error.part_no(e_row_)                  := component_rec_.component_part_tab(i);
  65.761 -                  complete_eval_log_rec_.error.eng_chg_level(e_row_)            := NULL;
  65.762 -                  complete_eval_log_rec_.error.routing_revision(e_row_)         := NULL;
  65.763 -                  complete_eval_log_rec_.error.bom_type_db(e_row_)              := NULL;
  65.764 -                  complete_eval_log_rec_.error.routing_alternative_no(e_row_)   := NULL;
  65.765 -                  complete_eval_log_rec_.error.operation_id(e_row_)             := NULL;
  65.766 -                  complete_eval_log_rec_.error.routing_guideline_no(e_row_)     := NULL;
  65.767 -                  complete_eval_log_rec_.error.tool_sequence(e_row_)            := NULL;
  65.768 -                  complete_eval_log_rec_.error.structure_alternative_no(e_row_) := NULL;
  65.769 -                  complete_eval_log_rec_.error.line_item_no(e_row_)             := NULL;
  65.770 -                  complete_eval_log_rec_.error.structure_guideline_no(e_row_)   := NULL;
  65.771 -                  complete_eval_log_rec_.error.action_id(e_row_)                := NULL;
  65.772 -                  complete_eval_log_rec_.error.action_line_no(e_row_)           := NULL;
  65.773 -                  complete_eval_log_rec_.error.condition_id(e_row_)             := NULL;
  65.774 -                  complete_eval_log_rec_.error.condition_line_no(e_row_)        := NULL;
  65.775 -                  complete_eval_log_rec_.error.formula_id(e_row_)               := NULL;
  65.776 -
  65.777 -                  complete_eval_log_rec_.error.error_message(e_row_)            :=
  65.778 -                     Language_SYS.Translate_Constant(lu_name_, 'IOMNOREV: Part revision does not exist for component part :P1 contract :P2 required date :P3',
  65.779 -                       Fnd_Session_API.Get_Language,
  65.780 -                       component_rec_.component_part_tab(i),
  65.781 -                       component_rec_.contract_tab(i),
  65.782 -                       interim_required_date_);
  65.783 -               END IF;  -- of IF (comp_eng_chg_level_ IS NULL) THEN
  65.784 -               --
  65.785 -               --
  65.786 -               found_:=FALSE;
  65.787 -               FOR j IN 1..NVL(operation_rec_.operation_row_count,0) LOOP
  65.788 -                  IF (component_rec_.comp_operation_no_tab(i)=operation_rec_.operation_no_tab(j)) THEN
  65.789 -                     found_ := TRUE;
  65.790 -                     EXIT;
  65.791 -                  END IF;
  65.792 -               END LOOP;
  65.793 -               IF (NOT found_) THEN
  65.794 -                  component_rec_.comp_operation_no_tab(i):=NULL;
  65.795 -               END IF;
  65.796 -
  65.797 -               IF (component_rec_.comp_operation_no_tab(i) IS NOT NULL) THEN
  65.798 -                  Validate_Oper_On_Comp___(oper_valid_,
  65.799 -                                           complete_eval_log_rec_,
  65.800 -                                           operation_rec_,
  65.801 -                                           component_rec_.contract_tab(i),
  65.802 -                                           component_rec_.component_part_tab(i),
  65.803 -                                           component_rec_.line_item_no_tab(i),
  65.804 -                                           component_rec_.comp_operation_no_tab(i),
  65.805 -                                           parent_supply_.eng_chg_level,
  65.806 -                                           parent_supply_.structure_alternative_no,
  65.807 -                                           parent_supply_.order_code,
  65.808 -                                           parent_supply_.routing_revision,
  65.809 -                                           parent_supply_.routing_alternative_no,
  65.810 -                                           parent_part_);
  65.811 -               END IF;
  65.812 -               --
  65.813 -               IF ( ( (component_rec_.comp_operation_no_tab(i) IS NULL) OR
  65.814 -                      ( (component_rec_.comp_operation_no_tab(i) IS NOT NULL) AND
  65.815 -                        (oper_valid_) ) ) AND
  65.816 -                    ( (component_rec_.qty_per_assembly_tab(i) > 0) OR
  65.817 -                      (component_rec_.consumption_item_db_tab(i) = 'Not Consumed') ) ) THEN
  65.818 -                  IF component_rec_.consumption_item_db_tab(i) = 'Not Consumed' THEN
  65.819 -                     component_rec_.qty_required_tab(i) := 0;
  65.820 -                  END IF;
  65.821 -                  Interim_Order_API.New(supply_interim_order_no_,
  65.822 -                                        evaluation_rec_.interim_header_id,
  65.823 -                                        parent_supply_.interim_order_no,
  65.824 -                                        evaluation_rec_.next_level,
  65.825 -                                        component_rec_.contract_tab(i),
  65.826 -                                        component_rec_.component_part_tab(i),
  65.827 -                                        component_rec_.qty_required_tab(i),
  65.828 -                                        interim_required_date_,
  65.829 -                                        interim_start_date_,
  65.830 -                                        comp_eng_chg_level_,
  65.831 -                                        comp_bom_type_db_,
  65.832 -                                        comp_struct_alternative_no_,
  65.833 -                                        comp_routing_revision_,
  65.834 -                                        comp_rout_alternative_no_,
  65.835 -                                        component_rec_.promise_planned_db_tab(i),
  65.836 -                                        component_rec_.configuration_id_tab(i),
  65.837 -                                        NULL,
  65.838 -                                        evaluation_rec_.part_ownership,
  65.839 -                                        evaluation_rec_.owning_customer_no );
  65.840 -
  65.841 -                  evaluation_rec_.line_item_no := NVL(evaluation_rec_.line_item_no,0) + 1;
  65.842 -
  65.843 -                  -- Note; Create InterimOrderComponent
  65.844 -                  Interim_Order_Component_API.New(evaluation_rec_.line_item_no,
  65.845 -                                                  evaluation_rec_.interim_header_id,
  65.846 -                                                  parent_supply_.interim_order_no,
  65.847 -                                                  evaluation_rec_.line_item_no,
  65.848 -                                                  evaluation_rec_.contract,
  65.849 -                                                  component_rec_.component_part_tab(i),
  65.850 -                                                  supply_interim_order_no_,
  65.851 -                                                  component_rec_.qty_required_tab(i),
  65.852 -                                                  interim_required_date_,
  65.853 -                                                  component_rec_.qty_per_assembly_tab(i),
  65.854 -                                                  component_rec_.component_scrap_tab(i),
  65.855 -                                                  component_rec_.shrinkage_factor_tab(i),
  65.856 -                                                  component_rec_.comp_operation_no_tab(i),
  65.857 -                                                  component_rec_.leadtime_offset_tab(i),
  65.858 -                                                  component_rec_.consumption_item_db_tab(i),
  65.859 -                                                  evaluation_rec_.line_item_no,
  65.860 -                                                  component_rec_.issue_to_loc_tab(i),
  65.861 -                                                  component_rec_.draw_pos_no_tab(i),
  65.862 -                                                  component_rec_.note_text_tab(i),
  65.863 -                                                  component_rec_.configuration_id_tab(i),
  65.864 -                                                  NULL,
  65.865 -                                                  evaluation_rec_.part_ownership,
  65.866 -                                                  evaluation_rec_.owning_customer_no );
  65.867 -
  65.868 -                  -- Note; Create InterimCompWorkGuide
  65.869 -                  FOR j IN 1..comp_work_guide_rec_.comp_work_guide_count LOOP
  65.870 -                     IF (component_rec_.line_item_no_tab(i) = comp_work_guide_rec_.comp_line_item_no_tab(j)) THEN
  65.871 -                        --
  65.872 -                        Interim_Comp_Work_Guide_API.NEW(comp_work_guide_rec_.comp_guideline_no_tab(j),
  65.873 -                                                        evaluation_rec_.interim_header_id,
  65.874 -                                                        parent_supply_.interim_order_no,
  65.875 -                                                        evaluation_rec_.line_item_no, -- component_rec_.line_item_no_tab(i),
  65.876 -                                                        comp_work_guide_rec_.comp_guideline_seq_tab(j),
  65.877 -                                                        comp_work_guide_rec_.comp_guideline_desc_tab(j),
  65.878 -                                                        comp_work_guide_rec_.comp_guideline_text_tab(j),
  65.879 -                                                        comp_work_guide_rec_.comp_guideline_type_tab(j),
  65.880 -                                                        comp_work_guide_rec_.x_coordinate_tab(j),
  65.881 -                                                        comp_work_guide_rec_.y_coordinate_tab(j),
  65.882 -                                                        comp_work_guide_rec_.z_coordinate_tab(j),
  65.883 -                                                        comp_work_guide_rec_.reference_qty_tab(j) );
  65.884 -                     END IF;
  65.885 -                  END LOOP;   -- comp_work_guide_rec loop
  65.886 -               END IF; -- of IF ( ( (component_rec_.comp_operation_no_tab(i) IS NULL) OR
  65.887 -
  65.888 -            END IF;  -- of IF (component_rec_.mrp_order_code_tab(i) IN ('P','K') AND
  65.889 --- End IF-ELSE #4
  65.890 -
  65.891 -         END IF;  -- of IF (part_type_code_ = '6') THEN..ELSIF (NOT phatom_part_exist_) THEN..
  65.892 -
  65.893 -      END LOOP;
  65.894 --- End FOR-LOOP #2: Loop thru retrieved component records.
  65.895 -
  65.896 -   END IF;  --of IF NOT multi_site_part_exist_ THEN
  65.897 -
  65.898 --- Note; Initialize all records for the next interim order
  65.899 -      operation_rec_       := NULL;
  65.900 -      operation_rec_.operation_row_count := 0;
  65.901 -      oper_work_guide_rec_ := NULL;
  65.902 -      oper_work_guide_rec_.oper_work_guide_row_count := 0;
  65.903 -      oper_tool_rec_       := NULL;
  65.904 -      oper_tool_rec_.oper_tool_row_count := 0;
  65.905 -      component_rec_       := NULL;
  65.906 -      component_rec_.comp_row_count := 0;
  65.907 -      comp_work_guide_rec_ := NULL;
  65.908 -      comp_work_guide_rec_.comp_work_guide_count := 0;
  65.909 -      config_spec_rec_     := NULL;
  65.910 -      config_spec_rec_.spec_row_count := 0;
  65.911 -      --
  65.912 -      evaluation_rec_.line_item_no := 0;
  65.913 -      -- Bug 74483, start
  65.914 -      comp_eng_chg_level_ := NULL;
  65.915 -      comp_struct_alternative_no_ := NULL;
  65.916 -      -- Bug 74483, end
  65.917 -   END LOOP;
  65.918 --- End FOR-LOOP #1: Loop thru interim order records inserted by calling method.
  65.919 -END Evaluate_Level___;
  65.920 \ No newline at end of file
    66.1 --- a/PLSQL/Lexer/test/unit/src/org/netbeans/modules/plsql/lexer/txtser.ins	Wed May 15 16:07:35 2013 +0200
    66.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
    66.3 @@ -1,322 +0,0 @@
    66.4 ------------------------------------------------------------------------------
    66.5 ---
    66.6 --- File: txtser.ins
    66.7 ---
    66.8 --- Purpose: Creates the Java Implementation of AltaVista Search. (The Source comes from Oracle).
    66.9 ---          Creates Schedules for Index Synchronization AND Optimization.
   66.10 ---
   66.11 ---  Date    Sign  History
   66.12 ---  ------  ----  -----------------------------------------------------------
   66.13 ---  040701  NiSilk Version 1.0.0 Created.
   66.14 ---  040713  ChCrlk Removed input values for parameter "parameters_" in method call to Batch_SYS.New_Batch_Schedule.
   66.15 ---  041203  ChCrlk Add statements to create datastore preferences and content indexes
   66.16 ---  050110  ChCrlk Modified creation of datastore preferences.
   66.17 ---  050125  Nifrse  Moved the Oracle Text indexes from CALLKS to PCM and CALLC modules.
   66.18 ---  070410  NIJALK Bug 64641, Added check on scheduled tasks to avoid duplicates. 
   66.19 ---  070621  ILSOLK Merged Bug Id 64641.
   66.20 ------------------------------------------------------------------------------
   66.21 -
   66.22 -set define off
   66.23 -
   66.24 -create or replace java source named "AvQuery" as 
   66.25 -
   66.26 -  import java.util.*;
   66.27 -
   66.28 -  class WordData {
   66.29 -    String text;
   66.30 -    String fieldName;
   66.31 -    }
   66.32 -
   66.33 -  public class AvQuery {
   66.34 -
   66.35 -  static Vector reqWords = new Vector();
   66.36 -  static Vector optWords = new Vector();
   66.37 -  static Vector notWords = new Vector();
   66.38 -
   66.39 -  public static final int required  = 1;
   66.40 -  public static final int optional  = 2;
   66.41 -  public static final int notwanted = 3;
   66.42 -
   66.43 -  public static String translate (String input) {
   66.44 -    processString(input);
   66.45 -    return getQuery();
   66.46 -    }
   66.47 -
   66.48 -  private static void addWord (String word, int wordType, String field) {
   66.49 -
   66.50 -    WordData wd = new WordData();
   66.51 -
   66.52 -    wd.text = word;
   66.53 -    wd.fieldName = field;
   66.54 -
   66.55 -    switch (wordType) {
   66.56 -    case required:
   66.57 -      reqWords.addElement(wd);
   66.58 -      break;
   66.59 -    case optional:
   66.60 -      optWords.addElement(wd);
   66.61 -      break;
   66.62 -    case notwanted:
   66.63 -      notWords.addElement(wd);
   66.64 -      break;
   66.65 -    }
   66.66 -  }
   66.67 -
   66.68 -  public static void processString (String input) {
   66.69 -    int p = 0;
   66.70 -    int pp;
   66.71 -    int startWord;
   66.72 -    int flag;
   66.73 -    String theWord;
   66.74 -    String fieldName;
   66.75 -
   66.76 -
   66.77 -    reqWords = new Vector();
   66.78 -    optWords = new Vector();
   66.79 -    notWords = new Vector();
   66.80 -
   66.81 -    while (true) {       // Loop over all words
   66.82 -
   66.83 -      startWord = p;
   66.84 -      while (p < input.length() && input.charAt(p) != ' ') {
   66.85 -        // Check for quoted phrase
   66.86 -        if (input.charAt(p) == '"') {   // Quote - skip to next or end
   66.87 -          p++;  // skip the actual quote
   66.88 -          while (p < input.length() && input.charAt(p) != '"') {
   66.89 -            p++;
   66.90 -            }
   66.91 -          if (p < input.length()) p++;   // Skip the final quote if found
   66.92 -          }
   66.93 -        else {
   66.94 -          p++;
   66.95 -          }
   66.96 -        }
   66.97 -
   66.98 -      // Got a word. Check for required/not wanted flags (+-)
   66.99 -
  66.100 -      theWord = input.substring(startWord, p);
  66.101 -
  66.102 -      flag = optional;
  66.103 -      fieldName = "";
  66.104 -
  66.105 -      if (theWord.charAt(0) == '+') {
  66.106 -        flag = required;
  66.107 -        theWord = theWord.substring(1);
  66.108 -        }
  66.109 -
  66.110 -      else if (theWord.charAt(0) == '-') {
  66.111 -        flag = notwanted;
  66.112 -        theWord = theWord.substring(1);
  66.113 -        }
  66.114 -
  66.115 -      // Replace * wild cards with %
  66.116 -
  66.117 -      theWord = theWord.replace('*', '%');
  66.118 -
  66.119 -      // Find field indicator ":"
  66.120 -
  66.121 -      pp = theWord.indexOf(":");
  66.122 -      if (pp > 0) {
  66.123 -        fieldName = theWord.substring(0, pp);
  66.124 -        theWord = theWord.substring(pp+1, theWord.length());
  66.125 -        }
  66.126 -
  66.127 -      addWord(theWord, flag, fieldName);
  66.128 -
  66.129 -      p++;
  66.130 -      if (p >= input.length()) break;
  66.131 -      }
  66.132 -    }
  66.133 -
  66.134 -  // Get word gets a single word from the "words" vector,
  66.135 -  //  surrounds it in braces (to avoid reserved words)
  66.136 -  //  and attaches a WITHIN clause if appropriate.
  66.137 -
  66.138 -  private static String getWord (Vector words, int pos) {
  66.139 -
  66.140 -    String ts = "{" + ((WordData) words.elementAt(pos)).text + "}";
  66.141 -    if (((WordData)words.elementAt(pos)).fieldName.length() > 0) {
  66.142 -      ts += " WITHIN " + ((WordData)words.elementAt(pos)).fieldName;
  66.143 -      }
  66.144 -    return ts;
  66.145 -    }
  66.146 -
  66.147 -
  66.148 -  // getQuery returns a formatted, ready-to-run ConText query.
  66.149 -  // In order to satisfy the altavista syntax, we have to generate
  66.150 -  // the following query:
  66.151 -
  66.152 -  //  ( req1 & req2 & ... reqN)
  66.153 -  //   | ( (req1 & req2 & .. reqN)*10*10
  66.154 -  //       & (req1, req2 , ... reqN , opt1 , opt2 , ... optN) )
  66.155 -  //   NOT (not1 | not2 | ... notN)
  66.156 -
  66.157 -  public static String getQuery () {
  66.158 -    String tempString = "";
  66.159 -
  66.160 -    String boolOp = "";   //  AND, OR, NOT operator
  66.161 -    int reqCount;         //  Count of required words
  66.162 -    int optCount;         //  Count of optional words
  66.163 -    int notCount;         //  Count of not wanted words
  66.164 -    int i;                //  Loop control
  66.165 -
  66.166 -    boolOp = "";
  66.167 -    reqCount = reqWords.size();
  66.168 -    optCount = optWords.size();
  66.169 -    notCount = notWords.size();
  66.170 -
  66.171 -    if (reqWords.size() > 0) {
  66.172 -      // Required words - first time
  66.173 -
  66.174 -      tempString = "((";
  66.175 -      for (i = 0; i < reqCount; i++) {
  66.176 -        tempString += boolOp + getWord(reqWords,i);
  66.177 -        boolOp = " & ";
  66.178 -        }
  66.179 -
  66.180 -      if (reqCount > 0 && optCount > 0) {
  66.181 -        tempString += ") | ";
  66.182 -        tempString += "((";
  66.183 -        // Required words - second time (anded with optional words)
  66.184 -        boolOp = "";
  66.185 -        for (i = 0; i < reqCount; i++) {
  66.186 -          tempString += boolOp + getWord(reqWords,i);
  66.187 -          boolOp = " & ";
  66.188 -          }
  66.189 -        tempString += ")*10*10";
  66.190 -
  66.191 -        tempString += " & (";
  66.192 -
  66.193 -        // Required words - third time as part of accumulate
  66.194 -        boolOp = "";
  66.195 -        for (i = 0; i < reqCount; i++) {
  66.196 -          tempString += boolOp + getWord(reqWords,i);
  66.197 -          // tempString += "*2";// Uncomment to double weight of required words
  66.198 -          boolOp = " , ";
  66.199 -          }
  66.200 -        }
  66.201 -      }
  66.202 -    else
  66.203 -      tempString = "(";
  66.204 -
  66.205 -    // Optional words
  66.206 -    // Don't reset boolOp
  66.207 -    for (i = 0; i < optCount; i++) {
  66.208 -      tempString += boolOp + getWord(optWords,i);
  66.209 -      boolOp = " , ";  // Accumulate
  66.210 -      }
  66.211 -
  66.212 -    if (reqCount > 0)
  66.213 -      if (optCount > 0 )
  66.214 -        tempString += ")) )";
  66.215 -      else
  66.216 -        tempString += ")) ";
  66.217 -    else
  66.218 -      tempString += ")";
  66.219 -
  66.220 -    if (tempString.length() > 0) 
  66.221 -      boolOp = " NOT ";
  66.222 -    else
  66.223 -      boolOp = "";
  66.224 -
  66.225 -    for (i = 0; i < notCount; i++) {
  66.226 -      tempString += boolOp + getWord(notWords,i);
  66.227 -      boolOp = " NOT ";
  66.228 -      }
  66.229 -    return tempString;
  66.230 -  }
  66.231 -}
  66.232 -/
  66.233 -
  66.234 -
  66.235 --- Creation of Schedules
  66.236 -
  66.237 -Prompt Creating Schedules for Index Synchronization AND Optimization
  66.238 -DECLARE
  66.239 -   schedule_id_        NUMBER;
  66.240 -   action_             VARCHAR2(200); 
  66.241 -   description_        VARCHAR2(200);
  66.242 -   execution_date_     DATE := SYSDATE + 30/86400;
  66.243 -   plan_               VARCHAR2(200);
  66.244 -   msg_                VARCHAR2(2000);
  66.245 -   schedule_method_id_ NUMBER;
  66.246 -   start_date_         DATE := SYSDATE;
  66.247 -   dummy_              NUMBER;               
  66.248 -
  66.249 -   CURSOR check_exist IS
  66.250 -   SELECT 1
  66.251 -   FROM BATCH_SCHEDULE_TAB
  66.252 -   WHERE SCHEDULE_NAME = description_;
  66.253 -   	
  66.254 -BEGIN     
  66.255 -   --------------- Sync Index
  66.256 -   action_ := 'Text_Search_Indexer_API.Sync_Index';       
  66.257 -   description_ := 'Synchronize Context Indexes';
  66.258 -   plan_ := 'EVERY 00:10'; 
  66.259 -   
  66.260 -   OPEN check_exist;
  66.261 -   FETCH check_exist INTO dummy_;
  66.262 -   IF (check_exist%NOTFOUND) THEN
  66.263 -      msg_ := Message_SYS.Construct('');
  66.264 -      Message_SYS.Add_Attribute (msg_, 'METHOD_NAME', 'Text_Search_Indexer_API.Sync_Index');
  66.265 -      Message_SYS.Add_Attribute (msg_, 'DESCRIPTION', 'Synchronize Context Indexes');
  66.266 -      Message_SYS.Add_Attribute (msg_, 'MODULE', 'TXTSER');
  66.267 -      Message_SYS.Add_Attribute (msg_, 'SINGLE_EXECUTION_DB', 'FALSE');
  66.268 -      Message_SYS.Add_Attribute (msg_, 'ARGUMENT_TYPE_DB', 'ATTRIBUTE');
  66.269 -      Batch_SYS.Register_Batch_Schedule_Method (schedule_method_id_, msg_);
  66.270 -      Batch_SYS.New_Batch_Schedule (schedule_id_, execution_date_, start_date_, NULL, description_, action_, 'TRUE', plan_);
  66.271 -   END IF;
  66.272 -   CLOSE check_exist;
  66.273 -
  66.274 -   
  66.275 -
  66.276 -   --------------- Optimize Index
  66.277 -   action_ := 'Text_Search_Indexer_API.Optimize_Index';       
  66.278 -   description_ := 'Optimize Context Indexes';
  66.279 -   plan_ := 'WEEKLY ON sun AT 00:00';
  66.280 -   schedule_method_id_ := NULL;
  66.281 -   
  66.282 -   OPEN check_exist;
  66.283 -   FETCH check_exist INTO dummy_;
  66.284 -   IF (check_exist%NOTFOUND) THEN
  66.285 -      msg_ := Message_SYS.Construct('');
  66.286 -      Message_SYS.Add_Attribute (msg_, 'METHOD_NAME', 'Text_Search_Indexer_API.Optimize_Index');
  66.287 -      Message_SYS.Add_Attribute (msg_, 'DESCRIPTION', 'Optimize Context Indexes');
  66.288 -      Message_SYS.Add_Attribute (msg_, 'MODULE', 'TXTSER');
  66.289 -      Message_SYS.Add_Attribute (msg_, 'SINGLE_EXECUTION_DB', 'FALSE');
  66.290 -      Message_SYS.Add_Attribute (msg_, 'ARGUMENT_TYPE_DB', 'ATTRIBUTE');
  66.291 -      Batch_SYS.Register_Batch_Schedule_Method (schedule_method_id_, msg_);
  66.292 -      Batch_SYS.New_Batch_Schedule (schedule_id_, execution_date_, start_date_, NULL, description_, action_, 'TRUE', plan_);
  66.293 -   END IF;
  66.294 -   CLOSE check_exist;
  66.295 -   
  66.296 -   ---------------- Delete old Search Results         
  66.297 -   -- To run Text_Search_API.Delete_Old_Results with a value for save_days that 
  66.298 -   -- isn't default, create a parameters_ string to pass to New_Batch_Schedule.
  66.299 -   action_ := 'Text_Search_API.Delete_Old_Results';       
  66.300 -   description_ := 'Delete old Text Search Results';
  66.301 -   plan_ := 'DAILY AT 00:00';
  66.302 -   schedule_method_id_ := NULL;
  66.303 -  
  66.304 -   OPEN check_exist;
  66.305 -   FETCH check_exist INTO dummy_;
  66.306 -   IF (check_exist%NOTFOUND) THEN
  66.307 -      msg_ := Message_SYS.Construct('');
  66.308 -      Message_SYS.Add_Attribute (msg_, 'METHOD_NAME', 'Text_Search_API.Delete_Old_Results');
  66.309 -      Message_SYS.Add_Attribute (msg_, 'DESCRIPTION', 'Delete old Text Search Results');
  66.310 -      Message_SYS.Add_Attribute (msg_, 'MODULE', 'TXTSER');
  66.311 -      Message_SYS.Add_Attribute (msg_, 'SINGLE_EXECUTION_DB', 'FALSE');
  66.312 -      Message_SYS.Add_Attribute (msg_, 'ARGUMENT_TYPE_DB', 'ATTRIBUTE');
  66.313 -      Batch_SYS.Register_Batch_Schedule_Method (schedule_method_id_, msg_);
  66.314 -      Batch_SYS.New_Batch_Schedule (schedule_id_,execution_date_, start_date_, NULL, description_, action_, 'TRUE', plan_);
  66.315 -   END IF;
  66.316 -   CLOSE check_exist;
  66.317 -
  66.318 - END;
  66.319 -/
  66.320 -
  66.321 -COMMIT;
  66.322 -/
  66.323 -
  66.324 -
  66.325 -