Monday, July 10, 2017

AP (Manual Entry, Interfaces)

Creating the Invoices Manually 


Payables>Invoices>entry>invoices
Step1:Enter the supplier number and invoice number against a PO or without PO 


Step2 : Once after completing the headers information select Lines Tab and enter the amount and make sure that both the header Invoice amount and and lines amount are the same if we have 2 may lines them make sure that the Sum of amounts of all lines is equal to the header Amount.



Step3.Once after lines are created then Go for the distribution and enter the same exact amount as header invoice amount  and charge account details and save it



Then following are the backend tables that get effected 


FIRST AFTER CREATE THE INVOICE AGAINST THE PO OR WITHOUT PURCHASE ORDER THE FOLLOWING BACKEND TABLES EFFECTS.....


1.) SELECT * FROM AP_INVOICES_ALL WHERE INVOICE_NUM LIKE 'INV0222'          (IT CONTAINS THE INVOICE_NUMBER , INVOICE_ID ,SUPPLIER DETAILS NOTHING VENDOR DETAILS).


2.) SELECT * FROM AP_INVOICE_LINES_ALL WHERE INVOICE_ID=578065              (CONTAINS AMOUNT AND LINE DETAILS).


3.) SELECT * FROM AP_INVOICE_DISTRIBUTIONS_ALL WHERE INVOICE_ID=578065      (CONTAINS THE DITSRIBUTION COMBINATION ID WHICH WE CAN GET FROM GL_CODE_COMBINATIONS).


4.) SELECT * FROM GL_CODE_COMBINATIONS WHERE CODE_COMBINATION_ID=12975.



In order to find the status of the invoice we have a package as well as a column in AP_invoice_distributions_all that tells the information.



SELECT MATCH_STATUS_FLAG FROM AP_INVOICE_DISTRIBUTIONS_ALL WHERE INVOICE_ID=578065

Select I.*, 
DECODE(APPS.Ap_Invoices_Pkg.GET_APPROVAL_STATU S(I.INVOICE_ID, 
I.INVOICE_AMOUNT,I.PAYMENT_STATUS_FLAG,I.INVOI CE_TYPE_LOOKUP_CODE),'NEVER 
APPROVED' , 'Never Validated','NEEDS REAPPROVAL', 'Needs 
Revalidation','Other') INVOICE_STATUS 
FROM AP_INVOICES_ALL......



Validated
- If ALL of the invoice distributions have a MATCH_STATUS_FLAG = 'A' 
- If MATCH_STATUS_FLAG is 'T' on ALL the distributions and org has no encumbrance enabled then Invoice would show Validated (provided there is no Unreleased Hold).
Never Validated
- If all of the invoice distributions have a MATCH_STATUS_FLAG = null or 'N'.
Needs Re-validation
- If any of the invoice distributions have a MATCH_STATUS_FLAG = 'T' and the org has Encumbrance enabled
- If the invoice distributions have MATCH_STATUS_FLAG values = 'N', null and 'A' (mixed)
- If the invoice distributions have MATCH_STATUS_FLAG value = 'S' (stopped)
- If there are any rows in AP_HOLDS that do not have a release code.

MATCH_STATUS_FLAG would remain 'T' if invoice has hold which does not allow Accounting. 
As soon as Hold is released from Holds Tab/Invoice Workbench event status is set to 'U'. 
Invoice is shown as Validated and accounting is allowed. Match_Status_Flag still remains 'T'.




Once after validating the invoice create accounting and push the manual invoices into General Leger
for that

Then Once after Creating accounting we need to Check the effected backend tables



SELECT ACCOUNTING_EVENT_ID FROM AP_INVOICE_DISTRIBUTIONS_ALL WHERE INVOICE_ID=578066(We can get the event id from ap_invoice_distribution_all)
SELECT * FROM XLA_EVENTS WHERE EVENT_ID=6222572(This Table has the EVENT status code and process status code has 'P' which indicates that the event and Invoice is processed )
SELECT * FROM XLA_AE_HEADERS WHERE EVENT_ID=6222572(This Table has GL_transfer_status_code as 'Y' which mean that data has been transfered from the XLA subledger to GL )
SELECT * FROM XLA_AE_LINES WHERE AE_HEADER_ID=8109567
SELECT * FROM GL_INTERFACE where reference26=6222572(The data from the GL interface gets cleared once we complete the journal import  program, So parallely we can get the event id from the interface )

EVENT_STATUS_CODE
Event type code    
I    Incomplete         
N    No action
P    Processed
U    Unprocessed

PROCESS_STATUS_CODE
Processing status code                  
D    Draft
E    Error
I    Incomplete
P    Processed
R    Related event in error
U    Unprocessed


Then Transfer the data to GL using Standard Program Transfer Journal entries to GL Program




SELECT * FROM GL_JE_HEADERS ORDER BY DATE_CREATED DESC (THIS TABLE CONTAINS THE LEDGER ID AND BATCH ID)
SELECT * FROM GL_JE_BATCHES WHERE JE_BATCH_ID=5355733(WE GET THE BATCH ID FROM GL_JE_HEADERS AND CONTAINS A COLUMN CALLED STATUS THAT GENERALLY TELLS THAT WHETHER IT IS POSTED FINALLY TO GL_BALANCES OR NOT)
SELECT * FROM GL_JE_LINES WHERE JE_HEADER_ID= 7109876(EVEN THIS TABLE CONTAINS THE COLUMN CALLED STATUS THAT TELLS WHETHER THE PARTICULAR TRANSACTION IS POSTED TO GL BALANCES)

IF STATUS=U ===> Then it is unposted
STATUS=P ==> Then it is Posted








Goto General Ledger Journal Post==> give the details of the journal; that we would like to post



                                Finally we Post the Final Balances




SELECT * FROM GL_BALANCES WHERE CODE_COMBINATION_ID=13402 ORDER BY LAST_UPDATE_DATE DESC









Oracle Payables business process flow is setup, suppliers, invoices and payments, inquiry and reporting and period-end processing. The Oracles Payables business flow is setup, supplier entry, invoice entry, payments or disbursements generation, inquiry and reporting and period-end processing. Each organization must define its specific operating environment.
What are all the Modules Interacting with AP? 
Cash Management
Oracle iExpenses
General Ledger
Oracle Assets
Subledger Accounting (R12)
HRMS
Project Accounting
Purchasing/iprocurement
Global Accounting Engine (11i)
Define Payment Terms and their Types
Payment Terms are defined to automatically create payment schedule lines for an invoice.  The due date for every invoice    shall be determined by the Payment Term associated with it. Multiple scheduled lines and multiple levels of discount can be defined in payment terms. There is no limit to number of Payment Terms that can be defined for an organization.
While scheduling, the payment term determines the following with regard to an invoice:
a.    Number of installments in which the invoice needs to be settled
b.    Amount in each installment
c.    Due Date of each installment
d.    Discounts available for early payment of each installment.
Navigation: Setup> Invoice> Payment Terms
The due date of every installment is determined by TERMS DATE BASIS. The Terms Date can be any of Invoice Date, Invoice Received Date, Goods Received Date or Systems Date. In a case where the PO Payment term differs from the Invoice payment term, the payment term which has better ranking shall take precedence. Changing the Payment Terms in an invoice after the payment lines are scheduled changes the scheduled payment lines. 
What is terms date basis?
Terms Date Basis is to calculate due date.
Due date is calculated 4way. Eg: payment term is 30days
  • Due date = Sysdate + 30days
  • Due date = Invoice date + 30days
  • Due date = Goods Receive Date + 30days
  • Due date = Invoice Received date + 30days
How many types of Invoices we can create in Oracle Payables?
A. Standard
B. Debit Memo
C. Credit Memo
D. Pre-Payment
E. Expense Report
F. Withholding Tax Invoice
G. Miscellaneous Invoice
What are the types of Invoice Matching in AP
Invoice matching can be two-way (invoice to PO), three-way (invoice to PO to receipt) and four-way (invoice to PO to receipt to inspection of goods)
What is the difference between Debit and Credit Memo?
Debit Memo will raise the Customer.
Credit Memo will raise the Vendor.
How many Holds AP have?
System Holds: Tax, Quantity Match, Po amount with Invoice Amount
Manual Holds: Invoice Limit, Hold on Invoice

Can you Release Manual Holds? If Yes, How?
Yes. Holds – Release Holds
How many ways you can pay the Invoice Amount?
Apply in Full
Schedule Payments
Installments
How many key flexfields are there in Payables?
No key flexfields in PO,AP
What are the mandatory setups in AP?
1- Financial Options
2- Define Suppliers
3- Define Payment Terms
4- Define Payment Methods
5- Define Banks and Banks Accounts And Banks Accounts Documents
6- Open AP Accounts Periods
What is pay date basis?
The Pay Date Basis for a supplier determines the pay date for a supplier’s invoices.
• Due
• Discount
What are the Payment Methods available?
• Check – You can pay with a manual payment, a Quick payment, or in a payment batch.
• Clearing – Used for recording invoice payments to internal suppliers.
• Electronic – You generate an electronic payment file that you deliver to your bank to create payments. Use Electronic if the invoice will be paid using EFT or EDI.
• Wire – Used to manually record a wire transfer of funds between your bank and your supplier’s bank.
What is the difference between quick payment and manual payment?
Quick Payment: It allows you to make a single payment against one or more invoices at a time to one supplier through payables.
Manual Payment: This is the process of entering the check details which has been paid manually in some emergency requirements into the payment form and selecting the invoices of the concerned supplier and check whether the total of the invoices and the paid amount at the header are same and save.
What are Aging Periods?
Aging periods are nothing but the periods that we setup to control and maintain the supplier outstanding bill towards the invoice. From this we can able to study the due date of the supplier form the generation of invoice.
Steps to transfer the data from AP to GL
 R12
     a) Run Create Accounting with the parameter Transfer to GL as Yes.
     b) Run Create Accounting with the parameter Transfer to GL as No and run Tranfer Journal
        Entries to GL.
        1. Create Accounting
        2. Transfer to GL (includes Journal Import)
        3. Post to GL
     Parameters:
        a. Error Only : Yes (Only erred events will be picked up. Try to use No)
        b. Report : In Detail (if we make it detail then it will show with the detail output.)
 11i
     a) If AX is installed
         Submit AX Posting Manager.
         1. Translate Events
         2. Tranfer to GL
         3. Journal Import
         4. Post to GL.
     b) If AX is not installed
         1.Payables accounting process
         2.Payables transfer to general ledger
         3.Journal import
         4.Post journals
