Monday, 4 March 2019

Query to find AR Open Balance Of a Project in Oracle Fusion

WITH
FUNCTION get_outstanding_amount (
      p_payment_schedule_id       IN   NUMBER,
      p_as_of_date                IN   DATE,
      p_invoice_type              IN   VARCHAR2,
      p_amt_due_remaining         IN   NUMBER,
      p_amount_applied            IN   NUMBER,
      p_amount_adjusted           IN   NUMBER,
      p_amount_credited           IN   NUMBER,
      p_amount_in_dispute         IN   NUMBER,
      p_amount_adjusted_pending   IN   NUMBER,
      p_convert_flag              IN   VARCHAR2,
      p_due_date                  IN   DATE,
      p_return_position           IN   NUMBER
   )
      RETURN NUMBER
   IS
      l_inv_type              CHAR (4);
      l_amount_applied_late   NUMBER (24, 2)            := 0;
      l_adjustment_amount     NUMBER (24, 2);
      l_amt_due_remaining     NUMBER (24, 2);
      l_percent_remaining     NUMBER (24, 2);
      l_payment_meaning       ar_lookups.meaning%TYPE;
      l_risk_meaning          ar_lookups.meaning%TYPE;
      l_outstanding_inv       NUMBER (14, 2);
      l_custinv_b0            NUMBER;
      l_custinv_b1            NUMBER;
      l_custinv_b2            NUMBER;
      l_custinv_b3            NUMBER;
      l_bucket_category       VARCHAR2 (10)             := NULL;
      l_bucket_days_from_0    NUMBER;
      l_bucket_days_to_0      NUMBER;
      l_bucket_line_type_0    VARCHAR2 (200);
      l_bucket_days_from_1    NUMBER;
      l_bucket_days_to_1      NUMBER;
      l_bucket_line_type_1    VARCHAR2 (200);
      l_bucket_days_from_2    NUMBER;
      l_bucket_days_to_2      NUMBER;
      l_bucket_line_type_2    VARCHAR2 (200);
      l_bucket_days_from_3    NUMBER;
      l_bucket_days_to_3      NUMBER;
      l_bucket_line_type_3    VARCHAR2 (200);
      l_b0_inv                NUMBER;
      l_b1_inv                NUMBER;
      l_b2_inv                NUMBER;
      l_b3_inv                NUMBER;
   BEGIN
      l_adjustment_amount := 0;
      l_amt_due_remaining := 0;
      l_outstanding_inv := 0;
      l_custinv_b0 := 0;
      l_custinv_b1 := 0;
      l_custinv_b2 := 0;
      l_custinv_b3 := 0;
      --
      l_outstanding_inv := NVL (p_amt_due_remaining, 0);
      -- Get l_payment_meaning
      SELECT meaning
        INTO l_payment_meaning
        FROM ar_lookups
       WHERE lookup_type = 'INV/CM/ADJ' AND lookup_code = 'PMT';
      -- Get l_risk_meaning
      SELECT meaning
        INTO l_risk_meaning
        FROM ar_lookups
       WHERE lookup_type = 'MISC_PHRASES' AND lookup_code = 'RISK';
      -- Get bucket_line_type_0, bucket_days_start_0, bucket_days_to_0
      SELECT lines.days_start, lines.days_to, lines.TYPE
        INTO l_bucket_days_from_0, l_bucket_days_to_0, l_bucket_line_type_0
        FROM ar_aging_bucket_lines_b lines, ar_aging_buckets buckets
       WHERE lines.aging_bucket_id = buckets.aging_bucket_id
         AND NVL (buckets.status, 'A') = 'A'
         AND buckets.aging_type = '4BUCKET'
         AND buckets.bucket_name = 'Standard'
         AND lines.bucket_sequence_num = 0;
      -- Get bucket_line_type_1, bucket_days_start_1, bucket_days_to_1
      SELECT lines.days_start, lines.days_to, lines.TYPE
        INTO l_bucket_days_from_1, l_bucket_days_to_1, l_bucket_line_type_1
        FROM ar_aging_bucket_lines_b lines, ar_aging_buckets buckets
       WHERE lines.aging_bucket_id = buckets.aging_bucket_id
         AND NVL (buckets.status, 'A') = 'A'
         AND buckets.aging_type = '4BUCKET'
         AND buckets.bucket_name = 'Standard'
         AND lines.bucket_sequence_num = 1;
      -- Get bucket_line_type_2, bucket_days_start_2, bucket_days_to_2
      SELECT lines.days_start, lines.days_to, lines.TYPE
        INTO l_bucket_days_from_2, l_bucket_days_to_2, l_bucket_line_type_2
        FROM ar_aging_bucket_lines_b lines, ar_aging_buckets buckets
       WHERE lines.aging_bucket_id = buckets.aging_bucket_id
         AND NVL (buckets.status, 'A') = 'A'
         AND buckets.aging_type = '4BUCKET'
         AND buckets.bucket_name = 'Standard'
         AND lines.bucket_sequence_num = 2;
      -- Get bucket_line_type_3, bucket_days_start_3, bucket_days_to_3
      SELECT lines.days_start, lines.days_to, lines.TYPE
        INTO l_bucket_days_from_3, l_bucket_days_to_3, l_bucket_line_type_3
        FROM ar_aging_bucket_lines_b lines, ar_aging_buckets buckets
       WHERE lines.aging_bucket_id = buckets.aging_bucket_id
         AND NVL (buckets.status, 'A') = 'A'
         AND buckets.aging_type = '4BUCKET'
         AND buckets.bucket_name = 'Standard'
         AND lines.bucket_sequence_num = 3;

      IF (p_invoice_type NOT IN (l_payment_meaning, l_risk_meaning))
      THEN
         IF (p_amount_applied IS NOT NULL)
         THEN
         begin
            SELECT NVL( SUM (DECODE (p_convert_flag, 'Y', (  DECODE (ps.CLASS, 'CM', DECODE
                                                (ra.application_type, 'CM', ra.acctd_amount_applied_from, ra.acctd_amount_applied_to), ra.acctd_amount_applied_to)
                                       + NVL (ra.acctd_earned_discount_taken, 0 )
                                       + NVL (ra.acctd_unearned_discount_taken, 0 ) ),
                                 (  ra.amount_applied + NVL (ra.earned_discount_taken, 0) + NVL (ra.unearned_discount_taken, 0) ) )
                           * DECODE (ps.CLASS, 'CM', DECODE (ra.application_type, 'CM', -1, 1 ), 1 ) ), 0
                      )
              INTO l_amount_applied_late
              FROM ar_receivable_applications_all ra,
                   ar_payment_schedules_all ps
             WHERE (   ra.applied_payment_schedule_id = p_payment_schedule_id
                    OR ra.payment_schedule_id = p_payment_schedule_id
                   )
               AND ra.status || '' = 'APP'
               AND NVL (ra.confirmed_flag, 'Y') = 'Y'
               AND ra.gl_date + 0 > TO_DATE (p_as_of_date, 'DD-MON-YY')
               AND ps.payment_schedule_id = p_payment_schedule_id;
         exception when others then
            l_amount_applied_late:=0;
         end ;  
         END IF;

         IF (p_amount_applied IS NULL)
         THEN
            IF (p_amount_credited IS NOT NULL)
            THEN
            begin
               SELECT NVL
                         (SUM
                             (  DECODE
                                   (p_convert_flag,
                                    'Y', (  DECODE
                                               (ps.CLASS,
                                                'CM', DECODE
                                                   (ra.application_type,
                                                    'CM', ra.acctd_amount_applied_from,
                                                    ra.acctd_amount_applied_to
                                                   ),
                                                ra.acctd_amount_applied_to
                                               )
                                          + NVL
                                               (ra.acctd_earned_discount_taken,
                                                0
                                               )
                                          + NVL
                                               (ra.acctd_unearned_discount_taken,
                                                0
                                               )
                                     ),
                                    (  ra.amount_applied
                                     + NVL (ra.earned_discount_taken, 0)
                                     + NVL (ra.unearned_discount_taken, 0)
                                    )
                                   )
                              * DECODE (ps.CLASS,
                                        'CM', DECODE (ra.application_type,
                                                      'CM', -1,
                                                      1
                                                     ),
                                        1
                                       )
                             ),
                          0
                         )
                 INTO l_amount_applied_late
                 FROM ar_receivable_applications_all ra,
                      ar_payment_schedules_all ps
                WHERE (   ra.applied_payment_schedule_id =
                                                         p_payment_schedule_id
                       OR ra.payment_schedule_id = p_payment_schedule_id
                      )
                  AND ra.status || '' = 'APP'
                  AND NVL (ra.confirmed_flag, 'Y') = 'Y'
                  AND ra.gl_date + 0 > p_as_of_date
                  AND ps.payment_schedule_id = p_payment_schedule_id
                                                                    -- AND   ra.receivable_application_id+0 < :rp_app_max_id
               ;
            exception when others then
            l_amount_applied_late :=0;  
            end;  
            END IF;
         END IF;
            l_amt_due_remaining := l_amount_applied_late;
         IF p_amount_adjusted IS NOT NULL
         THEN
         begin
            SELECT NVL (SUM (DECODE (p_convert_flag,
                                     'Y', acctd_amount,
                                     amount
                                    )
                            ),
                        0
                       )
              INTO l_adjustment_amount
              FROM ar_adjustments_all
             WHERE gl_date > p_as_of_date
               AND payment_schedule_id = p_payment_schedule_id
               AND status = 'A';
         exception when others then
         l_adjustment_amount :=0;     
          end;
            -- AND     adjustment_id < :rp_adj_max_id;
            l_amt_due_remaining :=
                            l_amt_due_remaining - NVL (l_adjustment_amount, 0);
         END IF;

         l_outstanding_inv := l_outstanding_inv + l_amt_due_remaining;
      END IF;

      -- Get l_b0_inv
      SELECT DECODE (l_bucket_line_type_0,
                     'DISPUTE_ONLY', DECODE (NVL (p_amount_in_dispute, 0),
                                             0, 0,
                                             1
                                            ),
                     'PENDADJ_ONLY', DECODE (NVL (p_amount_adjusted_pending,
                                                  0),
                                             0, 0,
                                             1
                                            ),
                     'DISPUTE_PENDADJ', DECODE
                                    (NVL (p_amount_in_dispute, 0),
                                     0, DECODE
                                             (NVL (p_amount_adjusted_pending,
                                                   0
                                                  ),
                                              0, 0,
                                              1
                                             ),
                                     1
                                    ),
                       DECODE (GREATEST (l_bucket_days_from_0,
                                         CEIL (p_as_of_date - p_due_date)
                                        ),
                               LEAST (l_bucket_days_to_0,
                                      CEIL (p_as_of_date - p_due_date)
                                     ), 1,
                               0
                              )
                     * DECODE (NVL (p_amount_in_dispute, 0),
                               0, 1,
                               DECODE (l_bucket_category,
                                       'DISPUTE_ONLY', 0,
                                       'DISPUTE_PENDADJ', 0,
                                       1
                                      )
                              )
                     * DECODE (NVL (p_amount_adjusted_pending, 0),
                               0, 1,
                               DECODE (l_bucket_category,
                                       'PENDADJ_ONLY', 0,
                                       'DISPUTE_PENDADJ', 0,
                                       1
                                      )
                              )
                    )
        INTO l_b0_inv
        FROM DUAL;

      -- Get l_b1_inv
      SELECT DECODE (l_bucket_line_type_1,
                     'DISPUTE_ONLY', DECODE (NVL (p_amount_in_dispute, 0),
                                             0, 0,
                                             1
                                            ),
                     'PENDADJ_ONLY', DECODE (NVL (p_amount_adjusted_pending,
                                                  0),
                                             0, 0,
                                             1
                                            ),
                     'DISPUTE_PENDADJ', DECODE
                                    (NVL (p_amount_in_dispute, 0),
                                     0, DECODE
                                             (NVL (p_amount_adjusted_pending,
                                                   0
                                                  ),
                                              0, 0,
                                              1
                                             ),
                                     1
                                    ),
                       DECODE (GREATEST (l_bucket_days_from_1,
                                         CEIL (p_as_of_date - p_due_date)
                                        ),
                               LEAST (l_bucket_days_to_1,
                                      CEIL (p_as_of_date - p_due_date)
                                     ), 1,
                               0
                              )
                     * DECODE (NVL (p_amount_in_dispute, 0),
                               0, 1,
                               DECODE (l_bucket_category,
                                       'DISPUTE_ONLY', 0,
                                       'DISPUTE_PENDADJ', 0,
                                       1
                                      )
                              )
                     * DECODE (NVL (p_amount_adjusted_pending, 0),
                               0, 1,
                               DECODE (l_bucket_category,
                                       'PENDADJ_ONLY', 0,
                                       'DISPUTE_PENDADJ', 0,
                                       1
                                      )
                              )
                    )
        INTO l_b1_inv
        FROM DUAL;

      -- Get l_b2_inv
      SELECT DECODE (l_bucket_line_type_2,
                     'DISPUTE_ONLY', DECODE (NVL (p_amount_in_dispute, 0),
                                             0, 0,
                                             1
                                            ),
                     'PENDADJ_ONLY', DECODE (NVL (p_amount_adjusted_pending,
                                                  0),
                                             0, 0,
                                             1
                                            ),
                     'DISPUTE_PENDADJ', DECODE
                                    (NVL (p_amount_in_dispute, 0),
                                     0, DECODE
                                             (NVL (p_amount_adjusted_pending,
                                                   0
                                                  ),
                                              0, 0,
                                              1
                                             ),
                                     1
                                    ),
                       DECODE (GREATEST (l_bucket_days_from_2,
                                         CEIL (p_as_of_date - p_due_date)
                                        ),
                               LEAST (l_bucket_days_to_2,
                                      CEIL (p_as_of_date - p_due_date)
                                     ), 1,
                               0
                              )
                     * DECODE (NVL (p_amount_in_dispute, 0),
                               0, 1,
                               DECODE (l_bucket_category,
                                       'DISPUTE_ONLY', 0,
                                       'DISPUTE_PENDADJ', 0,
                                       1
                                      )
                              )
                     * DECODE (NVL (p_amount_adjusted_pending, 0),
                               0, 1,
                               DECODE (l_bucket_category,
                                       'PENDADJ_ONLY', 0,
                                       'DISPUTE_PENDADJ', 0,
                                       1
                                      )
                              )
                    )
        INTO l_b2_inv
        FROM DUAL;

      -- Get l_b3_inv
      SELECT DECODE (l_bucket_line_type_3,
                     'DISPUTE_ONLY', DECODE (NVL (p_amount_in_dispute, 0),
                                             0, 0,
                                             1
                                            ),
                     'PENDADJ_ONLY', DECODE (NVL (p_amount_adjusted_pending,
                                                  0),
                                             0, 0,
                                             1
                                            ),
                     'DISPUTE_PENDADJ', DECODE
                                    (NVL (p_amount_in_dispute, 0),
                                     0, DECODE
                                             (NVL (p_amount_adjusted_pending,
                                                   0
                                                  ),
                                              0, 0,
                                              1
                                             ),
                                     1
                                    ),
                       DECODE (GREATEST (l_bucket_days_from_3,
                                         CEIL (p_as_of_date - p_due_date)
                                        ),
                               LEAST (l_bucket_days_to_3,
                                      CEIL (p_as_of_date - p_due_date)
                                     ), 1,
                               0
                              )
                     * DECODE (NVL (p_amount_in_dispute, 0),
                               0, 1,
                               DECODE (l_bucket_category,
                                       'DISPUTE_ONLY', 0,
                                       'DISPUTE_PENDADJ', 0,
                                       1
                                      )
                              )
                     * DECODE (NVL (p_amount_adjusted_pending, 0),
                               0, 1,
                               DECODE (l_bucket_category,
                                       'PENDADJ_ONLY', 0,
                                       'DISPUTE_PENDADJ', 0,
                                       1
                                      )
                              )
                    )
        INTO l_b3_inv
        FROM DUAL;

      --
      IF l_b0_inv != 0
      THEN
         l_custinv_b0 := l_outstanding_inv;
      END IF;

      IF l_b1_inv != 0
      THEN
         l_custinv_b1 := l_outstanding_inv;
      END IF;

      IF l_b2_inv != 0
      THEN
         l_custinv_b2 := l_outstanding_inv;
      END IF;

      IF l_b3_inv != 0
      THEN
         l_custinv_b3 := l_outstanding_inv;
      END IF;

      -- Return value based on passed in position
      IF p_return_position = 1
      THEN
         RETURN l_outstanding_inv;
      ELSIF p_return_position = 2
      THEN
         RETURN l_custinv_b0;
      ELSIF p_return_position = 3
      THEN
         RETURN l_custinv_b1;
      ELSIF p_return_position = 4
      THEN
         RETURN l_custinv_b2;
      ELSIF p_return_position = 5
      THEN
         RETURN l_custinv_b3;
      END IF;
   EXCEPTION
      WHEN OTHERS
      THEN
         RETURN 0;
   END;

