Sunday, 17 June 2018

GL Daily rates Interface in Oracle Apps R12


create or replace PACKAGE XXFIN_GL_XE_DRATES_PKG
IS

  PROCEDURE XXFIN_DAILY_RATES_PROC(
      retcode OUT NUMBER,
      errbuff OUT VARCHAR2);
 
END XXFIN_GL_XE_DRATES_PKG;
/


create or replace PACKAGE BODY XXFIN_GL_XE_DRATES_PKG
IS

 
PROCEDURE XXFIN_DAILY_RATES_PROC(
    retcode OUT NUMBER,
    errbuff OUT VARCHAR2)
IS
 
  CURSOR cur_drates
  IS
    SELECT gers.from_currency from_currency ,
      gers.amount amount ,
      'Corporate' user_conversion_type ,
      'I' MODE_FLAG ,
      gers.from_conversion_date conversion_date
      -- ,substr(gers.from_conversion_date,1,10) conversion_date_w
      ,
      SUBSTR(gers.from_conversion_date,1,10)
      ||' '
      ||SUBSTR(gers.from_conversion_date,12,8) Conversion_date_from ,
      SUBSTR(gers.from_conversion_date,1,10)
      ||' '
      ||SUBSTR(gers.from_conversion_date,12,8) Conversion_date_to ,
      gers.to_currency to_currency ,
      gers.conversion_rate conversion_rate
    FROM xxfin_gl_exchange_rates_stg gers
    WHERE SUBSTR(gers.from_conversion_date,1,10)=TO_CHAR(sysdate,'YYYY-MM-DD');
 
  LV_FROM_CURRENCY        VARCHAR2(15);
  LV_FROM_CURRENCY2        VARCHAR2(15);
  LV_TO_CURRENCY          VARCHAR2(15);
  LV_TO_CURRENCY2          VARCHAR2(15);
  LV_USER_CONVERSION_TYPE VARCHAR2(30);
  LV_USER_CONVERSION_TYPE2 VARCHAR2(30);
  LV_CONVERSION_RATE      NUMBER;
  LN_USER_ID              NUMBER;
  LV_DATE_FROM DATE;
  LV_DATE_TO DATE;
  LV_STATUS varchar2(10);
  LN_ACCESS_SET_ID NUMBER(20);
  LN_LEDGER_ID  NUMBER(20);
  LN_APPLID NUMBER(20);
  LV_UC_TYPE              VARCHAR2(100);
  LV_ERR_FLAG             VARCHAR2(1):= 'A';
 
BEGIN
 
  FOR i IN cur_drates
  LOOP
 
  LV_ERR_FLAG:='A';
 
   
    BEGIN
      LN_USER_ID:=FND_GLOBAL.USER_ID;
    END;
   
   
    --start from currency validation
    BEGIN
    LV_FROM_CURRENCY2:=i.from_currency;
      SELECT CURRENCY_CODE
      INTO LV_FROM_CURRENCY
      FROM FND_CURRENCIES
      WHERE  CURRENCY_CODE=i.from_currency
         AND ENABLED_FLAG='Y';
    EXCEPTION
    WHEN NO_DATA_FOUND THEN
      lv_from_currency := NULL;
      lv_err_flag      := 'E';
      FND_FILE.PUT_line(FND_FILE.LOG,'The Currency Code '||LV_FROM_CURRENCY2||' is not defined or not enabled.');
    END;
   
     --start to currency validation
    BEGIN
    LV_FROM_CURRENCY2:=i.to_currency;
      SELECT CURRENCY_CODE
      INTO LV_TO_CURRENCY
      FROM FND_CURRENCIES
      WHERE ENABLED_FLAG='Y'
      AND CURRENCY_CODE =i.to_currency;
    EXCEPTION
    WHEN NO_DATA_FOUND THEN
      LV_TO_CURRENCY := NULL;
      lv_err_flag      := 'E';
   
     FND_FILE.PUT_line(FND_FILE.LOG,'The Currency Code '||LV_TO_CURRENCY2||' is not defined or not enabled.');
    END;
     --end to currency validation
   
   
    --start user conversion type validation.
    BEGIN
    LV_USER_CONVERSION_TYPE2:=i.user_conversion_type;
      SELECT USER_CONVERSION_TYPE
      INTO LV_USER_CONVERSION_TYPE
      FROM GL_DAILY_CONVERSION_TYPES
      WHERE USER_CONVERSION_TYPE=i.user_conversion_type;
    EXCEPTION
    WHEN NO_DATA_FOUND THEN
      LV_USER_CONVERSION_TYPE := NULL;
      lv_err_flag             := 'E';
      FND_FILE.PUT_line(FND_FILE.LOG,'The USER_CONVERSION_TYPE '||LV_USER_CONVERSION_TYPE2||' is not defined.');
    END;
    --end user conversion type validation
   
    --start validating dates
    begin
    LV_DATE_FROM:=TO_DATE(i.Conversion_date_from,'YYYY-MM-DD HH24:MI:SS');
    LV_DATE_TO:=TO_DATE(i.Conversion_date_to,'YYYY-MM-DD HH24:MI:SS');
    LN_ACCESS_SET_ID:= FND_PROFILE.value('GL_ACCESS_SET_ID');
    LN_LEDGER_ID:=GL_ACCESS_SET_SECURITY_PKG.get_default_ledger_id(ln_access_set_id,'R');
    LN_APPLID:=fnd_profile.value('RESP_APPL_ID');
    SELECT PS.CLOSING_STATUS
    INTO LV_STATUS
    FROM gl_period_statuses PS
    WHERE PERIOD_NAME= TO_CHAR(TO_DATE(LV_DATE_FROM),'MON-YY')
      AND PS.APPLICATION_ID=LN_APPLID
      AND PS.LEDGER_ID=LN_LEDGER_ID;
     
 
  IF LV_STATUS in ('O','F') THEN
     NULL;
  ELSE
     lv_err_flag             := 'E';
     FND_FILE.PUT_line(FND_FILE.LOG,'Date '||LV_DATE_FROM||' is not in an open or future');
  END IF;
 
  exception
  when no_data_found then
  FND_FILE.PUT_line(FND_FILE.LOG,'Date '||LV_DATE_FROM||' is not in an open or future for this combination'||LN_APPLID||','||LN_LEDGER_ID||','||LN_ACCESS_SET_ID);
  when others then
  FND_FILE.PUT_line(FND_FILE.LOG,'Error caused by date issue '||SQLCODE||','||SQLERRM);