Oracle Technical AP Tables
What are the Interface Tables in AP?
AP_INVOICES_INTERFACE
AP_INVOICE_LINES_INTERFACE
AP_INTERFACE_CONTROLS
————————————–
AP_SUPPLIERS_INT
AP_SUPPLIER_SITES_INT
AP_SUP_SITE_CONTACT_INT
AP_SUPPLIER_INT_REJECTIONS
What is the API to cancel single AP Invoice?
AP_CANCEL_PKG.AP_CANCEL_SINGLE_INVOICE
What is the API to find invoice status?
AP_INVOICES_PKG.GET_APPROVAL_STATUS



Friday, June 30, 2017

Interface to AP(Account Payables)

CREATE OR REPLACE PACKAGE BODY APPS.cmg_incen_epay_to_ap_pck
/*
||  CMG INCENTIVE EPAYMENTS TO AP

AS
   -- Global Variables for the package body
   error_msg        VARCHAR2 (1000) := NULL;
   output_message   VARCHAR2 (1000) := NULL;

   PROCEDURE cmg_incen_epay_to_ap_main_prc (
      errbuf    IN   VARCHAR2,
      retcode   IN   VARCHAR2,
      P_DATE IN varchar2
   )
   AS
      /* RUN FOR A SPECIFIC PARTY_NUMBER WHICH IS DERIVED FROM INCENTIVES ALSO CALLED AS RDA_RDP_ACCOUNT_NUMBER */
CURSOR   EPAY_CUR (P_DATE IN varchar2)IS
SELECT   V.PARTY_NAME HEADER_PAYEE_NAME,
         TRUNC (V.REMITTANCE_DATE),
         V.PARTY_NUMBER ,
         V.PARTY_NAME PAYEE_NAME,
        -- p.PARTY_NAME,
         V.CURRENCY_ID,
         V.CURRENCY CUR_CODE,
         SUM (V.REMITTANCE_AMOUNT) AMOUNT,
         V.PARTY_ID,
         s.vendor_id,
         s.attribute11 gl_code,
         cmg_get_ccid_fnc (s.attribute11) gl_code_id,
         ps.vendor_site_id,
         ps.invoice_currency_code,
         ps.PAYMENT_METHOD_LOOKUP_CODE
    FROM CMGIN068_CHECK_REGISTERS_VW V, CMGIN.CMG_PAYEE_DETAILS_TBL P ,PO_VENDORS S ,PO_VENDOR_SITES PS
   WHERE TRUNC (REMITTANCE_DATE) =P_DATE
     AND P.PARTY_ID = V.PARTY_ID
      AND s.vendor_id = ps.vendor_id
      AND ps.pay_site_flag = 'Y'
      AND ps.primary_pay_site_flag = 'Y'
      AND v.to_ap_flag in ('N','E')
  --    AND S.VENDOR_NAME=V.PARTY_NAME
      AND s.VENDOR_TYPE_LOOKUP_CODE='INCENTIVE'
      AND P.PARTY_ID=S.ATTRIBUTE4
     -- AND V.PARTY_NUMBER='E'
GROUP BY V.PARTY_NAME,
         TRUNC (V.REMITTANCE_DATE),
         V.PARTY_NUMBER,
         V.PARTY_NAME,
         V.CURRENCY_ID,
         V.CURRENCY,
         NVL (V.TAX_AMOUNT, 0),
         V.PARTY_ID,s.vendor_id,
         s.attribute11 ,
         cmg_get_ccid_fnc (s.attribute11),
         ps.vendor_site_id,
         ps.invoice_currency_code,
         ps.PAYMENT_METHOD_LOOKUP_CODE
