Oracle PL/SQL to XML Report Generate

---Package/Procedure  to generate XML report

CREATE OR REPLACE PACKAGE apps.XXJG_PRD_WISE_RPT_PKG
AS
-- +====================================================================+
-- |                            BexPharmaceuticals Limited                           |
-- +====================================================================+
   -- Owner                    : BexPharmaceuticals Limited
   -- Module(s)                : OPM
   -- File name                : XXJG_PRD_WISE_RPT_PKG
   -- Doc Ref(s)               : FS_OPM-R-002
   --
   -- Description:               Product Wise Number of Batches Report
   --
   --
   -- Modification History
   -- --------------------------
   --- Version  Date         Author                    Change Reference / Description
   -- -------  -----------  -------------------       ------------------------------------
   --1.0      05-FEB-2020  Jayanta Ganguly            Initial Creation
   -- *************************************************************************
   PROCEDURE XXJG_PRD_WISE_RPT_PRC (
      x_errbuf         OUT      VARCHAR2,
      x_retcode        OUT      NUMBER,
      p_inv_org        IN       NUMBER,
      p_department     IN       VARCHAR2,
      p_resource       IN       VARCHAR2,                      ---Added by JG
      p_from_date      IN       VARCHAR2,
      p_to_date        IN       VARCHAR2,
--      p_dosage         IN       VARCHAR2, --Comment by JG
      p_product_type   IN       VARCHAR2,
      p_item_code      IN       VARCHAR2,
      p_user_id        IN       VARCHAR2
   );
END XXJG_PRD_WISE_RPT_PKG;
/


-------------------------------------------------------------------------------------------