end;
    --end validating dates
   
   
    IF LV_ERR_FLAG='A' THEN
      INSERT
      INTO GL_DAILY_RATES_INTERFACE
        (
          FROM_CURRENCY,
          TO_CURRENCY,
          FROM_CONVERSION_DATE,
          TO_CONVERSION_DATE,
          USER_CONVERSION_TYPE,
          CONVERSION_RATE,
          MODE_FLAG,
          USER_ID
        )
        VALUES
        (
          LV_FROM_CURRENCY,
          LV_TO_CURRENCY,
          LV_DATE_FROM,
          LV_DATE_TO,
          LV_USER_CONVERSION_TYPE,
          i.conversion_rate,
          i.MODE_FLAG,
          LN_USER_ID);
    END IF;
  END LOOP;
  COMMIT;
END XXFIN_DAILY_RATES_PROC;

END XXFIN_GL_XE_DRATES_PKG;
/

How to add the concurrent program to request group from backend in Oracle Apps R12

declare

  l_program_short_name  VARCHAR2 (200);
  l_program_application VARCHAR2 (200);
  l_request_group       VARCHAR2 (200);
  l_group_application   VARCHAR2 (200);
  l_check               VARCHAR2 (2);
 
BEGIN
 
  l_program_short_name  := 'XXFIN_GL_XE_LOADER';
  l_program_application := 'General Ledger';
  l_request_group       := 'GL Concurrent Program Group';
  l_group_application   := 'General Ledger';
 
  --Calling API to assign concurrent program to a reqest group
 
       fnd_program.add_to_group (program_short_name  => l_program_short_name,
                                  program_application => l_program_application,
                                  request_group       => l_request_group,
                                  group_application   => l_group_application                         
                                 );
 
  COMMIT;
 
 
  BEGIN
 
    --To check whether a Concurrent Program assigned to request group or not
 
     SELECT 'Y'
       INTO l_check
       FROM fnd_request_groups frg,
      fnd_request_group_units frgu,
      fnd_concurrent_programs fcp
      WHERE frg.request_group_id    = frgu.request_group_id
    AND frg.application_id          = frgu.application_id
    AND frgu.request_unit_id        = fcp.concurrent_program_id
    AND frgu.unit_application_id    = fcp.application_id
    AND fcp.concurrent_program_name = 'XXFIN_GL_XE_LOADER';
 
    dbms_output.put_line ('Adding Concurrent Program "XXFIN_GL_XE_LOADER" to Request Group Succeeded');
 
  EXCEPTION
  WHEN no_data_found THEN
    dbms_output.put_line ('Adding Concurrent Program "XXFIN_GL_XE_LOADER" to Request Group Failed');
  END;
END;
/

How to add the request set to request group from backend in Oracle Apps R12


declare
 
  l_request_set_code  VARCHAR2 (200); 
  l_set_appl_short_name VARCHAR2 (200);
  l_request_group       VARCHAR2 (200);
  l_group_application   VARCHAR2 (200);
BEGIN

  l_request_set_code:='FNDRSSUB94';  -- Request Set Code
  l_set_appl_short_name:='SQLGL'; -- Application Code Short Name
  l_request_group:='GL Concurrent Program Group'; -- Request Group Name
  l_group_application:='SQLGL'; -- Application of the RG Name

  fnd_set.add_set_to_group (request_set       => l_request_set_code, 
                            set_application   => l_set_appl_short_name,
                            request_group     => l_request_group,
                            group_application => l_group_application);
                           
  dbms_output.put_line('Request Set has been attached to Request Group Successfully ');
  COMMIT;
EXCEPTION
  WHEN DUP_VAL_ON_INDEX
  THEN
    dbms_output.put_line ('Request Set is already available in the Request group');
  WHEN OTHERS
  THEN
    dbms_output.put_line ('Others Exception adding Request Set. ERROR:' || SQLERRM);
END;
/

How to create and apply receipt in AR by using API in Oracle Apps R12



--CREATING PACKAGE SPECIFICATION TO CREATE MULTIPLE RECEIPTS WITH SAME RECEIPT NUMBER FOR DIFFERENT ORGANIZATIONS.

CREATE OR REPLACE PACKAGE xxfin_cus_form_pkg
IS

  PROCEDURE xxfin_cus_form_rec_prc(
      errbuff OUT VARCHAR2 ,
      retcode OUT NUMBER ,
      ip_receipt_num VARCHAR2 ,
      ip_cus_num     VARCHAR2);
  PROCEDURE xxfin_cus_form_rec_apply(
      ip_cash_receipt_id IN NUMBER ,
      ip_cus_num         IN NUMBER ,
      ip_receipt_num     IN VARCHAR2 ,
      ip_org_id          IN NUMBER ,
      op_return_status1 OUT VARCHAR2 );
