DBA Data[Home] [Help]

TRIGGER: APPS.JL_BR_AR_OCC_DOCS_WRT_N_ABTMT1

Source

Description
"APPS"."JL_BR_AR_OCC_DOCS_WRT_N_ABTMT1" 
AFTER INSERT
 ON  "AR"."AR_RECEIVABLE_APPLICATIONS_AL#"  FOR EACH ROW
 
Type
AFTER EACH ROW
Event
INSERT
Column
When
(sys_context('JG','JGZZ_COUNTRY_CODE') in ('BR'))
OR (to_char(new.org_id) <> nvl(sys_context('JG','JGZZ_ORG_ID'),'XX'))
Referencing
REFERENCING NEW AS NEW OLD AS OLD
Body
DECLARE

    X_count                        NUMBER;
    X_class                        ar_payment_schedules_all.class%TYPE;
    X_global_attribute11           VARCHAR2(01);
    X_amount_due_remaining         ar_payment_schedules_all.amount_due_remaining%TYPE;
    X_amount_due_original          ar_payment_schedules_all.amount_due_original%TYPE;
    X_std_occurrence_code          jl_br_ar_bank_occurrences.std_occurrence_code%TYPE;
    X_occurrence_id                jl_br_ar_occurrence_docs_all.occurrence_id%TYPE;
    X_document_id                  jl_br_ar_collection_docs_all.document_id%TYPE;
    X_bordero_id                   jl_br_ar_collection_docs_all.bordero_id%TYPE;
    --X_bank_number                jl_br_ar_occurrence_docs_all.bank_number%TYPE;
    X_bank_party_id                jl_br_ar_occurrence_docs_all.bank_party_id%TYPE;
    X_bank_occurrence_type         jl_br_ar_occurrence_docs_all.bank_occurrence_type%TYPE;
    X_bank_occurrence_code         jl_br_ar_occurrence_docs_all.bank_occurrence_code%TYPE;
    X_bank_occurrence_code1        jl_br_ar_occurrence_docs_all.bank_occurrence_code%TYPE;
    X_bank_occurrence_exists       BOOLEAN := TRUE;
    X_remittance_media             jl_br_ar_occurrence_docs_all.remittance_media%TYPE;
    X_bordero_type                 jl_br_ar_borderos_all.bordero_type%TYPE;

    X_endorsement_credit_ccid      NUMBER := NULL;
    X_endorsement_debit_ccid       NUMBER:= NULL;
    X_endorsement_debit_amount     NUMBER:= NULL;
    X_endorsement_credit_amount    NUMBER:= NULL;
    l_ps_rec                       ar_payment_schedules%ROWTYPE;
    l_country_code        VARCHAR2(100);

BEGIN

   IF (to_char(:new.org_id) <> nvl(sys_context('JG','JGZZ_ORG_ID'),'XX')) THEN

       l_country_code := JG_ZZ_SHARED_PKG.GET_COUNTRY(:new.org_id,NULL,NULL);

       JG_CONTEXT.name_value('JGZZ_COUNTRY_CODE',l_country_code);

       JG_CONTEXT.name_value('JGZZ_ORG_ID',to_char(:new.org_id));


    END IF;

   IF (sys_context('JG','JGZZ_COUNTRY_CODE') = 'BR') THEN

    IF NVL(:new.applied_payment_schedule_id,0) <> 0
    THEN
      SELECT class
      INTO   X_class
      FROM   ar_payment_schedules
      WHERE  payment_schedule_id = :new.payment_schedule_id;

      IF X_class = 'CM'
      THEN
        SELECT global_attribute11,
               amount_due_remaining,
               amount_due_original
        INTO   X_global_attribute11,
               X_amount_due_remaining,
               X_amount_due_original
        FROM   ar_payment_schedules
        WHERE  payment_schedule_id = :new.applied_payment_schedule_id;

        IF X_global_attribute11 = 'Y'
        THEN
          BEGIN
            SELECT doc.document_id,
                   doc.bordero_id,
                   bor.bordero_type
            INTO   X_document_id,
                   X_bordero_id,
                   X_bordero_type
            FROM   jl_br_ar_collection_docs doc,
                   jl_br_ar_borderos_all bor
            WHERE  doc.payment_schedule_id  = :new.applied_payment_schedule_id
                   AND doc.document_status not in
                        ('CANCELED','REFUSED','PARTIALLY_RECEIVED','WRITTEN_OFF')
                   AND bor.bordero_id = doc.bordero_id;

          EXCEPTION
            WHEN OTHERS THEN
              X_bank_occurrence_exists := FALSE;
          END;