ORDER BY V.PARTY_NAME;



      v_user_id          NUMBER             DEFAULT (fnd_global.user_id);
      v_username         VARCHAR2 (20);
      v_email            VARCHAR2 (30);
      v_req_id           NUMBER           DEFAULT (fnd_global.conc_request_id
                                                  );
--v_dirpath       VARCHAR(80);
      v_outpath          VARCHAR2 (80);
      v_outfilename      VARCHAR2 (35);
      v_outfile          UTL_FILE.file_type;
      v_header           VARCHAR2 (2500);
      v_line             VARCHAR2 (2500);
      v_subject          VARCHAR2 (100)     := 'Incentive to AP E-Payment detail file';
      v_record_errored   NUMBER             := 0;
      v_record_count     NUMBER             := 0;
      v_record_amount    NUMBER             := 0;
      v_total_amount     NUMBER             := 0;
   BEGIN
      SELECT user_name, email_address
        INTO v_username, v_email
        FROM fnd_user
       WHERE user_id = v_user_id;

      cmg_utility_pck.write_output
                                 (   '+--------------------------------------'
                                  || '------------+'
                                 );
      cmg_utility_pck.write_output ('CMG Applications');
      cmg_utility_pck.write_output ('Copyright (c) Comag Marketing Group');
      cmg_utility_pck.write_output
                                  (   '+-------------------------------------'
                                   || '--------------+'
                                  );
      cmg_utility_pck.write_output (   'Current System Time is : '
                                    || TO_CHAR (SYSDATE,
                                                'DD-MON-YYYY HH24:MM:SS'
                                               )
                                   );
      cmg_utility_pck.write_output (' ');
      cmg_utility_pck.write_output
                                  (   '+-------------------------------------'
                                   || '--------------+'
                                  );


      cmg_utility_pck.write_output ('test1'|| P_DATE);


      fnd_profile.get ('CMG_OUTGOING_PATH', v_outpath);
      v_outfilename :=
             'RIN_Paydetails_' || TO_CHAR (SYSDATE, 'YYMMDDHHMISS')
             || '.csv';
      v_outfile := UTL_FILE.fopen (v_outpath, v_outfilename, 'w');
      UTL_FILE.put_line (v_outfile, ',Incentive TO AP E-Payment Details');
      v_header := 'Party Number,Party Name,Error Message';
      UTL_FILE.put_line (v_outfile, v_header);


      FOR remit_rec IN epay_cur(P_DATE)
      LOOP
         IF remit_rec.amount > 0
         THEN
            IF remit_rec.gl_code_id IS NULL
            THEN
               UPDATE cmgin .cmg_remittances_tbl
                  SET to_ap_flag = 'E'
                WHERE party_id=remit_rec.party_id
                and trunc(remittance_date)=p_date;

               --  cmg_utility_pck.write_output ('Remittance Id:        Publisher Name:                 Error Message');
               --  cmg_utility_pck.write_output ( remit_rec.remittance_number||'                  '||remit_rec.publisher_name||'              '||
                 --                                          'GL Code/Vendor Pay site id is missing please verify the Supplier Setup');
               v_line :=
                     remit_rec.PARTY_number
                  || ','
                  || remit_rec.PAYEE_NAME
                  || ','
                  || 'GL Code is missing please verify the Supplier Setup/GL Code Combinations';
               UTL_FILE.put_line (v_outfile, v_line);
               v_record_errored := v_record_errored + 1;
            ELSE                                  --IF REMIT_REC.AMOUNT>0 THEN
               -- INSERT AN INVOICE HEADER --
               INSERT INTO ap_invoices_interface
                           (invoice_id,
                            invoice_num,
                            invoice_type_lookup_code, vendor_id,
                            vendor_site_id, invoice_amount,
                            invoice_currency_code, SOURCE,
                            GROUP_ID,
                            payment_method_lookup_code
                           )
                    VALUES (ap_invoices_interface_s.NEXTVAL,
                            remit_rec.party_number||'_'||p_date|| '_RINPAY',
                                                               --REMITTANCE_ID
                            'STANDARD',                           -- DEFAULTED
                                       remit_rec.vendor_id,
                                                       -- PO_VENDORS.VENDOR_ID
                            remit_rec.vendor_site_id,
                                                  -- PO_VENDORS.VENDOR_SITE_ID
                                                     remit_rec.amount,
                            remit_rec.invoice_currency_code,
                                            --PO_VENDORS.INVOICE_CURRENCY_CODE
                                                            'RIN',
                               -- AP_LOOKUP_CODES WHERE LOOKUP_TYPE = 'SOURCE'
                            'RIN_GROUP',
                            remit_rec.PAYMENT_METHOD_LOOKUP_CODE
                           );

               -- INSERT INVOICE LINE --
               INSERT INTO ap_invoice_lines_interface
                           (invoice_id,
                            invoice_line_id, line_number,
                            line_type_lookup_code, amount,
                            dist_code_combination_id
                           )
                    VALUES (ap_invoices_interface_s.CURRVAL,
                            ap_invoice_lines_interface_s.NEXTVAL, 1,
                            'ITEM', remit_rec.amount,
                            remit_rec.gl_code_id
                           );

                UPDATE cmgin .cmg_remittances_tbl
                  SET to_ap_flag = 'P'
                WHERE party_id=remit_rec.party_id
                and trunc(remittance_date)=p_date;


               v_record_count := v_record_count + 1;
               v_total_amount := remit_rec.amount + v_total_amount;




            END IF;
         END IF;

         COMMIT;
      END LOOP;

      --  cmg_utility_pck.write_output ('Total Remittances Inserted:'||v_record_count);
      --  cmg_utility_pck.write_output ('Total Amount:'||v_record_amount);

      UTL_FILE.put_line(v_outfile,'                                     ');
      UTL_FILE.put_line(v_outfile,'                                     ');
      UTL_FILE.put_line(v_outfile,'                                     ');
      UTL_FILE.put_line(v_outfile,'                                     ');
      UTL_FILE.put_line (v_outfile,
                         'Total Remittances Inserted:   ' || v_record_count
                        );
      UTL_FILE.put_line (v_outfile, 'Total Amount:     ' || v_total_amount);
      UTL_FILE.put_line (v_outfile,
                         'Total Remittances Errored:   ' || v_record_errored
                        );

      COMMIT;

     UTL_FILE.fclose (v_outfile);

      IF v_email IS NULL
      THEN
         cmg_utility_pck.write_output('Email address is not setup for this user. '
                            || 'Please contact the setup administrator'
                           );


      ELSE
         cmg_utility_pck.write_output('File created successfully');
         -- email the detail file to email address for this user.
         cmg_abc_submit_pck.main (v_req_id,
                                  v_outpath || '/' || v_outfilename,
                                  v_outfilename,
                                  v_subject,
                                  v_email
                                 );

         cmg_utility_pck.write_output('File emailed successfully');
      END IF;


      cmg_utility_pck.write_output
                                 (   '+--------------------------------------'
                                  || '------------+'
                                 );
      cmg_utility_pck.write_output ('Concurrent Request Completed');
      cmg_utility_pck.write_output
                                  (   '+-------------------------------------'
                                   || '--------------+'
                                  );
      cmg_utility_pck.write_output (   'Current System Time is : '
                                    || TO_CHAR (SYSDATE,
                                                'DD-MON-YYYY HH24:MM:SS'
                                               )
                                   );
      cmg_utility_pck.write_output (' ');
      cmg_utility_pck.write_output
                                  (   '+-------------------------------------'
                                   || '--------------+'
                                  );
   EXCEPTION
      WHEN OTHERS
      THEN
         error_msg := SQLCODE || '            ' || SQLERRM;
         cmg_utility_pck.write_output (error_msg);
   END cmg_incen_epay_to_ap_main_prc;                      --  end of procedure