FUNCTION get_invoice_outstanding_amount (
      p_project_id IN NUMBER,
      --p_invoice_number IN VARCHAR2,
      p_as_of_date IN DATE,
      p_convert_flag IN VARCHAR2,
      p_return_position IN NUMBER
   )
      RETURN NUMBER
   IS
      CURSOR c_outstanding_amount
      IS
         SELECT *
           FROM (SELECT ps.payment_schedule_id payment_schedule_id,
               ps.trx_number invoice_number, ps.CLASS invoice_class,
               rctt.NAME invoice_type, ps.due_date due_date,
               ps.trx_date invoice_date, rtt.NAME term_name,
               ps.invoice_currency_code invoice_currency_code,
               gsob.currency_code function_currency_code,
               ps.acctd_amount_due_remaining acctd_amt_due_remaining,
               ps.amount_line_items_remaining,
               ps.amount_due_remaining amt_due_remaining,
               ROUND
                   ((ps.amount_due_original * NVL (ps.exchange_rate, 1)),
                    fc.PRECISION
                   ) amt_due_functional_currency,
               ps.amount_due_original amt_due_original,
               ps.amount_adjusted amount_adjusted,
               ps.amount_applied amount_applied,
               ps.amount_credited amount_credited,
               ps.amount_in_dispute amount_in_dispute,
               ps.amount_adjusted_pending amount_adjusted_pending,
               NVL (ps.exchange_rate, 1) exchange_rate, ps.gl_date gl_date,
               ps.gl_date_closed gl_date_closed, n1.text comments,
               proj.project_id project_id, proj.NAME project_name,
               proj.segment1 project_number,
               ps.cash_receipt_id cash_receipt_id, rct.org_id org_id,
               rct.customer_trx_id
          FROM hr_all_organization_units org,
               pjf_projects_all_vl proj,
               ra_customer_trx_all rct,
               ar_payment_schedules_all ps,
               ra_cust_trx_types_all rctt,              
               ra_terms_tl rtt,
               ar_notes n1,
               gl_sets_of_books gsob,
               fnd_currencies fc
         WHERE org.organization_id = proj.carrying_out_organization_id
           AND proj.segment1 = TRIM (LEADING '0' FROM rct.interface_header_attribute1)
           AND rct.interface_header_context = 'PROJECTS INVOICES'
           AND proj.org_id = rct.org_id
           AND rct.interface_header_attribute1 IS NOT NULL
           AND rct.customer_trx_id = ps.customer_trx_id
           AND rct.org_id = ps.org_id          
           AND ps.CUST_TRX_TYPE_SEQ_ID = rctt.CUST_TRX_TYPE_SEQ_ID         
           AND rct.term_id = rtt.term_id
           AND rct.customer_trx_id = n1.customer_trx_id(+)
           AND rct.set_of_books_id = gsob.set_of_books_id
           AND gsob.currency_code = fc.currency_code) a
          WHERE a.project_id = p_project_id           
            AND a.gl_date <= p_as_of_date;

      o_amount   NUMBER := 0;
   BEGIN      
      
       FOR i in c_outstanding_amount
       LOOP
      
       o_amount := o_amount + get_outstanding_amount(i.payment_schedule_id,
                                                      p_as_of_date,
                                                      i.invoice_type,
                                                      i.amount_line_items_remaining,
                                                      i.amount_applied,
                                                      i.amount_adjusted,
                                                      i.amount_credited,
                                                      i.amount_in_dispute,
                                                      i.amount_adjusted_pending,
                                                      p_convert_flag,
                                                      i.due_date,
                                                      p_return_position
                                                     );
      
       END LOOP;

      RETURN o_amount;
   EXCEPTION
      WHEN OTHERS
      THEN
         RETURN 0;
   END;