/* Aviso de credito com o numero da nota incluso */

          IF X_bordero_type = 'COLLECTION' THEN

            IF :new.applied_customer_trx_line_id is null
            THEN
              IF (X_amount_due_remaining - :new.amount_applied) = 0
              THEN
                X_std_occurrence_code := 'WRITE_OFF_REQUISITION';
              ELSE
                X_std_occurrence_code := 'ABATEMENT_CONCESSION';
  		END IF;

  /* Aviso de credito sem informar o numero da nota - reaplicacao */

            ELSIF X_amount_due_remaining = 0
            THEN
              X_std_occurrence_code := 'WRITE_OFF_REQUISITION';
  	    ELSE
              X_std_occurrence_code := 'ABATEMENT_CONCESSION';
            END IF;

            BEGIN
              /* CE uptake - Bug#2932986
              SELECT boc.bank_number,
                     boc.bank_occurrence_code,
                     boc.bank_occurrence_type,
                     boc.remittance_media
              INTO   X_bank_number,
                     X_bank_occurrence_code,
                     X_bank_occurrence_type,
                     X_remittance_media
              FROM   jl_br_ar_borderos b,
                     jl_br_ar_bank_occurrences boc,
                     ap_bank_accounts_all acc,
                     ap_bank_branches bra
              WHERE  b.bank_account_id = acc.bank_account_id
                     AND acc.bank_branch_id = bra.bank_branch_id
                     AND b.bordero_id = X_bordero_id
                     AND boc.bank_number = bra.bank_number
                     AND boc.bank_occurrence_type = 'REMITTANCE_OCCURRENCE'
                     AND boc.std_occurrence_code  = X_std_occurrence_code;
              */

            SELECT boc.bank_party_id,
                   boc.bank_occurrence_code,
                   boc.bank_occurrence_type,
                   boc.remittance_media
            INTO   X_bank_party_id,
                   X_bank_occurrence_code,
                   X_bank_occurrence_type,
                   X_remittance_media
            FROM   jl_br_ar_borderos b,
                   jl_br_ar_bank_occurrences boc,
                   ce_bank_accounts acct,
                   ce_bank_acct_uses_all acctUse,
                   hz_parties HzPartyBank
             Where b.bank_acct_use_id = acctUse.bank_acct_use_id
                   And acctUse.bank_account_id = acct.bank_account_id
                   And acct.bank_id =  HzPartyBank.party_id
                   --And HzPartyBank.Country = 'BR'
                   AND boc.bank_party_id = HzPartyBank.party_id
                   AND b.bordero_id = X_bordero_id
                   AND boc.bank_occurrence_type = 'REMITTANCE_OCCURRENCE'
                   AND boc.std_occurrence_code  = X_std_occurrence_code;

              EXCEPTION
                WHEN OTHERS THEN
                  X_bank_occurrence_exists := FALSE;
            END;

            IF X_bank_occurrence_exists
            THEN
              SELECT jl_br_ar_occurrence_docs_s.nextval
              INTO   X_occurrence_id
              FROM   dual;

              IF X_std_occurrence_code = 'WRITE_OFF_REQUISITION'
              THEN
                /* CE uptake - Bug#2932986
                SELECT boc.bank_occurrence_code
                INTO   X_bank_occurrence_code1
                FROM   jl_br_ar_borderos b,
                       jl_br_ar_bank_occurrences boc,
                       ap_bank_accounts_all acc,
                       ap_bank_branches bra
                WHERE  b.bank_account_id = acc.bank_account_id
                       AND acc.bank_branch_id = bra.bank_branch_id
                       AND b.bordero_id = X_bordero_id
                       AND boc.bank_number = bra.bank_number
                       AND boc.bank_occurrence_type = 'REMITTANCE_OCCURRENCE'
                       AND boc.std_occurrence_code  = 'REMITTANCE';
                */

            SELECT boc.bank_occurrence_code
            INTO   X_bank_occurrence_code1
            FROM   jl_br_ar_borderos b,
                   jl_br_ar_bank_occurrences boc,
                   ce_bank_accounts acct,
                   ce_bank_acct_uses_all acctUse,
                   hz_parties HzPartyBank
             Where b.bank_acct_use_id = acctUse.bank_acct_use_id
                   And acct.bank_account_id = acctUse.bank_account_id
                   And acct.bank_id =  HzPartyBank.party_id
                   --And HzPartyBank.Country = 'BR'
                   AND boc.bank_party_id = HzPartyBank.party_id
                   AND b.bordero_id = X_bordero_id
                   AND boc.bank_occurrence_type = 'REMITTANCE_OCCURRENCE'
                   AND boc.std_occurrence_code  = 'REMITTANCE';

                SELECT endorsement_credit_ccid,
                       endorsement_debit_ccid,
                       endorsement_debit_amount,
                       endorsement_credit_amount
                INTO   X_endorsement_debit_ccid,
                       X_endorsement_credit_ccid,
                       X_endorsement_credit_amount,
                       X_endorsement_debit_amount
                FROM   jl_br_ar_occurrence_docs
                WHERE  document_id = X_document_id
                       AND bank_occurrence_code = X_bank_occurrence_code1
                       AND occurrence_status <> 'CANCELED';

                UPDATE jl_br_ar_collection_docs
                SET    document_status = 'WRITTEN_OFF',
                       previous_doc_status = document_status
                WHERE  document_id = X_document_id;