END cmg_incen_epay_to_ap_pck;                                 -- end of package
/

Tuesday, June 13, 2017

Submit Concurrent Program from Back End

DECLARE
l_request_id NUMBER;
BEGIN
fnd_global.apps_initialize (user_id=>3049
,resp_id=>21623
,resp_appl_id=>660);
l_request_id := FND_REQUEST.SUBMIT_REQUEST
                ('ONT'         ,
                 'OEOIMP'     ,
                 'Order Import',
                  sysdate - 1,
                 FALSE        ,
                 1026     ,  -- order source
                 null,           -- orig_sys_document_ref
                 null        ,   -- ???
                 'N',            -- validate only flag
                 null,
                 3     -- number of instances
                 );
COMMIT;
IF l_request_id = 0 THEN
dbms_output.put_line('Request not submitted error '|| fnd_message.get);
ELSE
dbms_output.put_line('Request submitted successfully request id ' || l_request_id);
END IF;
EXCEPTION
WHEN OTHERS THEN
dbms_output.put_line('Unexpected errro ' || SQLERRM);
END;




SELECT DISTINCT fr.responsibility_id,responsibility_name,
    frx.application_id
     FROM apps.fnd_responsibility frx,
    apps.fnd_responsibility_tl fr
    WHERE fr.responsibility_id = frx.responsibility_id
  AND LOWER (fr.responsibility_name) LIKE LOWER('Order%');


DECLARE
L_REQUEST_ID NUMBER;
BEGIN
FND_GLOBAL.APPS_INITIALIZE (USER_ID=>3049
,RESP_ID=>50471
,RESP_APPL_ID=>20044);
L_REQUEST_ID := FND_REQUEST.SUBMIT_REQUEST
                ('FND'         ,-- application Short name
                 'APPS_TEST1'     ,--Concurrent program Short name
                 'APPS_TEST',-- description
                  SYSDATE - 1,
                 FALSE      
                 );
COMMIT;
IF L_REQUEST_ID = 0 THEN
DBMS_OUTPUT.PUT_LINE('Request not submitted error '|| FND_MESSAGE.GET);
ELSE
DBMS_OUTPUT.PUT_LINE('Request submitted successfully request id ' || L_REQUEST_ID);
END IF;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Unexpected errro ' || SQLERRM);
END;

Friday, June 2, 2017

Interface

CREATE OR REPLACE PACKAGE APPS.CMG_MAG_PUB_PAY AS
/*
   NAME:       CMG_MAG_PUB_PAY
   PURPOSE:    THIS PACKAGE GENERATES A CSV REPORT FOR MAGCORE PUBLISHER PAYABLES.

   REVISIONS:
   VER        DATE        AUTHOR           DESCRIPTION
   ---------  ----------  ---------------  ------------------------------------
   1.0        05/31/2017  SIDDHARTH          MAGCORE PUBLLISHER PAYABLES
*/
PROCEDURE CMG_MAGCORE_PUB_PAY( P_ERRBUF OUT VARCHAR2,
                            P_RETCODE OUT VARCHAR2);
                         
PROCEDURE CMG_MAGG_PUB_PAY( P_ERRBUF OUT VARCHAR2,
                            P_RETCODE OUT VARCHAR2);

PROCEDURE CMG_CORE_PUB_PAY( P_ERRBUF OUT VARCHAR2,
                            P_RETCODE OUT VARCHAR2);
END CMG_MAG_PUB_PAY;
/


CREATE OR REPLACE PACKAGE BODY APPS.CMG_MAG_PUB_PAY AS
/*
   NAME:       CMG_MAG_PUB_PAY
   PURPOSE:  

   REVISIONS:
   VER        DATE        AUTHOR           DESCRIPTION
   ---------  ----------  ---------------  ------------------------------------
   1.0        05/31/2017  SIDDHARTH        MAGCORE PUBLISHER PAYABLES.
*/

PROCEDURE CMG_MAGG_PUB_PAY( P_ERRBUF OUT VARCHAR2,
                             P_RETCODE OUT VARCHAR2) AS
--************ HEADER ONLY QUERY ********************
 CURSOR ISS_CUR  IS
 SELECT
  CMGPPA.CMG_PPA_CONTRACT_TBL.CTR_ID CTR_ID,
  RTRIM(TO_CHAR(CMGPPA.CMG_PPA_CONTRACT_TBL.CTR_START_DATE,'DD-MON-YY') || ' thru ' || TO_CHAR(CMGPPA.CMG_PPA_CONTRACT_TBL.CTR_END_DATE,'DD-MON-YY')) START_TO_END,
  CMGPPA.CMG_PPA_CONTRACT_HEADER_TBL.PUBLISHER_NAME PUBLISHER_NAME,
  CMGPPA.CMG_PPA_CONTRACT_TBL.CTR_AGREEMENT_DATE CTR_AGREEMENT_DATE,
  CMGPPA.CMG_PPA_CONTRACT_TBL.CTR_START_DATE     CTR_START_DATE,
  CMGPPA.CMG_PPA_CONTRACT_TBL.CTR_END_DATE       CTR_END_DATE,
  CMGPPA.CMG_PPA_CONTRACT_TBL.TERMINATION_STATUS TERMINATION_STATUS,
  REPLACE(REPLACE(CMGPPA.CMG_PPA_CONTRACT_TBL.TERMINATION_DETAILS,CHR(13),''),CHR(10),' ') TERMINATION_DETAILS,
  CMGPPA.CMG_PPA_CONTRACT_TBL.DIST_TERRITORY DIST_TERRITORY,
  CMGPPA.CMG_PPA_CONTRACT_TBL.SPL_BROKERAGE_FLAG SPL_BROKERAGE_FLAG
FROM
  CMGPPA.CMG_PPA_CONTRACT_TBL,
  CMGPPA.CMG_PPA_CONTRACT_HEADER_TBL