SELECT PPA.segment1 project_number   
    ,OCTV.name contracty_type
    ,PPA.name project_name
    ,PPA.description
    ,HOU.name organization_name
    ,PPA.project_currency_code
    ,OKH.contract_number
    ,OKL.line_number
    ,ROUND((NVL(get_invoice_outstanding_amount(PPA.project_id
                                   ,:P_AS_OF_DATE
                                   ,'Y'
                                   ,1), 0)), 2) ar_open
    ,PBC.billing_cycle_name
    ,(SELECT PPM.resource_source_name FROM pjf_proj_all_members_v PPM
       WHERE PPM.project_id = PPA.project_id
         AND PPM.project_role_id = 1
         AND :P_AS_OF_DATE BETWEEN PPM.start_date_active AND NVL(PPM.end_date_active, :P_AS_OF_DATE + 1)) project_manager
FROM pjf_projects_all_vl PPA
,pjb_cntrct_proj_links PCPL
,okc_k_lines_b OKL
,okc_k_headers_all_b OKH
,okc_contract_types_vl OCTV
,pjf_project_types_vl PPT
,hr_all_organization_units HOU
,(SELECT SUM(PILD.cont_curr_billed_amt) cont_curr_billed_amt, MAX(PIH.invoice_date) last_date_invoiced
        ,PILD.contract_id, PILD.contract_line_id
    FROM pjb_inv_line_dists PILD
        ,pjb_invoice_headers PIH
   WHERE 1=1
     AND PILD.invoice_id = PIH.invoice_id
     AND PIH.transfer_status_code = 'A'
     AND PIH.gl_date <= :P_AS_OF_DATE
   GROUP BY PILD.contract_id, PILD.contract_line_id
     ) INV
