-- let op key van srtnotificatie
-- en op exportdatum
CREATE OR REPLACE VIEW tmp_v_bron_export_exact_xml
(
   bkstnr,
   oms25,
   datum,
   crdnr,
   projectnr,
   projectnaam,
   bedrag_txt,
   bedrag,
   bedrag_incl,
   betaalref,
   itemcode,
   reknr,
   kstplcode,
   kstdrcode,
   btw_code,
   lev_kpn
)
AS
   SELECT TO_CHAR (fin_factuur_key) bkstnr,
             opdracht_id
          || ' - '
          || REPLACE (SUBSTR (fin_factuur_opmerking, 1, 30), ',', '')
             oms25,
          TO_CHAR (fin_factuur_datum, 'yyyy-mm-dd') datum,
          (SELECT prs_leverancier_nr
             FROM prs_bedrijf b
            WHERE b.prs_bedrijf_key = fg.prs_bedrijf_key)
             crdnr,
          project_nummer,
          project_naam,
          REPLACE (TO_CHAR (bedrag), ',', '.') bedrag_txt,
          bedrag,
          bedrag_incl,
          fin_factuur_nr || '/' || fin_factuur_debiteur_nr betaalref,
          prs_kostensoort_oms itemcode,
          prs_kostensoort_refcode reknr,
          DECODE (
             aaxx_get_user,
             'IT',
             DECODE (
                lev_kpn,
                '2000700',
                '00100002',
                (SELECT DECODE (SUBSTR (prs_kostenplaats_nr, 1, 1),
                                '2', '999999',
                                prs_kostenplaats_nr)
                   FROM prs_kostenplaats kp
                  WHERE kp.prs_kostenplaats_key = fg.prs_kostenplaats_key)),
             'CE',
             '02410001',
             'LB',
             '02610001',
             'FPC',
             '00780164',
             '999999')
             kstplcode,
          (SELECT prs_kostenplaats_nr
             FROM prs_kostenplaats kp
            WHERE kp.prs_kostenplaats_key = fg.prs_kostenplaats_key)
             kstdrcode,
          fin_btwtabelwaarde_code btw_code,
          lev_kpn
     FROM (  SELECT g.fin_factuur_key,
                    opdracht_id,
                    project_nummer,
                    project_naam,
                    g.fin_factuur_datum,
                    g.fin_factuur_nr,
                    prs_bedrijf_key,
                    g.fin_factuur_debiteur_nr,
                    g.fin_factuur_opmerking,
                    SUM (fin_factuurregel_totaal) bedrag,
                    SUM (fin_factuurregel_totaal + fin_factuurregel_btw)
                       bedrag_incl,
                    fin_btwtabelwaarde_code,
                    prs_kostensoort_oms,
                    prs_kostensoort_refcode,
                    g.mld_opdr_key,
                    prs_kostenplaats_key,
                    lev_kpn
               FROM aaxx_v_factuur_gegevens g,
               (select distinct f.* from fac_tracking t, fin_factuur f where fac_srtnotificatie_key = 93
                    and to_char(fac_tracking_datum, 'yyyymmdd') = '20140417' 
                    and fac_tracking_refkey = fin_factuur_key) n
              WHERE g.fin_factuur_key = n.fin_factuur_key
           GROUP BY g.fin_factuur_key,
                    opdracht_id,
                    project_nummer,
                    project_naam,
                    g.fin_factuur_datum,
                    g.fin_factuur_nr,
                    prs_bedrijf_key,
                    g.fin_factuur_debiteur_nr,
                    g.fin_factuur_opmerking,
                    fin_btwtabelwaarde_code,
                    prs_kostensoort_oms,
                    prs_kostensoort_refcode,
                    g.mld_opdr_key,
                    prs_kostenplaats_key,
                    lev_kpn) fg;

-- controle op totaalbedrag
select sum(bedrag) from tmp_v_bron_export_exact_xml


CREATE OR REPLACE PROCEDURE tmp_select_exact_xml_adm (p_applname IN VARCHAR2,
                                                       p_applrun IN VARCHAR2,
                                                       p_administratie IN VARCHAR2
)
AS
   CURSOR c
   IS
       SELECT bkstnr, oms25, datum
         FROM tmp_v_bron_export_exact_xml
        WHERE (p_administratie = 'FAC' AND lev_kpn = '2000700')
           OR (p_administratie = 'IT' AND COALESCE(lev_kpn, 'GEEN') <> '2000700')
           OR p_administratie IS NULL
        GROUP BY bkstnr, oms25, datum;

   CURSOR c_sub (c_bkstnr VARCHAR2)
   IS
       SELECT *
         FROM tmp_v_bron_export_exact_xml
        WHERE bkstnr = c_bkstnr;

   v_order_count     NUMBER;
   v_amount_sum      NUMBER(10,2);
   v_amount_sum_incl NUMBER(10,2);
   v_count           NUMBER;
   v_sub_count       NUMBER;
   v_bestand         VARCHAR2(12);