WHERE
  ( CMGPPA.CMG_PPA_CONTRACT_HEADER_TBL.HEADER_CTR_ID=CMGPPA.CMG_PPA_CONTRACT_TBL.HEADER_CTR_ID  )
  AND
  (
   CMGPPA.CMG_PPA_CONTRACT_TBL.CTR_END_DATE  >  TO_DATE('01-01-2016','MM/DD/YYYY')
   AND
   CMGPPA.CMG_PPA_CONTRACT_TBL.TERMINATION_STATUS  NOT IN  ('T','V')
  );

 V_REQ_ID                 NUMBER DEFAULT (FND_GLOBAL.CONC_REQUEST_ID);
 V_USER_NAME              VARCHAR2 (80);
 V_USER_ID                NUMBER DEFAULT (FND_GLOBAL.USER_ID);
 V_OUTFILENAME            VARCHAR2 (60);
 V_EMAIL                  VARCHAR2 (40);
 V_SUBJECT                VARCHAR2 (100) := 'CMG_MAG_PUB_PAYABLES-2 -->'|| TO_CHAR (SYSDATE,  'YYMMDDHHMISS');
 V_OUTPATH                VARCHAR2 (100);
 V_OUTFILE                UTL_FILE.FILE_TYPE;
 V_HEADER                 VARCHAR2(25000);
 V_LINE                   VARCHAR2 (25000);

 BEGIN

      P_ERRBUF := NULL;
      P_RETCODE := 0;


     SELECT USER_NAME,EMAIL_ADDRESS
        INTO V_USER_NAME,V_EMAIL
        FROM FND_USER
       WHERE USER_ID = V_USER_ID;

     FND_PROFILE.GET ('CMG_OUTGOING_PATH', V_OUTPATH);
     V_OUTFILENAME :='CMG_Mag_Pub_Pay'||TO_CHAR (SYSDATE, 'MMYYYY')|| '.csv';
     V_OUTFILE := UTL_FILE.FOPEN (V_OUTPATH, V_OUTFILENAME, 'w',max_linesize => 32767);


      V_HEADER := 'CTR_ID,START_TO_END,PUBLISHER_NAME,CTR_AGREEMENT_DATE,CTR_START_DATE,CTR_END_DATE,TERMINATION_STATUS,TERMINATION_DETAILS,DIST_TERRITORY,SPL_BROKERAGE_FLAG';

      UTL_FILE.PUT_LINE (V_OUTFILE, V_HEADER);

      CMG_UTILITY_PCK.WRITE_OUTPUT (
         '+--------------------------------------' || '-------------+');

      CMG_UTILITY_PCK.WRITE_OUTPUT ('Oracle Applications');
      CMG_UTILITY_PCK.WRITE_OUTPUT ('Copyright (c) Comag Marketing Group');
      CMG_UTILITY_PCK.WRITE_OUTPUT (
         '+-------------------------------------' || '--------------+');
      CMG_UTILITY_PCK.WRITE_OUTPUT (
            'Current System Time is : '
         || TO_CHAR (SYSDATE, 'DD-MON-YYYY HH24:MM:SS'));
      CMG_UTILITY_PCK.WRITE_OUTPUT (' ');
      CMG_UTILITY_PCK.WRITE_OUTPUT (
         '+-------------------------------------' || '--------------+');

  FOR ISS_REC IN ISS_CUR LOOP

     V_LINE :=  ISS_REC.CTR_ID
                ||','
                ||ISS_REC.START_TO_END
                ||','              
                ||'"'
                ||ISS_REC.PUBLISHER_NAME
                ||'"'
                ||','
                ||ISS_REC.CTR_AGREEMENT_DATE
                ||','
                ||ISS_REC.CTR_START_DATE
                ||','
                ||ISS_REC.CTR_END_DATE
                ||','
                ||ISS_REC.TERMINATION_STATUS
                ||','
                ||'"'
                ||ISS_REC.TERMINATION_DETAILS
                ||'"'
                ||','
                ||'"'
                ||ISS_REC.DIST_TERRITORY
                ||'"'
                ||','
                ||ISS_REC.SPL_BROKERAGE_FLAG;
             
   UTL_FILE.PUT_LINE (V_OUTFILE, V_LINE);

END LOOP;

  UTL_FILE.FCLOSE (V_OUTFILE);

   IF V_EMAIL IS NULL
      THEN
         CMG_UTILITY_PCK.WRITE_OUTPUT (
               'EMAIL ADDRESS IS NOT SETUP FOR THIS USER'
            || 'PLEASE CONTACT THE SETUP ADMINISTRATOR');
      ELSE
         CMG_UTILITY_PCK.WRITE_OUTPUT ('FILE CREATED SUCCESSFULLY');
         -- EMAIL THE DETAIL FILE TO EMAIL ADDRESS FOR THIS USER.
         CMG_ABC_SUBMIT_PCK.MAIN (V_REQ_ID,
                                  V_OUTPATH || '/' || V_OUTFILENAME,
                                  V_OUTFILENAME,
                                  V_SUBJECT,
                                  V_EMAIL);


         CMG_UTILITY_PCK.WRITE_OUTPUT ('FILE EMAILED SUCCESSFULLY');
      END IF;

      CMG_UTILITY_PCK.WRITE_OUTPUT ('');
      CMG_UTILITY_PCK.WRITE_OUTPUT ('');
      CMG_UTILITY_PCK.WRITE_OUTPUT ('+-------------------------------------' || '--------------+');
   
EXCEPTION
WHEN UTL_FILE.INVALID_OPERATION THEN
FND_FILE.PUT_LINE(FND_FILE.LOG,'INVALID OPERATION');
WHEN UTL_FILE.INVALID_PATH THEN
FND_FILE.PUT_LINE(FND_FILE.LOG,'INVALID PATH');
WHEN UTL_FILE.INVALID_MODE THEN
FND_FILE.PUT_LINE(FND_FILE.LOG,'INVALID MODE');
WHEN UTL_FILE.INVALID_FILEHANDLE THEN
FND_FILE.PUT_LINE(FND_FILE.LOG,'INVALID FILE');
WHEN UTL_FILE.READ_ERROR THEN
FND_FILE.PUT_LINE(FND_FILE.LOG,'READ ERROR');
WHEN UTL_FILE.INTERNAL_ERROR THEN
FND_FILE.PUT_LINE(FND_FILE.LOG,'INTERNAL ERROR');
WHEN OTHERS THEN
P_RETCODE:=2;
P_ERRBUF := SQLERRM;
FND_FILE.PUT_LINE(FND_FILE.LOG,'OTHER ERROR');


END CMG_MAGG_PUB_PAY;

PROCEDURE CMG_MAGCORE_PUB_PAY ( P_ERRBUF OUT VARCHAR2,
                            P_RETCODE OUT VARCHAR2) AS