,pjb_bill_plans_vl PBP
,pjf_billing_cycles_vl PBC
WHERE 1=1
and PPA.project_id = PCPL.project_id
AND PCPL.version_type = 'C' -- Current
AND PCPL.contract_line_id = OKL.id
AND PCPL.major_version = OKL.major_version
AND OKL.chr_id = OKH.id
AND OKL.major_version = OKH.major_version
AND OKL.version_type = 'C' -- Current
AND OKH.version_type = 'C' -- Current
AND OKH.contract_type_id = OCTV.contract_type_id
AND PPA.project_type_id = PPT.project_type_id
AND HOU.organization_id = PPA.carrying_out_organization_id
AND OKH.sts_code <> 'DRAFT'
AND PPT.project_type NOT IN ('INTERCOMPANY', 'Intercompany')
AND INV.contract_id (+) = OKH.id
and INV.contract_line_id (+) = OKL.id
AND OKL.bill_plan_id    = PBP.bill_plan_id (+)
AND OKL.major_version   = PBP.major_version (+)
AND PBP.billing_cycle_id = PBC.billing_cycle_id (+)

Fusion Query to get Employee Allocated and Utilization hours

select Entity,Business_unit,reporting_organization,EMPLOYEE_NUMBER,EMPLOYEE_NAME,EFFECTIVE_START_DATE,TOTAL_HOURS,BILLABLE_HOURS,CHARGEABLE_HOURS,EXPENDITURE_ENDING_DATE,YEAR_START_DATE,
round((BILLABLE_HOURS/TOTAL_HOURS)*100,2) BILLABLE_PCT,round((CHARGEABLE_HOURS/TOTAL_HOURS)*100,2) CHARGEABLE_PCT ,normal_hours,effective_end_date
from ( SELECT Entity,Business_unit,
            EMPLOYEE_NUMBER,EMPLOYEE_NAME,EFFECTIVE_START_DATE,TOTAL_HOURS,BILLABLE_HOURS,CHARGEABLE_HOURS,EXPENDITURE_ENDING_DATE, YEAR_START_DATE,
round((BILLABLE_HOURS/TOTAL_HOURS)*100,2) BILLABLE_PCT,round((CHARGEABLE_HOURS/TOTAL_HOURS)*100,2) CHARGEABLE_PCT ,normal_hours,effective_end_date
 from ( 
select  (SELECT fv.description
            FROM fnd_flex_values_vl fv,
                 fnd_flex_value_sets fvs
           WHERE 1 = 1
             AND fv.flex_value_set_id = fvs.flex_value_set_id
             AND fvs.flex_value_set_name = 'Department'
             AND fv.flex_value = gcc.segment3) Entity,
            (select distinct hou.name
            from per_all_people_f papf1,per_all_assignments_m paam,
             hr_all_organization_units hou
            where 1=1
            and papf1.person_id=paam.person_id
            and paam.BUSINESS_UNIT_ID = hou.organization_id
            and paam.ASSIGNMENT_STATUS_TYPE ='ACTIVE'
            and sysdate between papf1.effective_start_date and papf1.effective_end_date
            and sysdate between paam.effective_start_date and paam.effective_end_date
            and papf1.person_id = papf.person_id)   Business_unit ,
             gcc.segment3 Department,
               papf.person_number employee_number,
         NVL (ppn.known_as, ppn.full_name) employee_name,
        ppos.date_start effective_start_date,
        ppos.actual_termination_date effective_end_date,
        pasm.normal_hours ,
         (SELECT SUM (quantity)
            FROM pjc_exp_items_all pei,
                 pjf_exp_types_vl pet,
                 pjf_exp_categories_tl pec
           WHERE NVL (pei.billable_flag, 'N') = 'Y'
             AND pei.expenditure_type_id = pet.expenditure_type_id
             AND pec.expenditure_category_id = pet.expenditure_category_id
             AND pec.expenditure_category_name IN ('Labor')
             AND expenditure_item_date >= :P_From_Date
             and expenditure_item_date <= :P_To_Date                 
             AND pei.incurred_by_person_id = papf.person_id) billable_hours,
         (SELECT SUM (quantity)
            FROM pjc_exp_items_all pei,
                 pjf_exp_types_vl pet,
                 pjf_exp_categories_tl pec
           WHERE 1=1--NVL (pei.billable_flag, 'N') = 'N'
             AND pei.expenditure_type_id = pet.expenditure_type_id
             AND pec.expenditure_category_id = pet.expenditure_category_id
             AND pec.expenditure_category_name IN ('Labor')
             AND expenditure_item_date >= :P_From_Date
             and expenditure_item_date <= :P_To_Date   
             AND pei.incurred_by_person_id = papf.person_id) CHARGEABLE_HOURS,
         (SELECT MAX (expenditure_ending_date)
            FROM pjc_exp_items_all pei,
                 pjf_exp_types_vl pet,
                 pjf_exp_categories_tl pec
           WHERE 1 = 1                    --NVL (pei.billable_flag, 'N') = 'Y'
             AND pei.expenditure_type_id = pet.expenditure_type_id
             AND pec.expenditure_category_id = pet.expenditure_category_id
             AND pec.expenditure_category_name IN ('Labor')
             AND expenditure_item_date >= :P_From_Date
             and expenditure_item_date <= :P_To_Date 
             AND pei.incurred_by_person_id = papf.person_id)
                                                      expenditure_ending_date,
         to_char(:P_From_Date,'DD-MON-YY') year_start_date,
  (((((TO_DATE(TO_CHAR(TRUNC(NEXT_DAY(:P_To_Date, 6)) - INTERVAL '7' DAY,'MM-DD-RRRR'),'MM-DD-RRRR'))-
TO_DATE(TO_CHAR(:P_From_Date,'MM-DD-RRRR'),'MM-DD-RRRR') ) -
(select sum(total)  weekends from (
SELECT  COUNT (*) total
    FROM (SELECT :P_To_Date + num dat
            FROM (SELECT    LEVEL - 1 num
                        FROM DUAL
                  CONNECT BY LEVEL <=
                                ABS(TO_DATE(TO_CHAR(:P_From_Date,'MM-DD-RRRR'),'MM-DD-RRRR') -
TO_DATE(TO_CHAR(TRUNC(NEXT_DAY(:P_To_Date, 6)) - INTERVAL '7' DAY,'MM-DD-RRRR'),'MM-DD-RRRR') - 1)))
   WHERE TO_CHAR (dat, 'DY') IN ('1', '7')
GROUP BY TO_CHAR (dat, 'DY'))))+1)*(pasm.normal_hours/5))  total_hours
     FROM per_all_people_f papf,
         per_person_names_f ppn,
         per_all_assignments_m pasm,
         gl_code_combinations gcc,
         per_periods_of_service ppos
   WHERE 1 = 1
--     AND person_number IN ('13549')       --'15370'--'10165'
     AND pasm.period_of_service_id = ppos.period_of_service_id
       AND SYSDATE BETWEEN NVL (ppn.effective_start_date, SYSDATE - 1)
                     AND NVL (ppn.effective_end_date, SYSDATE + 1) 
     AND ppn.name_type(+) = 'GLOBAL'
     AND papf.person_id = ppn.person_id
     AND pasm.primary_flag = 'Y'
     AND SYSDATE BETWEEN NVL (pasm.effective_start_date, SYSDATE - 1)
                     AND NVL (pasm.effective_end_date, SYSDATE + 1)
     AND pasm.assignment_status_type = 'ACTIVE'
     AND pasm.person_id = papf.person_id
     AND pasm.default_code_comb_id = gcc.code_combination_id
     AND SYSDATE >= NVL (papf.effective_start_date, SYSDATE - 1)
     AND NVL (papf.effective_end_date, SYSDATE + 1) >=:P_From_Date   
     )) emp_util
 WHERE  (BUSINESS_UNIT in (:P_Entity) OR least(:P_Entity) is NULL)
     and (reporting_organization in (:P_Practice) OR least(:P_Practice) is NULL)
     