BEGIN

   v_order_count     := 0;
   v_amount_sum      := 0;
   v_amount_sum_incl := 0;
   v_count           := 0;
   v_bestand         := SUBSTR(p_applname, 1, 12);

   -- Eerst opruiming
   DELETE FROM imp_log
    WHERE imp_log_applicatie = p_applname;

   DELETE fac_rapport
    WHERE fac_rapport_node = v_bestand;


   -- header
   aaxx_add_xml_row (v_bestand, '<?xml version="1.0" encoding="windows-1252"?>');
   aaxx_add_xml_row (v_bestand, '<eExact>');
   aaxx_add_xml_row (v_bestand, '<GLEntries>');

   FOR rec IN c
   LOOP
      BEGIN
 v_count :=1;

         IF v_count <> 0
         THEN
            aaxx_add_xml_row (v_bestand, '<GLEntry status="E" entry="' || xml.char_to_html(rec.bkstnr) || '">');
               aaxx_add_xml_element (v_bestand, 'Description', rec.oms25);
               aaxx_add_xml_element (v_bestand, 'Date', rec.datum);
               aaxx_add_xml_element (v_bestand, 'DocumentDate', TO_CHAR(SYSDATE, 'YYYY-MM-DD') );
               aaxx_add_xml_row (v_bestand, '<Journal type="I" code="42"/>');
                  v_sub_count := 1;
                  FOR rec1 IN c_sub (rec.bkstnr)
                  LOOP
                     BEGIN
                        aaxx_add_xml_row (v_bestand, '<FinEntryLine number="' || v_sub_count || '" subtype="T" type="N">');
                           aaxx_add_xml_element (v_bestand, 'Date', rec1.datum);
                           aaxx_add_xml_row (v_bestand, '<GLAccount code="' || xml.char_to_html(rec1.reknr) || '"/>');
                           -- Meldingnummer alleen vermelden voor opdrachten met type 'Projectorder'
                           IF (rec1.projectnr IS NOT NULL)
                           THEN
                              aaxx_add_xml_row (v_bestand, '<Project code="' || rec1.projectnr || '" type="I" status="A">');
                              aaxx_add_xml_element (v_bestand, 'Description', rec1.projectnaam);
                              aaxx_add_xml_row (v_bestand, '</Project>');
                           ELSE
                              aaxx_add_xml_element (v_bestand, 'Description', rec1.oms25);
                           END IF;
                           aaxx_add_xml_row (v_bestand, '<Costcenter code="' || xml.char_to_html(rec1.kstplcode) || '"/>');
                           IF aaxx_get_user = 'IT' AND p_administratie = 'FAC'
                           THEN
                              aaxx_add_xml_row (v_bestand, '<Costunit code="C0000014"/>');  -- afwijkend voor AAIT facilitaire kosten AAIT#25528.
                           ELSIF aaxx_get_user = 'AMS' OR aaxx_get_user = 'ZCN'
                           THEN
                              aaxx_add_xml_row (v_bestand, '<Costunit code="' || xml.char_to_html(rec1.kstdrcode) || '"/>');
                           ELSE
                              aaxx_add_xml_row (v_bestand, '<Costunit code="KD999999"/>');
                           END IF;
                           aaxx_add_xml_row (v_bestand, '<Creditor number="' || xml.char_to_html(rec1.crdnr) || '"/>');
                           -- AAIT#23838: kostensoort niet opnemen voor inkoopfacturen IT
                           IF ( NOT(aaxx_get_user = 'IT' AND p_administratie = 'IT' AND p_administratie IS NOT NULL) )
                           THEN
                              aaxx_add_xml_row (v_bestand, '<Item code="' || xml.char_to_html(rec1.itemcode) || '"/>');
                           END IF;
                           aaxx_add_xml_row (v_bestand, '<Amount>');
                              aaxx_add_xml_element (v_bestand, 'Debit', rec1.bedrag_txt);
                              aaxx_add_xml_row (v_bestand, '<VAT code="' || xml.char_to_html(rec1.btw_code) || '"/>');
                           aaxx_add_xml_row (v_bestand, '</Amount>');
                           aaxx_add_xml_row (v_bestand, '<Payment>');
                              aaxx_add_xml_element (v_bestand, 'Reference', rec1.betaalref);
                              aaxx_add_xml_element (v_bestand, 'InvoiceNumber', rec1.bkstnr);
                           aaxx_add_xml_row (v_bestand, '</Payment>');
                           aaxx_add_xml_row (v_bestand, '<FinReferences>');
                              aaxx_add_xml_element (v_bestand, 'YourRef', rec1.betaalref);
                              aaxx_add_xml_element (v_bestand, 'DocumentDate', TO_CHAR(SYSDATE, 'YYYY-MM-DD') );
                           aaxx_add_xml_row (v_bestand, '</FinReferences>');
                        aaxx_add_xml_row (v_bestand, '</FinEntryLine>');
                        v_sub_count := v_sub_count + 1;
                        v_amount_sum   := v_amount_sum + rec1.bedrag;
                        v_amount_sum_incl   := v_amount_sum_incl + rec1.bedrag_incl;
                     END;
                  END LOOP;
            aaxx_add_xml_row (v_bestand, '</GLEntry>');
            v_order_count  := v_order_count + 1;
         END IF;
      END;
   END LOOP;

   aaxx_add_xml_row (v_bestand, '</GLEntries>');
   aaxx_add_xml_row (v_bestand, '</eExact>');
   fac.writelog (p_applname, 'S', 'Exact export uitgevoerd. Aantal regels: ' || v_order_count || ' Totaal bedrag: ' || v_amount_sum || ' Totaal bedrag (incl): ' || v_amount_sum_incl, '');

END;
/


        
        begin tmp_select_exact_xml_adm('TMPEXACT', 'NOW', ''); END;
        
        select fac_rapport_regel from fac_rapport where fac_rapport_node = 'TMPEXACT'
        order by fac_rapport_volgnr
        
        delete fac_rapport where fac_rapport_node = 'TMPEXACT'
        
        delete imp_log where imp_log_applicatie = 'TMPEXACT' 
        
        drop procedure tmp_select_exact_xml_adm;
        
        drop view tmp_v_bron_export_exact_xml;