--******************************QUERY FOR SENDING TO KABLE FOR MAGCORE PUBLISHER PAYABLES*************************************
 CURSOR ISS_CUR  IS
 SELECT
  CMGPPA.CMG_PPA_CONTRACT_TBL.ORG_ID ORG_ID,
  CMGPPA.CMG_PPA_CONTRACT_HEADER_TBL.VENDOR_SITE_ID VENDOR_SITE_ID,
  TRIM(CMGPPA.CMG_PPA_CONTRACT_HEADER_TBL.PUBLISHER_NAME) PUBLISHER_NAME,
  CMGPPA.CMG_PPA_CONTRACT_HEADER_TBL.HEADER_CTR_ID HEADER_CTR_ID,
  CMGPPA.CMG_PPA_CONTRACT_TBL.CTR_ID CTR_ID,
  CMGPPA.CMG_PPA_SUBCONTRACT_TBL.SUBCTR_ID SUBCTR_ID,
  CMGPPA.CMG_PPA_CONTRACT_TBL.CTR_START_DATE CTR_START_DATE,
  CMGPPA.CMG_PPA_CONTRACT_TBL.CTR_END_DATE CTR_END_DATE,
  CMGPPA.CMG_PPA_CONTRACT_TBL.CTR_AGREEMENT_DATE CTR_AGREEMENT_DATE,
  CMGPPA.CMG_PPA_CONTRACT_TBL.TERMINATION_STATUS TERMINATION_STATUS,
  CMGPPA.CMG_PPA_TITLE_SUBCTR_TBL.START_DATE START_DATE,
  REPLACE(REPLACE(CMGPPA.CMG_PPA_CONTRACT_TBL.RENEWAL_INFORMATION,CHR(13),''),CHR(10),' ') RENEWAL_INFORMATION,
  CMGPPA.CMG_PPA_SUBCONTRACT_TBL.BROK_BASED_ON BROK_BASED_ON,
  CMGPPA.CMG_PPA_SUBCONTRACT_TBL.BROK_BY_SET_FEE BROK_BY_SET_FEE,
  CMGPPA.CMG_PPA_SUBCONTRACT_TBL.STD_BROK_PERCENT STD_BROK_PERCENT,
  CMGPPA.CMG_PPA_SUBCONTRACT_TBL.SET_FEE_DESCRIPTION SET_FEE_DESCRIPTION,
  CMGPPA.CMG_PPA_BROK_DATE_ISS_TBL.BROK_START_DATE BROK_START_DATE,
  CMGPPA.CMG_PPA_BROK_DATE_ISS_TBL.BROK_END_DATE BROK_END_DATE,
  CMGPPA.CMG_PPA_BROK_DATE_ISS_TBL.BROK_PERCENT BROK_PERCENT,
  CMGPPA.CMG_PPA_SUBCONTRACT_TBL.DISCOUNT_PERCENT DISCOUNT_PERCENT,
  CMGPPA.CMG_PPA_SUBCONTRACT_TBL.STD_COMM_TYPE STD_COMM_TYPE,
  CMGPPA.CMG_PPA_EXCEPTIONS_TBL.WHOLESALER_NAME WHOLESALER_NAME,
  CMGPPA.CMG_PPA_EXCEPTIONS_TBL.EXCP_BROK_PERCENT EXCP_BROK_PERCENT,
  CMGPPA.CMG_PPA_EXCEPTIONS_TBL.EXCP_BASED_ON EXCP_BASED_ON,
  CMGPPA.CMG_PPA_EXCEPTIONS_TBL.EXCP_DISCOUNT_PERCENT EXCP_DISCOUNT_PERCENT
FROM
  CMGPPA.CMG_PPA_CONTRACT_TBL,
  CMGPPA.CMG_PPA_CONTRACT_HEADER_TBL,
  CMGPPA.CMG_PPA_SUBCONTRACT_TBL,
  CMGPPA.CMG_PPA_TITLE_SUBCTR_TBL,
  CMGPPA.CMG_PPA_BROK_DATE_ISS_TBL,
  CMGPPA.CMG_PPA_EXCEPTIONS_TBL
WHERE
  ( CMGPPA.CMG_PPA_CONTRACT_HEADER_TBL.HEADER_CTR_ID=CMGPPA.CMG_PPA_CONTRACT_TBL.HEADER_CTR_ID  )
  AND  ( CMGPPA.CMG_PPA_CONTRACT_TBL.CTR_ID=CMGPPA.CMG_PPA_SUBCONTRACT_TBL.CTR_ID  )
  AND  ( CMGPPA.CMG_PPA_SUBCONTRACT_TBL.SUBCTR_ID=CMGPPA.CMG_PPA_EXCEPTIONS_TBL.SUBCTR_ID(+)  )
  AND  ( CMGPPA.CMG_PPA_SUBCONTRACT_TBL.SUBCTR_ID=CMGPPA.CMG_PPA_BROK_DATE_ISS_TBL.SUBCTR_ID(+)  )
  AND  ( CMGPPA.CMG_PPA_SUBCONTRACT_TBL.SUBCTR_ID=CMGPPA.CMG_PPA_TITLE_SUBCTR_TBL.SUBCTR_ID  )
  AND
  (
   CMGPPA.CMG_PPA_CONTRACT_TBL.CTR_END_DATE  >=  TO_DATE('01-01-2016','MM/DD/YYYY')
   AND
   CMGPPA.CMG_PPA_CONTRACT_TBL.TERMINATION_STATUS  IN  ( 'A','P'  )
  );

 V_REQ_ID                 NUMBER DEFAULT (FND_GLOBAL.CONC_REQUEST_ID);
 V_USER_NAME              VARCHAR2 (80);
 V_USER_ID                NUMBER DEFAULT (FND_GLOBAL.USER_ID);
 V_OUTFILENAME            VARCHAR2 (60);
 V_EMAIL                  VARCHAR2 (40);
 V_SUBJECT                VARCHAR2 (100) := 'CMG_MAG_PUB_PAYABLES-1 -->'|| TO_CHAR (SYSDATE,  'YYMMDDHHMISS');
 V_OUTPATH                VARCHAR2 (100);
 V_OUTFILE                UTL_FILE.FILE_TYPE;
 V_HEADER                 VARCHAR2(25000);
 V_LINE                   VARCHAR2 (25000);

 BEGIN

      P_ERRBUF := NULL;
      P_RETCODE := 0;


     SELECT USER_NAME,EMAIL_ADDRESS
        INTO V_USER_NAME,V_EMAIL
        FROM FND_USER
       WHERE USER_ID = V_USER_ID;

     FND_PROFILE.GET ('CMG_OUTGOING_PATH', V_OUTPATH);
     V_OUTFILENAME :='CMG_Mag_Pub_Pay'||TO_CHAR (SYSDATE, 'MMYYYY')|| '.csv';
     V_OUTFILE := UTL_FILE.FOPEN (V_OUTPATH, V_OUTFILENAME, 'w');


      V_HEADER := 'ORG_ID,VENDOR_SITE_ID,HEADER_CTR_ID,CTR_ID,SUBCTR_ID,CTR_START_DATE,CTR_END_DATE,CTR_AGREEMENT_DATE,TERMINATION_STATUS,START_DATE,RENEWAL_INFORMATION,BROK_BASED_ON,BROK_BY_SET_FEE,STD_BROK_PERCENT,SET_FEE_DESCRIPTION,BROK_START_DATE,BROK_END_DATE,BROK_PERCENT,DISCOUNT_PERCENT,STD_COMM_TYPE,WHOLESALER_NAME,EXCP_BROK_PERCENT,EXCP_BASED_ON,EXCP_DISCOUNT_PERCENT';


      UTL_FILE.PUT_LINE (V_OUTFILE, V_HEADER);

      CMG_UTILITY_PCK.WRITE_OUTPUT (
         '+--------------------------------------' || '-------------+');

      CMG_UTILITY_PCK.WRITE_OUTPUT ('Oracle Applications');
      CMG_UTILITY_PCK.WRITE_OUTPUT ('Copyright (c) Comag Marketing Group');
      CMG_UTILITY_PCK.WRITE_OUTPUT (
         '+-------------------------------------' || '--------------+');
      CMG_UTILITY_PCK.WRITE_OUTPUT (
            'Current System Time is : '
         || TO_CHAR (SYSDATE, 'DD-MON-YYYY HH24:MM:SS'));
      CMG_UTILITY_PCK.WRITE_OUTPUT (' ');
      CMG_UTILITY_PCK.WRITE_OUTPUT (
         '+-------------------------------------' || '--------------+');

  FOR ISS_REC IN ISS_CUR LOOP

     V_LINE :=  ISS_REC.ORG_ID
                ||','
                ||ISS_REC.VENDOR_SITE_ID
                ||','
                ||'"'
                ||ISS_REC.PUBLISHER_NAME
                ||'"'
                ||','
                ||ISS_REC.HEADER_CTR_ID
                ||','
                ||ISS_REC.CTR_ID
                ||','
                ||ISS_REC.SUBCTR_ID
                ||','
                ||ISS_REC.CTR_START_DATE
                ||','
                ||ISS_REC.CTR_END_DATE
                ||','
                ||ISS_REC.CTR_AGREEMENT_DATE
                ||','
                ||'"'
                ||ISS_REC.TERMINATION_STATUS
                ||'"'
                ||','
                ||ISS_REC.START_DATE
                ||','
                ||'"'
                ||ISS_REC.RENEWAL_INFORMATION
                ||'"'
                ||','
                ||'"'
                ||ISS_REC.BROK_BASED_ON
                ||'"'
                ||','
                ||'"'
                ||ISS_REC.BROK_BY_SET_FEE
                ||'"'
                ||','
                ||'"'
                ||ISS_REC.STD_BROK_PERCENT
                ||'"'
                ||','
                ||'"'
                ||ISS_REC.SET_FEE_DESCRIPTION
                ||'"'
                ||','
                ||ISS_REC.BROK_START_DATE
                ||','
                ||ISS_REC.BROK_END_DATE
                ||','
                ||ISS_REC.BROK_PERCENT
                ||','
                ||'"'
                ||ISS_REC.DISCOUNT_PERCENT
                ||'"'
                ||','
                ||'"'
                ||ISS_REC.STD_COMM_TYPE
                ||'"'
                ||','
                ||'"'
                ||ISS_REC.WHOLESALER_NAME
                ||'"'
                ||','
                ||'"'
                ||ISS_REC.EXCP_BROK_PERCENT
                ||'"'
                ||','
                ||'"'
                ||ISS_REC.EXCP_BASED_ON
                ||'"'
                ||','
                ||ISS_REC.EXCP_DISCOUNT_PERCENT;

   UTL_FILE.PUT_LINE (V_OUTFILE, V_LINE);