Fusion--> Query to find registered address of a Legal Entity

SELECT   xep.NAME,   -- Legal Entity Name
          xjv.registration_code_le registration_code,
          xr.registration_number,
          hl.address1
          ,hl.address2
          ,hl.address3
          ,hl.address4
          ,hl.city
          ,hl.postal_code
          ,hl.state
          ,hl.province
          ,hl.country
          ,hl.county
          ,ftv.territory_short_name
          ,ftv.description
    FROM xle_registrations xr,
         xle_jurisdictions_vl xjv,
         hz_locations hl,
         fnd_territories_vl ftv,
         xle_entity_profiles xep
   WHERE 1 = 1
     AND xep.legal_entity_id = :legal_entity_id
     AND xr.source_table = 'XLE_ENTITY_PROFILES'
     AND xr.source_id = xep.legal_entity_id
     AND xjv.jurisdiction_id = xr.jurisdiction_id
     AND hl.location_id = xr.location_id
     AND ftv.territory_code = hl.country
     AND SYSDATE BETWEEN NVL (xr.effective_from, SYSDATE - 1)
                     AND NVL (xr.effective_to, SYSDATE + 1)
ORDER BY xep.NAME

Fusion Query to find Default company values assigned in Legal Entity

1. Link Between Legal Entity & Ledger along with Default Company Assigned in Legal Entity

 SELECT flex_segment_value
                ,gll.*
   FROM gl_legal_entities_bsvs gleb
               ,gl_ledger_le_v gll
WHERE gleb.legal_entity_id = gll.legal_entity_id
     AND ledger_category_code = 'PRIMARY'
     AND gleb.flex_segment_value = :p_company 
 
or

2.  Default Company value assigned in Legal Entity

SELECT * FROM XLE_ENTITY_PROFILES

Sunday, 3 March 2019

Project wise PO details Reports

Project wise PO details Reports