END xxfin_cus_form_pkg;
/


--CREATING PACKAGE BODY TO CREATE MULTIPLE RECEIPTS WITH SAME RECEIPT NUMBER FOR DIFFERENT ORGANIZATIONS.

CREATE OR REPLACE PACKAGE body xxfin_cus_form_pkg
IS


--CREATING PROCEDURE TO CREATE MULTIPLE RECEIPT WITH SAME RECEIPT NUMBER FOR DIFFERENT ORG'S.
PROCEDURE xxfin_cus_form_rec_prc(
    errbuff OUT VARCHAR2 ,
    retcode OUT NUMBER ,
    ip_receipt_num VARCHAR2 ,
    ip_cus_num     VARCHAR2 )
IS
  l_return_status   VARCHAR2(1);
  l_msg_count       NUMBER;
  lv_trx_number     VARCHAR2(200);
  l_msg_data        VARCHAR2(240);
  l_cash_receipt_id NUMBER;
  p_count           NUMBER := 0;
  l_attribute_rec AR_RECEIPT_API_PUB.attribute_rec_type;
  l_customer_trx_id         NUMBER;
  gc_user_name              VARCHAR2 (100);
  gc_responsibility_name    VARCHAR2 (100);
  gc_application_short_name VARCHAR2 (100);
  gc_org_id                 NUMBER;
  l_error_msg               VARCHAR2 (500);
  l_org_id                  NUMBER;
  l_return_status1_apply    VARCHAR2(240);
  l_status                  VARCHAR2(30);
  lv_cr_id ar_cash_receipts_all.cash_receipt_id%TYPE;
  ln_user_id           NUMBER;
  lv_receipt_method    VARCHAR2(150);
  ln_receipt_method_id NUMBER(15);
 
  CURSOR recipt_create_stg
  IS
    SELECT SUM(xt.AMOUNT_APPLIED) amount,
      xt.INVOICE_CURRENCY_CODE,
      xr.RECEIPT_NUMBER,
      xr.GL_DATE,
      xt.account_number,
      xr.receipt_method,
      xr.RECEIPT_METHOD_ID,
      xr.comments,
      xr.ATTRIBUTE_CATEGORY,
      xr.ATTRIBUTE1,
      xr.ATTRIBUTE2,
      xr.ATTRIBUTE3,
      xr.ATTRIBUTE4,
      xr.attribute5,
      xt.org_id
    FROM xxfin_custom_receipt xr,
      xxfin_cust_trx xt
    WHERE xr.receipt_number=xt.receipt_number
    AND xt.rec_status      ='Y'
    AND xt.receipt_number  =ip_receipt_num
    AND xt.customer_num    =ip_cus_num
    GROUP BY xt.org_id,
      xt.INVOICE_CURRENCY_CODE,
      xr.RECEIPT_NUMBER,
      xr.GL_DATE,
      xt.account_number,
      xr.RECEIPT_METHOD_ID,
      xr.ATTRIBUTE_CATEGORY,
      xr.ATTRIBUTE1,
      xr.ATTRIBUTE2,
      xr.ATTRIBUTE3,
      xr.ATTRIBUTE4,
      xr.ATTRIBUTE5,
      xr.comments,
      xr.receipt_method;
 
  CURSOR cu_login_variables
  IS
    SELECT fu.user_id user_id,
      frv.responsibility_id resp_id,
      fav.application_id resp_appl_id
    FROM fnd_application_vl fav,
      fnd_responsibility_vl frv,
      fnd_user fu
    WHERE fu.user_id               = ln_user_id
    AND frv.responsibility_name    = gc_responsibility_name
    AND fav.application_short_name = gc_application_short_name;
 
  lr_login_variables cu_login_variables%ROWTYPE;
  lv_receipt_number VARCHAR2(200);

  BEGIN
 
  ln_user_id:=fnd_global.user_id;
 
  DELETE FROM xxfin_cust_trx WHERE rec_status='N';
  COMMIT;
 
  FOR cur_create_stg IN recipt_create_stg
  LOOP
 
    BEGIN
      SELECT lookup_code,
        meaning,
        description,
        tag
      INTO gc_org_id,
        gc_user_name,
        gc_responsibility_name,
        gc_application_short_name
      FROM fnd_lookup_values_vl
      WHERE enabled_flag = 'Y'
      AND lookup_code    = cur_create_stg.org_id
      AND lookup_type    = 'XX_APPLICATION_INITIATION12';
    EXCEPTION
    WHEN NO_DATA_FOUND THEN
      l_error_msg := 'select for XX_APPLICATION_INITIATION12 failed. ';
      fnd_file.put_line (fnd_file.LOG, l_error_msg);
      RAISE;
    WHEN TOO_MANY_ROWS THEN
      l_error_msg := 'select for XX_APPLICATION_INITIATION12 failed due to too many rows. ';
      fnd_file.put_line (fnd_file.LOG, l_error_msg);
      RAISE;
    END;

    OPEN cu_login_variables;
    FETCH cu_login_variables INTO lr_login_variables;
    CLOSE cu_login_variables;
 
   fnd_global.apps_initialize (lr_login_variables.user_id
                              ,lr_login_variables.resp_id
  ,lr_login_variables.resp_appl_id );
    mo_global.init(gc_application_short_name);
    mo_global.set_policy_context('S',cur_create_stg.org_id);
   
    -----------------------validating for duplicate receipt.--------------------------------
    DECLARE
      lc_receipt_count NUMBER(3);
      lv_error_msg     VARCHAR2(500);
    BEGIN
      SELECT COUNT(receipt_number)
      INTO lc_receipt_count
      FROM ar_cash_receipts_all
      WHERE receipt_number = cur_create_stg.receipt_number
      AND org_id           = cur_create_stg.org_id;
      IF lc_receipt_count  >0 THEN
        lv_error_msg      := 'Error: Receipt Number ' || cur_create_stg.receipt_number || ' already in the System for '||cur_create_stg.org_id;
     
        UPDATE xxfin_cust_trx
        SET ERRBUF          =lv_error_msg
        WHERE RECEIPT_NUMBER=cur_create_stg.receipt_number
        AND ORG_ID =cur_create_stg.org_id;

    DBMS_OUTPUT.put_line (lv_error_msg);
      ELSE
        NULL;
      END IF;
    EXCEPTION
    WHEN OTHERS THEN
      UPDATE xxfin_cust_trx
      SET ERRBUF          ='Receipt Values not found in custom receipt table'
      WHERE RECEIPT_NUMBER=cur_create_stg.receipt_number
      AND ORG_ID =cur_create_stg.org_id;
    END;
    ------------------------end of  duplicate receipt validation.--------------------------------

    BEGIN
      lv_receipt_number := cur_create_stg.RECEIPT_NUMBER;
 
      ----------------------------------changing the receipt method internally---------------
      BEGIN
        lv_receipt_method:=cur_create_stg.receipt_method;
        IF lv_receipt_method LIKE '%Cash%' THEN
          ln_receipt_method_id:=1502;
        elsif lv_receipt_method LIKE '%Cheque%' THEN
          ln_receipt_method_id:=1503;
        elsif lv_receipt_method LIKE '%PDC%' THEN
          ln_receipt_method_id:=1503;
        elsif lv_receipt_method LIKE '%Bank Transfer%' THEN
          ln_receipt_method_id:=505;
        ELSE
          ln_receipt_method_id:=cur_create_stg.RECEIPT_METHOD_ID;
        END IF;
      END;
     
      ----------------------------------------------------------------------------------------
     
  l_cash_receipt_id                 := NULL;
      l_attribute_rec.attribute_category:=cur_create_stg.attribute_category;
      l_attribute_rec.attribute2        :=cur_create_stg.attribute1;
      l_attribute_rec.attribute3        :=cur_create_stg.attribute2;
      l_attribute_rec.attribute4        :=cur_create_stg.attribute4;
      l_attribute_rec.attribute5        :=cur_create_stg.attribute3;
      l_attribute_rec.attribute8        :=cur_create_stg.attribute5;
     
  -- 2) Call the API
     
  AR_RECEIPT_API_PUB.CREATE_CASH ( p_api_version => 1.0
                                 , p_init_msg_list => FND_API.G_TRUE
, p_commit => FND_API.G_TRUE
, p_validation_level => FND_API.G_VALID_LEVEL_FULL
, x_return_status => l_return_status
, x_msg_count => l_msg_count
, x_msg_data => l_msg_data
, p_currency_code => cur_create_stg.INVOICE_CURRENCY_CODE
, p_amount => cur_create_stg.amount
                                     , p_receipt_number => cur_create_stg.RECEIPT_NUMBER
                                     , p_receipt_date => TRUNC(SYSDATE)
                                     , p_gl_date => cur_create_stg.GL_DATE
                                     , p_customer_number => cur_create_stg.account_number
                                     , p_receipt_method_id => ln_receipt_method_id
                                     , p_comments => cur_create_stg.comments
, P_ORG_ID => cur_create_stg.org_id
                                     , p_attribute_rec => l_attribute_rec
, p_cr_id => l_cash_receipt_id );
      COMMIT;
    END;
   
