DBA Data[Home] [Help]

PACKAGE BODY: APPS.PO_VAL_NOTIFICATION_CONTROLS

Source


1 PACKAGE BODY PO_VAL_NOTIFICATION_CONTROLS AS
2 -- $Header: PO_VAL_NOTIFICATION_CONTROLS.plb 120.1 2005/08/12 17:55:05 sbull noship $
3 
4 c_entity_type_NOTIF_CTRL CONSTANT VARCHAR2(30) := PO_VALIDATIONS.c_entity_type_NOTIF_CTRL;
5 
6 -- Constants for columns.
7 c_START_DATE_ACTIVE CONSTANT VARCHAR2(30) := 'START_DATE_ACTIVE';
8 c_NOTIFICATION_QTY_PERCENTAGE CONSTANT VARCHAR2(30) := 'NOTIFICATION_QTY_PERCENTAGE';
9 c_NOTIFICATION_AMOUNT CONSTANT VARCHAR2(30) := 'NOTIFICATION_AMOUNT';
10 
11 c_EXPIRATION CONSTANT VARCHAR2(30) := 'EXPIRATION';
12 
13 ---------------------------------------------------------------------------
14 -- Modules for debugging.
15 ---------------------------------------------------------------------------
16 
17 -- The module base for this package.
18 D_PACKAGE_BASE CONSTANT VARCHAR2(50) :=
19   PO_LOG.get_package_base('PO_VAL_NOTIFICATION_CTRL');
20 
21 -- The module base for the subprogram.
22 D_warning_delay_gt_zero CONSTANT VARCHAR2(100) :=
23   PO_LOG.get_subprogram_base(D_PACKAGE_BASE,'warning_delay_gt_zero');
24 
25 -- The module base for the subprogram.
26 D_start_date_le_end_date CONSTANT VARCHAR2(100) :=
27   PO_LOG.get_subprogram_base(D_PACKAGE_BASE,'start_date_le_end_date');
28 
29 -- The module base for the subprogram.
30 D_percent_le_one_hundred CONSTANT VARCHAR2(100) :=
31   PO_LOG.get_subprogram_base(D_PACKAGE_BASE,'percent_le_one_hundred');
32 
33 -- The module base for the subprogram.
34 D_amount_gt_zero CONSTANT VARCHAR2(100) :=
35   PO_LOG.get_subprogram_base(D_PACKAGE_BASE,'amount_gt_zero');
36 
37 D_amount_not_null CONSTANT VARCHAR2(100) :=
38   PO_LOG.get_subprogram_base(D_PACKAGE_BASE,'amount_not_null');
39 
40 D_start_date_active_not_null CONSTANT VARCHAR2(100) :=
41   PO_LOG.get_subprogram_base(D_PACKAGE_BASE,'start_date_active_not_null');
42 
43 
44 -------------------------------------------------------------------------
45 -- Check if the start date is less than the end date.
46 -------------------------------------------------------------------------
47 PROCEDURE start_date_le_end_date(
48   p_notification_id_tbl   IN  PO_TBL_NUMBER
49 , p_start_date_active_tbl IN  PO_TBL_DATE
50 , p_end_date_active_tbl   IN  PO_TBL_DATE
51 , x_results       IN OUT NOCOPY PO_VALIDATION_RESULTS_TYPE
52 , x_result_type   OUT NOCOPY    VARCHAR2
53 )
54 IS
55 BEGIN
56 
57 PO_VALIDATION_HELPER.start_date_le_end_date(
58   p_calling_module => D_start_date_le_end_date
59 , p_start_date_tbl => p_start_date_active_tbl
60 , p_end_date_tbl => p_end_date_active_tbl
61 , p_entity_id_tbl => p_notification_id_tbl
62 , p_entity_type => c_entity_type_NOTIF_CTRL
63 , p_column_name => c_START_DATE_ACTIVE
64 , p_column_val_selector => NULL
65 , p_message_name => PO_MESSAGE_S.PO_ALL_DATE_BETWEEN_START_END
66 , x_results => x_results
67 , x_result_type => x_result_type
68 );
69 
70 END start_date_le_end_date;
71 
72 -------------------------------------------------------------------------
73 -- Check if the notification quantity percentage is less than one hundred
74 -------------------------------------------------------------------------
75 PROCEDURE percent_le_one_hundred(
76   p_notification_id_tbl       IN  PO_TBL_NUMBER
77 , p_notif_qty_percentage_tbl  IN  PO_TBL_NUMBER
78 , x_results       IN OUT NOCOPY PO_VALIDATION_RESULTS_TYPE
79 , x_result_type   OUT NOCOPY    VARCHAR2
80 )
81 IS
82 d_mod CONSTANT VARCHAR2(100) := D_percent_le_one_hundred;
83 l_results_count NUMBER;
84 BEGIN
85 
86 -- TODO: change to PO_VALIDATION_HELPER.within_percentage_range
87 
88 IF PO_LOG.d_proc THEN
89   PO_LOG.proc_begin(d_mod,'p_notification_id_tbl',p_notification_id_tbl);
90   PO_LOG.proc_begin(d_mod,'p_notif_qty_percentage_tbl',p_notif_qty_percentage_tbl);
91   PO_LOG.log(PO_LOG.c_PROC_BEGIN,d_mod,NULL,'x_results',x_results);
92 END IF;
93 
94 IF (x_results IS NULL) THEN
95   x_results := PO_VALIDATION_RESULTS_TYPE.new_instance();
96 END IF;
97 
98 l_results_count := x_results.result_type.COUNT;
99 
100 FOR i IN 1 .. p_notification_id_tbl.COUNT LOOP
101   IF (p_notif_qty_percentage_tbl(i) > 100) THEN
102     x_results.add_result(
103       p_entity_type => c_entity_type_NOTIF_CTRL
104     , p_entity_id => p_notification_id_tbl(i)
105     , p_column_name => c_NOTIFICATION_QTY_PERCENTAGE
106     , p_column_val => TO_CHAR(p_notif_qty_percentage_tbl(i))
107     , p_message_name => PO_MESSAGE_S.PO_AMT_GRT_AGD_AMT
108     );
109   END IF;
110 END LOOP;
111 
112 IF (l_results_count < x_results.result_type.COUNT) THEN
113   x_result_type := PO_VALIDATIONS.c_result_type_FAILURE;
114 ELSE
115   x_result_type := PO_VALIDATIONS.c_result_type_SUCCESS;
116 END IF;
117 
118 IF PO_LOG.d_proc THEN
119   PO_LOG.proc_end(d_mod,'x_result_type',x_result_type);
120   PO_LOG.log(PO_LOG.c_PROC_END,d_mod,NULL,'x_results',x_results);
121 END IF;
122 
123 EXCEPTION
124 WHEN OTHERS THEN
125   IF PO_LOG.d_exc THEN
126     PO_LOG.exc(d_mod,0,NULL);
127   END IF;
128   RAISE;
129 
130 END percent_le_one_hundred;
131 
132 -------------------------------------------------------------------------
133 -- Check if the notification amount is greater than zero
134 -------------------------------------------------------------------------
135 PROCEDURE amount_gt_zero(
136   p_notification_id_tbl         IN  PO_TBL_NUMBER
137 , p_notification_amount_tbl     IN  PO_TBL_NUMBER
138 , x_results       IN OUT NOCOPY PO_VALIDATION_RESULTS_TYPE
139 , x_result_type   OUT NOCOPY    VARCHAR2
140 )
141 IS
142 BEGIN
143 
144 PO_VALIDATION_HELPER.greater_than_zero(
145   p_calling_module => D_amount_gt_zero
146 , p_null_allowed_flag => PO_CORE_S.g_parameter_YES
147 , p_value_tbl => p_notification_amount_tbl
148 , p_entity_id_tbl => p_notification_id_tbl
149 , p_entity_type => c_entity_type_NOTIF_CTRL
150 , p_column_name => c_NOTIFICATION_AMOUNT
151 , p_message_name => PO_MESSAGE_S.PO_ALL_ENTER_VALUE_GT_ZERO
152 , x_results => x_results
153 , x_result_type => x_result_type
154 );
155 
156 END amount_gt_zero;
157 
158 
159 -------------------------------------------------------------------------
160 -- Checks that the Amount is entered for a non-EXPIRATION control.
161 -------------------------------------------------------------------------
162 PROCEDURE amount_not_null(
163   p_notif_id_tbl         IN  PO_TBL_NUMBER
164 , p_notif_amount_tbl     IN  PO_TBL_NUMBER
165 , p_notif_condition_code_tbl    IN  PO_TBL_VARCHAR30
166 , x_results       IN OUT NOCOPY PO_VALIDATION_RESULTS_TYPE
167 , x_result_type   OUT NOCOPY    VARCHAR2
168 )
169 IS
170 d_mod CONSTANT VARCHAR2(100) := D_amount_not_null;
171 l_results_count NUMBER;
172 BEGIN
173 
174 IF PO_LOG.d_proc THEN
175   PO_LOG.proc_begin(d_mod,'p_notif_id_tbl',p_notif_id_tbl);
176   PO_LOG.proc_begin(d_mod,'p_notif_amount_tbl',p_notif_amount_tbl);
177   PO_LOG.proc_begin(d_mod,'p_notif_condition_code_tbl',p_notif_condition_code_tbl);
178   PO_LOG.log(PO_LOG.c_PROC_BEGIN,d_mod,NULL,'x_results',x_results);
179 END IF;
180 
181 IF (x_results IS NULL) THEN
182   x_results := PO_VALIDATION_RESULTS_TYPE.new_instance();
183 END IF;
184 
185 l_results_count := x_results.result_type.COUNT;
186 
187 FOR i IN 1 .. p_notif_id_tbl.COUNT LOOP
188   IF (    p_notif_condition_code_tbl(i) <> c_EXPIRATION
189       AND p_notif_amount_tbl(i) IS NULL
190      )
191   THEN
192     x_results.add_result(
193       p_entity_type => c_ENTITY_TYPE_NOTIF_CTRL
194     , p_entity_id => p_notif_id_tbl(i)
195     , p_column_name => c_NOTIFICATION_AMOUNT
196     , p_message_name => PO_MESSAGE_S.PO_ALL_NOT_NULL
197     );
198   END IF;
199 END LOOP;
200 
201 IF (l_results_count < x_results.result_type.COUNT) THEN
202   x_result_type := PO_VALIDATIONS.c_result_type_FAILURE;
203 ELSE
204   x_result_type := PO_VALIDATIONS.c_result_type_SUCCESS;
205 END IF;
206 
207 IF PO_LOG.d_proc THEN
208   PO_LOG.proc_end(d_mod,'x_result_type',x_result_type);
209   PO_LOG.log(PO_LOG.c_PROC_END,d_mod,NULL,'x_results',x_results);
210 END IF;
211 
212 EXCEPTION
213 WHEN OTHERS THEN
214   IF PO_LOG.d_exc THEN
215     PO_LOG.exc(d_mod,0,NULL);
216   END IF;
217   RAISE;
218 
219 END amount_not_null;
220 
221 
222 -------------------------------------------------------------------------
223 -- Checks that the Start Date Active is entered for an EXPIRATION control.
224 -------------------------------------------------------------------------
225 PROCEDURE start_date_active_not_null(
226   p_notif_id_tbl              IN  PO_TBL_NUMBER
227 , p_start_date_active_tbl     IN  PO_TBL_DATE
228 , p_notif_condition_code_tbl  IN  PO_TBL_VARCHAR30
229 , x_results       IN OUT NOCOPY PO_VALIDATION_RESULTS_TYPE
230 , x_result_type   OUT NOCOPY    VARCHAR2
231 )
232 IS
233 d_mod CONSTANT VARCHAR2(100) := D_start_date_active_not_null;
234 l_results_count NUMBER;
235 BEGIN
236 
237 IF PO_LOG.d_proc THEN
238   PO_LOG.proc_begin(d_mod,'p_notif_id_tbl',p_notif_id_tbl);
239   PO_LOG.proc_begin(d_mod,'p_start_date_active_tbl',p_start_date_active_tbl);
240   PO_LOG.proc_begin(d_mod,'p_notif_condition_code_tbl',p_notif_condition_code_tbl);
241   PO_LOG.log(PO_LOG.c_PROC_BEGIN,d_mod,NULL,'x_results',x_results);
242 END IF;
243 
244 IF (x_results IS NULL) THEN
245   x_results := PO_VALIDATION_RESULTS_TYPE.new_instance();
246 END IF;
247 
248 l_results_count := x_results.result_type.COUNT;
249 
250 FOR i IN 1 .. p_notif_id_tbl.COUNT LOOP
251   IF (    p_notif_condition_code_tbl(i) = c_EXPIRATION
252       AND p_start_date_active_tbl(i) IS NULL
253      )
254   THEN
255     x_results.add_result(
256       p_entity_type => c_ENTITY_TYPE_NOTIF_CTRL
257     , p_entity_id => p_notif_id_tbl(i)
258     , p_column_name => c_START_DATE_ACTIVE
259     , p_message_name => PO_MESSAGE_S.PO_ALL_NOT_NULL
260     );
261   END IF;
262 END LOOP;
263 
264 IF (l_results_count < x_results.result_type.COUNT) THEN
265   x_result_type := PO_VALIDATIONS.c_result_type_FAILURE;
266 ELSE
267   x_result_type := PO_VALIDATIONS.c_result_type_SUCCESS;
268 END IF;
269 
270 IF PO_LOG.d_proc THEN
271   PO_LOG.proc_end(d_mod,'x_result_type',x_result_type);
272   PO_LOG.log(PO_LOG.c_PROC_END,d_mod,NULL,'x_results',x_results);
273 END IF;
274 
275 EXCEPTION
276 WHEN OTHERS THEN
277   IF PO_LOG.d_exc THEN
278     PO_LOG.exc(d_mod,0,NULL);
279   END IF;
280   RAISE;
281 
282 END start_date_active_not_null;
283 
284 
285 END PO_VAL_NOTIFICATION_CONTROLS;