DBA Data[Home] [Help]

PACKAGE BODY: APPS.RCV_RMA_HEADERS

Source


1 PACKAGE BODY rcv_rma_headers
2 /* $Header: RCVRMAHB.pls 120.3 2006/04/20 16:27:30 pjiang noship $ */
3 AS
4    -- Read the profile option that enables/disables the debug log
5    g_asn_debug VARCHAR2(1) := NVL(fnd_profile.VALUE('RCV_DEBUG_MODE'), 'N');
6 
7 /*===========================================================================+
8  |                                                                           |
9  | PROCEDURE NAME:          derive_rma_header()                              |
10  |                                                                           |
11  +===========================================================================*/
12    PROCEDURE derive_rma_header(
13       p_header_record IN OUT NOCOPY rcv_roi_preprocessor.header_rec_type
14    ) IS
15    BEGIN
16       IF (g_asn_debug = 'Y') THEN
17          asn_debug.put_line('In derive_rma_header');
18       END IF;
19 
20       rcv_roi_header_common.derive_ship_to_org_info(p_header_record);
21       rcv_roi_header_common.derive_from_org_info(p_header_record);
22       rcv_roi_header_common.derive_location_info(p_header_record);
23       rcv_roi_header_common.derive_payment_terms_info(p_header_record);
24       rcv_roi_header_common.derive_receiver_info(p_header_record);
25       derive_customer_info(p_header_record);
26       derive_customer_site_info(p_header_record);
27 
28       IF (g_asn_debug = 'Y') THEN
29          IF (p_header_record.error_record.error_status NOT IN('S', 'W')) THEN
30             asn_debug.put_line('Error in derive_rma_header');
31             asn_debug.put_line('status = ' || p_header_record.error_record.error_status);
32             asn_debug.put_line('message = ' || p_header_record.error_record.error_message);
33          END IF;
34 
35          asn_debug.put_line('Done derive_rma_header');
36       END IF;
37    END derive_rma_header;
38 
39 /*===========================================================================+
40  |                                                                           |
41  | PROCEDURE NAME:          default_rma_header()                             |
42  |                                                                           |
43  +===========================================================================*/
44    PROCEDURE default_rma_header(
45       p_header_record IN OUT NOCOPY rcv_roi_preprocessor.header_rec_type
46    ) IS
47    BEGIN
48       IF (g_asn_debug = 'Y') THEN
49          asn_debug.put_line('In default_rma_header');
50       END IF;
51 
52       default_customer_info(p_header_record);
53       default_customer_site_info(p_header_record);
54       default_trx_info(p_header_record);
55       rcv_roi_header_common.default_last_update_info(p_header_record);
56       rcv_roi_header_common.default_creation_info(p_header_record);
57       rcv_roi_header_common.default_asn_type(p_header_record);
58       default_shipment_num(p_header_record);
59       rcv_roi_header_common.default_shipment_header_id(p_header_record);
60       rcv_roi_header_common.default_receipt_info(p_header_record);
61       rcv_roi_header_common.default_ship_to_location_info(p_header_record);
62 
63       IF (g_asn_debug = 'Y') THEN
64          IF (p_header_record.error_record.error_status NOT IN('S', 'W')) THEN
65             asn_debug.put_line('Error in default_rma_header');
66             asn_debug.put_line('status = ' || p_header_record.error_record.error_status);
67             asn_debug.put_line('message = ' || p_header_record.error_record.error_message);
68          END IF;
69 
70          asn_debug.put_line('Out of default_rma_header');
71       END IF;
72    END default_rma_header;
73 
74 /*===========================================================================+
75  |                                                                           |
76  | PROCEDURE NAME:          validate_rma_header()                            |
77  |                                                                           |
78  +===========================================================================*/
79    PROCEDURE validate_rma_header(
80       p_header_record IN OUT NOCOPY rcv_roi_preprocessor.header_rec_type
81    ) IS
82    BEGIN
83       IF (g_asn_debug = 'Y') THEN
84          asn_debug.put_line('In validate_rma_header');
85       END IF;
86 
87       validate_receipt_source_code(p_header_record);
88       validate_customer_info(p_header_record);
89       validate_customer_site_info(p_header_record);
90       rcv_roi_header_common.validate_trx_type(p_header_record);
91       rcv_roi_header_common.validate_expected_receipt_date(p_header_record);
92       rcv_roi_header_common.validate_receipt_num(p_header_record);
93       rcv_roi_header_common.validate_ship_to_org_info(p_header_record);
94       rcv_roi_header_common.validate_from_org_info(p_header_record);
95       rcv_roi_header_common.validate_location_info(p_header_record);
96       rcv_roi_header_common.validate_payment_terms_info(p_header_record);
97       rcv_roi_header_common.validate_receiver_info(p_header_record);
98       rcv_roi_header_common.validate_freight_carrier_info(p_header_record);
99 
100       IF (g_asn_debug = 'Y') THEN
101          IF (p_header_record.error_record.error_status NOT IN('S', 'W')) THEN
102             asn_debug.put_line('Error in validate_rma_header');
103             asn_debug.put_line('status = ' || p_header_record.error_record.error_status);
104             asn_debug.put_line('message = ' || p_header_record.error_record.error_message);
105          END IF;
106 
107          asn_debug.put_line('Out of validate_rma_header');
108       END IF;
109    END validate_rma_header;
110 
111    PROCEDURE insert_rma_header(
112       p_header_record IN OUT NOCOPY rcv_roi_preprocessor.header_rec_type
113    ) IS
114       x_sysdate         DATE           := SYSDATE;
115    BEGIN
116       -- Set asn_type to null if asn_type is STD as the UI gets confused
117 
118       IF NVL(p_header_record.header_record.asn_type, 'STD') = 'STD' THEN
119          p_header_record.header_record.asn_type  := NULL;
120       END IF;
121 
122       /* Bug - 1086088 - Ship_to_org_id needs to get populated in the
123       *  RCV_SHIPMENT_HEADERS table      */
124       INSERT INTO rcv_shipment_headers
125                   (shipment_header_id,
126                    last_update_date,
127                    last_updated_by,
128                    creation_date,
129                    created_by,
130                    last_update_login,
131                    receipt_source_code,
132                    vendor_id,
133                    vendor_site_id,
134                    organization_id,
135                    shipment_num,
136                    receipt_num,
137                    ship_to_location_id,
138                    ship_to_org_id,
139                    bill_of_lading,
140                    packing_slip,
141                    shipped_date,
142                    freight_carrier_code,
143                    expected_receipt_date,
144                    employee_id,
145                    num_of_containers,
146                    waybill_airbill_num,
147                    comments,
148                    attribute_category,
149                    attribute1,
150                    attribute2,
151                    attribute3,
152                    attribute4,
153                    attribute5,
154                    attribute6,
155                    attribute7,
156                    attribute8,
157                    attribute9,
158                    attribute10,
159                    attribute11,
160                    attribute12,
161                    attribute13,
162                    attribute14,
163                    attribute15,
164                    ussgl_transaction_code,
165                    government_context,
166                    request_id,
167                    program_application_id,
168                    program_id,
169                    program_update_date,
170                    asn_type,
171                    edi_control_num,
172                    notice_creation_date,
173                    gross_weight,
174                    gross_weight_uom_code,
175                    net_weight,
176                    net_weight_uom_code,
177                    tar_weight,
178                    tar_weight_uom_code,
179                    packaging_code,
180                    carrier_method,
181                    carrier_equipment,
182                    carrier_equipment_num,
183                    carrier_equipment_alpha,
184                    special_handling_code,
185                    hazard_code,
186                    hazard_class,
187                    hazard_description,
188                    freight_terms,
189                    freight_bill_number,
190                    invoice_date,
191                    invoice_amount,
192                    tax_name,
193                    tax_amount,
194                    freight_amount,
195                    invoice_status_code,
196                    asn_status,
197                    currency_code,
198                    conversion_rate_type,
199                    conversion_rate,
200                    conversion_date,
201                    payment_terms_id,
202                    invoice_num,
203                    customer_id,
204                    customer_site_id,
205                    ship_from_location_id
206                   )
207            VALUES (p_header_record.header_record.receipt_header_id,
208                    p_header_record.header_record.last_update_date,
209                    p_header_record.header_record.last_updated_by,
210                    p_header_record.header_record.creation_date,
211                    p_header_record.header_record.created_by,
212                    p_header_record.header_record.last_update_login,
213                    p_header_record.header_record.receipt_source_code,
214                    p_header_record.header_record.vendor_id,
215                    p_header_record.header_record.vendor_site_id,
216                    p_header_record.header_record.ship_to_organization_id,
217                    p_header_record.header_record.shipment_num,
218                    p_header_record.header_record.receipt_num,
219                    p_header_record.header_record.location_id,
220                    p_header_record.header_record.ship_to_organization_id,
221                    p_header_record.header_record.bill_of_lading,
222                    p_header_record.header_record.packing_slip,
223                    p_header_record.header_record.shipped_date,
224                    p_header_record.header_record.freight_carrier_code,
225                    p_header_record.header_record.expected_receipt_date,
226                    p_header_record.header_record.employee_id,
227                    p_header_record.header_record.num_of_containers,
228                    p_header_record.header_record.waybill_airbill_num,
229                    p_header_record.header_record.comments,
230                    p_header_record.header_record.attribute_category,
231                    p_header_record.header_record.attribute1,
232                    p_header_record.header_record.attribute2,
233                    p_header_record.header_record.attribute3,
234                    p_header_record.header_record.attribute4,
235                    p_header_record.header_record.attribute5,
236                    p_header_record.header_record.attribute6,
237                    p_header_record.header_record.attribute7,
238                    p_header_record.header_record.attribute8,
239                    p_header_record.header_record.attribute9,
240                    p_header_record.header_record.attribute10,
241                    p_header_record.header_record.attribute11,
242                    p_header_record.header_record.attribute12,
243                    p_header_record.header_record.attribute13,
244                    p_header_record.header_record.attribute14,
245                    p_header_record.header_record.attribute15,
246                    p_header_record.header_record.usggl_transaction_code,
247                    NULL, -- p_header_record.header_record.Government_Context
248                    fnd_global.conc_request_id,
249                    fnd_global.prog_appl_id,
250                    fnd_global.conc_program_id,
251                    x_sysdate,
252                    p_header_record.header_record.asn_type,
253                    p_header_record.header_record.edi_control_num,
254                    p_header_record.header_record.notice_creation_date,
255                    p_header_record.header_record.gross_weight,
256                    p_header_record.header_record.gross_weight_uom_code,
257                    p_header_record.header_record.net_weight,
258                    p_header_record.header_record.net_weight_uom_code,
259                    p_header_record.header_record.tar_weight,
260                    p_header_record.header_record.tar_weight_uom_code,
261                    p_header_record.header_record.packaging_code,
262                    p_header_record.header_record.carrier_method,
263                    p_header_record.header_record.carrier_equipment,
264                    NULL, -- p_header_record.header_record.Carrier_Equipment_Num
265                    NULL, -- p_header_record.header_record.Carrier_Equipment_Alpha
266                    p_header_record.header_record.special_handling_code,
267                    p_header_record.header_record.hazard_code,
268                    p_header_record.header_record.hazard_class,
269                    p_header_record.header_record.hazard_description,
270                    p_header_record.header_record.freight_terms,
271                    p_header_record.header_record.freight_bill_number,
272                    p_header_record.header_record.invoice_date,
273                    p_header_record.header_record.total_invoice_amount,
274                    p_header_record.header_record.tax_name,
275                    p_header_record.header_record.tax_amount,
276                    p_header_record.header_record.freight_amount,
277                    p_header_record.header_record.invoice_status_code,
278                    'NEW_SHIP', -- p_header_record.header_record.Asn_Status
279                    p_header_record.header_record.currency_code,
280                    p_header_record.header_record.conversion_rate_type,
281                    p_header_record.header_record.conversion_rate,
282                    p_header_record.header_record.conversion_rate_date,
283                    p_header_record.header_record.payment_terms_id,
284                    p_header_record.header_record.invoice_num,
285                    p_header_record.header_record.customer_id,
286                    p_header_record.header_record.customer_site_id,
287                    p_header_record.header_record.ship_from_location_id
288                   );
289    EXCEPTION
290       WHEN OTHERS THEN
291          rcv_error_pkg.set_sql_error_message('insert_rma_header', '000');
292          p_header_record.error_record.error_status   := rcv_error_pkg.g_ret_sts_unexp_error;
293          p_header_record.error_record.error_message  := rcv_error_pkg.get_last_message;
294    END insert_rma_header;
295 
296 /* Private helper procedures */
297    PROCEDURE derive_customer_info(
298       p_header_record IN OUT NOCOPY rcv_roi_preprocessor.header_rec_type
299    ) IS
300    BEGIN
301       IF     p_header_record.error_record.error_status IN('S', 'W')
302          AND p_header_record.header_record.customer_id IS NULL THEN
303          -- derive customer name from customer id
304          IF     p_header_record.header_record.customer_party_name IS NULL
305             AND p_header_record.header_record.customer_id IS NOT NULL THEN
306             SELECT party.party_name
307             INTO   p_header_record.header_record.customer_party_name
308             FROM   hz_parties party,
309                    hz_cust_accounts acct
310             WHERE  acct.party_id = party.party_id
311             AND    acct.cust_account_id = p_header_record.header_record.customer_id;
312          END IF;
313 
314                -- derive customer id from customer name and account number
315          /* Bug 3648886.
316           * The sql below had the where condition as
317           * AND party.party_name = party_name
318                * AND acct.account_number = account_number;
319           * This needs to be
320           * AND party.party_name = p_header_record.header_record.customer_party_name
321                * AND acct.account_number = p_header_record.header_record.customer_account_number;
322           * This will give error and also there was a performance problem.
323          */
324          IF     p_header_record.header_record.customer_id IS NULL
325             AND p_header_record.header_record.customer_account_number IS NOT NULL
326             AND p_header_record.header_record.customer_party_name IS NOT NULL THEN
327             SELECT acct.cust_account_id
328             INTO   p_header_record.header_record.customer_id
329             FROM   hz_parties party,
330                    hz_cust_accounts acct
331             WHERE  party.party_id = acct.party_id
332             AND    party.party_name = p_header_record.header_record.customer_party_name
333             AND    acct.account_number = p_header_record.header_record.customer_account_number;
334          END IF;
335       END IF;
336    EXCEPTION
337       WHEN OTHERS THEN
338          rcv_error_pkg.set_sql_error_message('derive_customer_info', '000');
339          p_header_record.error_record.error_status   := rcv_error_pkg.g_ret_sts_unexp_error;
340          p_header_record.error_record.error_message  := rcv_error_pkg.get_last_message;
341    END derive_customer_info;
342 
343    /* We do not insert customer_site_id now from forms */
344    /* customer_site_id = from_org_id */
345    PROCEDURE derive_customer_site_info(
346       p_header_record IN OUT NOCOPY rcv_roi_preprocessor.header_rec_type
347    ) IS
348    BEGIN
349       NULL;
350    END derive_customer_site_info;
351 
352    PROCEDURE default_customer_info(
353       p_header_record IN OUT NOCOPY rcv_roi_preprocessor.header_rec_type
354    ) IS
355    BEGIN
356       NULL;
357 -- For RMA, we can default customer_id which is actually the cust_account_id in hz_cust_accounts.
358 -- If party_name is given and for that party_id, if there exists only one account_id in the accounts table
359 -- then we can default that value.
360 -- If both party_id and party_name is given, then we consider only party_id. If party_id has a wrong value but party_name has a correct value what do we do? Ask PM. In validate
361 -- we use all  the values for vendors .Do we need to do the same here also?
362 -- Then it does not make sense to use party_name since even if we derive it will fail validation later when we use both party_id and party_name value.
363 
364 
365 -- If (customer_id is null and (party_id is not null) then
366 --      select  count(*) into l_count
367 -- from hz_cust_accounts acct
368 -- where acct.party_id = acct.party_id;
369 
370 -- If (l_count = 1) then  /* There is only one acct for this party hence default*/
371 --  select acct.cust_account_id
372 --  from hz_cust_accounts acct
373 --  where acct.party_id = party_id;
374 -- end if;
375 --  end if;
376 
377 -- If (customer_id is null and (party_name is not null) then
378 --      select  count(*)
379 --      from hz_parties party, hz_cust_accounts acct
380 --      where acct.party_id = party.party_id and
381 -- party.party_name = party_name;
382 
383 -- If (l_count = 1) then  /* There is only one acct for this party hence default*/
384 --  select acct.cust_account_id
385 --          from hz_parties party, hz_cust_accounts acct
386 --          where acct.party_id = party.party_id and
387 -- party.party_name = party_name;
388 -- end if;
389 
390 --  end if;
391    END default_customer_info;
392 
393    PROCEDURE default_customer_site_info(
394       p_header_record IN OUT NOCOPY rcv_roi_preprocessor.header_rec_type
395    ) IS
396    BEGIN
397       IF (    p_header_record.header_record.customer_site_id IS NULL
398           AND p_header_record.header_record.from_organization_id IS NOT NULL) THEN
399          p_header_record.header_record.customer_site_id  := p_header_record.header_record.from_organization_id;
400 
401          IF (g_asn_debug = 'Y') THEN
402             asn_debug.put_line('defaulted customer_site_id');
403          END IF;
404       END IF;
405    END default_customer_site_info;
406 
407    PROCEDURE default_trx_info(
408       p_header_record IN OUT NOCOPY rcv_roi_preprocessor.header_rec_type
409    ) IS
410    BEGIN
411       IF p_header_record.header_record.transaction_type IS NULL THEN
412          p_header_record.header_record.transaction_type  := 'NEW';
413 
414          IF (g_asn_debug = 'Y') THEN
415             asn_debug.put_line('defaulted transaction_type');
416          END IF;
417       END IF;
418    END default_trx_info;
419 
420    PROCEDURE default_shipment_num(
421       p_header_record IN OUT NOCOPY rcv_roi_preprocessor.header_rec_type
422    ) IS
423    BEGIN
424       /* SHIPMENT NUMBER FOR ASBN/ASN if shipment_num IS NULL */
425       /* First choice for ASN/ Second Choice for ASN */
426       IF p_header_record.header_record.shipment_num IS NULL THEN
427          p_header_record.header_record.shipment_num  := p_header_record.header_record.packing_slip;
428 
429          IF (g_asn_debug = 'Y') THEN
430             asn_debug.put_line('defaulted shipment number');
431          END IF;
432       END IF;
433    END default_shipment_num;
434 
435    PROCEDURE validate_receipt_source_code(
436       p_header_record IN OUT NOCOPY rcv_roi_preprocessor.header_rec_type
437    ) IS
438    BEGIN
439 -- validate that the receipt source code is CUSTOMER
440 -- and that the txn type and asn type makes sense
441 -- Do we need to do this?
442       NULL;
443    END validate_receipt_source_code;
444 
445    PROCEDURE validate_customer_info(
446       p_header_record IN OUT NOCOPY rcv_roi_preprocessor.header_rec_type
447    ) IS
448       l_status hz_cust_accounts.status%TYPE;
449       l_validation_failed BOOLEAN;  /*Bug 4344351*/
450    BEGIN
451       l_validation_failed := FALSE;
452 
453       IF p_header_record.header_record.customer_id IS NOT NULL THEN
454 
455          SELECT status
456          INTO   l_status
457          FROM   hz_cust_accounts acct
458          WHERE  acct.cust_account_id = p_header_record.header_record.customer_id;
459 
460          IF l_status <> 'A' THEN
461             IF (g_asn_debug = 'Y') THEN
462                asn_debug.put_line('Customer status is not ACTIVE');
463             END IF;
464             l_validation_failed := TRUE;
465          END IF;
466       ELSE
467          IF (g_asn_debug = 'Y') THEN
468             asn_debug.put_line('Customer_id is null in header record');
469          END IF;
470 
471         -- Bug 4344351: The header record should be errored out if customer_id is null.
472         l_validation_failed := TRUE;
473 
474       END IF;
475 
476       IF ( l_validation_failed ) THEN
477          p_header_record.error_record.error_status  := rcv_error_pkg.g_ret_sts_error;
478          rcv_error_pkg.set_error_message('PO_PDOI_DERV_ERROR', p_header_record.error_record.error_message);
479          rcv_error_pkg.set_token('COLUMN_NAME', 'CUSTOMER_ID');
480          rcv_error_pkg.set_token('VALUE', p_header_record.header_record.customer_id);
481       END IF;
482    EXCEPTION
483       WHEN OTHERS THEN
484          rcv_error_pkg.set_sql_error_message('validate_customer_info', '000');
485          /* Bug 4344351: Setting error staus to Error instead of Unexpected Error.
486          **              This is to ensure that we error out rti and stop further processing.
487          */
488          p_header_record.error_record.error_status   := rcv_error_pkg.g_ret_sts_error;
489          p_header_record.error_record.error_message  := rcv_error_pkg.get_last_message;
490    END validate_customer_info;
491 
492    PROCEDURE validate_customer_site_info(
493       p_header_record IN OUT NOCOPY rcv_roi_preprocessor.header_rec_type
494    ) IS
495    BEGIN
496       NULL;
497    END validate_customer_site_info;
498 END rcv_rma_headers;