DBA Data[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.6 2008/05/20 22:44:19 swai 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 px_Charges_Rec.INTERFACE_TO_OE_FLAG ='Y'then /*if interfacing the line then get the order header based on profile */
1143              select line_order_category_code
1144              into  l_line_order_category_code
1145              from cs_transaction_types_b
1146              where transaction_type_id = px_Charges_Rec.TRANSACTION_TYPE_ID;
1147 
1148             l_sr_add_to_order_flag := fnd_profile.value('CSD_ADD_TO_SO_WITHIN_SR');
1149             l_sr_add_to_order_flag := nvl(l_sr_Add_to_order_flag, 'N');
1150             l_ro_add_to_order_flag := fnd_profile.value('CSD_ADD_TO_SO_WITHIN_RO');
1151             l_ro_add_to_order_flag := nvl(l_ro_Add_to_order_flag, 'N');
1152 
1153             IF (l_sr_add_to_order_flag='Y') OR (l_ro_add_to_order_flag='Y') then
1154                IF l_line_order_category_code ='ORDER' then
1155                   begin
1156                     Select max(ced.order_header_id)
1157                     into  l_add_actual_to_id
1158                     from  cs_estimate_details ced,
1159                           oe_order_headers_all ooh,
1160                           oe_order_types_v oot
1161                     where
1162                       ced.estimate_detail_id in
1163                       (select estimate_detail_id
1164                        from  csd_product_transactions
1165                        where repair_line_id = px_CSD_ACTUAL_LINES_REC.REPAIR_LINE_ID
1166                        union
1167                        select estimate_detail_id
1168                        from csd_repair_actual_lines
1169                        where repair_actual_id=px_CSD_ACTUAL_LINES_REC.REPAIR_ACTUAL_ID)
1170                     and  ced.order_header_id is not null
1171                     and  ooh.open_flag = 'Y'
1172                     and  nvl(ooh.cancelled_flag,'N') = 'N'
1173                     and  ooh.header_id = ced.order_header_id
1174                     and  (ooh.cust_po_number = nvl(px_Charges_Rec.PURCHASE_ORDER_NUM,ooh.cust_po_number)
1175                              or ooh.cust_po_number is null)
1176                     and  ooh.sold_to_org_id  = px_Charges_Rec.bill_to_account_id  -- swai: bug 6962424
1177                     and  oot.order_type_id = ooh.order_type_id
1178                     and  oot.order_category_code in ('MIXED','ORDER')
1179                     and  ced.interface_to_oe_flag = 'Y';
1180                   exception
1181                   when no_data_found then
1182                     l_add_actual_to_id := null;
1183                   end;
1184                ELSIF l_line_order_category_code ='RETURN' then
1185                   begin
1186                     Select max(ced.order_header_id)
1187                     into  l_add_actual_to_id
1188                     from  cs_estimate_details ced,
1189                           oe_order_headers_all ooh,
1190                           oe_order_types_v oot
1191                     where
1192                     ced.estimate_detail_id in
1193                      (select estimate_detail_id
1194                       from  csd_product_transactions
1195                       where repair_line_id = px_CSD_ACTUAL_LINES_REC.REPAIR_LINE_ID
1196                       union
1197                       select estimate_detail_id
1198                       from csd_repair_actual_lines
1199                       where repair_actual_id=px_CSD_ACTUAL_LINES_REC.REPAIR_ACTUAL_ID)
1200                    and  ced.order_header_id is not null
1201                    and  ooh.open_flag = 'Y'
1202                    and  nvl(ooh.cancelled_flag,'N') = 'N'
1203                    and  ooh.header_id = ced.order_header_id
1204                    and  (ooh.cust_po_number = nvl(px_Charges_Rec.PURCHASE_ORDER_NUM,ooh.cust_po_number)
1205                         or ooh.cust_po_number is null)
1206                    and  ooh.sold_to_org_id  = px_Charges_Rec.bill_to_account_id  -- swai: bug 6962424
1207                    and  oot.order_type_id = ooh.order_type_id
1208                    and  oot.order_category_code in ('MIXED','RETURN')
1209                    and  ced.interface_to_oe_flag = 'Y';
1210                  exception
1211                  when no_data_found then
1212                    l_add_actual_to_id := null;
1213                  end;
1214                END IF; /*line order category*/
1215 
1216                If l_add_actual_to_id is not null then /*add actual line */
1217                  px_Charges_Rec.ADD_TO_ORDER_FLAG := 'Y';
1218                  px_Charges_Rec.ORDER_HEADER_ID := l_add_actual_to_id;
1219                elsif (l_sr_add_to_order_flag='N') then
1220                    /*RO profile is yes and SR profile is NO and we do not find SO under RO
1221                      in this case new SR should be created */
1222                   px_Charges_Rec.ADD_TO_ORDER_FLAG := 'F';
1223                   px_Charges_Rec.ORDER_HEADER_ID := NULL;
1224                end if;
1225 
1226             ELSE /*when both profile are N then create new order */
1227                  px_Charges_Rec.ADD_TO_ORDER_FLAG := 'F';
1228                  px_Charges_Rec.ORDER_HEADER_ID := NULL;
1229             END IF;
1230           end if; /*end if interface to oe flag */
1231           /*FP Fixed for bug#5117652 end*/
1232 
1233 
1234           -- Initialize API return status to SUCCESS
1235           x_return_status := FND_API.G_RET_STS_SUCCESS;
1236 
1237           -- --------------------------------------------------------------------
1238           -- Check the Repair_Actual_Lines_Rec.actual_source_code for validations
1239 
1240           -- Following validations will be done in the form itself
1241           -- Validate the repair actual line record for
1242           -- if the line is not interfaced to Order Management
1243 
1244           -- Validate the repair actual line record for
1245           -- if the line passes the security validations
1246 
1247           -- Validate the repair actual line record for
1248           -- if the line can have a override in charge value
1249           -- --------------------------------------------------------------------
1250            IF (px_CSD_ACTUAL_LINES_REC.actual_source_code in ('MANUAL', 'ESTIMATE') ) THEN
1251                -- no validations planned as of now
1252                null;
1253            ELSIF (px_CSD_ACTUAL_LINES_REC.actual_source_code in ('TASK', 'WIP') ) THEN
1254                null;
1255                -- -------------------------------------------------------------
1256                -- These Validations are enforced in the form itself
1257                -- Allow Pricing related updates but not product related updates
1258                -- product, quantity
1259                -- price list, uom, contract, unit price, after warranty cost
1260                -- -------------------------------------------------------------
1261 
1262                -- swai: 12.1 service costing uptake bug 6960295
1263                IF (px_CSD_ACTUAL_LINES_REC.actual_source_code = 'WIP' ) THEN
1264                    l_cs_cost_flag := 'N';
1265                END IF;
1266            END IF;
1267 
1268            --
1269            -- Api body
1270            --
1271            BEGIN
1272               -- Call table handler CSD_REPAIR_ESTIMATE_PVT.Process_Estimate_Lines in update mode
1273               -- which calls charges API to update the record in CS_ESTIMATE_DETAILS
1274               CSD_REPAIR_ESTIMATE_PVT.PROCESS_ESTIMATE_LINES
1275                  ( p_api_version           =>  1.0 ,
1276                    p_commit                =>  fnd_api.g_false,
1277                    p_init_msg_list         =>  fnd_api.g_true,
1278                    p_validation_level      =>  fnd_api.g_valid_level_full,
1279                    p_action                =>  'UPDATE',
1280                    -- swai: 12.1 service costing uptake bug 6960295
1281                    p_cs_cost_flag          =>  l_cs_cost_flag,
1282                    x_Charges_Rec           =>  px_charges_rec,
1283                    x_return_status         =>  x_return_status,
1284                    x_msg_count             =>  x_msg_count,
1285                    x_msg_data              =>  x_msg_data);
1286 
1287               -- The following check was added as a fix for bug 3378602. vkjain
1288               -- We do not want to continue with updating the Actual line if Charges
1289               -- API returned error.
1290               IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1291                  RAISE FND_API.G_EXC_ERROR;
1292               END IF;
1293 
1294            EXCEPTION
1295               -- The following exception was added as a fix for bug 3378602. vkjain
1296               WHEN FND_API.G_EXC_ERROR THEN
1297                    IF ( Fnd_Log.Level_Exception >= G_debug_level) THEN
1298                       FND_LOG.STRING(Fnd_Log.Level_Exception,l_mod_name,'Charges API returned error while calling UPDATE.');
1299                    END IF;
1300                    RAISE FND_API.G_EXC_ERROR;
1301               WHEN OTHERS THEN
1302                    IF ( Fnd_Log.Level_Exception >= G_debug_level) THEN
1303                       FND_LOG.STRING(Fnd_Log.Level_Exception,l_mod_name,'Others exception error :'||SubStr('Error '||TO_CHAR(SQLCODE)||': '||SQLERRM, 1,255));
1304                    END IF;
1305                    RAISE FND_API.G_EXC_ERROR;
1306            END;
1307 
1308            IF ( Fnd_Log.Level_Procedure >= G_debug_level) THEN
1309                 FND_LOG.STRING(Fnd_Log.Level_Procedure,l_mod_name,'Call to  CSD_REPAIR_ACTUAL_LINES_REC_PKG.Update_Row');
1310            END IF;
1311 
1312            BEGIN
1313               -- Invoke table handler(CSD_REPAIR_ACTUAL_LINES_PKG.Update_Row)
1314               CSD_REPAIR_ACTUAL_LINES_PKG.Update_Row(
1315                   p_REPAIR_ACTUAL_LINE_ID  => px_CSD_ACTUAL_LINES_REC.REPAIR_ACTUAL_LINE_ID
1316                  ,p_OBJECT_VERSION_NUMBER  => px_CSD_ACTUAL_LINES_REC.OBJECT_VERSION_NUMBER
1317                  ,p_ESTIMATE_DETAIL_ID     => px_CSD_ACTUAL_LINES_REC.ESTIMATE_DETAIL_ID
1318                  ,p_REPAIR_ACTUAL_ID       => px_CSD_ACTUAL_LINES_REC.REPAIR_ACTUAL_ID
1319                  ,p_REPAIR_LINE_ID         => px_CSD_ACTUAL_LINES_REC.REPAIR_LINE_ID
1320                  ,p_CREATED_BY             => FND_API.G_MISS_NUM
1321                  ,p_CREATION_DATE          => FND_API.G_MISS_DATE
1322                  ,p_LAST_UPDATED_BY        => FND_GLOBAL.USER_ID
1323                  ,p_LAST_UPDATE_DATE       => SYSDATE
1324                  ,p_LAST_UPDATE_LOGIN      => FND_GLOBAL.CONC_LOGIN_ID
1325                  ,p_ITEM_COST              => px_CSD_ACTUAL_LINES_REC.ITEM_COST
1326                  ,p_JUSTIFICATION_NOTES    => px_CSD_ACTUAL_LINES_REC.JUSTIFICATION_NOTES
1327                  ,p_RESOURCE_ID            => px_CSD_ACTUAL_LINES_REC.RESOURCE_ID
1328                  ,p_OVERRIDE_CHARGE_FLAG   => px_CSD_ACTUAL_LINES_REC.OVERRIDE_CHARGE_FLAG
1329                  ,p_ACTUAL_SOURCE_CODE     => px_CSD_ACTUAL_LINES_REC.ACTUAL_SOURCE_CODE
1330                  ,p_ACTUAL_SOURCE_ID       => px_CSD_ACTUAL_LINES_REC.ACTUAL_SOURCE_ID
1331                  ,p_WARRANTY_CLAIM_FLAG     => px_CSD_ACTUAL_LINES_REC.WARRANTY_CLAIM_FLAG
1332                  ,p_WARRANTY_NUMBER         => px_CSD_ACTUAL_LINES_REC.WARRANTY_NUMBER
1333                  ,p_WARRANTY_STATUS_CODE    => px_CSD_ACTUAL_LINES_REC.WARRANTY_STATUS_CODE
1334                  ,p_REPLACED_ITEM_ID        => px_CSD_ACTUAL_LINES_REC.REPLACED_ITEM_ID
1335                  ,p_ATTRIBUTE_CATEGORY     => px_CSD_ACTUAL_LINES_REC.ATTRIBUTE_CATEGORY
1336                  ,p_ATTRIBUTE1             => px_CSD_ACTUAL_LINES_REC.ATTRIBUTE1
1337                  ,p_ATTRIBUTE2             => px_CSD_ACTUAL_LINES_REC.ATTRIBUTE2
1338                  ,p_ATTRIBUTE3             => px_CSD_ACTUAL_LINES_REC.ATTRIBUTE3
1339                  ,p_ATTRIBUTE4             => px_CSD_ACTUAL_LINES_REC.ATTRIBUTE4
1340                  ,p_ATTRIBUTE5             => px_CSD_ACTUAL_LINES_REC.ATTRIBUTE5
1341                  ,p_ATTRIBUTE6             => px_CSD_ACTUAL_LINES_REC.ATTRIBUTE6
1342                  ,p_ATTRIBUTE7             => px_CSD_ACTUAL_LINES_REC.ATTRIBUTE7
1343                  ,p_ATTRIBUTE8             => px_CSD_ACTUAL_LINES_REC.ATTRIBUTE8
1344                  ,p_ATTRIBUTE9             => px_CSD_ACTUAL_LINES_REC.ATTRIBUTE9
1345                  ,p_ATTRIBUTE10            => px_CSD_ACTUAL_LINES_REC.ATTRIBUTE10
1346                  ,p_ATTRIBUTE11            => px_CSD_ACTUAL_LINES_REC.ATTRIBUTE11
1347                  ,p_ATTRIBUTE12            => px_CSD_ACTUAL_LINES_REC.ATTRIBUTE12
1348                  ,p_ATTRIBUTE13            => px_CSD_ACTUAL_LINES_REC.ATTRIBUTE13
1349                  ,p_ATTRIBUTE14            => px_CSD_ACTUAL_LINES_REC.ATTRIBUTE14
1350                  ,p_ATTRIBUTE15            => px_CSD_ACTUAL_LINES_REC.ATTRIBUTE15
1351                  ,p_LOCATOR_ID             => px_CSD_ACTUAL_LINES_REC.LOCATOR_ID
1352                  ,p_LOC_SEGMENT1           => px_CSD_ACTUAL_LINES_REC.LOC_SEGMENT1
1353                  ,p_LOC_SEGMENT2           => px_CSD_ACTUAL_LINES_REC.LOC_SEGMENT2
1354                  ,p_LOC_SEGMENT3           => px_CSD_ACTUAL_LINES_REC.LOC_SEGMENT3
1355                  ,p_LOC_SEGMENT4           => px_CSD_ACTUAL_LINES_REC.LOC_SEGMENT4
1356                  ,p_LOC_SEGMENT5           => px_CSD_ACTUAL_LINES_REC.LOC_SEGMENT5
1357                  ,p_LOC_SEGMENT6           => px_CSD_ACTUAL_LINES_REC.LOC_SEGMENT6
1358                  ,p_LOC_SEGMENT7           => px_CSD_ACTUAL_LINES_REC.LOC_SEGMENT7
1359                  ,p_LOC_SEGMENT8           => px_CSD_ACTUAL_LINES_REC.LOC_SEGMENT8
1360                  ,p_LOC_SEGMENT9           => px_CSD_ACTUAL_LINES_REC.LOC_SEGMENT9
1361                  ,p_LOC_SEGMENT10          => px_CSD_ACTUAL_LINES_REC.LOC_SEGMENT10
1362                  ,p_LOC_SEGMENT11          => px_CSD_ACTUAL_LINES_REC.LOC_SEGMENT11
1363                  ,p_LOC_SEGMENT12          => px_CSD_ACTUAL_LINES_REC.LOC_SEGMENT12
1364                  ,p_LOC_SEGMENT13          => px_CSD_ACTUAL_LINES_REC.LOC_SEGMENT13
1365                  ,p_LOC_SEGMENT14          => px_CSD_ACTUAL_LINES_REC.LOC_SEGMENT14
1366                  ,p_LOC_SEGMENT15          => px_CSD_ACTUAL_LINES_REC.LOC_SEGMENT15
1367                  ,p_LOC_SEGMENT16          => px_CSD_ACTUAL_LINES_REC.LOC_SEGMENT16
1368                  ,p_LOC_SEGMENT17          => px_CSD_ACTUAL_LINES_REC.LOC_SEGMENT17
1369                  ,p_LOC_SEGMENT18          => px_CSD_ACTUAL_LINES_REC.LOC_SEGMENT18
1370                  ,p_LOC_SEGMENT19          => px_CSD_ACTUAL_LINES_REC.LOC_SEGMENT19
1371                  ,p_LOC_SEGMENT20          => px_CSD_ACTUAL_LINES_REC.LOC_SEGMENT20);
1372 
1373 
1374            EXCEPTION
1375               WHEN OTHERS THEN
1376                    IF ( Fnd_Log.Level_Exception >= G_debug_level) THEN
1377                         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));
1378                    END IF;
1379                    RAISE FND_API.G_EXC_ERROR;
1380            END;
1381            --
1382            -- End of API body
1383            --
1384 
1385            -- Standard check of p_commit.
1386            IF FND_API.To_Boolean( p_commit ) THEN
1387                COMMIT WORK;
1388            END IF;
1389 
1390            -- Standard call to get message count and IF count is  get message info.
1391            FND_MSG_PUB.Count_And_Get
1392                 (p_count  =>  x_msg_count,
1393                  p_data   =>  x_msg_data );
1394 
1395     EXCEPTION
1396         WHEN FND_API.G_EXC_ERROR THEN
1397               IF ( Fnd_Log.Level_Exception >= G_debug_level) THEN
1398                   FND_LOG.STRING(Fnd_Log.Level_Exception,l_mod_name,'In FND_API.G_EXC_ERROR exception');
1399               END IF;
1400               x_return_status := FND_API.G_RET_STS_ERROR ;
1401               ROLLBACK TO UPDATE_REPAIR_ACTUAL_LINES;
1402               FND_MSG_PUB.Count_And_Get
1403                   (p_count  =>  x_msg_count,
1404                    p_data   =>  x_msg_data );
1405         WHEN FND_API.G_EXC_UNEXPECTED_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_UNEXPECTED_ERROR exception ');
1408               END IF;
1409               x_return_status := FND_API.G_RET_STS_UNEXP_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 OTHERS THEN
1415               IF ( Fnd_Log.Level_Exception >= G_debug_level) THEN
1416                   FND_LOG.STRING(Fnd_Log.Level_Exception,l_mod_name,'In OTHERS exception');
1417                   FND_LOG.STRING(Fnd_Log.Level_Exception,l_mod_name,'Sql Err Msg :'||SQLERRM );
1418               END IF;
1419               x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
1420               ROLLBACK TO UPDATE_REPAIR_ACTUAL_LINES;
1421                   IF  FND_MSG_PUB.Check_Msg_Level
1422                       (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1423                   THEN
1424                       FND_MSG_PUB.Add_Exc_Msg
1425                       (G_PKG_NAME ,
1426                        l_api_name  );
1427                   END IF;
1428                       FND_MSG_PUB.Count_And_Get
1429                       (p_count  =>  x_msg_count,
1430                        p_data   =>  x_msg_data );
1431 
1432     End UPDATE_REPAIR_ACTUAL_LINES;
1433 
1434 
1435 /*--------------------------------------------------------------------*/
1436 /* procedure name: DELETE_REPAIR_ACTUAL_LINES                         */
1437 /* description : procedure used to Delete Repair Actuals              */
1438 /*                                                                    */
1439 /*                                                                    */
1440 /*                                                                    */
1441 /* Called from : Depot Repair Actuals UI                              */
1442 /* Input Parm  :                                                      */
1443 /*   p_api_version       NUMBER    Req Api Version number             */
1444 /*   p_init_msg_list     VARCHAR2  Opt Initialize message stack       */
1445 /*   p_commit            VARCHAR2  Opt Commits in API                 */
1446 /*   p_validation_level  NUMBER    Opt validation steps               */
1447 /*   px_CSD_ACTUAL_LINES_REC REC   Req Actuals lines Record           */
1448 /*   px_Charges_Rec          REC   Req Charges line Record            */
1449 /* Output Parm :                                                      */
1450 /*   x_return_status     VARCHAR2      Return status after the call.  */
1451 /*   x_msg_count         NUMBER        Number of messages in stack    */
1452 /*   x_msg_data          VARCHAR2      Mesg. text if x_msg_count >= 1 */
1453 /* Change Hist :                                                      */
1454 /*   08/11/03  travikan  Initial Creation.                            */
1455 /*                                                                    */
1456 /*                                                                    */
1457 /*                                                                    */
1458 /*--------------------------------------------------------------------*/
1459 PROCEDURE DELETE_REPAIR_ACTUAL_LINES(
1460     P_Api_Version           IN            NUMBER,
1461     P_Commit                IN            VARCHAR2,
1462     P_Init_Msg_List         IN            VARCHAR2,
1463     p_validation_level      IN            NUMBER,
1464     px_CSD_ACTUAL_LINES_REC IN OUT NOCOPY CSD_ACTUAL_LINES_REC_TYPE,
1465     px_Charges_Rec          IN OUT NOCOPY CS_CHARGE_DETAILS_PUB.CHARGES_REC_TYPE,
1466     X_Return_Status         OUT    NOCOPY VARCHAR2,
1467     X_Msg_Count             OUT    NOCOPY NUMBER,
1468     X_Msg_Data              OUT    NOCOPY VARCHAR2
1469     )
1470 
1471  IS
1472        -- Variables used in FND Log
1473        l_stat_level   number   := FND_LOG.LEVEL_STATEMENT;
1474        l_proc_level   number   := FND_LOG.LEVEL_PROCEDURE;
1475        l_event_level  number   := FND_LOG.LEVEL_EVENT;
1476        l_excep_level  number   := FND_LOG.LEVEL_EXCEPTION;
1477        l_error_level  number   := FND_LOG.LEVEL_ERROR;
1478        l_unexp_level  number   := FND_LOG.LEVEL_UNEXPECTED;
1479        l_mod_name     varchar2(2000) := 'csd.plsql.csd_repair_actual_lines_pvt.delete_repair_actual_lines';
1480 
1481 
1482        l_api_name               CONSTANT VARCHAR2(30)   := 'DELETE_REPAIR_ACTUAL_LINES';
1483        l_api_version            CONSTANT NUMBER         := 1.0;
1484        l_msg_count              NUMBER;
1485        l_msg_data               VARCHAR2(100);
1486        l_msg_index              NUMBER;
1487 
1488        l_actual_line_id         NUMBER;
1489        l_obj_ver_num            NUMBER;
1490        l_act_line_count         NUMBER;
1491 
1492        -- swai: 12.1 service costing uptake bug 6960295
1493        -- Since actual lines imported from WIP cannot be deleted, it is not
1494        -- necessary to pass the cost flag.  But we will do it to be consistent
1495        -- with CREATE and UPDATE.  If we allow deletion of actual lines from
1496        -- WIP in the future, then cost flag should be set to 'N' for those
1497        -- lines.
1498        l_cs_cost_flag   VARCHAR2(1) := 'Y';
1499 
1500       CURSOR repair_actual_lines(p_actual_line_id IN NUMBER) IS
1501       SELECT
1502          a.repair_actual_line_id,
1503          a.object_version_number
1504       FROM csd_repair_actual_lines a,
1505            csd_repairs b
1506       WHERE a.repair_line_id = b.repair_line_id
1507         and a.repair_actual_line_id  = p_actual_line_id;
1508 
1509     BEGIN
1510 
1511           -- Standard Start of API savepoint
1512           SAVEPOINT DELETE_REPAIR_ACTUAL_LINES;
1513 
1514           -- Standard call to check for call compatibility.
1515           IF NOT FND_API.Compatible_API_Call ( l_api_version,
1516                                                p_api_version,
1517                                                l_api_name,
1518                                                G_PKG_NAME)
1519           THEN
1520               RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1521           END IF;
1522 
1523            -- Initialize message list if p_init_msg_list is set to TRUE.
1524            IF FND_API.to_Boolean( p_init_msg_list ) THEN
1525                FND_MSG_PUB.initialize;
1526            END IF;
1527 
1528            -- Initialize API return status to success
1529            x_return_status := FND_API.G_RET_STS_SUCCESS;
1530 
1531            -- Api body starts
1532            IF ( Fnd_Log.Level_Statement >= G_debug_level) THEN
1533                 FND_LOG.STRING(Fnd_Log.Level_Statement,l_mod_name,'At the Beginning of delete_repair_actual_lines');
1534            END IF;
1535 
1536            -- Dump the in parameters in the log file
1537            -- if the debug level > 5
1538            -- If fnd_profile.value('CSD_DEBUG_LEVEL') > 5 then
1539            /* TBD
1540     	   if (g_debug > 5) then
1541               csd_gen_utility_pvt.dump_actuals_rec
1542                        ( p_CSD_ACTUAL_LINES_REC => px_CSD_ACTUAL_LINES_REC);
1543            end if;
1544            */
1545 
1546            IF ( Fnd_Log.Level_Statement >= G_debug_level) THEN
1547                 FND_LOG.STRING(Fnd_Log.Level_Statement,l_mod_name,'Begin Check reqd parametes');
1548            END IF;
1549 
1550            -- Check the required parameter
1551            CSD_PROCESS_UTIL.Check_Reqd_Param
1552            ( p_param_value    => px_CSD_ACTUAL_LINES_REC.repair_actual_line_id,
1553              p_param_name     => 'REPAIR_ACTUAL_LINE_ID',
1554              p_api_name       => l_api_name);
1555 
1556            IF ( Fnd_Log.Level_Statement >= G_debug_level) THEN
1557                 FND_LOG.STRING(Fnd_Log.Level_Statement,l_mod_name,'End Check reqd parametes');
1558                 FND_LOG.STRING(Fnd_Log.Level_Statement,l_mod_name,'Begin Validate Repair Line id');
1559            END IF;
1560 
1561            -- Validate the repair line ID
1562            IF NOT( CSD_PROCESS_UTIL.Validate_rep_line_id
1563                            ( p_repair_line_id  => px_CSD_ACTUAL_LINES_REC.repair_line_id )) THEN
1564                RAISE FND_API.G_EXC_ERROR;
1565            END IF;
1566 
1567            IF ( Fnd_Log.Level_Statement >= G_debug_level) THEN
1568                 FND_LOG.STRING(Fnd_Log.Level_Statement,l_mod_name,'End Validate Repair Line id');
1569            END IF;
1570 
1571           --
1572           -- API body
1573           --
1574 
1575           -- Actual deletes allowed only for Actual lines created manually
1576           -- or for the ones copied from the estimates
1577           -- Check the actual_source_code in Repair_Actual_Lines_Rec
1578 
1579           IF (px_CSD_ACTUAL_LINES_REC.actual_source_code in ('MANUAL', 'ESTIMATE')) then
1580 
1581               -- Validate the repair actual line id against csd_repair_actual_lines
1582               -- If it is interfaced then raise FND_API.G_EXC_ERROR
1583               IF NVL(px_CSD_ACTUAL_LINES_REC.repair_actual_line_id,FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM THEN
1584 
1585                  OPEN  repair_actual_lines(px_CSD_ACTUAL_LINES_REC.repair_actual_line_id);
1586                  FETCH repair_actual_lines
1587                   INTO l_actual_line_id,
1588                        l_obj_ver_num;
1589 
1590                  IF repair_actual_lines%NOTFOUND THEN
1591                     FND_MESSAGE.SET_NAME('CSD','CSD_API_ACTUAL_LINES_MISSING');
1592                     FND_MESSAGE.SET_TOKEN('REPAIR_ACTUAL_LINE_ID',l_actual_line_id);
1593                     FND_MSG_PUB.ADD;
1594                     IF (Fnd_Log.Level_Error >= Fnd_Log.G_Current_Runtime_Level) THEN
1595                       FND_LOG.MESSAGE(Fnd_Log.Level_Error,l_mod_name, FALSE);
1596                     END IF;
1597                     RAISE FND_API.G_EXC_ERROR;
1598                  END IF;
1599 
1600                 IF repair_actual_lines%ISOPEN THEN
1601                    CLOSE repair_actual_lines;
1602                 END IF;
1603 
1604               END IF;
1605 
1606               IF ( Fnd_Log.Level_Statement >= G_debug_level) THEN
1607                    FND_LOG.STRING(Fnd_Log.Level_Statement,l_mod_name,'Validate Object Version Number');
1608               END IF;
1609 
1610               IF NVL(px_CSD_ACTUAL_LINES_REC.object_version_number,FND_API.G_MISS_NUM) <>l_obj_ver_num  THEN
1611                  IF ( Fnd_Log.Level_Statement >= G_debug_level) THEN
1612                       FND_LOG.STRING(Fnd_Log.Level_Statement,l_mod_name,'Object Version Number does not match'
1613 			       || ' for the Repair Actual Line ID = ' || l_actual_line_id);
1614                  END IF;
1615 
1616                  -- Modified the message name for bugfix 3281321. vkjain.
1617                  -- FND_MESSAGE.SET_NAME('CSD','CSD_OBJ_VER_MISMATCH');
1618                  FND_MESSAGE.SET_NAME('CSD','CSD_ACT_LIN_OBJ_VER_MISMATCH');
1619                  -- FND_MESSAGE.SET_TOKEN('REPAIR_ACTUAL_LINE_ID',l_actual_line_id);
1620                  FND_MSG_PUB.ADD;
1621                  IF (Fnd_Log.Level_Error >= Fnd_Log.G_Current_Runtime_Level) THEN
1622                    FND_LOG.MESSAGE(Fnd_Log.Level_Error,l_mod_name, FALSE);
1623                  END IF;
1624                  RAISE FND_API.G_EXC_ERROR;
1625               END IF;
1626 
1627               IF (px_Charges_Rec.order_header_id is not null) THEN
1628                  IF ( Fnd_Log.Level_Statement >= G_debug_level) THEN
1629                       FND_LOG.STRING(Fnd_Log.Level_Statement,l_mod_name,'Repair Actual Line is Interfaced to Order Management');
1630                  END IF;
1631 
1632                  FND_MESSAGE.SET_NAME('CSD','CSD_ACT_LIN_OM_IFACE');
1633                  FND_MESSAGE.SET_TOKEN('REPAIR_ACTUAL_LINE_ID',l_actual_line_id);
1634                  FND_MSG_PUB.ADD;
1635                  IF (Fnd_Log.Level_Error >= Fnd_Log.G_Current_Runtime_Level) THEN
1636                    FND_LOG.MESSAGE(Fnd_Log.Level_Error,l_mod_name, FALSE);
1637                  END IF;
1638                  RAISE FND_API.G_EXC_ERROR;
1639               END IF;
1640 
1641               -- Call table handler CSD_REPAIR_ESTIMATE_PVT.Process_Estimate_Lines to
1642               -- delete the record in CS_ESTIMATE_DETAILS
1643               IF ( Fnd_Log.Level_Procedure >= G_debug_level) THEN
1644                    FND_LOG.STRING(Fnd_Log.Level_Procedure,l_mod_name,'Call process_estimate_lines to delete charge line');
1645               END IF;
1646 
1647               CSD_REPAIR_ESTIMATE_PVT.PROCESS_ESTIMATE_LINES
1648                  ( p_api_version           =>  1.0 ,
1649                    p_commit                =>  fnd_api.g_false,
1650                    p_init_msg_list         =>  fnd_api.g_true,
1651                    p_validation_level      =>  fnd_api.g_valid_level_full,
1652                    p_action                =>  'DELETE',
1653                    -- swai: 12.1 service costing uptake bug 6960295
1654                    p_cs_cost_flag          =>  l_cs_cost_flag,
1655                    x_Charges_Rec           =>  px_charges_rec,
1656                    x_return_status         =>  x_return_status,
1657                    x_msg_count             =>  x_msg_count,
1658                    x_msg_data              =>  x_msg_data);
1659 
1660             IF NOT(x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
1661               RAISE FND_API.G_EXC_ERROR;
1662             END IF;
1663 
1664             IF ( Fnd_Log.Level_Procedure >= G_debug_level) THEN
1665                  FND_LOG.STRING(Fnd_Log.Level_Procedure,l_mod_name,'Call to  CSD_REPAIR_ACTUAL_LINES_PKG.Delete_Row');
1666             END IF;
1667 
1668             BEGIN
1669 
1670             -- Invoke table handler(CSD_REPAIR_ACTUAL_LINES_PKG.Delete_Row)
1671             CSD_REPAIR_ACTUAL_LINES_PKG.Delete_Row(
1672                 p_REPAIR_ACTUAL_LINE_ID  => px_CSD_ACTUAL_LINES_REC.REPAIR_ACTUAL_LINE_ID
1673                ,p_OBJECT_VERSION_NUMBER  => px_CSD_ACTUAL_LINES_REC.OBJECT_VERSION_NUMBER);
1674 
1675             EXCEPTION
1676                 WHEN OTHERS THEN
1677                    IF ( Fnd_Log.Level_Exception >= G_debug_level) THEN
1678                        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));
1679                    END IF;
1680                    x_return_status := FND_API.G_RET_STS_ERROR;
1681             END;
1682 
1683               IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1684                   RAISE FND_API.G_EXC_ERROR;
1685               END IF;
1686 
1687           END IF;
1688           --
1689           -- End of API body
1690           --
1691 
1692           -- Standard check of p_commit.
1693           IF FND_API.To_Boolean( p_commit ) THEN
1694                COMMIT WORK;
1695           END IF;
1696 
1697           -- Standard call to get message count and IF count is  get message info.
1698           FND_MSG_PUB.Count_And_Get
1699                (p_count  =>  x_msg_count,
1700                 p_data   =>  x_msg_data );
1701     EXCEPTION
1702         WHEN FND_API.G_EXC_ERROR THEN
1703               IF ( Fnd_Log.Level_Exception >= G_debug_level) THEN
1704                   FND_LOG.STRING(Fnd_Log.Level_Exception,l_mod_name,'In FND_API.G_EXC_ERROR exception');
1705               END IF;
1706               x_return_status := FND_API.G_RET_STS_ERROR ;
1707               ROLLBACK TO DELETE_REPAIR_ACTUAL_LINES;
1708               FND_MSG_PUB.Count_And_Get
1709                   (p_count  =>  x_msg_count,
1710                    p_data   =>  x_msg_data );
1711         WHEN FND_API.G_EXC_UNEXPECTED_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_UNEXPECTED_ERROR exception ');
1714               END IF;
1715               x_return_status := FND_API.G_RET_STS_UNEXP_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 OTHERS THEN
1721               IF ( Fnd_Log.Level_Exception >= G_debug_level) THEN
1722                   FND_LOG.STRING(Fnd_Log.Level_Exception,l_mod_name,'In OTHERS exception');
1723                   FND_LOG.STRING(Fnd_Log.Level_Exception,l_mod_name,'Sql Err Msg :'||SQLERRM );
1724               END IF;
1725               x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
1726               ROLLBACK TO DELETE_REPAIR_ACTUAL_LINES;
1727                   IF  FND_MSG_PUB.Check_Msg_Level
1728                       (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1729                   THEN
1730                       FND_MSG_PUB.Add_Exc_Msg
1731                       (G_PKG_NAME ,
1732                        l_api_name  );
1733                   END IF;
1734                       FND_MSG_PUB.Count_And_Get
1735                       (p_count  =>  x_msg_count,
1736                        p_data   =>  x_msg_data );
1737 
1738 End DELETE_REPAIR_ACTUAL_LINES;
1739 
1740 
1741 /*--------------------------------------------------------------------*/
1742 /* procedure name: LOCK_REPAIR_ACTUAL_LINES                           */
1743 /* description : procedure used to Delete Repair Actuals              */
1744 /*                                                                    */
1745 /*                                                                    */
1746 /*                                                                    */
1747 /* Called from : Depot Repair Actuals UI                              */
1748 /* Input Parm  :                                                      */
1749 /*   p_api_version       NUMBER    Req Api Version number             */
1750 /*   p_init_msg_list     VARCHAR2  Opt Initialize message stack       */
1751 /*   p_commit            VARCHAR2  Opt Commits in API                 */
1752 /*   p_validation_level  NUMBER    Opt validation steps               */
1753 /*   px_CSD_ACTUAL_LINES_REC REC   Req Actuals lines Record           */
1754 /* Output Parm :                                                      */
1755 /*   x_return_status     VARCHAR2      Return status after the call.  */
1756 /*   x_msg_count         NUMBER        Number of messages in stack    */
1757 /*   x_msg_data          VARCHAR2      Mesg. text if x_msg_count >= 1 */
1758 /* Change Hist :                                                      */
1759 /*   08/11/03  travikan  Initial Creation.                            */
1760 /*                                                                    */
1761 /*                                                                    */
1762 /*                                                                    */
1763 /*--------------------------------------------------------------------*/
1764 PROCEDURE LOCK_REPAIR_ACTUAL_LINES(
1765     P_Api_Version           IN            NUMBER,
1766     P_Commit                IN            VARCHAR2,
1767     P_Init_Msg_List         IN            VARCHAR2,
1768     p_validation_level      IN            NUMBER,
1769     px_CSD_ACTUAL_LINES_REC IN OUT NOCOPY CSD_ACTUAL_LINES_REC_TYPE,
1770     X_Return_Status         OUT    NOCOPY VARCHAR2,
1771     X_Msg_Count             OUT    NOCOPY NUMBER,
1772     X_Msg_Data              OUT    NOCOPY VARCHAR2
1773     )
1774 
1775  IS
1776      -- Variables used in FND Log
1777      l_stat_level   number   := FND_LOG.LEVEL_STATEMENT;
1778      l_proc_level   number   := FND_LOG.LEVEL_PROCEDURE;
1779      l_event_level  number   := FND_LOG.LEVEL_EVENT;
1780      l_excep_level  number   := FND_LOG.LEVEL_EXCEPTION;
1781      l_error_level  number   := FND_LOG.LEVEL_ERROR;
1782      l_unexp_level  number   := FND_LOG.LEVEL_UNEXPECTED;
1783      l_mod_name     varchar2(2000) := 'csd.plsql.csd_repair_actual_lines_pvt.lock_repair_actual_lines';
1784 
1785      l_api_name               CONSTANT VARCHAR2(30)   := 'LOCK_REPAIR_ACTUAL_LINES';
1786      l_api_version            CONSTANT NUMBER         := 1.0;
1787      l_msg_count              NUMBER;
1788      l_msg_data               VARCHAR2(100);
1789      l_msg_index              NUMBER;
1790 
1791     BEGIN
1792           -- Standard Start of API savepoint
1793           SAVEPOINT LOCK_REPAIR_ACTUAL_LINES;
1794 
1795           -- Standard call to check for call compatibility.
1796           IF NOT FND_API.Compatible_API_Call ( l_api_version,
1797                                                p_api_version,
1798                                                l_api_name,
1799                                                G_PKG_NAME)
1800           THEN
1801               RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1802           END IF;
1803 
1804            -- Initialize message list if p_init_msg_list is set to TRUE.
1805            IF FND_API.to_Boolean( p_init_msg_list ) THEN
1806                FND_MSG_PUB.initialize;
1807            END IF;
1808 
1809            -- Initialize API return status to success
1810            x_return_status := FND_API.G_RET_STS_SUCCESS;
1811 
1812            -- Api body starts
1813            IF ( Fnd_Log.Level_Statement >= G_debug_level) THEN
1814                 FND_LOG.STRING(Fnd_Log.Level_Statement,l_mod_name,'At the Beginning of lock_repair_actual_lines');
1815            END IF;
1816            -- Dump the in parameters in the log file
1817            -- if the debug level > 5
1818            -- If fnd_profile.value('CSD_DEBUG_LEVEL') > 5 then
1819 --            if (g_debug > 5) then
1820 --               csd_gen_utility_pvt.dump_actuals_rec
1821 --                        ( p_CSD_ACTUAL_LINES_REC => px_CSD_ACTUAL_LINES_REC);
1822 --            end if;
1823 
1824            IF ( Fnd_Log.Level_Statement >= G_debug_level) THEN
1825                 FND_LOG.STRING(Fnd_Log.Level_Statement,l_mod_name,'Begin Check reqd parameter');
1826            END IF;
1827 
1828            -- Check the required parameter
1829            CSD_PROCESS_UTIL.Check_Reqd_Param
1830            ( p_param_value    => px_CSD_ACTUAL_LINES_REC.repair_actual_id,
1831              p_param_name     => 'REPAIR_ACTUAL_LINE_ID',
1832              p_api_name       => l_api_name);
1833 
1834            IF ( Fnd_Log.Level_Statement >= G_debug_level) THEN
1835                 FND_LOG.STRING(Fnd_Log.Level_Statement,l_mod_name,'End Check reqd parameter');
1836            END IF;
1837 
1838           --
1839           -- API body
1840           --
1841           IF ( Fnd_Log.Level_Procedure >= G_debug_level) THEN
1842                 FND_LOG.STRING(Fnd_Log.Level_Procedure,l_mod_name,'Call to CSD_REPAIR_ACTUAL_LINES_PKG.Lock_Row');
1843           END IF;
1844 
1845           BEGIN
1846 
1847           -- Invoke table handler(CSD_REPAIR_ACTUAL_LINES_PKG.Lock_Row)
1848           CSD_REPAIR_ACTUAL_LINES_PKG.Lock_Row(
1849               p_REPAIR_ACTUAL_LINE_ID  => px_CSD_ACTUAL_LINES_REC.REPAIR_ACTUAL_LINE_ID
1850              ,p_OBJECT_VERSION_NUMBER  => px_CSD_ACTUAL_LINES_REC.OBJECT_VERSION_NUMBER);
1851 
1852           EXCEPTION
1853               WHEN OTHERS THEN
1854                   IF ( Fnd_Log.Level_Exception >= G_debug_level) THEN
1855                       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));
1856                   END IF;
1857                    x_return_status := FND_API.G_RET_STS_ERROR;
1858           END;
1859 
1860               IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1861                   RAISE FND_API.G_EXC_ERROR;
1862               END IF;
1863 
1864           --
1865           -- End of API body
1866           --
1867 
1868           -- Standard check of p_commit.
1869           IF FND_API.To_Boolean( p_commit ) THEN
1870                COMMIT WORK;
1871           END IF;
1872 
1873           -- Standard call to get message count and IF count is  get message info.
1874           FND_MSG_PUB.Count_And_Get
1875                (p_count  =>  x_msg_count,
1876                 p_data   =>  x_msg_data );
1877     EXCEPTION
1878         WHEN FND_API.G_EXC_ERROR THEN
1879               IF ( Fnd_Log.Level_Exception >= G_debug_level) THEN
1880                   FND_LOG.STRING(Fnd_Log.Level_Exception,l_mod_name,'In FND_API.G_EXC_ERROR exception');
1881               END IF;
1882               x_return_status := FND_API.G_RET_STS_ERROR ;
1883               ROLLBACK TO LOCK_REPAIR_ACTUAL_LINES;
1884               FND_MSG_PUB.Count_And_Get
1885                   (p_count  =>  x_msg_count,
1886                    p_data   =>  x_msg_data );
1887         WHEN FND_API.G_EXC_UNEXPECTED_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_UNEXPECTED_ERROR exception ');
1890               END IF;
1891               x_return_status := FND_API.G_RET_STS_UNEXP_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 OTHERS THEN
1897               IF ( Fnd_Log.Level_Exception >= G_debug_level) THEN
1898                   FND_LOG.STRING(Fnd_Log.Level_Exception,l_mod_name,'In OTHERS exception');
1899                   FND_LOG.STRING(Fnd_Log.Level_Exception,l_mod_name,'Sql Err Msg :'||SQLERRM );
1900               END IF;
1901               x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
1902               ROLLBACK TO LOCK_REPAIR_ACTUAL_LINES;
1903                   IF  FND_MSG_PUB.Check_Msg_Level
1904                       (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1905                   THEN
1906                       FND_MSG_PUB.Add_Exc_Msg
1907                       (G_PKG_NAME ,
1908                        l_api_name  );
1909                   END IF;
1910                       FND_MSG_PUB.Count_And_Get
1911                       (p_count  =>  x_msg_count,
1912                        p_data   =>  x_msg_data );
1913 
1914     End LOCK_REPAIR_ACTUAL_LINES;
1915 
1916 End CSD_REPAIR_ACTUAL_LINES_PVT;