DBA Data[Home] [Help]

PACKAGE BODY: APPS.IGI_VENDOR_MERGE_GRP

Source


1 PACKAGE BODY IGI_VENDOR_MERGE_GRP AS
2    -- $Header: igismrgb.pls 120.8 2007/06/22 10:23:35 smannava ship $
3    --
4    -- Global Variables
5       g_org_id   NUMBER := to_number(fnd_profile.value('ORG_ID'));
6       g_pkg_name CONSTANT VARCHAR2(30) := 'IGI_VENDOR_MERGE_GRP';
7    --
8    -- PRIVATE ROUTINES
9    --
10    --
11    -- *************************************************************************
12    -- Procedure : Update_EXP_Tables
13    -- Bug 3282938, EXP table IGI_EXP_DUS should be updated for
14    -- Supplier merge.
15    -- *************************************************************************
16    PROCEDURE update_EXP_tables (p_paid_invoices_flag   IN          VARCHAR2,
17                                 p_old_vendor_id        IN          NUMBER,
18                                 p_old_vendor_site_id   IN          NUMBER,
19                                 p_new_vendor_id        IN          NUMBER,
20                                 p_new_vendor_site_id   IN          NUMBER,
21                                 x_return_status        OUT NOCOPY VARCHAR2 ,
22                                 x_msg_count            OUT NOCOPY NUMBER ,
23                                 x_msg_data             OUT NOCOPY VARCHAR2);
24 
25    --
26    -- PUBLIC ROUTINES
27    --
28    --
29    -- *************************************************************************
30    -- Procedure : Merge_Vendor
31    -- Off all the IGI tables containing VENDOR_ID, only the CIS table
32    -- needs updating. If new tables are added which store vendor_id,
33    -- this procedure should be updated to modify the new tables too.
34    -- The AP supplier merge report APXINUPD.rdf which performs all the
35    -- updates on the core table will call this API.
36    -- Bug 3282938, EXP table IGI_EXP_DUS should be updated for
37    -- Supplier merge.
38    -- *************************************************************************
39 
40     PROCEDURE merge_vendor(p_api_version       IN  NUMBER
41                            ,p_init_msg_list    IN  VARCHAR2 := FND_API.G_FALSE
42                            ,p_commit           IN  VARCHAR2 := FND_API.G_FALSE
43                            ,p_validation_level IN  NUMBER   := FND_API.G_VALID_LEVEL_FULL
44                            ,x_return_status    OUT NOCOPY VARCHAR2
45                            ,x_msg_count        OUT NOCOPY NUMBER
46                            ,x_msg_data         OUT NOCOPY VARCHAR2
47                            ,p_new_vendor_id      IN  NUMBER
48                            ,p_new_vendor_site_id IN  NUMBER
49                            ,p_old_vendor_id      IN  NUMBER
50                            ,p_old_vendor_site_id IN  NUMBER)
51    IS
52 
53    l_api_version   CONSTANT NUMBER       := 1.0;
54    l_api_name      CONSTANT VARCHAR2(30) := 'VENDOR_MERGE';
55 
56    CURSOR c_chk_prms IS
57    SELECT adv.paid_invoices_flag,
58           adv.process
59    FROM   ap_duplicate_vendors adv
60    WHERE  adv.vendor_id = p_new_vendor_id
61    AND    adv.duplicate_vendor_id = p_old_vendor_id
62    AND    adv.duplicate_vendor_site_id = p_old_vendor_site_id
63    AND    adv.process_flag IN ('S','D');
64 
65    l_paid_invoices_flag   ap_duplicate_vendors.paid_invoices_flag%TYPE;
66    l_process              ap_duplicate_vendors.process%TYPE;
67 
68    BEGIN
69 
70      -- Standard call to check for call compatibility
71      IF (NOT FND_API.Compatible_API_Call(l_api_version
72                                        ,p_api_version
73                                        ,l_api_name
74                                        ,G_PKG_NAME))
75      THEN
76         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
77      END IF;
78 
79      -- Check p_init_msg_list
80      IF FND_API.to_Boolean(p_init_msg_list)
81      THEN
82         FND_MSG_PUB.initialize;
83      END IF;
84 
85      -- Initialize API return status to success
86      x_return_status := FND_API.G_RET_STS_SUCCESS;
87 
88      OPEN c_chk_prms;
89      FETCH c_chk_prms INTO l_paid_invoices_flag,
90                            l_process;
91      CLOSE c_chk_prms;
92 
93      -- If user has chosen to update paid invoices, and if CIS
94      -- is enabled, then update the CIS table.
95      IF l_paid_invoices_flag = 'Y'
96      AND l_process <> 'P' -- not only purchase orders.
97      AND igi_gen.is_req_installed('CIS')
98      THEN
99          UPDATE igi_cis_payment_vouchers
100          SET    vendor_id         = p_new_vendor_id,
101                 vendor_site_id    = p_new_vendor_site_id,
102                 last_update_date  = SYSDATE,
103                 last_update_login = FND_GLOBAL.login_id,
104                 last_updated_by   = FND_GLOBAL.user_id
105          WHERE  vendor_id         = p_old_vendor_id
106          AND    vendor_site_id    = p_old_vendor_site_id;
107 
108      END IF;
109 
110      -- If user has chosen to update invoices
111      -- And EXP is enabled, then update the EXP table.
112      IF  l_process <> 'P' -- not only purchase orders.
113      AND igi_gen.is_req_installed('EXP')
114      THEN
115          update_EXP_tables (p_paid_invoices_flag => l_paid_invoices_flag,
116                             p_old_vendor_id      => p_old_vendor_id,
117                             p_old_vendor_site_id => p_old_vendor_site_id,
118                             p_new_vendor_id      => p_new_vendor_id,
119                             p_new_vendor_site_id => p_new_vendor_site_id,
120                             x_return_status      => x_return_status,
121                             x_msg_count          => x_msg_count,
122                             x_msg_data           => x_msg_data);
123      END IF;
124 
125 
126      -- If user has chosen to process PO's and if
127      -- CC is enabled then call the CC API to update the CC table
128      IF  l_process <> 'I' -- not only invoices
129      AND igi_gen.is_req_installed('CC')
130      THEN
131          IGC_VENDOR_MERGE_PVT.MERGE_VENDOR
132              (p_api_version         => 1.0
133               ,p_init_msg_list      => FND_API.G_FALSE
134               ,p_commit             => FND_API.G_FALSE
135               ,p_validation_level   => FND_API.G_VALID_LEVEL_FULL
136               ,x_return_status      => x_return_status
137               ,x_msg_count          => x_msg_count
138               ,x_msg_data           => x_msg_data
139               ,p_new_vendor_id      => p_new_vendor_id
140               ,p_new_vendor_site_id => p_new_vendor_site_id
141               ,p_old_vendor_id      => p_old_vendor_id
142               ,p_old_vendor_site_id => p_old_vendor_site_id);
143      END IF;
144 
145      IF p_commit         = FND_API.G_TRUE
146      AND x_return_status = FND_API.G_RET_STS_SUCCESS
147      THEN
148          COMMIT;
149      END IF;
150 
151      FND_MSG_PUB.Count_And_Get(p_count => x_msg_count,
152                               p_data  => x_msg_data);
153 
154      EXCEPTION
155      WHEN FND_API.G_EXC_UNEXPECTED_ERROR
156      THEN
157          x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
158          FND_MSG_PUB.Count_And_Get(p_count => x_msg_count,
159                                    p_data  => x_msg_data);
160 
161      WHEN OTHERS
162      THEN
163           x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
164           IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
165           THEN
166               FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME, l_api_name);
167           END IF;
168 
169           FND_MSG_PUB.Count_And_Get( p_count  => x_msg_count,
170                                      p_data   => x_msg_data);
171    END merge_vendor;
172 
173    -- *************************************************************************
174    -- Procedure : Update_EXP_Tables
175    -- Bug 3282938, EXP table IGI_EXP_DUS should be updated for
176    -- Supplier merge.
177    -- *************************************************************************
178    PROCEDURE update_EXP_tables (p_paid_invoices_flag   IN          VARCHAR2,
179                                 p_old_vendor_id        IN          NUMBER,
180                                 p_old_vendor_site_id   IN          NUMBER,
181                                 p_new_vendor_id        IN          NUMBER,
182                                 p_new_vendor_site_id   IN          NUMBER,
183                                 x_return_status        OUT NOCOPY VARCHAR2 ,
184                                 x_msg_count            OUT NOCOPY NUMBER ,
185                                 x_msg_data             OUT NOCOPY VARCHAR2)
186    IS
187    l_api_name             VARCHAR2(30) := 'Update_EXP_Tables';
188    BEGIN
189 
190      -- Initialize API return status to success
191      x_return_status := FND_API.G_RET_STS_SUCCESS;
192 
193      -- If user has chosen to update all invoices (paid + unpaid)
194      -- then update all the dialog units irrespective of their status.
195      IF p_paid_invoices_flag = 'Y'
196      THEN
197          -- Update all the Dialog Units associcated with payables.
198          UPDATE igi_exp_dus du
199          SET    du.du_stp_id         = p_new_vendor_id,
200                 du.du_stp_site_id    = p_new_vendor_site_id,
201                 du.last_update_date  = SYSDATE,
202                 du.last_update_login = FND_GLOBAL.login_id,
203                 du.last_updated_by   = FND_GLOBAL.user_id
204          WHERE  du.du_stp_id         = p_old_vendor_id
205          AND    du.du_stp_site_id    = p_old_vendor_site_id
206          AND    du.du_type_header_id  IN
207                      (SELECT  du_type_header_id
208                       FROM    igi_exp_du_type_headers
209                       WHERE   application_id = 200) ;
210      ELSE
211          -- User has chosen to update only unpaid invoices
212          -- Update all dialog units which are not completed.
213          UPDATE igi_exp_dus du
214          SET    du.du_stp_id         = p_new_vendor_id,
215                 du.du_stp_site_id    = p_new_vendor_site_id,
216                 du.last_update_date  = SYSDATE,
217                 du.last_update_login = FND_GLOBAL.login_id,
218                 du.last_updated_by   = FND_GLOBAL.user_id
219          WHERE  du.du_stp_id         = p_old_vendor_id
220          AND    du.du_stp_site_id    = p_old_vendor_site_id
221          AND    du.du_status         <> 'COM'
222          AND    du.du_type_header_id  IN
223                      (SELECT  du_type_header_id
224                       FROM    igi_exp_du_type_headers
225                       WHERE   application_id = 200) ;
226 
227          --
228          -- Then update all the dialog units which are completed but
229          -- none of the invoices have been paid.
230          UPDATE igi_exp_dus du
231          SET    du.du_stp_id         = p_new_vendor_id,
232                 du.du_stp_site_id    = p_new_vendor_site_id,
233                 du.last_update_date  = SYSDATE,
234                 du.last_update_login = FND_GLOBAL.login_id,
235                 du.last_updated_by   = FND_GLOBAL.user_id
236          WHERE  du.du_stp_id         = p_old_vendor_id
237          AND    du.du_stp_site_id    = p_old_vendor_site_id
238          AND    du.du_status         = 'COM'
239          AND    du.du_type_header_id  IN
240                      (SELECT  du_type_header_id
241                       FROM    igi_exp_du_type_headers
242                       WHERE   application_id = 200)
243          AND    NOT EXISTS
244                      (SELECT 'X'
245                       FROM   ap_invoices api,
246                              igi_exp_ap_trans eapi
247                       WHERE  eapi.du_id              = du.du_id
248                       AND    eapi.invoice_id         = api.invoice_id
249                       AND    Nvl(api.payment_status_flag,'N') = 'Y');
250 
251      END IF ; --  p_paid_invoices_flag = 'Y'
252 
253      EXCEPTION
254      WHEN OTHERS
255      THEN
256           x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
257           IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
258           THEN
259               FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME, l_api_name);
260           END IF;
261 
262    END update_EXP_tables;
263 
264 END IGI_VENDOR_MERGE_GRP;
265