-- 3) Review the API output
    dbms_output.put_line('Status ' || l_return_status);
    dbms_output.put_line('Cash Receipt id ' || l_cash_receipt_id );
    dbms_output.put_line('Message count ' || l_msg_count);
    l_status:='Receipt Not Created';
   
    COMMIT;
    IF l_return_status='S'
    THEN
   
BEGIN
        l_status:='Receipt Created';
        xxfin_cust_trx_prc(l_cash_receipt_id
                  ,cur_create_stg.RECEIPT_NUMBER
  ,l_status,l_msg_data
  ,cur_create_stg.org_id
  ,ip_cus_num);

        COMMIT;
        dbms_output.put_line('Message Apply: '|| cur_create_stg.org_id );
       
xxfin_cus_form_pkg.xxfin_cus_form_rec_apply (ip_cash_receipt_id => l_cash_receipt_id
                                           , ip_cus_num => ip_cus_num
   , ip_receipt_num => cur_create_stg.RECEIPT_NUMBER
   , ip_org_id => cur_create_stg.org_id
   , op_return_status1 =>l_return_status1_apply );
 
        dbms_output.put_line('Message Apply2: '|| l_return_status1_apply );
      END;
 
      l_status:='Receipt Applied';
     
      COMMIT;
    ELSIF l_return_status='E' THEN
      l_status          :='Receipt UnApplied Error';
   
    xxfin_cust_trx_prc(l_cash_receipt_id
                  ,cur_create_stg.RECEIPT_NUMBER
  ,l_status
  ,l_msg_data
  ,cur_create_stg.org_id
  ,ip_cus_num);
     
      COMMIT;
    END IF;
   
