DBA Data[Home] [Help]

PACKAGE BODY: APPS.CZ_MODEL_CONVERT

Source


1 PACKAGE BODY cz_model_convert AS
2    /* $Header: czmdlconb.pls 120.44.12020000.3 2012/12/17 01:52:34 spitre ship $ */
3 
4   g_pkg_name constant VARCHAR2(30) := 'cz_model_convert';
5   v_ndebug INTEGER := 1;
6   v_model_conversion_set_id NUMBER;
7 
8   PS_TYPE_FEATURE        CONSTANT  NUMBER:= 261;
9   PS_TYPE_OPTION         CONSTANT  NUMBER:= 262;
10   PS_TYPE_COMPONENT      CONSTANT  NUMBER:= 259;
11   PS_TYPE_TOTAL          CONSTANT  NUMBER:= 272;
12   PS_TYPE_RESOURCE       CONSTANT  NUMBER:= 273;
13   PS_TYPE_BOM_MODEL      CONSTANT  NUMBER:= 436;
14   PS_TYPE_REFERENCE  CONSTANT  NUMBER:= 263;
15   PS_TYPE_BOM_OPTION_CLASS  CONSTANT     NUMBER:= 437;
16   PS_TYPE_BOM_STD_ITEM      CONSTANT     NUMBER:= 438;
17   RULE_CLASS_DEFAULT        CONSTANT     NUMBER:= 1;
18   RULE_CLASS_CONSTRAINT     CONSTANT     NUMBER:= 0;
19   FEATURE_TYPE_INTEGER      CONSTANT     NUMBER:= 1;
20   FEATURE_TYPE_FLOAT        CONSTANT     NUMBER:= 2;
21   FEATURE_TYPE_BOOLEAN      CONSTANT     NUMBER:= 3;
22   FEATURE_TYPE_TEXT         CONSTANT     NUMBER:= 4;
23   FEATURE_TYPE_LIST_OF_OPTIONS CONSTANT  NUMBER:=0;
24   NODE_INSTANTIABILITY_MULTIPLE  CONSTANT     NUMBER:=4;
25   RULE_TYPE_COMPAT_TABLE         CONSTANT     NUMBER:=24;
26   RULE_TYPE_DESIGN_CHART_RULE  CONSTANT     NUMBER:=30;
27   RULE_TEMPLATE_FREEFORM_RULE  CONSTANT     NUMBER:=200;
28   RULE_TYPE_CONFIGURATION_EXT  CONSTANT     NUMBER:=300;
29 
30   USE_BOM_DEFAULT_QTY  VARCHAR2(6):='TRUE';
31   INTEGER_MIN_VAL NUMBER(10) := -2147483648;
32   SOLVER_MAX_DOUBLE NUMBER := 1E125;
33   INTEGER_MAX_VALUE NUMBER(10) := 2147483647;
34 
35 
36   OPERATOR_ADDSTO        CONSTANT  NUMBER:= 712;
37   OPERATOR_SUBTRACTSFROM CONSTANT  NUMBER:= 714;
38 
39   --Table to store the ID's of rows affected by an Update statement .
40   TYPE t_ref IS TABLE OF NUMBER
41       INDEX BY BINARY_INTEGER;
42 
43   TYPE t_ref_num IS TABLE OF VARCHAR2(1000)
44       INDEX BY BINARY_INTEGER;
45 
46   v_cz_num_tbl t_ref;
47   v_cz_ids_tbl t_ref;
48   v_cz_names_tbl t_ref_num;
49 
50 
51   TYPE t_cz_expression_nodes IS TABLE OF cz_expression_nodes%ROWTYPE INDEX BY BINARY_INTEGER;
52   v_cz_expression_nodes t_cz_expression_nodes;
53   v_cz_expr_node_count NUMBER(10);
54 
55   TYPE t_cz_rules IS TABLE OF cz_rules%ROWTYPE INDEX BY BINARY_INTEGER;
56   v_cz_rules  t_cz_rules ;
57   v_cz_rule_count NUMBER(10);
58 
59 
60 -- used for getting the next rule id since rule sequence is incremented by 20 every time
61   last_id_allocated  NUMBER := NULL;
62   next_id_to_use     NUMBER := 0;
63   CZ_SEQUENCE_INCREMENT number :=20;
64 
65 
66   --procedure to log debug messages to conc request output file / cz_db_logs
67   PROCEDURE log_msg(p_caller IN VARCHAR2,   p_ndebug IN NUMBER,   p_msg IN VARCHAR2,   p_level IN NUMBER) IS
68   l_msg varchar2(2000):=NULL;
69   l_api_name constant VARCHAR2(30) := 'log_msg';
70   BEGIN
71     IF fnd_global.conc_request_id > 0 THEN
72       fnd_file.PUT_LINE(fnd_file.LOG,   p_msg);
73     END IF;
74     cz_utils.log_report(g_pkg_name,   p_caller,   p_ndebug,   p_msg,   p_level);
75   EXCEPTION WHEN OTHERS THEN
76     l_msg := 'Fatal error in ' || l_api_name || '.' || v_ndebug || ': ' || SUBSTR(sqlerrm,   1,   900);
77     log_msg(l_api_name,   v_ndebug,   l_msg,   fnd_log.level_unexpected);
78     RAISE;
79   END log_msg;
80 
81   --procedure to log messages to  cz_db_logs for use by the model conversion xml publisher report
82   PROCEDURE displayMessage(p_urgency In NUMBER,p_model_id IN NUMBER, p_object_type IN VARCHAR2 ,p_object_id IN NUMBER
83                            ,p_caller IN VARCHAR2,msg VARCHAR2
84                            ,token1 IN VARCHAR2 DEFAULT NULL, value1 IN VARCHAR2 DEFAULT NULL
85                            ,token2 IN VARCHAR2 DEFAULT NULL, value2 IN VARCHAR2 DEFAULT NULL
86                            ,token3 IN VARCHAR2 DEFAULT NULL, value3 IN VARCHAR2 DEFAULT NULL
87 			   ,p_element_id IN NUMBER DEFAULT NULL
88 			   ,p_element_type IN NUMBER DEFAULT NULL) AS
89   PRAGMA AUTONOMOUS_TRANSACTION;
90   l_msg varchar2(2000):=NULL;
91   l_api_name constant VARCHAR2(30) := 'displayMessage';
92   BEGIN
93     IF msg IS NOT NULL THEN
94             IF token3 IS NOT NULL THEN
95                     l_msg:=cz_utils.get_text(msg,token1, value1,token2, value2,token3, value3);
96                     ELSE IF token2 IS NOT NULL THEN
97                             l_msg:=cz_utils.get_text(msg,token1, value1,token2, value2);
98 
99                             ELSE IF token1 IS NOT NULL THEN
100                                     l_msg:=cz_utils.get_text(msg,token1, value1);
101                                  ELSE
102                                     l_msg:=cz_utils.get_text(msg);
103                             END IF;
104                     END IF;
105             END IF;
106 
107         INSERT INTO  CZ_DB_LOGS (LOGTIME, LOGUSER, URGENCY, CALLER  ,  MESSAGE, MODEL_ID , OBJECT_TYPE ,OBJECT_ID,MODEL_CONVERSION_SET_ID,ELEMENT_ID,ELEMENT_TYPE)
108                       VALUES(SYSDATE, USER   , p_urgency, p_caller,  l_msg   , p_model_id , p_object_type ,p_object_id,v_model_conversion_set_id,p_element_id,p_element_type);
109 
110     END IF;
111     /*log_msg(p_caller   ,   v_ndebug,   l_msg,   1   );*/
112 
113 
114     COMMIT;
115 
116    EXCEPTION WHEN OTHERS THEN
117     l_msg := 'Fatal error in ' || l_api_name || '.' || v_ndebug || ': ' || SUBSTR(sqlerrm,   1,   900);
118     log_msg(l_api_name,   v_ndebug,   l_msg,   fnd_log.level_unexpected);
119     RAISE;
120    END;
121 
122 
123   FUNCTION findOrCreateRuleFolder(p_dev_project_id IN cz_devl_projects.devl_project_id%TYPE) RETURN cz_rules.rule_folder_id%TYPE AS
124   p_rule_folderid cz_rules.rule_folder_id%TYPE;
125   p_parent_rule_fldr cz_rules.rule_folder_id%TYPE;
126 
127   CURSOR c_rule_fld IS
128   SELECT rule_folder_id
129   FROM cz_rule_folders
130   WHERE deleted_flag ='0'
131    AND name = 'Rules Generated by Model Conversion'
132    AND devl_project_id = p_dev_project_id;
133   l_msg VARCHAR2(2000);
134   l_api_name constant VARCHAR2(30) := 'findOrCreateRuleFolder';
135   BEGIN
136     OPEN c_rule_fld;
137     FETCH c_rule_fld
138     INTO p_rule_folderid;
139     CLOSE c_rule_fld;
140     IF p_rule_folderid IS NULL THEN
141       --Create a rule folder with name "Rules Generated by Model Conversion"  populate  rulefolderID
142       -- INSERTING into
143 
144 
145       select rule_folder_id into p_parent_rule_fldr from cz_rule_folders where  devl_project_id=p_dev_project_id and deleted_flag='0' and parent_rule_folder_id is null;
146 
147 
148       INSERT
149       INTO cz_rule_folders(rule_folder_id,   name,   devl_project_id,   tree_seq,   deleted_flag,   folder_type,   effective_usage_mask,   persistent_rule_folder_id,   object_type,   disabled_flag , parent_rule_folder_id)
150       VALUES(cz_rule_folders_s.nextval,   'Rules Generated by Model Conversion',   p_dev_project_id,   '1',   '0',   '0',   '0000000000000000',   cz_rule_folders_s.nextval,   'RFL',   '0' , p_parent_rule_fldr)
151       RETURNING rule_folder_id INTO p_rule_folderid;
152 
153     END IF;
154     RETURN p_rule_folderid;
155   EXCEPTION WHEN OTHERS THEN
156     l_msg := 'Fatal error in ' || l_api_name || '.' || v_ndebug || ': ' || SUBSTR(sqlerrm,   1,   900);
157     log_msg(l_api_name,   v_ndebug,   l_msg,   fnd_log.level_unexpected);
158     RAISE;
159   END findOrCreateRuleFolder;
160 
161   --  procedure to populate CZ tables with data in temporary tables v_cz_rules and v_cz_expression_nodes
162   PROCEDURE populate_cz_tables (commit_all boolean default false) AS
163   l_msg VARCHAR2(2000);
164   l_api_name constant VARCHAR2(30) := 'populate_cz_expression_table';
165   BEGIN
166 
167     IF ((v_cz_rules.LAST IS NOT NULL and v_cz_rules.LAST >20) OR commit_all ) THEN
168 
169          IF (v_cz_rules.LAST IS NOT NULL) THEN
170             for v_cz_rules_count IN v_cz_rules.FIRST .. v_cz_rules.LAST  Loop
171                 begin
172                   INSERT INTO cz_localized_texts (localized_str, intl_text_id, deleted_flag, language, source_lang, model_id, seeded_flag, persistent_intl_text_id)
173                   VALUES (v_cz_rules(v_cz_rules_count).name, v_cz_rules(v_cz_rules_count).reason_id, 0, 'US', 'US', v_cz_rules(v_cz_rules_count).devl_project_id, 0, v_cz_rules(v_cz_rules_count).reason_id);
174                 exception when others then
175                         null;
176                 end;
177             END LOOP;
178             -- use FORALL statement for bulk insert.
179             forall v_cz_rules_count IN v_cz_rules.FIRST .. v_cz_rules.LAST
180             INSERT INTO cz_rules
181             VALUES v_cz_rules(v_cz_rules_count);
182           END IF;
183             -- use FORALL statement for bulk insert.
184           IF (v_cz_expression_nodes.LAST IS NOT NULL) THEN
185             for v_cz_expr_nodes_count IN v_cz_expression_nodes.FIRST .. v_cz_expression_nodes.LAST loop
186                 v_cz_expression_nodes(v_cz_expr_nodes_count).seeded_flag:=0;
187                 v_cz_expression_nodes(v_cz_expr_nodes_count).deleted_flag:=0;
188             end loop;
189             forall v_cz_expr_nodes_count IN v_cz_expression_nodes.FIRST .. v_cz_expression_nodes.LAST
190             INSERT INTO cz_expression_nodes
191             VALUES v_cz_expression_nodes(v_cz_expr_nodes_count);
192             v_cz_expression_nodes.DELETE;
193            END IF;
194           IF (v_cz_rules.LAST IS NOT NULL) THEN
195 
196             FOR v_cz_rules_count IN v_cz_rules.FIRST .. v_cz_rules.LAST LOOP
197                  IF v_cz_rules(v_cz_rules_count).presentation_flag=0 THEN
198                       cz_rule_text_gen.parse_rules( v_cz_rules(v_cz_rules_count).devl_project_id,   v_cz_rules(v_cz_rules_count).rule_id);
199                  END IF;
200             END LOOP;
201             v_cz_rules.DELETE;
202            END IF;
203 
204             v_cz_rule_count:=0;
205             v_cz_expr_node_count:=0;
206     END IF;
207 
208 
209 
210   EXCEPTION
211   WHEN others THEN
212     l_msg := 'Fatal error in ' || l_api_name || '.' || v_ndebug || ': ' || SUBSTR(sqlerrm,   1,   900);
213     log_msg(l_api_name,   v_ndebug,   l_msg,   fnd_log.level_unexpected);
214     RAISE;
215   END populate_cz_tables;
216 
217 
218 
219  PROCEDURE UPG_UI_CONT_TYPE_TMPLS(p_devl_project_id IN NUMBER) IS
220   TYPE num_tbl_type IS TABLE OF NUMBER;
221   l_cont_types_tbl     num_tbl_type := num_tbl_type(633,635,189,565,622, 638,636,637);
222   l_template_ids_tbl   num_tbl_type := num_tbl_type(1009,1020,301,221,572, 1017,1016,1015);
223   l_msg VARCHAR2(2000);
224   l_api_name constant VARCHAR2(30) := 'UPG_UI_CONT_TYPE_TMPLS';
225  BEGIN
226 
227   FOR i IN(SELECT ui_def_id FROM CZ_UI_DEFS
228             WHERE ui_style='7' AND seeded_flag='0' AND deleted_flag='0' and devl_project_id=p_devl_project_id)
229    LOOP
230     FORALL j IN 1..l_cont_types_tbl.COUNT
231       INSERT INTO CZ_UI_CONT_TYPE_TEMPLS
232       (
233        UI_DEF_ID
234        ,CONTENT_TYPE
235        ,TEMPLATE_ID
236        ,MASTER_TEMPLATE_FLAG
237        ,TEMPLATE_UI_DEF_ID
238        ,WRAP_TEMPLATE_FLAG
239        ,DELETED_FLAG
240        ,SEEDED_FLAG
241        )
242       SELECT
243        i.ui_def_id
244        ,l_cont_types_tbl(j)
245        ,l_template_ids_tbl(j)
246        ,'0'
247        ,0
248        ,'0'
249        ,'0'
250        ,'0'
251       FROM dual
252       WHERE NOT EXISTS
253       (SELECT NULL FROM CZ_UI_CONT_TYPE_TEMPLS
254         WHERE ui_def_id=i.ui_def_id AND content_type=l_cont_types_tbl(j));
255    END LOOP;
256 
257 
258 
259       --   Get the cz_ui_cont_type_templs.template_Id for content_type 543
260       --   Create two records with template_id from i) and content_types 560 and 561
261       --   Delete the record with content_type 543
262     FOR c_ct IN(SELECT c.*
263                 FROM cz_ui_defs ui,
264                   cz_ui_cont_type_templs c
265                 WHERE ui.deleted_flag = '0'
266                  AND ui.devl_project_id = p_devl_project_id
267                  AND c.ui_def_id = ui.ui_def_id
268                  AND c.deleted_flag = '0'
269                  AND content_type = 543
270                  AND NOT EXISTS
271                   (SELECT 1
272                    FROM cz_ui_cont_type_templs
273                    WHERE ui_def_id = ui.ui_def_id
274                    AND content_type =560)) LOOP
275         INSERT INTO cz_ui_cont_type_templs (UI_DEF_ID,CONTENT_TYPE,TEMPLATE_ID,DELETED_FLAG,CREATED_BY,CREATION_DATE,LAST_UPDATED_BY,
276         LAST_UPDATE_DATE,LAST_UPDATE_LOGIN,MASTER_TEMPLATE_FLAG,SEEDED_FLAG,TEMPLATE_UI_DEF_ID,WRAP_TEMPLATE_FLAG)
277         VALUES
278         (
279         c_ct.UI_DEF_ID,560,c_ct.TEMPLATE_ID,c_ct.DELETED_FLAG,c_ct.CREATED_BY,c_ct.CREATION_DATE,c_ct.LAST_UPDATED_BY,
280         c_ct.LAST_UPDATE_DATE,c_ct.LAST_UPDATE_LOGIN,c_ct.MASTER_TEMPLATE_FLAG,c_ct.SEEDED_FLAG,c_ct.TEMPLATE_UI_DEF_ID,c_ct.WRAP_TEMPLATE_FLAG
281         );
282 
283      END LOOP;
284 
285      UPDATE cz_ui_cont_type_templs uiout set content_type=561
286                 WHERE
287                  ui_def_id  IN (select ui.ui_def_id from cz_ui_defs ui WHERE ui.deleted_flag = '0' AND ui.devl_project_id = p_devl_project_id)
288                  AND deleted_flag = '0'
289                  AND content_type = 543
290                  AND NOT EXISTS
291                 (SELECT NULL FROM CZ_UI_CONT_TYPE_TEMPLS
292                   WHERE ui_def_id=uiout.ui_def_id AND content_type=561) ;
293 
294   EXCEPTION WHEN OTHERS THEN
295     l_msg := 'Fatal error in ' || l_api_name || '.' || v_ndebug || ': ' || SUBSTR(sqlerrm,   1,   900);
296     log_msg(l_api_name,   v_ndebug,   l_msg,   fnd_log.level_unexpected);
297     RAISE;
298 
299   END UPG_UI_CONT_TYPE_TMPLS;
300 
301 
302 
303   FUNCTION GET_UI_ELEMENT_ID(inPageElemID IN VARCHAR2) RETURN NUMBER is
304   l_qualified  VARCHAR2(2000) := ' ';
305   count1 number:=0;
306 
307   BEGIN
308    l_qualified:=inPageElemID;
309    count1:=instr(inPageElemID,'_') ;
310    while (count1>0 )loop
311      l_qualified:=substr(l_qualified,count1+1);
312      count1:=instr(l_qualified,'_');
313    end loop;
314 
315 
316    RETURN to_number(l_qualified);
317 
318   EXCEPTION
319     WHEN others THEN
320     RAISE;
321   END GET_UI_ELEMENT_ID;
322 
323 
324 
325 
326   --This procedure removes the effectivity information from Total, Resource, Integer Feat, Decimal Feat, and Virtual Component.
327   PROCEDURE processUI(p_dev_project_id IN cz_devl_projects.devl_project_id%TYPE) AS
328   l_msg VARCHAR2(2000);
329   l_api_name constant VARCHAR2(30) := 'processUI';
330   BEGIN
331 
332 
333 
334    --DHTML UI's will not be supported in fusion .Mark these as deleted
335 
336     UPDATE cz_ui_defs SET deleted_flag='1' WHERE ui_style = 0
337          AND deleted_flag ='0'
338          AND devl_project_id =p_dev_project_id
339          RETURNING ui_def_id BULK COLLECT INTO v_cz_ids_tbl;
340 
341     IF v_cz_ids_tbl.COUNT >0 THEN
342      FOR i in v_cz_ids_tbl.FIRST .. v_cz_ids_tbl.LAST
343      LOOP
344        displayMessage(2,p_dev_project_id , 'UI' ,v_cz_ids_tbl(i),l_api_name,'CZ_CNV_WARN_DHTML_DELETE');
345      END LOOP;
346     v_cz_ids_tbl.DELETE;
347     END IF;
348 
349 --As Functional Companions are not supported in FCE models, Model Conversion should warn on detecting them.
350 --Bug 6489541
351     FOR v_ui IN(SELECT DISTINCT a.ui_def_id
352                        FROM cz_ui_nodes a,
353                             cz_ui_defs ui
354                        WHERE a.deleted_flag = '0'
355                        AND ui.deleted_flag = '0'
356                        AND a.ui_def_id = ui.ui_def_id
357                        AND ui.devl_project_id = p_dev_project_id
358                        AND a.func_comp_id IS NOT NULL) LOOP
359           displayMessage(2,p_dev_project_id , 'UI' ,v_ui.ui_def_id,l_api_name,'CZ_CNV_WARN_FC_NOT_SUPPORTED');
360     END LOOP;
361 
362 
363 
364    --Display message "UI will use the default Icons, Message Templates, and Utility Templates for functions specific to Fusion Engine. These can be overridden in the UI Definition."
365 
366     FOR v_ui IN
367       (SELECT ui.ui_def_id
368        FROM cz_ui_defs ui
369        WHERE  ui.deleted_flag ='0'
370        AND ui.devl_project_id = p_dev_project_id)
371     LOOP
372 
373       displayMessage(3,p_dev_project_id , 'UI' ,v_ui.ui_def_id,l_api_name,'CZ_CNV_ADV_DEFAULT_UIS');
374     END LOOP;
375 
376     --Update UI's to use the new content templates
377     UPG_UI_CONT_TYPE_TMPLS(p_dev_project_id);
378 
379 
380 
381     FOR v_ui1 IN
382       (
383         SELECT DISTINCT * FROM(
384                 SELECT  text_str,
385                   te.template_id,
386                   'NodeUnsatisfied' lceprop,
387                   'UserInputRequired' fceprop,
388 		  te.element_id ,
389                   te.element_type
390                 FROM cz_ui_cont_type_templs c, cz_ui_templates t , cz_signatures s  ,cz_intl_texts text , cz_ui_template_elements te ,cz_ui_defs ui
391                 WHERE c.ui_def_id = ui.ui_def_id
392                   AND   c.template_id = t.template_id
393                   AND   c.content_type = s.signature_id
394                   AND   c.deleted_flag = '0'
395                   AND   t.deleted_flag = '0'
396                   AND   te.deleted_flag = '0'
397                   AND   te.element_type = 8  -- is a text element
398                   and text.ui_page_id=t.template_id AND UPPER(text_str) LIKE '%'||fnd_global.local_chr(38)||'NODEUNSATISFIED%'
399                   and text.deleted_flag='0'
400                   and c.TEMPLATE_UI_DEF_ID = t.UI_DEF_ID
401                   and s.signature_type IN ('SES','UCO')
402                   AND t.ui_def_id=c.template_ui_def_id
403                   and t.template_id=te.template_id
404                   and te.element_id=text.intl_text_id
405                   and ui.deleted_flag ='0'
406                   and text.ui_def_id = t.ui_def_id
407                   AND ui.devl_project_id = p_dev_project_id
408 		  AND t.ui_def_id=te.ui_def_id
409 
410                 UNION ALL
411                 SELECT  text_str,
412                   te.template_id,
413                   'Unsatisfied' lceprop,
414                   'UserInputRequired' fceprop,
415 		  te.element_id ,
416                   te.element_type
417                 FROM cz_ui_cont_type_templs c, cz_ui_templates t , cz_signatures s  ,cz_intl_texts text, cz_ui_template_elements te , cz_ui_defs ui
418                 WHERE c.ui_def_id = ui.ui_def_id
419                   AND   c.template_id = t.template_id
420                   AND   c.content_type = s.signature_id
421                   AND   c.deleted_flag = '0'
422                   AND   t.deleted_flag = '0'
423                   AND   te.deleted_flag = '0'
424                   AND   te.element_type = 8  -- is a text element
425                   and text.ui_page_id=t.template_id AND UPPER(text_str) LIKE '%'||fnd_global.local_chr(38)||'UNSATISFIED%'
426                   and text.deleted_flag='0'
427                   and c.TEMPLATE_UI_DEF_ID = t.UI_DEF_ID
428                   and s.signature_type IN ('SES','UCO')
429                   AND t.ui_def_id=c.template_ui_def_id
430                   and t.template_id=te.template_id
431                   and te.element_id=text.intl_text_id
432                   and ui.deleted_flag ='0'
433                   and text.ui_def_id = t.ui_def_id
434                   AND ui.devl_project_id = p_dev_project_id
435 		  AND t.ui_def_id=te.ui_def_id
436 
437                 UNION ALL
438                 SELECT  text_str,
439                   te.template_id,
440                   'SubtreeUnsatisfied' lceprop,
441                   'UserInputRequiredInSubtree' fceprop,
442 		  te.element_id ,
443                   te.element_type
444                 FROM cz_ui_cont_type_templs c, cz_ui_templates t , cz_signatures s  ,cz_intl_texts text, cz_ui_template_elements te , cz_ui_defs ui
445                 WHERE c.ui_def_id = ui.ui_def_id
446                   AND   c.template_id = t.template_id
447                   AND   c.content_type = s.signature_id
448                   AND   c.deleted_flag = '0'
449                   AND   t.deleted_flag = '0'
450                   AND   te.deleted_flag = '0'
451                   AND   te.element_type = 8  -- is a text element
452                   and text.ui_page_id=t.template_id AND UPPER(text_str) LIKE '%'||fnd_global.local_chr(38)||'SUBTREEUNSATISFIED%'
453                   and text.deleted_flag='0'
454                   and c.TEMPLATE_UI_DEF_ID = t.UI_DEF_ID
455                   and s.signature_type IN ('SES','UCO')
456                   AND t.ui_def_id=c.template_ui_def_id
457                   and t.template_id=te.template_id
458                   and te.element_id=text.intl_text_id
459                   and ui.deleted_flag ='0'
460                   and text.ui_def_id = t.ui_def_id
461                   AND ui.devl_project_id = p_dev_project_id
462 		  AND t.ui_def_id=te.ui_def_id
463         )
464 
465       )
466     LOOP
467       --Refer TD section 4.1.5.2
468       --UI Has Text Expression  that references a  System Property that was redefined for FCE(
469       --Unsatisfied (session),NodeUnsatisfied,SubtreeUnsatisfied)
470       --Unsatisfied becomes UserInputRequired()
471       --SubtreeUnsatisfied becomes UserInputRequiredInSubtree
472       --Session.Unsatisfied.UserInputRequired
473        displayMessage(1,p_dev_project_id , 'TEMPLATE' ,v_ui1.template_id,l_api_name,'CZ_CNV_FAIL_REDEF_SYSPROP','LCEPROPERTYNAME',
474                       v_ui1.lceprop,'EXPRESSION_OR_CONDITION' ,' Text Expression ' ,'FCEPROPERTYNAME' ,v_ui1.fceprop
475                      ,v_ui1.element_id , v_ui1.element_type);
476     END LOOP;
477 
478 
479 
480     FOR v_ui IN
481       (
482         SELECT DISTINCT tempel.element_id ,te.template_id,
483           decode(ex.template_id,   820,   'NodeUnsatisfied',   836,   'Unsatisfied',   849,   'SubtreeUnsatisfied') lceprop,
484           decode(ex.template_id,   820,   'InputRequired',   836,   'InputRequired',   849,   'InputRequiredInSubtree') fceprop,
485           ru.name,
486           ui.ui_def_id,
487           ru.ui_page_element_id,
488           tempel.element_type
489         FROM cz_expression_nodes ex,
490           cz_rules ru,
491           cz_ui_defs ui ,
492           cz_ui_cont_type_templs ct,
493           cz_ui_defs ui2,
494           cz_ui_templates te ,cz_ui_template_elements tempel
495         WHERE ex.template_id IN(820,   836,   849)
496          AND ex.deleted_flag = '0'
497          AND ex.rule_id = ru.rule_id
498          AND ru.deleted_flag = '0'
499          AND ui.deleted_flag = '0'
500          AND ui2.deleted_flag = '0'
501          AND ru.ui_def_id = ui.ui_def_id
502          AND ui.ui_def_id = te.ui_def_id
503          and te.template_id=ct.template_id
504          and ct.ui_def_id=ui2.ui_def_id
505          and ui2.devl_project_id = p_dev_project_id
506          and tempel.template_id=te.template_id
507          AND tempel.ui_def_id = te.ui_def_id
508 
509       )
510     LOOP
511       --Refer TD section 4.1.5.2
512       --UI Has Display Condition that references a  System Property that was redefined for FCE(
513       --Unsatisfied (session),NodeUnsatisfied,SubtreeUnsatisfied)
514       --Unsatisfied becomes UserInputRequired()
515       --SubtreeUnsatisfied becomes UserInputRequiredInSubtree
516       --Session.Unsatisfied UserInputRequired
517        displayMessage(1,p_dev_project_id , 'TEMPLATE' , v_ui.template_id,l_api_name,'CZ_CNV_FAIL_REDEF_SYSPROP','LCEPROPERTYNAME',
518                       v_ui.lceprop,'EXPRESSION_OR_CONDITION' , ' Display Condition ' ,'FCEPROPERTYNAME' ,v_ui.fceprop ,
519                       v_ui.element_id ,v_ui.element_type );
520     END LOOP;
521 
522 
523 
524 
525 
526     --for each converted UI. Conversion Advisory message is to be displayed
527     --refer section 4.1.5.1
528 
529 
530     FOR v_ui IN
531       (
532         SELECT text_str,
533           cz_intl_texts.ui_def_id,
534           'NodeUnsatisfied' lceprop,
535           'UserInputRequired' fceprop
536         FROM cz_intl_texts,cz_ui_defs
537         WHERE UPPER(text_str) LIKE '%'||fnd_global.local_chr(38)||'NODEUNSATISFIED%'
538          AND model_id = p_dev_project_id
539          AND  cz_intl_texts.ui_def_id=cz_ui_defs.ui_def_id
540          AND  cz_ui_defs.devl_project_id=p_dev_project_id
541          AND  cz_ui_defs.deleted_flag='0'
542 
543         UNION ALL
544         SELECT text_str,
545           cz_intl_texts.ui_def_id,
546           'Unsatisfied' lceprop,
547           'UserInputRequired' fceprop
548         FROM cz_intl_texts,cz_ui_defs
549         WHERE UPPER(text_str) LIKE '%'||fnd_global.local_chr(38)||'UNSATISFIED%'
550          AND model_id = p_dev_project_id
551          AND  cz_intl_texts.ui_def_id=cz_ui_defs.ui_def_id
552          AND  cz_ui_defs.devl_project_id=p_dev_project_id
553          AND  cz_ui_defs.deleted_flag='0'
554 
555         UNION ALL
556         SELECT text_str,
557           cz_intl_texts.ui_def_id,
558           'SubtreeUnsatisfied' lceprop,
559           'UserInputRequiredInSubtree' fceprop
560         FROM cz_intl_texts,cz_ui_defs
561         WHERE UPPER(text_str) LIKE '%'||fnd_global.local_chr(38)||'SUBTREEUNSATISFIED%'
562          AND model_id = p_dev_project_id
563          AND  cz_intl_texts.ui_def_id=cz_ui_defs.ui_def_id
564          AND  cz_ui_defs.devl_project_id=p_dev_project_id
565          AND  cz_ui_defs.deleted_flag='0'
566 
567       )
568     LOOP
569       --Refer TD section 4.1.5.2
570       --UI Has Text Expression  that references a  System Property that was redefined for FCE(
571       --Unsatisfied (session),NodeUnsatisfied,SubtreeUnsatisfied)
572       --Unsatisfied becomes UserInputRequired()
573       --SubtreeUnsatisfied becomes UserInputRequiredInSubtree
574       --Session.Unsatisfied.UserInputRequired
575 
576       --todo to do check this message and see element description .
577       displayMessage(2,p_dev_project_id , 'UIE' ,v_ui.ui_def_id,l_api_name,'CZ_CNV_WARN_REDEF_SYSPROP','LCEPROPERTYNAME' , v_ui.lceprop,'EXPRESSION_OR_CONDITION' ,' Text Expression ' ,'FCEPROPERTYNAME' ,v_ui.fceprop);
578     END LOOP;
579 
580 
581     Update cz_localized_texts
582       set localized_str=REPLACE(REPLACE(REPLACE(localized_str,fnd_global.local_chr(38)||'NODEUNSATISFIED',fnd_global.local_chr(38)||'USERINPUTREQUIRED'),fnd_global.local_chr(38)||'UNSATISFIED%'
583                                 ,fnd_global.local_chr(38)||'USERINPUTREQUIRED'),fnd_global.local_chr(38)||'SUBTREEUNSATISFIED%',fnd_global.local_chr(38)||'USERINPUTREQUIREDINSUBTREE')
584         WHERE UPPER(localized_str) LIKE '%'||fnd_global.local_chr(38)||'%UNSATISFIED%'
585          AND model_id = p_dev_project_id
586          AND ui_def_id IN (  SELECT ui_def_id FROM cz_ui_defs
587                              WHERE deleted_flag='0' AND cz_localized_texts.ui_def_id = ui_def_id
588                              AND devl_project_id=p_dev_project_id
589                            )
590          AND deleted_flag='0';
591 
592 
593 
594     FOR v_ui IN
595       (SELECT DISTINCT template_id , decode(template_id,820,'NodeUnsatisfied' ,836,'Unsatisfied',849,'SubtreeUnsatisfied') lceprop ,
596         decode(template_id,820,'InputRequired' ,836,'InputRequired',849,'InputRequiredInSubtree')  fceprop,ru.name ,ui.ui_def_id, ru.ui_page_element_id
597        FROM cz_expression_nodes ex,
598          cz_rules ru,
599          cz_ui_defs ui
600        WHERE template_id IN(820,    836,    849)
601        AND ex.deleted_flag ='0'
602        AND ex.rule_id = ru.rule_id
603        AND ru.deleted_flag ='0'
604        AND ui.deleted_flag ='0'
605        AND ru.ui_def_id = ui.ui_def_id
606        AND ui.devl_project_id = p_dev_project_id
607        )
608     LOOP
609       --Refer TD section 4.1.5.2
610       --UI Has Display Condition that references a  System Property that was redefined for FCE(
611       --Unsatisfied (session),NodeUnsatisfied,SubtreeUnsatisfied)
612       --Unsatisfied becomes UserInputRequired()
613       --SubtreeUnsatisfied becomes UserInputRequiredInSubtree
614       --Session.Unsatisfied UserInputRequired
615       displayMessage(2,p_dev_project_id , 'UIE' ,GET_UI_ELEMENT_ID(v_ui.ui_page_element_id),l_api_name,'CZ_CNV_WARN_REDEF_SYSPROP','LCEPROPERTYNAME' , v_ui.lceprop,'EXPRESSION_OR_CONDITION' ,' Display Condition ' ,'FCEPROPERTYNAME' ,v_ui.fceprop);
616     END LOOP;
617 
618 
619 /*
620 Mappings Table for System Properties
621 
622 OLD ID New ID OLD Property Name  New Property Name
623 894     979     MaxConnections  DefinitionMaxConnections
624 818     977     MaxInstances    DefinitionMaxInstances
625 812     899     MaxValue        DefinitionMaxValue
626 847     898     MaxValue        DefinitionMaxValue
627 893     978     MinConnections  DefinitionMinConnections
628 817     976     MinInstances    DefinitionMinInstances
629 811     897     MinValue        DefinitionMinValue
630 846     896     MinValue        DefinitionMinValue
631 813     971     MinQuantity     DefinitionMinQuantity
632 814     973     MaxQuantity     DefinitionMaxQuantity
633 815     974     MinSelected     DefinitionMinSelections
634 816     975     MaxSelected     DefinitionMaxSelections
635 
636 */
637 
638 
639     FOR v_ui IN
640       (SELECT template_id , (select name from cz_rules where rule_id=template_id) name , REPLACE(REPLACE((select 'Definition'||name from cz_rules where rule_id=template_id),'DefinitionMaxSelected','DefinitionMaxSelections')
641                              ,'DefinitionMinSelected','DefinitionMinSelections') ruleName,ui.ui_def_id , ru.ui_page_element_id
642        FROM cz_expression_nodes ex,
643          cz_rules ru,
644          cz_ui_defs ui
645        WHERE template_id IN (894,818,812,847,893,817,811,846,813,814,815,816)
646       AND ex.deleted_flag ='0'
647        AND ex.rule_id = ru.rule_id
648        AND ru.deleted_flag ='0'
649        AND ui.deleted_flag ='0'
650        AND ru.ui_def_id = ui.ui_def_id
651        AND ui.devl_project_id = p_dev_project_id
652        )
653     LOOP
654       --Refer TD section 4.1.5.2
655       --If this ui element has a display condition / text expression which reference Min or Max system properties
656       displayMessage(2,p_dev_project_id , 'UIE' ,GET_UI_ELEMENT_ID(v_ui.ui_page_element_id),l_api_name,'CZ_CNV_WARN_DIFF_SYSPROP','PROPERTYNAME_1'
657                      , v_ui.name , 'EXPRESSION_OR_CONDITION', ' Display Condition ' ,'PROPERTYNAME_2', 'Definition'||v_ui.rulename);
658     END LOOP;
659 
660 
661     UPDATE cz_expression_nodes SET template_id= DECODE(template_id,894,979,818,977,812,899,847,898,893,978,817,976,811,897,846,896,813,971,814,973,815,974,816,975,template_id)
662     WHERE expr_node_id IN
663     (
664     SELECT ex.expr_node_id
665            FROM cz_expression_nodes ex,
666              cz_rules ru,
667              cz_ui_defs ui
668            WHERE template_id IN (894,818,812,847,893,817,811,846,813,814,815,816)
669           AND ex.deleted_flag ='0'
670            AND ex.rule_id = ru.rule_id
671            AND ru.deleted_flag ='0'
672            AND ui.deleted_flag ='0'
673            AND ru.ui_def_id = ui.ui_def_id
674            AND ui.devl_project_id = p_dev_project_id
675     );
676 
677 
678 
679 
680 
681     FOR v_ui IN
682       (select intl.ui_def_id , ru.name lceprop ,   REPLACE(REPLACE('Definition'||ru.name ,'DefinitionMaxSelected','DefinitionMaxSelections'),'DefinitionMinSelected','DefinitionMinSelections') fceprop, intl.ui_page_element_id
683         from cz_intl_texts intl, cz_ui_defs ui , cz_rules ru  where
684         ru.rule_id in (894,818,812,893,817,811,813,814,815,816)
685         and text_str like '%'||fnd_global.local_chr(38)||upper(ru.name)||'%'
686         and intl.ui_def_id = ui.ui_def_id
687         and intl.deleted_flag='0'
688         and ui.deleted_flag='0'
689         and intl.model_id =ui.devl_project_id
690         and ui.devl_project_id= p_dev_project_id
691       )
692     LOOP
693       --Refer TD section 4.1.5.2
694       --If this ui element has a display condition / text expression which reference Min or Max system properties
695       displayMessage(2,p_dev_project_id , 'UIE' ,GET_UI_ELEMENT_ID(v_ui.ui_page_element_id),l_api_name,'CZ_CNV_WARN_DIFF_SYSPROP','PROPERTYNAME_1' , v_ui.lceprop,'EXPRESSION_OR_CONDITION' ,' Text Expression ' ,'PROPERTYNAME_2' ,v_ui.fceprop);
696     END LOOP;
697 
698 
699         UPDATE cz_localized_texts intl SET localized_str = REPLACE(REPLACE(REPLACE(REPLACE(localized_str , ' '||fnd_global.local_chr(38)||'MIN' , ' '||fnd_global.local_chr(38)||'DEFINITIONMIN')
700                                                            ,' '||fnd_global.local_chr(38)||'MAX' , ' '||fnd_global.local_chr(38)||'DEFINITIONMAX'),'DEFINITIONMAXSELECTED','DEFINITIONMAXSELECTIONS'),'DEFINITIONMINSELECTED','DEFINITIONMINSELECTIONS')
701         WHERE ui_def_id IN(select ui_def_id from cz_ui_defs WHERE deleted_flag='0' AND devl_project_id= p_dev_project_id )
702         AND model_id = p_dev_project_id
703         AND EXISTS (
704         SELECT 1 FROM cz_rules WHERE rule_id IN (894,818,812,893,817,811,813,814,815,816)
705         AND localized_str LIKE '%'||fnd_global.local_chr(38)||upper(name)||'%' )
706         AND deleted_flag='0';
707 
708 
709 
710 
711   EXCEPTION
712   WHEN others THEN
713     l_msg := 'Fatal error in ' || l_api_name || '.' || v_ndebug || ': ' || SUBSTR(sqlerrm,   1,   900);
714     log_msg(l_api_name,   v_ndebug,   l_msg,   fnd_log.level_unexpected);
715     RAISE;
716   END processUI;
717 
718 
719   --This procedure removes the effectivity information from Total, Resource, Integer Feat, Decimal Feat, and Virtual Component.
720   PROCEDURE removeEffectivityInfo(p_dev_project_id IN cz_devl_projects.devl_project_id%TYPE) AS
721   l_msg VARCHAR2(2000);
722   l_api_name constant VARCHAR2(30) := 'removeEffectivityInfo';
723   BEGIN
724 
725 
726     UPDATE cz_ps_nodes
727     SET effective_usage_mask = '0000000000000000',
728       effective_from = cz_utils.epoch_begin,
729       effective_until = cz_utils.epoch_end,
730       effectivity_set_id = NULL,
731       eff_from = NULL,
732       eff_to = NULL,
733       eff_mask = NULL
734     WHERE(ps_node_type IN(PS_TYPE_TOTAL,   PS_TYPE_RESOURCE) OR(ps_node_type = PS_TYPE_FEATURE
735      AND feature_type IN(FEATURE_TYPE_INTEGER ,   FEATURE_TYPE_FLOAT)) OR(ps_node_type = PS_TYPE_COMPONENT AND virtual_flag = 1))
736      AND devl_project_id = p_dev_project_id
737      AND (effective_usage_mask <> '0000000000000000' or
738       effective_from IS NOT NULL or
739       effective_until IS NOT NULL or
740       effectivity_set_id IS NOT NULL or
741       eff_from IS NOT NULL or
742       eff_to IS NOT NULL or
743       eff_mask IS NOT NULL)
744       RETURNING ps_node_id , name BULK COLLECT INTO v_cz_ids_tbl ,v_cz_names_tbl;
745 
746     IF v_cz_ids_tbl.COUNT >0 THEN
747      FOR i in v_cz_ids_tbl.FIRST .. v_cz_ids_tbl.LAST
748      LOOP
749       --For each of these nodes the effectivity will be removed , display appropriate message.
750       displayMessage(2,p_dev_project_id , 'NODE' ,v_cz_ids_tbl(i),l_api_name,'CZ_CNV_WARN_EFF_REMOVED','NODETYPE',v_cz_names_tbl(i) );
751      END LOOP;
752      v_cz_ids_tbl.DELETE;
753      v_cz_names_tbl.DELETE;
754     END IF;
755 
756 
757   EXCEPTION
758   WHEN others THEN
759     l_msg := 'Fatal error in ' || l_api_name || '.' || v_ndebug || ': ' || SUBSTR(sqlerrm,   1,   900);
760     log_msg(l_api_name,   v_ndebug,   l_msg,   fnd_log.level_unexpected);
761     RAISE;
762   END removeEffectivityInfo;
763 
764 
765 
766 
767 
768 -- function to get rule id values . As cz_rules_s sequence is incremented by 20 everytime hence we need this function
769 FUNCTION next_rule_id RETURN NUMBER IS
770   id_to_return  NUMBER;
771 BEGIN
772   IF((last_id_allocated IS NULL) OR
773      (next_id_to_use = (NVL(last_id_allocated, 0) + CZ_SEQUENCE_INCREMENT)))THEN
774 
775     SELECT cz_rules_s.NEXTVAL INTO last_id_allocated FROM DUAL;
776     next_id_to_use := last_id_allocated;
777   END IF;
778 
779   id_to_return := next_id_to_use;
780   next_id_to_use := next_id_to_use + 1;
781  RETURN id_to_return;
782 END next_rule_id;
783 
784 
785 
786   FUNCTION createConstraintRuleRecord(p_rulefolderid IN cz_rules.rule_folder_id%TYPE,   p_ps_node_id IN cz_ps_nodes.ps_node_id%TYPE,
787                                       p_devl_project_id IN cz_devl_projects.devl_project_id%TYPE , p_default_rule boolean DEFAULT FALSE) RETURN cz_rules.rule_id%TYPE AS
788   l_rule_id cz_rules.rule_id%TYPE;
789   l_msg VARCHAR2(2000);
790   l_api_name constant VARCHAR2(30) := 'createConstraintRuleRecord';
791   l_ps_node_name cz_ps_nodes.name%type;
792   l_intl_text_id CZ_LOCALIZED_TEXTS.intl_text_id%type;
793   initialvalue varchar2(2000);
794   BEGIN
795 
796     l_rule_id:=next_rule_id;
797 
798     -- kdande; 10-Jan-2008; Bug 6730553; Changed cz_localized_texts_s to cz_intl_texts_s as cz_localized_texts_s is obsolete.
799     SELECT cz_intl_texts_s.nextval INTO l_intl_text_id FROM Dual ;
800 
801     SELECT name , nvl(initial_value, initial_num_value ) INTO l_ps_node_name , initialvalue from cz_ps_nodes where ps_node_id=p_ps_node_id;
802 
803     -- INSERTING into  cz_rules
804     -- BUG9176281 -
805     -- If you call populate_cz_tables() after inserting the data in v_cz_rules - it will create a Rule with
806     -- blank CDL as the v_cz_expression_nodes is not yet populated with required data.
807 
808         populate_cz_tables();
809 
810     -- End Fixing BUG9176281
811         v_cz_rule_count:=v_cz_rule_count+1;
812         V_CZ_RULES(v_cz_rule_count).rule_id:=           l_rule_id;
813         V_CZ_RULES(v_cz_rule_count).reason_id:= l_intl_text_id;
814         IF p_rulefolderid IS NULL THEN
815                 V_CZ_RULES(v_cz_rule_count).rule_folder_id:=findOrCreateRuleFolder(p_devl_project_id)   ;
816         ELSE
817                 V_CZ_RULES(v_cz_rule_count).rule_folder_id:= p_rulefolderid     ;
818         END IF;
819         V_CZ_RULES(v_cz_rule_count).devl_project_id:=   p_devl_project_id;
820         V_CZ_RULES(v_cz_rule_count).invalid_flag:=      '0';
821 	IF p_default_rule THEN
822 	   V_CZ_RULES(v_cz_rule_count).name:=              'Defaults-' || l_ps_node_name;
823         ELSE
824 	   V_CZ_RULES(v_cz_rule_count).name:=              'Constraint-' || l_ps_node_name;
825 	END IF;
826         V_CZ_RULES(v_cz_rule_count).rule_type:= '200';
827         V_CZ_RULES(v_cz_rule_count).reason_type:=       '0'  ;
828         V_CZ_RULES(v_cz_rule_count).disabled_flag:=     '0'  ;
829         V_CZ_RULES(v_cz_rule_count).deleted_flag:=      '0'  ;
830         V_CZ_RULES(v_cz_rule_count).effective_usage_mask:='0000000000000000';
831         V_CZ_RULES(v_cz_rule_count).seq_nbr:=           '1';
832         V_CZ_RULES(v_cz_rule_count).effective_from:=    cz_utils.epoch_begin;
833         V_CZ_RULES(v_cz_rule_count).effective_until:=   cz_utils.epoch_end;
834         V_CZ_RULES(v_cz_rule_count).persistent_rule_id:=l_rule_id;
835         V_CZ_RULES(v_cz_rule_count).presentation_flag:= '0';
836         V_CZ_RULES(v_cz_rule_count).mutable_flag:=      '0';
837         V_CZ_RULES(v_cz_rule_count).seeded_flag:=       '0';
838 
839     -- INSERTING into  cz_rules -- rule folder entry
840     -- Fixing BUG9176281 - Rule name for Default Rule
841       INSERT INTO cz_rule_folders(rule_folder_id,   name,   devl_project_id,   tree_seq,   deleted_flag,   folder_type,   effective_usage_mask,   persistent_rule_folder_id,   object_type,   disabled_flag , parent_rule_folder_id)
842       VALUES(l_rule_id,   V_CZ_RULES(v_cz_rule_count).name ,   p_devl_project_id,   '1',   '0',   '0',   '0000000000000000',   l_rule_id,   'RUL',   '0' , V_CZ_RULES(v_cz_rule_count).rule_folder_id );
843 
844       --populate_cz_tables();  moved prior to inserting data to v_cz_rules
845 
846     RETURN l_rule_id;
847   EXCEPTION
848   WHEN others THEN
849     l_msg := 'Fatal error in ' || l_api_name || '.' || v_ndebug || ': ' || SUBSTR(sqlerrm,   1,   900);
850     log_msg(l_api_name,   v_ndebug,   l_msg,   fnd_log.level_unexpected);
851     RAISE;
852   END;
853 
854 
855   --Create implies rule for initial values on Boolean features .refer section 4..1.3.3 for Boolean features
856   PROCEDURE insertImpliesRuleRecords(dev_project_id IN cz_devl_projects.devl_project_id%TYPE,   ps_node_id IN cz_ps_nodes.ps_node_id%TYPE,
857             ps_node_type IN cz_ps_nodes.ps_node_type%TYPE,   l_rule_id IN cz_rules.rule_id%TYPE,   initialvalue IN cz_ps_nodes.initial_value%TYPE) AS
858   l_msg VARCHAR2(2000);
859   l_api_name constant VARCHAR2(30) := 'insertImpliesRuleRecords';
860   l_expression_node_id cz_expression_nodes.expr_node_id%TYPE;
861   l_expression_node_id1 cz_expression_nodes.expr_node_id%TYPE;
862   l_mod_ref cz_expression_nodes.MODEL_REF_EXPL_ID%TYPE;
863   BEGIN
864 
865     SELECT cz_expression_nodes_s.nextval
866     INTO l_expression_node_id
867     FROM dual;
868     v_cz_expr_node_count := v_cz_expr_node_count + 1;
869     --insert the implies record
870     -- INSERTING into cz_expression_nodes
871     v_cz_expression_nodes(v_cz_expr_node_count).expr_node_id := l_expression_node_id;
872     v_cz_expression_nodes(v_cz_expr_node_count).seq_nbr := 1;
873     v_cz_expression_nodes(v_cz_expr_node_count).expr_type := 200;
874     v_cz_expression_nodes(v_cz_expr_node_count).token_list_seq := 8;
875     v_cz_expression_nodes(v_cz_expr_node_count).rule_id := l_rule_id;
876     v_cz_expression_nodes(v_cz_expr_node_count).template_id := 1;
877     v_cz_expression_nodes(v_cz_expr_node_count).data_type := 0;
878     v_cz_expression_nodes(v_cz_expr_node_count).collection_flag := 0;
879     v_cz_expression_nodes(v_cz_expr_node_count).mutable_flag := 0;
880 
881 --    v_cz_expression_nodes(v_cz_expr_node_count).source_offset := 7;
882 --    v_cz_expression_nodes(v_cz_expr_node_count).source_length := 7;
883 
884 
885     v_cz_expr_node_count := v_cz_expr_node_count + 1;
886     --insert initial value record
887     SELECT cz_expression_nodes_s.nextval
888     INTO l_expression_node_id1
889     FROM dual;
890     v_cz_expression_nodes(v_cz_expr_node_count).expr_node_id := l_expression_node_id1;
891     v_cz_expression_nodes(v_cz_expr_node_count).seq_nbr := 1;
892     v_cz_expression_nodes(v_cz_expr_node_count).expr_parent_id := l_expression_node_id;
893     v_cz_expression_nodes(v_cz_expr_node_count).data_value := initialvalue;
894     v_cz_expression_nodes(v_cz_expr_node_count).expr_type := 201;
895     v_cz_expression_nodes(v_cz_expr_node_count).token_list_seq := 7;
896     v_cz_expression_nodes(v_cz_expr_node_count).rule_id := l_rule_id;
897     v_cz_expression_nodes(v_cz_expr_node_count).param_signature_id := 81;
898     v_cz_expression_nodes(v_cz_expr_node_count).param_index := 1;
899     v_cz_expression_nodes(v_cz_expr_node_count).data_type := 3;
900     v_cz_expression_nodes(v_cz_expr_node_count).mutable_flag := 0;
901 --    v_cz_expression_nodes(v_cz_expr_node_count).source_offset := 1;
902 --    v_cz_expression_nodes(v_cz_expr_node_count).source_length := 4;
903 
904     v_cz_expr_node_count := v_cz_expr_node_count + 1;
905     --insert boolean feature record
906     SELECT cz_expression_nodes_s.nextval
907     INTO l_expression_node_id1
908     FROM dual;
909     v_cz_expression_nodes(v_cz_expr_node_count).expr_node_id := l_expression_node_id1;
910     v_cz_expression_nodes(v_cz_expr_node_count).seq_nbr := 2;
911     v_cz_expression_nodes(v_cz_expr_node_count).ps_node_id := ps_node_id;
912     v_cz_expression_nodes(v_cz_expr_node_count).expr_parent_id := l_expression_node_id;
913     v_cz_expression_nodes(v_cz_expr_node_count).expr_type := 205;
914     v_cz_expression_nodes(v_cz_expr_node_count).token_list_seq := 15;
915     v_cz_expression_nodes(v_cz_expr_node_count).rule_id := l_rule_id;
916     v_cz_expression_nodes(v_cz_expr_node_count).param_signature_id := 81;
917     v_cz_expression_nodes(v_cz_expr_node_count).param_index := 2;
918     v_cz_expression_nodes(v_cz_expr_node_count).data_type := 502;
919     v_cz_expression_nodes(v_cz_expr_node_count).display_node_depth := 1;
920     v_cz_expression_nodes(v_cz_expr_node_count).mutable_flag := '1';
921 --    v_cz_expression_nodes(v_cz_expr_node_count).source_offset := 15;
922 --    v_cz_expression_nodes(v_cz_expr_node_count).source_length := 24;
923 
924     SELECT MIN(MODEL_REF_EXPL_ID) INTO l_mod_ref FROM cz_model_ref_expls WHERE model_id=dev_project_id AND deleted_flag='0';
925     v_cz_expression_nodes(v_cz_expr_node_count).model_ref_expl_id := l_mod_ref;
926 
927     --Mark the rule as a default rule
928     populate_cz_tables(true);
929     UPDATE cz_rules
930     SET rule_class = RULE_CLASS_DEFAULT
931     WHERE rule_id = l_rule_id;
932 
933 
934 
935   EXCEPTION
936   WHEN others THEN
937     l_msg := 'Fatal error in ' || l_api_name || '.' || v_ndebug || ': ' || SUBSTR(sqlerrm,   1,   900);
938     log_msg(l_api_name,   v_ndebug,   l_msg,   fnd_log.level_unexpected);
939     RAISE;
940   END insertImpliesRuleRecords;
941 
942 
943   --Procedure to create the expression tree for a contribute/consume target
944   --This procedure adds an ADDTO rule for a contribute/consume rule where the initial value of target is not null
945 
946   PROCEDURE createAccumulatorRule(dev_project_id IN cz_devl_projects.devl_project_id%TYPE,   ps_node_id IN cz_ps_nodes.ps_node_id%TYPE,
947                               ps_node_type IN cz_ps_nodes.ps_node_type%TYPE,   initialvalue IN cz_ps_nodes.initial_value%TYPE,   minvalue IN cz_ps_nodes.minimum%TYPE,
948                               l_rule_id IN cz_rules.rule_id%TYPE  ,p_model_ref_expl_id IN cz_expression_nodes.model_ref_expl_id%TYPE,p_feature_type IN cz_ps_nodes.feature_type%TYPE) AS
949   l_msg VARCHAR2(2000);
950   l_api_name constant VARCHAR2(30) := 'createAccumulatorRule';
951   l_expression_node_id cz_expression_nodes.expr_node_id%TYPE;
952   l_expression_node_id1 cz_expression_nodes.expr_node_id%TYPE;
953   l_mod_ref  cz_expression_nodes.MODEL_REF_EXPL_ID%type;
954   l_ps_node_id cz_ps_nodes.ps_node_id%TYPE;
955   BEGIN
956     IF initialvalue IS NOT NULL THEN
957 
958         --      Insert AddTo  expression record;
959 
960         SELECT cz_expression_nodes_s.nextval   INTO l_expression_node_id FROM dual;
961         v_cz_expr_node_count:=v_cz_expr_node_count+1;
962 
963         v_cz_expression_nodes(v_cz_expr_node_count).EXPR_NODE_ID:=      l_expression_node_id         ;
964         v_cz_expression_nodes(v_cz_expr_node_count).SEQ_NBR:=           '1'                          ;
965         v_cz_expression_nodes(v_cz_expr_node_count).EXPR_TYPE:=         '200'                        ;
966         v_cz_expression_nodes(v_cz_expr_node_count).TOKEN_LIST_SEQ:=    '1'                          ;
967         v_cz_expression_nodes(v_cz_expr_node_count).DELETED_FLAG:=      '0'                          ;
968         v_cz_expression_nodes(v_cz_expr_node_count).RULE_ID:=           l_rule_id                    ;
969         v_cz_expression_nodes(v_cz_expr_node_count).TEMPLATE_ID:=       OPERATOR_ADDSTO              ;
970         v_cz_expression_nodes(v_cz_expr_node_count).DATA_TYPE:=         '0'                          ;
971         v_cz_expression_nodes(v_cz_expr_node_count).COLLECTION_FLAG:=   '0'                          ;
972 --        v_cz_expression_nodes(v_cz_expr_node_count).SOURCE_OFFSET:=     '1'                          ;
973 --        v_cz_expression_nodes(v_cz_expr_node_count).SOURCE_LENGTH:=     '10'                         ;
974         v_cz_expression_nodes(v_cz_expr_node_count).MUTABLE_FLAG:=      '0'                          ;
975         --      Insert initial value record;
976 
977 
978         SELECT cz_expression_nodes_s.nextval   INTO l_expression_node_id1 FROM dual;
979         v_cz_expr_node_count:=v_cz_expr_node_count+1;
980 
981 
982 
983         v_cz_expression_nodes(v_cz_expr_node_count).EXPR_NODE_ID:=      l_expression_node_id1               ;
984         v_cz_expression_nodes(v_cz_expr_node_count).SEQ_NBR:=           '1'                                 ;
985         v_cz_expression_nodes(v_cz_expr_node_count).EXPR_PARENT_ID:=    l_expression_node_id                ;
986         v_cz_expression_nodes(v_cz_expr_node_count).EXPR_TYPE:=         '201'                               ;
987         v_cz_expression_nodes(v_cz_expr_node_count).TOKEN_LIST_SEQ:=    '8'                                 ;
988         v_cz_expression_nodes(v_cz_expr_node_count).DELETED_FLAG:=      '0'                                 ;
989         v_cz_expression_nodes(v_cz_expr_node_count).RULE_ID:=           l_rule_id                           ;
990         v_cz_expression_nodes(v_cz_expr_node_count).PARAM_SIGNATURE_ID:='96'                                ;
991         v_cz_expression_nodes(v_cz_expr_node_count).PARAM_INDEX:=       '1'                                 ;
992 
993         IF p_feature_type=FEATURE_TYPE_FLOAT THEN
994           v_cz_expression_nodes(v_cz_expr_node_count).DATA_TYPE:=         '2'                                 ;
995         ELSE
996           v_cz_expression_nodes(v_cz_expr_node_count).DATA_TYPE:=         '1'                                 ;
997         END IF;
998 
999 --        v_cz_expression_nodes(v_cz_expr_node_count).SOURCE_OFFSET:=     '13'                                ;
1000 --        v_cz_expression_nodes(v_cz_expr_node_count).SOURCE_LENGTH:=     '1'                                 ;
1001         v_cz_expression_nodes(v_cz_expr_node_count).MUTABLE_FLAG:=      '0'                                 ;
1002         v_cz_expression_nodes(v_cz_expr_node_count).DATA_NUM_VALUE:=    initialvalue                        ;
1003         --      Insert record for ps_node_id, ps_node_type;
1004 
1005         SELECT cz_expression_nodes_s.nextval   INTO l_expression_node_id1 FROM dual;
1006         v_cz_expr_node_count:=v_cz_expr_node_count+1;
1007 
1008         IF p_model_ref_expl_id IS NULL THEN
1009            l_ps_node_id :=ps_node_id;
1010            SELECT MIN(MODEL_REF_EXPL_ID) INTO l_mod_ref FROM cz_model_ref_expls WHERE model_id=dev_project_id AND deleted_flag='0' AND  component_id=(select component_id from cz_ps_nodes ps where ps.ps_node_id=l_ps_node_id)  ;
1011         ELSE
1012            l_mod_ref:=p_model_ref_expl_id;  -- use model_ref_expl_id from parent contribute / consume rule .
1013         END IF;
1014 
1015 
1016 
1017         v_cz_expression_nodes(v_cz_expr_node_count).EXPR_NODE_ID:=      l_expression_node_id1     ;
1018         v_cz_expression_nodes(v_cz_expr_node_count).SEQ_NBR:=           '2'                       ;
1019         v_cz_expression_nodes(v_cz_expr_node_count).PS_NODE_ID:=        ps_node_id                ;
1020         v_cz_expression_nodes(v_cz_expr_node_count).EXPR_PARENT_ID:=    l_expression_node_id      ;
1021         v_cz_expression_nodes(v_cz_expr_node_count).EXPR_TYPE:=         '205'                     ;
1022         v_cz_expression_nodes(v_cz_expr_node_count).TOKEN_LIST_SEQ:=    '9'                       ;
1023         v_cz_expression_nodes(v_cz_expr_node_count).DELETED_FLAG:=      '0'                       ;
1024         v_cz_expression_nodes(v_cz_expr_node_count).MODEL_REF_EXPL_ID:= l_mod_ref                 ;
1025         v_cz_expression_nodes(v_cz_expr_node_count).RULE_ID:=           l_rule_id                 ;
1026         v_cz_expression_nodes(v_cz_expr_node_count).PARAM_SIGNATURE_ID:='96'                      ;
1027         v_cz_expression_nodes(v_cz_expr_node_count).PARAM_INDEX:=       '2'                       ;
1028 
1029         IF ps_node_type=PS_TYPE_TOTAL THEN
1030           v_cz_expression_nodes(v_cz_expr_node_count).DATA_TYPE:=CZ_TYPES.TOTAL_TYPEID;
1031         ELSIF ps_node_type=PS_TYPE_RESOURCE THEN
1032           v_cz_expression_nodes(v_cz_expr_node_count).DATA_TYPE:=CZ_TYPES.RESOURCE_TYPEID;
1033         ELSIF ps_node_type=PS_TYPE_FEATURE and p_feature_type=FEATURE_TYPE_FLOAT THEN
1034           v_cz_expression_nodes(v_cz_expr_node_count).DATA_TYPE:=CZ_TYPES.DECIMAL_FEATURE_TYPEID;
1035         END IF;
1036 
1037         v_cz_expression_nodes(v_cz_expr_node_count).DISPLAY_NODE_DEPTH:='1'                       ;
1038 --        v_cz_expression_nodes(v_cz_expr_node_count).SOURCE_OFFSET:=     '18'                      ;
1039 --        v_cz_expression_nodes(v_cz_expr_node_count).SOURCE_LENGTH:=     '14'                      ;
1040         v_cz_expression_nodes(v_cz_expr_node_count).MUTABLE_FLAG:=      '1'                       ;
1041 
1042 
1043     END IF;
1044   EXCEPTION
1045   WHEN others THEN
1046     l_msg := 'Fatal error in ' || l_api_name || '.' || v_ndebug || ': ' || SUBSTR(sqlerrm,   1,   900);
1047     log_msg(l_api_name,   v_ndebug,   l_msg,   fnd_log.level_unexpected);
1048     RAISE;
1049   END createAccumulatorRule;
1050 
1051 
1052   --Procedure to create accumulator rule records for contribute/consume rule initial values
1053   PROCEDURE createRules(p_devl_project_id IN cz_devl_projects.devl_project_id%TYPE,   p_ps_node_id IN cz_ps_nodes.ps_node_id%TYPE,
1054                         p_ps_node_type IN cz_ps_nodes.ps_node_type%TYPE,   feature_type IN cz_ps_nodes.feature_type%TYPE,
1055                         initialvalue IN cz_ps_nodes.initial_value%TYPE,   minvalue IN cz_ps_nodes.maximum%TYPE,   rulefolderid IN cz_rules.rule_folder_id%TYPE,
1056                         maxvalue IN cz_ps_nodes.maximum%TYPE) AS
1057   --cursor to find all contribute/consume sources for a given target
1058   CURSOR c_contrib_consume IS
1059   SELECT DISTINCT r.devl_project_id,
1060     e.template_id,
1061     e1.rule_id,
1062     r.rule_folder_id,
1063     ps.name,
1064     p.name devname,
1065     r.reason_id,
1066     e1.model_ref_expl_id
1067   FROM cz_rules r,
1068     cz_devl_projects p,
1069     cz_expression_nodes e,
1070     cz_expression_nodes e1,
1071     cz_ps_nodes ps
1072   WHERE r.deleted_flag = '0'
1073    AND e.deleted_flag = '0'
1074    AND e1.deleted_flag = '0'
1075    AND p.deleted_flag = '0'
1076    AND p.config_engine_type = 'F'
1077    AND e.template_id IN(708,   710 ,712 ,714)
1078    AND e1.ps_node_id = p_ps_node_id
1079    AND e1.ps_node_id = ps.ps_node_id
1080    AND e1.rule_id = e.rule_id
1081    AND r.rule_id = e.rule_id
1082    AND p.devl_project_id=ps.devl_project_id
1083    AND p.devl_project_id = p_devl_project_id
1084    ORDER BY r.devl_project_id , e1.model_ref_expl_id;
1085 
1086   l_msg VARCHAR2(2000);
1087   l_api_name constant VARCHAR2(30) := 'createRules';
1088   l_rule_id cz_rules.rule_id%TYPE;
1089   l_rulefolderid cz_rules.rule_folder_id%TYPE;
1090   l_rule_class cz_rules.rule_class%TYPE;
1091   l_ps_node_name cz_ps_nodes.name%type;
1092   l_previous_devl_project_id cz_devl_projects.devl_project_id%type;
1093   l_has_mult_down_cont_cons boolean;
1094 
1095   l_devl_project_id cz_devl_projects.devl_project_id%type;
1096   l_model_ref_expl_id cz_expression_nodes.model_ref_expl_id%type;
1097 
1098 
1099   ACC_RULE_CREATED boolean;
1100 
1101 
1102   BEGIN
1103 
1104       ACC_RULE_CREATED:=FALSE;
1105       l_has_mult_down_cont_cons :=FALSE;
1106 
1107       FOR v_contribute_consume IN c_contrib_consume
1108       LOOP
1109         displayMessage(3,p_devl_project_id , 'RULE' ,v_contribute_consume.rule_id,l_api_name,'CZ_CNV_CONT_CONS_TO_ADD_SUB');
1110         IF v_contribute_consume.template_id IN (708,710) THEN
1111                 Update cz_expression_nodes set template_id=decode(template_id,708 , OPERATOR_ADDSTO  , 710 , OPERATOR_SUBTRACTSFROM) where rule_id=v_contribute_consume.rule_id and template_id in (708,710);
1112                 Update cz_expression_nodes set template_id=25 where rule_id=v_contribute_consume.rule_id and template_id =22;
1113                 cz_rule_text_gen.parse_rules(v_contribute_consume.devl_project_id,   v_contribute_consume.rule_id);
1114         END IF;
1115         IF(initialvalue IS NOT NULL
1116          AND(p_ps_node_type IN(PS_TYPE_TOTAL,   PS_TYPE_RESOURCE) OR(p_ps_node_type = PS_TYPE_FEATURE
1117          AND feature_type IN(FEATURE_TYPE_INTEGER ,   FEATURE_TYPE_FLOAT)))) THEN
1118           IF v_contribute_consume.devl_project_id = p_devl_project_id THEN
1119            ACC_RULE_CREATED:=TRUE;
1120           END IF;
1121 
1122           IF ((l_devl_project_id IS NULL AND l_model_ref_expl_id IS NULL )
1123              OR ( l_devl_project_id<> v_contribute_consume.devl_project_id AND l_model_ref_expl_id <> v_contribute_consume.model_ref_expl_id ) )THEN
1124 
1125                   -- Total/resource/Num feature
1126                   --Create a new Rule Folder in model dev_project_id and get its id in l_rulefolderID
1127                   l_rulefolderid := findOrCreateRuleFolder(v_contribute_consume.devl_project_id);
1128 
1129                   --Create a new rule record in cz_rules in folder specified by l_rulefolderID with Name "Constraint-<<ps_node name>>" get its value in l_rule_id
1130                   l_rule_id := createConstraintRuleRecord(l_rulefolderid,   p_ps_node_id,   v_contribute_consume.devl_project_id);
1131 
1132                   l_rule_class := RULE_CLASS_CONSTRAINT;
1133                   -- create one additional Accumulator Rule to add the initial value to the target
1134                   createAccumulatorRule(v_contribute_consume.devl_project_id,   p_ps_node_id,   p_ps_node_type,   initialvalue,   minvalue,   l_rule_id , v_contribute_consume.model_ref_expl_id,feature_type);
1135                   IF v_contribute_consume.devl_project_id = p_devl_project_id THEN
1136                     displayMessage(4,p_devl_project_id , 'NODE' ,p_ps_node_id,l_api_name,'CZ_CNV_INFO_ACC_INIT_VAL' , 'RULENAME', 'Constraint-'||v_contribute_consume.name );
1137                   ELSE
1138                     displayMessage(3,p_devl_project_id , 'NODE',p_ps_node_id,l_api_name,'CZ_CNV_ADV_ACC_DESC_INIT_VAL','NODENAME',v_contribute_consume.name,'MODELNAME',v_contribute_consume.devname,'RULENAME','Constraint-'||v_contribute_consume.name);
1139                   END IF;
1140 
1141                   l_devl_project_id:= v_contribute_consume.devl_project_id;
1142                   l_model_ref_expl_id:= v_contribute_consume.model_ref_expl_id;
1143           END IF;
1144 
1145         END IF;
1146 
1147         UPDATE cz_localized_texts SET deleted_flag =1 WHERE intl_text_id=v_contribute_consume.reason_id;
1148         UPDATE cz_rules SET reason_id=null, reason_type=0, accumulator_flag=1 WHERE rule_id=v_contribute_consume.rule_id;  -- fix for BUG7209057
1149 
1150 
1151         IF(l_previous_devl_project_id IS NULL) THEN
1152           l_previous_devl_project_id := v_contribute_consume.devl_project_id;
1153         ELSE IF (l_previous_devl_project_id<> v_contribute_consume.devl_project_id) THEN
1154                l_has_mult_down_cont_cons :=TRUE;
1155              END IF;
1156         END IF;
1157 
1158       END LOOP;
1159 
1160       IF (l_has_mult_down_cont_cons ) THEN
1161         displayMessage(2,p_devl_project_id , 'NODE' ,p_ps_node_id,l_api_name,'CZ_CNV_WARN_NUM_INIT_DOWN_SUM');
1162       END IF;
1163 
1164 
1165 -- Create accumulator rules for initial values
1166     IF initialvalue IS NOT NULL  AND NOT ACC_RULE_CREATED THEN
1167       IF(p_ps_node_type = PS_TYPE_FEATURE
1168        AND feature_type IN(FEATURE_TYPE_INTEGER ,   FEATURE_TYPE_FLOAT)) OR p_ps_node_type = PS_TYPE_TOTAL OR p_ps_node_type = PS_TYPE_RESOURCE THEN
1169           -- Total/resource/Num feature
1170             --Create a new Rule Folder in model dev_project_id and get its id in l_rulefolderID
1171             l_rulefolderid := findOrCreateRuleFolder(p_devl_project_id);
1172           --Create a new rule record in cz_rules in folder specified by l_rulefolderID with Name "Constraint-<<ps_node name>>" get its value in l_rule_id
1173           l_rule_id := createConstraintRuleRecord(l_rulefolderid,   p_ps_node_id,   p_devl_project_id);
1174           l_rule_class := RULE_CLASS_CONSTRAINT;
1175           --defaults
1176           -- create one additional Accumulator Rule to add the initial value to the target
1177           createAccumulatorRule(p_devl_project_id,   p_ps_node_id,   p_ps_node_type,   initialvalue,   minvalue,   l_rule_id , null, feature_type);
1178           select name into l_ps_node_name from cz_ps_nodes where ps_node_id =p_ps_node_id;
1179           displayMessage(4,p_devl_project_id , 'NODE' ,p_ps_node_id,l_api_name,'CZ_CNV_INFO_ACC_INIT_VAL' , 'RULENAME', 'Constraint-'||l_ps_node_name );
1180         END IF;
1181     END IF;
1182 
1183     IF initialvalue IS NOT NULL THEN
1184       IF(p_ps_node_type = PS_TYPE_FEATURE
1185        AND feature_type = FEATURE_TYPE_BOOLEAN) THEN
1186         -- Boolean
1187         --Create a new Rule Folder in model dev_project_id and get its id in l_rulefolderID
1188          l_rulefolderid := findOrCreateRuleFolder(p_devl_project_id);
1189         --Create a new rule record in cz_rules in folder specified by rulefolderID with Name "Constraint-<<ps_node name>>" get its value in l_rule_id
1190          l_rule_id := createConstraintRuleRecord(l_rulefolderid,   p_ps_node_id,   p_devl_project_id, true );
1191 
1192 
1193         --refer section 4..1.3.3 for Boolean features
1194         insertImpliesRuleRecords(p_devl_project_id,   p_ps_node_id,   p_ps_node_type,   l_rule_id,   initialvalue );
1195         IF initialvalue IS NOT NULL THEN
1196           select name into l_ps_node_name from cz_ps_nodes where ps_node_id =p_ps_node_id;
1197           displayMessage(4,p_devl_project_id , 'NODE' ,p_ps_node_id,l_api_name,'CZ_CNV_INFO_BOOL_INIT_VAL','RULENAME' , 'Constraint-'||l_ps_node_name );
1198         END IF;
1199       END IF;
1200     END IF;
1201   EXCEPTION
1202   WHEN others THEN
1203     l_msg := 'Fatal error in ' || l_api_name || '.' || v_ndebug || ': ' || SUBSTR(sqlerrm,   1,   900);
1204     log_msg(l_api_name,   v_ndebug,   l_msg,   fnd_log.level_unexpected);
1205     RAISE;
1206   END createRules;
1207 
1208 
1209   --  procedure to remove initial values from nodes
1210   PROCEDURE clearinitialvalues(p_dev_project_id IN cz_devl_projects.devl_project_id%TYPE) AS
1211   l_msg VARCHAR2(2000);
1212   l_api_name constant VARCHAR2(30) := 'ClearInitialValues';
1213   BEGIN
1214     UPDATE cz_ps_nodes
1215     SET initial_num_value = NULL
1216     WHERE devl_project_id = p_dev_project_id
1217      AND initial_num_value IS NOT NULL
1218      AND(ps_node_type IN(PS_TYPE_TOTAL,   PS_TYPE_RESOURCE)
1219      OR(ps_node_type = PS_TYPE_FEATURE  AND feature_type IN(FEATURE_TYPE_INTEGER ,   FEATURE_TYPE_FLOAT))
1220      OR(ps_node_type = PS_TYPE_FEATURE  AND feature_type = FEATURE_TYPE_BOOLEAN));
1221   EXCEPTION
1222   WHEN others THEN
1223     l_msg := 'Fatal error in ' || l_api_name || '.' || v_ndebug || ': ' || SUBSTR(sqlerrm,   1,   900);
1224     log_msg(l_api_name,   v_ndebug,   l_msg,   fnd_log.level_unexpected);
1225     RAISE;
1226   END clearinitialvalues;
1227 
1228 
1229 
1230   --procedure to fill in min/max domain range values per type where no value has been defined by the modeler
1231   --Reference TD section 4.1.3.2
1232   PROCEDURE assignDefaultMinMaxvalues(p_dev_project_id IN cz_devl_projects.devl_project_id%TYPE) AS
1233   l_msg VARCHAR2(2000);
1234   l_api_name constant VARCHAR2(30) := 'assignDefaultMinMaxvalues';
1235   BEGIN
1236     FOR c_processing IN
1237       (SELECT ps_node_id , feature_type
1238        FROM cz_ps_nodes
1239        WHERE devl_project_id = p_dev_project_id
1240        AND minimum IS NULL
1241        AND(ps_node_type = PS_TYPE_FEATURE
1242        AND feature_type IN(FEATURE_TYPE_INTEGER ,   FEATURE_TYPE_FLOAT)))
1243     LOOP
1244       IF c_processing.feature_type=   FEATURE_TYPE_INTEGER     THEN
1245               displayMessage(3,p_dev_project_id , 'NODE' , c_processing.ps_node_id,l_api_name,'CZ_CNV_ADV_VAL_MIN_BOUND','MINVAL', INTEGER_MIN_VAL);
1246       ELSE IF  c_processing.feature_type=   FEATURE_TYPE_FLOAT THEN
1247               displayMessage(3,p_dev_project_id , 'NODE' ,c_processing.ps_node_id,l_api_name,'CZ_CNV_ADV_VAL_MIN_BOUND','MINVAL', -SOLVER_MAX_DOUBLE);
1248            END IF;
1249       END IF;
1250     END LOOP;
1251     UPDATE cz_ps_nodes
1252     SET minimum = decode(feature_type,  FEATURE_TYPE_INTEGER,   INTEGER_MIN_VAL,   FEATURE_TYPE_FLOAT,   -SOLVER_MAX_DOUBLE)
1253     WHERE devl_project_id = p_dev_project_id
1254      AND minimum IS NULL
1255      AND(ps_node_type = PS_TYPE_FEATURE
1256      AND feature_type IN(FEATURE_TYPE_INTEGER , FEATURE_TYPE_FLOAT));
1257 
1258 
1259 --
1260 
1261     FOR c_processing IN
1262       (SELECT ps_node_id
1263        FROM cz_ps_nodes
1264        WHERE devl_project_id = p_dev_project_id
1265              AND ps_node_type = PS_TYPE_FEATURE
1266              AND feature_type=FEATURE_TYPE_LIST_OF_OPTIONS
1267              AND counted_options_flag='1')
1268     LOOP
1269       displayMessage(3,p_dev_project_id , 'NODE' , c_processing.ps_node_id,l_api_name,'CZ_CNV_ADV_OPT_QTY_MAX','MAXVAL', INTEGER_MAX_VALUE);
1270     END LOOP;
1271 
1272     UPDATE cz_ps_nodes
1273     SET MAX_QTY_PER_OPTION = fnd_profile.value('CZ_DEFAULT_MAX_QTY_INT')
1274     WHERE devl_project_id = p_dev_project_id
1275           AND ps_node_type = PS_TYPE_FEATURE
1276           AND feature_type=FEATURE_TYPE_LIST_OF_OPTIONS
1277           AND counted_options_flag='1';
1278 
1279 --
1280 
1281     FOR c_processing IN
1282       (SELECT ps_node_id, feature_type
1283        FROM cz_ps_nodes
1284        WHERE devl_project_id = p_dev_project_id
1285        AND maximum IS NULL
1286        AND(ps_node_type = PS_TYPE_FEATURE
1287        AND feature_type IN(FEATURE_TYPE_INTEGER , FEATURE_TYPE_FLOAT , FEATURE_TYPE_LIST_OF_OPTIONS)))
1288     LOOP
1289 
1290       IF c_processing.feature_type=   FEATURE_TYPE_INTEGER  OR c_processing.feature_type=FEATURE_TYPE_LIST_OF_OPTIONS  THEN
1291               displayMessage(3,p_dev_project_id , 'NODE' ,c_processing.ps_node_id,l_api_name,'CZ_CNV_ADV_VAL_MAX_BOUND','MAXVAL', INTEGER_MAX_VALUE);
1292       ELSE IF  c_processing.feature_type=   FEATURE_TYPE_FLOAT THEN
1293               displayMessage(3,p_dev_project_id , 'NODE' ,c_processing.ps_node_id,l_api_name,'CZ_CNV_ADV_VAL_MAX_BOUND','MAXVAL', SOLVER_MAX_DOUBLE);
1294            END IF;
1295       END IF;
1296     END LOOP;
1297     UPDATE cz_ps_nodes
1298     SET maximum = decode(feature_type,   FEATURE_TYPE_INTEGER,   INTEGER_MAX_VALUE, FEATURE_TYPE_LIST_OF_OPTIONS,  INTEGER_MAX_VALUE, FEATURE_TYPE_FLOAT,   SOLVER_MAX_DOUBLE)
1299     WHERE devl_project_id = p_dev_project_id
1300      AND maximum IS NULL
1301      AND(ps_node_type = PS_TYPE_FEATURE
1302      AND feature_type IN(FEATURE_TYPE_INTEGER , FEATURE_TYPE_FLOAT));
1303 
1304 --
1305     FOR c_processing IN
1306       (SELECT ps_node_id ,decimal_qty_flag , decode(USE_BOM_DEFAULT_QTY,'TRUE',initial_num_value,decode(decimal_qty_flag,   1,   SOLVER_MAX_DOUBLE,   INTEGER_MAX_VALUE)) changedValue
1307        FROM cz_ps_nodes
1308        WHERE devl_project_id = p_dev_project_id
1309        AND ((maximum IS NULL OR maximum =-1)
1310        AND(ps_node_type IN(PS_TYPE_BOM_MODEL,    PS_TYPE_BOM_OPTION_CLASS,    PS_TYPE_BOM_STD_ITEM)))
1311        )
1312     LOOP
1313       displayMessage(3,p_dev_project_id , 'NODE' ,c_processing.ps_node_id,l_api_name,'CZ_CNV_ADV_QTY_MAX_BOUND','MAXVAL', c_processing.changedValue);
1314     END LOOP;
1315 
1316     UPDATE cz_ps_nodes
1317     SET maximum = decode(USE_BOM_DEFAULT_QTY,'TRUE',initial_num_value,decode(decimal_qty_flag,   1,   SOLVER_MAX_DOUBLE,   INTEGER_MAX_VALUE))
1318     WHERE devl_project_id = p_dev_project_id
1319      AND (maximum IS NULL OR maximum =-1)
1320      AND(ps_node_type IN( PS_TYPE_BOM_OPTION_CLASS, PS_TYPE_BOM_STD_ITEM)); -- Bug15986942, removed PS_TYPE_BOM_MODEL from IN clause
1321 
1322 --- BUG 9467823 - Set maximum on non bom models - this is needed if MAX is not defined for the instantiable non-bom model
1323     FOR c_processing IN
1324       (SELECT ps_node_id ,decimal_qty_flag , INTEGER_MAX_VALUE changedValue
1325        FROM cz_ps_nodes
1326        WHERE devl_project_id = p_dev_project_id
1327        AND ((maximum IS NULL OR maximum =-1)
1328        AND instantiable_flag = NODE_INSTANTIABILITY_MULTIPLE
1329        AND (ps_node_type = PS_TYPE_REFERENCE OR ps_node_type = PS_TYPE_COMPONENT)
1330        AND item_id is null)
1331        )
1332     LOOP
1333       displayMessage(3,p_dev_project_id , 'NODE' ,c_processing.ps_node_id,l_api_name,'CZ_CNV_ADV_QTY_MAX_BOUND','MAXVAL', c_processing.changedValue);
1334     END LOOP;
1335 
1336     UPDATE cz_ps_nodes
1337     SET maximum = INTEGER_MAX_VALUE
1338     WHERE devl_project_id = p_dev_project_id
1339      AND (maximum IS NULL OR maximum =-1)
1340      AND instantiable_flag = NODE_INSTANTIABILITY_MULTIPLE
1341      AND (ps_node_type = PS_TYPE_REFERENCE OR ps_node_type = PS_TYPE_COMPONENT)
1342      AND item_id is null;
1343 
1344 ---Changed for bug 6737779
1345 
1346     UPDATE cz_ps_nodes
1347     SET minimum = decode(USE_BOM_DEFAULT_QTY,'TRUE',initial_num_value,decode(decimal_qty_flag, 1,0 ,1 ))
1348     WHERE devl_project_id = p_dev_project_id
1349      AND (minimum IS NULL OR minimum =0)
1350      AND(ps_node_type IN( PS_TYPE_BOM_OPTION_CLASS, PS_TYPE_BOM_STD_ITEM))  -- Bug15986942, removed PS_TYPE_BOM_MODEL from IN clause
1351     RETURNING ps_node_id , minimum  BULK COLLECT INTO v_cz_ids_tbl , v_cz_num_tbl;
1352 
1353 
1354     IF v_cz_ids_tbl.COUNT > 0 THEN
1355       FOR i IN v_cz_ids_tbl.FIRST .. v_cz_ids_tbl.LAST
1356       LOOP
1357          displayMessage(3,p_dev_project_id , 'NODE' ,v_cz_ids_tbl(i),l_api_name,'CZ_CNV_ADV_QTY_MIN_BOUND','MINVAL', v_cz_num_tbl(i));
1358       END LOOP;
1359       v_cz_ids_tbl.DELETE;
1360       v_cz_num_tbl.DELETE;
1361     END IF;
1362 
1363     UPDATE cz_ps_nodes psout
1364     SET minimum_selected = decode(USE_BOM_DEFAULT_QTY,'TRUE',initial_num_value,decode(decimal_qty_flag, 1,0,1 ))
1365     WHERE devl_project_id = p_dev_project_id
1366      AND (minimum_selected IS NULL OR minimum_selected =0)
1367      AND(ps_node_type =PS_TYPE_REFERENCE)
1368      AND EXISTS( SELECT 1 FROM cz_ps_nodes WHERE ps_node_id= psout.component_id
1369                  AND ps_node_type =PS_TYPE_BOM_MODEL )
1370     RETURNING ps_node_id , minimum_selected  BULK COLLECT INTO v_cz_ids_tbl , v_cz_num_tbl;
1371 
1372 
1373     IF v_cz_ids_tbl.COUNT > 0 THEN
1374       FOR i IN v_cz_ids_tbl.FIRST .. v_cz_ids_tbl.LAST
1375       LOOP
1376          displayMessage(3,p_dev_project_id , 'NODE' ,v_cz_ids_tbl(i),l_api_name,'CZ_CNV_ADV_QTY_MIN_BOUND','MINVAL', v_cz_num_tbl(i));
1377       END LOOP;
1378       v_cz_ids_tbl.DELETE;
1379       v_cz_num_tbl.DELETE;
1380     END IF;
1381 
1382 
1383 --
1384 
1385     FOR c_processing in (   SELECT ps_node_id ,decimal_qty_flag , initial_num_value , decode(USE_BOM_DEFAULT_QTY,'TRUE',initial_num_value,decode(decimal_qty_flag,   1,   SOLVER_MAX_DOUBLE,   INTEGER_MAX_VALUE)) changedValue FROM cz_ps_nodes
1386                                 WHERE devl_project_id = p_dev_project_id
1387                                 AND (maximum_selected IS NULL OR maximum_selected =-1)
1388                                 AND(ps_node_type =PS_TYPE_REFERENCE)
1389                                 and item_id is not null
1390     )LOOP
1391 
1392               displayMessage(3,p_dev_project_id , 'NODE' ,c_processing.ps_node_id,l_api_name,'CZ_CNV_ADV_QTY_MAX_BOUND','MAXVAL', c_processing.changedValue);
1393     END LOOP;
1394 
1395     UPDATE cz_ps_nodes
1396     SET maximum_selected = decode(USE_BOM_DEFAULT_QTY,'TRUE',initial_num_value,decode(decimal_qty_flag,   1,   SOLVER_MAX_DOUBLE,  INTEGER_MAX_VALUE))
1397     WHERE devl_project_id = p_dev_project_id
1398      AND (maximum_selected IS NULL OR maximum_selected =-1)
1399      AND(ps_node_type =PS_TYPE_REFERENCE)
1400      and item_id is not null ;
1401 
1402 
1403 
1404 ---
1405 
1406 
1407     UPDATE cz_ps_nodes
1408     SET maximum = INTEGER_MAX_VALUE
1409     WHERE devl_project_id = p_dev_project_id
1410      AND maximum IS NULL
1411      AND(ps_node_type IN(232))
1412      RETURNING ps_node_id BULK COLLECT INTO v_cz_ids_tbl;
1413 
1414     IF v_cz_ids_tbl.COUNT>0 THEN
1415      FOR i IN v_cz_ids_tbl.FIRST.. v_cz_ids_tbl.LAST
1416      LOOP
1417        displayMessage(3,p_dev_project_id , 'NODE' ,v_cz_ids_tbl(i),l_api_name,'CZ_CNV_ADV_OPT_QTY_MAX','MAXVAL', INTEGER_MAX_VALUE );
1418      END LOOP;
1419      v_cz_ids_tbl.DELETE;
1420     END IF;
1421 
1422 
1423 
1424 ----- Update default maximum values for total and resource .
1425 
1426     UPDATE cz_ps_nodes
1427     SET maximum =  DECODE(SIGN(nvl(initial_num_value,0) - SOLVER_MAX_DOUBLE), -1 , SOLVER_MAX_DOUBLE, 0 , SOLVER_MAX_DOUBLE , 1 , initial_num_value)
1428     WHERE devl_project_id = p_dev_project_id
1429      AND maximum IS NULL
1430      AND ps_node_type IN(PS_TYPE_TOTAL,PS_TYPE_RESOURCE)
1431      RETURNING ps_node_id , maximum  BULK COLLECT INTO v_cz_ids_tbl , v_cz_num_tbl;
1432 
1433     IF v_cz_ids_tbl.COUNT > 0 THEN
1434       FOR i IN v_cz_ids_tbl.FIRST .. v_cz_ids_tbl.LAST
1435       LOOP
1436               displayMessage(3,p_dev_project_id , 'NODE' ,v_cz_ids_tbl(i),l_api_name,'CZ_CNV_ADV_VAL_MAX_BOUND','MAXVAL', v_cz_num_tbl(i));
1437       END LOOP;
1438       v_cz_ids_tbl.DELETE;
1439       v_cz_num_tbl.DELETE;
1440     END IF;
1441 
1442 ----
1443 
1444     UPDATE cz_ps_nodes
1445     SET minimum = -SOLVER_MAX_DOUBLE
1446     WHERE devl_project_id = p_dev_project_id
1447      AND minimum IS NULL
1448      AND ps_node_type IN(PS_TYPE_TOTAL,PS_TYPE_RESOURCE)
1449      RETURNING ps_node_id BULK COLLECT INTO v_cz_ids_tbl;
1450 
1451     IF v_cz_ids_tbl.COUNT>0 THEN
1452       FOR i IN v_cz_ids_tbl.FIRST..v_cz_ids_tbl.LAST
1453       LOOP
1454               displayMessage(3,p_dev_project_id , 'NODE' ,v_cz_ids_tbl(i),l_api_name,'CZ_CNV_ADV_VAL_MIN_BOUND','MINVAL', -SOLVER_MAX_DOUBLE);
1455       END LOOP;
1456       v_cz_ids_tbl.DELETE;
1457     END IF;
1458 
1459 
1460   EXCEPTION
1461   WHEN others THEN
1462     l_msg := 'Fatal error in ' || l_api_name || '.' || v_ndebug || ': ' || SUBSTR(sqlerrm,   1,   900);
1463     log_msg(l_api_name,   v_ndebug,   l_msg,   fnd_log.level_unexpected);
1464     RAISE;
1465   END assignDefaultMinMaxvalues;
1466 
1467 
1468   --procedure to convert existing rules to those suitable for the FCE
1469   --Refer section 4.1.4 rule requirements
1470   PROCEDURE convertRules(p_dev_project_id IN cz_devl_projects.devl_project_id%TYPE,   p_rulefolderid IN cz_rules.rule_folder_id%TYPE) AS
1471 
1472   -- cursor to fetch ATAN2 rules which will be converted into ATAN
1473   CURSOR c_atan IS
1474   SELECT ex.*
1475   FROM cz_expression_nodes ex,
1476     cz_rules ru
1477   WHERE ru.devl_project_id = p_dev_project_id
1478    AND ru.rule_id = ex.rule_id
1479    AND ru.deleted_flag ='0'
1480    AND ex.template_id = 430
1481    AND ex.deleted_flag ='0';
1482 
1483   -- cursor to fetch data from rules having a numeric participant in a logic rule for a given devl_project_id
1484   CURSOR c_numeric_participant IS
1485   SELECT exp1.expr_node_id exp1id,
1486     exp2.expr_node_id exp2id,
1487     exp2.expr_parent_id exp2parentid,
1488     exp2.rule_id , psnode.ps_node_id
1489   FROM cz_expression_nodes exp1,
1490     cz_expression_nodes exp2,
1491     cz_ps_nodes psnode
1492   WHERE exp1.deleted_flag ='0'
1493    AND exp2.deleted_flag ='0'
1494    AND exp1.template_id IN(1,   2,   3,   4,   5)
1495    AND exp2.ps_node_id = psnode.ps_node_id
1496    AND exp1.rule_id = exp2.rule_id
1497    AND psnode.ps_node_type = PS_TYPE_FEATURE
1498    AND psnode.feature_type = FEATURE_TYPE_INTEGER
1499    AND psnode.minimum >= 0
1500    AND psnode.devl_project_id = p_dev_project_id
1501    AND exists (select 1 from cz_expression_nodes where
1502                 expr_node_id=exp2.expr_parent_id
1503                 and template_id in ( 306 ,307 ,360 ,552 ,21 )  -- All Logic operators
1504                );
1505 
1506   --cursor to fetch compatibility rule where more than one participant feature has a maximum number of selections greater than 1
1507   CURSOR c_compat IS
1508   SELECT DISTINCT cz_rules.rule_id,
1509     cz_rules.devl_project_id
1510   FROM cz_rules,
1511     cz_expression_nodes exp1,
1512     cz_expression_nodes exp2,
1513     cz_expression_nodes exp3
1514   WHERE rule_type IN(RULE_TYPE_COMPAT_TABLE,   RULE_TYPE_DESIGN_CHART_RULE,   RULE_TEMPLATE_FREEFORM_RULE)
1515    AND exp1.rule_id = exp2.rule_id
1516    AND exp1.rule_id = exp3.rule_id
1517    AND exp3.template_id = 23
1518    AND exp1.rule_id = cz_rules.rule_id
1519    AND exp1.expr_type = 207
1520    AND exp2.expr_type = 207
1521    AND exp1.expr_node_id <> exp2.expr_node_id
1522    AND EXISTS
1523     (SELECT 1
1524      FROM cz_expression_nodes expin1,
1525        cz_expression_nodes expin2,
1526        cz_ps_nodes ps1,
1527        cz_ps_nodes ps2
1528      WHERE expin1.expr_node_id = exp1.expr_parent_id
1529      AND expin2.expr_node_id = exp2.expr_parent_id
1530      AND expin2.ps_node_id = ps2.ps_node_id
1531      AND expin1.ps_node_id = ps1.ps_node_id
1532      AND ((ps1.maximum_selected > 1
1533           AND ps2.maximum_selected > 1
1534           )
1535           OR
1536           (ps1.maximum > 1
1537            AND ps2.maximum > 1
1538           )
1539          )
1540      )
1541   AND cz_rules.devl_project_id = p_dev_project_id
1542   UNION ALL
1543   SELECT DISTINCT  cf.rule_id ,ps.devl_project_id
1544   FROM cz_des_chart_features cf,
1545     cz_des_chart_features cf1,
1546     cz_ps_nodes ps,
1547     cz_ps_nodes ps1,
1548     cz_rules rule
1549   WHERE cf.rule_id = cf1.rule_id
1550    AND cf.feature_id = ps.ps_node_id
1551    AND cf1.feature_id = ps1.ps_node_id
1552    AND cf1.feature_id <> cf.feature_id
1553    AND ((ps.maximum_selected > 1
1554         AND ps1.maximum_selected > 1
1555         )
1556         OR
1557           (ps.maximum > 1
1558            AND ps1.maximum > 1
1559           )
1560         )
1561    AND rule.devl_project_id = p_dev_project_id
1562    AND rule.rule_id = cf.rule_id
1563    AND rule_type IN(24,   30);
1564 
1565 
1566   --cursor to fetch compatibility rule where one participant is a BOM Node
1567   CURSOR c_bom_compat IS
1568   SELECT DISTINCT cz_rules.rule_id,
1569     cz_rules.devl_project_id
1570   FROM cz_rules,
1571     cz_expression_nodes exp1,
1572     cz_expression_nodes exp2,
1573     cz_expression_nodes exp3
1574   WHERE rule_type IN(RULE_TYPE_COMPAT_TABLE,   RULE_TYPE_DESIGN_CHART_RULE,   RULE_TEMPLATE_FREEFORM_RULE)
1575    AND exp1.rule_id = exp2.rule_id
1576    AND exp1.rule_id = exp3.rule_id
1577    AND exp3.template_id = 23
1578    AND exp1.rule_id = cz_rules.rule_id
1579    AND exp1.expr_type = 207
1580    AND exp2.expr_type = 207
1581    AND exp1.expr_node_id <> exp2.expr_node_id
1582    AND EXISTS
1583     (SELECT 1
1584      FROM cz_expression_nodes expin1,
1585        cz_expression_nodes expin2,
1586        cz_ps_nodes ps1,
1587        cz_ps_nodes ps2
1588      WHERE expin1.expr_node_id = exp1.expr_parent_id
1589      AND expin2.expr_node_id = exp2.expr_parent_id
1590      AND expin2.ps_node_id = ps2.ps_node_id
1591      AND expin1.ps_node_id = ps1.ps_node_id
1592      AND (ps1.ps_node_type =PS_TYPE_BOM_MODEL
1593           OR ps2.ps_node_type =PS_TYPE_BOM_MODEL)
1594      )
1595   AND cz_rules.devl_project_id = p_dev_project_id
1596   UNION ALL
1597   SELECT DISTINCT cf.rule_id ,ps.devl_project_id
1598   FROM cz_des_chart_features cf,
1599     cz_des_chart_features cf1,
1600     cz_ps_nodes ps,
1601     cz_ps_nodes ps1,
1602     cz_rules rule
1603   WHERE cf.rule_id = cf1.rule_id
1604    AND cf.feature_id = ps.ps_node_id
1605    AND cf1.feature_id = ps1.ps_node_id
1606    AND cf1.feature_id <> cf.feature_id
1607    AND (ps.ps_node_type =PS_TYPE_BOM_MODEL  OR ps1.ps_node_type =PS_TYPE_BOM_MODEL  )
1608    AND rule.devl_project_id = p_dev_project_id
1609    AND rule.rule_id = cf.rule_id
1610    AND rule_type IN(24,30);
1611 
1612   l_atan c_atan % rowtype;
1613   l_expression_node_id cz_expression_nodes.expr_node_id%TYPE;
1614   l_api_name constant VARCHAR2(30) := 'convertRules';
1615   l_numeric_participant c_numeric_participant%rowtype;
1616   minseq  NUMBER;
1617   maxseq  NUMBER;
1618   l_expression_node_id1 cz_expression_nodes.expr_node_id%TYPE;
1619   l_ps_node_name cz_ps_nodes.name%type;
1620   l_msg VARCHAR2(2000);
1621   l_cz_rules_id cz_rules.rule_id%TYPE;
1622   BEGIN
1623 
1624     --Bug 6725690 , convert ZDIV operator to divide (/) operator.
1625 
1626     UPDATE cz_expression_nodes
1627     SET template_id = 408
1628     WHERE template_id = 404
1629      AND rule_id IN
1630       (SELECT rule_id
1631        FROM cz_rules
1632        WHERE devl_project_id = p_dev_project_id
1633        AND deleted_flag ='0')
1634     AND deleted_flag ='0'
1635     RETURNING rule_id BULK COLLECT INTO v_cz_ids_tbl;
1636 
1637     IF v_cz_ids_tbl.COUNT>0 THEN
1638       FOR i IN v_cz_ids_tbl.FIRST ..v_cz_ids_tbl.LAST
1639       LOOP
1640         cz_rule_text_gen.parse_rules(p_dev_project_id,   v_cz_ids_tbl(i));
1641       END LOOP;
1642       v_cz_ids_tbl.DELETE;
1643     END IF;
1644 
1645 
1646     -- DEFAULTS rules will be converted into IMPLIES, with default rule type indicator
1647     --Refer section 4.1.4.1.
1648 
1649     UPDATE cz_expression_nodes
1650     SET template_id = 2
1651     WHERE template_id = 5
1652      AND rule_id IN
1653       (SELECT rule_id
1654        FROM cz_rules
1655        WHERE devl_project_id = p_dev_project_id
1656        AND deleted_flag ='0')
1657     AND deleted_flag ='0'
1658     RETURNING rule_id BULK COLLECT INTO v_cz_ids_tbl;
1659 
1660 
1661 
1662     FORALL l_cz_rules_id IN v_cz_ids_tbl.FIRST .. v_cz_ids_tbl.LAST
1663        UPDATE cz_rules SET RULE_CLASS=RULE_CLASS_DEFAULT
1664        WHERE rule_id=v_cz_ids_tbl(l_cz_rules_id) ;
1665 
1666 
1667     IF v_cz_ids_tbl.COUNT>0 THEN
1668       FOR i IN v_cz_ids_tbl.FIRST ..v_cz_ids_tbl.LAST
1669       LOOP
1670         --change defaults to implies
1671         displayMessage(2,p_dev_project_id , 'RULE' ,v_cz_ids_tbl(i),l_api_name,'CZ_CNV_WARN_DEFAULTS');
1672         --Call procedure to generate rule text from the expression tree
1673         populate_cz_tables(true);
1674         cz_rule_text_gen.parse_rules(p_dev_project_id,   v_cz_ids_tbl(i));
1675       END LOOP;
1676       v_cz_ids_tbl.DELETE;
1677     END IF;
1678 
1679 
1680 
1681 ---
1682 
1683 
1684     -- NotTrue rules will be converted into NOT.
1685     --Refer section 4.1.4.2
1686 
1687     UPDATE cz_expression_nodes
1688     SET template_id = 552
1689     WHERE template_id = 360
1690      AND rule_id IN
1691       (SELECT rule_id
1692        FROM cz_rules
1693        WHERE devl_project_id = p_dev_project_id
1694        AND deleted_flag ='0')
1695     AND deleted_flag ='0'
1696     RETURNING rule_id BULK COLLECT INTO v_cz_ids_tbl;
1697 
1698     IF v_cz_ids_tbl.COUNT>0 THEN
1699       FOR i IN v_cz_ids_tbl.FIRST .. v_cz_ids_tbl.LAST
1700       LOOP
1701         --change template_id from 360 to 552
1702         displayMessage(2,p_dev_project_id , 'RULE' ,v_cz_ids_tbl(i),l_api_name,'CZ_CNV_WARN_NOTTRUE');
1703         populate_cz_tables(true);
1704         cz_rule_text_gen.parse_rules(p_dev_project_id,   v_cz_ids_tbl(i));
1705       END LOOP;
1706       v_cz_ids_tbl.DELETE;
1707     END IF;
1708 
1709 
1710 
1711     -- ATAN2 rules will be converted into ATAN.
1712     --Refer section 4.1.4.3
1713     FOR l_atan IN c_atan
1714     LOOP
1715       SELECT cz_expression_nodes_s.nextval
1716       INTO l_expression_node_id
1717       FROM dual;
1718       --Insert new ATAN record
1719 
1720         v_cz_expr_node_count:=v_cz_expr_node_count+1;
1721         v_cz_expression_nodes(v_cz_expr_node_count).EXPR_NODE_ID:=      l_expression_node_id      ;
1722         v_cz_expression_nodes(v_cz_expr_node_count).SEQ_NBR:=           '1'                       ;
1723         v_cz_expression_nodes(v_cz_expr_node_count).EXPR_PARENT_ID:=    l_atan.expr_parent_id     ;
1724         v_cz_expression_nodes(v_cz_expr_node_count).EXPR_TYPE:=         '200'                     ;
1725         v_cz_expression_nodes(v_cz_expr_node_count).TOKEN_LIST_SEQ:=    '8'                       ;
1726         v_cz_expression_nodes(v_cz_expr_node_count).RULE_ID:=           l_atan.rule_id            ;
1727         v_cz_expression_nodes(v_cz_expr_node_count).TEMPLATE_ID:=       '438'                     ;
1728         v_cz_expression_nodes(v_cz_expr_node_count).PARAM_SIGNATURE_ID:='91'                      ;
1729         v_cz_expression_nodes(v_cz_expr_node_count).PARAM_INDEX:=       '1'                       ;
1730         v_cz_expression_nodes(v_cz_expr_node_count).DATA_TYPE:=         '2'                       ;
1731         v_cz_expression_nodes(v_cz_expr_node_count).COLLECTION_FLAG:=   '0'                       ;
1732 --        v_cz_expression_nodes(v_cz_expr_node_count).SOURCE_OFFSET:=     '12'                      ;
1733         v_cz_expression_nodes(v_cz_expr_node_count).SOURCE_LENGTH:=     '4'                       ;
1734         v_cz_expression_nodes(v_cz_expr_node_count).MUTABLE_FLAG:=      '0'                       ;
1735 
1736 
1737       --update Atan2 to DIV record
1738       UPDATE cz_expression_nodes
1739       SET template_id = 408,
1740         expr_parent_id = l_expression_node_id
1741       WHERE expr_node_id = l_atan.expr_node_id;
1742       displayMessage(2,p_dev_project_id , 'RULE' ,l_atan.rule_id,l_api_name,'CZ_CNV_WARN_ATAN2_REMOVED');
1743       populate_cz_tables(true);
1744       cz_rule_text_gen.parse_rules(p_dev_project_id,   l_atan.rule_id);
1745     END LOOP;
1746     --
1747     -- Logic rules may only contain logical expressions as participants.
1748     --Any numeric participants in existing logic rules will be mapped to "expr > 0".
1749     --Refer section 4.1.4.6
1750 
1751     ---make this logic rule a statement rule
1752       UPDATE CZ_RULES set presentation_flag=0 where rule_id in
1753       (SELECT exp2.rule_id
1754           FROM cz_expression_nodes exp1,
1755             cz_expression_nodes exp2,
1756             cz_ps_nodes psnode
1757           WHERE exp1.deleted_flag ='0'
1758            AND exp2.deleted_flag ='0'
1759            AND exp1.template_id IN(1,   2,   3,   4,   5)
1760            AND exp2.ps_node_id = psnode.ps_node_id
1761            AND exp1.rule_id = exp2.rule_id
1762            AND psnode.ps_node_type = PS_TYPE_FEATURE
1763            AND psnode.feature_type = FEATURE_TYPE_INTEGER
1764            AND psnode.minimum >= 0
1765            AND psnode.devl_project_id = p_dev_project_id);
1766 
1767 
1768 
1769     FOR l_numeric_participant IN c_numeric_participant
1770     LOOP
1771 
1772 
1773         FOR c_cur IN (select 1 from cz_expression_nodes czr where czr.rule_id=l_numeric_participant.rule_id and czr.template_id=21) --Just to check that this is logic rule , will loop only once
1774         LOOP
1775 
1776         --make this as a statement rule
1777 
1778         update cz_expression_nodes set expr_type=200 where expr_type=222 and rule_id=l_numeric_participant.rule_id;
1779 
1780 
1781         select min(seq_nbr) ,max(seq_nbr) into minseq, maxseq from cz_expression_nodes where rule_id= l_numeric_participant.rule_id  and template_id in (306,307);
1782         update cz_expression_nodes set expr_parent_id=(select expr_node_id from cz_expression_nodes where rule_id= l_numeric_participant.rule_id and seq_nbr=minseq and template_id in (306,307))
1783                                    where rule_id= l_numeric_participant.rule_id and seq_nbr between minseq+1 and maxseq-2 ;
1784 
1785         update cz_expression_nodes set expr_parent_id=(select expr_node_id from cz_expression_nodes where rule_id= l_numeric_participant.rule_id and seq_nbr=maxseq and template_id in (306,307))
1786                                    where rule_id= l_numeric_participant.rule_id and  seq_nbr >maxseq;
1787 
1788 
1789         update cz_expression_nodes set expr_parent_id=(select expr_node_id from cz_expression_nodes where rule_id= l_numeric_participant.rule_id and seq_nbr=maxseq-1 and template_id IN(1,   2,   3,   4,   5))
1790         where rule_id= l_numeric_participant.rule_id and  seq_nbr in (minseq,maxseq);
1791 
1792         update cz_expression_nodes set expr_parent_id=null , seq_nbr=1 where expr_node_id=l_numeric_participant.exp1id;
1793         END LOOP;
1794 
1795     END LOOP;
1796 
1797 
1798 
1799     FOR l_numeric_participant IN c_numeric_participant
1800     LOOP
1801       SELECT cz_expression_nodes_s.nextval
1802       INTO l_expression_node_id
1803       FROM dual;
1804       --   > record
1805 
1806         v_cz_expr_node_count:=v_cz_expr_node_count+1;
1807         v_cz_expression_nodes(v_cz_expr_node_count).EXPR_NODE_ID        :=l_expression_node_id                       ;
1808         v_cz_expression_nodes(v_cz_expr_node_count).SEQ_NBR             :='1'                                        ;
1809         v_cz_expression_nodes(v_cz_expr_node_count).EXPR_PARENT_ID      :=l_numeric_participant.exp2parentid         ;
1810         v_cz_expression_nodes(v_cz_expr_node_count).EXPR_TYPE           :='200'                                      ;
1811         v_cz_expression_nodes(v_cz_expr_node_count).TOKEN_LIST_SEQ      :='10'                                       ;
1812         v_cz_expression_nodes(v_cz_expr_node_count).RULE_ID             :=l_numeric_participant.rule_id              ;
1813         v_cz_expression_nodes(v_cz_expr_node_count).TEMPLATE_ID         :='350'                                      ;
1814         v_cz_expression_nodes(v_cz_expr_node_count).PARAM_SIGNATURE_ID  :='81'                                       ;
1815         v_cz_expression_nodes(v_cz_expr_node_count).PARAM_INDEX         :='1'                                        ;
1816         v_cz_expression_nodes(v_cz_expr_node_count).DATA_TYPE           :='3'                                        ;
1817         v_cz_expression_nodes(v_cz_expr_node_count).COLLECTION_FLAG     :='0'                                        ;
1818 --        v_cz_expression_nodes(v_cz_expr_node_count).SOURCE_OFFSET       :='4'                                        ;
1819 --        v_cz_expression_nodes(v_cz_expr_node_count).SOURCE_LENGTH       :='38'                                       ;
1820         v_cz_expression_nodes(v_cz_expr_node_count).MUTABLE_FLAG        :='0'                                        ;
1821 
1822 
1823 
1824 
1825       UPDATE cz_expression_nodes
1826       SET expr_parent_id = l_expression_node_id,
1827         seq_nbr = 1
1828       WHERE expr_node_id = l_numeric_participant.exp2id;
1829       -- make count feature child of >
1830       SELECT cz_expression_nodes_s.nextval
1831       INTO l_expression_node_id1
1832       FROM dual;
1833       -- insert 0 record
1834 
1835         v_cz_expr_node_count:=v_cz_expr_node_count+1;
1836         v_cz_expression_nodes(v_cz_expr_node_count).EXPR_NODE_ID        :=l_expression_node_id1                    ;
1837         v_cz_expression_nodes(v_cz_expr_node_count).SEQ_NBR             :='2'                                      ;
1838         v_cz_expression_nodes(v_cz_expr_node_count).EXPR_PARENT_ID      :=l_expression_node_id                     ;
1839         v_cz_expression_nodes(v_cz_expr_node_count).EXPR_TYPE           :='201'                                    ;
1840         v_cz_expression_nodes(v_cz_expr_node_count).TOKEN_LIST_SEQ      :='10'                                     ;
1841         v_cz_expression_nodes(v_cz_expr_node_count).RULE_ID             :=l_numeric_participant.rule_id            ;
1842         v_cz_expression_nodes(v_cz_expr_node_count).PARAM_SIGNATURE_ID  :='2069'                                   ;
1843         v_cz_expression_nodes(v_cz_expr_node_count).PARAM_INDEX         :='1'                                      ;
1844         v_cz_expression_nodes(v_cz_expr_node_count).DATA_TYPE           :='1'                                      ;
1845 --        v_cz_expression_nodes(v_cz_expr_node_count).SOURCE_OFFSET       :='4'                                      ;
1846 --        v_cz_expression_nodes(v_cz_expr_node_count).SOURCE_LENGTH       :='38'                                     ;
1847         v_cz_expression_nodes(v_cz_expr_node_count).MUTABLE_FLAG        :='0'                                      ;
1848         v_cz_expression_nodes(v_cz_expr_node_count).DATA_NUM_VALUE      :='0'                                      ;
1849 
1850 
1851       -- insert record for const 0 under > record
1852       SELECT name INTO l_ps_node_name from cz_ps_nodes where ps_node_id=l_numeric_participant.ps_node_id;
1853       displayMessage(3,p_dev_project_id , 'RULE' ,l_numeric_participant.rule_id ,l_api_name,'CZ_CNV_ADV_NUM_IN_LOGIC','NODENAME1', l_ps_node_name,'NODENAME2', l_ps_node_name);
1854       DELETE FROM cz_expression_nodes where rule_id= l_numeric_participant.rule_id and template_id=21;
1855       populate_cz_tables(true);
1856       cz_rule_text_gen.parse_rules(p_dev_project_id,   l_numeric_participant.rule_id);
1857     END LOOP;
1858 
1859     -- display warning for compatibility rules  design chart /property based /explicit compatibility
1860     FOR l_compat IN c_compat
1861     LOOP
1862       displayMessage(1,p_dev_project_id , 'RULE' ,l_compat.rule_id,l_api_name,'CZ_CNV_FAIL_COMPAT_MAXSEL');
1863     END LOOP;
1864 
1865 
1866 
1867     -- LCE supported the use of BOM Models as participants in compatibility rules,
1868     -- however FCE will not support this.  Model Conversion should fail any
1869     -- compatibility rule (explicit, property-based, design chart, or CDL
1870     -- equivalent) that has a BOM Model node as a participant. Ref bug 6488867
1871 
1872     FOR l_compat IN c_bom_compat
1873     LOOP
1874       displayMessage(1,p_dev_project_id , 'RULE' ,l_compat.rule_id,l_api_name,'CZ_CNV_FAIL_BOM_NODE_COMPAT');
1875     END LOOP;
1876 
1877 
1878     -- Remove binding for onValidateEligibleTarget event
1879     -- Refer section 4.1.4.7
1880 
1881 
1882   --fetch Event bindings bound to the onValidateEligibleTarget event
1883 
1884     UPDATE cz_expression_nodes
1885     SET deleted_flag = '1'
1886     WHERE expr_node_id
1887     IN (
1888         SELECT expr_node_id
1889           FROM cz_rules czrules ,cz_expression_nodes EXP
1890           WHERE rule_type = RULE_TYPE_CONFIGURATION_EXT
1891           and  expr_type = 216
1892              AND EXP.rule_id = czrules.rule_id
1893              AND EXP.argument_signature_id = 2204
1894              AND czrules.deleted_flag ='0'
1895           AND exp.deleted_flag ='0'
1896           AND devl_project_id=p_dev_project_id
1897     )
1898     RETURNING rule_id BULK COLLECT INTO v_cz_ids_tbl ;
1899     --mark this binding as deleted
1900 
1901     IF v_cz_ids_tbl.COUNT >0 THEN
1902       FOR i IN v_cz_ids_tbl.FIRST .. v_cz_ids_tbl.LAST
1903       LOOP
1904         displayMessage(2,p_dev_project_id , 'RULE' ,v_cz_ids_tbl(i),l_api_name,'CZ_CNV_WARN_ON_VALIDATE_REM');
1905       END LOOP;
1906       v_cz_ids_tbl.DELETE;
1907     END IF;
1908 
1909   --Arguments to Configurator Extension event bindings now require the use of new Java interfaces.
1910 
1911      SELECT DISTINCT czrules.rule_id
1912      BULK COLLECT INTO v_cz_ids_tbl
1913      FROM cz_rules czrules,
1914           cz_expression_nodes exp
1915      WHERE rule_type = RULE_TYPE_CONFIGURATION_EXT
1916      AND expr_type = 216
1917      AND exp.rule_id = czrules.rule_id
1918      AND czrules.deleted_flag = '0'
1919      AND exp.deleted_flag = '0'
1920      AND devl_project_id = p_dev_project_id;
1921 
1922 
1923     IF v_cz_ids_tbl.COUNT >0 THEN
1924       FOR i IN v_cz_ids_tbl.FIRST .. v_cz_ids_tbl.LAST
1925       LOOP
1926         displayMessage(1,p_dev_project_id , 'RULE' ,v_cz_ids_tbl(i),l_api_name,'CZ_CNV_ERR_BIND_EVT');
1927       END LOOP;
1928       v_cz_ids_tbl.DELETE;
1929     END IF;
1930 
1931     --Display warning  For each Configurator Extension bound to an event that can occur during search.
1932     --Refer section 4.1.4.8
1933 
1934 
1935 
1936   -- fetch records for Configurator Extension bound to an event that can occur during search.
1937 
1938 
1939       FOR v_rule_ids IN (
1940           SELECT czrules.rule_id,
1941             expout.expr_node_id
1942           FROM cz_rules czrules,
1943             cz_expression_nodes expout
1944           WHERE czrules.rule_type = RULE_TYPE_CONFIGURATION_EXT
1945            AND czrules.rule_id = expout.rule_id
1946            AND EXISTS
1947             (SELECT 1
1948              FROM cz_expression_nodes EXP
1949              WHERE EXP.expr_type = 216
1950              AND EXP.rule_id = czrules.rule_id
1951              AND EXP.argument_signature_id IN(2209,    --postInstanceAdd
1952             2210,    --postInstanceDelete
1953             2215,    --postConnect
1954             2216,    --postDisconnect
1955             2217 --postValueChange
1956             --todo  to do find values for 'onValueBound'--'preInstanceDelete',--'preInstanceAdd',
1957             )
1958              AND EXP.deleted_flag ='0')
1959           AND expout.deleted_flag ='0'
1960            AND czrules.deleted_flag ='0'
1961            AND devl_project_id = p_dev_project_id
1962           )
1963         LOOP
1964          displayMessage(3,p_dev_project_id , 'RULE' ,v_rule_ids.rule_id,l_api_name,'CZ_CNV_ADV_CX_AUTOCOMPLETE');
1965       END LOOP;
1966 
1967   EXCEPTION
1968   WHEN others THEN
1969     l_msg := 'Fatal error in ' || l_api_name || '.' || v_ndebug || ': ' || SUBSTR(sqlerrm,   1,   900);
1970     log_msg(l_api_name,   v_ndebug,   l_msg,   fnd_log.level_unexpected);
1971     RAISE;
1972   END convertRules;
1973 
1974 
1975   --This procedure removes effectivity info and displays messages for conversion of total and resources to float and
1976   -- also messages for contribute/consume rule conversion.
1977   PROCEDURE processModel(p_dev_project_id IN cz_devl_projects.devl_project_id%TYPE,   p_rule_folderid cz_rules.rule_folder_id%TYPE) AS
1978   --Cursor to fetch Multi-Instantiable BOM Model Reference
1979   CURSOR c_bom_minmax IS
1980   SELECT ps_node_id
1981   FROM cz_ps_nodes psout
1982   WHERE ps_node_type = PS_TYPE_REFERENCE
1983    AND devl_project_id = p_dev_project_id
1984    AND instantiable_flag = NODE_INSTANTIABILITY_MULTIPLE
1985    AND component_id IN
1986     (SELECT ps_node_id
1987      FROM cz_ps_nodes psin
1988      WHERE ps_node_type = PS_TYPE_BOM_MODEL)
1989   ;
1990   l_msg VARCHAR2(2000);
1991   l_api_name constant VARCHAR2(30) := 'processModel';
1992   BEGIN
1993 
1994     FOR v_ps_node IN
1995       (SELECT ps_node_id,
1996          ps_node_type,
1997          feature_type,
1998          nvl(initial_value,initial_num_value ) initial_value,
1999          minimum,
2000          maximum,
2001          virtual_flag,name, ROWID
2002        FROM cz_ps_nodes
2003        WHERE(ps_node_type IN(PS_TYPE_FEATURE,    PS_TYPE_TOTAL,    PS_TYPE_RESOURCE,    PS_TYPE_BOM_MODEL,    PS_TYPE_BOM_OPTION_CLASS,    PS_TYPE_BOM_STD_ITEM,    PS_TYPE_OPTION)
2004             OR(ps_node_type = PS_TYPE_COMPONENT       AND virtual_flag = 1)) AND devl_project_id = p_dev_project_id)
2005     LOOP
2006       -- kdande; 09-Jan-2008; Bug 6722494
2007       IF ((v_ps_node.minimum IS NOT NULL) AND (v_ps_node.ps_node_type = PS_TYPE_FEATURE) AND (v_ps_node.feature_type = FEATURE_TYPE_TEXT)) THEN
2008         UPDATE cz_ps_nodes
2009         SET    user_input_required_flag = DECODE (v_ps_node.minimum, 1, '1', '0')
2010         WHERE  ROWID = v_ps_node.ROWID;
2011       END IF;
2012 
2013       createRules(p_dev_project_id,   v_ps_node.ps_node_id,   v_ps_node.ps_node_type,   v_ps_node.feature_type,   v_ps_node.initial_value,   v_ps_node.minimum,   p_rule_folderid,   v_ps_node.maximum);
2014         -- Totals and Resources will be converted to float Totals and Resources.
2015         --Reference section 4.1.3.4
2016         IF v_ps_node.ps_node_type IN(PS_TYPE_TOTAL,   PS_TYPE_RESOURCE) THEN
2017           IF v_ps_node.ps_node_type = PS_TYPE_TOTAL THEN
2018                   displayMessage(3,p_dev_project_id , 'NODE' ,v_ps_node.ps_node_id,l_api_name,'CZ_CNV_ADV_MAP_TO_DECIMAL');
2019           ELSE
2020                   displayMessage(3,p_dev_project_id , 'NODE' ,v_ps_node.ps_node_id,l_api_name,'CZ_CNV_ADV_RES_TO_DECIMAL');
2021           END IF;
2022         END IF;
2023     END LOOP;
2024 
2025 
2026     -- Effectivity is no longer supported on model node types Total, Resource, Integer Feat,
2027     -- Decimal Feature, and Virtual Component.  All Effectivity-related information should be
2028     -- cleared  for nodes of these types  .Reference TD section 4.1.3.1.
2029     removeEffectivityInfo(p_dev_project_id);
2030     -- Settings for Initial Minimum and Maximum Instances removed; BOM Maximum Quantity setting now defines the
2031     --total Quantity allowed across all Instances.
2032 
2033     UPDATE cz_ps_nodes psout
2034     SET maximum = NULL,
2035       minimum = NULL
2036     WHERE ps_node_type = PS_TYPE_REFERENCE
2037      AND devl_project_id = p_dev_project_id
2038      AND instantiable_flag = NODE_INSTANTIABILITY_MULTIPLE
2039      AND component_id IN (SELECT ps_node_id
2040                              FROM cz_ps_nodes psin
2041                              WHERE ps_node_type = PS_TYPE_BOM_MODEL);
2042 
2043     FOR v_ps_node_id IN c_bom_minmax
2044     LOOP
2045       displayMessage(2,p_dev_project_id , 'NODE' ,v_ps_node_id.ps_node_id,l_api_name,'CZ_CNV_WARN_BOM_INIT_VAL_REM');
2046     END LOOP;
2047     --Assign Default domain values as per section 4.1.3.2
2048     assignDefaultMinMaxvalues(p_dev_project_id);
2049 
2050 
2051     EXCEPTION
2052     WHEN others THEN
2053       l_msg := 'Fatal error in ' || l_api_name || '.' || v_ndebug || ': ' || SUBSTR(sqlerrm,   1,   900);
2054       log_msg(l_api_name,   v_ndebug,   l_msg,   fnd_log.level_unexpected);
2055       RAISE;
2056     END processModel;
2057 
2058 
2059     --Note this procedure is called from model conversion concurrent program
2060     PROCEDURE convertModels(p_model_conversion_set_id IN NUMBER) AS
2061     l_rule_folderid cz_rule_folders.rule_folder_id%TYPE;
2062     l_msg VARCHAR2(2000);
2063     l_api_name constant VARCHAR2(30) := 'convertModels';
2064     l_run_id  NUMBER;
2065     BEGIN
2066 
2067 
2068       v_cz_expr_node_count := 0;
2069       v_cz_expression_nodes.DELETE;
2070 
2071       v_cz_rule_count := 0;
2072       V_CZ_RULES.DELETE;
2073 
2074       v_model_conversion_set_id:=p_model_conversion_set_id;
2075       FOR v_models IN
2076         (    SELECT remote_model_id
2077              FROM cz_model_publications p , cz_pb_model_exports z
2078              WHERE p.export_status IN('OK')
2079              AND p.server_id = 0
2080              AND p.publication_mode = 'M'
2081              AND p.migration_group_id = p_model_conversion_set_id
2082              AND z.publication_id = p.publication_id
2083              AND z.model_id = p.object_id
2084              AND z.server_id = 0
2085              AND z.status = 'OK'
2086              and p.source_target_flag='S'
2087              AND p.deleted_flag='0'
2088         )
2089       LOOP
2090 
2091         displayMessage(0,v_models.remote_model_id , NULL ,v_models.remote_model_id,l_api_name, 'Model record');
2092 
2093 
2094         --mark this model as a fusion model
2095         --Bug 9176281
2096           EXECUTE IMMEDIATE ' BEGIN '
2097                             ||' UPDATE cz_devl_projects'
2098                             ||' SET config_engine_type = ''F'','
2099                             ||' post_migr_change_flag = NULL'
2100                             ||' WHERE devl_project_id = :1;'
2101                             ||' COMMIT;'
2102                             ||' END;' USING v_models.remote_model_id;
2103 
2104         l_rule_folderid := findOrCreateRuleFolder(v_models.remote_model_id);
2105         --Handle model conversion
2106         processModel(v_models.remote_model_id,   l_rule_folderid);
2107         --Handle UI conversion
2108         processUI(v_models.remote_model_id);
2109         convertRules(v_models.remote_model_id,   l_rule_folderid);
2110 
2111 
2112       END LOOP;
2113 
2114         --Dump rules data for newly created rules to the database tables .
2115         populate_cz_tables(true);
2116         --Mark rule_class=0 and config_engine_type='F' for all rules having null values for these fields
2117         UPDATE cz_rules
2118         SET config_engine_type = 'F' , rule_class=nvl(rule_class,0)
2119         WHERE deleted_flag='0'
2120          AND devl_project_id IN( SELECT remote_model_id
2121              FROM cz_model_publications p , cz_pb_model_exports z
2122              WHERE p.export_status IN('OK')
2123              AND p.server_id = 0
2124              AND p.publication_mode = 'M'
2125              AND p.migration_group_id = p_model_conversion_set_id
2126              AND z.publication_id = p.publication_id
2127              AND z.model_id = p.object_id
2128              AND z.server_id = 0
2129              AND z.status = 'OK'
2130              and p.source_target_flag='S'
2131              AND p.deleted_flag='0');
2132 
2133 
2134       -- Clearing Initial values need to be done at last for all models
2135       -- as some models may have a downward contribute/consume and hence may require the initial values for accumulator rule creation
2136       FOR v_models IN
2137         (    SELECT remote_model_id
2138              FROM cz_model_publications p , cz_pb_model_exports z
2139              WHERE p.export_status IN('OK')
2140              AND p.server_id = 0
2141              AND p.publication_mode = 'M'
2142              AND p.migration_group_id = p_model_conversion_set_id
2143              AND z.publication_id = p.publication_id
2144              AND z.model_id = p.object_id
2145              AND z.server_id = 0
2146              AND z.status = 'OK'
2147              and p.source_target_flag='S'
2148              AND p.deleted_flag='0'
2149         )
2150       LOOP
2151         --Clear Initial values for certain node types
2152         clearinitialvalues(v_models.remote_model_id);
2153 
2154         /************** For now donot call logicgen
2155 	--After processing rules and when done with conversion process for this model run logicgen .
2156         l_run_id:=0;
2157         BEGIN
2158 	  cz_fce_compile.compile_logic(v_models.remote_model_id,l_run_id);
2159         EXCEPTION WHEN OTHERS THEN
2160 	  NULL;  -- we donot want conversion to fail if logicgen reported an error .
2161         END;
2162        ***************/
2163       END LOOP;
2164       --Do Cleanup
2165       v_cz_expr_node_count := 0;
2166       v_cz_expression_nodes.DELETE;
2167       v_cz_rule_count := 0;
2168       V_CZ_RULES.DELETE;
2169       v_model_conversion_set_id:=NULL;
2170     EXCEPTION
2171     WHEN others THEN
2172       v_cz_expr_node_count := 0;
2173       v_cz_expression_nodes.DELETE;
2174       v_cz_rule_count := 0;
2175       V_CZ_RULES.DELETE;
2176       l_msg := 'Fatal error in ' || l_api_name || '.' || v_ndebug || ': ' || SUBSTR(sqlerrm,   1,   900);
2177       log_msg(l_api_name,   v_ndebug,   l_msg,   fnd_log.level_unexpected);
2178       v_model_conversion_set_id:=NULL;
2179       RAISE;
2180     END convertModels;
2181 
2182 
2183 
2184 
2185 ---------------------------------------------------------------------------------------
2186 /*
2187  * Copy Model For Conversionprocedure.
2188  * @param errbuf       Standard Oracle Concurrent Program output parameters.
2189  * @param retcode      Standard Oracle Concurrent Program output parameters.
2190  * @param p_request_id This is the CZ_MODEL_PUBLICATIONS, MIGRATION_GROUP_ID of the migration request.
2191  *                     Migration request is created by Developer and contains the list of all models selected
2192  *                     for Migration from the source's Configurator Repository, target Instance name and
2193  *                     target Repository Folder.
2194  */
2195 
2196 PROCEDURE copy_model_for_conversion(errbuf       OUT NOCOPY VARCHAR2,
2197                             retcode      OUT NOCOPY NUMBER,
2198                             p_request_id IN  NUMBER
2199                            ) IS
2200   l_status         VARCHAR2(3);
2201   l_publication_id NUMBER;
2202   l_run_id         NUMBER := 0;
2203   l_mig_group_found BOOLEAN :=FALSE;
2204   l_api_name        CONSTANT VARCHAR2(30) := 'copy_model_for_conversion';
2205   PUB_ERROR        EXCEPTION;
2206 BEGIN
2207 
2208   retcode:=0;
2209   cz_pb_mgr.GLOBAL_EXPORT_RETCODE := 0;
2210 
2211   FOR c_pub IN (SELECT publication_id ,max(node_depth) mdepth FROM cz_model_publications mp ,cz_model_ref_expls mr
2212                  WHERE mp.migration_group_id = p_request_id AND mp.deleted_flag = '0' and mr.deleted_flag = '0'
2213                  AND mp.publication_mode='M'
2214                  and mr.model_id    =mp.object_id
2215                  group by   publication_id
2216                  order by mdepth asc
2217                 )LOOP
2218 
2219     l_mig_group_found :=TRUE;
2220     cz_pb_mgr.publish_model(c_pub.publication_id, l_run_id, l_status);
2221     IF l_status = cz_pb_mgr.PUBLICATION_ERROR THEN
2222         RAISE PUB_ERROR;
2223     END IF;
2224 
2225     errbuf := NULL;
2226     IF(cz_pb_mgr.GLOBAL_EXPORT_RETCODE = 1)THEN
2227       errbuf := CZ_UTILS.GET_TEXT('CZ_MM_WARNING');
2228     ELSIF(cz_pb_mgr.GLOBAL_EXPORT_RETCODE = 2) THEN
2229       errbuf := CZ_UTILS.GET_TEXT('CZ_MM_FAILURE');
2230     END IF;
2231   END LOOP;
2232 
2233   IF NOT l_mig_group_found THEN
2234      errbuf := cz_utils.get_text('CZ_INVALID_MIGR_GROUP_NUMBER', 'MIGRGRP', p_request_id);
2235      log_msg(l_api_name, v_ndebug, errbuf , FND_LOG.LEVEL_PROCEDURE);
2236      raise_application_error('-20020', 'INVALID_MIGRATION_GROUP');
2237   END IF;
2238 
2239   retcode := cz_pb_mgr.GLOBAL_EXPORT_RETCODE;
2240 
2241 EXCEPTION
2242   WHEN OTHERS THEN
2243     retcode := 2;
2244     log_msg(l_api_name,   v_ndebug,   errbuf,   fnd_log.level_unexpected);
2245     errbuf := CZ_UTILS.GET_TEXT('CZ_MM_UNEXPECTED');
2246     RAISE;
2247 END;
2248 
2249 
2250 Procedure  Model_Convert_CP(errbuf out nocopy varchar2,
2251         Retcode out nocopy number,
2252         P_request_id in number default null)   is
2253 req_data varchar2(10);
2254 r number;
2255 i number;
2256 b boolean;
2257 noofreports number:=0;
2258 
2259 call_status boolean;
2260 rphase varchar2(80);
2261 rstatus varchar2(80);
2262 dphase varchar2(30);
2263 dstatus varchar2(30);
2264 message varchar2(240);
2265 L_API_NAME        CONSTANT VARCHAR2(30) := 'Model_Convert_CP';
2266 L_RETURN_STATUS   VARCHAR2(100)   ;
2267 L_MSG_COUNT       NUMBER          ;
2268 L_MSG_DATA        VARCHAR2(2000)  ;
2269 ERR_PROFILE       EXCEPTION;
2270 l_migration_group_id cz_model_publications.migration_group_id%TYPE;
2271 L_ERROR_IN_CP     BOOLEAN;
2272 
2273 Begin
2274 
2275 fnd_msg_pub.initialize;
2276 cz_model_convert.CONVERT_MODEL:=TRUE;
2277 L_ERROR_IN_CP :=FALSE;
2278 
2279         IF fnd_profile.value('CZ_BOM_DEFAULT_QTY_DOMN')='Y' THEN
2280                 USE_BOM_DEFAULT_QTY:='TRUE';
2281         ELSE
2282                 USE_BOM_DEFAULT_QTY:='FALSE';
2283         END IF;
2284 
2285 
2286        --get integer and decimal max values from profiles
2287 
2288 
2289        INTEGER_MAX_VALUE   := fnd_profile.value('CZ_DEFAULT_MAX_QTY_INT');
2290        SOLVER_MAX_DOUBLE := fnd_profile.value('CZ_DEFAULT_MAX_QTY_DEC');
2291 
2292        IF (INTEGER_MAX_VALUE IS NULL OR SOLVER_MAX_DOUBLE IS NULL) THEN
2293               log_msg('Model_Convert_CP', 0,  cz_utils.get_text('CZ_CNV_ERR_PROFILE_NOT_SET')  ,   fnd_log.level_unexpected);
2294               RAISE ERR_PROFILE;
2295        END IF;
2296 
2297 
2298        INTEGER_MIN_VAL := INTEGER_MAX_VALUE * -1;
2299 
2300 
2301 
2302         SELECT COUNT(*)
2303         INTO noofreports
2304         FROM
2305           (SELECT DISTINCT migration_group_id
2306            FROM cz_model_publications
2307            WHERE deleted_flag ='0'
2308            AND publication_mode = 'M'
2309            AND(migration_group_id = p_request_id OR(p_request_id IS NULL AND migration_group_id IS NOT NULL))
2310            AND export_status = 'PEN'
2311            AND server_id = 0);
2312 
2313         IF(noofreports=0  and fnd_conc_global.request_data IS NULL ) THEN
2314                 log_msg('Model_Convert_CP', 0,   'No pending request with the supplied Conversion Set ID',   fnd_log.level_unexpected);
2315                 errbuf := 'Error in model conversion!';
2316                 retcode :=  2;
2317                 raise ERR_PROFILE;
2318 
2319         END IF;
2320 
2321         For  c_model_conv IN (
2322                 SELECT DISTINCT migration_group_id
2323                 FROM cz_model_publications mp
2324                 WHERE deleted_flag ='0' and
2325                 publication_mode='M'
2326                 AND server_id = 0
2327                 AND export_status = 'PEN'
2328                 AND (migration_group_id = p_request_id
2329                 OR(P_request_id is null AND migration_group_id IS NOT NULL   ))
2330         ) LOOP
2331 
2332      BEGIN
2333         BEGIN
2334 
2335         l_migration_group_id:=c_model_conv.migration_group_id;
2336 	log_msg('Model_Convert_CP', 0,   'The Migration Group id that is in process is '||l_migration_group_id,   fnd_log.level_unexpected);
2337         --
2338         -- Read the value from REQUEST_DATA. If this is the PL/SQL APIs for Concurrent Processing
2339         -- first run of the program, then this value will be
2340         -- null.
2341         -- Otherwise, this will be the value that we passed to
2342         -- SET_REQ_GLOBALS on the previous run.
2343         --
2344         req_data := fnd_conc_global.request_data;
2345 
2346 	-- If this is the first run, well set i = 1.
2347         -- Otherwise we will set i = request_data + 1, and we will
2348         -- exit if we are done.
2349         --
2350         IF (req_data is not null) then
2351                 i := to_number(req_data);
2352                 i := i + 1;
2353                 IF (i > noofreports+1 ) THEN
2354                         errbuf := 'Done!';
2355                         retcode := 0 ;
2356                         return;
2357                 END IF;
2358         ELSE
2359         i := 1;
2360         END IF;
2361         --this procedures creates copy of the existing model
2362         copy_model_for_conversion(errbuf, Retcode, c_model_conv.migration_group_id);
2363         commit;
2364         UPDATE cz_model_publications set export_status='OK' where export_status='PEN' and migration_group_id=c_model_conv.migration_group_id;
2365         --this procedure converts the copied LCE models to FCE standard
2366         convertModels(c_model_conv.migration_group_id);
2367         commit;
2368         --
2369         -- Submit the child request. The sub_request parameter
2370         -- must be set to 'Y'.
2371         --
2372         b:=fnd_request.ADD_LAYOUT (
2373          TEMPLATE_APPL_NAME             =>  'CZ',
2374          TEMPLATE_CODE                  =>  'CZ_MDLCONV',
2375          TEMPLATE_LANGUAGE              =>  'EN',
2376          TEMPLATE_TERRITORY             =>  'US',
2377          OUTPUT_FORMAT                  =>  'PDF'
2378          );
2379 
2380         --Submit a new sub request for generating a XML publisher report
2381         r := fnd_request.submit_request('CZ','CZ_MDLCONV', 'Model Conversion Report - Conversion Set '|| c_model_conv.migration_group_id, NULL ,TRUE, c_model_conv.migration_group_id);
2382 
2383         IF r = 0 THEN
2384                 --
2385                 -- If request submission failed, exit with error.
2386                 --
2387                 errbuf := fnd_message.get;
2388                 retcode := 2;
2389         ELSE
2390                 --
2391                 log_msg('Model_Convert_CP', 0 ,
2392                    'Model Conversion Report Generation has been submitted as a Concurrent Request with ID '||r||'.  Please review the output of the Concurrent Process for important messages about the conversion.', fnd_log.level_unexpected);
2393                 errbuf := 'Request submitted!';
2394                 retcode := 0 ;
2395         END IF;
2396 
2397         COMMIT;
2398         EXCEPTION WHEN OTHERS THEN
2399               L_ERROR_IN_CP := TRUE;
2400               retcode := 2;
2401               errbuf := cz_utils.get_text('CZ_CNV_UNEXPECTED');
2402               log_msg('Model_Convert_CP', 0,   'Error submitting request for report generation.',   fnd_log.level_unexpected);
2403               IF(errbuf <> cz_utils.get_text('CZ_CNV_UNEXPECTED'))THEN
2404 	      log_msg(l_api_name,   v_ndebug,   errbuf,   fnd_log.level_unexpected);
2405 	 END IF;
2406 	 cz_model_convert.CONVERT_MODEL:=FALSE;
2407  -- rollback model copy operation when there is an error
2408  --If  "cz_model_migration_pvt .migrate_models_cp" call not completed successfully then         Mark the migrated models as deleted .
2409 
2410 	retcode := 2;
2411 	errbuf := cz_utils.get_text('CZ_CNV_UNEXPECTED');
2412 
2413  FOR c_process IN (
2414 
2415              SELECT remote_model_id
2416              FROM cz_model_publications p , cz_pb_model_exports z
2417              WHERE p.export_status IN('OK')
2418              AND p.server_id = 0
2419              AND p.publication_mode = 'M'
2420              AND p.migration_group_id = P_request_id
2421              AND z.publication_id = p.publication_id
2422              AND z.model_id = p.object_id
2423              AND z.server_id = 0
2424              AND z.status = 'OK'
2425              and p.source_target_flag='S'
2426              AND p.deleted_flag='0'
2427             )LOOP
2428           BEGIN
2429              cz_developer_utils_pvt.delete_model(c_process.remote_model_id,L_RETURN_STATUS,L_MSG_COUNT,L_MSG_DATA);
2430           EXCEPTION WHEN OTHERS THEN
2431 	    errbuf := 'Fatal error in ' || l_api_name || '.' || v_ndebug || ': ' || SUBSTR(sqlerrm,   1,   900);
2432 	    log_msg(l_api_name,   v_ndebug,   errbuf,   fnd_log.level_unexpected);
2433           END;
2434 
2435   END LOOP;
2436 
2437    --an error has occured update status to reflect this
2438  UPDATE cz_model_publications SET export_status='ERR' WHERE migration_group_id = l_migration_group_id  and server_id=0 ;
2439  commit;
2440   END;
2441   BEGIN
2442          call_status :=  FND_CONCURRENT.GET_REQUEST_STATUS(r, '', '',    rphase,rstatus,dphase,dstatus, message);
2443                 IF dphase<>'COMPLETE' THEN
2444                    fnd_conc_global.set_req_globals(conc_status => 'PAUSED', request_data => to_char(i));
2445                 END IF;
2446                 --no need to pause if child completed
2447                 EXCEPTION WHEN OTHERS THEN
2448                         NULL;
2449 END;
2450   log_msg('Model_Convert_CP', 0,   'The Migration Group id that is completed is '||l_migration_group_id,   fnd_log.level_unexpected);
2451 END;
2452 END LOOP;
2453  cz_model_convert.CONVERT_MODEL:=FALSE;
2454               IF(L_ERROR_IN_CP)THEN
2455               retcode :=2;
2456               errbuf := cz_utils.get_text('CZ_CNV_UNEXPECTED');
2457         END IF;
2458 EXCEPTION WHEN ERR_PROFILE THEN
2459  IF(errbuf <> cz_utils.get_text('CZ_CNV_UNEXPECTED'))THEN
2460 	 log_msg(l_api_name,   v_ndebug,   errbuf,   fnd_log.level_unexpected);
2461  END IF;
2462  cz_model_convert.CONVERT_MODEL:=FALSE;
2463  retcode := 2;
2464  errbuf := cz_utils.get_text('CZ_CNV_UNEXPECTED');
2465  commit;
2466 WHEN OTHERS THEN
2467  IF(errbuf <> cz_utils.get_text('CZ_CNV_UNEXPECTED'))THEN
2468 	 log_msg(l_api_name,   v_ndebug,   errbuf,   fnd_log.level_unexpected);
2469  END IF;
2470 End Model_Convert_CP;
2471 
2472 
2473 FUNCTION GET_UI_PATH(inParent_id IN NUMBER) RETURN VARCHAR2 is
2474 l_qualified  VARCHAR2(2000) := ' ';
2475 BEGIN
2476 
2477         IF inParent_id IS  NOT NULL THEN
2478           select name INTO l_qualified from cz_ui_defs where ui_def_id = (select max(ui_def_id) from cz_ui_page_elements  where element_id = to_char(inParent_id));
2479           l_qualified:=l_qualified||'.Pages';
2480           FOR parent_node IN (SELECT distinct(name) , element_id FROM cz_ui_page_elements
2481                            WHERE deleted_flag = '0'
2482                            START WITH element_id = to_char(inParent_id)
2483                            CONNECT BY PRIOR parent_element_id=element_id
2484                            order by element_id ) LOOP
2485 
2486                     IF(LENGTH(parent_node.name) + LENGTH(l_qualified) + 1 < 2000)  THEN
2487                           l_qualified := l_qualified||'.' || parent_node.name ;
2488                     ELSE
2489                           EXIT;
2490                     END IF;
2491           END LOOP;
2492         END IF;
2493  RETURN l_qualified;
2494 END GET_UI_PATH;
2495 
2496 
2497 
2498 END CZ_MODEL_CONVERT;