/*                UPDATE ar_payment_schedules
                SET    global_attribute11 = NULL
                WHERE  payment_schedule_id = :new.applied_payment_schedule_id;
*/

/* Replace Update by AR's table handler. Bug # 2249731 */

                arp_ps_pkg.fetch_p(:new.applied_payment_schedule_id, l_ps_rec);
                arp_ps_pkg.lock_p(:new.applied_payment_schedule_id);
                l_ps_rec.global_attribute11 := NULL;
                arp_ps_pkg.update_p(l_ps_rec, :new.applied_payment_schedule_id);


                SELECT count(*)
                INTO   X_count
                FROM   jl_br_ar_collection_docs
                WHERE  bordero_id = X_bordero_id
                       AND document_status not in
                                  ('CANCELED','WRITTEN_OFF','REFUSED');

                IF X_count = 0
                THEN
                  UPDATE jl_br_ar_borderos
                  SET    bordero_status = 'WRITE_OFF',
                         write_off_date = SYSDATE
                  WHERE bordero_id = X_bordero_id;
                END IF;

              END IF;

            -- CE uptake - Bug#2932986 ; insert party_id instead of bank_number
            IF (x_std_occurrence_code = 'WRITE_OFF_REQUISITION' OR (x_std_occurrence_code = 'ABATEMENT_CONCESSION' and :new.amount_applied > 0 )) THEN --Bug 9501221
              INSERT INTO jl_br_ar_occurrence_docs
                (
                occurrence_id,
                last_update_date,
                last_updated_by,
                last_update_login,
                creation_date,
                created_by,
                document_id,
                gl_date,
                bank_occurrence_code,
                --bank_number,
                bank_party_id,
                bank_occurrence_type,
                occurrence_date,
                occurrence_status,
                original_remittance_media,
                remittance_media,
                document_amount,
                abatement_amount,
                endorsement_credit_ccid,
                endorsement_debit_ccid,
                endorsement_debit_amount,
                endorsement_credit_amount,
                org_id
                )
                VALUES
                (
                X_occurrence_id,
                SYSDATE,
                :new.last_updated_by,
                :new.last_update_login,
                SYSDATE,
                :new.created_by,
                X_document_id,
                sysdate,
                X_bank_occurrence_code,
                --X_bank_number,
                X_bank_party_id,
                X_bank_occurrence_type,
                :new.apply_date,
                'CREATED',
                X_remittance_media,
                X_remittance_media,
                X_amount_due_original,
                :new.amount_applied,
                X_endorsement_credit_ccid,
                X_endorsement_debit_ccid,
                X_endorsement_debit_amount,
                X_endorsement_credit_amount,
                :new.org_id
                );

              END IF;

            END IF;

          END IF;

        END IF;

      END IF;

    END IF;

   END IF;

END;