DBA Data[Home] [Help]

PACKAGE BODY: APPS.OE_ADJ_PRIVILEGE

Source


1 PACKAGE BODY OE_ADJ_PRIVILEGE AS
2 /* $Header: OEXSADJB.pls 120.0 2005/06/01 01:09:57 appldev noship $ */
3 
4 --  Global constant holding the package name
5 
6 G_PKG_NAME                    CONSTANT VARCHAR2(30) := 'OE_ADJ_PRIVILEGE';
7 
8 FUNCTION Check_Item_Category
9 (   p_inv_item_id		IN NUMBER
10 ,   p_ent_val			IN VARCHAR2
11 ,   p_orgid			IN NUMBER
12 ,   p_pricing_date		IN DATE
13 )
14 RETURN VARCHAR2
15 IS
16 
17 l_dummy   VARCHAR2(1) := 'X';
18 
19 CURSOR c_check_item_category IS
20    SELECT 'Y'
21    FROM   mtl_item_categories MTC,
22           mtl_default_category_sets MTDCS,
23           mtl_category_set_valid_cats MCSV,
24           mtl_categories MC
25    WHERE  MTDCS.functional_area_id = 7
26      AND  MTC.category_set_id = MTDCS.category_set_id
27      AND  MTC.inventory_item_id = TO_CHAR( p_inv_item_id )
28      AND  MCSV.category_set_id = MTC.category_set_id
29      AND  MCSV.category_id = MTC.category_id
30      AND  MCSV.category_id = MC.category_id
31      AND  p_pricing_date < nvl(MC.disable_date, p_pricing_date+1)
32      AND  MTC.organization_id = NVL(p_orgid, MTC.organization_id)
33      AND  MTC.category_id = to_number(p_ent_val);
34 
35 --
36 --l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
37 --
38 BEGIN
39 
40    OPEN c_check_item_category;
41    FETCH c_check_item_category into l_dummy;
42    CLOSE c_check_item_category;
43 
44    IF l_dummy = 'Y' then
45       RETURN('Y');
46     ELSE
47       RETURN('N');
48    END IF;
49 
50 EXCEPTION
51    WHEN OTHERS THEN
52       RETURN('N');
53 END;
54 
55 
56 PROCEDURE Check_Manual_Discount_Priv
57 (   p_api_version_number	IN    NUMBER
58 ,   p_init_msg_list		IN    VARCHAR2 := FND_API.G_FALSE
59 , x_return_status OUT NOCOPY VARCHAR2
60 
61 , x_msg_count OUT NOCOPY NUMBER
62 
63 , x_msg_data OUT NOCOPY VARCHAR2
64 
65 ,   p_order_type_id		IN    NUMBER := FND_API.G_MISS_NUM
66 ,   p_header_id                 IN    NUMBER
67 ,   p_line_id                   IN    NUMBER
68 ,   p_list_price                IN    NUMBER
69 ,   p_discounting_privilege     IN    VARCHAR2
70 ,   p_apply_order_adjs_flag	IN    VARCHAR2 := 'N'
71 ,   p_check_multiple_adj_flag   IN    VARCHAR2 := 'Y'
72 , x_adjustment_total OUT NOCOPY NUMBER
73 
74 , x_price_adjustment_id OUT NOCOPY NUMBER
75 
76 )
77 IS
78    l_api_version_number		CONSTANT NUMBER := 1.0;
79    l_api_name			CONSTANT VARCHAR2(30) :=
80 						'Check_Manual_Discount_Priv';
81    l_dummy			NUMBER;
82    l_adjustment_total		NUMBER := 0;
83    l_price_adjustment_id	NUMBER := NULL;
84 
85 --
86 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
87 --
88 BEGIN
89 
90    --  Standard call to check for call compatibility
91    IF NOT FND_API.Compatible_API_Call
92      (l_api_version_number,
93       p_api_version_number,
94       l_api_name,
95       G_PKG_NAME
96       )
97      THEN
98       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
99    END IF;
100 
101 
102    --  Initialize message list.
103    IF FND_API.to_Boolean(p_init_msg_list) THEN
104       OE_MSG_PUB.initialize;
105    END IF;
106 
107 
108    x_return_status := FND_API.G_RET_STS_SUCCESS;
109 
110    /********************************************************
111    IF p_discounting_privilege = 'NONE' THEN
112 
113       fnd_message.set_name('QP', 'OE_MANDIS_DISALLOWED');
114       fnd_message.set_token('REASON', 'OE_MANDIS_NO_PRIVILEGE', TRUE);
115       OE_MSG_PUB.Add;
116 
117       RAISE FND_API.G_EXC_ERROR;
118 
119     ELSIF (p_list_price IS NULL
120 	   OR
121 	   p_list_price = 0)
122       THEN
123 
124       fnd_message.set_name('QP', 'OE_MANDIS_DISALLOWED');
125       fnd_message.set_token('REASON',
126 			    'OE_MANDIS_NO_LIST_PRICE',
127 			    TRUE);
128       OE_MSG_PUB.Add;
129 
130       RAISE FND_API.G_EXC_ERROR;
131 
132 
133       -- Check to make sure that the list price field is set
134       -- otherwise you cannot apply manual discounts
135       ELSIF p_list_price > 0
136     ********************************************************/
137 
138       IF p_list_price > 0 THEN
139 
140       -- Check if the order type for this order enforces
141       -- list prices: if it does not or if it does and you
142       -- have 'UNLIMITED' discounting ability then you can
143       -- apply manual discounts
144 
145       IF p_order_type_id <> FND_API.G_MISS_NUM THEN
146 
147          BEGIN
148 	    SELECT  NULL
149 	      INTO  L_Dummy
150 	      FROM  oe_transaction_types
151 	      WHERE transaction_type_id = p_order_type_id
152 	      AND   ((ENFORCE_LINE_PRICES_FLAG = 'Y'
153 		       AND
154 		       P_Discounting_Privilege = 'UNLIMITED')
155 		      OR
156 		      ENFORCE_LINE_PRICES_FLAG = 'N')
157 	      AND   ROWNUM = 1;
158 
159 	    EXCEPTION WHEN NO_DATA_FOUND THEN
160 	      fnd_message.set_name('ONT', 'OE_MANDIS_DISALLOWED');
161 		 fnd_message.set_token('REASON',
162 				      'OE_MANDIS_PRICES_ENFORCED',
163 				      TRUE);
164 		 OE_MSG_PUB.Add;
165 		 RAISE FND_API.G_EXC_ERROR;
166 	    END;
167        END IF;
168 
169        -- Select the price adjustment id of the single manual discount
170        -- that might exist.
171        IF (p_check_multiple_adj_flag = 'Y') THEN
172 
173           BEGIN
174 	     -- Count the number of price adjustments related to this
175 	     -- line which reference a manual discount
176 	     SELECT   price_adjustment_id
177 	       INTO   l_price_adjustment_id
178 	       FROM   OE_PRICE_ADJUSTMENTS
179 	       WHERE  HEADER_ID = P_HEADER_ID
180 	       AND    LINE_ID   = P_LINE_ID
181 	       AND    NVL( AUTOMATIC_FLAG, 'N' ) = 'N'
182 		  AND    (list_line_type_code = 'DIS'
183 				OR list_line_type_code = 'SUR')
184 		  AND	ROWNUM = 1;
185 
186 		  x_price_adjustment_id := l_price_adjustment_id;
187 						IF l_debug_level  > 0 THEN
188 						    oe_debug_pub.add(  'OEXSADJB. ADJ_ID = '|| TO_CHAR ( L_PRICE_ADJUSTMENT_ID ) ) ;
189 						END IF;
190 		  x_return_status := FND_API.G_RET_STS_SUCCESS;
191 
192 		  -- now calculate the total percentage on this
193 		  -- order line, excluding manual discounts
194 		SELECT  NVL( SUM( NVL( Adjusted_amount, 0) ), 0)
195 		  INTO  l_adjustment_total
196 		  FROM  oe_price_adjustments
197 		  WHERE header_id = p_header_id
198 		  AND   ((p_apply_order_adjs_flag = 'Y'
199 		         AND line_id IS NULL)
200 			    OR
201 			    (line_id = p_line_id
202 			    AND automatic_flag = 'Y'));
203 
204 		  x_adjustment_total := l_adjustment_total;
205 
206 	     EXCEPTION
207 	       WHEN NO_DATA_FOUND THEN
208               x_return_status := FND_API.G_RET_STS_ERROR;
209 	     END;
210 
211         END IF;
212       END IF;
213 
214 EXCEPTION
215 
216    WHEN FND_API.G_EXC_ERROR THEN
217 
218       x_return_status := FND_API.G_RET_STS_ERROR;
219 
220       --  Get message count and data
221       OE_MSG_PUB.Count_And_Get
222         (   p_count	=> x_msg_count
223         ,   p_data	=> x_msg_data
224         );
225 
226 
227    WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
228 
229       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
230 
231       --  Get message count and data
232         OE_MSG_PUB.Count_And_Get
233         (   p_count	=> x_msg_count
234         ,   p_data	=> x_msg_data
235         );
236 
237 
238     WHEN OTHERS THEN
239 
240         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
241 
242         IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
243         THEN
244             OE_MSG_PUB.Add_Exc_Msg
245             (   G_PKG_NAME
246             ,   'Check_Manual_Discount_Priv'
247             );
248         END IF;
249 
250         --  Get message count and data
251         OE_MSG_PUB.Count_And_Get
252         (   p_count	=> x_msg_count
253         ,   p_data	=> x_msg_data
254         );
255 
256 END Check_Manual_Discount_Priv;
257 
258 
259 END OE_ADJ_PRIVILEGE;