IF l_msg_count = 1 THEN
      dbms_output.put_line('l_msg_data  '||l_msg_data|| cur_create_stg.org_id|| 'Org_id');
      l_status :='Receipt UnApplied EE';
   
  xxfin_cust_trx_prc(l_cash_receipt_id
                  ,cur_create_stg.RECEIPT_NUMBER
  ,l_status
  ,l_msg_data
  , cur_create_stg.org_id
  ,ip_cus_num);
      COMMIT;
    elsif l_msg_count > 1 THEN
      LOOP
        p_count    := p_count + 1;
        l_msg_data := FND_MSG_PUB.Get(FND_MSG_PUB.G_NEXT,FND_API.G_FALSE);
        l_status   :='Receipt UnApplied EEE';
        xxfin_cust_trx_prc(l_cash_receipt_id
                  ,cur_create_stg.RECEIPT_NUMBER
  ,l_status
  ,l_msg_data
  ,cur_create_stg.org_id,ip_cus_num);
       
        COMMIT;
     
   IF l_msg_data IS NULL THEN
          EXIT;
        END IF;
        dbms_output.put_line('Message ' || p_count ||'. '||l_msg_data);
      END LOOP;
    END IF;
    COMMIT;
  END LOOP;
  COMMIT;

  DECLARE
    lv_err_msg        VARCHAR2(2000);
    lv_ret_code       VARCHAR2(2000);
    lv_receipt_number VARCHAR2(30);
  BEGIN
    lv_receipt_number:=ip_receipt_num;
    xxfin_create_misc_rec_prc(lv_err_msg,lv_ret_code,lv_receipt_number);
    dbms_output.put_line('receipt number is '||lv_receipt_number);
    dbms_output.put_line('error message is '||lv_err_msg);
    dbms_output.put_line('error code is '||lv_ret_code);
  END;
 
EXCEPTION
WHEN OTHERS THEN
  xxfin_cust_trx_prc_apply(l_cash_receipt_id,lv_receipt_number,lv_TRX_NUMBER,'Step2'||SQLERRM,l_msg_data,ip_cus_num);
END xxfin_cus_form_rec_prc;

--END OF  PROCEDURE XXFIN_CUS_FORM_REC_PRC.

--CREATING A PROCEDURE TO APPLY THE RECEIPTS, WHICH IS CREATED BY THE XXFIN_CUS_FORM_REC_PRC PROCEDURE.

PROCEDURE xxfin_cus_form_rec_apply(
    ip_cash_receipt_id IN NUMBER ,
    ip_cus_num         IN NUMBER ,
    ip_receipt_num     IN VARCHAR2 ,
    ip_org_id          IN NUMBER ,
    op_return_status1 OUT VARCHAR2 )
IS
  l_error_msg               VARCHAR2 (500);
  l_return_status           VARCHAR2(1);
  l_msg_count               NUMBER;
  l_msg_data                VARCHAR2(240);
  l_cash_receipt_id         NUMBER;
  p_count                   NUMBER := 0;
  L_ATTRIBUTE_REC           VARCHAR2(150);
  l_customer_trx_id         NUMBER;
  gc_user_name              VARCHAR2 (100);
  gc_responsibility_name    VARCHAR2 (100);
  gc_application_short_name VARCHAR2 (100);
  gc_org_id                 NUMBER;
  l_status                  VARCHAR2(30);
  lv_error_message          VARCHAR2(2000);
  ln_user_id                NUMBER;
 
  CURSOR recipt_apply_stg
  IS
    SELECT xt.AMOUNT_APPLIED,
      xr.RECEIPT_NUMBER,
      xt.org_id,
      xt.TRX_NUMBER,
      xt.apply_date
    FROM xxfin_custom_receipt xr,
      xxfin_cust_trx xt
    WHERE xr.receipt_number=xt.receipt_number
    AND xt.rec_status      ='Y'
    AND xt.receipt_number  =ip_receipt_num
    AND xt.customer_num    =ip_cus_num
    AND xt.org_id          =ip_org_id;
 
  CURSOR cu_login_variables
  IS
    SELECT fu.user_id user_id,
      frv.responsibility_id resp_id,
      fav.application_id resp_appl_id
    FROM fnd_application_vl fav,
      fnd_responsibility_vl frv,
      fnd_user fu
    WHERE fu.user_id               = ln_user_id
    AND frv.responsibility_name    = gc_responsibility_name
    AND fav.application_short_name = gc_application_short_name;
 
  lr_login_variables cu_login_variables%ROWTYPE;
  lv_trx_number NUMBER;

BEGIN
  ln_user_id:=fnd_global.user_id;
 
  FOR cur_apply_stg IN recipt_apply_stg
  LOOP
    BEGIN
 
      BEGIN
        ar_receipt_api_pub.Apply ( p_api_version => 1.0
                         , p_init_msg_list => FND_API.G_TRUE
, p_commit => FND_API.G_TRUE
, p_validation_level => FND_API.G_VALID_LEVEL_FULL
, p_cash_receipt_id => ip_cash_receipt_id
                                 , x_return_status => l_return_status
, x_msg_count => l_msg_count
, x_msg_data => l_msg_data
, p_trx_number => cur_apply_stg.trx_number                                                                   
                                 , p_customer_trx_id => l_customer_trx_id
, p_amount_applied => cur_apply_stg.AMOUNT_APPLIED
, p_org_id => ip_org_id 
                                 , p_apply_date => cur_apply_stg.apply_date       
                                 , p_show_closed_invoices => 'Y' );
        COMMIT;
      END ;
      IF l_return_status='S' THEN
        l_status       :='Receipt Applied';
        xxfin_cust_trx_prc_apply(ip_cash_receipt_id,cur_apply_stg.RECEIPT_NUMBER,cur_apply_stg.TRX_NUMBER,l_status,l_msg_data,ip_cus_num);
      ELSE
        l_status:='Receipt UnApplied';
        xxfin_cust_trx_prc_apply(ip_cash_receipt_id,cur_apply_stg.RECEIPT_NUMBER,cur_apply_stg.TRX_NUMBER,l_status,l_msg_data,ip_cus_num);
      END IF;
     
    END;
  END LOOP;
  xxfin_applied_amount(ip_receipt_num);