SELECT ipd.project_number PROJECT_NUMBER,
       ipda.asset_tag_id TAG_NUMBER,
       translate(ipd.description,'ä','a') Project_Desc,
       Translate(ipda.asset_desc,'ä','a') Asset_Desc,
      -- prh.segment1 req_number,
       ph.segment1 po_number ,
       ph.CREATION_DATE CREATION_DATE,
       (select Translate(full_name,'éÖ','eO') from per_all_people_f ppf1 where pd.deliver_to_person_id = ppf1.person_id(+) and sysdate between effective_start_Date and effective_end_Date)Requestor,
       ph.COMMENTS DESCRIPTION,
      to_char(sum(pl.quantity*pl.unit_price),'999,999,999.99') AMOUNT
       FROM
       apps.po_requisition_headers_all prh,
       apps.po_requisition_lines_all   prl,
       apps.po_req_distributions_all   prd,
       apps.po_distributions_all       pd,
       apps.po_line_locations_all      pll,
       apps.po_lines_all               pl,
       apps.po_headers_all             ph,
       apps.XXX_proj_reference_data_all ipda,
       apps.XXX_PROJ_DETAILS ipd
 WHERE prh.requisition_header_id = prl.requisition_header_id
   and prh.org_id = prl.org_id
   and prl.requisition_line_id = prd.requisition_line_id
   and prl.org_id = prd.org_id
   and prd.distribution_id = pd.req_distribution_id(+)
   and prd.org_id = pd.org_id(+)
   and pd.line_location_id = pll.line_location_id(+)
   and pd.org_id = pll.org_id(+)
   and pll.po_line_id = pl.po_line_id(+)
   and pll.org_id = pl.org_id(+)
   and pl.po_header_id = ph.po_header_id(+)
   and pl.org_id = ph.org_id(+)
   and prl.attribute6=ipda.asset_tag_id
   and prl.attribute5=ipda.project_id
   AND ph.AUTHORIZATION_STATUS='APPROVED'
   AND ipd.project_id=ipda.project_id
   --AND ipda.project_number='10004_000_OFF'
   --AND ipda.asset_tag_id='1115021_730'
   --and ph.segment1='394352'
  and ph.org_id=:P_ORG_ID
  and ph.org_id=ipd.org_id
--and ph.CREATION_DATE between '01-OCT-2018' AND '31-OCT-2018'
--and trunc(ph.CREATION_DATE) between trunc(:P_START_DATE) AND trunc(:P_END_DATE)
and trunc(ph.CREATION_DATE) between NVL(trunc(:P_START_DATE),trunc(ph.CREATION_DATE)) AND nvl(trunc(:P_END_DATE),trunc(SYSDATE))
   group by
   ipd.project_number,
   ipda.asset_tag_id,
   ph.segment1,
   ph.CREATION_DATE,
   pd.deliver_to_person_id,
   ph.COMMENTS,
   ipd.description,
   ipda.asset_desc
order by 1

How to add expense items type in expense template


Add Expense type in Expense template
Navigation
AP setup user à Setup à Invoice à Expense Report Templates


Name Expense Category Tax Code GL Account Projects Expenditure Type Policy Schedule Data Capture Rule Data Capture Rule End date Prompt Justification Required Requre receipt for Cash Require Receipt Above Number of duplicates Allowed Viewable from all templates Calculate Amount Apply Receipt Rules to Negative Expense Lines Credit Card Require Receipt Above ITEMIZATIONS: Include All Expense Items Allowed in Itemizatios
Cost of Sales Emp T&E Miscellaneous   ....XXXXXX.00000.0000.0000.0000             Always Cash Only  25 1         Yes Yes      








Monday, 25 February 2019

AR Invoice PDF email (Alternative of BPA Process)



<?xml version="1.0"?>
<dataTemplate name="XX__AR_INVPRINT" description="TW Invoice Printout for United States" defaultPackage="XX_AR_INVPRINT_PKG" version="1.0">
    <parameters>
        <parameter name="P_Report_Level"            dataType = "character"></parameter>
        <parameter name="P_Report_Context"          dataType = "character"></parameter>
        <parameter name="P_TRANSACTION_SOURCE"      dataType = "character"></parameter>
        <parameter name="P_TRANSACTION_TYPE"        dataType = "number"></parameter>
        <parameter name="P_TRANSACTION_CLASS"       dataType = "character"></parameter>
        <parameter name="P_DATE_FROM"               dataType = "character"></parameter>       
        <parameter name="P_DATE_TO"                 dataType = "character"></parameter>
        <parameter name="P_TRANS_NUMBER_LOW"        dataType = "character"></parameter>   
        <parameter name="P_TRANS_NUMBER_HIGH"       dataType = "character"></parameter>
        <parameter name="P_CUST_NAME"               dataType = "character"></parameter>