END LOOP;

  UTL_FILE.FCLOSE (V_OUTFILE);

   IF V_EMAIL IS NULL
      THEN
         CMG_UTILITY_PCK.WRITE_OUTPUT (
               'EMAIL ADDRESS IS NOT SETUP FOR THIS USER'
            || 'PLEASE CONTACT THE SETUP ADMINISTRATOR');
      ELSE
         CMG_UTILITY_PCK.WRITE_OUTPUT ('FILE CREATED SUCCESSFULLY');
         -- EMAIL THE DETAIL FILE TO EMAIL ADDRESS FOR THIS USER.
         CMG_ABC_SUBMIT_PCK.MAIN (V_REQ_ID,
                                  V_OUTPATH || '/' || V_OUTFILENAME,
                                  V_OUTFILENAME,
                                  V_SUBJECT,
                                  V_EMAIL);


         CMG_UTILITY_PCK.WRITE_OUTPUT ('FILE EMAILED SUCCESSFULLY');
      END IF;

      CMG_UTILITY_PCK.WRITE_OUTPUT ('');
      CMG_UTILITY_PCK.WRITE_OUTPUT ('');
      CMG_UTILITY_PCK.WRITE_OUTPUT ('+-------------------------------------' || '--------------+');
   
EXCEPTION
WHEN UTL_FILE.INVALID_OPERATION THEN
FND_FILE.PUT_LINE(FND_FILE.LOG,'INVALID OPERATION');
WHEN UTL_FILE.INVALID_PATH THEN
FND_FILE.PUT_LINE(FND_FILE.LOG,'INVALID PATH');
WHEN UTL_FILE.INVALID_MODE THEN
FND_FILE.PUT_LINE(FND_FILE.LOG,'INVALID MODE');
WHEN UTL_FILE.INVALID_FILEHANDLE THEN
FND_FILE.PUT_LINE(FND_FILE.LOG,'INVALID FILE');
WHEN UTL_FILE.READ_ERROR THEN
FND_FILE.PUT_LINE(FND_FILE.LOG,'READ ERROR');
WHEN UTL_FILE.INTERNAL_ERROR THEN
FND_FILE.PUT_LINE(FND_FILE.LOG,'INTERNAL ERROR');
WHEN OTHERS THEN
P_RETCODE:=2;
P_ERRBUF := SQLERRM;
FND_FILE.PUT_LINE(FND_FILE.LOG,'OTHER ERROR');


END CMG_MAGCORE_PUB_PAY;

PROCEDURE CMG_CORE_PUB_PAY( P_ERRBUF OUT VARCHAR2,
                            P_RETCODE OUT VARCHAR2) AS
--*****************TITLES ATTACHED TO CONTRACT QUERY*******************************
 CURSOR ISS_CUR  IS
 SELECT
  CMGPPA.CMG_PPA_SUBCONTRACT_TBL.SUBCTR_ID SUBCTR_ID,
  CMGPPA.CMG_PPA_CONTRACT_HEADER_TBL.PUBLISHER_NAME PUBLISHER_NAME,
  CMGPPA.CMG_PPA_CONTRACT_HEADER_TBL.VENDOR_SITE_ID VENDOR_SITE_ID,
  CMGPPA.CMG_PPA_TITLE_DIM_TBL.TITLE TITLE,
  CMGPPA.CMG_PPA_TITLE_DIM_TBL.BIPAD BIPAD,
  CMGPPA.CMG_PPA_TITLE_SUBCTR_TBL.ASSIGNED ASSIGNED,
  CMGPPA.CMG_PPA_TITLE_SUBCTR_TBL.START_DATE START_DATE,
  CMGPPA.CMG_PPA_TITLE_SUBCTR_TBL.END_DATE END_DATE,
  CMGPPA.CMG_PPA_TITLE_SUBCTR_TBL.LAST_ISSUE LAST_ISSUE,
  CMGPPA.CMG_PPA_SUBCONTRACT_TBL.SUBCTR_STATUS SUBCTR_STATUS,
  CMGPPA.CMG_PPA_SUBCONTRACT_TBL.VALID_FLAG VALID_FLAG
FROM
  CMGPPA.CMG_PPA_SUBCONTRACT_TBL,
  CMGPPA.CMG_PPA_CONTRACT_HEADER_TBL,
  CMGPPA.CMG_PPA_TITLE_DIM_TBL,
  CMGPPA.CMG_PPA_TITLE_SUBCTR_TBL,
  CMGPPA.CMG_PPA_CONTRACT_TBL
