DBA Data[Home] [Help]

PACKAGE BODY: APPS.WSM_WSMPNTXN_XMLP_PKG

Source


1 PACKAGE BODY WSM_WSMPNTXN_XMLP_PKG AS
2 /* $Header: WSMPNTXNB.pls 120.0 2007/12/24 14:54:21 krreddy noship $ */
3   FUNCTION QR_PTXN_JOBREFCURDS RETURN number IS
4     PTXN_JOB PTXN_JOB_TYPE;
5   BEGIN
6    -- OPEN PTXN_JOB    FOR
7      SELECT
8           WDJ.WIP_ENTITY_ID
9       BULK COLLECT INTO G_WIP_ENTITY_ID_PL_TBL
10         FROM
11           WIP_DISCRETE_JOBS WDJ,
12           WIP_ENTITIES WE
13         WHERE WDJ.ORGANIZATION_ID = P_ORGANIZATION_ID
14           AND WDJ.ORGANIZATION_ID = WE.ORGANIZATION_ID
15           AND WDJ.WIP_ENTITY_ID = WE.WIP_ENTITY_ID
16           AND WE.ENTITY_TYPE = 5
17           AND WDJ.WIP_ENTITY_ID in (
18           SELECT
19             WIP_ENTITY_ID
20           FROM
21             WSM_LOT_MOVE_TXN_INTERFACE
22           WHERE ORGANIZATION_ID = P_ORGANIZATION_ID
23             AND STATUS <> 4
24           UNION ALL
25           SELECT
26             WIP_ENTITY_ID
27           FROM
28             WIP_MOVE_TXN_INTERFACE
29           WHERE ORGANIZATION_ID = P_ORGANIZATION_ID
30           UNION ALL
31           SELECT
32             WIP_ENTITY_ID
33           FROM
34             WIP_COST_TXN_INTERFACE
35           WHERE ORGANIZATION_ID = P_ORGANIZATION_ID
36           UNION ALL
37           SELECT
38             TRANSACTION_SOURCE_ID
39           FROM
40             MTL_MATERIAL_TRANSACTIONS_TEMP
41           WHERE ORGANIZATION_ID = P_ORGANIZATION_ID
42             AND TRANSACTION_SOURCE_TYPE_ID = 5
43           UNION ALL
44           SELECT
45             TRANSACTION_SOURCE_ID
46           FROM
47             MTL_MATERIAL_TRANSACTIONS
48           WHERE COSTED_FLAG in ( 'N' , 'E' )
49             AND TRANSACTION_SOURCE_TYPE_ID = 5
50             AND ORGANIZATION_ID = P_ORGANIZATION_ID
51           UNION ALL
52           SELECT
53             WIP_ENTITY_ID
54           FROM
55             WIP_OPERATION_YIELDS
56           WHERE ORGANIZATION_ID = P_ORGANIZATION_ID
57             AND STATUS in ( 1 , 3 )
58           UNION ALL
59           SELECT
60             SJ.WIP_ENTITY_ID
61           FROM
62             WSM_SM_STARTING_JOBS SJ,
63             WSM_SPLIT_MERGE_TRANSACTIONS WMT
64           WHERE SJ.TRANSACTION_ID = WMT.TRANSACTION_ID
65             AND ( WMT.STATUS <> 4
66           OR NVL(WMT.COSTED
67              ,1) <> 4 )
68           UNION ALL
69           SELECT
70             RJ.WIP_ENTITY_ID
71           FROM
72             WSM_SM_RESULTING_JOBS RJ,
73             WSM_SPLIT_MERGE_TRANSACTIONS WMT
74           WHERE RJ.TRANSACTION_ID = WMT.TRANSACTION_ID
75             AND ( WMT.STATUS <> 4
76           OR NVL(WMT.COSTED
77              ,1) <> 4 )
78           UNION ALL
79           SELECT
80             PD.WIP_ENTITY_ID
81           FROM
82             PO_RELEASES_ALL PR,
83             PO_HEADERS_ALL PH,
84             PO_DISTRIBUTIONS_ALL PD,
85             PO_LINE_LOCATIONS_ALL PL
86           WHERE PD.DESTINATION_ORGANIZATION_ID = P_ORGANIZATION_ID
87             AND PD.PO_LINE_ID is not null
88             AND PD.LINE_LOCATION_ID is not null
89             AND PH.PO_HEADER_ID = PD.PO_HEADER_ID
90             AND PL.LINE_LOCATION_ID = PD.LINE_LOCATION_ID
91             AND pr.po_release_id (+) = PD.PO_RELEASE_ID
92             AND NVL(PR.CANCEL_FLAG
93              ,'N') = 'N'
94             AND ( PL.QUANTITY_RECEIVED < ( PL.QUANTITY - PL.QUANTITY_CANCELLED ) )
95           UNION ALL
96           SELECT
97             PRL.WIP_ENTITY_ID
98           FROM
99             PO_REQUISITION_LINES_ALL PRL
100           WHERE PRL.DESTINATION_ORGANIZATION_ID = P_ORGANIZATION_ID
101             AND NVL(PRL.CANCEL_FLAG
102              ,'N') = 'N'
103             AND PRL.LINE_LOCATION_ID is null
104           UNION ALL
105           SELECT
106             PRI.WIP_ENTITY_ID
107           FROM
108             PO_REQUISITIONS_INTERFACE_ALL PRI
109           WHERE PRI.DESTINATION_ORGANIZATION_ID = P_ORGANIZATION_ID );
110     RETURN 1;
111   END QR_PTXN_JOBREFCURDS;
112 
113   /*FUNCTION QR_PTXN_CTREFCURDS(WIP_ENTITY_ID_1 IN NUMBER) RETURN number IS
114     JOB_PTXN_CT PTXN_CT_TYPE;
115     L_COUNT NUMBER := 0;
116     L_CTMP NUMBER := 0;
117   BEGIN
118 
119     BEGIN
120 
121       SELECT
122         1
123       INTO L_COUNT
124       FROM
125         DUAL
126       WHERE exists (
127         SELECT
128           1
129         FROM
130           WIP_MOVE_TXN_INTERFACE
131         WHERE ORGANIZATION_ID = P_ORGANIZATION_ID
132           AND WIP_ENTITY_ID = WIP_ENTITY_ID_1
133         UNION ALL
134         SELECT
135           1
136         FROM
137           WSM_LOT_MOVE_TXN_INTERFACE
138         WHERE ORGANIZATION_ID = P_ORGANIZATION_ID
139           AND WIP_ENTITY_ID = WIP_ENTITY_ID_1
140           AND STATUS <> 4 );
141     EXCEPTION
142       WHEN NO_DATA_FOUND THEN
143         L_COUNT := 0;
144       WHEN TOO_MANY_ROWS THEN
145         L_COUNT := 1;
146     END;
147     IF L_COUNT = 1 THEN
148       INSERT INTO WSM_PEND_TXN_REP_TMP
149       VALUES   (WIP_ENTITY_ID_1
150         ,'Pending Move Transactions');
151     END IF;
152     BEGIN
153       SELECT
154         1
155       INTO L_COUNT
156       FROM
157         DUAL
158       WHERE exists (
159         SELECT
160           1
161         FROM
162           WIP_COST_TXN_INTERFACE
163         WHERE ORGANIZATION_ID = P_ORGANIZATION_ID
164           AND WIP_ENTITY_ID = WIP_ENTITY_ID_1 );
165     EXCEPTION
166       WHEN NO_DATA_FOUND THEN
167         L_COUNT := 0;
168       WHEN TOO_MANY_ROWS THEN
169         L_COUNT := 1;
170     END;
171     IF L_COUNT = 1 THEN
172       INSERT INTO WSM_PEND_TXN_REP_TMP
173       VALUES   (WIP_ENTITY_ID_1
174         ,'Pending Resource Transactions');
175     END IF;
176     BEGIN
177       SELECT
178         1
179       INTO L_COUNT
180       FROM
181         DUAL
182       WHERE exists (
183         SELECT
184           1
185         FROM
186           MTL_MATERIAL_TRANSACTIONS_TEMP
187         WHERE ORGANIZATION_ID = P_ORGANIZATION_ID
188           AND TRANSACTION_SOURCE_ID = WIP_ENTITY_ID_1
189           AND TRANSACTION_SOURCE_TYPE_ID = 5 );
190     EXCEPTION
191       WHEN NO_DATA_FOUND THEN
192         L_COUNT := 0;
193       WHEN TOO_MANY_ROWS THEN
194         L_COUNT := 1;
195     END;
196     IF L_COUNT = 1 THEN
197       INSERT INTO WSM_PEND_TXN_REP_TMP
198       VALUES   (WIP_ENTITY_ID_1
199         ,'Pending Material Transactions');
200     END IF;
201     BEGIN
202       SELECT
203         1
204       INTO L_COUNT
205       FROM
206         DUAL
207       WHERE exists (
208         SELECT
209           1
210         FROM
211           MTL_MATERIAL_TRANSACTIONS
212         WHERE ORGANIZATION_ID = P_ORGANIZATION_ID
213           AND TRANSACTION_SOURCE_ID = WIP_ENTITY_ID_1
214           AND COSTED_FLAG IN ( 'N' , 'E' )
215           AND TRANSACTION_SOURCE_TYPE_ID = 5 );
216     EXCEPTION
217       WHEN NO_DATA_FOUND THEN
218         L_COUNT := 0;
219       WHEN TOO_MANY_ROWS THEN
220         L_COUNT := 1;
221     END;
222     IF L_COUNT = 1 THEN
223       INSERT INTO WSM_PEND_TXN_REP_TMP
224       VALUES   (WIP_ENTITY_ID_1
225         ,'Uncosted Material Transactions');
226     END IF;
227     BEGIN
228       SELECT
229         1
230       INTO L_COUNT
231       FROM
232         DUAL
233       WHERE exists (
234         SELECT
235           1
236         FROM
237           WIP_OPERATION_YIELDS
238         WHERE ORGANIZATION_ID = P_ORGANIZATION_ID
239           AND WIP_ENTITY_ID = WIP_ENTITY_ID_1
240           AND STATUS in ( 1 , 3 ) );
241     EXCEPTION
242       WHEN NO_DATA_FOUND THEN
243         L_COUNT := 0;
244       WHEN TOO_MANY_ROWS THEN
245         L_COUNT := 1;
246     END;
247     IF L_COUNT = 1 THEN
248       INSERT INTO WSM_PEND_TXN_REP_TMP
249       VALUES   (WIP_ENTITY_ID_1
250         ,'Pending Operation Yield');
251     END IF;
252     BEGIN
253       SELECT
254         1
255       INTO L_COUNT
256       FROM
257         DUAL
258       WHERE exists (
259         SELECT
260           1
261         FROM
262           WSM_SM_STARTING_JOBS SJ,
263           WSM_SPLIT_MERGE_TRANSACTIONS WMT
264         WHERE SJ.WIP_ENTITY_ID = WIP_ENTITY_ID_1
265           AND SJ.TRANSACTION_ID = WMT.TRANSACTION_ID
266           AND WMT.ORGANIZATION_ID = P_ORGANIZATION_ID
267           AND WMT.STATUS <> 4
268         UNION
269         SELECT
270           1
271         FROM
272           WSM_SM_RESULTING_JOBS RJ,
273           WSM_SPLIT_MERGE_TRANSACTIONS WMT
274         WHERE RJ.WIP_ENTITY_ID = WIP_ENTITY_ID_1
275           AND RJ.TRANSACTION_ID = WMT.TRANSACTION_ID
276           AND WMT.ORGANIZATION_ID = P_ORGANIZATION_ID
277           AND WMT.STATUS <> 4 );
278     EXCEPTION
279       WHEN NO_DATA_FOUND THEN
280         L_COUNT := 0;
281       WHEN TOO_MANY_ROWS THEN
282         L_COUNT := 1;
283     END;
284     IF L_COUNT = 1 THEN
285       INSERT INTO WSM_PEND_TXN_REP_TMP
286       VALUES   (WIP_ENTITY_ID_1
287         ,'Pending WIP Lot Transactions');
288     END IF;
289     BEGIN
290       SELECT
291         1
292       INTO L_COUNT
293       FROM
294         DUAL
295       WHERE exists (
296         SELECT
297           1
298         FROM
299           WSM_SM_STARTING_JOBS SJ,
300           WSM_SPLIT_MERGE_TRANSACTIONS WMT
301         WHERE SJ.WIP_ENTITY_ID = WIP_ENTITY_ID_1
302           AND SJ.TRANSACTION_ID = WMT.TRANSACTION_ID
303           AND WMT.ORGANIZATION_ID = P_ORGANIZATION_ID
304           AND NVL(WMT.COSTED
305            ,1) <> 4
306         UNION
307         SELECT
308           1
309         FROM
310           WSM_SM_RESULTING_JOBS RJ,
311           WSM_SPLIT_MERGE_TRANSACTIONS WMT
312         WHERE RJ.WIP_ENTITY_ID = WIP_ENTITY_ID_1
313           AND RJ.TRANSACTION_ID = WMT.TRANSACTION_ID
314           AND WMT.ORGANIZATION_ID = P_ORGANIZATION_ID
315           AND NVL(WMT.COSTED
316            ,1) <> 4 );
317     EXCEPTION
318       WHEN NO_DATA_FOUND THEN
319         L_COUNT := 0;
320       WHEN TOO_MANY_ROWS THEN
321         L_COUNT := 1;
322     END;
323     IF L_COUNT = 1 THEN
324       INSERT INTO WSM_PEND_TXN_REP_TMP
325       VALUES   (WIP_ENTITY_ID_1
326         ,'Uncosted WIP Lot Transactions ');
327     END IF;
328     BEGIN
329       SELECT
330         1
331       INTO L_COUNT
332       FROM
333         DUAL
334       WHERE exists (
335         SELECT
336           1
337         FROM
338           PO_RELEASES_ALL PR,
339           PO_HEADERS_ALL PH,
340           PO_DISTRIBUTIONS_ALL PD,
341           PO_LINE_LOCATIONS_ALL PL
342         WHERE PD.DESTINATION_ORGANIZATION_ID = P_ORGANIZATION_ID
343           AND PD.WIP_ENTITY_ID = WIP_ENTITY_ID_1
344           AND PD.PO_LINE_ID is not null
345           AND PD.LINE_LOCATION_ID is not null
346           AND PL.LINE_LOCATION_ID = PD.LINE_LOCATION_ID
347           AND PH.PO_HEADER_ID = PD.PO_HEADER_ID
348           AND PL.LINE_LOCATION_ID = PD.LINE_LOCATION_ID
349           AND pr.po_release_id (+) = PD.PO_RELEASE_ID
350           AND NVL(PR.CANCEL_FLAG
351            ,'N') = 'N'
352           AND ( PL.QUANTITY_RECEIVED < ( PL.QUANTITY - PL.QUANTITY_CANCELLED ) ) )
353       OR exists (
354         SELECT
355           1
356         FROM
357           PO_REQUISITION_LINES_ALL PRL
358         WHERE PRL.DESTINATION_ORGANIZATION_ID = P_ORGANIZATION_ID
359           AND PRL.WIP_ENTITY_ID = WIP_ENTITY_ID_1
360           AND NVL(PRL.CANCEL_FLAG
361            ,'N') = 'N'
362           AND PRL.LINE_LOCATION_ID is null )
363       OR exists (
364         SELECT
365           1
366         FROM
367           PO_REQUISITIONS_INTERFACE_ALL PRI
368         WHERE PRI.DESTINATION_ORGANIZATION_ID = P_ORGANIZATION_ID
369           AND PRI.WIP_ENTITY_ID = WIP_ENTITY_ID_1 );
370     EXCEPTION
371       WHEN NO_DATA_FOUND THEN
372         L_COUNT := 0;
373       WHEN TOO_MANY_ROWS THEN
374         L_COUNT := 1;
375     END;
376     IF L_COUNT = 1 THEN
377       INSERT INTO WSM_PEND_TXN_REP_TMP
378       VALUES   (WIP_ENTITY_ID_1
379         ,'Pending PO Requisitions');
380     END IF;
381     \*OPEN JOB_PTXN_CT
382     FOR SELECT
383           *
384         FROM
385           WSM_PEND_TXN_REP_TMP
386         WHERE WIP_ENTITY_ID = WIP_ENTITY_ID_1;*\
387         \*SELECT wip_entity_id , ptxn_table
388         BULK COLLECT INTO G_WSM_PEND_TXN_REP_PL_TBL
389         FROM  WSM_PEND_TXN_REP_TMP
390         WHERE WIP_ENTITY_ID = WIP_ENTITY_ID_1;*\
391    commit;
392     RETURN (1);
393   END QR_PTXN_CTREFCURDS;*/
394 
395   FUNCTION CF_EXCLUDE_RESERVEFORMULA RETURN CHAR IS
396   BEGIN
397     IF (P_EXCLUDE_RESERVED_JOBS = 1) THEN
398       RETURN ('and not exists (select 1 from WIP_RESERVATIONS_V wrv where wrv.wip_entity_id = wdj.wip_entity_id)');
399     ELSE
400       RETURN (' ');
401     END IF;
402     RETURN NULL;
403   END CF_EXCLUDE_RESERVEFORMULA;
404 
405   FUNCTION CF_EXCLUDE_UNCOMPFORMULA RETURN CHAR IS
406   BEGIN
407     IF (P_EXCLUDE_UNCOMPLETE_JOBS = 1) THEN
408       RETURN ('and wdj.status_type in (4,5,14,15)');
409     ELSE
410       RETURN (' ');
411     END IF;
412     RETURN NULL;
413   END CF_EXCLUDE_UNCOMPFORMULA;
414 
415   FUNCTION CF_ORG_CODEFORMULA RETURN CHAR IS
416     ORG_NAME VARCHAR2(240);
417   BEGIN
418     SELECT
419       ORGANIZATION_NAME
420     INTO ORG_NAME
421     FROM
422       ORG_ORGANIZATION_DEFINITIONS
423     WHERE ORGANIZATION_ID = P_ORGANIZATION_ID;
424     RETURN (ORG_NAME);
425   END CF_ORG_CODEFORMULA;
426 
427   FUNCTION CF_JOB_TYPEFORMULA RETURN CHAR IS
428     ENTITY_TYPE VARCHAR2(80);
429   BEGIN
430     SELECT
431       MEANING
432     INTO ENTITY_TYPE
433     FROM
434       MFG_LOOKUPS
435     WHERE LOOKUP_TYPE = 'WIP_ENTITY'
436       AND LOOKUP_CODE = P_ENTITY_TYPE;
437     RETURN (ENTITY_TYPE);
438   END CF_JOB_TYPEFORMULA;
439 
440   FUNCTION AFTERPFORM RETURN BOOLEAN IS
441   BEGIN
442     IF (P_FROM_CLASS IS NOT NULL) THEN
443       IF (P_TO_CLASS IS NOT NULL) THEN
444         P_CLASS_RANGE := 'and wdj.class_code between
445                                                          :p_from_class and :p_to_class';
446       ELSE
447         P_CLASS_RANGE := 'and wdj.class_code >= :p_from_class';
448       END IF;
449     ELSE
450       IF (P_TO_CLASS IS NOT NULL) THEN
451         P_CLASS_RANGE := 'and wdj.class_code <= :p_to_class';
452       ELSE
453         P_CLASS_RANGE := '   ';
454       END IF;
455     END IF;
456     IF (P_ACCT_CLASS_TYPE IS NULL) THEN
457       P_CLASS_TYPE := '   ';
458     ELSE
459       P_CLASS_TYPE := 'and wac.class_type = to_char(:P_ACCT_CLASS_TYPE)';
460     END IF;
461     IF (P_FROM_COMPLETE_DATE IS NOT NULL) THEN
462       IF (P_TO_COMPLETE_DATE IS NOT NULL) THEN
463         P_DATE_COMPLETE := 'and trunc(wdj.date_completed) between to_date(to_char(:p_from_complete_date,''YYYY/MM/DD'')
464                            		                    ,''YYYY/MM/DD'') and to_date(to_char(:p_to_complete_date,''YYYY/MM/DD''),''YYYY/MM/DD'')';
465       ELSE
466         P_DATE_COMPLETE := 'and trunc(wdj.date_completed) >= to_date(to_char(:p_from_complete_date,''YYYY/MM/DD'')
467                            		                    ,''YYYY/MM/DD'')';
468       END IF;
469     ELSE
470       IF (P_TO_COMPLETE_DATE IS NOT NULL) THEN
471         P_DATE_COMPLETE := 'and trunc(wdj.date_completed) <= to_date(to_char(:p_to_complete_date,''YYYY/MM/DD'')
472                            		                    ,''YYYY/MM/DD'')';
473       ELSE
474         P_DATE_COMPLETE := '   ';
475       END IF;
476     END IF;
477     IF (P_FROM_JOB IS NOT NULL) THEN
478       IF (P_TO_JOB IS NOT NULL) THEN
479         P_JOB_NAME := 'and we.wip_entity_name between :p_from_job and :p_to_job';
480       ELSE
481         P_JOB_NAME := 'and we.wip_entity_name >= :p_from_job';
482       END IF;
483     ELSE
484       IF (P_TO_JOB IS NOT NULL) THEN
485         P_JOB_NAME := 'and we.wip_entity_name <= :p_to_job';
486       ELSE
487         P_JOB_NAME := '   ';
488       END IF;
489     END IF;
490     IF (P_FROM_RELEASE_DATE IS NOT NULL) THEN
491       IF (P_TO_RELEASE_DATE IS NOT NULL) THEN
492         P_RELEASE_DATE := 'and trunc(wdj.date_released) between to_date(to_char(:p_from_release_date,''YYYY/MM/DD'')
493                           		                 ,''YYYY/MM/DD'') and to_date(to_char(:p_to_release_date,''YYYY/MM/DD'')
494                           		                 ,''YYYY/MM/DD'')';
495       ELSE
496         P_RELEASE_DATE := 'and trunc(wdj.date_released) >= to_date(to_char(:p_from_release_date,''YYYY/MM/DD'')
497                           		 		,''YYYY/MM/DD'')';
498       END IF;
499     ELSE
500       IF (P_TO_RELEASE_DATE IS NOT NULL) THEN
501         P_RELEASE_DATE := 'and trunc(wdj.date_released) <= to_date(to_char(:p_to_release_date,''YYYY/MM/DD'')
502                           		 		,''YYYY/MM/DD'')';
503       ELSE
504         P_RELEASE_DATE := '   ';
505       END IF;
506     END IF;
507     IF (P_FROM_START_DATE IS NOT NULL) THEN
508       IF (P_TO_START_DATE IS NOT NULL) THEN
509         P_START_DATE := 'and trunc(wdj.scheduled_start_date) between to_date(to_char(:p_from_start_date,''YYYY/MM/DD'')
510                         		                 ,''YYYY/MM/DD'') and to_date(to_char(:p_to_start_date,''YYYY/MM/DD''),''YYYY/MM/DD'')';
511       ELSE
512         P_START_DATE := 'and trunc(wdj.scheduled_start_date) >= to_date(to_char(:p_from_start_date,''YYYY/MM/DD'')
513                         		                 ,''YYYY/MM/DD'')';
514       END IF;
515     ELSE
516       IF (P_TO_START_DATE IS NOT NULL) THEN
517         P_START_DATE := 'and trunc(wdj.scheduled_start_date) <= to_date(to_char(:p_to_start_date,''YYYY/MM/DD'')
518                         		                 ,''YYYY/MM/DD'')';
519       ELSE
520         P_START_DATE := '   ';
521       END IF;
522     END IF;
523     RETURN (TRUE);
524   END AFTERPFORM;
525 
526   FUNCTION P_DATE_COMPLETEVALIDTRIGGER RETURN BOOLEAN IS
527   BEGIN
528     RETURN (TRUE);
529   END P_DATE_COMPLETEVALIDTRIGGER;
530 
531   FUNCTION CF_TIMEZONEFORMULA RETURN CHAR IS
532   BEGIN
533     RETURN FND_TIMEZONES.GET_NAME(FND_TIMEZONES.GET_SERVER_TIMEZONE_CODE);
534   END CF_TIMEZONEFORMULA;
535 
536   FUNCTION AFTERREPORT RETURN BOOLEAN IS
537   BEGIN
538     /*SRW.USER_EXIT('FND SRWEXIT')*/NULL;
539     RETURN (TRUE);
540   END AFTERREPORT;
541 
542   FUNCTION BEFOREREPORT RETURN BOOLEAN IS
543   BEGIN
544     P_CONC_REQUEST_ID := FND_GLOBAL.CONC_REQUEST_ID;
545     /*SRW.USER_EXIT('FND SRWINIT')*/NULL;
546     RETURN (TRUE);
547   END BEFOREREPORT;
548 
549   FUNCTION BEFOREPFORM RETURN BOOLEAN IS
550   BEGIN
551     RETURN (TRUE);
552   END BEFOREPFORM;
553 
554 END WSM_WSMPNTXN_XMLP_PKG;
555 
556