<parameter name="P_PERIOD"              dataType = "character"></parameter>
    </parameters>
    <dataQuery>
    <sqlStatement name="Q_HEADER">
        <![CDATA[                 
             SELECT DISTINCT TRANSACTION_ID,
NVL (fnd_profile.VALUE ('IMDC:BPA_INVOICE_WEB_LINK'), 'For Online Payments : www.xx.com') PAYMENT_WEB_ADDRESS,
bill_to_customer_name CUSTOMER_NAME,
PURCHASE_ORDER_NUMBER,
case when XX_CUST_EMAIL_FUNC(bill_to_contact_id,'PRI') is null then
bill_to_customer_number||' - '||bill_to_customer_name||' - '||transaction_number||' - '||ATTRIBUTE11||' - '||' Please Print and Send '
else
bill_to_customer_number||' - '||bill_to_customer_name||' - '||transaction_number||' - '||ATTRIBUTE11
end subject,
FORMATTED_BILL_TO_ADDRESS,
FORMATTED_REMIT_TO_ADDRESS,
NVL (fnd_profile.VALUE ('IMDC:BPA_REMIT_EMAIL'), 'Email :  xx@xx.com') REMIT_EMAIL_ADDRESS,
NVL (fnd_profile.VALUE ('IMDC:BPA_REMIT_PHONE'), '  ') REMIT_PHONE_NUMBER,
TRANSACTION_NUMBER,
TRANSACTION_DATE,
ATTRIBUTE11 PERIOD,
ACCOUNT_NUMBER,
BILL_TO_LOCATION,
to_char(fnd_date.canonical_to_date(attribute10),'DD-MON-YYYY')  COMMENCEMENT_DATE,
INVOICE_CURRENCY_CODE,
TERM_NAME,
term_due_date_from_ps TERM_DATE,
CASE WHEN :P_TRANS_NUMBER_LOW IS NOT NULL AND :P_TRANS_NUMBER_HIGH IS NOT NULL THEN
'xx@xx.com'
ELSE
NVL(XX_CUST_EMAIL_FUNC(bill_to_contact_id,'PRI'),'xx@xx.com') END AS EMAIL,
XX_CUST_EMAIL_FUNC(bill_to_contact_id,'PRI') CUSTEMAIL,
CASE WHEN :P_TRANS_NUMBER_LOW IS NULL AND :P_TRANS_NUMBER_HIGH IS NULL THEN
XX_CUST_EMAIL_FUNC(bill_to_contact_id,'SEC') ELSE NULL END AS SEC_EMAIL,
CUSTOMER_CONTACT_NAME ,
CUSTOMER_PHONE,
LINE_AMOUNT,
TAX_AMOUNT,
FREIGHT_AMOUNT,
TOTAL_AMOUNT,
PAYMENTS_AND_CREDITS,
FINANCE_CHARGES,
TO_CHAR (OUTSTANDING_BALANCE, fnd_currency.get_format_mask ( invoice_currency_code, 40 )) OUTSTANDING_BALANCE,
CURRENT_DATE,
CT_REFERENCE
FROM XXAR_CUSTOMER_TRX_HEADER
WHERE org_id = 11
AND CUST_TRX_TYPE_ID IN (123)
AND TRANSACTION_ID IN (SELECT CUSTOMER_TRX_ID FROM RA_CUSTOMER_TRX_ALL
WHERE org_id = 11
AND CUST_TRX_TYPE_ID IN (123)
AND TRX_NUMBER BETWEEN :P_TRANS_NUMBER_LOW
AND :P_TRANS_NUMBER_HIGH)
                  AND :P_TRANS_NUMBER_LOW IS NOT NULL
                  AND :P_TRANS_NUMBER_HIGH IS NOT NULL
                  AND :P_PERIOD IS NULL
                                    UNION                 
                  SELECT DISTINCT TRANSACTION_ID,
NVL (fnd_profile.VALUE ('IMDC:BPA_INVOICE_WEB_LINK'), 'For Online Payments : www.xx.com') PAYMENT_WEB_ADDRESS,
bill_to_customer_name CUSTOMER_NAME,
PURCHASE_ORDER_NUMBER,
case when XX_CUST_EMAIL_FUNC(bill_to_contact_id,'PRI') is null then
bill_to_customer_number||' - '||bill_to_customer_name||' - '||transaction_number||' - '||ATTRIBUTE11||' - '||' Please Print and Send '
else
bill_to_customer_number||' - '||bill_to_customer_name||' - '||transaction_number||' - '||ATTRIBUTE11
end subject,
FORMATTED_BILL_TO_ADDRESS,
FORMATTED_REMIT_TO_ADDRESS,
NVL (fnd_profile.VALUE ('IMDC:BPA_REMIT_EMAIL'), 'Email :  xx@xx.com') REMIT_EMAIL_ADDRESS,
NVL (fnd_profile.VALUE ('IMDC:BPA_REMIT_PHONE'), '  ') REMIT_PHONE_NUMBER,
TRANSACTION_NUMBER,
TRANSACTION_DATE,
ATTRIBUTE11 PERIOD,
ACCOUNT_NUMBER,
BILL_TO_LOCATION,
to_char(fnd_date.canonical_to_date(attribute10),'DD-MON-YYYY')  COMMENCEMENT_DATE,
INVOICE_CURRENCY_CODE,
TERM_NAME,
term_due_date_from_ps TERM_DATE,
CASE WHEN :P_TRANS_NUMBER_LOW IS NOT NULL AND :P_TRANS_NUMBER_HIGH IS NOT NULL THEN
'xx@xx.com'
ELSE
NVL(XX_CUST_EMAIL_FUNC(bill_to_contact_id,'PRI'),'xx@xx.com') END AS EMAIL,
XX_CUST_EMAIL_FUNC(bill_to_contact_id,'PRI') CUSTEMAIL,
CASE WHEN :P_TRANS_NUMBER_LOW IS NULL AND :P_TRANS_NUMBER_HIGH IS NULL THEN
XX_CUST_EMAIL_FUNC(bill_to_contact_id,'SEC') ELSE NULL END AS SEC_EMAIL,
CUSTOMER_CONTACT_NAME ,
CUSTOMER_PHONE,
LINE_AMOUNT,
TAX_AMOUNT,
FREIGHT_AMOUNT,
TOTAL_AMOUNT,
PAYMENTS_AND_CREDITS,
FINANCE_CHARGES,
TO_CHAR (OUTSTANDING_BALANCE, fnd_currency.get_format_mask ( invoice_currency_code, 40 )) OUTSTANDING_BALANCE,
CURRENT_DATE,
CT_REFERENCE
FROM XXAR_CUSTOMER_TRX_HEADER , gl_periods gp
WHERE org_id = 11
AND CUST_TRX_TYPE_ID IN (123)
                  and GP.PERIOD_SET_NAME = 'XX_CALENDAR'
                  AND GP.PERIOD_NAME = :P_PERIOD
                  AND TRX_DATE BETWEEN GP.START_DATE AND GP.END_DATE
                  AND PRINTING_LAST_PRINTED IS NULL
                  AND :P_PERIOD IS NOT NULL
                  AND :P_TRANS_NUMBER_LOW IS NULL
                  AND :P_TRANS_NUMBER_HIGH IS NULL
                  UNION
                  SELECT DISTINCT TRANSACTION_ID,
NVL (fnd_profile.VALUE ('IMDC:BPA_INVOICE_WEB_LINK'), 'For Online Payments : www.xx.com') PAYMENT_WEB_ADDRESS,
bill_to_customer_name CUSTOMER_NAME,
PURCHASE_ORDER_NUMBER,
case when XX_CUST_EMAIL_FUNC(bill_to_contact_id,'PRI') is null then
bill_to_customer_number||' - '||bill_to_customer_name||' - '||transaction_number||' - '||ATTRIBUTE11||' - '||' Please Print and Send '
else
bill_to_customer_number||' - '||bill_to_customer_name||' - '||transaction_number||' - '||ATTRIBUTE11
end subject,
FORMATTED_BILL_TO_ADDRESS,
FORMATTED_REMIT_TO_ADDRESS,
NVL (fnd_profile.VALUE ('IMDC:BPA_REMIT_EMAIL'), 'Email :  xx@xx.com') REMIT_EMAIL_ADDRESS,
NVL (fnd_profile.VALUE ('IMDC:BPA_REMIT_PHONE'), '  ') REMIT_PHONE_NUMBER,
TRANSACTION_NUMBER,
TRANSACTION_DATE,
ATTRIBUTE11 PERIOD,
ACCOUNT_NUMBER,
BILL_TO_LOCATION,
to_char(fnd_date.canonical_to_date(attribute10),'DD-MON-YYYY')  COMMENCEMENT_DATE,
INVOICE_CURRENCY_CODE,
TERM_NAME,
term_due_date_from_ps TERM_DATE,
CASE WHEN :P_TRANS_NUMBER_LOW IS NOT NULL AND :P_TRANS_NUMBER_HIGH IS NOT NULL THEN
'xx@xx.com'
ELSE
NVL(XX_CUST_EMAIL_FUNC(bill_to_contact_id,'PRI'),'xx@xx.com') END AS EMAIL,
XX_CUST_EMAIL_FUNC(bill_to_contact_id,'PRI') CUSTEMAIL,
CASE WHEN :P_TRANS_NUMBER_LOW IS NULL AND :P_TRANS_NUMBER_HIGH IS NULL THEN
XX_CUST_EMAIL_FUNC(bill_to_contact_id,'SEC') ELSE NULL END AS SEC_EMAIL,
CUSTOMER_CONTACT_NAME ,
CUSTOMER_PHONE,
LINE_AMOUNT,
TAX_AMOUNT,
FREIGHT_AMOUNT,
TOTAL_AMOUNT,
PAYMENTS_AND_CREDITS,
FINANCE_CHARGES,
TO_CHAR (OUTSTANDING_BALANCE, fnd_currency.get_format_mask ( invoice_currency_code, 40 )) OUTSTANDING_BALANCE,
CURRENT_DATE,
CT_REFERENCE
FROM XXAR_CUSTOMER_TRX_HEADER , gl_periods gp
WHERE org_id = 11
AND CUST_TRX_TYPE_ID IN (123)
AND TRANSACTION_ID IN (SELECT CUSTOMER_TRX_ID FROM RA_CUSTOMER_TRX_ALL
WHERE org_id = 11
AND CUST_TRX_TYPE_ID IN (123)
AND TRX_NUMBER BETWEEN :P_TRANS_NUMBER_LOW
AND :P_TRANS_NUMBER_HIGH)
                  and GP.PERIOD_SET_NAME = 'XX_CALENDAR'
                  AND GP.PERIOD_NAME = :P_PERIOD
                  AND TRX_DATE BETWEEN GP.START_DATE AND GP.END_DATE
                  AND :P_PERIOD IS NOT NULL
                  AND :P_TRANS_NUMBER_LOW IS NOT NULL
                  AND :P_TRANS_NUMBER_HIGH IS NOT NULL
              ]]> 
    </sqlStatement>   
    <sqlStatement name="Q_TRX_LINES">
        <![CDATA[
            SELECT  DESCRIPTION, QUANTITY,UNIT_OF_MEASURE_NAME,START_DATE,UNIT_PRICE,EXTENDED_AMOUNT,SALES_ORDER,
UOM_CODE,TRX_NUMBER,DATA_CENTER
FROM XXAR_CUSTOMER_TRX_LINE
WHERE CUSTOMER_TRX_ID = :TRANSACTION_ID
        ]]>
    </sqlStatement>
    </dataQuery>
    <dataStructure>               
    <group name="G_HEADER" source="Q_HEADER">                   