EXCEPTION
WHEN OTHERS THEN
  lv_error_message := sqlerrm;
  UPDATE xxfin_cust_trx
  SET errbuf          =lv_error_message,
    status            = 'Step6',
    CASH_RECEIPT_ID   =l_cash_receipt_id
  WHERE receipt_number=ip_receipt_num
  AND rec_status      ='Y';
  COMMIT;
END xxfin_cus_form_rec_apply;

--END OF CREATING XXFIN_CUS_FORM_REC_APPLY.

END xxfin_cus_form_pkg;
/

--END OF PACKAGE BODY.

How to create MISCELLANEOUS Receipt in AR in Oracle Apps R12


--CREATING A PROCEDURE TO CREATE MISCELLANEOUS RECEIPT FOR 3400 org

CREATE OR REPLACE PROCEDURE xxfin_create_misc_rec_prc(
    errbuff OUT VARCHAR2,
    retcode OUT VARCHAR2,
    ip_receipt_num IN VARCHAR2)
 
AS
  p_api_version                  NUMBER;
  p_init_msg_list                VARCHAR2(200);
  p_commit                       VARCHAR2(200);
  p_validation_level             NUMBER;
  x_return_status                VARCHAR2(200);
  x_msg_count                    NUMBER;
  x_msg_data                     VARCHAR2(200);
  p_usr_currency_code            VARCHAR2(200);
  p_currency_code                VARCHAR2(200);
  p_usr_exchange_rate_type       VARCHAR2(200);
  p_exchange_rate_type           VARCHAR2(200);
  p_exchange_rate                NUMBER;
  p_exchange_rate_date           DATE;
  p_amount                       NUMBER;
  p_org_id                       NUMBER;
  p_receipt_number               VARCHAR2(200);
  p_receipt_date                 DATE;
  p_gl_date                      DATE;
  p_receivables_trx_id           NUMBER;
  p_activity                     VARCHAR2(200) DEFAULT NULL;
  p_misc_payment_source          VARCHAR2(200):='Created by New Custom Receipt Screen';
  p_tax_code                     VARCHAR2(200);
  p_vat_tax_id                   VARCHAR2(200);
  p_tax_rate                     NUMBER;
  p_tax_amount                   NUMBER DEFAULT NULL;
  p_deposit_date                 DATE;
  p_reference_type               VARCHAR2(200);
  p_reference_num                VARCHAR2(200);
  p_reference_id                 NUMBER;
  p_remittance_bank_account_id   NUMBER;
  p_remittance_bank_account_num  VARCHAR2(200);
  p_remittance_bank_account_name VARCHAR2(200);
  p_receipt_method_id            NUMBER;
  p_receipt_method_name          VARCHAR2(200);
  p_doc_sequence_value           NUMBER;
  p_ussgl_transaction_code       VARCHAR2(200);
  p_anticipated_clearing_date    DATE;
  p_attribute_record AR_RECEIPT_API_PUB.attribute_rec_type;
  p_global_attribute_record AR_RECEIPT_API_PUB.global_attribute_rec_type;
  p_comments                VARCHAR2(200);
  p_misc_receipt_id         NUMBER;
  p_called_from             VARCHAR2(200);
  gc_user_name              VARCHAR2 (100);
  gc_responsibility_name    VARCHAR2 (100);
  gc_application_short_name VARCHAR2 (100);
  gc_org_id                 NUMBER;
  l_error_msg               VARCHAR2 (2000);
  l_receipt_id              NUMBER;
  l_bank_ref_number         VARCHAR2(100);
  lv_receipt_method         VARCHAR2(150);
  ln_receipt_method_id      NUMBER(15);
  lv_receipt_num            VARCHAR2(30);
  ln_user_id                NUMBER:=fnd_global.user_id;
  l_attribute_rec ar_receipt_api_pub.attribute_rec_type;
  CURSOR cu_login_variables
  IS
    SELECT fu.user_id user_id,
      frv.responsibility_id resp_id,
      fav.application_id resp_appl_id
    FROM fnd_application_vl fav,
      fnd_responsibility_vl frv,
      fnd_user fu
    WHERE fu.user_id               = ln_user_id
    AND frv.responsibility_name    = gc_responsibility_name
    AND fav.application_short_name = gc_application_short_name;
  lr_login_variables cu_login_variables%ROWTYPE;
  CURSOR misc_receipts
  IS
    SELECT SUM(xct.amount_applied) amount ,
      xcr.comments ,
      xcr.ATTRIBUTE_CATEGORY ,
      xcr.ATTRIBUTE1 ,
      xcr.ATTRIBUTE2 ,
      xcr.ATTRIBUTE3 ,
      xcr.ATTRIBUTE4 ,
      xcr.attribute5 ,
      xcr.receipt_date ,
      xcr.gl_date ,
      xct.invoice_currency_code ,
      XCR.RECEIPT_METHOD_ID ,
      XCR.RECEIPT_METHOD ,
      xcr.receipt_number
    FROM xxfin_custom_receipt xcr ,
      xxfin_cust_trx xct
    WHERE xcr.receipt_number=xct.receipt_number
      --and xct.status='Receipt Applied'
    AND xcr.receipt_number=ip_receipt_num
    GROUP BY xcr.comments,
      xcr.ATTRIBUTE_CATEGORY,
      xcr.ATTRIBUTE1,
      xcr.ATTRIBUTE2,
      xcr.ATTRIBUTE3,
      xcr.ATTRIBUTE4,
      xcr.attribute5,
      xcr.receipt_date,
      xcr.gl_date,
      XCT.INVOICE_CURRENCY_CODE,
      XCR.RECEIPT_METHOD_ID,
      XCR.RECEIPT_METHOD,
      xcr.receipt_number;
