DBA Data[Home] [Help]

PACKAGE BODY: APPS.PER_PYP_INS

Source


1 Package Body per_pyp_ins as
2 /* $Header: pepyprhi.pkb 120.24 2011/09/28 10:47:13 akaranam ship $ */
3 --
4 -- ----------------------------------------------------------------------------
5 -- |                     Private Global Definitions                           |
6 -- ----------------------------------------------------------------------------
7 --
8 g_package  varchar2(33)        := '  per_pyp_ins.';  -- Global package name
9 --
10 -- the following global variables are only to be used by
11 -- the set_base_key_value and pre_insert procedures.
12 --
13 g_pay_proposal_id_i  number   default null;
14 --
15 -- ----------------------------------------------------------------------------
16 -- |------------------------< set_base_key_value >----------------------------|
17 -- ----------------------------------------------------------------------------
18 procedure set_base_key_value
19   (p_pay_proposal_id  in  number) is
20 --
21   l_proc       varchar2(72) := g_package||'set_base_key_value';
22 --
23 begin
24   hr_utility.set_location('entering:'||l_proc, 10);
25   --
26   per_pyp_ins.g_pay_proposal_id_i := p_pay_proposal_id;
27   --
28   hr_utility.set_location(' leaving:'||l_proc, 20);
29 end set_base_key_value;
30 --
31 -- ----------------------------------------------------------------------------
32 -- |------------------------------< insert_dml >------------------------------|
33 -- ----------------------------------------------------------------------------
34 -- {Start Of Comments}
35 --
36 -- Description:
37 --   This procedure controls the actual dml insert logic. The processing of
38 --   this procedure are as follows:
39 --   1) Initialise the object_version_number to 1 if the object_version_number
40 --      is defined as an attribute for this entity.
41 --   2) To set and unset the g_api_dml status as required (as we are about to
42 --      perform dml).
43 --   3) To insert the row into the schema.
44 --   4) To trap any constraint violations that may have occurred.
45 --   5) To raise any other errors.
46 --
47 -- Pre Conditions:
48 --   This is an internal private procedure which must be called from the ins
49 --   procedure and must have all mandatory attributes set (except the
50 --   object_version_number which is initialised within this procedure).
51 --
52 -- In Parameters:
53 --   A Pl/Sql record structre.
54 --
55 -- Post Success:
56 --   The specified row will be inserted into the schema.
57 --
58 -- Post Failure:
59 --   On the insert dml failure it is important to note that we always reset the
60 --   g_api_dml status to false.
61 --   If a check, unique or parent integrity constraint violation is raised the
62 --   constraint_error procedure will be called.
63 --   If any other error is reported, the error will be raised after the
64 --   g_api_dml status is reset.
65 --
66 -- Developer Implementation Notes:
67 --   None.
68 --
69 -- Access Status:
70 --   Internal Table Handler Use Only.
71 --
72 -- {End Of Comments}
73 -- ----------------------------------------------------------------------------
74 Procedure insert_dml(p_rec in out nocopy per_pyp_shd.g_rec_type) is
75 --
76   l_proc  varchar2(72) := g_package||'insert_dml';
77 --
78 Begin
79   hr_utility.set_location('Entering:'||l_proc, 5);
80   p_rec.object_version_number := 1;  -- Initialise the object version
81   --
82   per_pyp_shd.g_api_dml := true;  -- Set the api dml status
83   --
84   -- Insert the row into: per_pay_proposals
85   --
86   insert into per_pay_proposals
87   (     pay_proposal_id,
88         assignment_id,
89         event_id,
90         business_group_id,
91         change_date,
92         comments,
93         last_change_date,
94         next_perf_review_date,
95         next_sal_review_date,
96         performance_rating,
97         proposal_reason,
98         proposed_salary_n,
99         review_date,
100         forced_ranking,
101   date_to,
102         performance_review_id,
103         attribute_category,
104         attribute1,
105         attribute2,
106         attribute3,
107         attribute4,
108         attribute5,
109         attribute6,
110         attribute7,
111         attribute8,
112         attribute9,
113         attribute10,
114         attribute11,
115         attribute12,
116         attribute13,
117         attribute14,
118         attribute15,
119         attribute16,
120         attribute17,
121         attribute18,
122         attribute19,
123         attribute20,
124         object_version_number,
125         multiple_components,
126         approved
127   )
128   Values
129   (     p_rec.pay_proposal_id,
130         p_rec.assignment_id,
131         null,
132         p_rec.business_group_id,
133         p_rec.change_date,
134         p_rec.comments,
135         p_rec.last_change_date,
136         null,
137         p_rec.next_sal_review_date,
138         null,
139         p_rec.proposal_reason,
140         p_rec.proposed_salary_n,
141         null,
142         p_rec.forced_ranking,
143   p_rec.date_to,
144         p_rec.performance_review_id,
145   p_rec.attribute_category,
146   p_rec.attribute1,
147   p_rec.attribute2,
148   p_rec.attribute3,
149   p_rec.attribute4,
150   p_rec.attribute5,
151   p_rec.attribute6,
152   p_rec.attribute7,
153   p_rec.attribute8,
154   p_rec.attribute9,
155   p_rec.attribute10,
156   p_rec.attribute11,
157   p_rec.attribute12,
158   p_rec.attribute13,
159   p_rec.attribute14,
160   p_rec.attribute15,
161   p_rec.attribute16,
162   p_rec.attribute17,
163   p_rec.attribute18,
164   p_rec.attribute19,
165   p_rec.attribute20,
166   p_rec.object_version_number,
167   p_rec.multiple_components,
168   p_rec.approved
169   );
170   --
171   per_pyp_shd.g_api_dml := false;   -- Unset the api dml status
172   --
173   hr_utility.set_location(' Leaving:'||l_proc, 10);
174 Exception
175   When hr_api.check_integrity_violated Then
176     -- A check constraint has been violated
177     per_pyp_shd.g_api_dml := false;   -- Unset the api dml status
178     per_pyp_shd.constraint_error
179       (p_constraint_name => hr_api.strip_constraint_name(SQLERRM));
180   When hr_api.parent_integrity_violated Then
181     -- Parent integrity has been violated
182     per_pyp_shd.g_api_dml := false;   -- Unset the api dml status
183     per_pyp_shd.constraint_error
184       (p_constraint_name => hr_api.strip_constraint_name(SQLERRM));
185   When hr_api.unique_integrity_violated Then
186     -- Unique integrity has been violated
187     per_pyp_shd.g_api_dml := false;   -- Unset the api dml status
188     per_pyp_shd.constraint_error
189       (p_constraint_name => hr_api.strip_constraint_name(SQLERRM));
190   When Others Then
191     per_pyp_shd.g_api_dml := false;   -- Unset the api dml status
192     Raise;
193 End insert_dml;
194 --
195 -- ----------------------------------------------------------------------------
196 -- |------------------------------< pre_insert >------------------------------|
197 -- ----------------------------------------------------------------------------
198 -- {Start Of Comments}
199 --
200 -- Description:
201 --   This private procedure contains any processing which is required before
202 --   the insert dml. Presently, if the entity has a corresponding primary
203 --   key which is maintained by an associating sequence, the primary key for
204 --   the entity will be populated with the next sequence value in
205 --   preparation for the insert dml.
206 --
207 -- Pre Conditions:
208 --   This is an internal procedure which is called from the ins procedure.
209 --
210 -- In Parameters:
211 --   A Pl/Sql record structre.
212 --
213 -- Post Success:
214 --   Processing continues.
215 --
216 -- Post Failure:
217 --   If an error has occurred, an error message and exception will be raised
218 --   but not handled.
219 --
220 -- Developer Implementation Notes:
221 --   Any pre-processing required before the insert dml is issued should be
222 --   coded within this procedure. As stated above, a good example is the
223 --   generation of a primary key number via a corresponding sequence.
224 --   It is important to note that any 3rd party maintenance should be reviewed
225 --   before placing in this procedure.
226 --
227 -- Access Status:
228 --   Internal Table Handler Use Only.
229 --
230 -- {End Of Comments}
231 -- ----------------------------------------------------------------------------
232 Procedure pre_insert(p_rec  in out nocopy per_pyp_shd.g_rec_type) is
233 --
234   l_proc  varchar2(72) := g_package||'pre_insert';
235 --
236   Cursor C_Sel1 is select per_pay_proposals_s.nextval from sys.dual;
237 --
238 --
239   cursor c_sel2 is
240     select null
241       from per_pay_proposals
242      where pay_proposal_id =
243              per_pyp_ins.g_pay_proposal_id_i;
244 --
245 l_exists varchar2(1);
246 --
247 Begin
248   hr_utility.set_location('entering:'||l_proc, 5);
249   --
250   if (per_pyp_ins.g_pay_proposal_id_i is not null) then
251     --
252     -- verify registered primary key values not already in use
253     --
254     open c_sel2;
255     fetch c_sel2 into l_exists;
256     if c_sel2%found then
257        close c_sel2;
258        --
259        -- the primary key values are already in use.
260        --
261        fnd_message.set_name('per','per_289391_key_already_used');
262        fnd_message.set_token('table_name','per_pay_proposals');
263        fnd_message.raise_error;
264     end if;
265     close c_sel2;
266     --
267     -- use registered key values and clear globals
268     --
269     p_rec.pay_proposal_id := per_pyp_ins.g_pay_proposal_id_i;
270     --
271     per_pyp_ins.g_pay_proposal_id_i := null;
272   else
273     --
274     -- no registerd key values, so select the next sequence number
275     --
276     --
277     -- select the next sequence number
278     --
279     Open C_Sel1;
280     Fetch C_Sel1 Into p_rec.pay_proposal_id;
281     Close C_Sel1;
282   end if;
283   --
284   -- Added by ggnanagu
285   -- To fix last_change_date being null issue
286   --
287   per_pyp_bus.gen_last_change_date(p_rec);
288   --
289   hr_utility.set_location(' leaving:'||l_proc, 10);
290 End pre_insert;
291 --
292 -- ----------------------------------------------------------------------------
293 -- |-----------------------------< post_insert >------------------------------|
294 -- ----------------------------------------------------------------------------
295 -- {Start Of Comments}
296 --
297 -- Description:
298 --   This private procedure contains any processing which is required after the
299 --   insert dml.
300 --
301 -- Pre Conditions:
302 --   This is an internal procedure which is called from the ins procedure.
303 --
304 -- In Parameters:
305 --   A Pl/Sql record structre.
306 --
307 -- Post Success:
308 --   Processing continues.
309 --
310 -- Post Failure:
311 --   If an error has occurred, an error message and exception will be raised
312 --   but not handled.
313 --
314 -- Developer Implementation Notes:
315 --   Any post-processing required after the insert dml is issued should be
316 --   coded within this procedure. It is important to note that any 3rd party
317 --   maintenance should be reviewed before placing in this procedure.
318 --
319 -- Access Status:
320 --   Internal Table Handler Use Only.
321 --
322 -- {End Of Comments}
323 -- ----------------------------------------------------------------------------
324 Procedure post_insert
325   (p_rec        in per_pyp_shd.g_rec_type,
326    p_inv_next_sal_date_warning    in boolean,
327    p_proposed_salary_warning  in boolean,
328    p_approved_warning             in boolean,
329    p_payroll_warning    in boolean
330   ) is
331 --
332   l_proc  varchar2(72) := g_package||'post_insert';
333   --
334   l_old_rec   ben_pro_ler.g_pro_ler_rec ;
335   l_new_rec   ben_pro_ler.g_pro_ler_rec ;
336 --
337   -- extract change events
338   l_ext_old_rec  ben_ext_chlg.g_per_pay_rec_type;
339   l_ext_new_rec  ben_ext_chlg.g_per_pay_rec_type;
340   l_event       varchar2(20) ;
341   --
342 
343 Begin
344   hr_utility.set_location('Entering:'||l_proc, 5);
345   --
346   -- Call to user hook for post_insert.
347   --
348   begin
349   --
350      -- Bug 5203589 - Set old values of PER_PAY_PROPOSAL record
351      --
352      l_old_rec.BUSINESS_GROUP_ID     := per_pyp_shd.g_old_rec.BUSINESS_GROUP_ID;
353      l_old_rec.PAY_PROPOSAL_ID       := per_pyp_shd.g_old_rec.PAY_PROPOSAL_ID;
354      l_old_rec.ASSIGNMENT_ID         := per_pyp_shd.g_old_rec.ASSIGNMENT_ID;
355      l_old_rec.EVENT_ID              := null; -- 9999 per_pyp_shd.g_old_rec.EVENT_ID;
356      l_old_rec.CHANGE_DATE           := per_pyp_shd.g_old_rec.CHANGE_DATE;
357      l_old_rec.LAST_CHANGE_DATE      := per_pyp_shd.g_old_rec.LAST_CHANGE_DATE;
358      l_old_rec.NEXT_PERF_REVIEW_DATE := null; -- 9999 per_pyp_shd.g_old_rec.NEXT_PERF_REVIEW_DATE;
359      l_old_rec.NEXT_SAL_REVIEW_DATE  := per_pyp_shd.g_old_rec.NEXT_SAL_REVIEW_DATE;
360      l_old_rec.PERFORMANCE_RATING    := null; -- 9999 per_pyp_shd.g_old_rec.PERFORMANCE_RATING;
361      l_old_rec.PROPOSAL_REASON       := per_pyp_shd.g_old_rec.PROPOSAL_REASON;
362      l_old_rec.PROPOSED_SALARY_N     := per_pyp_shd.g_old_rec.PROPOSED_SALARY_N;
363      l_old_rec.REVIEW_DATE           := null; -- 9999 per_pyp_shd.g_old_rec.REVIEW_DATE;
364      l_old_rec.APPROVED              := per_pyp_shd.g_old_rec.APPROVED;
365      l_old_rec.MULTIPLE_COMPONENTS   := per_pyp_shd.g_old_rec.MULTIPLE_COMPONENTS;
366      l_old_rec.FORCED_RANKING        := per_pyp_shd.g_old_rec.FORCED_RANKING;
367      l_old_rec.DATE_TO         := per_pyp_shd.g_old_rec.DATE_TO;
368      l_old_rec.PERFORMANCE_REVIEW_ID := per_pyp_shd.g_old_rec.PERFORMANCE_REVIEW_ID;
369      l_old_rec.ATTRIBUTE1            := per_pyp_shd.g_old_rec.ATTRIBUTE1;
370      l_old_rec.ATTRIBUTE2            := per_pyp_shd.g_old_rec.ATTRIBUTE2;
371      l_old_rec.ATTRIBUTE3            := per_pyp_shd.g_old_rec.ATTRIBUTE3;
372      l_old_rec.ATTRIBUTE4            := per_pyp_shd.g_old_rec.ATTRIBUTE4;
373      l_old_rec.ATTRIBUTE5            := per_pyp_shd.g_old_rec.ATTRIBUTE5;
374      l_old_rec.ATTRIBUTE6            := per_pyp_shd.g_old_rec.ATTRIBUTE6;
375      l_old_rec.ATTRIBUTE7            := per_pyp_shd.g_old_rec.ATTRIBUTE7;
376      l_old_rec.ATTRIBUTE8            := per_pyp_shd.g_old_rec.ATTRIBUTE8;
377      l_old_rec.ATTRIBUTE9            := per_pyp_shd.g_old_rec.ATTRIBUTE9;
378      l_old_rec.ATTRIBUTE10           := per_pyp_shd.g_old_rec.ATTRIBUTE10;
379      l_old_rec.ATTRIBUTE11           := per_pyp_shd.g_old_rec.ATTRIBUTE11;
380      l_old_rec.ATTRIBUTE12           := per_pyp_shd.g_old_rec.ATTRIBUTE12;
381      l_old_rec.ATTRIBUTE13           := per_pyp_shd.g_old_rec.ATTRIBUTE13;
382      l_old_rec.ATTRIBUTE14           := per_pyp_shd.g_old_rec.ATTRIBUTE14;
383      l_old_rec.ATTRIBUTE15           := per_pyp_shd.g_old_rec.ATTRIBUTE15;
384      l_old_rec.ATTRIBUTE16           := per_pyp_shd.g_old_rec.ATTRIBUTE16;
385      l_old_rec.ATTRIBUTE17           := per_pyp_shd.g_old_rec.ATTRIBUTE17;
386      l_old_rec.ATTRIBUTE18           := per_pyp_shd.g_old_rec.ATTRIBUTE18;
387      l_old_rec.ATTRIBUTE19           := per_pyp_shd.g_old_rec.ATTRIBUTE19;
388      l_old_rec.ATTRIBUTE20           := per_pyp_shd.g_old_rec.ATTRIBUTE20;
389      l_old_rec.PROPOSED_SALARY       := null; -- 9999 ben_pro_shd.g_old_rec.PROPOSED_SALARY;
390 
391      --
392      -- OAB Bug 1863413 : Detect potential life events when salary
393      -- information  changes
394      --
395      -- intialising variable for calling ler_check
396      l_new_rec.BUSINESS_GROUP_ID     := p_rec.BUSINESS_GROUP_ID;
397      l_new_rec.PAY_PROPOSAL_ID       := p_rec.PAY_PROPOSAL_ID;
398      l_new_rec.ASSIGNMENT_ID         := p_rec.ASSIGNMENT_ID;
399      l_new_rec.EVENT_ID              := null; -- 9999 p_rec.EVENT_ID;
400      l_new_rec.CHANGE_DATE           := p_rec.CHANGE_DATE;
401      l_new_rec.LAST_CHANGE_DATE      := p_rec.LAST_CHANGE_DATE;
402      l_new_rec.NEXT_PERF_REVIEW_DATE := null; -- 9999 p_rec.NEXT_PERF_REVIEW_DATE;
403      l_new_rec.NEXT_SAL_REVIEW_DATE  := null; -- 9999 p_rec.NEXT_SAL_REVIEW_DATE;
404      l_new_rec.PERFORMANCE_RATING    := null; -- 9999 p_rec.PERFORMANCE_RATING;
405      l_new_rec.PROPOSAL_REASON       := p_rec.PROPOSAL_REASON;
406      l_new_rec.PROPOSED_SALARY_N     := p_rec.PROPOSED_SALARY_N;
407      l_new_rec.REVIEW_DATE           := null; -- 9999 p_rec.REVIEW_DATE;
408      l_new_rec.APPROVED              := p_rec.APPROVED;
409      l_new_rec.MULTIPLE_COMPONENTS   := p_rec.MULTIPLE_COMPONENTS;
410      l_new_rec.FORCED_RANKING        := p_rec.FORCED_RANKING;
411      l_new_rec.DATE_TO         := p_rec.DATE_TO;
412      l_new_rec.PERFORMANCE_REVIEW_ID := p_rec.PERFORMANCE_REVIEW_ID;
413      l_new_rec.ATTRIBUTE1            := p_rec.ATTRIBUTE1;
414      l_new_rec.ATTRIBUTE2            := p_rec.ATTRIBUTE2;
415      l_new_rec.ATTRIBUTE3            := p_rec.ATTRIBUTE3;
416      l_new_rec.ATTRIBUTE4            := p_rec.ATTRIBUTE4;
417      l_new_rec.ATTRIBUTE5            := p_rec.ATTRIBUTE5;
418      l_new_rec.ATTRIBUTE6            := p_rec.ATTRIBUTE6;
419      l_new_rec.ATTRIBUTE7            := p_rec.ATTRIBUTE7;
420      l_new_rec.ATTRIBUTE8            := p_rec.ATTRIBUTE8;
421      l_new_rec.ATTRIBUTE9            := p_rec.ATTRIBUTE9;
422      l_new_rec.ATTRIBUTE10           := p_rec.ATTRIBUTE10;
423      l_new_rec.ATTRIBUTE11           := p_rec.ATTRIBUTE11;
424      l_new_rec.ATTRIBUTE12           := p_rec.ATTRIBUTE12;
425      l_new_rec.ATTRIBUTE13           := p_rec.ATTRIBUTE13;
426      l_new_rec.ATTRIBUTE14           := p_rec.ATTRIBUTE14;
427      l_new_rec.ATTRIBUTE15           := p_rec.ATTRIBUTE15;
428      l_new_rec.ATTRIBUTE16           := p_rec.ATTRIBUTE16;
429      l_new_rec.ATTRIBUTE17           := p_rec.ATTRIBUTE17;
430      l_new_rec.ATTRIBUTE18           := p_rec.ATTRIBUTE18;
431      l_new_rec.ATTRIBUTE19           := p_rec.ATTRIBUTE19;
432      l_new_rec.ATTRIBUTE20           := p_rec.ATTRIBUTE20;
433      l_new_rec.PROPOSED_SALARY       := null; -- 9999 p_rec.PROPOSED_SALARY;
434      --
435      -- extract change events
436      l_ext_new_rec.BUSINESS_GROUP_ID     := p_rec.BUSINESS_GROUP_ID;
437      l_ext_new_rec.PAY_PROPOSAL_ID       := p_rec.PAY_PROPOSAL_ID;
438      l_ext_new_rec.ASSIGNMENT_ID         := p_rec.ASSIGNMENT_ID;
439      --l_ext_new_rec.EVENT_ID              := p_rec.EVENT_ID;
440      l_ext_new_rec.CHANGE_DATE           := p_rec.CHANGE_DATE;
441      l_ext_new_rec.LAST_CHANGE_DATE      := p_rec.LAST_CHANGE_DATE;
442      --l_ext_new_rec.NEXT_PERF_REVIEW_DATE := p_rec.NEXT_PERF_REVIEW_DATE;
443      l_ext_new_rec.NEXT_SAL_REVIEW_DATE  := p_rec.NEXT_SAL_REVIEW_DATE;
444      -- l_ext_new_rec.PERFORMANCE_RATING    := p_rec.PERFORMANCE_RATING;
445      l_ext_new_rec.PROPOSAL_REASON       := p_rec.PROPOSAL_REASON;
446      l_ext_new_rec.PROPOSED_SALARY_N     := p_rec.PROPOSED_SALARY_N;
447      -- l_ext_new_rec.REVIEW_DATE           := p_rec.REVIEW_DATE;
448      l_ext_new_rec.APPROVED              := p_rec.APPROVED;
449      l_ext_new_rec.MULTIPLE_COMPONENTS   := p_rec.MULTIPLE_COMPONENTS;
450      l_ext_new_rec.FORCED_RANKING        := p_rec.FORCED_RANKING;
451      l_ext_new_rec.PERFORMANCE_REVIEW_ID := p_rec.PERFORMANCE_REVIEW_ID;
452      l_ext_new_rec.ATTRIBUTE1            := p_rec.ATTRIBUTE1;
453      l_ext_new_rec.ATTRIBUTE2            := p_rec.ATTRIBUTE2;
454      l_ext_new_rec.ATTRIBUTE3            := p_rec.ATTRIBUTE3;
455      l_ext_new_rec.ATTRIBUTE4            := p_rec.ATTRIBUTE4;
456      l_ext_new_rec.ATTRIBUTE5            := p_rec.ATTRIBUTE5;
457      l_ext_new_rec.ATTRIBUTE6            := p_rec.ATTRIBUTE6;
458      l_ext_new_rec.ATTRIBUTE7            := p_rec.ATTRIBUTE7;
459      l_ext_new_rec.ATTRIBUTE8            := p_rec.ATTRIBUTE8;
460      l_ext_new_rec.ATTRIBUTE9            := p_rec.ATTRIBUTE9;
461      l_ext_new_rec.ATTRIBUTE10           := p_rec.ATTRIBUTE10;
462      l_ext_new_rec.ATTRIBUTE11           := p_rec.ATTRIBUTE11;
463      l_ext_new_rec.ATTRIBUTE12           := p_rec.ATTRIBUTE12;
464      l_ext_new_rec.ATTRIBUTE13           := p_rec.ATTRIBUTE13;
465      l_ext_new_rec.ATTRIBUTE14           := p_rec.ATTRIBUTE14;
466      l_ext_new_rec.ATTRIBUTE15           := p_rec.ATTRIBUTE15;
467      l_ext_new_rec.ATTRIBUTE16           := p_rec.ATTRIBUTE16;
468      l_ext_new_rec.ATTRIBUTE17           := p_rec.ATTRIBUTE17;
469      l_ext_new_rec.ATTRIBUTE18           := p_rec.ATTRIBUTE18;
470      l_ext_new_rec.ATTRIBUTE19           := p_rec.ATTRIBUTE19;
471      l_ext_new_rec.ATTRIBUTE20           := p_rec.ATTRIBUTE20;
472      --l_ext_new_rec.PROPOSED_SALARY       := p_rec.PROPOSED_SALARY;
473      l_ext_new_rec.date_to               := p_rec.date_to;
474      l_ext_new_rec.update_mode           := 'UPDATE';
475      l_event                             := 'INSERT' ;
476 
477   per_pyp_rki.after_insert
478     (
479      p_pay_proposal_id              => p_rec.pay_proposal_id,
480      p_assignment_id                => p_rec.assignment_id,
481      p_business_group_id            => p_rec.business_group_id,
482      p_change_date                  => p_rec.change_date,
483      p_comments                     => p_rec.comments,
484      p_next_sal_review_date         => p_rec.next_sal_review_date,
485      p_proposal_reason              => p_rec.proposal_reason,
486      p_proposed_salary_n            => p_rec.proposed_salary_n,
487      p_forced_ranking               => p_rec.forced_ranking,
488      p_date_to          => p_rec.date_to,
489      p_performance_review_id        => p_rec.performance_review_id,
490      p_attribute_category           => p_rec.attribute_category,
491      p_attribute1                   => p_rec.attribute1,
492      p_attribute2                   => p_rec.attribute2,
493      p_attribute3                   => p_rec.attribute3,
494      p_attribute4                   => p_rec.attribute4,
495      p_attribute5                   => p_rec.attribute5,
496      p_attribute6                   => p_rec.attribute6,
497      p_attribute7                   => p_rec.attribute7,
498      p_attribute8                   => p_rec.attribute8,
499      p_attribute9                   => p_rec.attribute9,
500      p_attribute10                  => p_rec.attribute10,
501      p_attribute11                  => p_rec.attribute11,
502      p_attribute12                  => p_rec.attribute12,
503      p_attribute13                  => p_rec.attribute13,
504      p_attribute14                  => p_rec.attribute14,
505      p_attribute15                  => p_rec.attribute15,
506      p_attribute16                  => p_rec.attribute16,
507      p_attribute17                  => p_rec.attribute17,
508      p_attribute18                  => p_rec.attribute18,
509      p_attribute19                  => p_rec.attribute19,
510      p_attribute20                  => p_rec.attribute20,
511      p_object_version_number        => p_rec.object_version_number,
512      p_multiple_components          => p_rec.multiple_components,
513      p_approved                     => p_rec.approved,
514      p_inv_next_sal_date_warning    => p_inv_next_sal_date_warning,
515      p_proposed_salary_warning      => p_proposed_salary_warning,
516      p_approved_warning             => p_approved_warning,
517      p_payroll_warning              => p_payroll_warning
518     );
519     --
520     hr_utility.set_location('DM Mode pro ' ||hr_general.g_data_migrator_mode ,379);
521     --
522     -- OAB Bug 1863413 : Detect potential life events when salary
523     -- information  changes
524     --
525     if hr_general.g_data_migrator_mode not in ( 'Y','P') then
526        ben_pro_ler.ler_chk(p_old  => l_old_rec
527                      ,p_new =>  l_new_rec
528                      ,p_effective_date => p_rec.change_date  );
529     End if ;
530     --
531     -- extract change event log call
532     if hr_general.g_data_migrator_mode <> 'Y' then
533        hr_utility.set_location('Extract event logged called for pay proposal',99) ;
534        ben_ext_chlg.log_per_pay_chg
535          (p_event   => l_event
536          ,p_old_rec => l_ext_old_rec
537          ,p_new_rec => l_ext_new_rec
538          );
539        hr_utility.set_location('Extract event logged out ',99) ;
540     end if ;
541 
542 
543   exception
544     when hr_api.cannot_find_prog_unit then
545        hr_api.cannot_find_prog_unit_error
546          (p_module_name => 'PER_PAY_PROPOSALS'
547          ,p_hook_type  => 'AI'
548          );
549   end;
550   -- End of API User Hook for post_insert.
551   hr_utility.set_location(' Leaving:'||l_proc, 10);
552 End post_insert;
553 --
554 --
555 -- ----------------------------------------------------------------------------
556 -- |---------------------------------< ins >----------------------------------|
557 -- ----------------------------------------------------------------------------
558 Procedure ins
559   (
560   p_rec             in out nocopy per_pyp_shd.g_rec_type,
561   p_validate        in     boolean ,
562   p_inv_next_sal_date_warning    out nocopy boolean ,
563   p_proposed_salary_warning    out nocopy boolean ,
564   p_approved_warning       out nocopy boolean ,
565   p_payroll_warning      out nocopy boolean
566   ) is
567 --
568   l_proc  varchar2(72) := g_package||'ins';
569   l_inv_next_sal_date_warning  boolean;
570   l_proposed_salary_warning      boolean;
571   l_approved_warning             boolean;
572   l_payroll_warning    boolean;
573 
574 --
575 Begin
576   hr_utility.set_location('Entering:'||l_proc, 5);
577   --
578   -- Determine if the business process is to be validated.
579   --
580   If p_validate then
581     --
582     -- Issue the savepoint.
583     --
584     SAVEPOINT ins_per_pyp;
585   End If;
586   --
587   -- Call the supporting insert validate operations
588   --
589   per_pyp_bus.insert_validate
590         (p_rec             => p_rec
591         ,p_inv_next_sal_date_warning   => l_inv_next_sal_date_warning
592         ,p_proposed_salary_warning     => l_proposed_salary_warning
593         ,p_approved_warning            => l_approved_warning
594         ,p_payroll_warning         => l_payroll_warning
595         );
596   --
597   -- Call the supporting pre-insert operation
598   --
599   pre_insert(p_rec);
600   --
601   -- Insert the row
602   --
603   insert_dml(p_rec);
604   --
605   -- Call the supporting post-insert operation
606   --
607   post_insert(p_rec         => p_rec
608        ,p_inv_next_sal_date_warning   => l_inv_next_sal_date_warning
609              ,p_proposed_salary_warning     => l_proposed_salary_warning
610              ,p_approved_warning            => l_approved_warning
611              ,p_payroll_warning         => l_payroll_warning
612        );
613   --
614   -- If we are validating then raise the Validate_Enabled exception
615   --
616   If p_validate then
617     Raise HR_Api.Validate_Enabled;
618   End If;
619   --
620   --  Set the out arguments
621   --
622   p_inv_next_sal_date_warning := l_inv_next_sal_date_warning;
623   p_proposed_salary_warning := l_proposed_salary_warning;
624   p_approved_warning    := l_approved_warning;
625   p_payroll_warning   := l_payroll_warning;
626   --
627   hr_utility.set_location(' Leaving:'||l_proc, 10);
628 Exception
629   When HR_Api.Validate_Enabled Then
630     --
631     -- As the Validate_Enabled exception has been raised
632     -- we must rollback to the savepoint
633     --
634     ROLLBACK TO ins_per_pyp;
635 end ins;
636 --
637 -- ----------------------------------------------------------------------------
638 -- |---------------------------------< ins >----------------------------------|
639 -- ----------------------------------------------------------------------------
640 Procedure ins
641   (
642   p_pay_proposal_id              out nocopy number,
643   p_assignment_id                in number,
644   p_business_group_id            in number,
645   p_change_date                  in date,
646   p_comments                     in varchar2,
647   p_next_sal_review_date         in date,
648   p_proposal_reason              in varchar2,
649   p_proposed_salary_n            in number,
650   p_forced_ranking               in number,
651   p_date_to      in date,
652   p_performance_review_id        in number,
653   p_attribute_category           in varchar2,
654   p_attribute1                   in varchar2,
655   p_attribute2                   in varchar2,
656   p_attribute3                   in varchar2,
657   p_attribute4                   in varchar2,
658   p_attribute5                   in varchar2,
659   p_attribute6                   in varchar2,
660   p_attribute7                   in varchar2,
661   p_attribute8                   in varchar2,
662   p_attribute9                   in varchar2,
663   p_attribute10                  in varchar2,
664   p_attribute11                  in varchar2,
665   p_attribute12                  in varchar2,
666   p_attribute13                  in varchar2,
667   p_attribute14                  in varchar2,
668   p_attribute15                  in varchar2,
669   p_attribute16                  in varchar2,
670   p_attribute17                  in varchar2,
671   p_attribute18                  in varchar2,
672   p_attribute19                  in varchar2,
673   p_attribute20                  in varchar2,
674   p_object_version_number        out nocopy number,
675   p_multiple_components          in varchar2,
676   p_approved                     in varchar2,
677   p_validate                     in boolean,
678   p_inv_next_sal_date_warning  out nocopy boolean,
679   p_proposed_salary_warning      out nocopy boolean,
680   p_approved_warning             out nocopy boolean,
681   p_payroll_warning    out nocopy boolean
682   ) is
683 --
684   l_rec   per_pyp_shd.g_rec_type;
685   l_proc  varchar2(72) := g_package||'ins';
686 --
687 Begin
688   hr_utility.set_location('Entering:'||l_proc, 5);
689   --
690   -- Call conversion function to turn arguments into the
691   -- p_rec structure.
692   --
693   l_rec :=
694   per_pyp_shd.convert_args
695   (
696   null,
697   p_assignment_id,
698   p_business_group_id,
699   p_change_date,
700   p_comments,
701   null,
702   p_next_sal_review_date,
703   p_proposal_reason,
704   p_proposed_salary_n,
705   p_forced_ranking,
706   p_date_to,
707   p_performance_review_id,
708   p_attribute_category,
709   p_attribute1,
710   p_attribute2,
711   p_attribute3,
712   p_attribute4,
713   p_attribute5,
714   p_attribute6,
715   p_attribute7,
716   p_attribute8,
717   p_attribute9,
718   p_attribute10,
719   p_attribute11,
720   p_attribute12,
721   p_attribute13,
722   p_attribute14,
723   p_attribute15,
724   p_attribute16,
725   p_attribute17,
726   p_attribute18,
727   p_attribute19,
728   p_attribute20,
729   null,
730   p_multiple_components,
731   p_approved
732   );
733   --
734   -- Having converted the arguments into the per_pyp_rec
735   -- plsql record structure we call the corresponding record business process.
736   --
737   ins(p_rec       => l_rec
738      ,p_validate      => p_validate
739      ,p_inv_next_sal_date_warning => p_inv_next_sal_date_warning
740      ,p_proposed_salary_warning   => p_proposed_salary_warning
741      ,p_approved_warning    => p_approved_warning
742      ,p_payroll_warning     => p_payroll_warning
743      );
744   --
745   -- As the primary key argument(s)
746   -- are specified as an OUT's we must set these values.
747   --
748   p_pay_proposal_id := l_rec.pay_proposal_id;
749   p_object_version_number := l_rec.object_version_number;
750   --
751   hr_utility.set_location(' Leaving:'||l_proc, 10);
752 End ins;
753 --
754 end per_pyp_ins;