<element name="PAYMENT_WEB_ADDRESS"      value="PAYMENT_WEB_ADDRESS"/>
<element name="CUSTOMER_NAME"            value="CUSTOMER_NAME"/>
<element name="PURCHASE_ORDER_NUMBER"       value="PURCHASE_ORDER_NUMBER"/>
<element name="SUBJECT"            value="SUBJECT"/>
<element name="FORMATTED_BILL_TO_ADDRESS"   value="FORMATTED_BILL_TO_ADDRESS"/>
<element name="FORMATTED_REMIT_TO_ADDRESS"  value="FORMATTED_REMIT_TO_ADDRESS"/>
<element name="REMIT_EMAIL_ADDRESS"         value="REMIT_EMAIL_ADDRESS"/>
<element name="REMIT_PHONE_NUMBER"          value="REMIT_PHONE_NUMBER"/>
<element name="TRANSACTION_NUMBER"          value="TRANSACTION_NUMBER"/>
<element name="TRANSACTION_DATE"        value="TRANSACTION_DATE"/>
<element name="PERIOD"    value="PERIOD"/>
<element name="ACCOUNT_NUMBER"              value="ACCOUNT_NUMBER"/>
<element name="BILL_TO_LOCATION"        value="BILL_TO_LOCATION"/>
<element name="COMMENCEMENT_DATE"      value="COMMENCEMENT_DATE"/>
<element name="INVOICE_CURRENCY_CODE"    value="INVOICE_CURRENCY_CODE"/>
<element name="TERM_NAME"              value="TERM_NAME"/>
<element name="TERM_DATE"              value="TERM_DATE"/>
<element name="EMAIL"              value="EMAIL"/>
<element name="CUSTEMAIL"              value="CUSTEMAIL"/>
<element name="SEC_EMAIL"              value="SEC_EMAIL"/>
<element name="CUSTOMER_CONTACT_NAME"       value="CUSTOMER_CONTACT_NAME"/>
<element name="CUSTOMER_PHONE"              value="CUSTOMER_PHONE"/>
<element name="LINE_AMOUNT"              value="LINE_AMOUNT"/>
<element name="TAX_AMOUNT"              value="TAX_AMOUNT"/>
<element name="FREIGHT_AMOUNT"              value="FREIGHT_AMOUNT"/>
<element name="TOTAL_AMOUNT"              value="TOTAL_AMOUNT"/>
<element name="PAYMENTS_AND_CREDITS"        value="PAYMENTS_AND_CREDITS"/>
<element name="FINANCE_CHARGES"             value="FINANCE_CHARGES"/>
<element name="OUTSTANDING_BALANCE"         value="OUTSTANDING_BALANCE"/>
<element name="CURRENT_DATE"              value="CURRENT_DATE"/>
<element name="CT_REFERENCE"              value="CT_REFERENCE"/>
    <group name="G_LINES" source="Q_TRX_LINES">
<element name="DESCRIPTION"              value="DESCRIPTION"/>
<element name="QUANTITY"                value="QUANTITY"/>
<element name="UNIT_OF_MEASURE_NAME"        value="UNIT_OF_MEASURE_NAME"/>
<element name="START_DATE"                value="START_DATE"/>
<element name="UNIT_PRICE"            value="UNIT_PRICE"/>
<element name="EXTENDED_AMOUNT"             value="EXTENDED_AMOUNT"/>
<element name="DATA_CENTER"    value="DATA_CENTER"/>
    </group>
    </group>
</dataStructure>
<dataTrigger name="afterReportTrigger" source="XX_AR_INVPRINT_PKG.AfterReport"/>
</dataTemplate>