BEGIN
  BEGIN
    SELECT lookup_code,
      meaning,
      description,
      tag
    INTO gc_org_id,
      gc_user_name,
      gc_responsibility_name,
      gc_application_short_name
    FROM fnd_lookup_values_vl
    WHERE enabled_flag = 'Y'
    AND lookup_code    = 3400
    AND lookup_type    = 'XX_APPLICATION_INITIATION';
  EXCEPTION
  WHEN NO_DATA_FOUND THEN
    l_error_msg := 'select for XX_APPLICATION_INITIATION failed. ';
    fnd_file.put_line (fnd_file.LOG, l_error_msg);
    RAISE;
  WHEN TOO_MANY_ROWS THEN
    l_error_msg := 'select for XX_APPLICATION_INITIATION failed due to too many rows. ';
    fnd_file.put_line (fnd_file.LOG, l_error_msg);
    RAISE;
  WHEN OTHERS THEN
    l_error_msg := 'select for XX_APPLICATION_INITIATION failed due to other reasons ';
    fnd_file.put_line (fnd_file.LOG, l_error_msg);
    RAISE;
  END;
  OPEN cu_login_variables;
  FETCH cu_login_variables INTO lr_login_variables;
  CLOSE cu_login_variables;
  BEGIN
    FOR rec_misc IN misc_receipts
    LOOP
      ----------------------------changin receipt method internally------------------------------------------
      BEGIN
        lv_receipt_num   :=rec_misc.receipt_number;
        lv_receipt_method:=rec_misc.receipt_method;
        IF lv_receipt_method LIKE '%Cash%' THEN
          ln_receipt_method_id:=102;
        elsif lv_receipt_method LIKE '%Cheque%' THEN
          ln_receipt_method_id:=103;
        elsif lv_receipt_method LIKE '%PDC%' THEN
          ln_receipt_method_id:=103;
        elsif lv_receipt_method LIKE '%Bank Transfer%' THEN
          ln_receipt_method_id:=105;
        ELSE
          ln_receipt_method_id:=rec_misc.receipt_method_id;
        END IF;
      END;
      ---------------------------------------end receipt method changing internally---------------------------
 
      fnd_global.apps_initialize ( lr_login_variables.user_id
                                 , lr_login_variables.resp_id
, lr_login_variables.resp_appl_id );

      mo_global.init (gc_application_short_name);
      mo_global.set_policy_context ('S', 3400);
 
      fnd_file.put_line(fnd_file.log,'Application Code :' ||gc_application_short_name);
     
      p_receipt_date                    := SYSDATE;
      p_gl_date                         := rec_misc.gl_date ;
      p_misc_receipt_id                 := NULL;
      l_attribute_rec.attribute_category:=rec_misc.attribute_category;
      l_attribute_rec.attribute2        :=rec_misc.attribute1;
      l_attribute_rec.attribute3        :=rec_misc.attribute2;
      l_attribute_rec.attribute4        :=rec_misc.attribute4;
      l_attribute_rec.attribute5        :=rec_misc.attribute3;
      l_attribute_rec.attribute8        :=NVL(rec_misc.attribute5,'000000');
      SELECT receivables_trx_id
      INTO p_receivables_trx_id
      FROM AR_RECEIVABLES_TRX_ALL
      WHERE name IN
        (SELECT meaning
        FROM ar_lookups
        WHERE lookup_type = 'XXIMD_MISC_RECEIPT_ACTIVITY'
        ) ;
     
   
      AR_RECEIPT_API_PUB.create_misc ( p_api_version => 1.0
                                 , p_init_msg_list => FND_API.G_TRUE,
, p_commit => FND_API.G_TRUE
, p_validation_level => FND_API.G_VALID_LEVEL_FULL
, x_return_status => x_return_status
, x_msg_count => x_msg_count
, x_msg_data => x_msg_data
, p_usr_currency_code => p_usr_currency_code
, p_currency_code => rec_misc.invoice_currency_code
, p_usr_exchange_rate_type => p_usr_exchange_rate_type
, p_exchange_rate_type => p_exchange_rate_type
, p_exchange_rate => p_exchange_rate
, p_exchange_rate_date => p_exchange_rate_date
, p_amount => rec_misc.amount
, p_receipt_number => lv_receipt_num
, p_receipt_date => TRUNC(SYSDATE)
, p_gl_date => rec_misc.gl_date
, p_receivables_trx_id => p_receivables_trx_id
, p_activity => p_activity
, p_misc_payment_source => p_misc_payment_source
, p_tax_code => p_tax_code
, p_vat_tax_id => p_vat_tax_id
, p_tax_rate => p_tax_rate
, p_tax_amount => p_tax_amount
, p_deposit_date => TRUNC(SYSDATE)
, p_reference_type => p_reference_type
, p_reference_num => p_reference_num
, p_reference_id => p_reference_id
, p_remittance_bank_account_id => p_remittance_bank_account_id
, p_remittance_bank_account_num => p_remittance_bank_account_num
, p_remittance_bank_account_name => p_remittance_bank_account_name
, p_receipt_method_id => ln_receipt_method_id
, p_receipt_method_name => lv_receipt_method
, p_doc_sequence_value => p_doc_sequence_value
, p_ussgl_transaction_code => p_ussgl_transaction_code
, p_anticipated_clearing_date => p_anticipated_clearing_date
, p_comments => rec_misc.comments
, p_attribute_record => l_attribute_rec
, p_misc_receipt_id => p_misc_receipt_id
, p_called_from => p_called_from
, P_Org_Id => 3400 );

      IF (x_return_status = 'S') THEN
        COMMIT;
        fnd_file.put_line(fnd_file.log,'SUCCESS');
       
      ELSE
        ROLLBACK;
       
        fnd_file.put_line(fnd_file.log,'ERROR');
        fnd_file.put_line(fnd_file.log,'Return Status    = '|| SUBSTR (x_return_status,1,255)||','||x_msg_data);
        fnd_file.put_line(fnd_file.log,APPS.FND_MSG_PUB.Get ( p_msg_index => APPS.FND_MSG_PUB.G_LAST, p_encoded => APPS.FND_API.G_FALSE));

        IF x_msg_count >=0 THEN
          FOR I IN 1..10
          LOOP
            fnd_file.put_line(fnd_file.log,I||'. '|| SUBSTR (FND_MSG_PUB.Get(p_encoded => FND_API.G_FALSE ), 1, 255));
          END LOOP;
       
