[Home] [Help]
PACKAGE BODY: APPS.CSD_REPAIR_ACTUAL_LINES_PVT
Source
1 PACKAGE BODY CSD_REPAIR_ACTUAL_LINES_PVT as
2 /* $Header: csdvalnb.pls 120.9.12020000.2 2013/01/30 22:38:26 yvchen ship $ */
3
4
5 --G_PKG_NAME CONSTANT VARCHAR2(30):= 'CSD_REPAIR_ACTUAL_LINES_PVT';
6 G_FILE_NAME CONSTANT VARCHAR2(12) := 'csdvclnb.pls';
7
8 -- Global variable for storing the debug level
9 G_debug_level number := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
10
11 /*--------------------------------------------------------------------*/
12 /* procedure name: CREATE_REPAIR_ACTUAL_LINES */
13 /* description : procedure used to Create Repair Actuals */
14 /* */
15 /* */
16 /* */
17 /* Called from : Depot Repair Actuals UI */
18 /* Input Parm : */
19 /* p_api_version NUMBER Req Api Version number */
20 /* p_init_msg_list VARCHAR2 Opt Initialize message stack */
21 /* p_commit VARCHAR2 Opt Commits in API */
22 /* p_validation_level NUMBER Opt validation steps */
23 /* px_CSD_ACTUAL_LINES_REC REC Req Actuals lines Record */
24 /* px_Charges_Rec REC Req Charges line Record */
25 /* Output Parm : */
26 /* x_return_status VARCHAR2 Return status after the call. */
27 /* x_msg_count NUMBER Number of messages in stack */
28 /* x_msg_data VARCHAR2 Mesg. text if x_msg_count >= 1 */
29 /* Change Hist : */
30 /* 08/11/03 travikan Initial Creation. */
31 /* */
32 /* */
33 /* */
34 /*--------------------------------------------------------------------*/
35 PROCEDURE CREATE_REPAIR_ACTUAL_LINES(
36 P_Api_Version IN NUMBER,
37 P_Commit IN VARCHAR2,
38 P_Init_Msg_List IN VARCHAR2,
39 p_validation_level IN NUMBER,
40 px_CSD_ACTUAL_LINES_REC IN OUT NOCOPY CSD_ACTUAL_LINES_REC_TYPE,
41 px_CHARGES_REC IN OUT NOCOPY CS_CHARGE_DETAILS_PUB.CHARGES_REC_TYPE,
42 X_Return_Status OUT NOCOPY VARCHAR2,
43 X_Msg_Count OUT NOCOPY NUMBER,
44 X_Msg_Data OUT NOCOPY VARCHAR2
45 )
46
47 IS
48 -- Variables used in FND Log
49 l_stat_level number := FND_LOG.LEVEL_STATEMENT;
50 l_proc_level number := FND_LOG.LEVEL_PROCEDURE;
51 l_event_level number := FND_LOG.LEVEL_EVENT;
52 l_excep_level number := FND_LOG.LEVEL_EXCEPTION;
53 l_error_level number := FND_LOG.LEVEL_ERROR;
54 l_unexp_level number := FND_LOG.LEVEL_UNEXPECTED;
55 l_mod_name varchar2(2000) := 'csd.plsql.csd_repair_actual_lines_pvt.create_repair_actual_lines';
56
57 l_api_name CONSTANT VARCHAR2(30) := 'CREATE_REPAIR_ACTUAL_LINES';
58 l_api_version CONSTANT NUMBER := 1.0;
59 l_msg_count NUMBER;
60 l_msg_data VARCHAR2(100);
61 l_msg_index NUMBER;
62
63 l_api_return_status VARCHAR2(3);
64 l_act_count NUMBER;
65 lx_csd_actuals_rec CSD_REPAIR_ACTUALS_PVT.CSD_REPAIR_ACTUALS_REC_TYPE;
66 lx_charges_rec CS_CHARGE_DETAILS_PUB.CHARGES_REC_TYPE;
67
68 x_actual_header_id NUMBER := NULL;
69
70 l_serial_flag BOOLEAN := FALSE;
71 l_dummy VARCHAR2(1);
72
73 x_estimate_detail_id NUMBER := NULL;
74 l_act_hdr NUMBER := NULL;
75 l_reference_number VARCHAR2(30) := '';
76 l_contract_number VARCHAR2(30) := '';
77 l_bus_process_id NUMBER := NULL;
78 l_repair_type_ref VARCHAR2(3) := '';
79 l_line_type_id NUMBER := NULL;
80 l_txn_billing_type_id NUMBER := NULL;
81 l_party_id NUMBER := NULL;
82 l_account_id NUMBER := NULL;
83 l_order_header_id NUMBER := NULL;
84 l_release_status VARCHAR2(10) := '';
85 l_curr_code VARCHAR2(10) := '';
86 l_line_category_code VARCHAR2(30) := '';
87 l_ship_from_org_id NUMBER := NULL;
88 l_order_line_id NUMBER := NULL;
89 l_unit_selling_price NUMBER := NULL;
90 l_item_cost NUMBER := NULL;
91
92 -- swai: 12.1 service costing uptake bug 6960295
93 l_cs_cost_flag VARCHAR2(1) := 'Y';
94
95 -- passing in from form
96 -- l_coverage_id NUMBER := NULL;
97 -- l_coverage_name VARCHAR2(30) := '';
98 -- l_txn_group_id NUMBER := NULL;
99 --
100
101 CURSOR order_rec(p_incident_id IN NUMBER) IS
102 SELECT customer_id,
103 account_id
104 FROM cs_incidents_all_b
105 WHERE incident_id = p_incident_id;
106
107 BEGIN
108
109 -- Standard Start of API savepoint
110 SAVEPOINT CREATE_REPAIR_ACTUAL_LINES;
111
112 -- Standard call to check for call compatibility.
113 IF NOT FND_API.Compatible_API_Call ( l_api_version,
114 p_api_version,
115 l_api_name,
116 G_PKG_NAME)
117 THEN
118 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
119 END IF;
120
121 -- Initialize message list if p_init_msg_list is set to TRUE.
122 IF FND_API.to_Boolean( p_init_msg_list ) THEN
123 FND_MSG_PUB.initialize;
124 END IF;
125
126 -- Initialize API return status to success
127 x_return_status := FND_API.G_RET_STS_SUCCESS;
128
129 -- Api body starts
130 IF ( Fnd_Log.Level_Statement >= G_debug_level) THEN
131 FND_LOG.STRING(Fnd_Log.Level_Statement,l_mod_name,'At the Beginning of create_repair_actual_lines');
132 END IF;
133
134 -- Dump the in parameters in the log file
135 -- if the debug level > 5
136 -- If fnd_profile.value('CSD_DEBUG_LEVEL') > 5 then
137 -- if (g_debug > 5) then
138 -- csd_gen_utility_pvt.dump_actual_lines_rec
139 -- ( p_CSD_ACTUAL_LINES_REC => px_CSD_ACTUAL_LINES_REC);
140 -- end if;
141
142 IF ( Fnd_Log.Level_Statement >= G_debug_level) THEN
143 FND_LOG.STRING(Fnd_Log.Level_Statement,l_mod_name,'Begin Check reqd parameter Repair Line ID : '||px_CSD_ACTUAL_LINES_REC.repair_line_id);
144 END IF;
145
146 -- Check the required parameter
147 CSD_PROCESS_UTIL.Check_Reqd_Param
148 ( p_param_value => px_CSD_ACTUAL_LINES_REC.repair_line_id,
149 p_param_name => 'REPAIR_LINE_ID',
150 p_api_name => l_api_name);
151
152 IF ( Fnd_Log.Level_Statement >= G_debug_level) THEN
153 FND_LOG.STRING(Fnd_Log.Level_Statement,l_mod_name,'End Check reqd parameter');
154 FND_LOG.STRING(Fnd_Log.Level_Statement,l_mod_name,'Begin Validate Repair Line id');
155 END IF;
156
157 -- Validate the repair line ID
158 IF NOT( CSD_PROCESS_UTIL.Validate_rep_line_id
159 ( p_repair_line_id => px_CSD_ACTUAL_LINES_REC.repair_line_id )) THEN
160 RAISE FND_API.G_EXC_ERROR;
161 END IF;
162
163 IF ( Fnd_Log.Level_Statement >= G_debug_level) THEN
164 FND_LOG.STRING(Fnd_Log.Level_Statement,l_mod_name,'End Validate Repair Line id');
165 FND_LOG.STRING(Fnd_Log.Level_Statement,l_mod_name,'Check if there is only one Actual Header per Repair Order');
166 END IF;
167
168 -- Begin check Actuals Header is null
169 IF (px_CSD_ACTUAL_LINES_REC.repair_actual_id is null) then
170
171 Begin
172 -- initialize
173 l_act_count := -1;
174
175 select count(*)
176 into l_act_count
177 from csd_repair_actuals
178 where repair_line_id = px_CSD_ACTUAL_LINES_REC.repair_line_id;
179 Exception
180 when others then
181 IF ( Fnd_Log.Level_Exception >= G_debug_level) THEN
182 FND_LOG.STRING(Fnd_Log.Level_Exception,l_mod_name,'Others exception error :'||SubStr('Error '||TO_CHAR(SQLCODE)||': '||SQLERRM, 1,255));
183 END IF;
184
185 End;
186
187 -- Begin check Actuals Header call
188 IF l_act_count = 0 then
189 IF ( Fnd_Log.Level_Statement >= G_debug_level) THEN
190 FND_LOG.STRING(Fnd_Log.Level_Statement,l_mod_name,'Actuals do not exists for the repair line Id: '||px_CSD_ACTUAL_LINES_REC.repair_line_id);
191 END IF;
192
193 -- Create Actual Header
194 -- Assign values to actuals header record
195 lx_csd_actuals_rec.REPAIR_ACTUAL_ID := NULL;
196 lx_csd_actuals_rec.OBJECT_VERSION_NUMBER := NULL;
197 lx_csd_actuals_rec.REPAIR_LINE_ID := px_CSD_ACTUAL_LINES_REC.repair_line_id;
198 lx_csd_actuals_rec.CREATED_BY := NULL;
199 lx_csd_actuals_rec.CREATION_DATE := NULL;
200 lx_csd_actuals_rec.LAST_UPDATED_BY := NULL;
201 lx_csd_actuals_rec.LAST_UPDATE_DATE := NULL;
202 lx_csd_actuals_rec.LAST_UPDATE_LOGIN := NULL;
203 lx_csd_actuals_rec.ATTRIBUTE_CATEGORY := NULL;
204 lx_csd_actuals_rec.ATTRIBUTE1 := NULL;
205 lx_csd_actuals_rec.ATTRIBUTE2 := NULL;
206 lx_csd_actuals_rec.ATTRIBUTE3 := NULL;
207 lx_csd_actuals_rec.ATTRIBUTE4 := NULL;
208 lx_csd_actuals_rec.ATTRIBUTE5 := NULL;
209 lx_csd_actuals_rec.ATTRIBUTE6 := NULL;
210 lx_csd_actuals_rec.ATTRIBUTE7 := NULL;
211 lx_csd_actuals_rec.ATTRIBUTE8 := NULL;
212 lx_csd_actuals_rec.ATTRIBUTE9 := NULL;
213 lx_csd_actuals_rec.ATTRIBUTE10 := NULL;
214 lx_csd_actuals_rec.ATTRIBUTE11 := NULL;
215 lx_csd_actuals_rec.ATTRIBUTE12 := NULL;
216 lx_csd_actuals_rec.ATTRIBUTE13 := NULL;
217 lx_csd_actuals_rec.ATTRIBUTE14 := NULL;
218 lx_csd_actuals_rec.ATTRIBUTE15 := NULL;
219 lx_csd_actuals_rec.BILL_TO_ACCOUNT_ID := NULL;
220 lx_csd_actuals_rec.BILL_TO_PARTY_ID := NULL;
221 lx_csd_actuals_rec.BILL_TO_PARTY_SITE_ID := NULL;
222
223
224 IF ( Fnd_Log.Level_Procedure >= G_debug_level) THEN
225 FND_LOG.STRING(Fnd_Log.Level_Procedure,l_mod_name,'Calling csd_repair_actuals_pvt.create_repair_actuals');
226 END IF;
227
228 -- call API to create Repair Actuals header
229 csd_repair_actuals_pvt.create_repair_actuals
230 ( P_Api_Version => 1.0,
231 P_Commit => 'F',
232 P_Init_Msg_List => 'T',
233 p_validation_level => 10,
234 px_CSD_REPAIR_ACTUALS_REC => lx_csd_actuals_rec,
235 X_Return_Status => x_return_status,
236 X_Msg_Count => x_msg_count,
237 X_Msg_Data => x_msg_data);
238
239 IF NOT(x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
240 IF ( Fnd_Log.Level_Procedure >= G_debug_level) THEN
241 FND_LOG.STRING(Fnd_Log.Level_Procedure,l_mod_name,'csd_repair_actuals_pvt.create_repair_actuals failed');
242 END IF;
243 RAISE FND_API.G_EXC_ERROR;
244 END IF;
245
246 -- assign the created actuals header to actual lines record
247 px_CSD_ACTUAL_LINES_REC.repair_actual_id := lx_csd_actuals_rec.REPAIR_ACTUAL_ID;
248
249 IF ( Fnd_Log.Level_Statement >= G_debug_level) THEN
250 FND_LOG.STRING(Fnd_Log.Level_Statement,l_mod_name,'Actuals do not exists for the repair line Id: '||lx_csd_actuals_rec.REPAIR_ACTUAL_ID);
251 END IF;
252
253 ELSIF (l_act_count = 1) then
254 -- special cases
255 IF ( Fnd_Log.Level_Statement >= G_debug_level) THEN
256 FND_LOG.STRING(Fnd_Log.Level_Statement,l_mod_name,'Actual Header was not passed in. Retrieving it..');
257 END IF;
258 Begin
259 -- initialize
260 l_act_hdr := -1;
261
262 select repair_actual_id
263 into l_act_hdr
264 from csd_repair_actuals
265 where repair_line_id = px_CSD_ACTUAL_LINES_REC.repair_line_id;
266 Exception
267 when others then
268 IF ( Fnd_Log.Level_Exception >= G_debug_level) THEN
269 FND_LOG.STRING(Fnd_Log.Level_Exception,l_mod_name,'Others exception error :'||SubStr('Error '||TO_CHAR(SQLCODE)||': '||SQLERRM, 1,255));
270 END IF;
271 End;
272
273 -- assign the repair actual header id
274 px_CSD_ACTUAL_LINES_REC.REPAIR_ACTUAL_ID := l_act_hdr;
275
276 IF ( Fnd_Log.Level_Statement >= G_debug_level) THEN
277 FND_LOG.STRING(Fnd_Log.Level_Statement,l_mod_name,'Actuals header: '||l_act_hdr||'already exists for the repair line Id: '||px_CSD_ACTUAL_LINES_REC.repair_line_id);
278 END IF;
279
280 ELSIF l_act_count > 1 then
281 IF ( Fnd_Log.Level_Statement >= G_debug_level) THEN
282 FND_LOG.STRING(Fnd_Log.Level_Statement,l_mod_name,'Multiple Actuals exists for the repair line Id: '||px_CSD_ACTUAL_LINES_REC.repair_line_id);
283 END IF;
284
285 FND_MESSAGE.SET_NAME('CSD','CSD_API_ACTUALS_EXISTS');
286 FND_MESSAGE.SET_TOKEN('REPAIR_LINE_ID',px_CSD_ACTUAL_LINES_REC.repair_line_id);
287 FND_MSG_PUB.ADD;
288 IF (Fnd_Log.Level_Error >= Fnd_Log.G_Current_Runtime_Level) THEN
289 FND_LOG.MESSAGE(Fnd_Log.Level_Error,l_mod_name, FALSE);
290 END IF;
291 RAISE FND_API.G_EXC_ERROR;
292 End IF;
293 -- End check Actuals Header call
294
295 END IF;
296 -- End check Actuals Header is null
297
298 -- Assigning object version number
299 px_CSD_ACTUAL_LINES_REC.OBJECT_VERSION_NUMBER := 1;
300
301 -- --------------------------------------------------------------------
302 -- Check if the Repair_Actual_Lines_Rec.actual_source_code = ESTIMATE
303 -- --------------------------------------------------------------------
304 IF (px_CSD_ACTUAL_LINES_REC.actual_source_code = 'ESTIMATE' ) THEN
305
306 -- Copy from Estimate API will create a Charge line in the table by
307 -- Calling charges API copy actual from estimate to create the record
308 -- in CS_ESTIMATE_DETAILS and will send in estimate_detail_id
309 -- which is the estimate_detail_id of the Actual line
310
311 -- Raise FND_API.G_EXC_ERROR if the estimate_detail_id is null
312 IF (px_CSD_ACTUAL_LINES_REC.ESTIMATE_DETAIL_ID is null) THEN
313 IF ( Fnd_Log.Level_Statement >= G_debug_level) THEN
314 FND_LOG.STRING(Fnd_Log.Level_Statement,l_mod_name,'Missing estimate_detail_id for actual_source_code : '||px_CSD_ACTUAL_LINES_REC.actual_source_code);
315 END IF;
316
317 RAISE FND_API.G_EXC_ERROR;
318 END IF;
319
320 --
321 -- API body
322 --
323 IF ( Fnd_Log.Level_Procedure >= G_debug_level) THEN
324 FND_LOG.STRING(Fnd_Log.Level_Procedure,l_mod_name,'Call to CSD_REPAIR_ACTUAL_LINES_REC_PKG.Insert_Row');
325 END IF;
326
327 IF ( Fnd_Log.Level_Statement >= G_debug_level) THEN
328 FND_LOG.STRING(Fnd_Log.Level_Statement,l_mod_name,'Required columns: ');
329 FND_LOG.STRING(Fnd_Log.Level_Statement,l_mod_name,'REPAIR_ACTUAL_LINE_ID (must be null) = ' || px_CSD_ACTUAL_LINES_REC.REPAIR_ACTUAL_LINE_ID);
330 FND_LOG.STRING(Fnd_Log.Level_Statement,l_mod_name,'OBJECT_VERSION_NUMBER = ' || px_CSD_ACTUAL_LINES_REC.OBJECT_VERSION_NUMBER);
331 FND_LOG.STRING(Fnd_Log.Level_Statement,l_mod_name,'ESTIMATE_DETAIL_ID = ' || px_CSD_ACTUAL_LINES_REC.ESTIMATE_DETAIL_ID);
332 FND_LOG.STRING(Fnd_Log.Level_Statement,l_mod_name,'REPAIR_ACTUAL_ID = ' || px_CSD_ACTUAL_LINES_REC.REPAIR_ACTUAL_ID);
333 FND_LOG.STRING(Fnd_Log.Level_Statement,l_mod_name,'REPAIR_LINE_ID = ' || px_CSD_ACTUAL_LINES_REC.REPAIR_LINE_ID);
334 FND_LOG.STRING(Fnd_Log.Level_Statement,l_mod_name,'CREATED_BY = ' || FND_GLOBAL.USER_ID);
335 FND_LOG.STRING(Fnd_Log.Level_Statement,l_mod_name,'LAST_UPDATED_BY = '|| FND_GLOBAL.USER_ID);
336 END IF;
337
338 BEGIN
339 -- Call table handler CSD_REPAIR_ACTUALS_LINES_PKG.Insert_Row to
340 -- insert the record into CSD_REPAIR_ACTUAL_LINES
341 -- Invoke table handler(CSD_REPAIR_ACTUAL_LINES_PKG.Insert_Row)
342 CSD_REPAIR_ACTUAL_LINES_PKG.Insert_Row(
343 px_REPAIR_ACTUAL_LINE_ID => px_CSD_ACTUAL_LINES_REC.REPAIR_ACTUAL_LINE_ID
344 ,p_OBJECT_VERSION_NUMBER => px_CSD_ACTUAL_LINES_REC.OBJECT_VERSION_NUMBER
345 ,p_ESTIMATE_DETAIL_ID => px_CSD_ACTUAL_LINES_REC.ESTIMATE_DETAIL_ID
346 ,p_REPAIR_ACTUAL_ID => px_CSD_ACTUAL_LINES_REC.REPAIR_ACTUAL_ID
347 ,p_REPAIR_LINE_ID => px_CSD_ACTUAL_LINES_REC.REPAIR_LINE_ID
348 ,p_CREATED_BY => FND_GLOBAL.USER_ID
349 ,p_CREATION_DATE => SYSDATE
350 ,p_LAST_UPDATED_BY => FND_GLOBAL.USER_ID
351 ,p_LAST_UPDATE_DATE => SYSDATE
352 ,p_LAST_UPDATE_LOGIN => FND_GLOBAL.CONC_LOGIN_ID
353 ,p_ITEM_COST => px_CSD_ACTUAL_LINES_REC.ITEM_COST
354 ,p_JUSTIFICATION_NOTES => px_CSD_ACTUAL_LINES_REC.JUSTIFICATION_NOTES
355 ,p_RESOURCE_ID => px_CSD_ACTUAL_LINES_REC.RESOURCE_ID
356 ,p_OVERRIDE_CHARGE_FLAG => px_CSD_ACTUAL_LINES_REC.OVERRIDE_CHARGE_FLAG
357 ,p_ACTUAL_SOURCE_CODE => px_CSD_ACTUAL_LINES_REC.ACTUAL_SOURCE_CODE
358 ,p_ACTUAL_SOURCE_ID => px_CSD_ACTUAL_LINES_REC.ACTUAL_SOURCE_ID
359 ,p_WARRANTY_CLAIM_FLAG => px_CSD_ACTUAL_LINES_REC.WARRANTY_CLAIM_FLAG
360 ,p_WARRANTY_NUMBER => px_CSD_ACTUAL_LINES_REC.WARRANTY_NUMBER
361 ,p_WARRANTY_STATUS_CODE => px_CSD_ACTUAL_LINES_REC.WARRANTY_STATUS_CODE
362 ,p_REPLACED_ITEM_ID => px_CSD_ACTUAL_LINES_REC.REPLACED_ITEM_ID
363 ,p_ATTRIBUTE_CATEGORY => px_CSD_ACTUAL_LINES_REC.ATTRIBUTE_CATEGORY
364 ,p_ATTRIBUTE1 => px_CSD_ACTUAL_LINES_REC.ATTRIBUTE1
365 ,p_ATTRIBUTE2 => px_CSD_ACTUAL_LINES_REC.ATTRIBUTE2
366 ,p_ATTRIBUTE3 => px_CSD_ACTUAL_LINES_REC.ATTRIBUTE3
367 ,p_ATTRIBUTE4 => px_CSD_ACTUAL_LINES_REC.ATTRIBUTE4
368 ,p_ATTRIBUTE5 => px_CSD_ACTUAL_LINES_REC.ATTRIBUTE5
369 ,p_ATTRIBUTE6 => px_CSD_ACTUAL_LINES_REC.ATTRIBUTE6
370 ,p_ATTRIBUTE7 => px_CSD_ACTUAL_LINES_REC.ATTRIBUTE7
371 ,p_ATTRIBUTE8 => px_CSD_ACTUAL_LINES_REC.ATTRIBUTE8
372 ,p_ATTRIBUTE9 => px_CSD_ACTUAL_LINES_REC.ATTRIBUTE9
373 ,p_ATTRIBUTE10 => px_CSD_ACTUAL_LINES_REC.ATTRIBUTE10
374 ,p_ATTRIBUTE11 => px_CSD_ACTUAL_LINES_REC.ATTRIBUTE11
375 ,p_ATTRIBUTE12 => px_CSD_ACTUAL_LINES_REC.ATTRIBUTE12
376 ,p_ATTRIBUTE13 => px_CSD_ACTUAL_LINES_REC.ATTRIBUTE13
377 ,p_ATTRIBUTE14 => px_CSD_ACTUAL_LINES_REC.ATTRIBUTE14
378 ,p_ATTRIBUTE15 => px_CSD_ACTUAL_LINES_REC.ATTRIBUTE15
379 ,p_LOCATOR_ID => px_CSD_ACTUAL_LINES_REC.LOCATOR_ID
380 ,p_LOC_SEGMENT1 => px_CSD_ACTUAL_LINES_REC.LOC_SEGMENT1
381 ,p_LOC_SEGMENT2 => px_CSD_ACTUAL_LINES_REC.LOC_SEGMENT2
382 ,p_LOC_SEGMENT3 => px_CSD_ACTUAL_LINES_REC.LOC_SEGMENT3
383 ,p_LOC_SEGMENT4 => px_CSD_ACTUAL_LINES_REC.LOC_SEGMENT4
384 ,p_LOC_SEGMENT5 => px_CSD_ACTUAL_LINES_REC.LOC_SEGMENT5
385 ,p_LOC_SEGMENT6 => px_CSD_ACTUAL_LINES_REC.LOC_SEGMENT6
386 ,p_LOC_SEGMENT7 => px_CSD_ACTUAL_LINES_REC.LOC_SEGMENT7
387 ,p_LOC_SEGMENT8 => px_CSD_ACTUAL_LINES_REC.LOC_SEGMENT8
388 ,p_LOC_SEGMENT9 => px_CSD_ACTUAL_LINES_REC.LOC_SEGMENT9
389 ,p_LOC_SEGMENT10 => px_CSD_ACTUAL_LINES_REC.LOC_SEGMENT10
390 ,p_LOC_SEGMENT11 => px_CSD_ACTUAL_LINES_REC.LOC_SEGMENT11
391 ,p_LOC_SEGMENT12 => px_CSD_ACTUAL_LINES_REC.LOC_SEGMENT12
392 ,p_LOC_SEGMENT13 => px_CSD_ACTUAL_LINES_REC.LOC_SEGMENT13
393 ,p_LOC_SEGMENT14 => px_CSD_ACTUAL_LINES_REC.LOC_SEGMENT14
394 ,p_LOC_SEGMENT15 => px_CSD_ACTUAL_LINES_REC.LOC_SEGMENT15
395 ,p_LOC_SEGMENT16 => px_CSD_ACTUAL_LINES_REC.LOC_SEGMENT16
396 ,p_LOC_SEGMENT17 => px_CSD_ACTUAL_LINES_REC.LOC_SEGMENT17
397 ,p_LOC_SEGMENT18 => px_CSD_ACTUAL_LINES_REC.LOC_SEGMENT18
398 ,p_LOC_SEGMENT19 => px_CSD_ACTUAL_LINES_REC.LOC_SEGMENT19
399 ,p_LOC_SEGMENT20 => px_CSD_ACTUAL_LINES_REC.LOC_SEGMENT20);
400
401 IF ( Fnd_Log.Level_Procedure >= G_debug_level) THEN
402 FND_LOG.STRING(Fnd_Log.Level_Procedure,l_mod_name,'Returned from CSD_REPAIR_ACTUAL_LINES_REC_PKG.Insert_Row');
403 END IF;
404
405 EXCEPTION
406 WHEN OTHERS THEN
407 IF ( Fnd_Log.Level_Exception >= G_debug_level) THEN
408 FND_LOG.STRING(Fnd_Log.Level_Exception,l_mod_name,'Others exception in CSD_REPAIR_ACTUAL_LINES_PKG.Insert_Row Call :'||SubStr('Error '||TO_CHAR(SQLCODE)||': '||SQLERRM, 1,255));
409 END IF;
410 x_return_status := FND_API.G_RET_STS_ERROR;
411 END;
412
413 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
414 RAISE FND_API.G_EXC_ERROR;
415 END IF;
416
417 --
418 -- End of API body
419 --
420 -- --------------------------------------------------------------------
421 -- Check if the Repair_Actual_Lines_Rec.actual_source_code = TASK
422 -- --------------------------------------------------------------------
423 ELSIF (px_CSD_ACTUAL_LINES_REC.actual_source_code = 'TASK' ) THEN
424
425 -- Debrief would have created a Charge line in the cs_estimate_details table
426 -- which is the estimate_detail_id of the Actual line
427 -- we link the Debrief createsd charge line to our Actual Line
428
429 -- Raise FND_API.G_EXC_ERROR if the estimate_detail_id is null
430 IF (px_CSD_ACTUAL_LINES_REC.ESTIMATE_DETAIL_ID is null) THEN
431 IF ( Fnd_Log.Level_Statement >= G_debug_level) THEN
432 FND_LOG.STRING(Fnd_Log.Level_Statement,l_mod_name,'Missing estimate_detail_id for actual_source_code : '||px_CSD_ACTUAL_LINES_REC.actual_source_code);
433 END IF;
434 RAISE FND_API.G_EXC_ERROR;
435 END IF;
436
437 --
438 -- API body
439 --
440 IF ( Fnd_Log.Level_Procedure >= G_debug_level) THEN
441 FND_LOG.STRING(Fnd_Log.Level_Procedure,l_mod_name,'Call to CSD_REPAIR_ACTUAL_LINES_REC_PKG.Insert_Row');
442 END IF;
443
444 IF ( Fnd_Log.Level_Statement >= G_debug_level) THEN
445 FND_LOG.STRING(Fnd_Log.Level_Statement,l_mod_name,'Required columns: ');
446 FND_LOG.STRING(Fnd_Log.Level_Statement,l_mod_name,' ');
447 FND_LOG.STRING(Fnd_Log.Level_Statement,l_mod_name,'OBJECT_VERSION_NUMBER = ' || px_CSD_ACTUAL_LINES_REC.OBJECT_VERSION_NUMBER);
448 FND_LOG.STRING(Fnd_Log.Level_Statement,l_mod_name,'ESTIMATE_DETAIL_ID = ' || px_CSD_ACTUAL_LINES_REC.ESTIMATE_DETAIL_ID);
449 FND_LOG.STRING(Fnd_Log.Level_Statement,l_mod_name,'REPAIR_ACTUAL_ID = ' || px_CSD_ACTUAL_LINES_REC.REPAIR_ACTUAL_ID);
450 FND_LOG.STRING(Fnd_Log.Level_Statement,l_mod_name,'REPAIR_LINE_ID = ' || px_CSD_ACTUAL_LINES_REC.REPAIR_LINE_ID);
451 FND_LOG.STRING(Fnd_Log.Level_Statement,l_mod_name,'CREATED_BY = ' || FND_GLOBAL.USER_ID);
452 FND_LOG.STRING(Fnd_Log.Level_Statement,l_mod_name,'LAST_UPDATED_BY = '|| FND_GLOBAL.USER_ID);
453 END IF;
454
455 BEGIN
456 -- Call table handler CSD_REPAIR_ACTUALS_LINES_PKG.Insert_Row to
457 -- insert the record into CSD_REPAIR_ACTUAL_LINES
458 -- Invoke table handler(CSD_REPAIR_ACTUAL_LINES_PKG.Insert_Row)
459 CSD_REPAIR_ACTUAL_LINES_PKG.Insert_Row(
460 px_REPAIR_ACTUAL_LINE_ID => px_CSD_ACTUAL_LINES_REC.REPAIR_ACTUAL_LINE_ID
461 ,p_OBJECT_VERSION_NUMBER => px_CSD_ACTUAL_LINES_REC.OBJECT_VERSION_NUMBER
462 ,p_ESTIMATE_DETAIL_ID => px_CSD_ACTUAL_LINES_REC.ESTIMATE_DETAIL_ID
463 ,p_REPAIR_ACTUAL_ID => px_CSD_ACTUAL_LINES_REC.REPAIR_ACTUAL_ID
464 ,p_REPAIR_LINE_ID => px_CSD_ACTUAL_LINES_REC.REPAIR_LINE_ID
465 ,p_CREATED_BY => FND_GLOBAL.USER_ID
466 ,p_CREATION_DATE => SYSDATE
467 ,p_LAST_UPDATED_BY => FND_GLOBAL.USER_ID
468 ,p_LAST_UPDATE_DATE => SYSDATE
469 ,p_LAST_UPDATE_LOGIN => FND_GLOBAL.CONC_LOGIN_ID
470 ,p_ITEM_COST => px_CSD_ACTUAL_LINES_REC.ITEM_COST
471 ,p_JUSTIFICATION_NOTES => px_CSD_ACTUAL_LINES_REC.JUSTIFICATION_NOTES
472 ,p_RESOURCE_ID => px_CSD_ACTUAL_LINES_REC.RESOURCE_ID
473 ,p_OVERRIDE_CHARGE_FLAG => px_CSD_ACTUAL_LINES_REC.OVERRIDE_CHARGE_FLAG
474 ,p_ACTUAL_SOURCE_CODE => px_CSD_ACTUAL_LINES_REC.ACTUAL_SOURCE_CODE
475 ,p_ACTUAL_SOURCE_ID => px_CSD_ACTUAL_LINES_REC.ACTUAL_SOURCE_ID
476 ,p_WARRANTY_CLAIM_FLAG => px_CSD_ACTUAL_LINES_REC.WARRANTY_CLAIM_FLAG
477 ,p_WARRANTY_NUMBER => px_CSD_ACTUAL_LINES_REC.WARRANTY_NUMBER
478 ,p_WARRANTY_STATUS_CODE => px_CSD_ACTUAL_LINES_REC.WARRANTY_STATUS_CODE
479 ,p_REPLACED_ITEM_ID => px_CSD_ACTUAL_LINES_REC.REPLACED_ITEM_ID
480 ,p_ATTRIBUTE_CATEGORY => px_CSD_ACTUAL_LINES_REC.ATTRIBUTE_CATEGORY
481 ,p_ATTRIBUTE1 => px_CSD_ACTUAL_LINES_REC.ATTRIBUTE1
482 ,p_ATTRIBUTE2 => px_CSD_ACTUAL_LINES_REC.ATTRIBUTE2
483 ,p_ATTRIBUTE3 => px_CSD_ACTUAL_LINES_REC.ATTRIBUTE3
484 ,p_ATTRIBUTE4 => px_CSD_ACTUAL_LINES_REC.ATTRIBUTE4
485 ,p_ATTRIBUTE5 => px_CSD_ACTUAL_LINES_REC.ATTRIBUTE5
486 ,p_ATTRIBUTE6 => px_CSD_ACTUAL_LINES_REC.ATTRIBUTE6
487 ,p_ATTRIBUTE7 => px_CSD_ACTUAL_LINES_REC.ATTRIBUTE7
488 ,p_ATTRIBUTE8 => px_CSD_ACTUAL_LINES_REC.ATTRIBUTE8
489 ,p_ATTRIBUTE9 => px_CSD_ACTUAL_LINES_REC.ATTRIBUTE9
490 ,p_ATTRIBUTE10 => px_CSD_ACTUAL_LINES_REC.ATTRIBUTE10
491 ,p_ATTRIBUTE11 => px_CSD_ACTUAL_LINES_REC.ATTRIBUTE11
492 ,p_ATTRIBUTE12 => px_CSD_ACTUAL_LINES_REC.ATTRIBUTE12
493 ,p_ATTRIBUTE13 => px_CSD_ACTUAL_LINES_REC.ATTRIBUTE13
494 ,p_ATTRIBUTE14 => px_CSD_ACTUAL_LINES_REC.ATTRIBUTE14
495 ,p_ATTRIBUTE15 => px_CSD_ACTUAL_LINES_REC.ATTRIBUTE15
496 ,p_LOCATOR_ID => px_CSD_ACTUAL_LINES_REC.LOCATOR_ID
497 ,p_LOC_SEGMENT1 => px_CSD_ACTUAL_LINES_REC.LOC_SEGMENT1
498 ,p_LOC_SEGMENT2 => px_CSD_ACTUAL_LINES_REC.LOC_SEGMENT2
499 ,p_LOC_SEGMENT3 => px_CSD_ACTUAL_LINES_REC.LOC_SEGMENT3
500 ,p_LOC_SEGMENT4 => px_CSD_ACTUAL_LINES_REC.LOC_SEGMENT4
501 ,p_LOC_SEGMENT5 => px_CSD_ACTUAL_LINES_REC.LOC_SEGMENT5
502 ,p_LOC_SEGMENT6 => px_CSD_ACTUAL_LINES_REC.LOC_SEGMENT6
503 ,p_LOC_SEGMENT7 => px_CSD_ACTUAL_LINES_REC.LOC_SEGMENT7
504 ,p_LOC_SEGMENT8 => px_CSD_ACTUAL_LINES_REC.LOC_SEGMENT8
505 ,p_LOC_SEGMENT9 => px_CSD_ACTUAL_LINES_REC.LOC_SEGMENT9
506 ,p_LOC_SEGMENT10 => px_CSD_ACTUAL_LINES_REC.LOC_SEGMENT10
507 ,p_LOC_SEGMENT11 => px_CSD_ACTUAL_LINES_REC.LOC_SEGMENT11
508 ,p_LOC_SEGMENT12 => px_CSD_ACTUAL_LINES_REC.LOC_SEGMENT12
509 ,p_LOC_SEGMENT13 => px_CSD_ACTUAL_LINES_REC.LOC_SEGMENT13
510 ,p_LOC_SEGMENT14 => px_CSD_ACTUAL_LINES_REC.LOC_SEGMENT14
511 ,p_LOC_SEGMENT15 => px_CSD_ACTUAL_LINES_REC.LOC_SEGMENT15
512 ,p_LOC_SEGMENT16 => px_CSD_ACTUAL_LINES_REC.LOC_SEGMENT16
513 ,p_LOC_SEGMENT17 => px_CSD_ACTUAL_LINES_REC.LOC_SEGMENT17
514 ,p_LOC_SEGMENT18 => px_CSD_ACTUAL_LINES_REC.LOC_SEGMENT18
515 ,p_LOC_SEGMENT19 => px_CSD_ACTUAL_LINES_REC.LOC_SEGMENT19
516 ,p_LOC_SEGMENT20 => px_CSD_ACTUAL_LINES_REC.LOC_SEGMENT20);
517
518
519 EXCEPTION
520 WHEN OTHERS THEN
521 IF ( Fnd_Log.Level_Exception >= G_debug_level) THEN
522 FND_LOG.STRING(Fnd_Log.Level_Exception,l_mod_name,'Others exception in CSD_REPAIR_ACTUAL_LINES_PKG.Insert_Row Call :'||SubStr('Error '||TO_CHAR(SQLCODE)||': '||SQLERRM, 1,255));
523 END IF;
524 x_return_status := FND_API.G_RET_STS_ERROR;
525 END;
526
527 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
528 RAISE FND_API.G_EXC_ERROR;
529 END IF;
530
531 --
532 -- End of API body
533 --
534 -- ---------------------------------------------------------------------------
535 -- Check if the Repair_Actual_Lines_Rec.actual_source_code are WIP or MANUAL
536 -- ---------------------------------------------------------------------------
537 ELSIF (px_CSD_ACTUAL_LINES_REC.actual_source_code in ('WIP','MANUAL') ) THEN
538 -- swai: 12.1 service costing uptake bug 6960295
539 -- If importing from wip, do not cost the line again when importing
540 -- Otherwise, default to costing if the SAC is setup to cost
541 IF (px_CSD_ACTUAL_LINES_REC.actual_source_code in ('WIP') ) THEN
542 l_cs_cost_flag := 'N';
543 END IF;
544
545 -- If the actual_source_code = MANUAL then do validation for the
546 -- actual line record values passed from the Actuals UI
547 -- Raise FND_API.G_EXC_ERROR if it fails
548 --IF (px_CSD_ACTUAL_LINES_REC.actual_source_code in ('MANUAL') ) THEN
549
550 IF ( Fnd_Log.Level_Statement >= G_debug_level) THEN
551 FND_LOG.STRING(Fnd_Log.Level_Statement,l_mod_name,'Begin Check reqd parameter');
552 FND_LOG.STRING(Fnd_Log.Level_Statement,l_mod_name,'Repair Line ID ='||px_CSD_ACTUAL_LINES_REC.repair_line_id);
553 FND_LOG.STRING(Fnd_Log.Level_Statement,l_mod_name,'Transaction Billing Type ID ='||px_CHARGES_REC.txn_billing_type_id);
554 END IF;
555
556 -- Check the required parameter
557 CSD_PROCESS_UTIL.Check_Reqd_Param
558 ( p_param_value => px_CHARGES_REC.incident_id,
559 p_param_name => 'INCIDENT_ID',
560 p_api_name => l_api_name);
561
562 CSD_PROCESS_UTIL.Check_Reqd_Param
563 ( p_param_value => px_CHARGES_REC.txn_billing_type_id,
564 p_param_name => 'TXN_BILLING_TYPE_ID',
565 p_api_name => l_api_name);
566
567 CSD_PROCESS_UTIL.Check_Reqd_Param
568 ( p_param_value => px_CHARGES_REC.inventory_item_id_in,
569 p_param_name => 'INVENTORY_ITEM_ID',
570 p_api_name => l_api_name);
571
572 CSD_PROCESS_UTIL.Check_Reqd_Param
573 ( p_param_value => px_CHARGES_REC.unit_of_measure_code,
574 p_param_name => 'UNIT_OF_MEASURE_CODE',
575 p_api_name => l_api_name);
576
577 CSD_PROCESS_UTIL.Check_Reqd_Param
578 ( p_param_value => px_CHARGES_REC.quantity_required,
579 p_param_name => 'ESTIMATE_QUANTITY',
580 p_api_name => l_api_name);
581
582 CSD_PROCESS_UTIL.Check_Reqd_Param
583 ( p_param_value => px_CHARGES_REC.price_list_id,
584 p_param_name => 'PRICE_LIST_ID',
585 p_api_name => l_api_name);
586
587 IF ( Fnd_Log.Level_Statement >= G_debug_level) THEN
588 FND_LOG.STRING(Fnd_Log.Level_Statement,l_mod_name,'End Check reqd parameter');
589 END IF;
590
591 -- begin check for incident id is not null
592 IF (px_CHARGES_REC.incident_id is not null) THEN
593
594 IF ( Fnd_Log.Level_Statement >= G_debug_level) THEN
595 FND_LOG.STRING(Fnd_Log.Level_Statement,l_mod_name,'Incident_id ='||px_CHARGES_REC.incident_id);
596 END IF;
597
598 -- Get the business process id
599 l_bus_process_id := CSD_PROCESS_UTIL.GET_BUS_PROCESS(px_CSD_ACTUAL_LINES_REC.repair_line_id);
600
601 IF ( Fnd_Log.Level_Statement >= G_debug_level) THEN
602 FND_LOG.STRING(Fnd_Log.Level_Statement,l_mod_name,'l_bus_process_id ='||l_bus_process_id);
603 END IF;
604
605 IF l_bus_process_id < 0 THEN
606 IF NVL(px_CHARGES_REC.business_process_id,FND_API.G_MISS_NUM)
607 <> FND_API.G_MISS_NUM THEN
608 l_bus_process_id := px_CHARGES_REC.business_process_id;
609 ELSE
610 IF ( Fnd_Log.Level_Statement >= G_debug_level) THEN
611 FND_LOG.STRING(Fnd_Log.Level_Statement,l_mod_name,'Business process does not exist');
612 END IF;
613 RAISE FND_API.G_EXC_ERROR;
614 END IF;
615 END IF;
616
617 OPEN order_rec(px_CHARGES_REC.incident_id);
618 FETCH order_rec
619 INTO l_party_id,
620 l_account_id;
621
622 IF order_rec%NOTFOUND OR l_party_id IS NULL THEN
623 FND_MESSAGE.SET_NAME('CSD','CSD_API_PARTY_MISSING');
624 FND_MESSAGE.SET_TOKEN('INCIDENT_ID',px_CHARGES_REC.incident_id);
625 FND_MSG_PUB.ADD;
626 IF (Fnd_Log.Level_Error >= Fnd_Log.G_Current_Runtime_Level) THEN
627 FND_LOG.MESSAGE(Fnd_Log.Level_Error,l_mod_name, FALSE);
628 END IF;
629 RAISE FND_API.G_EXC_ERROR;
630 END IF;
631
632 IF order_rec%ISOPEN THEN
633 CLOSE order_rec;
634 END IF;
635
636 IF ( Fnd_Log.Level_Statement >= G_debug_level) THEN
637 FND_LOG.STRING(Fnd_Log.Level_Statement,l_mod_name,'l_party_id ='||l_party_id);
638 FND_LOG.STRING(Fnd_Log.Level_Statement,l_mod_name,'l_account_id ='||l_account_id);
639 FND_LOG.STRING(Fnd_Log.Level_Statement,l_mod_name,'px_CHARGES_REC.txn_billing_type_id ='||px_CHARGES_REC.txn_billing_type_id);
640 END IF;
641
642 -- Derive the txn_billing type and line category code
643 -- from the transaction type
644 CSD_PROCESS_UTIL.GET_LINE_TYPE
645 ( p_txn_billing_type_id => px_CHARGES_REC.txn_billing_type_id,
646 p_org_id => CSD_PROCESS_UTIL.get_org_id(px_CHARGES_REC.incident_id),
647 x_line_type_id => l_line_type_id,
648 x_line_category_code => l_line_category_code,
649 x_return_status => x_return_status );
650
651 IF NOT(x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
652 RAISE FND_API.G_EXC_ERROR;
653 END IF;
654
655 IF ( Fnd_Log.Level_Statement >= G_debug_level) THEN
656 FND_LOG.STRING(Fnd_Log.Level_Statement,l_mod_name,'line_type_id ='||l_line_type_id);
657 FND_LOG.STRING(Fnd_Log.Level_Statement,l_mod_name,'line_category_code ='||l_line_category_code);
658 FND_LOG.STRING(Fnd_Log.Level_Statement,l_mod_name,'price_list_id ='||px_CHARGES_REC.price_list_id);
659 END IF;
660
661 -- If line_type_id Or line_category_code is null, then raise error
662 IF l_line_type_id IS NULL OR
663 l_line_category_code IS NULL THEN
664 FND_MESSAGE.SET_NAME('CSD','CSD_API_LINE_TYPE_MISSING');
665 FND_MESSAGE.SET_TOKEN('TXN_BILLING_TYPE_ID',px_CHARGES_REC.txn_billing_type_id);
666 FND_MSG_PUB.ADD;
667 IF (Fnd_Log.Level_Error >= Fnd_Log.G_Current_Runtime_Level) THEN
668 FND_LOG.MESSAGE(Fnd_Log.Level_Error,l_mod_name, FALSE);
669 END IF;
670 RAISE FND_API.G_EXC_ERROR;
671 END IF;
672
673 -- Get the currency code
674 IF NVL(px_CHARGES_REC.price_list_id,FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM THEN
675 BEGIN
676 SELECT currency_code
677 INTO l_curr_code
678 FROM oe_price_lists
679 WHERE price_list_id = px_CHARGES_REC.price_list_id;
680 EXCEPTION
681 WHEN NO_DATA_FOUND THEN
682 FND_MESSAGE.SET_NAME('CSD','CSD_API_INV_PRICE_LIST_ID');
683 FND_MESSAGE.SET_TOKEN('PRICE_LIST_ID',px_CHARGES_REC.price_list_id);
684 FND_MSG_PUB.ADD;
685 IF (Fnd_Log.Level_Error >= Fnd_Log.G_Current_Runtime_Level) THEN
686 FND_LOG.MESSAGE(Fnd_Log.Level_Error,l_mod_name, FALSE);
687 END IF;
688 RAISE FND_API.G_EXC_ERROR;
689 END;
690 END IF;
691
692 IF ( Fnd_Log.Level_Statement >= G_debug_level) THEN
693 FND_LOG.STRING(Fnd_Log.Level_Statement,l_mod_name,'l_curr_code ='||l_curr_code);
694 END IF;
695
696 -- If l_curr_code is null then raise error
697 IF l_curr_code IS NULL THEN
698 FND_MESSAGE.SET_NAME('CSD','CSD_API_INV_CURR_CODE');
699 FND_MESSAGE.SET_TOKEN('PRICE_LIST_ID',px_CHARGES_REC.price_list_id);
700 FND_MSG_PUB.ADD;
701 IF (Fnd_Log.Level_Error >= Fnd_Log.G_Current_Runtime_Level) THEN
702 FND_LOG.MESSAGE(Fnd_Log.Level_Error,l_mod_name, FALSE);
703 END IF;
704 RAISE FND_API.G_EXC_ERROR;
705 END IF;
706
707 -- assigning values for the charge record
708 px_CHARGES_REC.business_process_id := l_bus_process_id;
709 px_CHARGES_REC.line_type_id := l_line_type_id;
710 px_CHARGES_REC.currency_code := l_curr_code;
711 px_CHARGES_REC.line_category_code := l_line_category_code;
712
713 -- travi new code
714 --px_CHARGES_REC.charge_line_type := ;
715 --px_CHARGES_REC.apply_contract_discount := ;
716
717 IF ( Fnd_Log.Level_Statement >= G_debug_level) THEN
718 FND_LOG.STRING(Fnd_Log.Level_Statement,l_mod_name,'Assign Derived values for the charge rec');
719 END IF;
720
721 -- always create estimate lines with interface to OE flag as 'N'
722 px_CHARGES_REC.interface_to_oe_flag := 'N' ;
723
724 -- Convert the estimate record to charge record
725 --CSD_PROCESS_UTIL.CONVERT_EST_TO_CHG_REC
726 -- ( p_estimate_line_rec => px_CSD_ACTUAL_LINES_REC,
727 -- x_charges_rec => lx_charges_rec,
728 -- x_return_status => x_return_status );
729
730 IF NOT(x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
731 RAISE FND_API.G_EXC_ERROR;
732 END IF;
733
734 END IF;
735 -- end check for incident id is not null
736
737 --ELSIF (px_CSD_ACTUAL_LINES_REC.actual_source_code in ('WIP') ) THEN
738 -- null;
739 --END IF;
740 IF ( Fnd_Log.Level_Procedure >= G_debug_level) THEN
741 FND_LOG.STRING(Fnd_Log.Level_Procedure,l_mod_name,'Call process_estimate_lines to create charge lines');
742 END IF;
743
744 -- For WIP we will have charge record as input but we create charge record for MANUAL
745 -- Call table handler CSD_REPAIR_ESTIMATE_PVT.Process_Estimate_Lines in create mode
746 -- which calls charges API to update the record in CS_ESTIMATE_DETAILS
747 CSD_REPAIR_ESTIMATE_PVT.PROCESS_ESTIMATE_LINES
748 ( p_api_version => 1.0 ,
749 p_commit => fnd_api.g_false,
750 p_init_msg_list => fnd_api.g_true,
751 p_validation_level => fnd_api.g_valid_level_full,
752 p_action => 'CREATE',
753 p_cs_cost_flag => l_cs_cost_flag, -- swai: 12.1 service costing uptake bug 6960295
754 x_Charges_Rec => px_charges_rec,
755 x_return_status => x_return_status,
756 x_msg_count => x_msg_count,
757 x_msg_data => x_msg_data );
758
759 -- Raise FND_API.G_EXC_ERROR if it fails
760 IF NOT(x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
761 RAISE FND_API.G_EXC_ERROR;
762 IF ( Fnd_Log.Level_Statement >= G_debug_level) THEN
763 FND_LOG.STRING(Fnd_Log.Level_Statement,l_mod_name,'Creating Charge line failed for actual_source_code : '||px_CSD_ACTUAL_LINES_REC.actual_source_code);
764 END IF;
765 END IF;
766
767 -- Assign estimate_detail_id to Actual lines record
768 px_CSD_ACTUAL_LINES_REC.ESTIMATE_DETAIL_ID := px_charges_rec.estimate_detail_id;
769 IF ( Fnd_Log.Level_Statement >= G_debug_level) THEN
770 FND_LOG.STRING(Fnd_Log.Level_Statement,l_mod_name,'Created estimate_detail_id : '||px_CSD_ACTUAL_LINES_REC.ESTIMATE_DETAIL_ID);
771 END IF;
772
773 --
774 -- API body
775 --
776 IF ( Fnd_Log.Level_Procedure >= G_debug_level) THEN
777 FND_LOG.STRING(Fnd_Log.Level_Procedure,l_mod_name,'Call to CSD_REPAIR_ACTUAL_LINES_REC_PKG.Insert_Row');
778 END IF;
779
780 BEGIN
781 -- Call table handler CSD_REPAIR_ACTUALS_LINES_PKG.Insert_Row to
782 -- insert the record into CSD_REPAIR_ACTUAL_LINES
783 -- Invoke table handler(CSD_REPAIR_ACTUAL_LINES_PKG.Insert_Row)
784 CSD_REPAIR_ACTUAL_LINES_PKG.Insert_Row(
785 px_REPAIR_ACTUAL_LINE_ID => px_CSD_ACTUAL_LINES_REC.REPAIR_ACTUAL_LINE_ID
786 ,p_OBJECT_VERSION_NUMBER => px_CSD_ACTUAL_LINES_REC.OBJECT_VERSION_NUMBER
787 ,p_ESTIMATE_DETAIL_ID => px_CSD_ACTUAL_LINES_REC.ESTIMATE_DETAIL_ID
788 ,p_REPAIR_ACTUAL_ID => px_CSD_ACTUAL_LINES_REC.REPAIR_ACTUAL_ID
789 ,p_REPAIR_LINE_ID => px_CSD_ACTUAL_LINES_REC.REPAIR_LINE_ID
790 ,p_CREATED_BY => FND_GLOBAL.USER_ID
791 ,p_CREATION_DATE => SYSDATE
792 ,p_LAST_UPDATED_BY => FND_GLOBAL.USER_ID
793 ,p_LAST_UPDATE_DATE => SYSDATE
794 ,p_LAST_UPDATE_LOGIN => FND_GLOBAL.CONC_LOGIN_ID
795 ,p_ITEM_COST => px_CSD_ACTUAL_LINES_REC.ITEM_COST
796 ,p_JUSTIFICATION_NOTES => px_CSD_ACTUAL_LINES_REC.JUSTIFICATION_NOTES
797 ,p_RESOURCE_ID => px_CSD_ACTUAL_LINES_REC.RESOURCE_ID
798 ,p_OVERRIDE_CHARGE_FLAG => px_CSD_ACTUAL_LINES_REC.OVERRIDE_CHARGE_FLAG
799 ,p_ACTUAL_SOURCE_CODE => px_CSD_ACTUAL_LINES_REC.ACTUAL_SOURCE_CODE
800 ,p_ACTUAL_SOURCE_ID => px_CSD_ACTUAL_LINES_REC.ACTUAL_SOURCE_ID
801 ,p_WARRANTY_CLAIM_FLAG => px_CSD_ACTUAL_LINES_REC.WARRANTY_CLAIM_FLAG
802 ,p_WARRANTY_NUMBER => px_CSD_ACTUAL_LINES_REC.WARRANTY_NUMBER
803 ,p_WARRANTY_STATUS_CODE => px_CSD_ACTUAL_LINES_REC.WARRANTY_STATUS_CODE
804 ,p_REPLACED_ITEM_ID => px_CSD_ACTUAL_LINES_REC.REPLACED_ITEM_ID
805 ,p_ATTRIBUTE_CATEGORY => px_CSD_ACTUAL_LINES_REC.ATTRIBUTE_CATEGORY
806 ,p_ATTRIBUTE1 => px_CSD_ACTUAL_LINES_REC.ATTRIBUTE1
807 ,p_ATTRIBUTE2 => px_CSD_ACTUAL_LINES_REC.ATTRIBUTE2
808 ,p_ATTRIBUTE3 => px_CSD_ACTUAL_LINES_REC.ATTRIBUTE3
809 ,p_ATTRIBUTE4 => px_CSD_ACTUAL_LINES_REC.ATTRIBUTE4
810 ,p_ATTRIBUTE5 => px_CSD_ACTUAL_LINES_REC.ATTRIBUTE5
811 ,p_ATTRIBUTE6 => px_CSD_ACTUAL_LINES_REC.ATTRIBUTE6
812 ,p_ATTRIBUTE7 => px_CSD_ACTUAL_LINES_REC.ATTRIBUTE7
813 ,p_ATTRIBUTE8 => px_CSD_ACTUAL_LINES_REC.ATTRIBUTE8
814 ,p_ATTRIBUTE9 => px_CSD_ACTUAL_LINES_REC.ATTRIBUTE9
815 ,p_ATTRIBUTE10 => px_CSD_ACTUAL_LINES_REC.ATTRIBUTE10
816 ,p_ATTRIBUTE11 => px_CSD_ACTUAL_LINES_REC.ATTRIBUTE11
817 ,p_ATTRIBUTE12 => px_CSD_ACTUAL_LINES_REC.ATTRIBUTE12
818 ,p_ATTRIBUTE13 => px_CSD_ACTUAL_LINES_REC.ATTRIBUTE13
819 ,p_ATTRIBUTE14 => px_CSD_ACTUAL_LINES_REC.ATTRIBUTE14
820 ,p_ATTRIBUTE15 => px_CSD_ACTUAL_LINES_REC.ATTRIBUTE15
821 ,p_LOCATOR_ID => px_CSD_ACTUAL_LINES_REC.LOCATOR_ID
822 ,p_LOC_SEGMENT1 => px_CSD_ACTUAL_LINES_REC.LOC_SEGMENT1
823 ,p_LOC_SEGMENT2 => px_CSD_ACTUAL_LINES_REC.LOC_SEGMENT2
824 ,p_LOC_SEGMENT3 => px_CSD_ACTUAL_LINES_REC.LOC_SEGMENT3
825 ,p_LOC_SEGMENT4 => px_CSD_ACTUAL_LINES_REC.LOC_SEGMENT4
826 ,p_LOC_SEGMENT5 => px_CSD_ACTUAL_LINES_REC.LOC_SEGMENT5
827 ,p_LOC_SEGMENT6 => px_CSD_ACTUAL_LINES_REC.LOC_SEGMENT6
828 ,p_LOC_SEGMENT7 => px_CSD_ACTUAL_LINES_REC.LOC_SEGMENT7
829 ,p_LOC_SEGMENT8 => px_CSD_ACTUAL_LINES_REC.LOC_SEGMENT8
830 ,p_LOC_SEGMENT9 => px_CSD_ACTUAL_LINES_REC.LOC_SEGMENT9
831 ,p_LOC_SEGMENT10 => px_CSD_ACTUAL_LINES_REC.LOC_SEGMENT10
832 ,p_LOC_SEGMENT11 => px_CSD_ACTUAL_LINES_REC.LOC_SEGMENT11
833 ,p_LOC_SEGMENT12 => px_CSD_ACTUAL_LINES_REC.LOC_SEGMENT12
834 ,p_LOC_SEGMENT13 => px_CSD_ACTUAL_LINES_REC.LOC_SEGMENT13
835 ,p_LOC_SEGMENT14 => px_CSD_ACTUAL_LINES_REC.LOC_SEGMENT14
836 ,p_LOC_SEGMENT15 => px_CSD_ACTUAL_LINES_REC.LOC_SEGMENT15
837 ,p_LOC_SEGMENT16 => px_CSD_ACTUAL_LINES_REC.LOC_SEGMENT16
838 ,p_LOC_SEGMENT17 => px_CSD_ACTUAL_LINES_REC.LOC_SEGMENT17
839 ,p_LOC_SEGMENT18 => px_CSD_ACTUAL_LINES_REC.LOC_SEGMENT18
840 ,p_LOC_SEGMENT19 => px_CSD_ACTUAL_LINES_REC.LOC_SEGMENT19
841 ,p_LOC_SEGMENT20 => px_CSD_ACTUAL_LINES_REC.LOC_SEGMENT20);
842
843
844 EXCEPTION
845 WHEN OTHERS THEN
846 IF ( Fnd_Log.Level_Exception >= G_debug_level) THEN
847 FND_LOG.STRING(Fnd_Log.Level_Exception,l_mod_name,'Others exception in CSD_REPAIR_ACTUAL_LINES_PKG.Insert_Row Call :'||SubStr('Error '||TO_CHAR(SQLCODE)||': '||SQLERRM, 1,255));
848 END IF;
849 x_return_status := FND_API.G_RET_STS_ERROR;
850 END;
851
852 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
853 RAISE FND_API.G_EXC_ERROR;
854 END IF;
855
856 --
857 -- End of API body
858 --
859
860 END IF;
861
862
863 -- Standard check of p_commit.
864 IF FND_API.To_Boolean( p_commit ) THEN
865 COMMIT WORK;
866 END IF;
867
868 -- Standard call to get message count and IF count is get message info.
869 FND_MSG_PUB.Count_And_Get
870 (p_count => x_msg_count,
871 p_data => x_msg_data );
872
873 EXCEPTION
874 WHEN FND_API.G_EXC_ERROR THEN
875 IF ( Fnd_Log.Level_Exception >= G_debug_level) THEN
876 FND_LOG.STRING(Fnd_Log.Level_Exception,l_mod_name,'In FND_API.G_EXC_ERROR exception');
877 END IF;
878 x_return_status := FND_API.G_RET_STS_ERROR ;
879 ROLLBACK TO CREATE_REPAIR_ACTUAL_LINES;
880 FND_MSG_PUB.Count_And_Get
881 (p_count => x_msg_count,
882 p_data => x_msg_data );
883 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
884 IF ( Fnd_Log.Level_Exception >= G_debug_level) THEN
885 FND_LOG.STRING(Fnd_Log.Level_Exception,l_mod_name,'In FND_API.G_EXC_UNEXPECTED_ERROR exception ');
886 END IF;
887 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
888 ROLLBACK TO CREATE_REPAIR_ACTUAL_LINES;
889 FND_MSG_PUB.Count_And_Get
890 ( p_count => x_msg_count,
891 p_data => x_msg_data );
892 WHEN OTHERS THEN
893 IF ( Fnd_Log.Level_Exception >= G_debug_level) THEN
894 FND_LOG.STRING(Fnd_Log.Level_Exception,l_mod_name,'In OTHERS exception');
895 FND_LOG.STRING(Fnd_Log.Level_Exception,l_mod_name,'Sql Err Msg :'||SQLERRM );
896 END IF;
897 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
898 ROLLBACK TO CREATE_REPAIR_ACTUAL_LINES;
899 IF FND_MSG_PUB.Check_Msg_Level
900 (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
901 THEN
902 FND_MSG_PUB.Add_Exc_Msg
903 (G_PKG_NAME ,
904 l_api_name );
905 END IF;
906 FND_MSG_PUB.Count_And_Get
907 (p_count => x_msg_count,
908 p_data => x_msg_data );
909
910 End CREATE_REPAIR_ACTUAL_LINES;
911
912
913 /*--------------------------------------------------------------------*/
914 /* procedure name: UPDATE_REPAIR_ACTUAL_LINES */
915 /* description : procedure used to Update Repair Actuals */
916 /* */
917 /* */
918 /* */
919 /* Called from : Depot Repair Actuals UI */
920 /* Input Parm : */
921 /* p_api_version NUMBER Req Api Version number */
922 /* p_init_msg_list VARCHAR2 Opt Initialize message stack */
923 /* p_commit VARCHAR2 Opt Commits in API */
924 /* p_validation_level NUMBER Opt validation steps */
925 /* px_CSD_ACTUAL_LINES_REC REC Req Actuals lines Record */
926 /* px_Charges_Rec REC Req Charges line Record */
927 /* Output Parm : */
928 /* x_return_status VARCHAR2 Return status after the call. */
929 /* x_msg_count NUMBER Number of messages in stack */
930 /* x_msg_data VARCHAR2 Mesg. text if x_msg_count >= 1 */
931 /* Change Hist : */
932 /* 08/11/03 travikan Initial Creation. */
933 /* */
934 /* */
935 /* */
936 /*--------------------------------------------------------------------*/
937 PROCEDURE UPDATE_REPAIR_ACTUAL_LINES(
938 P_Api_Version IN NUMBER,
939 P_Commit IN VARCHAR2,
940 P_Init_Msg_List IN VARCHAR2,
941 p_validation_level IN NUMBER,
942 px_CSD_ACTUAL_LINES_REC IN OUT NOCOPY CSD_ACTUAL_LINES_REC_TYPE,
943 px_Charges_Rec IN OUT NOCOPY CS_CHARGE_DETAILS_PUB.CHARGES_REC_TYPE,
944 X_Return_Status OUT NOCOPY VARCHAR2,
945 X_Msg_Count OUT NOCOPY NUMBER,
946 X_Msg_Data OUT NOCOPY VARCHAR2
947 )
948
949 IS
950 -- Variables used in FND Log
951 l_stat_level number := FND_LOG.LEVEL_STATEMENT;
952 l_proc_level number := FND_LOG.LEVEL_PROCEDURE;
953 l_event_level number := FND_LOG.LEVEL_EVENT;
954 l_excep_level number := FND_LOG.LEVEL_EXCEPTION;
955 l_error_level number := FND_LOG.LEVEL_ERROR;
956 l_unexp_level number := FND_LOG.LEVEL_UNEXPECTED;
957 l_mod_name varchar2(2000) := 'csd.plsql.csd_repair_actual_lines_pvt.update_repair_actual_lines';
958
959 l_api_name CONSTANT VARCHAR2(30) := 'UPDATE_REPAIR_ACTUAL_LINES';
960 l_api_version CONSTANT NUMBER := 1.0;
961 l_msg_count NUMBER;
962 l_msg_data VARCHAR2(100);
963 l_msg_index NUMBER;
964 l_api_return_status VARCHAR2(3);
965
966 l_act_obj_ver_num NUMBER;
967 l_est_obj_ver_num NUMBER;
968
969 /*FP Fixed for bug#5117652
970 Following variables added
971 */
972 l_sr_add_to_order_flag varchar2(1);
973 l_ro_add_to_order_flag varchar2(1);
974 l_line_order_category_code varchar2(30);
975 l_add_actual_to_id number;
976 /*FP Fixed for bug#5117652 end*/
977
978 -- swai: 12.1 service costing uptake bug 6960295
979 l_cs_cost_flag VARCHAR2(1) := 'Y';
980
981 CURSOR charge_lines(p_est_det_id IN NUMBER) IS
982 SELECT object_version_number
983 FROM cs_estimate_details
984 WHERE estimate_detail_id = p_est_det_id;
985
986 CURSOR repair_actual_lines(p_actual_line_id IN NUMBER) IS
987 SELECT a.object_version_number
988 FROM csd_repair_actual_lines a,
989 csd_repairs b
990 WHERE a.repair_line_id = b.repair_line_id
991 and a.repair_actual_line_id = p_actual_line_id;
992
993
994
995 BEGIN
996 -- Standard Start of API savepoint
997 SAVEPOINT UPDATE_REPAIR_ACTUAL_LINES;
998
999 -- Standard call to check for call compatibility.
1000 IF NOT FND_API.Compatible_API_Call ( l_api_version,
1001 p_api_version,
1002 l_api_name,
1003 G_PKG_NAME)
1004 THEN
1005 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1006 END IF;
1007
1008 -- Initialize message list if p_init_msg_list is set to TRUE.
1009 IF FND_API.to_Boolean( p_init_msg_list ) THEN
1010 FND_MSG_PUB.initialize;
1011 END IF;
1012
1013 -- Initialize API return status to success
1014 x_return_status := FND_API.G_RET_STS_SUCCESS;
1015
1016 -- Api body starts
1017 IF ( Fnd_Log.Level_Statement >= G_debug_level) THEN
1018 FND_LOG.STRING(Fnd_Log.Level_Statement,l_mod_name,'At the Beginning of update_repair_actual_lines');
1019 END IF;
1020
1021 -- Dump the in parameters in the log file
1022 -- if the debug level > 5
1023 -- If fnd_profile.value('CSD_DEBUG_LEVEL') > 5 then
1024 -- if (g_debug > 5) then
1025 -- csd_gen_utility_pvt.dump_actuals_rec
1026 -- ( p_CSD_ACTUAL_LINES_REC => px_CSD_ACTUAL_LINES_REC);
1027 -- end if;
1028
1029 IF ( Fnd_Log.Level_Statement >= G_debug_level) THEN
1030 FND_LOG.STRING(Fnd_Log.Level_Statement,l_mod_name,'Begin Check reqd parameter');
1031 END IF;
1032
1033 -- Check the required parameter
1034 CSD_PROCESS_UTIL.Check_Reqd_Param
1035 ( p_param_value => px_CSD_ACTUAL_LINES_REC.repair_line_id,
1036 p_param_name => 'REPAIR_LINE_ID',
1037 p_api_name => l_api_name);
1038
1039 CSD_PROCESS_UTIL.Check_Reqd_Param
1040 ( p_param_value => px_CSD_ACTUAL_LINES_REC.repair_actual_id,
1041 p_param_name => 'REPAIR_ACTUAL_ID',
1042 p_api_name => l_api_name);
1043
1044 CSD_PROCESS_UTIL.Check_Reqd_Param
1045 ( p_param_value => px_CSD_ACTUAL_LINES_REC.repair_actual_line_id,
1046 p_param_name => 'REPAIR_ACTUAL_LINE_ID',
1047 p_api_name => l_api_name);
1048
1049 CSD_PROCESS_UTIL.Check_Reqd_Param
1050 ( p_param_value => px_Charges_Rec.estimate_detail_id,
1051 p_param_name => 'ESTIMATE_DETAIL_ID',
1052 p_api_name => l_api_name);
1053
1054 IF ( Fnd_Log.Level_Statement >= G_debug_level) THEN
1055 FND_LOG.STRING(Fnd_Log.Level_Statement,l_mod_name,'End Check reqd parameter');
1056 FND_LOG.STRING(Fnd_Log.Level_Statement,l_mod_name,'Begin Validate Repair Line id');
1057 END IF;
1058
1059 -- Validate the repair line ID
1060 IF NOT( CSD_PROCESS_UTIL.Validate_rep_line_id
1061 ( p_repair_line_id => px_CSD_ACTUAL_LINES_REC.repair_line_id )) THEN
1062 RAISE FND_API.G_EXC_ERROR;
1063 END IF;
1064
1065 IF ( Fnd_Log.Level_Statement >= G_debug_level) THEN
1066 FND_LOG.STRING(Fnd_Log.Level_Statement,l_mod_name,'End Validate Repair Line id');
1067 END IF;
1068
1069 -- Validate the repair actual line id against csd_repair_actual_lines
1070 -- If it is invalid then raise FND_API.G_EXC_ERROR
1071 IF NVL(px_CSD_ACTUAL_LINES_REC.repair_actual_line_id,FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM THEN
1072
1073 OPEN repair_actual_lines(px_CSD_ACTUAL_LINES_REC.repair_actual_line_id);
1074 FETCH repair_actual_lines
1075 INTO l_act_obj_ver_num;
1076
1077 IF repair_actual_lines%NOTFOUND THEN
1078 FND_MESSAGE.SET_NAME('CSD','CSD_API_ACTUAL_LINE_MISSING');
1079 FND_MESSAGE.SET_TOKEN('REPAIR_ACTUAL_LINE_ID',px_CSD_ACTUAL_LINES_REC.repair_actual_line_id);
1080 FND_MSG_PUB.ADD;
1081 IF (Fnd_Log.Level_Error >= Fnd_Log.G_Current_Runtime_Level) THEN
1082 FND_LOG.MESSAGE(Fnd_Log.Level_Error,l_mod_name, FALSE);
1083 END IF;
1084 RAISE FND_API.G_EXC_ERROR;
1085 END IF;
1086
1087 IF repair_actual_lines%ISOPEN THEN
1088 CLOSE repair_actual_lines;
1089 END IF;
1090
1091 -- Validate the estimate detail id against cs_estimate_details
1092 -- If it is invalid then raise FND_API.G_EXC_ERROR
1093 OPEN charge_lines(px_Charges_Rec.estimate_detail_id);
1094 FETCH charge_lines
1095 INTO l_est_obj_ver_num;
1096
1097 IF charge_lines%NOTFOUND THEN
1098 FND_MESSAGE.SET_NAME('CSD','CSD_API_CHARGE_LINE_MISSING');
1099 FND_MESSAGE.SET_TOKEN('ESTIMATE_DETAIL_ID',px_Charges_Rec.estimate_detail_id);
1100 FND_MSG_PUB.ADD;
1101 IF (Fnd_Log.Level_Error >= Fnd_Log.G_Current_Runtime_Level) THEN
1102 FND_LOG.MESSAGE(Fnd_Log.Level_Error,l_mod_name, FALSE);
1103 END IF;
1104 RAISE FND_API.G_EXC_ERROR;
1105 END IF;
1106
1107 IF charge_lines%ISOPEN THEN
1108 CLOSE charge_lines;
1109 END IF;
1110
1111 END IF;
1112
1113 IF ( Fnd_Log.Level_Statement >= G_debug_level) THEN
1114 FND_LOG.STRING(Fnd_Log.Level_Statement,l_mod_name,'Validate Object Version Number for Charge and Actual Line');
1115 END IF;
1116
1117 IF NVL(px_CSD_ACTUAL_LINES_REC.object_version_number,FND_API.G_MISS_NUM) <> l_act_obj_ver_num THEN
1118 IF ( Fnd_Log.Level_Statement >= G_debug_level) THEN
1119 FND_LOG.STRING(Fnd_Log.Level_Statement,l_mod_name,'Actual Line Object Version Number does not match'
1120 || ' for the Repair Actual Line ID = ' || px_CSD_ACTUAL_LINES_REC.repair_actual_line_id);
1121 END IF;
1122
1123 -- Modified the message name for bugfix 3281321. vkjain.
1124 -- FND_MESSAGE.SET_NAME('CSD','CSD_OBJ_VER_MISMATCH');
1125 FND_MESSAGE.SET_NAME('CSD','CSD_ACT_LIN_OBJ_VER_MISMATCH');
1126 -- FND_MESSAGE.SET_TOKEN('REPAIR_ACTUAL_LINE_ID',px_CSD_ACTUAL_LINES_REC.repair_actual_line_id);
1127 FND_MSG_PUB.ADD;
1128 IF (Fnd_Log.Level_Error >= Fnd_Log.G_Current_Runtime_Level) THEN
1129 FND_LOG.MESSAGE(Fnd_Log.Level_Error,l_mod_name, FALSE);
1130 END IF;
1131 RAISE FND_API.G_EXC_ERROR;
1132 ELSE
1133 -- Assigning object version number
1134 px_CSD_ACTUAL_LINES_REC.object_version_number := l_act_obj_ver_num+1;
1135 END IF;
1136
1137 /*FP Fixed for bug#5117652
1138 Below code is added. This code ensure that actual line is added to
1139 existing OM line based on profile setup.
1140 */
1141
1142 /*if interfacing the line then get the order header based on profile */
1143 -- vicli: bug#10102119 - added check for UPDATE_ADD_TO_ORDER_FLAG because
1144 -- we only want to update the order header when we are about to submit.
1145 -- Sometimes the interface_to_oe_flag is set to Y but user just wants
1146 -- to update the charge line and not submit (eg., updating a line that
1147 -- has been imported from task to actual). In this case, order header
1148 -- should NOT be updated so UPDATE_ADD_TO_ORDER_FLAG should be F.
1149 IF px_Charges_Rec.INTERFACE_TO_OE_FLAG = 'Y'
1150 and nvl(px_csd_actual_lines_rec.UPDATE_ADD_TO_ORDER_FLAG,
1151 CSD_PROCESS_UTIL.G_TRUE) = CSD_PROCESS_UTIL.G_TRUE then
1152 select line_order_category_code
1153 into l_line_order_category_code
1154 from cs_transaction_types_b
1155 where transaction_type_id = px_Charges_Rec.TRANSACTION_TYPE_ID;
1156
1157 l_sr_add_to_order_flag := fnd_profile.value('CSD_ADD_TO_SO_WITHIN_SR');
1158 l_sr_add_to_order_flag := nvl(l_sr_Add_to_order_flag, 'N');
1159 l_ro_add_to_order_flag := fnd_profile.value('CSD_ADD_TO_SO_WITHIN_RO');
1160 l_ro_add_to_order_flag := nvl(l_ro_Add_to_order_flag, 'N');
1161
1162 IF (l_sr_add_to_order_flag='Y') OR (l_ro_add_to_order_flag='Y') then
1163 IF l_line_order_category_code ='ORDER' then
1164 begin
1165 Select max(ced.order_header_id)
1166 into l_add_actual_to_id
1167 from cs_estimate_details ced,
1168 oe_order_headers_all ooh,
1169 oe_order_types_v oot
1170 where
1171 ced.estimate_detail_id in
1172 (select estimate_detail_id
1173 from csd_product_transactions
1174 where repair_line_id = px_CSD_ACTUAL_LINES_REC.REPAIR_LINE_ID
1175 union
1176 select estimate_detail_id
1177 from csd_repair_actual_lines
1178 where repair_actual_id=px_CSD_ACTUAL_LINES_REC.REPAIR_ACTUAL_ID)
1179 and ced.order_header_id is not null
1180 and ooh.open_flag = 'Y'
1181 and nvl(ooh.cancelled_flag,'N') = 'N'
1182 and ooh.header_id = ced.order_header_id
1183 and (ooh.cust_po_number = nvl(px_Charges_Rec.PURCHASE_ORDER_NUM,ooh.cust_po_number)
1184 or ooh.cust_po_number is null)
1185 and ooh.sold_to_org_id = px_Charges_Rec.bill_to_account_id -- swai: bug 6962424
1186 and oot.order_type_id = ooh.order_type_id
1187 and oot.order_category_code in ('MIXED','ORDER')
1188 and ced.interface_to_oe_flag = 'Y';
1189 exception
1190 when no_data_found then
1191 l_add_actual_to_id := null;
1192 end;
1193 ELSIF l_line_order_category_code ='RETURN' then
1194 begin
1195 Select max(ced.order_header_id)
1196 into l_add_actual_to_id
1197 from cs_estimate_details ced,
1198 oe_order_headers_all ooh,
1199 oe_order_types_v oot
1200 where
1201 ced.estimate_detail_id in
1202 (select estimate_detail_id
1203 from csd_product_transactions
1204 where repair_line_id = px_CSD_ACTUAL_LINES_REC.REPAIR_LINE_ID
1205 union
1206 select estimate_detail_id
1207 from csd_repair_actual_lines
1208 where repair_actual_id=px_CSD_ACTUAL_LINES_REC.REPAIR_ACTUAL_ID)
1209 and ced.order_header_id is not null
1210 and ooh.open_flag = 'Y'
1211 and nvl(ooh.cancelled_flag,'N') = 'N'
1212 and ooh.header_id = ced.order_header_id
1213 and (ooh.cust_po_number = nvl(px_Charges_Rec.PURCHASE_ORDER_NUM,ooh.cust_po_number)
1214 or ooh.cust_po_number is null)
1215 and ooh.sold_to_org_id = px_Charges_Rec.bill_to_account_id -- swai: bug 6962424
1216 and oot.order_type_id = ooh.order_type_id
1217 and oot.order_category_code in ('MIXED','RETURN')
1218 and ced.interface_to_oe_flag = 'Y';
1219 exception
1220 when no_data_found then
1221 l_add_actual_to_id := null;
1222 end;
1223 END IF; /*line order category*/
1224
1225 If l_add_actual_to_id is not null then /*add actual line */
1226 px_Charges_Rec.ADD_TO_ORDER_FLAG := 'Y';
1227 px_Charges_Rec.ORDER_HEADER_ID := l_add_actual_to_id;
1228 elsif (l_sr_add_to_order_flag='N') then
1229 /*RO profile is yes and SR profile is NO and we do not find SO under RO
1230 in this case new SR should be created */
1231 px_Charges_Rec.ADD_TO_ORDER_FLAG := 'F';
1232 px_Charges_Rec.ORDER_HEADER_ID := NULL;
1233 end if;
1234
1235 ELSE /*when both profile are N then create new order */
1236 px_Charges_Rec.ADD_TO_ORDER_FLAG := 'F';
1237 px_Charges_Rec.ORDER_HEADER_ID := NULL;
1238 END IF;
1239 end if; /*end if interface to oe flag */
1240 /*FP Fixed for bug#5117652 end*/
1241
1242
1243 -- Initialize API return status to SUCCESS
1244 x_return_status := FND_API.G_RET_STS_SUCCESS;
1245
1246 -- --------------------------------------------------------------------
1247 -- Check the Repair_Actual_Lines_Rec.actual_source_code for validations
1248
1249 -- Following validations will be done in the form itself
1250 -- Validate the repair actual line record for
1251 -- if the line is not interfaced to Order Management
1252
1253 -- Validate the repair actual line record for
1254 -- if the line passes the security validations
1255
1256 -- Validate the repair actual line record for
1257 -- if the line can have a override in charge value
1258 -- --------------------------------------------------------------------
1259 IF (px_CSD_ACTUAL_LINES_REC.actual_source_code in ('MANUAL', 'ESTIMATE') ) THEN
1260 -- no validations planned as of now
1261 null;
1262 ELSIF (px_CSD_ACTUAL_LINES_REC.actual_source_code in ('TASK', 'WIP') ) THEN
1263 null;
1264 -- -------------------------------------------------------------
1265 -- These Validations are enforced in the form itself
1266 -- Allow Pricing related updates but not product related updates
1267 -- product, quantity
1268 -- price list, uom, contract, unit price, after warranty cost
1269 -- -------------------------------------------------------------
1270
1271 -- swai: 12.1 service costing uptake bug 6960295
1272 IF (px_CSD_ACTUAL_LINES_REC.actual_source_code = 'WIP' ) THEN
1273 l_cs_cost_flag := 'N';
1274 END IF;
1275 END IF;
1276
1277 --
1278 -- Api body
1279 --
1280 BEGIN
1281 -- Call table handler CSD_REPAIR_ESTIMATE_PVT.Process_Estimate_Lines in update mode
1282 -- which calls charges API to update the record in CS_ESTIMATE_DETAILS
1283 CSD_REPAIR_ESTIMATE_PVT.PROCESS_ESTIMATE_LINES
1284 ( p_api_version => 1.0 ,
1285 p_commit => fnd_api.g_false,
1286 p_init_msg_list => fnd_api.g_true,
1287 p_validation_level => fnd_api.g_valid_level_full,
1288 p_action => 'UPDATE',
1289 -- swai: 12.1 service costing uptake bug 6960295
1290 p_cs_cost_flag => l_cs_cost_flag,
1291 x_Charges_Rec => px_charges_rec,
1292 x_return_status => x_return_status,
1293 x_msg_count => x_msg_count,
1294 x_msg_data => x_msg_data);
1295
1296 -- The following check was added as a fix for bug 3378602. vkjain
1297 -- We do not want to continue with updating the Actual line if Charges
1298 -- API returned error.
1299 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1300 RAISE FND_API.G_EXC_ERROR;
1301 END IF;
1302
1303 EXCEPTION
1304 -- The following exception was added as a fix for bug 3378602. vkjain
1305 WHEN FND_API.G_EXC_ERROR THEN
1306 IF ( Fnd_Log.Level_Exception >= G_debug_level) THEN
1307 FND_LOG.STRING(Fnd_Log.Level_Exception,l_mod_name,'Charges API returned error while calling UPDATE.');
1308 END IF;
1309 RAISE FND_API.G_EXC_ERROR;
1310 WHEN OTHERS THEN
1311 IF ( Fnd_Log.Level_Exception >= G_debug_level) THEN
1312 FND_LOG.STRING(Fnd_Log.Level_Exception,l_mod_name,'Others exception error :'||SubStr('Error '||TO_CHAR(SQLCODE)||': '||SQLERRM, 1,255));
1313 END IF;
1314 RAISE FND_API.G_EXC_ERROR;
1315 END;
1316
1317 IF ( Fnd_Log.Level_Procedure >= G_debug_level) THEN
1318 FND_LOG.STRING(Fnd_Log.Level_Procedure,l_mod_name,'Call to CSD_REPAIR_ACTUAL_LINES_REC_PKG.Update_Row');
1319 END IF;
1320
1321 BEGIN
1322 -- Invoke table handler(CSD_REPAIR_ACTUAL_LINES_PKG.Update_Row)
1323 CSD_REPAIR_ACTUAL_LINES_PKG.Update_Row(
1324 p_REPAIR_ACTUAL_LINE_ID => px_CSD_ACTUAL_LINES_REC.REPAIR_ACTUAL_LINE_ID
1325 ,p_OBJECT_VERSION_NUMBER => px_CSD_ACTUAL_LINES_REC.OBJECT_VERSION_NUMBER
1326 ,p_ESTIMATE_DETAIL_ID => px_CSD_ACTUAL_LINES_REC.ESTIMATE_DETAIL_ID
1327 ,p_REPAIR_ACTUAL_ID => px_CSD_ACTUAL_LINES_REC.REPAIR_ACTUAL_ID
1328 ,p_REPAIR_LINE_ID => px_CSD_ACTUAL_LINES_REC.REPAIR_LINE_ID
1329 ,p_CREATED_BY => FND_API.G_MISS_NUM
1330 ,p_CREATION_DATE => FND_API.G_MISS_DATE
1331 ,p_LAST_UPDATED_BY => FND_GLOBAL.USER_ID
1332 ,p_LAST_UPDATE_DATE => SYSDATE
1333 ,p_LAST_UPDATE_LOGIN => FND_GLOBAL.CONC_LOGIN_ID
1334 ,p_ITEM_COST => px_CSD_ACTUAL_LINES_REC.ITEM_COST
1335 ,p_JUSTIFICATION_NOTES => px_CSD_ACTUAL_LINES_REC.JUSTIFICATION_NOTES
1336 ,p_RESOURCE_ID => px_CSD_ACTUAL_LINES_REC.RESOURCE_ID
1337 ,p_OVERRIDE_CHARGE_FLAG => px_CSD_ACTUAL_LINES_REC.OVERRIDE_CHARGE_FLAG
1338 ,p_ACTUAL_SOURCE_CODE => px_CSD_ACTUAL_LINES_REC.ACTUAL_SOURCE_CODE
1339 ,p_ACTUAL_SOURCE_ID => px_CSD_ACTUAL_LINES_REC.ACTUAL_SOURCE_ID
1340 ,p_WARRANTY_CLAIM_FLAG => px_CSD_ACTUAL_LINES_REC.WARRANTY_CLAIM_FLAG
1341 ,p_WARRANTY_NUMBER => px_CSD_ACTUAL_LINES_REC.WARRANTY_NUMBER
1342 ,p_WARRANTY_STATUS_CODE => px_CSD_ACTUAL_LINES_REC.WARRANTY_STATUS_CODE
1343 ,p_REPLACED_ITEM_ID => px_CSD_ACTUAL_LINES_REC.REPLACED_ITEM_ID
1344 ,p_ATTRIBUTE_CATEGORY => px_CSD_ACTUAL_LINES_REC.ATTRIBUTE_CATEGORY
1345 ,p_ATTRIBUTE1 => px_CSD_ACTUAL_LINES_REC.ATTRIBUTE1
1346 ,p_ATTRIBUTE2 => px_CSD_ACTUAL_LINES_REC.ATTRIBUTE2
1347 ,p_ATTRIBUTE3 => px_CSD_ACTUAL_LINES_REC.ATTRIBUTE3
1348 ,p_ATTRIBUTE4 => px_CSD_ACTUAL_LINES_REC.ATTRIBUTE4
1349 ,p_ATTRIBUTE5 => px_CSD_ACTUAL_LINES_REC.ATTRIBUTE5
1350 ,p_ATTRIBUTE6 => px_CSD_ACTUAL_LINES_REC.ATTRIBUTE6
1351 ,p_ATTRIBUTE7 => px_CSD_ACTUAL_LINES_REC.ATTRIBUTE7
1352 ,p_ATTRIBUTE8 => px_CSD_ACTUAL_LINES_REC.ATTRIBUTE8
1353 ,p_ATTRIBUTE9 => px_CSD_ACTUAL_LINES_REC.ATTRIBUTE9
1354 ,p_ATTRIBUTE10 => px_CSD_ACTUAL_LINES_REC.ATTRIBUTE10
1355 ,p_ATTRIBUTE11 => px_CSD_ACTUAL_LINES_REC.ATTRIBUTE11
1356 ,p_ATTRIBUTE12 => px_CSD_ACTUAL_LINES_REC.ATTRIBUTE12
1357 ,p_ATTRIBUTE13 => px_CSD_ACTUAL_LINES_REC.ATTRIBUTE13
1358 ,p_ATTRIBUTE14 => px_CSD_ACTUAL_LINES_REC.ATTRIBUTE14
1359 ,p_ATTRIBUTE15 => px_CSD_ACTUAL_LINES_REC.ATTRIBUTE15
1360 ,p_LOCATOR_ID => px_CSD_ACTUAL_LINES_REC.LOCATOR_ID
1361 ,p_LOC_SEGMENT1 => px_CSD_ACTUAL_LINES_REC.LOC_SEGMENT1
1362 ,p_LOC_SEGMENT2 => px_CSD_ACTUAL_LINES_REC.LOC_SEGMENT2
1363 ,p_LOC_SEGMENT3 => px_CSD_ACTUAL_LINES_REC.LOC_SEGMENT3
1364 ,p_LOC_SEGMENT4 => px_CSD_ACTUAL_LINES_REC.LOC_SEGMENT4
1365 ,p_LOC_SEGMENT5 => px_CSD_ACTUAL_LINES_REC.LOC_SEGMENT5
1366 ,p_LOC_SEGMENT6 => px_CSD_ACTUAL_LINES_REC.LOC_SEGMENT6
1367 ,p_LOC_SEGMENT7 => px_CSD_ACTUAL_LINES_REC.LOC_SEGMENT7
1368 ,p_LOC_SEGMENT8 => px_CSD_ACTUAL_LINES_REC.LOC_SEGMENT8
1369 ,p_LOC_SEGMENT9 => px_CSD_ACTUAL_LINES_REC.LOC_SEGMENT9
1370 ,p_LOC_SEGMENT10 => px_CSD_ACTUAL_LINES_REC.LOC_SEGMENT10
1371 ,p_LOC_SEGMENT11 => px_CSD_ACTUAL_LINES_REC.LOC_SEGMENT11
1372 ,p_LOC_SEGMENT12 => px_CSD_ACTUAL_LINES_REC.LOC_SEGMENT12
1373 ,p_LOC_SEGMENT13 => px_CSD_ACTUAL_LINES_REC.LOC_SEGMENT13
1374 ,p_LOC_SEGMENT14 => px_CSD_ACTUAL_LINES_REC.LOC_SEGMENT14
1375 ,p_LOC_SEGMENT15 => px_CSD_ACTUAL_LINES_REC.LOC_SEGMENT15
1376 ,p_LOC_SEGMENT16 => px_CSD_ACTUAL_LINES_REC.LOC_SEGMENT16
1377 ,p_LOC_SEGMENT17 => px_CSD_ACTUAL_LINES_REC.LOC_SEGMENT17
1378 ,p_LOC_SEGMENT18 => px_CSD_ACTUAL_LINES_REC.LOC_SEGMENT18
1379 ,p_LOC_SEGMENT19 => px_CSD_ACTUAL_LINES_REC.LOC_SEGMENT19
1380 ,p_LOC_SEGMENT20 => px_CSD_ACTUAL_LINES_REC.LOC_SEGMENT20);
1381
1382
1383 EXCEPTION
1384 WHEN OTHERS THEN
1385 IF ( Fnd_Log.Level_Exception >= G_debug_level) THEN
1386 FND_LOG.STRING(Fnd_Log.Level_Exception,l_mod_name,'Others exception in CSD_REPAIR_ACTUAL_LINES_PKG.Update_Row Cal:'||SubStr('Error '||TO_CHAR(SQLCODE)||': '||SQLERRM, 1,255));
1387 END IF;
1388 RAISE FND_API.G_EXC_ERROR;
1389 END;
1390 --
1391 -- End of API body
1392 --
1393
1394 -- Standard check of p_commit.
1395 IF FND_API.To_Boolean( p_commit ) THEN
1396 COMMIT WORK;
1397 END IF;
1398
1399 -- Standard call to get message count and IF count is get message info.
1400 FND_MSG_PUB.Count_And_Get
1401 (p_count => x_msg_count,
1402 p_data => x_msg_data );
1403
1404 EXCEPTION
1405 WHEN FND_API.G_EXC_ERROR THEN
1406 IF ( Fnd_Log.Level_Exception >= G_debug_level) THEN
1407 FND_LOG.STRING(Fnd_Log.Level_Exception,l_mod_name,'In FND_API.G_EXC_ERROR exception');
1408 END IF;
1409 x_return_status := FND_API.G_RET_STS_ERROR ;
1410 ROLLBACK TO UPDATE_REPAIR_ACTUAL_LINES;
1411 FND_MSG_PUB.Count_And_Get
1412 (p_count => x_msg_count,
1413 p_data => x_msg_data );
1414 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1415 IF ( Fnd_Log.Level_Exception >= G_debug_level) THEN
1416 FND_LOG.STRING(Fnd_Log.Level_Exception,l_mod_name,'In FND_API.G_EXC_UNEXPECTED_ERROR exception ');
1417 END IF;
1418 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
1419 ROLLBACK TO UPDATE_REPAIR_ACTUAL_LINES;
1420 FND_MSG_PUB.Count_And_Get
1421 ( p_count => x_msg_count,
1422 p_data => x_msg_data );
1423 WHEN OTHERS THEN
1424 IF ( Fnd_Log.Level_Exception >= G_debug_level) THEN
1425 FND_LOG.STRING(Fnd_Log.Level_Exception,l_mod_name,'In OTHERS exception');
1426 FND_LOG.STRING(Fnd_Log.Level_Exception,l_mod_name,'Sql Err Msg :'||SQLERRM );
1427 END IF;
1428 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
1429 ROLLBACK TO UPDATE_REPAIR_ACTUAL_LINES;
1430 IF FND_MSG_PUB.Check_Msg_Level
1431 (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1432 THEN
1433 FND_MSG_PUB.Add_Exc_Msg
1434 (G_PKG_NAME ,
1435 l_api_name );
1436 END IF;
1437 FND_MSG_PUB.Count_And_Get
1438 (p_count => x_msg_count,
1439 p_data => x_msg_data );
1440
1441 End UPDATE_REPAIR_ACTUAL_LINES;
1442
1443
1444 /*--------------------------------------------------------------------*/
1445 /* procedure name: DELETE_REPAIR_ACTUAL_LINES */
1446 /* description : procedure used to Delete Repair Actuals */
1447 /* */
1448 /* */
1449 /* */
1450 /* Called from : Depot Repair Actuals UI */
1451 /* Input Parm : */
1452 /* p_api_version NUMBER Req Api Version number */
1453 /* p_init_msg_list VARCHAR2 Opt Initialize message stack */
1454 /* p_commit VARCHAR2 Opt Commits in API */
1455 /* p_validation_level NUMBER Opt validation steps */
1456 /* px_CSD_ACTUAL_LINES_REC REC Req Actuals lines Record */
1457 /* px_Charges_Rec REC Req Charges line Record */
1458 /* Output Parm : */
1459 /* x_return_status VARCHAR2 Return status after the call. */
1460 /* x_msg_count NUMBER Number of messages in stack */
1461 /* x_msg_data VARCHAR2 Mesg. text if x_msg_count >= 1 */
1462 /* Change Hist : */
1463 /* 08/11/03 travikan Initial Creation. */
1464 /* */
1465 /* */
1466 /* */
1467 /*--------------------------------------------------------------------*/
1468 PROCEDURE DELETE_REPAIR_ACTUAL_LINES(
1469 P_Api_Version IN NUMBER,
1470 P_Commit IN VARCHAR2,
1471 P_Init_Msg_List IN VARCHAR2,
1472 p_validation_level IN NUMBER,
1473 px_CSD_ACTUAL_LINES_REC IN OUT NOCOPY CSD_ACTUAL_LINES_REC_TYPE,
1474 px_Charges_Rec IN OUT NOCOPY CS_CHARGE_DETAILS_PUB.CHARGES_REC_TYPE,
1475 X_Return_Status OUT NOCOPY VARCHAR2,
1476 X_Msg_Count OUT NOCOPY NUMBER,
1477 X_Msg_Data OUT NOCOPY VARCHAR2
1478 )
1479
1480 IS
1481 -- Variables used in FND Log
1482 l_stat_level number := FND_LOG.LEVEL_STATEMENT;
1483 l_proc_level number := FND_LOG.LEVEL_PROCEDURE;
1484 l_event_level number := FND_LOG.LEVEL_EVENT;
1485 l_excep_level number := FND_LOG.LEVEL_EXCEPTION;
1486 l_error_level number := FND_LOG.LEVEL_ERROR;
1487 l_unexp_level number := FND_LOG.LEVEL_UNEXPECTED;
1488 l_mod_name varchar2(2000) := 'csd.plsql.csd_repair_actual_lines_pvt.delete_repair_actual_lines';
1489
1490
1491 l_api_name CONSTANT VARCHAR2(30) := 'DELETE_REPAIR_ACTUAL_LINES';
1492 l_api_version CONSTANT NUMBER := 1.0;
1493 l_msg_count NUMBER;
1494 l_msg_data VARCHAR2(100);
1495 l_msg_index NUMBER;
1496
1497 l_actual_line_id NUMBER;
1498 l_obj_ver_num NUMBER;
1499 l_act_line_count NUMBER;
1500
1501 -- swai: 12.1 service costing uptake bug 6960295
1502 -- Since actual lines imported from WIP cannot be deleted, it is not
1503 -- necessary to pass the cost flag. But we will do it to be consistent
1504 -- with CREATE and UPDATE. If we allow deletion of actual lines from
1505 -- WIP in the future, then cost flag should be set to 'N' for those
1506 -- lines.
1507 l_cs_cost_flag VARCHAR2(1) := 'Y';
1508
1509 CURSOR repair_actual_lines(p_actual_line_id IN NUMBER) IS
1510 SELECT
1511 a.repair_actual_line_id,
1512 a.object_version_number
1513 FROM csd_repair_actual_lines a,
1514 csd_repairs b
1515 WHERE a.repair_line_id = b.repair_line_id
1516 and a.repair_actual_line_id = p_actual_line_id;
1517
1518 BEGIN
1519
1520 -- Standard Start of API savepoint
1521 SAVEPOINT DELETE_REPAIR_ACTUAL_LINES;
1522
1523 -- Standard call to check for call compatibility.
1524 IF NOT FND_API.Compatible_API_Call ( l_api_version,
1525 p_api_version,
1526 l_api_name,
1527 G_PKG_NAME)
1528 THEN
1529 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1530 END IF;
1531
1532 -- Initialize message list if p_init_msg_list is set to TRUE.
1533 IF FND_API.to_Boolean( p_init_msg_list ) THEN
1534 FND_MSG_PUB.initialize;
1535 END IF;
1536
1537 -- Initialize API return status to success
1538 x_return_status := FND_API.G_RET_STS_SUCCESS;
1539
1540 -- Api body starts
1541 IF ( Fnd_Log.Level_Statement >= G_debug_level) THEN
1542 FND_LOG.STRING(Fnd_Log.Level_Statement,l_mod_name,'At the Beginning of delete_repair_actual_lines');
1543 END IF;
1544
1545 -- Dump the in parameters in the log file
1546 -- if the debug level > 5
1547 -- If fnd_profile.value('CSD_DEBUG_LEVEL') > 5 then
1548 /* TBD
1549 if (g_debug > 5) then
1550 csd_gen_utility_pvt.dump_actuals_rec
1551 ( p_CSD_ACTUAL_LINES_REC => px_CSD_ACTUAL_LINES_REC);
1552 end if;
1553 */
1554
1555 IF ( Fnd_Log.Level_Statement >= G_debug_level) THEN
1556 FND_LOG.STRING(Fnd_Log.Level_Statement,l_mod_name,'Begin Check reqd parametes');
1557 END IF;
1558
1559 -- Check the required parameter
1560 CSD_PROCESS_UTIL.Check_Reqd_Param
1561 ( p_param_value => px_CSD_ACTUAL_LINES_REC.repair_actual_line_id,
1562 p_param_name => 'REPAIR_ACTUAL_LINE_ID',
1563 p_api_name => l_api_name);
1564
1565 IF ( Fnd_Log.Level_Statement >= G_debug_level) THEN
1566 FND_LOG.STRING(Fnd_Log.Level_Statement,l_mod_name,'End Check reqd parametes');
1567 FND_LOG.STRING(Fnd_Log.Level_Statement,l_mod_name,'Begin Validate Repair Line id');
1568 END IF;
1569
1570 -- Validate the repair line ID
1571 IF NOT( CSD_PROCESS_UTIL.Validate_rep_line_id
1572 ( p_repair_line_id => px_CSD_ACTUAL_LINES_REC.repair_line_id )) THEN
1573 RAISE FND_API.G_EXC_ERROR;
1574 END IF;
1575
1576 IF ( Fnd_Log.Level_Statement >= G_debug_level) THEN
1577 FND_LOG.STRING(Fnd_Log.Level_Statement,l_mod_name,'End Validate Repair Line id');
1578 END IF;
1579
1580 --
1581 -- API body
1582 --
1583
1584 -- Actual deletes allowed only for Actual lines created manually
1585 -- or for the ones copied from the estimates
1586 -- Check the actual_source_code in Repair_Actual_Lines_Rec
1587
1588 IF (px_CSD_ACTUAL_LINES_REC.actual_source_code in ('MANUAL', 'ESTIMATE')) then
1589
1590 -- Validate the repair actual line id against csd_repair_actual_lines
1591 -- If it is interfaced then raise FND_API.G_EXC_ERROR
1592 IF NVL(px_CSD_ACTUAL_LINES_REC.repair_actual_line_id,FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM THEN
1593
1594 OPEN repair_actual_lines(px_CSD_ACTUAL_LINES_REC.repair_actual_line_id);
1595 FETCH repair_actual_lines
1596 INTO l_actual_line_id,
1597 l_obj_ver_num;
1598
1599 IF repair_actual_lines%NOTFOUND THEN
1600 FND_MESSAGE.SET_NAME('CSD','CSD_API_ACTUAL_LINES_MISSING');
1601 FND_MESSAGE.SET_TOKEN('REPAIR_ACTUAL_LINE_ID',l_actual_line_id);
1602 FND_MSG_PUB.ADD;
1603 IF (Fnd_Log.Level_Error >= Fnd_Log.G_Current_Runtime_Level) THEN
1604 FND_LOG.MESSAGE(Fnd_Log.Level_Error,l_mod_name, FALSE);
1605 END IF;
1606 RAISE FND_API.G_EXC_ERROR;
1607 END IF;
1608
1609 IF repair_actual_lines%ISOPEN THEN
1610 CLOSE repair_actual_lines;
1611 END IF;
1612
1613 END IF;
1614
1615 IF ( Fnd_Log.Level_Statement >= G_debug_level) THEN
1616 FND_LOG.STRING(Fnd_Log.Level_Statement,l_mod_name,'Validate Object Version Number');
1617 END IF;
1618
1619 IF NVL(px_CSD_ACTUAL_LINES_REC.object_version_number,FND_API.G_MISS_NUM) <>l_obj_ver_num THEN
1620 IF ( Fnd_Log.Level_Statement >= G_debug_level) THEN
1621 FND_LOG.STRING(Fnd_Log.Level_Statement,l_mod_name,'Object Version Number does not match'
1622 || ' for the Repair Actual Line ID = ' || l_actual_line_id);
1623 END IF;
1624
1625 -- Modified the message name for bugfix 3281321. vkjain.
1626 -- FND_MESSAGE.SET_NAME('CSD','CSD_OBJ_VER_MISMATCH');
1627 FND_MESSAGE.SET_NAME('CSD','CSD_ACT_LIN_OBJ_VER_MISMATCH');
1628 -- FND_MESSAGE.SET_TOKEN('REPAIR_ACTUAL_LINE_ID',l_actual_line_id);
1629 FND_MSG_PUB.ADD;
1630 IF (Fnd_Log.Level_Error >= Fnd_Log.G_Current_Runtime_Level) THEN
1631 FND_LOG.MESSAGE(Fnd_Log.Level_Error,l_mod_name, FALSE);
1632 END IF;
1633 RAISE FND_API.G_EXC_ERROR;
1634 END IF;
1635
1636 IF (px_Charges_Rec.order_header_id is not null) THEN
1637 IF ( Fnd_Log.Level_Statement >= G_debug_level) THEN
1638 FND_LOG.STRING(Fnd_Log.Level_Statement,l_mod_name,'Repair Actual Line is Interfaced to Order Management');
1639 END IF;
1640
1641 FND_MESSAGE.SET_NAME('CSD','CSD_ACT_LIN_OM_IFACE');
1642 FND_MESSAGE.SET_TOKEN('REPAIR_ACTUAL_LINE_ID',l_actual_line_id);
1643 FND_MSG_PUB.ADD;
1644 IF (Fnd_Log.Level_Error >= Fnd_Log.G_Current_Runtime_Level) THEN
1645 FND_LOG.MESSAGE(Fnd_Log.Level_Error,l_mod_name, FALSE);
1646 END IF;
1647 RAISE FND_API.G_EXC_ERROR;
1648 END IF;
1649
1650 -- Call table handler CSD_REPAIR_ESTIMATE_PVT.Process_Estimate_Lines to
1651 -- delete the record in CS_ESTIMATE_DETAILS
1652 IF ( Fnd_Log.Level_Procedure >= G_debug_level) THEN
1653 FND_LOG.STRING(Fnd_Log.Level_Procedure,l_mod_name,'Call process_estimate_lines to delete charge line');
1654 END IF;
1655
1656 CSD_REPAIR_ESTIMATE_PVT.PROCESS_ESTIMATE_LINES
1657 ( p_api_version => 1.0 ,
1658 p_commit => fnd_api.g_false,
1659 p_init_msg_list => fnd_api.g_true,
1660 p_validation_level => fnd_api.g_valid_level_full,
1661 p_action => 'DELETE',
1662 -- swai: 12.1 service costing uptake bug 6960295
1663 p_cs_cost_flag => l_cs_cost_flag,
1664 x_Charges_Rec => px_charges_rec,
1665 x_return_status => x_return_status,
1666 x_msg_count => x_msg_count,
1667 x_msg_data => x_msg_data);
1668
1669 IF NOT(x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
1670 RAISE FND_API.G_EXC_ERROR;
1671 END IF;
1672
1673 IF ( Fnd_Log.Level_Procedure >= G_debug_level) THEN
1674 FND_LOG.STRING(Fnd_Log.Level_Procedure,l_mod_name,'Call to CSD_REPAIR_ACTUAL_LINES_PKG.Delete_Row');
1675 END IF;
1676
1677 BEGIN
1678
1679 -- Invoke table handler(CSD_REPAIR_ACTUAL_LINES_PKG.Delete_Row)
1680 CSD_REPAIR_ACTUAL_LINES_PKG.Delete_Row(
1681 p_REPAIR_ACTUAL_LINE_ID => px_CSD_ACTUAL_LINES_REC.REPAIR_ACTUAL_LINE_ID
1682 ,p_OBJECT_VERSION_NUMBER => px_CSD_ACTUAL_LINES_REC.OBJECT_VERSION_NUMBER);
1683
1684 EXCEPTION
1685 WHEN OTHERS THEN
1686 IF ( Fnd_Log.Level_Exception >= G_debug_level) THEN
1687 FND_LOG.STRING(Fnd_Log.Level_Exception,l_mod_name,'Others exception in CSD_REPAIR_ACTUAL_LINES_PKG.Delete_Row Call :'||SubStr('Error '||TO_CHAR(SQLCODE)||': '||SQLERRM, 1,255));
1688 END IF;
1689 x_return_status := FND_API.G_RET_STS_ERROR;
1690 END;
1691
1692 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1693 RAISE FND_API.G_EXC_ERROR;
1694 END IF;
1695
1696 END IF;
1697 --
1698 -- End of API body
1699 --
1700
1701 -- Standard check of p_commit.
1702 IF FND_API.To_Boolean( p_commit ) THEN
1703 COMMIT WORK;
1704 END IF;
1705
1706 -- Standard call to get message count and IF count is get message info.
1707 FND_MSG_PUB.Count_And_Get
1708 (p_count => x_msg_count,
1709 p_data => x_msg_data );
1710 EXCEPTION
1711 WHEN FND_API.G_EXC_ERROR THEN
1712 IF ( Fnd_Log.Level_Exception >= G_debug_level) THEN
1713 FND_LOG.STRING(Fnd_Log.Level_Exception,l_mod_name,'In FND_API.G_EXC_ERROR exception');
1714 END IF;
1715 x_return_status := FND_API.G_RET_STS_ERROR ;
1716 ROLLBACK TO DELETE_REPAIR_ACTUAL_LINES;
1717 FND_MSG_PUB.Count_And_Get
1718 (p_count => x_msg_count,
1719 p_data => x_msg_data );
1720 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1721 IF ( Fnd_Log.Level_Exception >= G_debug_level) THEN
1722 FND_LOG.STRING(Fnd_Log.Level_Exception,l_mod_name,'In FND_API.G_EXC_UNEXPECTED_ERROR exception ');
1723 END IF;
1724 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
1725 ROLLBACK TO DELETE_REPAIR_ACTUAL_LINES;
1726 FND_MSG_PUB.Count_And_Get
1727 ( p_count => x_msg_count,
1728 p_data => x_msg_data );
1729 WHEN OTHERS THEN
1730 IF ( Fnd_Log.Level_Exception >= G_debug_level) THEN
1731 FND_LOG.STRING(Fnd_Log.Level_Exception,l_mod_name,'In OTHERS exception');
1732 FND_LOG.STRING(Fnd_Log.Level_Exception,l_mod_name,'Sql Err Msg :'||SQLERRM );
1733 END IF;
1734 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
1735 ROLLBACK TO DELETE_REPAIR_ACTUAL_LINES;
1736 IF FND_MSG_PUB.Check_Msg_Level
1737 (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1738 THEN
1739 FND_MSG_PUB.Add_Exc_Msg
1740 (G_PKG_NAME ,
1741 l_api_name );
1742 END IF;
1743 FND_MSG_PUB.Count_And_Get
1744 (p_count => x_msg_count,
1745 p_data => x_msg_data );
1746
1747 End DELETE_REPAIR_ACTUAL_LINES;
1748
1749
1750 /*--------------------------------------------------------------------*/
1751 /* procedure name: LOCK_REPAIR_ACTUAL_LINES */
1752 /* description : procedure used to Delete Repair Actuals */
1753 /* */
1754 /* */
1755 /* */
1756 /* Called from : Depot Repair Actuals UI */
1757 /* Input Parm : */
1758 /* p_api_version NUMBER Req Api Version number */
1759 /* p_init_msg_list VARCHAR2 Opt Initialize message stack */
1760 /* p_commit VARCHAR2 Opt Commits in API */
1761 /* p_validation_level NUMBER Opt validation steps */
1762 /* px_CSD_ACTUAL_LINES_REC REC Req Actuals lines Record */
1763 /* Output Parm : */
1764 /* x_return_status VARCHAR2 Return status after the call. */
1765 /* x_msg_count NUMBER Number of messages in stack */
1766 /* x_msg_data VARCHAR2 Mesg. text if x_msg_count >= 1 */
1767 /* Change Hist : */
1768 /* 08/11/03 travikan Initial Creation. */
1769 /* */
1770 /* */
1771 /* */
1772 /*--------------------------------------------------------------------*/
1773 PROCEDURE LOCK_REPAIR_ACTUAL_LINES(
1774 P_Api_Version IN NUMBER,
1775 P_Commit IN VARCHAR2,
1776 P_Init_Msg_List IN VARCHAR2,
1777 p_validation_level IN NUMBER,
1778 px_CSD_ACTUAL_LINES_REC IN OUT NOCOPY CSD_ACTUAL_LINES_REC_TYPE,
1779 X_Return_Status OUT NOCOPY VARCHAR2,
1780 X_Msg_Count OUT NOCOPY NUMBER,
1781 X_Msg_Data OUT NOCOPY VARCHAR2
1782 )
1783
1784 IS
1785 -- Variables used in FND Log
1786 l_stat_level number := FND_LOG.LEVEL_STATEMENT;
1787 l_proc_level number := FND_LOG.LEVEL_PROCEDURE;
1788 l_event_level number := FND_LOG.LEVEL_EVENT;
1789 l_excep_level number := FND_LOG.LEVEL_EXCEPTION;
1790 l_error_level number := FND_LOG.LEVEL_ERROR;
1791 l_unexp_level number := FND_LOG.LEVEL_UNEXPECTED;
1792 l_mod_name varchar2(2000) := 'csd.plsql.csd_repair_actual_lines_pvt.lock_repair_actual_lines';
1793
1794 l_api_name CONSTANT VARCHAR2(30) := 'LOCK_REPAIR_ACTUAL_LINES';
1795 l_api_version CONSTANT NUMBER := 1.0;
1796 l_msg_count NUMBER;
1797 l_msg_data VARCHAR2(100);
1798 l_msg_index NUMBER;
1799
1800 BEGIN
1801 -- Standard Start of API savepoint
1802 SAVEPOINT LOCK_REPAIR_ACTUAL_LINES;
1803
1804 -- Standard call to check for call compatibility.
1805 IF NOT FND_API.Compatible_API_Call ( l_api_version,
1806 p_api_version,
1807 l_api_name,
1808 G_PKG_NAME)
1809 THEN
1810 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1811 END IF;
1812
1813 -- Initialize message list if p_init_msg_list is set to TRUE.
1814 IF FND_API.to_Boolean( p_init_msg_list ) THEN
1815 FND_MSG_PUB.initialize;
1816 END IF;
1817
1818 -- Initialize API return status to success
1819 x_return_status := FND_API.G_RET_STS_SUCCESS;
1820
1821 -- Api body starts
1822 IF ( Fnd_Log.Level_Statement >= G_debug_level) THEN
1823 FND_LOG.STRING(Fnd_Log.Level_Statement,l_mod_name,'At the Beginning of lock_repair_actual_lines');
1824 END IF;
1825 -- Dump the in parameters in the log file
1826 -- if the debug level > 5
1827 -- If fnd_profile.value('CSD_DEBUG_LEVEL') > 5 then
1828 -- if (g_debug > 5) then
1829 -- csd_gen_utility_pvt.dump_actuals_rec
1830 -- ( p_CSD_ACTUAL_LINES_REC => px_CSD_ACTUAL_LINES_REC);
1831 -- end if;
1832
1833 IF ( Fnd_Log.Level_Statement >= G_debug_level) THEN
1834 FND_LOG.STRING(Fnd_Log.Level_Statement,l_mod_name,'Begin Check reqd parameter');
1835 END IF;
1836
1837 -- Check the required parameter
1838 CSD_PROCESS_UTIL.Check_Reqd_Param
1839 ( p_param_value => px_CSD_ACTUAL_LINES_REC.repair_actual_id,
1840 p_param_name => 'REPAIR_ACTUAL_LINE_ID',
1841 p_api_name => l_api_name);
1842
1843 IF ( Fnd_Log.Level_Statement >= G_debug_level) THEN
1844 FND_LOG.STRING(Fnd_Log.Level_Statement,l_mod_name,'End Check reqd parameter');
1845 END IF;
1846
1847 --
1848 -- API body
1849 --
1850 IF ( Fnd_Log.Level_Procedure >= G_debug_level) THEN
1851 FND_LOG.STRING(Fnd_Log.Level_Procedure,l_mod_name,'Call to CSD_REPAIR_ACTUAL_LINES_PKG.Lock_Row');
1852 END IF;
1853
1854 BEGIN
1855
1856 -- Invoke table handler(CSD_REPAIR_ACTUAL_LINES_PKG.Lock_Row)
1857 CSD_REPAIR_ACTUAL_LINES_PKG.Lock_Row(
1858 p_REPAIR_ACTUAL_LINE_ID => px_CSD_ACTUAL_LINES_REC.REPAIR_ACTUAL_LINE_ID
1859 ,p_OBJECT_VERSION_NUMBER => px_CSD_ACTUAL_LINES_REC.OBJECT_VERSION_NUMBER);
1860
1861 EXCEPTION
1862 WHEN OTHERS THEN
1863 IF ( Fnd_Log.Level_Exception >= G_debug_level) THEN
1864 FND_LOG.STRING(Fnd_Log.Level_Exception,l_mod_name,'Others exception in CSD_REPAIR_ACTUAL_LINES_PKG.Lock_Row Call :'||SubStr('Error '||TO_CHAR(SQLCODE)||': '||SQLERRM, 1,255));
1865 END IF;
1866 x_return_status := FND_API.G_RET_STS_ERROR;
1867 END;
1868
1869 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1870 RAISE FND_API.G_EXC_ERROR;
1871 END IF;
1872
1873 --
1874 -- End of API body
1875 --
1876
1877 -- Standard check of p_commit.
1878 IF FND_API.To_Boolean( p_commit ) THEN
1879 COMMIT WORK;
1880 END IF;
1881
1882 -- Standard call to get message count and IF count is get message info.
1883 FND_MSG_PUB.Count_And_Get
1884 (p_count => x_msg_count,
1885 p_data => x_msg_data );
1886 EXCEPTION
1887 WHEN FND_API.G_EXC_ERROR THEN
1888 IF ( Fnd_Log.Level_Exception >= G_debug_level) THEN
1889 FND_LOG.STRING(Fnd_Log.Level_Exception,l_mod_name,'In FND_API.G_EXC_ERROR exception');
1890 END IF;
1891 x_return_status := FND_API.G_RET_STS_ERROR ;
1892 ROLLBACK TO LOCK_REPAIR_ACTUAL_LINES;
1893 FND_MSG_PUB.Count_And_Get
1894 (p_count => x_msg_count,
1895 p_data => x_msg_data );
1896 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1897 IF ( Fnd_Log.Level_Exception >= G_debug_level) THEN
1898 FND_LOG.STRING(Fnd_Log.Level_Exception,l_mod_name,'In FND_API.G_EXC_UNEXPECTED_ERROR exception ');
1899 END IF;
1900 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
1901 ROLLBACK TO LOCK_REPAIR_ACTUAL_LINES;
1902 FND_MSG_PUB.Count_And_Get
1903 ( p_count => x_msg_count,
1904 p_data => x_msg_data );
1905 WHEN OTHERS THEN
1906 IF ( Fnd_Log.Level_Exception >= G_debug_level) THEN
1907 FND_LOG.STRING(Fnd_Log.Level_Exception,l_mod_name,'In OTHERS exception');
1908 FND_LOG.STRING(Fnd_Log.Level_Exception,l_mod_name,'Sql Err Msg :'||SQLERRM );
1909 END IF;
1910 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
1911 ROLLBACK TO LOCK_REPAIR_ACTUAL_LINES;
1912 IF FND_MSG_PUB.Check_Msg_Level
1913 (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1914 THEN
1915 FND_MSG_PUB.Add_Exc_Msg
1916 (G_PKG_NAME ,
1917 l_api_name );
1918 END IF;
1919 FND_MSG_PUB.Count_And_Get
1920 (p_count => x_msg_count,
1921 p_data => x_msg_data );
1922
1923 End LOCK_REPAIR_ACTUAL_LINES;
1924
1925 End CSD_REPAIR_ACTUAL_LINES_PVT;