Thursday, 19 June 2025

Undo Accounting GL Data Fix

 /*API for Un-Accounting AR*/

CREATE OR replace PROCEDURE Xx_unaccounting_gl (org_id    IN NUMBER,
                                                gl_date   IN DATE,
                                                cm_trx_id IN NUMBER,
                                                event_id  IN NUMBER)
AS
  l_user_id           NUMBER := 9999;
  l_responsibility_id NUMBER := 99999;
  l_org_id            NUMBER := org_id;
  l_gl_date           DATE := gl_date; --  to_date(p_gl_date,'DD-MM-YYYY');
  l_customer_trx_id   NUMBER := cm_trx_id;
  l_event_id          NUMBER := event_id;
  l_read_only_mode    VARCHAR2(1) := 'N';
  l_bug_number        NUMBER := 8568656;
  p_api_version       NUMBER;
  p_event_id          NUMBER;
  p_init_msg_list     VARCHAR2(300);
  p_application_id    INTEGER;
  p_reversal_method   VARCHAR2(300);
  p_gl_date           DATE;
  p_post_to_gl_flag   VARCHAR2(300);
  x_return_status     VARCHAR2(300);
  x_msg_count         NUMBER;
  x_msg_data          VARCHAR2(4000);
  x_rev_ae_header_id  INTEGER;
  x_rev_event_id      INTEGER;
  x_rev_entity_id     INTEGER;
  x_new_event_id      INTEGER;
  x_new_entity_id     INTEGER;
  CURSOR c_transactions IS
    SELECT DISTINCT ct.customer_trx_id,
                    gld.event_id,
                    gld.gl_date,
                    xah.gl_transfer_status_code
    FROM   ra_customer_trx_all ct,
           ra_cust_trx_line_gl_dist_all gld,
           xla_events xe,
           xla_ae_headers xah
    WHERE  ct.customer_trx_id = l_customer_trx_id
           AND ct.customer_trx_id = gld.customer_trx_id
           AND gld.event_id = xe.event_id
           AND gld.account_set_flag = 'N'
           AND xe.application_id = 222
           AND xah.event_id = xe.event_id
           AND xe.event_id = l_event_id
           AND xah.application_id = 222;
  PROCEDURE Backup_table_gldist
  IS
    l_create_bk_gld VARCHAR2(500);
  BEGIN
      l_create_bk_gld := 'create table temp_gld_bk_'
                         ||l_bug_number
                         ||'  as                       select * from ra_cust_trx_line_gl_dist_all                       where 1=2';

      EXECUTE IMMEDIATE l_create_bk_gld;
  EXCEPTION
    WHEN OTHERS THEN
               IF SQLCODE = -955 THEN
                 NULL;
               ELSE
                 RAISE;
               END IF;
  END backup_table_gldist;
  PROCEDURE Backup_table_xla
  IS
    l_create_bk_xla VARCHAR2(500);
  BEGIN
      l_create_bk_xla := 'create table temp_xla_bk_'
                         ||l_bug_number
                         ||'  as                       select * from xla_events                       where 1=2';

      EXECUTE IMMEDIATE l_create_bk_xla;
  EXCEPTION
    WHEN OTHERS THEN
               IF SQLCODE = -955 THEN
                 NULL;
               ELSE
                 RAISE;
               END IF;
  END backup_table_xla;
  PROCEDURE Insert_into_backup_gldist(p_trx_id NUMBER)
  IS
    l_insert_gldist VARCHAR2(500);
  BEGIN
      l_insert_gldist := 'insert into temp_gld_bk_'
                         ||l_bug_number
                         || '( select * from ra_cust_trx_line_gl_dist_all                    where customer_trx_id = '
                         ||p_trx_id
                         ||')';

      EXECUTE IMMEDIATE l_insert_gldist;
  END;
  PROCEDURE Insert_into_backup_xla(p_ev_id NUMBER)
  IS
    l_insert_xla VARCHAR2(500);
  BEGIN
      l_insert_xla := 'insert into temp_xla_bk_'
                      ||l_bug_number
                      || '( select * from xla_events                    where event_id  = '
                      ||p_ev_id
                      ||')';

      EXECUTE IMMEDIATE l_insert_xla;
  END insert_into_backup_xla;
  PROCEDURE Debug(s VARCHAR2)
  IS
  BEGIN
      dbms_output.Put_line(s);
  END;
  FUNCTION Print_spaces(n IN NUMBER)
  RETURN VARCHAR2
  IS
    l_return_string VARCHAR2(100);
  BEGIN
      SELECT Substr('                                                   ', 1, n)
      INTO   l_return_string
      FROM   dual;

      RETURN( l_return_string );
  END;
