Wednesday, August 19, 2015

Oracle Invoice Cancellation


Oracle API to Cancellation of AP Invoices.

DECLARE
   v_error_code              VARCHAR2 (100);
   v_debug_info              VARCHAR2 (1000);
   v_boolean                 BOOLEAN;
   v_message_name            VARCHAR2 (1000);
   v_invoice_amount          NUMBER;
   v_base_amount             NUMBER;
   v_temp_cancelled_amount   NUMBER;
   v_cancelled_by            VARCHAR2 (1000);
   v_cancelled_amount        NUMBER;
   v_cancelled_date          DATE;
   v_last_update_date        DATE;
   v_orig_prepay_amt         NUMBER;
   v_pay_cur_inv_amt         NUMBER;
   v_token                   VARCHAR2 (100);

   CURSOR c1
   IS
      SELECT DISTINCT a.org_id, a.invoice_id, a.last_update_login,
                      a.last_updated_by, b.accounting_date
                 FROM ap_invoices_all a, ap_invoice_lines_all b
                WHERE 1 = 1
                  AND a.invoice_id = b.invoice_id
                  AND a.invoice_id IN (SELECT invoice_id
                                         FROM ap_invoice_cancel01aug2015)
                  AND NOT EXISTS (SELECT 1
                                    FROM ap_invoice_distributions_all
                                   WHERE invoice_id = a.invoice_id)
--         and a.invoice_id=44891029
                  AND cancelled_date IS NULL;
BEGIN
   FOR i IN c1
   LOOP
      mo_global.init ('PO');
      mo_global.set_policy_context ('S', i.org_id);
      v_boolean :=
         ap_cancel_pkg.is_invoice_cancellable (p_invoice_id            => i.invoice_id,
                                               p_error_code            => v_error_code,
                                               p_debug_info            => v_debug_info,
                                               p_calling_sequence      => NULL
                                              );

      IF v_boolean = TRUE
      THEN
         UPDATE ap_invoice_cancel01aug2015
            SET status = 'S',
                error_message =
                               'Invoice ' || i.invoice_id || ' is cancellable'
          WHERE invoice_id = i.invoice_id;
      ELSE
         UPDATE ap_invoice_cancel01aug2015
            SET status = 'E',
                error_message =
                           'Invoice ' || i.invoice_id || ' is not cancellable'
          WHERE invoice_id = i.invoice_id;
      END IF;

      IF v_boolean = TRUE
      THEN
         v_boolean :=
            ap_cancel_pkg.ap_cancel_single_invoice
                         (p_invoice_id                      => i.invoice_id,
                          p_last_updated_by                 => i.last_updated_by,
                          p_last_update_login               => i.last_update_login,
                          p_accounting_date                 => i.accounting_date,
                          p_message_name                    => v_message_name,
                          p_invoice_amount                  => v_invoice_amount,
                          p_base_amount                     => v_base_amount,
                          p_temp_cancelled_amount           => v_temp_cancelled_amount,
                          p_cancelled_by                    => v_cancelled_by,
                          p_cancelled_amount                => v_cancelled_amount,
                          p_cancelled_date                  => v_cancelled_date,
                          p_last_update_date                => v_last_update_date,
                          p_original_prepayment_amount      => v_orig_prepay_amt,
                          p_pay_curr_invoice_amount         => v_pay_cur_inv_amt,
                          p_token                           => v_token,
                          p_calling_sequence                => NULL
                         );

         IF v_boolean
         THEN
            UPDATE ap_invoice_cancel01aug2015
               SET status = 'S',
                   error_message =
                                 'Invoice ' || i.invoice_id || ' is cancelled'
             WHERE invoice_id = i.invoice_id;

            COMMIT;
         ELSE
            UPDATE ap_invoice_cancel01aug2015
               SET status = 'S',
                   error_message =
                              'Failed to Cancel the Invoice' || v_message_name
             WHERE invoice_id = i.invoice_id;

            ROLLBACK;
         END IF;
      END IF;
   END LOOP;
END;

No comments:

Post a Comment