[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;