END IF;
     
  END IF;
   
END LOOP;
    fnd_file.put_line(fnd_file.log,'After end loop');
 
  EXCEPTION
  WHEN OTHERS THEN
    fnd_file.put_line(fnd_file.log,'Exception :'||sqlerrm);
 
  END;
  COMMIT;
END xxfin_create_misc_rec_prc;
/

--END OF CREATING xxfin_create_misc_rec_prc.

How to find total purchase orders created on item in Oracle Apps R12


select pha.SEGMENT1 "Po Num"
      ,pha.PO_HEADER_ID "Header Id"
      ,pla.PO_LINE_ID "Line Id"
      ,as1.VENDOR_NAME "Supplier"
      ,ass1.VENDOR_SITE_CODE "Supplier Site"
      ,hl1.LOCATION_CODE "Ship To Location"
      ,hl2.LOCATION_CODE "Bill To Location"
      ,asc1.FIRST_NAME||','||asc1.MIDDLE_NAME||','||asc1.LAST_NAME "Contact Name"
      ,msib.SEGMENT1 "Item Name"
      ,pla.QUANTITY*pla.UNIT_PRICE "Line Total"
      ,(select sum(l.QUANTITY * l.UNIT_PRICE)
        from po_headers_all h
            ,po_lines_all l
        where h.PO_HEADER_ID in l.PO_HEADER_ID
        and h.PO_HEADER_ID=pha.PO_HEADER_ID
        group by h.PO_HEADER_ID) "Po Total"
from po_headers_all pha
    ,po_lines_all pla
    ,ap_suppliers as1
    ,ap_supplier_sites_all ass1
    ,hr_locations hl1
    ,hr_locations hl2
    ,ap_supplier_contacts asc1
    ,mtl_system_items_b msib
where 1=1
and msib.INVENTORY_ITEM_ID =:p_item_id
and pha.TYPE_LOOKUP_CODE not in('QUOTATION','RFQ')
and pha.ORG_ID=204
and pha.PO_HEADER_ID=pla.PO_HEADER_ID
and pha.VENDOR_ID=as1.VENDOR_ID
and pha.VENDOR_SITE_ID=ass1.VENDOR_SITE_ID
and pha.SHIP_TO_LOCATION_ID=hl1.LOCATION_ID
and pha.BILL_TO_LOCATION_ID=hl2.LOCATION_ID
and pha.VENDOR_CONTACT_ID=asc1.VENDOR_CONTACT_ID
and pla.ITEM_ID=msib.INVENTORY_ITEM_ID
and msib.ORGANIZATION_ID=204
group by pha.SEGMENT1
      ,pha.PO_HEADER_ID
      ,pla.PO_LINE_ID
      ,as1.VENDOR_NAME
      ,ass1.VENDOR_SITE_CODE
      ,hl1.LOCATION_CODE
      ,hl2.LOCATION_CODE
      ,asc1.FIRST_NAME||','||asc1.MIDDLE_NAME||','||asc1.LAST_NAME
      ,pla.QUANTITY*pla.UNIT_PRICE
      ,msib.SEGMENT1;

How to find the terminated employees in an Organization in Oracle Apps R12


select papf.EMPLOYEE_NUMBER  "Employee Number"
      ,papf.FULL_NAME "Employee Name"
      ,ppsv.LEAVING_REASON "Leaving Reason"
      ,ppsv.ACTUAL_TERMINATION_DATE "Termination Date"
      ,papf.EMAIL_ADDRESS "Email Address"
from per_all_people_f papf
    ,PER_PERIODS_OF_SERVICE_V ppsv
where ppsv.PERSON_ID=papf.PERSON_ID
and papf.EFFECTIVE_END_DATE between papf.EFFECTIVE_START_DATE and SYSDATE
and ppsv.BUSINESS_GROUP_ID=202

How to schedule PO workflow schedule process

create or replace PACKAGE APPS.XXXX_PO_WF_SCHEDULING_PKG IS    --|==========================================================================...