CREATE OR REPLACE PACKAGE BODY APPS.XXJG_PRD_WISE_RPT_PKG
AS
-- +====================================================================+
   -- |                            BexPharmaceuticals Limited                           |
   -- +====================================================================+
   -- Owner                    : BexPharmaceuticals Limited
   -- Module(s)                : OPM
   -- File name                : XXJG_PRD_WISE_RPT_PKG
   -- Doc Ref(s)               : FS_OPM-R-002
   --
   -- Description:               Product Wise Number of Batches Report
   --
   --
   -- Modification History
   -- --------------------------
   --- Version  Date         Author                    Change Reference / Description
   -- -------  -----------  -------------------       ------------------------------------
   --1.0      05-FEB-2020  Jayanta Ganguly            Initial Creation
   -- *************************************************************************/
   PROCEDURE XXJG_PRD_WISE_RPT_PRC (
      x_errbuf         OUT      VARCHAR2,
      x_retcode        OUT      NUMBER,
      p_inv_org        IN       NUMBER,
      p_department     IN       VARCHAR2,
      p_resource       IN       VARCHAR2,                      
      p_from_date      IN       VARCHAR2,
      p_to_date        IN       VARCHAR2,
--      p_dosage         IN       VARCHAR2, --Comment by JG
      p_product_type   IN       VARCHAR2,
      p_item_code      IN       VARCHAR2,
      p_user_id        IN       VARCHAR2
   )
   IS
      CURSOR cur_main
      IS
         SELECT   abc.product_code,
                  REPLACE (abc.product_name, '&', ' and ') product_name,
                  abc.dosage_type, abc.item_type,
                  SUM (abc.plan_qty) batch_size, abc.product_type, uom,
                  MAX
                     (CASE abc.act_month
                         WHEN TO_CHAR (TO_DATE (p_from_date,
                                                'YYYY/MM/DD HH24:MI:SS'
                                               ),
                                       'MON-YY'
                                      )
                            THEN cnt
                      END
                     ) AS month1,
                  MAX
                     (CASE abc.act_month
                         WHEN TO_CHAR
                                (ADD_MONTHS (TO_DATE (p_from_date,
                                                      'YYYY/MM/DD HH24:MI:SS'
                                                     ),
                                             1
                                            ),
                                 'MON-YY'
                                )
                            THEN cnt
                      END
                     ) AS month2,
                  MAX
                     (CASE abc.act_month
                         WHEN TO_CHAR
                                (ADD_MONTHS (TO_DATE (p_from_date,
                                                      'YYYY/MM/DD HH24:MI:SS'
                                                     ),
                                             2
                                            ),
                                 'MON-YY'
                                )
                            THEN cnt
                      END
                     ) AS month3,
                  MAX
                     (CASE abc.act_month
                         WHEN TO_CHAR
                                (ADD_MONTHS (TO_DATE (p_from_date,
                                                      'YYYY/MM/DD HH24:MI:SS'
                                                     ),
                                             3
                                            ),
                                 'MON-YY'
                                )
                            THEN cnt
                      END
                     ) AS month4,
                  MAX
                     (CASE abc.act_month
                         WHEN TO_CHAR
                                (ADD_MONTHS (TO_DATE (p_from_date,
                                                      'YYYY/MM/DD HH24:MI:SS'
                                                     ),
                                             4
                                            ),
                                 'MON-YY'
                                )
                            THEN cnt
                      END
                     ) AS month5,
                  MAX
                     (CASE abc.act_month
                         WHEN TO_CHAR
                                (ADD_MONTHS (TO_DATE (p_from_date,
                                                      'YYYY/MM/DD HH24:MI:SS'
                                                     ),
                                             5
                                            ),
                                 'MON-YY'
                                )
                            THEN cnt
                      END
                     ) AS month6,
                  MAX
                     (CASE abc.act_month
                         WHEN TO_CHAR
                                (ADD_MONTHS (TO_DATE (p_from_date,
                                                      'YYYY/MM/DD HH24:MI:SS'
                                                     ),
                                             6
                                            ),
                                 'MON-YY'
                                )
                            THEN cnt
                      END
                     ) AS month7,
                  MAX
                     (CASE abc.act_month
                         WHEN TO_CHAR
                                (ADD_MONTHS (TO_DATE (p_from_date,
                                                      'YYYY/MM/DD HH24:MI:SS'
                                                     ),
                                             7
                                            ),
                                 'MON-YY'
                                )
                            THEN cnt
                      END
                     ) AS month8,
                  MAX
                     (CASE abc.act_month
                         WHEN TO_CHAR
                                (ADD_MONTHS (TO_DATE (p_from_date,
                                                      'YYYY/MM/DD HH24:MI:SS'
                                                     ),
                                             8
                                            ),
                                 'MON-YY'
                                )
                            THEN cnt
                      END
                     ) AS month9,
                  MAX
                     (CASE abc.act_month
                         WHEN TO_CHAR
                                (ADD_MONTHS (TO_DATE (p_from_date,
                                                      'YYYY/MM/DD HH24:MI:SS'
                                                     ),
                                             9
                                            ),
                                 'MON-YY'
                                )
                            THEN cnt
                      END
                     ) AS month10,
                  MAX
                     (CASE abc.act_month
                         WHEN TO_CHAR
                                (ADD_MONTHS (TO_DATE (p_from_date,
                                                      'YYYY/MM/DD HH24:MI:SS'
                                                     ),
                                             10
                                            ),
                                 'MON-YY'
                                )
                            THEN cnt
                      END
                     ) AS month11,
                  MAX
                     (CASE abc.act_month
                         WHEN TO_CHAR
                                (ADD_MONTHS (TO_DATE (p_from_date,
                                                      'YYYY/MM/DD HH24:MI:SS'
                                                     ),
                                             11
                                            ),
                                 'MON-YY'
                                )
                            THEN cnt
                      END
                     ) AS month12,
                  SUM (cnt) tt_no_of_batch
             FROM (SELECT   msib.segment1 product_code,
                            msib.description product_name,
                            msib.attribute2 dosage_type,
                            (SELECT segment2
                               FROM mtl_item_categories_v mic
                              WHERE mic.category_set_name =
                                                        'Inventory'
                                AND mic.inventory_item_id =
                                                        msib.inventory_item_id
                                AND mic.organization_id = msib.organization_id)
                                                                    item_type,
                            
                            /*TO_CHAR (nvl(trunc(gbh.ACTUAL_START_DATE),trunc(gbh.plan_start_date)), 'MON-YY')*/
                            /*  Change on 9-Mar-2020 For FG Batch
                            TO_CHAR (DECODE(p_department,'LNP',NVL(TRUNC(gbh.actual_start_date),TRUNC(gbh.plan_start_date))
                                                    ,'SPL1',NVL(TRUNC(gbh.actual_start_date),TRUNC(gbh.plan_start_date))
                                                    ,'SPL2',NVL(TRUNC(gbh.actual_start_date),TRUNC(gbh.plan_start_date))
                                                    ,NVL(TRUNC(gbh.actual_start_date),TRUNC(TO_DATE(gbh.attribute1,'YYYY/MM/DD HH24:MI:SS')))  ) ,'MON-YY') act_month,*/
                            TO_CHAR
                               (DECODE
                                      (p_department,
                                       'LNP', NVL
                                                (TRUNC (gbh.actual_start_date),
                                                 TRUNC (gbh.plan_start_date)
                                                ),
                                       'SPL1', NVL
                                                (TRUNC (gbh.actual_start_date),
                                                 TRUNC (gbh.plan_start_date)
                                                ),
                                       'SPL2', NVL
                                                (TRUNC (gbh.actual_start_date),
                                                 TRUNC (gbh.plan_start_date)
                                                ),
                                       TRUNC (TO_DATE (gbh.attribute1,
                                                       'YYYY/MM/DD HH24:MI:SS'
                                                      )
                                             )
                                      ),
                                'MON-YY'
                               ) act_month,
                            COUNT (*) cnt,
                            (SELECT std_qty
                               FROM gmd_recipe_validity_rules grv
                              WHERE 1 = 1
                                AND grv.organization_id = msib.organization_id
                                AND grv.preference = 1
                                AND ROWNUM = 1
                                AND grv.recipe_id IN (
                                       SELECT gr2.recipe_id
                                         FROM gmd_recipes gr2
                                        WHERE gr2.recipe_no = msib.segment1
                                          AND gr2.owner_organization_id = msib.organization_id
--                                    and  gr2.RECIPE_VERSION  =( select max(gr1.RECIPE_VERSION) from   gmd_recipes gr1
                                    --                                    where gr1.RECIPE_NO=msib.segment1
                                    --                                    and gr1.OWNER_ORGANIZATION_ID= msib.organization_id)
                                    )) plan_qty,
                            (SELECT detail_uom
                               FROM gmd_recipe_validity_rules grv
                              WHERE 1 = 1
                                AND grv.organization_id = msib.organization_id
                                AND grv.preference = 1
                                AND ROWNUM = 1
                                AND grv.recipe_id IN (
                                       SELECT gr2.recipe_id
                                         FROM gmd_recipes gr2
                                        WHERE gr2.recipe_no = msib.segment1
                                          AND gr2.owner_organization_id =  msib.organization_id
--                                    and  gr2.RECIPE_VERSION  =( select max(gr1.RECIPE_VERSION) from   gmd_recipes gr1
                                    --                                    where gr1.RECIPE_NO=msib.segment1
                                    --                                    and gr1.OWNER_ORGANIZATION_ID= msib.organization_id)
                                    )) uom,
                            msib.attribute3 product_type
                       FROM gme_batch_header gbh,
                            org_organization_definitions ood,
                            mtl_system_items_b msib,
                            gme_material_details gmd,
                            fnd_lookup_values flv
--                            mtl_item_categories mic,
                   --                            mtl_categories_b_kfv mcb,
                   --                            mtl_category_sets_tl mcs
                   WHERE    1 = 1
                        AND gbh.organization_id = ood.organization_id
                        AND gmd.organization_id = msib.organization_id
                        AND gmd.inventory_item_id = msib.inventory_item_id
                        AND gbh.batch_id = gmd.batch_id
                        AND gmd.line_type = '1'
                        AND gmd.line_no = 1
                        AND gbh.batch_status <>
                                 -1
                                   --Cancel Batch not required  ---Added by JG
                        AND flv.lookup_type = 'XXJG_DEPT_SUBDEPT'
                        AND ood.organization_code = flv.tag
                        AND NVL (gbh.attribute_category, flv.lookup_code) = flv.lookup_code---Added by JG
                        AND flv.lookup_code = p_department
                        AND EXISTS (
                               SELECT 1
                                 FROM mtl_item_categories_v mic
                                WHERE mic.category_set_name = 'BEX_PLANNING_CATEGORY'
                                  AND mic.inventory_item_id =  msib.inventory_item_id
                                  AND mic.organization_id =  msib.organization_id
                                  AND mic.segment1 = flv.lookup_code)
                        AND gbh.batch_id IN (
                               SELECT batch_id
                                 FROM gme_batch_steps gbs
                                WHERE EXISTS (
                                         SELECT 1 --gov.oprn_id, gor.oprn_line_id, gov.oprn_no, gov.oprn_vers ,goa.activity, gor.resources
                                           FROM gmd_operation_resources gor,
                                                gmd_operation_activities goa,
                                                gmd_operations_vl gov
                                          WHERE gov.oprn_id = goa.oprn_id
                                            AND gor.oprn_line_id =  goa.oprn_line_id
                                            AND gov.oprn_id = gbs.oprn_id
                                            AND gor.resources = NVL (p_resource, gor.resources )))
--                        AND gbh.batch_status != -1
                        --                        AND msib.inventory_item_id = mic.inventory_item_id
                        --                        AND msib.organization_id = mic.organization_id
                        --                        AND mcb.category_id = mic.category_id
                        --                        AND mcs.category_set_name = 'Inventory'
                        --                        AND mic.category_set_id = mcs.category_set_id
                        ----               AND msib.segment1 = '1020000292'
                        AND gbh.organization_id = NVL (p_inv_org, gbh.organization_id)
                        /* AND nvl(trunc(gbh.ACTUAL_START_DATE),trunc(gbh.plan_start_date))
                                BETWEEN TO_DATE (p_from_date,'YYYY/MM/DD HH24:MI:SS')
                                    AND TO_DATE (p_to_date,'YYYY/MM/DD HH24:MI:SS' )*/
                        --AND NVL(TRUNC(gbh.actual_start_date),TRUNC(gbh.plan_start_date))
                        ----Added by JG
                        AND DECODE (p_department,
                                    'LNP', NVL (TRUNC (gbh.actual_start_date),
                                                TRUNC (gbh.plan_start_date)
                                               ),
                                    'SPL1', NVL (TRUNC (gbh.actual_start_date),
                                                 TRUNC (gbh.plan_start_date)
                                                ),
                                    'SPL2', NVL (TRUNC (gbh.actual_start_date),
                                                 TRUNC (gbh.plan_start_date)
                                                )
                                                 ---,NVL(TRUNC(gbh.actual_start_date),TRUNC(TO_DATE(gbh.attribute1,'YYYY/MM/DD HH24:MI:SS')))  )  -- Change on 9-Mar-2020 For FG Batch
                            ,
                                    TRUNC (TO_DATE (gbh.attribute1,
                                                    'YYYY/MM/DD HH24:MI:SS'
                                                   )
                                          )
                                   )
                               BETWEEN TRUNC (TO_DATE (p_from_date,
                                                       'YYYY/MM/DD HH24:MI:SS'
                                                      )
                                             )
                                   AND TRUNC (TO_DATE (p_to_date,
                                                       'YYYY/MM/DD HH24:MI:SS'
                                                      )
                                             )
                        AND msib.inventory_item_id = NVL (p_item_code, msib.inventory_item_id)
                        AND NVL (msib.attribute3, 'NA') =  NVL (p_product_type, NVL (msib.attribute3, 'NA') )
                   GROUP BY msib.segment1,
                            msib.inventory_item_id,
                            msib.organization_id,
                            msib.description,
                            msib.attribute2,
                            msib.attribute3,
                            msib.organization_id,
                            --TO_CHAR (nvl(trunc(gbh.ACTUAL_START_DATE),trunc(gbh.plan_start_date)), 'MON-YY')
                            TO_CHAR
                               (DECODE
                                      (p_department,
                                       'LNP', NVL
                                                (TRUNC (gbh.actual_start_date),
                                                 TRUNC (gbh.plan_start_date)
                                                ),
                                       'SPL1', NVL
                                                (TRUNC (gbh.actual_start_date),
                                                 TRUNC (gbh.plan_start_date)
                                                ),
                                       'SPL2', NVL
                                                (TRUNC (gbh.actual_start_date),
                                                 TRUNC (gbh.plan_start_date)
                                                ),
                                       TRUNC (TO_DATE (gbh.attribute1,
                                                       'YYYY/MM/DD HH24:MI:SS'
                                                      )
                                             )
                                      ),
                                'MON-YY'
                               )) abc
         GROUP BY abc.product_code,
                  abc.item_type,
                  abc.product_name,                  ---comment on 8-Sep-2020  abc.act_month, ---Added on 08-Mar-2020
                  abc.dosage_type,
                  uom,
                  abc.product_type
         ORDER BY abc.product_code;

      lv_organization_name   VARCHAR2 (3000);
      l_full_name            VARCHAR2 (3000);
   BEGIN
      --fnd_file.put_line (fnd_file.LOG,'p_from_date:'||p_from_date);
      --fnd_file.put_line (fnd_file.LOG,'p_to_date:' || p_to_date );
      BEGIN
         SELECT TRIM (   INITCAP (a.title)
                      || ' '
                      || INITCAP (   a.first_name
                                  || ' '
                                  || a.middle_names
                                  || DECODE (a.middle_names, NULL, '', ' ')
                                  || a.last_name
                                 )
                     )
           INTO l_full_name
           FROM per_all_people_f a, fnd_user fu
          WHERE fu.employee_id = a.person_id AND fu.user_id = p_user_id;
                                               --fnd_profile.value('USER_ID');

         fnd_file.put_line (fnd_file.LOG, 'USER_ID:' || p_user_id);
         DBMS_OUTPUT.put_line ('P_USER_ID' || p_user_id);
      EXCEPTION
         WHEN OTHERS
         THEN
            fnd_file.put_line (fnd_file.LOG, 'USER_ID' || ' - ' || SQLERRM);
            DBMS_OUTPUT.put_line ('USER_ID' || SQLCODE || ' - ' || SQLERRM);
      END;

      BEGIN
         SELECT organization_name
           INTO lv_organization_name
           FROM org_organization_definitions
          WHERE organization_id = p_inv_org;

         fnd_file.put_line (fnd_file.LOG,
                            'ORGANIZATION_NAME:' || lv_organization_name
                           );
         DBMS_OUTPUT.put_line ('lv_ORGANIZATION_NAME:' || lv_organization_name);
      EXCEPTION
         WHEN OTHERS
         THEN
            fnd_file.put_line (fnd_file.LOG,
                               'lv_organization_name' || ' - ' || SQLERRM
                              );
            DBMS_OUTPUT.put_line (   'lv_organization_name'
                                  || SQLCODE
                                  || ' - '
                                  || SQLERRM
                                 );
      END;

      BEGIN
         fnd_file.put_line (fnd_file.output,
                            '<?xml version="1.0" encoding="UTF-8"?>'
                           );
         fnd_file.put_line (fnd_file.output, '<XXJG_PRD_WISE_RPT>');
         fnd_file.put_line (fnd_file.output,
                               '<P_FROM_DATE>'
                            || TO_DATE (TO_DATE (p_from_date,
                                                 'YYYY/MM/DD HH24:MI:SS'
                                                ),
                                        'DD-MON-YY'
                                       )
                            || '</P_FROM_DATE>'
                           );
         fnd_file.put_line (fnd_file.output,
                               '<P_INV_ORG>'
                            || lv_organization_name
                            || '</P_INV_ORG>'
                           );
         fnd_file.put_line (fnd_file.output,
                               '<P_TO_DATE>'
                            || TO_DATE (TO_DATE (p_to_date,
                                                 'YYYY/MM/DD HH24:MI:SS'
                                                ),
                                        'DD-MON-YY'
                                       )
                            || '</P_TO_DATE>'
                           );
      --      fnd_file.put_line (fnd_file.output, '<P_DOSAGE>' || p_dosage || '</P_DOSAGE>' );
         fnd_file.put_line (fnd_file.output,
                               '<P_PRODUCT_TYPE>'
                            || p_product_type
                            || '</P_PRODUCT_TYPE>'
                           );
         fnd_file.put_line (fnd_file.output,
                            '<P_ITEM_CODE>' || p_item_code || '</P_ITEM_CODE>'
                           );
         fnd_file.put_line (fnd_file.output,
                               '<P_DEPARTMENT>'
                            || p_department
                            || '</P_DEPARTMENT>'
                           );
         fnd_file.put_line (fnd_file.output,
                            '<P_RESOURCE>' || p_resource || '</P_RESOURCE>'
                           );                                   ---Added By JG
         fnd_file.put_line (fnd_file.output,
                            '<PRINTED_BY>' || l_full_name || '</PRINTED_BY>'
                           );                                   ---Added By JG
         fnd_file.put_line (fnd_file.output,
                               '<MONTH1>'
                            || TO_CHAR (TO_DATE (p_from_date,
                                                 'YYYY/MM/DD HH24:MI:SS'
                                                ),
                                        'MON-YY'
                                       )
                            || '</MONTH1>'
                           );
         fnd_file.put_line
                    (fnd_file.output,
                        '<MONTH2>'
                     || TO_CHAR
                               (ADD_MONTHS (TO_DATE (p_from_date,
                                                     'YYYY/MM/DD HH24:MI:SS'
                                                    ),
                                            1
                                           ),
                                'MON-YY'
                               )
                     || '</MONTH2>'
                    );
         fnd_file.put_line
                    (fnd_file.output,
                        '<MONTH3>'
                     || TO_CHAR
                               (ADD_MONTHS (TO_DATE (p_from_date,
                                                     'YYYY/MM/DD HH24:MI:SS'
                                                    ),
                                            2
                                           ),
                                'MON-YY'
                               )
                     || '</MONTH3>'
                    );
         fnd_file.put_line
                    (fnd_file.output,
                        '<MONTH4>'
                     || TO_CHAR
                               (ADD_MONTHS (TO_DATE (p_from_date,
                                                     'YYYY/MM/DD HH24:MI:SS'
                                                    ),
                                            3
                                           ),
                                'MON-YY'
                               )
                     || '</MONTH4>'
                    );
         fnd_file.put_line
                    (fnd_file.output,
                        '<MONTH5>'
                     || TO_CHAR
                               (ADD_MONTHS (TO_DATE (p_from_date,
                                                     'YYYY/MM/DD HH24:MI:SS'
                                                    ),
                                            4
                                           ),
                                'MON-YY'
                               )
                     || '</MONTH5>'
                    );
         fnd_file.put_line
                    (fnd_file.output,
                        '<MONTH6>'
                     || TO_CHAR
                               (ADD_MONTHS (TO_DATE (p_from_date,
                                                     'YYYY/MM/DD HH24:MI:SS'
                                                    ),
                                            5
                                           ),
                                'MON-YY'
                               )
                     || '</MONTH6>'
                    );
         fnd_file.put_line
                    (fnd_file.output,
                        '<MONTH7>'
                     || TO_CHAR
                               (ADD_MONTHS (TO_DATE (p_from_date,
                                                     'YYYY/MM/DD HH24:MI:SS'
                                                    ),
                                            6
                                           ),
                                'MON-YY'
                               )
                     || '</MONTH7>'
                    );
         fnd_file.put_line
                    (fnd_file.output,
                        '<MONTH8>'
                     || TO_CHAR
                               (ADD_MONTHS (TO_DATE (p_from_date,
                                                     'YYYY/MM/DD HH24:MI:SS'
                                                    ),
                                            7
                                           ),
                                'MON-YY'
                               )
                     || '</MONTH8>'
                    );
         fnd_file.put_line
                    (fnd_file.output,
                        '<MONTH9>'
                     || TO_CHAR
                               (ADD_MONTHS (TO_DATE (p_from_date,
                                                     'YYYY/MM/DD HH24:MI:SS'
                                                    ),
                                            8
                                           ),
                                'MON-YY'
                               )
                     || '</MONTH9>'
                    );
         fnd_file.put_line
                    (fnd_file.output,
                        '<MONTH10>'
                     || TO_CHAR
                               (ADD_MONTHS (TO_DATE (p_from_date,
                                                     'YYYY/MM/DD HH24:MI:SS'
                                                    ),
                                            9
                                           ),
                                'MON-YY'
                               )
                     || '</MONTH10>'
                    );
         fnd_file.put_line
                    (fnd_file.output,
                        '<MONTH11>'
                     || TO_CHAR
                               (ADD_MONTHS (TO_DATE (p_from_date,
                                                     'YYYY/MM/DD HH24:MI:SS'
                                                    ),
                                            10
                                           ),
                                'MON-YY'
                               )
                     || '</MONTH11>'
                    );
         fnd_file.put_line
                    (fnd_file.output,
                        '<MONTH12>'
                     || TO_CHAR
                               (ADD_MONTHS (TO_DATE (p_from_date,
                                                     'YYYY/MM/DD HH24:MI:SS'
                                                    ),
                                            11
                                           ),
                                'MON-YY'
                               )
                     || '</MONTH12>'
                    );

         FOR i IN cur_main
         LOOP
            fnd_file.put_line (fnd_file.output, '<XXJG_MAIN_GRP>');
            fnd_file.put_line (fnd_file.output,
                                  '<PRODUCT_CODE>'
                               || i.product_code
                               || '</PRODUCT_CODE>'
                              );
            fnd_file.put_line (fnd_file.output,
                                  '<PRODUCT_NAME>'
                               || i.product_name
                               || '</PRODUCT_NAME>'
                              );
            fnd_file.put_line (fnd_file.output,
                               '<ITEM_TYPE>' || i.item_type || '</ITEM_TYPE>'
                              );
            fnd_file.put_line (fnd_file.output,
                                  '<PRODUCT_TYPE>'
                               || i.product_type
                               || '</PRODUCT_TYPE>'
                              );
            fnd_file.put_line (fnd_file.output,
                               '<DOSAGE>' || i.dosage_type || '</DOSAGE>'
                              );
            fnd_file.put_line (fnd_file.output,
                               '<MONTH8>' || i.month8 || '</MONTH8>'
                              );
            fnd_file.put_line (fnd_file.output,
                               '<MONTH1>' || i.month1 || '</MONTH1>'
                              );
            fnd_file.put_line (fnd_file.output,
                               '<MONTH2>' || i.month2 || '</MONTH2>'
                              );
            fnd_file.put_line (fnd_file.output,
                               '<MONTH3>' || i.month3 || '</MONTH3>'
                              );
            fnd_file.put_line (fnd_file.output,
                               '<MONTH4>' || i.month4 || '</MONTH4>'
                              );
            fnd_file.put_line (fnd_file.output,
                               '<MONTH5>' || i.month5 || '</MONTH5>'
                              );
            fnd_file.put_line (fnd_file.output,
                               '<MONTH6>' || i.month6 || '</MONTH6>'
                              );
            fnd_file.put_line (fnd_file.output,
                               '<MONTH7>' || i.month7 || '</MONTH7>'
                              );
            fnd_file.put_line (fnd_file.output,
                               '<MONTH9>' || i.month9 || '</MONTH9>'
                              );
            fnd_file.put_line (fnd_file.output,
                               '<MONTH10>' || i.month10 || '</MONTH10>'
                              );
            fnd_file.put_line (fnd_file.output,
                               '<MONTH11>' || i.month11 || '</MONTH11>'
                              );
            fnd_file.put_line (fnd_file.output,
                               '<MONTH12>' || i.month12 || '</MONTH12>'
                              );
            fnd_file.put_line (fnd_file.output,
                               '<BATCH_SIZE>' || i.batch_size
                               || '</BATCH_SIZE>'
                              );
            fnd_file.put_line (fnd_file.output, '<UOM>' || i.uom || '</UOM>');
            fnd_file.put_line (fnd_file.output,
                                  '<TT_NO_OF_BATCH>'
                               || i.tt_no_of_batch
                               || '</TT_NO_OF_BATCH>'
                              );
            fnd_file.put_line (fnd_file.output, '</XXJG_MAIN_GRP>');
            ---fnd_file.put_line (fnd_file.LOG, 'Item:'||i.product_code);
            DBMS_OUTPUT.put_line ('Item:' || i.product_code);
         END LOOP;

         ---fnd_file.put_line (fnd_file.output, 'XXJG_PRD_WISE_RPT XML');
         fnd_file.put_line (fnd_file.output, '</XXJG_PRD_WISE_RPT>');
         NULL;
      EXCEPTION
         WHEN OTHERS
         THEN
            fnd_file.put_line (fnd_file.LOG,
                               '~~~XXJG_PRD_WISE_RPT XML:' || ' - '
                               || SQLERRM
                              );
            DBMS_OUTPUT.put_line (   '~~~XXJG_PRD_WISE_RPT XML'
                                  || SQLCODE
                                  || ' - '
                                  || SQLERRM
                                 );
      END;

      DBMS_OUTPUT.put_line ('XXJG_PRD_WISE_RPT');
   EXCEPTION
      WHEN OTHERS
      THEN
         fnd_file.put_line
            (fnd_file.LOG,
             'Exception In Procedure  XXJG_prd_wise_rpt_pkg.XXJG_prd_wise_rpt_prc;'
            );
         fnd_file.put_line (fnd_file.LOG, SQLCODE || ' - ' || SQLERRM);
         DBMS_OUTPUT.put_line (   'XXJG_PRD_WISE_RPT'
                               || SQLCODE
                               || ' - '
                               || SQLERRM
                              );
   END XXJG_PRD_WISE_RPT_PRC;
END XXJG_PRD_WISE_RPT_PKG;
/