BEGIN
    fnd_global.Apps_initialize(l_user_id, l_responsibility_id, 222);

    mo_global.Init('AR');

    mo_global.Set_policy_context('S', l_org_id);

    IF Nvl(Upper(l_read_only_mode), 'Y') = 'N' THEN
      backup_table_gldist;

      backup_table_xla;
    END IF;

    Debug('CTX_ID         Event_Id        ');

    Debug('-------------- ------------------');

    FOR rec IN c_transactions LOOP
        Debug(rec.customer_trx_id
              ||'             '
              ||rec.event_id);

        IF Nvl(Upper(l_read_only_mode), 'Y') = 'N' THEN
          Insert_into_backup_gldist(rec.customer_trx_id);

          Insert_into_backup_xla(rec.event_id);

          p_api_version := 1.0;

          p_init_msg_list := fnd_api.g_true;

          p_application_id := 222;

          p_event_id := rec.event_id; -- event that needs to be reversed.

          p_reversal_method := 'SIDE';

          p_post_to_gl_flag := 'N';

          /*  p_gl_date            := trunc(sysdate); */
          p_gl_date := l_gl_date;

          x_return_status := NULL;

          dbms_output.Put_line('event_id -'
                               ||p_event_id);

          IF Nvl(rec.gl_transfer_status_code, 'N') = 'N' THEN
            xla_datafixes_pub.Delete_journal_entries (p_api_version,
            p_init_msg_list
            ,
            p_application_id, p_event_id, x_return_status, x_msg_count,
            x_msg_data);
          ELSE
            xla_datafixes_pub.Reverse_journal_entries (p_api_version,
            p_init_msg_list,
            p_application_id, p_event_id, p_reversal_method, p_gl_date,
            p_post_to_gl_flag,
            x_return_status, x_msg_count, x_msg_data, x_rev_ae_header_id,
            x_rev_event_id
            ,
            x_rev_entity_id, x_new_event_id, x_new_entity_id);
          END IF;

          dbms_output.Put_line('status -'
                               ||x_return_status);

          dbms_output.Put_line('x_rev_ae_header_id -'
                               ||x_rev_ae_header_id);

          dbms_output.Put_line('x_rev_event_id -'
                               ||x_rev_event_id); -- this is E2

          dbms_output.Put_line('x_new_event_id  -'
                               ||x_new_event_id); -- this is E3

          dbms_output.Put_line('x_new_entity_id -'
                               ||x_new_entity_id);

          dbms_output.Put_line('x_msg_data  -'
                               ||x_msg_data);

          IF x_return_status = 'S' THEN
            Debug('Updating the AR Tables for customer_trx_id '
                  ||rec.customer_trx_id);

            arp_global.g_allow_datafix := TRUE;

            UPDATE ra_cust_trx_line_gl_dist_all
            SET    posting_control_id = -3,
                   gl_posted_date = NULL,
                   gl_date = l_gl_date
            WHERE  customer_trx_id = rec.customer_trx_id
                   AND account_set_flag = 'N'
                   AND event_id = rec.event_id
                   AND posting_control_id <> -3;

            UPDATE xla_events
            SET    event_date = l_gl_date
            WHERE  event_id = rec.event_id;

            arp_global.g_allow_datafix := FALSE;

            Debug('Updated the AR Tables for customer_trx_id '
                  ||rec.customer_trx_id);
          END IF;
        END IF;
    END LOOP;

    COMMIT;
EXCEPTION
  WHEN OTHERS THEN
             ROLLBACK;

             RAISE;
END;

/ 

No comments:

Post a Comment