Wednesday, 20 May 2020

Oracle API - How to Apply Cash Receipt against Standard AR Invoice

 /*Following Procedure Used For Applied Receipt against Created AR Invoice Transaction*/
  CREATE OR REPLACE PROCEDURE xx_apply_receipt_to_invice (p_cust_trx_id       IN NUMBER,
                                         p_cash_receipt_id   IN NUMBER,
                                         p_process_type      IN VARCHAR2)
   AS
      --local Variables
      g_loc                  NUMBER := 0;
      g_msg                  VARCHAR2 (500);
      g_sysdate              DATE := SYSDATE;
      l_apl_return_status    VARCHAR2 (1);
      l_apl_msg_count        NUMBER;
      l_apl_msg_data         VARCHAR2 (240);
      l_org_id               NUMBER;
      l_receipt_id           ar_cash_receipts_all.cash_receipt_id%TYPE;
      --      l_rcpt_method_name     VARCHAR2 (20);
      l_customer_trx_id      NUMBER;
      l_amount_applied       NUMBER;
      l_data_txt1            VARCHAR2 (1000) := NULL;
      l_error_description1   VARCHAR2 (2000) := NULL;
      l_msg_index_num1       NUMBER := 1;
      l_resp_id              NUMBER := NULL;
      l_resp_appl_id         NUMBER := NULL;
      --      l_org_id               NUMBER;
      l_user_id              NUMBER := NULL;
   BEGIN
      l_receipt_id := p_cash_receipt_id;
      l_customer_trx_id := p_cust_trx_id;
      l_msg_index_num1 := NULL;


      SELECT CREATED_BY
        INTO l_user_id
        FROM ar_cash_receipts_all
       WHERE cash_receipt_id = l_receipt_id;


      SELECT amount
        INTO l_amount_applied
        FROM ar_cash_receipts_all
       WHERE cash_receipt_id = l_receipt_id;

      SELECT org_id
        INTO l_org_id
        FROM ra_customer_trx_all
       WHERE customer_trx_id = p_cust_trx_id;


      /*To get the initialization attribute values */
      l_resp_id := XX_GET_RESP_DTLS (l_org_id);
      l_resp_appl_id := XX_GET_APPL_DTLS (l_org_id);


      BEGIN
         DBMS_OUTPUT.put_line ('Initiaiizing Session ');
         mo_global.init ('AR');
         mo_global.set_policy_context ('S', l_org_id);
         fnd_global.apps_initialize (l_user_id, l_resp_id, l_resp_appl_id);
      EXCEPTION
         WHEN OTHERS
         THEN
            l_apl_msg_data := 'Session Initialization failed';
      -- l_flag := 'N';
      END;


      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,
         x_return_status      => l_apl_return_status,
         x_msg_count          => l_apl_msg_count,
         x_msg_data           => l_apl_msg_data,
         p_cash_receipt_id    => l_receipt_id,
         p_customer_trx_id    => l_customer_trx_id);

      COMMIT;

      IF l_apl_msg_count = 1
      THEN
         DBMS_OUTPUT.put_line ('l_apl_msg_data ' || l_apl_msg_data);
      ELSIF l_apl_msg_count > 1
      THEN
         LOOP
            l_apl_msg_data :=
               fnd_msg_pub.GET (fnd_msg_pub.g_next, fnd_api.g_false);

            IF l_apl_msg_data IS NULL
            THEN
               EXIT;
            END IF;

            DBMS_OUTPUT.put_line (
               'Message' || '---' || ' ---' || l_apl_msg_data);
         END LOOP;
      END IF;

      IF l_apl_return_status = 'S'
      THEN
         DBMS_OUTPUT.put_line (
               'Receipt applied successfully for customer trx id '
            || l_customer_trx_id);

         /*As per Zohaib requested Custom Table Not Required we remove the Custom Table Logic 17MAY2018*/

         --         UPDATE xx_ar_invoice_recipt_mapping
         --            SET RECEIPT_APPLIED_FLAG = 'Y',
         --                ERROR_MSG = 'Receipt Applied Succussfully'
         --          WHERE customer_trx_id = p_cust_trx_id;


         IF p_process_type IN ('REGISTRATION', 'RENEW')
         THEN
            UPDATE xxag_pos_edirham_reg_ren_t
               SET RECEIPT_APPLIED_FLAG = 'Y',
                   ar_payment_status = 'Y',
                   ERROR_MSG = 'Receipt Applied Succussfully'
             WHERE customer_trx_id = p_cust_trx_id;
         --           COMMIT;

         ELSIF p_process_type = 'TENDER'
         THEN
            UPDATE xxag_pon_edirham_rfq_pay_t
               SET RECEIPT_APPLIED_FLAG = 'Y',
                   ar_payment_status = 'Y',
                   ERROR_MSG = 'Receipt Applied Succussfully'
             WHERE customer_trx_id = p_cust_trx_id;
         --           COMMIT;
         END IF;


         COMMIT;


         DBMS_OUTPUT.put_line ('Receipt Applied Succussfully!!');

         FND_FILE.PUT_LINE (FND_FILE.LOG, 'Receipt Applied Succussfully!!');
      ELSE
         FOR i IN 1 .. l_apl_msg_count
         LOOP
            FND_MSG_PUB.GET (p_msg_index       => i,
                             p_encoded         => 'F',
                             p_data            => l_data_txt1,
                             p_msg_index_out   => l_msg_index_num1);
            l_error_description1 :=
               SUBSTR (l_error_description1 || l_data_txt1, 1, 400);
            DBMS_OUTPUT.put_line (l_error_description1);
         END LOOP;

         l_error_description1 :=
            'Error in Apply Receipt' || l_error_description1;

         /*As per Zohaib requested Custom Table Not Required we remove the Custom Table Logic 17MAY2018*/

         --         UPDATE xx_ar_invoice_recipt_mapping
         --            SET RECEIPT_APPLIED_FLAG = 'N', ERROR_MSG = l_error_description1
         --          WHERE customer_trx_id = p_cust_trx_id;

         IF p_process_type IN ('REGISTRATION', 'RENEW')
         THEN
            UPDATE xxag_pos_edirham_reg_ren_t
               SET RECEIPT_APPLIED_FLAG = 'N',
                   ERROR_MSG = l_error_description1 --'Receipt Applied Succussfully'
             WHERE customer_trx_id = p_cust_trx_id;
         ELSIF p_process_type = 'TENDER'
         THEN
            UPDATE xxag_pon_edirham_rfq_pay_t
               SET RECEIPT_APPLIED_FLAG = 'N',
                   ERROR_MSG = l_error_description1 --- 'Receipt Applied Succussfully'
             WHERE customer_trx_id = p_cust_trx_id;
         END IF;



         COMMIT;


         DBMS_OUTPUT.put_line (
               'Apply Receipt Failed for customer trx id '
            || l_customer_trx_id
            || ' - '
            || l_error_description1);
         FND_FILE.PUT_LINE (
            FND_FILE.LOG,
               'Apply Receipt Failed for customer trx id '
            || l_customer_trx_id
            || ' - '
            || l_error_description1);

         FND_FILE.PUT_LINE (
            FND_FILE.LOG,
            '---------------------------------------------------------------------------------------');
         FND_FILE.PUT_LINE (
            FND_FILE.LOG,
            '---------------------------------------------------------------------------------------');
      END IF;



      COMMIT;
   EXCEPTION
      WHEN OTHERS
      THEN
         DBMS_OUTPUT.put_line ('Error in procedure ' || SQLERRM);
         FND_FILE.PUT_LINE (FND_FILE.LOG, 'Error in procedure ');
   END;

   /*---------END of Procedure xx_apply_receipt_to_invice -------*/

No comments:

Post a Comment