1 PACKAGE BODY PER_PERDETBU_XMLP_PKG AS
2 /* $Header: PERDETBUB.pls 120.0 2008/01/07 14:52:04 srikrish noship $ */
3 FUNCTION BEFOREREPORT RETURN BOOLEAN IS
4 L_TOP_ORG_ID NUMBER(10);
5 BEGIN
6 P_CONC_REQUEST_ID := FND_GLOBAL.CONC_REQUEST_ID;
7 P_DATE_FROM_T := TO_CHAR(P_DATE_FROM,'DD-MON-YYYY');
8 P_SESSION_DATE_T := TO_CHAR(P_SESSION_DATE,'DD-MON-YYYY');
9
10 INSERT INTO FND_SESSIONS
11 (SESSION_ID
12 ,EFFECTIVE_DATE)
13 VALUES (USERENV('SESSIONID')
14 ,P_DATE_FROM);
15 IF (P_TOP_ORG IS NULL AND P_ORG_HIERARCHY IS NOT NULL) THEN
16 BEGIN
17 SELECT
18 DISTINCT
19 POSE.ORGANIZATION_ID_PARENT
20 INTO L_TOP_ORG_ID
21 FROM
22 PER_ORG_STRUCTURE_ELEMENTS POSE,
23 PER_ORG_STRUCTURE_VERSIONS POSV
24 WHERE POSE.ORG_STRUCTURE_VERSION_ID = POSV.ORG_STRUCTURE_VERSION_ID
25 AND POSV.ORGANIZATION_STRUCTURE_ID = P_ORG_HIERARCHY
26 AND POSV.VERSION_NUMBER = (
27 SELECT
28 MAX(VERSION_NUMBER)
29 FROM
30 PER_ORG_STRUCTURE_VERSIONS POSV
31 WHERE POSV.BUSINESS_GROUP_ID = P_BUSINESS_GROUP_ID
32 AND POSV.ORGANIZATION_STRUCTURE_ID = P_ORG_HIERARCHY )
33 AND POSE.ORGANIZATION_ID_PARENT not in (
34 SELECT
35 POSE.ORGANIZATION_ID_CHILD
36 FROM
37 PER_ORG_STRUCTURE_ELEMENTS POSE,
38 PER_ORG_STRUCTURE_VERSIONS POSV
39 WHERE POSE.ORG_STRUCTURE_VERSION_ID = POSV.ORG_STRUCTURE_VERSION_ID
40 AND POSV.ORGANIZATION_STRUCTURE_ID = P_ORG_HIERARCHY
41 AND POSV.VERSION_NUMBER = (
42 SELECT
43 MAX(VERSION_NUMBER)
44 FROM
45 PER_ORG_STRUCTURE_VERSIONS POSV
46 WHERE POSV.BUSINESS_GROUP_ID = P_BUSINESS_GROUP_ID
47 AND POSV.ORGANIZATION_STRUCTURE_ID = P_ORG_HIERARCHY ) );
48 P_TOP_ORG := L_TOP_ORG_ID;
49 EXCEPTION
50 WHEN OTHERS THEN
51 NULL;
52 END;
53 END IF;
54 CP_TOP_ORG_NAME := HR_REPORTS.GET_BUSINESS_GROUP(P_BUSINESS_GROUP_ID);
55 HR_DE_TAX_SUPPORT.BATCH_UPDATE(P_BUSINESS_GROUP_ID
56 ,P_DATE_FROM
57 ,P_ORG_HIERARCHY
58 ,P_TOP_ORG
59 ,P_ASSIGNMENT_SET
60 ,P_ACTION
61 ,P_CONC_REQUEST_ID
62 ,P_TAX_CLASS
63 ,P_NU_CHILDREN
64 ,P_TAXFREE_INCOME
65 ,P_ADD_TAX_INCOME);
66 IF (P_ACTION = 'UR') THEN
67 INSERT INTO FND_SESSIONS
68 (SESSION_ID
69 ,EFFECTIVE_DATE)
70 VALUES (USERENV('SESSIONID')
71 ,P_DATE_FROM - 1);
72 END IF;
73 RETURN (TRUE);
74 END BEFOREREPORT;
75
76 FUNCTION AFTERREPORT RETURN BOOLEAN IS
77 BEGIN
78 IF P_ACTION = 'R' THEN
79 HR_DE_TAX_SUPPORT.DELETE_ASSIGNMENT(P_CONC_REQUEST_ID);
80 END IF;
81 /*SRW.USER_EXIT('FND SRWEXIT')*/NULL;
82 RETURN (TRUE);
83 END AFTERREPORT;
84
85 FUNCTION CF_OLD_TAX_CLASSFORMULA(ASSIGNMENT_ID1 IN NUMBER
86 ,ELEMENT_ENTRY_ID IN NUMBER) RETURN VARCHAR2 IS
87 L_TAX_CLASS VARCHAR2(30);
88 BEGIN
89 IF (P_ACTION = 'UR') THEN
90 SELECT
91 DISTINCT
92 TAX_CLASS
93 INTO L_TAX_CLASS
94 FROM
95 HR_DE_TAX_INFORMATION_V HDTV
96 WHERE HDTV.ASSIGNMENT_ID = ASSIGNMENT_ID1
97 AND HDTV.ELEMENT_ENTRY_ID = CF_OLD_TAX_CLASSFORMULA.ELEMENT_ENTRY_ID
98 AND HDTV.PROCESS_ID <> TO_CHAR(P_CONC_REQUEST_ID);
99 ELSE
100 SELECT
101 DISTINCT
102 TAX_CLASS
103 INTO L_TAX_CLASS
104 FROM
105 HR_DE_TAX_INFORMATION_V HDTV
106 WHERE HDTV.ASSIGNMENT_ID = ASSIGNMENT_ID1
107 AND P_DATE_FROM BETWEEN HDTV.EFFECTIVE_START_DATE
108 AND NVL(HDTV.EFFECTIVE_END_DATE
109 ,P_DATE_FROM);
110 END IF;
111 RETURN L_TAX_CLASS;
112 EXCEPTION
113 WHEN OTHERS THEN
114 RETURN NULL;
115 END CF_OLD_TAX_CLASSFORMULA;
116
117 FUNCTION CF_OLD_NOCFORMULA(ASSIGNMENT_ID1 IN NUMBER
118 ,ELEMENT_ENTRY_ID IN NUMBER) RETURN VARCHAR2 IS
119 L_OLD_NOC VARCHAR2(30);
120 BEGIN
121 IF (P_ACTION = 'UR') THEN
122 SELECT
123 DISTINCT
124 NO_OF_CHILDREN
125 INTO L_OLD_NOC
126 FROM
127 HR_DE_TAX_INFORMATION_V HDTV
128 WHERE HDTV.ASSIGNMENT_ID = ASSIGNMENT_ID1
129 AND HDTV.ELEMENT_ENTRY_ID = CF_OLD_NOCFORMULA.ELEMENT_ENTRY_ID
130 AND HDTV.PROCESS_ID <> TO_CHAR(P_CONC_REQUEST_ID);
131 ELSE
132 SELECT
133 DISTINCT
134 NO_OF_CHILDREN
135 INTO L_OLD_NOC
136 FROM
137 HR_DE_TAX_INFORMATION_V HDTV
138 WHERE HDTV.ASSIGNMENT_ID = ASSIGNMENT_ID1
139 AND P_DATE_FROM BETWEEN HDTV.EFFECTIVE_START_DATE
140 AND NVL(HDTV.EFFECTIVE_END_DATE
141 ,P_DATE_FROM);
142 END IF;
143 RETURN L_OLD_NOC;
144 EXCEPTION
145 WHEN OTHERS THEN
146 RETURN 0;
147 END CF_OLD_NOCFORMULA;
148
149 FUNCTION CF_OLD_MTFIFORMULA(ASSIGNMENT_ID1 IN NUMBER
150 ,ELEMENT_ENTRY_ID IN NUMBER) RETURN NUMBER IS
151 L_OLD_MTFI NUMBER(10);
152 BEGIN
153 IF (P_ACTION = 'UR') THEN
154 SELECT
155 DISTINCT
156 MONTHLY_TAX_FREE_INCOME
157 INTO L_OLD_MTFI
158 FROM
159 HR_DE_TAX_INFORMATION_V HDTV
160 WHERE HDTV.ASSIGNMENT_ID = ASSIGNMENT_ID1
161 AND HDTV.ELEMENT_ENTRY_ID = CF_OLD_MTFIFORMULA.ELEMENT_ENTRY_ID
162 AND HDTV.PROCESS_ID <> TO_CHAR(P_CONC_REQUEST_ID);
163 ELSE
164 SELECT
165 DISTINCT
166 MONTHLY_TAX_FREE_INCOME
167 INTO L_OLD_MTFI
168 FROM
169 HR_DE_TAX_INFORMATION_V HDTV
170 WHERE HDTV.ASSIGNMENT_ID = ASSIGNMENT_ID1
171 AND P_DATE_FROM BETWEEN HDTV.EFFECTIVE_START_DATE
172 AND NVL(HDTV.EFFECTIVE_END_DATE
173 ,P_DATE_FROM);
174 END IF;
175 RETURN L_OLD_MTFI;
176 EXCEPTION
177 WHEN OTHERS THEN
178 RETURN '0';
179 END CF_OLD_MTFIFORMULA;
180
181 FUNCTION CF_OLD_YTFIFORMULA(ASSIGNMENT_ID1 IN NUMBER
182 ,ELEMENT_ENTRY_ID IN NUMBER) RETURN NUMBER IS
183 L_OLD_YTFI NUMBER(10);
184 BEGIN
185 IF (P_ACTION = 'UR') THEN
186 SELECT
187 DISTINCT
188 YEARLY_TAX_FREE_INCOME
189 INTO L_OLD_YTFI
190 FROM
191 HR_DE_TAX_INFORMATION_V HDTV
192 WHERE HDTV.ASSIGNMENT_ID = ASSIGNMENT_ID1
193 AND HDTV.ELEMENT_ENTRY_ID = CF_OLD_YTFIFORMULA.ELEMENT_ENTRY_ID
194 AND HDTV.PROCESS_ID <> TO_CHAR(P_CONC_REQUEST_ID);
195 ELSE
196 SELECT
197 DISTINCT
198 YEARLY_TAX_FREE_INCOME
199 INTO L_OLD_YTFI
200 FROM
201 HR_DE_TAX_INFORMATION_V HDTV
202 WHERE HDTV.ASSIGNMENT_ID = ASSIGNMENT_ID1
203 AND P_DATE_FROM BETWEEN HDTV.EFFECTIVE_START_DATE
204 AND NVL(HDTV.EFFECTIVE_END_DATE
205 ,P_DATE_FROM);
206 END IF;
207 RETURN L_OLD_YTFI;
208 EXCEPTION
209 WHEN OTHERS THEN
210 RETURN '0';
211 END CF_OLD_YTFIFORMULA;
212
213 FUNCTION CF_OLD_AMTIFORMULA(ASSIGNMENT_ID1 IN NUMBER
214 ,ELEMENT_ENTRY_ID IN NUMBER) RETURN NUMBER IS
215 L_OLD_AMTI NUMBER(10);
216 BEGIN
217 IF (P_ACTION = 'UR') THEN
218 SELECT
219 DISTINCT
220 ADDITIONAL_MTH_TAXABLE_INCOME
221 INTO L_OLD_AMTI
222 FROM
223 HR_DE_TAX_INFORMATION_V HDTV
224 WHERE HDTV.ASSIGNMENT_ID = ASSIGNMENT_ID1
225 AND HDTV.ELEMENT_ENTRY_ID = CF_OLD_AMTIFORMULA.ELEMENT_ENTRY_ID
226 AND HDTV.PROCESS_ID <> TO_CHAR(P_CONC_REQUEST_ID);
227 ELSE
228 SELECT
229 DISTINCT
230 ADDITIONAL_MTH_TAXABLE_INCOME
231 INTO L_OLD_AMTI
232 FROM
233 HR_DE_TAX_INFORMATION_V HDTV
234 WHERE HDTV.ASSIGNMENT_ID = ASSIGNMENT_ID1
235 AND P_DATE_FROM BETWEEN HDTV.EFFECTIVE_START_DATE
236 AND NVL(HDTV.EFFECTIVE_END_DATE
237 ,P_DATE_FROM);
238 END IF;
239 RETURN L_OLD_AMTI;
240 EXCEPTION
241 WHEN OTHERS THEN
242 RETURN '0';
243 END CF_OLD_AMTIFORMULA;
244
245 FUNCTION CF_OLD_AYTIFORMULA(ASSIGNMENT_ID1 IN NUMBER
246 ,ELEMENT_ENTRY_ID IN NUMBER) RETURN NUMBER IS
247 L_OLD_AYTI NUMBER(10);
248 BEGIN
249 IF (P_ACTION = 'UR') THEN
250 SELECT
251 DISTINCT
252 ADDITIONAL_YEAR_TAXABLE_INCOME
253 INTO L_OLD_AYTI
254 FROM
255 HR_DE_TAX_INFORMATION_V HDTV
256 WHERE HDTV.ASSIGNMENT_ID = ASSIGNMENT_ID1
257 AND HDTV.ELEMENT_ENTRY_ID = CF_OLD_AYTIFORMULA.ELEMENT_ENTRY_ID
258 AND HDTV.PROCESS_ID <> TO_CHAR(P_CONC_REQUEST_ID);
259 ELSE
260 SELECT
261 DISTINCT
262 ADDITIONAL_YEAR_TAXABLE_INCOME
263 INTO L_OLD_AYTI
264 FROM
265 HR_DE_TAX_INFORMATION_V HDTV
266 WHERE HDTV.ASSIGNMENT_ID = ASSIGNMENT_ID1
267 AND P_DATE_FROM BETWEEN HDTV.EFFECTIVE_START_DATE
268 AND NVL(HDTV.EFFECTIVE_END_DATE
269 ,P_DATE_FROM);
270 END IF;
271 RETURN L_OLD_AYTI;
272 EXCEPTION
273 WHEN OTHERS THEN
274 RETURN '0';
275 END CF_OLD_AYTIFORMULA;
276
277 FUNCTION CF_NEW_TAX_CLASSFORMULA(ASSIGNMENT_ID1 IN NUMBER
278 ,ELEMENT_ENTRY_ID IN NUMBER) RETURN CHAR IS
279 L_TAX_CLASS VARCHAR2(30);
280 BEGIN
281 IF (P_ACTION = 'UR') THEN
282 SELECT
283 DISTINCT
284 TAX_CLASS
285 INTO L_TAX_CLASS
286 FROM
287 HR_DE_TAX_INFORMATION_V HDTV
288 WHERE HDTV.ASSIGNMENT_ID = ASSIGNMENT_ID1
289 AND HDTV.ELEMENT_ENTRY_ID = CF_NEW_TAX_CLASSFORMULA.ELEMENT_ENTRY_ID
290 AND HDTV.PROCESS_ID = TO_CHAR(P_CONC_REQUEST_ID);
291 ELSE
292 IF (P_TAX_CLASS = 'NC') THEN
293 SELECT
294 DISTINCT
295 TAX_CLASS
296 INTO L_TAX_CLASS
297 FROM
298 HR_DE_TAX_INFORMATION_V HDTV
299 WHERE HDTV.ASSIGNMENT_ID = ASSIGNMENT_ID1
300 AND P_DATE_FROM BETWEEN HDTV.EFFECTIVE_START_DATE
301 AND NVL(HDTV.EFFECTIVE_END_DATE
302 ,P_DATE_FROM);
303 ELSE
304 L_TAX_CLASS := P_TAX_CLASS_MEANING;
305 END IF;
306 END IF;
307 RETURN L_TAX_CLASS;
308 EXCEPTION
309 WHEN OTHERS THEN
310 RETURN NULL;
311 END CF_NEW_TAX_CLASSFORMULA;
312
313 FUNCTION CF_NEW_NOCFORMULA(ASSIGNMENT_ID1 IN NUMBER
314 ,ELEMENT_ENTRY_ID IN NUMBER) RETURN CHAR IS
315 L_NEW_NOC VARCHAR2(30);
316 BEGIN
317 IF (P_ACTION = 'UR') THEN
318 SELECT
319 DISTINCT
320 NO_OF_CHILDREN
321 INTO L_NEW_NOC
322 FROM
323 HR_DE_TAX_INFORMATION_V HDTV
324 WHERE HDTV.ASSIGNMENT_ID = ASSIGNMENT_ID1
325 AND HDTV.ELEMENT_ENTRY_ID = CF_NEW_NOCFORMULA.ELEMENT_ENTRY_ID
326 AND HDTV.PROCESS_ID = TO_CHAR(P_CONC_REQUEST_ID);
327 ELSE
328 IF (P_NU_CHILDREN = 'NC') THEN
329 SELECT
330 DISTINCT
331 NO_OF_CHILDREN
332 INTO L_NEW_NOC
333 FROM
334 HR_DE_TAX_INFORMATION_V HDTV
335 WHERE HDTV.ASSIGNMENT_ID = ASSIGNMENT_ID1
336 AND P_DATE_FROM BETWEEN HDTV.EFFECTIVE_START_DATE
337 AND NVL(HDTV.EFFECTIVE_END_DATE
338 ,P_DATE_FROM);
339 ELSE
340 L_NEW_NOC := '0';
341 END IF;
342 END IF;
343 RETURN L_NEW_NOC;
344 EXCEPTION
345 WHEN OTHERS THEN
346 RETURN 0;
347 END CF_NEW_NOCFORMULA;
348
349 FUNCTION CF_NEW_YTFIFORMULA(ASSIGNMENT_ID1 IN NUMBER
350 ,ELEMENT_ENTRY_ID IN NUMBER) RETURN NUMBER IS
351 L_NEW_YTFI NUMBER(10);
352 BEGIN
353 IF (P_ACTION = 'UR') THEN
354 SELECT
355 DISTINCT
356 YEARLY_TAX_FREE_INCOME
357 INTO L_NEW_YTFI
358 FROM
359 HR_DE_TAX_INFORMATION_V HDTV
360 WHERE HDTV.ASSIGNMENT_ID = ASSIGNMENT_ID1
361 AND HDTV.ELEMENT_ENTRY_ID = CF_NEW_YTFIFORMULA.ELEMENT_ENTRY_ID
362 AND HDTV.PROCESS_ID = TO_CHAR(P_CONC_REQUEST_ID);
363 ELSE
364 IF (P_TAXFREE_INCOME = 'NC') THEN
365 SELECT
366 DISTINCT
367 YEARLY_TAX_FREE_INCOME
368 INTO L_NEW_YTFI
369 FROM
370 HR_DE_TAX_INFORMATION_V HDTV
371 WHERE HDTV.ASSIGNMENT_ID = ASSIGNMENT_ID1
372 AND P_DATE_FROM BETWEEN HDTV.EFFECTIVE_START_DATE
373 AND NVL(HDTV.EFFECTIVE_END_DATE
374 ,P_DATE_FROM);
375 ELSE
376 L_NEW_YTFI := TO_NUMBER(P_TAX_FREE_INC_MEANING);
377 END IF;
378 END IF;
379 RETURN L_NEW_YTFI;
380 EXCEPTION
381 WHEN OTHERS THEN
382 RETURN '0';
383 END CF_NEW_YTFIFORMULA;
384
385 FUNCTION CF_NEW_AYTIFORMULA(ASSIGNMENT_ID1 IN NUMBER
386 ,ELEMENT_ENTRY_ID IN NUMBER) RETURN NUMBER IS
387 L_NEW_AYTI NUMBER(10);
388 BEGIN
389 IF (P_ACTION = 'UR') THEN
390 SELECT
391 DISTINCT
392 ADDITIONAL_YEAR_TAXABLE_INCOME
393 INTO L_NEW_AYTI
394 FROM
395 HR_DE_TAX_INFORMATION_V HDTV
396 WHERE HDTV.ASSIGNMENT_ID = ASSIGNMENT_ID1
397 AND HDTV.ELEMENT_ENTRY_ID = CF_NEW_AYTIFORMULA.ELEMENT_ENTRY_ID
398 AND HDTV.PROCESS_ID = TO_CHAR(P_CONC_REQUEST_ID);
399 ELSE
400 IF (P_ADD_TAX_INCOME = 'NC') THEN
401 SELECT
402 DISTINCT
403 ADDITIONAL_YEAR_TAXABLE_INCOME
404 INTO L_NEW_AYTI
405 FROM
406 HR_DE_TAX_INFORMATION_V HDTV
407 WHERE HDTV.ASSIGNMENT_ID = ASSIGNMENT_ID1
408 AND P_DATE_FROM BETWEEN HDTV.EFFECTIVE_START_DATE
409 AND NVL(HDTV.EFFECTIVE_END_DATE
410 ,P_DATE_FROM);
411 ELSE
412 L_NEW_AYTI := TO_NUMBER(P_ADD_TAX_INC_MEANING);
413 END IF;
414 END IF;
415 RETURN L_NEW_AYTI;
416 EXCEPTION
417 WHEN OTHERS THEN
418 RETURN '0';
419 END CF_NEW_AYTIFORMULA;
420
421 FUNCTION CF_NEW_AMTIFORMULA(ASSIGNMENT_ID1 IN NUMBER
422 ,ELEMENT_ENTRY_ID IN NUMBER) RETURN NUMBER IS
423 L_NEW_AMTI NUMBER(10);
424 BEGIN
425 IF (P_ACTION = 'UR') THEN
426 SELECT
427 DISTINCT
428 ADDITIONAL_MTH_TAXABLE_INCOME
429 INTO L_NEW_AMTI
430 FROM
431 HR_DE_TAX_INFORMATION_V HDTV
432 WHERE HDTV.ASSIGNMENT_ID = ASSIGNMENT_ID1
433 AND HDTV.ELEMENT_ENTRY_ID = CF_NEW_AMTIFORMULA.ELEMENT_ENTRY_ID
434 AND HDTV.PROCESS_ID = TO_CHAR(P_CONC_REQUEST_ID);
435 ELSE
436 IF (P_ADD_TAX_INCOME = 'NC') THEN
437 SELECT
438 DISTINCT
439 ADDITIONAL_MTH_TAXABLE_INCOME
440 INTO L_NEW_AMTI
441 FROM
442 HR_DE_TAX_INFORMATION_V HDTV
443 WHERE HDTV.ASSIGNMENT_ID = ASSIGNMENT_ID1
444 AND P_DATE_FROM BETWEEN HDTV.EFFECTIVE_START_DATE
445 AND NVL(HDTV.EFFECTIVE_END_DATE
446 ,P_DATE_FROM);
447 ELSE
448 L_NEW_AMTI := TO_NUMBER(P_ADD_TAX_INC_MEANING);
449 END IF;
450 END IF;
451 RETURN L_NEW_AMTI;
452 EXCEPTION
453 WHEN OTHERS THEN
454 RETURN '0';
455 END CF_NEW_AMTIFORMULA;
456
457 FUNCTION CF_NEW_MTFIFORMULA(ASSIGNMENT_ID1 IN NUMBER
458 ,ELEMENT_ENTRY_ID IN NUMBER) RETURN NUMBER IS
459 L_NEW_MTFI NUMBER(10);
460 BEGIN
461 IF (P_ACTION = 'UR') THEN
462 SELECT
463 DISTINCT
464 MONTHLY_TAX_FREE_INCOME
465 INTO L_NEW_MTFI
466 FROM
467 HR_DE_TAX_INFORMATION_V HDTV
468 WHERE HDTV.ASSIGNMENT_ID = ASSIGNMENT_ID1
469 AND HDTV.ELEMENT_ENTRY_ID = CF_NEW_MTFIFORMULA.ELEMENT_ENTRY_ID
470 AND HDTV.PROCESS_ID = TO_CHAR(P_CONC_REQUEST_ID);
471 ELSE
472 IF (P_TAXFREE_INCOME = 'NC') THEN
473 SELECT
474 DISTINCT
475 MONTHLY_TAX_FREE_INCOME
476 INTO L_NEW_MTFI
477 FROM
478 HR_DE_TAX_INFORMATION_V HDTV
479 WHERE HDTV.ASSIGNMENT_ID = ASSIGNMENT_ID1
480 AND P_DATE_FROM BETWEEN HDTV.EFFECTIVE_START_DATE
481 AND NVL(HDTV.EFFECTIVE_END_DATE
482 ,P_DATE_FROM);
483 ELSE
484 L_NEW_MTFI := P_TAX_FREE_INC_MEANING;
485 END IF;
486 END IF;
487 RETURN L_NEW_MTFI;
488 EXCEPTION
489 WHEN OTHERS THEN
490 RETURN '0';
491 END CF_NEW_MTFIFORMULA;
492
493 FUNCTION CP_TOP_ORG_NAME_P RETURN VARCHAR2 IS
494 BEGIN
495 RETURN CP_TOP_ORG_NAME;
496 END CP_TOP_ORG_NAME_P;
497
498 END PER_PERDETBU_XMLP_PKG;