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