WHERE
  ( CMGPPA.CMG_PPA_CONTRACT_HEADER_TBL.HEADER_CTR_ID=CMGPPA.CMG_PPA_CONTRACT_TBL.HEADER_CTR_ID  )
  AND  ( CMGPPA.CMG_PPA_CONTRACT_TBL.CTR_ID=CMGPPA.CMG_PPA_SUBCONTRACT_TBL.CTR_ID  )
  AND  ( CMGPPA.CMG_PPA_SUBCONTRACT_TBL.SUBCTR_ID=CMGPPA.CMG_PPA_TITLE_SUBCTR_TBL.SUBCTR_ID  )
  AND  ( CMGPPA.CMG_PPA_TITLE_DIM_TBL.TITLE_DIM_ID=CMGPPA.CMG_PPA_TITLE_SUBCTR_TBL.TITLE_DIM_ID  )
  AND
  (
   CMGPPA.CMG_PPA_CONTRACT_TBL.CTR_END_DATE  >=  TO_DATE('01-01-2016','MM/DD/YYYY')
   AND
   CMGPPA.CMG_PPA_CONTRACT_TBL.TERMINATION_STATUS  IN  ( 'A','P'  )
   AND
   CMGPPA.CMG_PPA_TITLE_SUBCTR_TBL.ASSIGNED  IN  ( 'Y'  )
  );

 V_REQ_ID                 NUMBER DEFAULT (FND_GLOBAL.CONC_REQUEST_ID);
 V_USER_NAME              VARCHAR2 (80);
 V_USER_ID                NUMBER DEFAULT (FND_GLOBAL.USER_ID);
 V_OUTFILENAME            VARCHAR2 (60);
 V_EMAIL                  VARCHAR2 (40);
 V_SUBJECT                VARCHAR2 (100) := 'CMG_MAG_PUB_PAYABLES-3'|| TO_CHAR (SYSDATE,  'YYMMDDHHMISS');
 V_OUTPATH                VARCHAR2 (100);
 V_OUTFILE                UTL_FILE.FILE_TYPE;
 V_HEADER                 VARCHAR2(25000);
 V_LINE                   VARCHAR2 (25000);

 BEGIN

      P_ERRBUF := NULL;
      P_RETCODE := 0;


     SELECT USER_NAME,EMAIL_ADDRESS
        INTO V_USER_NAME,V_EMAIL
        FROM FND_USER
       WHERE USER_ID = V_USER_ID;

     FND_PROFILE.GET ('CMG_OUTGOING_PATH', V_OUTPATH);
     V_OUTFILENAME :='CMG_Core_Pub_Pay'||TO_CHAR (SYSDATE, 'MMYYYY')|| '.csv';
     V_OUTFILE := UTL_FILE.FOPEN (V_OUTPATH, V_OUTFILENAME, 'w');


      V_HEADER := 'SUBCTR_ID,PUBLISHER_NAME,VENDOR_SITE_ID,TITLE,BIPAD,ASSIGNED,START_DATE,END_DATE,LAST_ISSUE,SUBCTR_STATUS,VALID_FLAG';

      UTL_FILE.PUT_LINE (V_OUTFILE, V_HEADER);

      CMG_UTILITY_PCK.WRITE_OUTPUT (
         '+--------------------------------------' || '-------------+');

      CMG_UTILITY_PCK.WRITE_OUTPUT ('Oracle Applications');
      CMG_UTILITY_PCK.WRITE_OUTPUT ('Copyright (c) Comag Marketing Group');
      CMG_UTILITY_PCK.WRITE_OUTPUT (
         '+-------------------------------------' || '--------------+');
      CMG_UTILITY_PCK.WRITE_OUTPUT (
            'Current System Time is : '
         || TO_CHAR (SYSDATE, 'DD-MON-YYYY HH24:MM:SS'));
      CMG_UTILITY_PCK.WRITE_OUTPUT (' ');
      CMG_UTILITY_PCK.WRITE_OUTPUT (
         '+-------------------------------------' || '--------------+');

  FOR ISS_REC IN ISS_CUR LOOP

     V_LINE :=  ISS_REC.SUBCTR_ID
                ||','
                ||'"'
                ||ISS_REC.PUBLISHER_NAME
                ||'"'
                ||','
                ||ISS_REC.VENDOR_SITE_ID
                ||','
                ||'"'
                ||ISS_REC.TITLE
                ||'"'
                ||','
                ||ISS_REC.BIPAD
                ||','
                ||ISS_REC.ASSIGNED
                ||','
                ||ISS_REC.START_DATE
                ||','
                ||ISS_REC.END_DATE
                ||','
                ||ISS_REC.LAST_ISSUE
                ||','
                ||ISS_REC.SUBCTR_STATUS
                ||','
                ||ISS_REC.VALID_FLAG;
             
   UTL_FILE.PUT_LINE (V_OUTFILE, V_LINE);

END LOOP;

  UTL_FILE.FCLOSE (V_OUTFILE);

   IF V_EMAIL IS NULL
      THEN
         CMG_UTILITY_PCK.WRITE_OUTPUT (
               'EMAIL ADDRESS IS NOT SETUP FOR THIS USER'
            || 'PLEASE CONTACT THE SETUP ADMINISTRATOR');
      ELSE
         CMG_UTILITY_PCK.WRITE_OUTPUT ('FILE CREATED SUCCESSFULLY');
         -- EMAIL THE DETAIL FILE TO EMAIL ADDRESS FOR THIS USER.
         CMG_ABC_SUBMIT_PCK.MAIN (V_REQ_ID,
                                  V_OUTPATH || '/' || V_OUTFILENAME,
                                  V_OUTFILENAME,
                                  V_SUBJECT,
                                  V_EMAIL);


         CMG_UTILITY_PCK.WRITE_OUTPUT ('FILE EMAILED SUCCESSFULLY');
      END IF;

      CMG_UTILITY_PCK.WRITE_OUTPUT ('');
      CMG_UTILITY_PCK.WRITE_OUTPUT ('');
      CMG_UTILITY_PCK.WRITE_OUTPUT ('+-------------------------------------' || '--------------+');
   

EXCEPTION
WHEN UTL_FILE.INVALID_OPERATION THEN
FND_FILE.PUT_LINE(FND_FILE.LOG,'INVALID OPERATION');
WHEN UTL_FILE.INVALID_PATH THEN
FND_FILE.PUT_LINE(FND_FILE.LOG,'INVALID PATH');
WHEN UTL_FILE.INVALID_MODE THEN
FND_FILE.PUT_LINE(FND_FILE.LOG,'INVALID MODE');
WHEN UTL_FILE.INVALID_FILEHANDLE THEN
FND_FILE.PUT_LINE(FND_FILE.LOG,'INVALID FILE');
WHEN UTL_FILE.READ_ERROR THEN
FND_FILE.PUT_LINE(FND_FILE.LOG,'READ ERROR');
WHEN UTL_FILE.INTERNAL_ERROR THEN
FND_FILE.PUT_LINE(FND_FILE.LOG,'INTERNAL ERROR');
WHEN OTHERS THEN
P_RETCODE:=2;
P_ERRBUF := SQLERRM;
FND_FILE.PUT_LINE(FND_FILE.LOG,'OTHER ERROR');

END CMG_CORE_PUB_PAY;

END CMG_MAG_PUB_PAY;
/