-- Customer specific once-script RABO

SET ECHO ON
SPOOL xRABO#37283.lst
SET DEFINE OFF



CREATE OR REPLACE PROCEDURE aaxx_export_verwerk_exact (
   p_applname   IN   VARCHAR2,
   p_applrun    IN   VARCHAR2,
   p_filedir    IN   VARCHAR2,
   p_filename   IN   VARCHAR2
)
AS
   CURSOR c_fact
   IS
     SELECT f.fin_factuur_key
       FROM aaxx_exp_factuur f
          , aaxx_v_factuur_gegevens fg
      WHERE f.fin_factuur_key = fg.fin_factuur_key
        AND fg.fin_factuur_statuses_key = 6;

   CURSOR c_opdr
   IS
     SELECT distinct fg.mld_opdr_key, mld_statusopdr_key, m.mld_melding_status, m.mld_melding_key
       FROM aaxx_exp_factuur f
          , aaxx_v_factuur_gegevens fg
          , mld_opdr o
          , mld_melding m
      WHERE f.fin_factuur_key = fg.fin_factuur_key
        AND fg.mld_opdr_key = o.mld_opdr_key
        AND o.mld_melding_key = m.mld_melding_key
        AND laatste_factuur = 1
        AND fg.fin_factuur_statuses_key = 6;

   CURSOR c_bes
   IS
     SELECT bo.*
       FROM aaxx_exp_factuur f
          , aaxx_v_factuur_gegevens fg
          , bes_bestelopdr bo
      WHERE f.fin_factuur_key = fg.fin_factuur_key
        AND fg.bes_bestelopdr_key = bo.bes_bestelopdr_key
        AND laatste_factuur = 1
        AND fg.fin_factuur_statuses_key = 6;

    CURSOR c_sync_kostensoort
    IS
      SELECT COALESCE (kstd.prs_kostensoort_key, kvg.prs_kostensoort_key)
                std_kostensoort_key,
             f.prs_kostensoort_key fac_kostensoort_key,
             f.fin_factuur_key
        FROM fin_factuur f,
             aaxx_exp_factuur ef,
             mld_opdr o,
             mld_melding m,
             mld_stdmelding std,
             ins_tab_discipline md,
             prs_kostensoort kstd,
             prs_kostensoort kvg
       WHERE f.fin_factuur_key = ef.fin_factuur_key
         AND f.mld_opdr_key = o.mld_opdr_key
         AND m.mld_melding_key = o.mld_melding_key
         AND m.mld_stdmelding_key = std.mld_stdmelding_key
         AND std.mld_ins_discipline_key = md.ins_discipline_key
         AND std.prs_kostensoort_key = kstd.prs_kostensoort_key(+)
         AND md.prs_kostensoort_key = kvg.prs_kostensoort_key(+);

   v_errormsg       VARCHAR (200);
   oracle_err_num   NUMBER;
   oracle_err_mes   VARCHAR2 (200);
   v_aanvrager      NUMBER;
   v_bestelling_key NUMBER;
   v_logdate        DATE;
BEGIN
   v_errormsg := 'Geen akties';

-- Facilitor user
  IF aaxx_get_user = 'SITECH'
  THEN
     v_aanvrager := 6524;
  ELSE
     v_aanvrager := 4;
  END IF;

   -- AAIT#34097 aanpassen kostensoort bij factuur. Soms wordt de stdmelding aangepast terwijl
   -- er al een factuur geboekt is. Door bij het verwerken van de factuur deze kostensoort nog
   -- aan te passen wordt voorkomen dat hier verschillen gaan ontstaan.
   -- AAIT#36442 AAIT niet meenemen in dit mechanisme omdat bij AAIT de kostensoort uit de opdracht
   -- gehaald wordt.
   IF aaxx_get_user <> 'IT' 
   THEN
      v_errormsg := 'Aanpassen kostensoort';
      FOR reck IN c_sync_kostensoort
      LOOP
         BEGIN
            IF reck.fac_kostensoort_key <> reck.std_kostensoort_key
            THEN
               UPDATE fin_factuur
                  SET prs_kostensoort_key = reck.std_kostensoort_key
                WHERE fin_factuur_key = reck.fin_factuur_key;

               -- Pas de login aan
               INSERT INTO fac_tracking (fac_tracking_refkey, fac_srtnotificatie_key, fac_tracking_oms)
                 SELECT reck.fin_factuur_key, fac_srtnotificatie_key, 'Kostensoort aangepast in factuur export'
                   FROM fac_srtnotificatie
                  WHERE fac_srtnotificatie_code = 'FINUPD';
            END IF;
         END;
      END LOOP;
   END IF;

   -- Verkoopinterface

   v_logdate := SYSDATE;
   -- voeg SA en ST opdrachten toe aan de fin_verkoopfacturen (vh. verkoopbuffer)
   -- BTW tarief in verkoopbuffer is altijd 19 procent (AADS#18338)
   INSERT INTO fin_verkoopfactuur
   (
      -- module, export_datum, prs_kostenplaats_nr, debiteur, prs_kostensoort_oms, prs_kostensoort_opmerking, prs_kostensoort_refcode, prs_kostensoortgrp_oms, omschrijving, bedrag, btw, fin_btwtabelwaarde_code, opdr_jaar, exact_code_gebouw, groepering, subregelvolgorde
       fin_verkoopfactuur_id, fin_verkoopfactuur_xmlnode, fin_verkoopfactuur_refkey, fin_verkoopfactuur_aanmaak, prs_kostenplaats_nr, prs_debiteur_naam, prs_bedrijf_key, prs_kostensoort_oms, prs_kostensoort_opmerking, prs_kostensoort_refcode, prs_kostensoortgrp_oms, fin_verkoopfactuur_omschr, fin_verkoopfactuur_bedrag, fin_btwtabelwaarde_code, fin_verkoopfactuur_maand, fin_verkoopfactuur_c1, fin_verkoopfactuur_c2, fin_verkoopfactuur_c3, fin_verkoopfactuur_n1
   )
   SELECT substr(to_char(v_logdate, 'dd-mm-yyyy') || ' - ' || sd.ins_srtdiscipline_prefix || m.mld_melding_key || '/' || mld_opdr_bedrijfopdr_volgnr, 1,30 ),
          'opdracht',
          o.mld_opdr_key,
          v_logdate,
          DECODE (aaxx_get_user, 'AH',  aaxx_get_top_dep_code(k.prs_kostenplaats_nr),
                                 'DBS', DECODE (ks.prs_kostensoort_upper, 'CV EIG BOUW PL', '913757',
                                                                          'CV EIG INST PL', '913757',
                                                                          substr(aaxx_get_lev2_dep_code(k.prs_kostenplaats_nr),1,6)),
                                 'DOW', k.prs_kostenplaats_nr,
                                 'DSM', DECODE (SUBSTR(ks.prs_kostensoort_upper,1,3) , 'CV ', '520',
                                                                                       'CVE', aaxx_get_top_dep_code(k.prs_kostenplaats_nr)),
                                 'SITECH', aaxx_get_dep_code(k.prs_kostenplaats_nr),
                                 'ESSENT', '912001',
                                 'LB',  exact_code,
                                 'NMM',  'MGB',
                                 'SABIC', DECODE (to_char(opdr_datum, 'YYYY'), '2012', k.prs_kostenplaats_nr,
                                                                               '2013', k.prs_kostenplaats_nr,
                                                                                       aaxx_get_top_dep_code(k.prs_kostenplaats_nr)),
                                 'VL',  aaxx_get_top_dep_code(k.prs_kostenplaats_nr),
                                        SUBSTR (prs_kostenplaats_nr, 1, 30)) prs_kostenplaats_nr,
          DECODE (aaxx_get_user, 'AH',  aaxx_get_top_dep_code(k.prs_kostenplaats_nr),
                                 'DBS', DECODE (ks.prs_kostensoort_upper, 'CV EIG BOUW PL', '913757',
                                                                          'CV EIG INST PL', '913757',
                                                                          substr(aaxx_get_lev2_dep_code(k.prs_kostenplaats_nr),1,6)),
                                 'DOW', substr(aaxx_get_top_dep_code(k.prs_kostenplaats_nr),1,6),
                                 'DSM', DECODE (SUBSTR(ks.prs_kostensoort_upper,1,3) , 'CV ', '520',
                                                                                       'CVE', aaxx_get_top_dep_code(k.prs_kostenplaats_nr)),
                                 'SITECH', aaxx_get_dep_code(k.prs_kostenplaats_nr),
                                 'ESSENT', '912001',
                                 'LB',  DECODE(g.alg_locatie_key,
                                               1, '911928',   -- Worldwide Headquarters
                                               2, '911927',   -- Maasvlakte
                                               3, '911930',   -- Botlek
                                               4, '911929'    -- Moerdijk
                                              ),
                                 'NMM',  DECODE(k.prs_kostenplaats_nr,
                                                '0001', '913799',   -- Heijmans
                                                '0002', '913810',   -- Vermaat
                                                '0003', '913766',   -- Defensie
                                                '0004', '913776',   -- Stichting Nationaal Militair Museum
                                                        'Onbekend'
                                               ),
                                 'RABO', aaxx_get_dep_code(k.prs_kostenplaats_nr),
                                 'SABIC', DECODE (to_char(opdr_datum, 'YYYY'), '2012', aaxx_get_top_dep_code(k.prs_kostenplaats_nr),
                                                                               '2013', aaxx_get_top_dep_code(k.prs_kostenplaats_nr),
                                                                                       (SELECT distinct prs_leverancier_nr FROM prs_bedrijf b, prs_afdeling a
                                                                                         WHERE b.prs_bedrijf_key = a.prs_bedrijf_key
                                                                                           AND b.prs_bedrijf_verwijder IS NULL
                                                                                           AND a.prs_afdeling_verwijder IS NULL
                                                                                           AND a.prs_afdeling_naam = aaxx_get_top_dep_code(k.prs_kostenplaats_nr))),
                                 'VL',  aaxx_get_top_dep_code(k.prs_kostenplaats_nr),
                                 'ZCN', '913815',
                                 'ZKHM', '913816',
                                        SUBSTR (prs_kostenplaats_nr, 1, 30)) debiteur,
          b.prs_bedrijf_key,
          ks.prs_kostensoort_oms || DECODE(TO_CHAR(opdr_datum,'YYYY'), TO_CHAR(TO_NUMBER(TO_CHAR(SYSDATE, 'yyyy'))-1), ' VJ','') ,
          ks.prs_kostensoort_opmerking,
          vk_prs_kostensoort_refcode,
          SUBSTR(DECODE (aaxx_get_user,
                         'AH',  DECODE(SUBSTR(ks.prs_kostensoort_upper,1,2), 'CV', ksg.prs_kostensoortgrp_oms,
                                                                                   sd.ins_srtdiscipline_prefix || m.mld_melding_key),
                         'DBS', DECODE(ks.prs_kostensoortgrp_key, 3, 'Projecten', 'Core Variable'),
                         'DOW', 'Service Charges',
                         'RABO', 'Servicekosten ' || aaxx_get_dep_code(k.prs_kostenplaats_nr),
                         'VL', 'Core Variabel',
                         'ZCN', DECODE(sd.ins_srtdiscipline_prefix, 'PR',  'Projecten',  
                                                                    DECODE(aaxx_get_top_dep_code(prs_kostenplaats_nr), 'SN', 'Servicekosten',
                                                                                                                       'KL', 'Klantvragen',
                                                                                                                       '')),
                         'ZKHM', DECODE(sd.ins_srtdiscipline_prefix, 'PR',  'Projecten',  
                                                                     DECODE(aaxx_get_top_dep_code(prs_kostenplaats_nr), 'SN', 'Servicekosten',
                                                                                                                        'KL', 'Klantvragen',
                                                                                                                        '')),
                         ksg.prs_kostensoortgrp_oms || DECODE (aaxx_get_user, 'LB', ' ' || Exact_code,
                                                                              'SABIC', ' ' || DECODE (to_char(opdr_datum, 'YYYY'), '2012', k.prs_kostenplaats_nr,
                                                                                                                                   '2013', k.prs_kostenplaats_nr,
                                                                                                                                           aaxx_get_top_dep_code(k.prs_kostenplaats_nr)),
                                                                              'DSM', DECODE (SUBSTR(ks.prs_kostensoort_upper,1,3) , 'CV ', ' ' || l.alg_locatie_code),
                                                                              'NMM', DECODE(k.prs_kostenplaats_nr, '0001', ' Heijmans',
                                                                                                                   '0002', ' Vermaat',
                                                                                                                   '0003', ' Defensie',
                                                                                                                   '0004', ' NMM',
                                                                                                                           ' Onbekend')
                                                              )
                        )
                 , 1, 60) prs_kostensoortgrp_oms,
          sd.ins_srtdiscipline_prefix
          || m.mld_melding_key
          || '/'
          || mld_opdr_bedrijfopdr_volgnr
          || ' '
          || d.ins_discipline_omschrijving
          || ' ('
          || (SELECT MAX(mld_kenmerkmelding_waarde)
              FROM mld_kenmerkmelding km, mld_kenmerk k
              WHERE     km.mld_kenmerk_key = k.mld_kenmerk_key
                    AND (   ( aaxx_get_user <> 'DBS' AND k.mld_srtkenmerk_key = 143)              -- opdrachtnummer
                         OR ( aaxx_get_user = 'DBS' AND k.mld_srtkenmerk_key = 55)                -- projectnaam
                        )
                    AND km.mld_melding_key = m.mld_melding_key)
          || ')'
             omschrijving,
          ROUND (fg.bedrag
                 * COALESCE ( (SELECT u.uplift
                               FROM aaxx_imp_uplift u
                               WHERE u.prs_leverancier_nr = b.prs_leverancier_nr
                                     AND UPPER(soort_order) = 'WO'
                                     AND UPPER (u.prs_kostensoort_oms) =
                                           ks.prs_kostensoort_upper
                                     AND fg.fin_factuur_boekmaand =
                                              u.jaar
                                           || '-'
                                           || LTRIM (TO_CHAR (u.maand, '00'))),
                             DECODE (aaxx_get_user, 'NMM', 1.1, 1)
                   ),
                 2
          ),
          DECODE (aaxx_get_user,
                  'SABIC', DECODE (ks.prs_kostensoort_oms, 'RAS-NC', 2, 'CV OP VERV', 2, 5),     -- Kostensoorten RAS-NC en CV OP VERV zijn laag tarief
                  'SITECH', DECODE (fg.prs_kostensoort_refcode, '4321006', fin_btwtabelwaarde_code, 5), --AADS#21168
                  fin_btwtabelwaarde_code) fin_btwtabelwaarde_code,
          to_char(opdr_datum, 'YYYY'),
          DECODE (aaxx_get_user,
                  'LB', l.alg_locatie_code,
                  'NMM', 'MGB',
                  COALESCE(exact_code, alg_gebouw_code)),  -- C1
          SUBSTR (
             DECODE (aaxx_get_user, 'AH',  DECODE(SUBSTR(ks.prs_kostensoort_upper,1,2), 'CV', ksg.prs_kostensoortgrp_oms,
                                                                                              sd.ins_srtdiscipline_prefix || m.mld_melding_key),
                                    'DBS', DECODE (ks.prs_kostensoort_upper, 'NC PROJ', '913757' || m.mld_melding_key,
                                                                             'CV EIG BOUW PL', '913757',
                                                                             'CV EIG INST PL', '913757',
                                                                             'CVE GEB NIET PLAN', aaxx_get_lev2_dep_code(k.prs_kostenplaats_nr) || m.mld_melding_key,
                                                                             'CVE INSTAL NIET PLAN', aaxx_get_lev2_dep_code(k.prs_kostenplaats_nr) || m.mld_melding_key,
                                                                                        aaxx_get_lev2_dep_code(k.prs_kostenplaats_nr)),
                                    'SITECH', (SELECT fac_usrdata_omschr
                                              FROM alg_onrgoedkenmerk, fac_usrdata ud
                                             WHERE     alg_onrgoed_key = g.alg_gebouw_key
                                                   AND alg_kenmerk_key = 1060   -- rema contract
                                                   AND ud.fac_usrdata_key =
                                                         fac.safe_to_number (alg_onrgoedkenmerk_waarde)
                                                   AND (   ks.prs_kostensoort_upper LIKE 'ST ONDH%'
                                                        OR ks.prs_kostensoort_upper LIKE 'STB ONDH%')),
                                    'DOW', substr(aaxx_get_top_dep_code(k.prs_kostenplaats_nr),1,8) ||
                                           DECODE(substr(aaxx_get_top_dep_code(k.prs_kostenplaats_nr),1,3),
                                              '911', DECODE(SUBSTR(ks.prs_kostensoort_upper, 1,5), 'NC P ', 'PR', 'NC/CV'),
                                              '912', 'CV/NC/PR',
                                              '913', DECODE(SUBSTR(ks.prs_kostensoort_upper, 1,7), 'COR VAR', 'CV', 'NC/PR'),
                                              'Onbekend') ||
                                           substr(aaxx_get_top_dep_code(k.prs_kostenplaats_nr),1,8),
                                    'DSM', DECODE (SUBSTR(ks.prs_kostensoort_upper,1,3) , 'CV ', ksg.prs_kostensoortgrp_oms || ' ' || l.alg_locatie_code,
                                                                                          'CVE', aaxx_get_top_dep_code(k.prs_kostenplaats_nr)),
                                    'RABO', aaxx_get_dep_code(k.prs_kostenplaats_nr),
                                    'SABIC', DECODE (to_char(opdr_datum, 'YYYY'), '2012', '',
                                                                                  '2013', '',
                                                                                          aaxx_get_top_dep_code(k.prs_kostenplaats_nr)),
                                    'ZCN', DECODE(sd.ins_srtdiscipline_prefix, 'PR', to_char(m.mld_melding_key),
                                                                               aaxx_get_top_dep_code(prs_kostenplaats_nr)),
                                    'ZKHM', DECODE(sd.ins_srtdiscipline_prefix, 'PR', to_char(m.mld_melding_key),
                                                                                aaxx_get_top_dep_code(prs_kostenplaats_nr)),
                                    '')
             , 1, 12) groepering,   -- C2
          DECODE (aaxx_get_user, 'LB', prs_kostensoort_oms || '1',
                                 'DOW', 'A' || prs_kostensoort_oms,
                                 'ESSENT', (SELECT uplift
                                              FROM aaxx_imp_uplift u
                                             WHERE u.prs_kostensoort_oms = ks.prs_kostensoort_oms),
                                 '') subregelvolgorde,  -- C3
          l.alg_locatie_key    -- N1
   FROM mld_opdr o,
        mld_typeopdr ot,
        prs_bedrijf b,
        prs_kostenplaats k,
        mld_melding m,
        mld_stdmelding std,
        ins_tab_discipline d,
        ins_srtdiscipline sd,
        prs_kostensoort ks,
        prs_kostensoortgrp ksg,
        fin_factuur f,
        alg_gebouw g,
        alg_locatie l,
        alg_v_onroerendgoed og,
        aaxx_v_exact_code_gebouw exact,
        (SELECT fin_factuur_key,
                mld_opdr_key,
                SUM (fin_factuurregel_totaal) bedrag,
                aaxx_get_verkoop_btw_code (fin_btwtabelwaarde_key) fin_btwtabelwaarde_code,
                prs_kostenplaats_key,
                prs_kostensoort_key,
                prs_kostensoort_refcode,
                vk_prs_kostensoort_refcode,
                fin_factuur_boekmaand,
                opdr_datum,
                fin_factuur_datum
         FROM aaxx_v_factuur_gegevens
         WHERE fin_factuur_statuses_key = 7
         GROUP BY fin_factuur_key,
                  fin_btwtabelwaarde_key,
                  mld_opdr_key,
                  prs_kostenplaats_key,
                  prs_kostensoort_key,
                  fin_factuur_boekmaand,
                  opdr_datum,
                  fin_factuur_datum,
                  fin_factuurregel_btw,
                  fin_btwtabelwaarde_code,
                  vk_prs_kostensoort_refcode,
                  prs_kostensoort_refcode,
                  fin_factuurregel_totaal) fg
   WHERE     fg.prs_kostenplaats_key = k.prs_kostenplaats_key(+)
         AND o.mld_typeopdr_key = ot.mld_typeopdr_key
         AND fg.mld_opdr_key = o.mld_opdr_key
         AND m.mld_alg_onroerendgoed_keys = og.alg_onroerendgoed_keys(+)
         AND og.alg_gebouw_key = g.alg_gebouw_key(+)
         AND m.mld_alg_locatie_key = l.alg_locatie_key(+)
         AND og.alg_gebouw_key = exact.alg_gebouw_key(+)
         AND fg.fin_factuur_key = f.fin_factuur_key
         AND o.mld_melding_key = m.mld_melding_key
         AND o.mld_uitvoerende_keys = b.prs_bedrijf_key
         AND fg.prs_kostensoort_key = ks.prs_kostensoort_key(+)
         AND ks.prs_kostensoortgrp_key = ksg.prs_kostensoortgrp_key(+)
         AND m.mld_stdmelding_key = std.mld_stdmelding_key
         AND std.mld_ins_discipline_key = d.ins_discipline_key
         AND d.ins_srtdiscipline_key = sd.ins_srtdiscipline_key
         AND ((       sd.ins_srtdiscipline_prefix = 'SA'
                  AND aaxx_get_user <> 'VL'
                  AND aaxx_get_user <> 'AH'
                  AND aaxx_get_user <> 'DSM'
                  AND aaxx_get_user <> 'SABIC'
                  AND aaxx_get_user <> 'ZCN'
                  AND aaxx_get_user <> 'ZKHM'
                  AND aaxx_get_user <> 'DOW'
                  AND aaxx_get_user <> 'LB'
                  AND aaxx_get_user <> 'NMM'
                  AND aaxx_get_user <> 'RABO'
                  AND aaxx_get_user <> 'DBS'
                  AND aaxx_get_user <> 'ESSENT')
              OR (     aaxx_get_user = 'SITECH'
                  AND (   ks.prs_kostensoort_upper LIKE 'ST ONDH%'
                       OR ks.prs_kostensoort_upper LIKE 'STB ONDH%')
                  AND ot.mld_typeopdr_omschrijving = 'Workorder'
                 )
              OR (     aaxx_get_user = 'AH'
                  AND (   ks.prs_kostensoort_upper LIKE 'CV%'
                       OR ks.prs_kostensoort_upper LIKE 'NC PROJ%')
                 )
              OR (     aaxx_get_user = 'DBS'
                  AND  ks.prs_kostensoort_upper IN (
                               'CV AFVAL REST',
                               'CV OND',
                               'CV GEB NIET PLAN',
                               'CV INSTAL NIET PLAN',
                               'CV TERR VERHARD',
                               'CV TERR NIET PL',
                               'CV OND TERR',
                               'CV TERR OVR',
                               'CV CONS REST',
                               'CV CONS SERV',
                               'CV CONS OVR',
                               'CV CONS AUT',
                               'CV BEWAK',
                               'CV PREV CAL',
                               'CV BEWAK OVR',
                               'CV SCH',
                               'CV SCH GLAS',
                               'CV SCH OVR',
                               'CV VGM',
                               'CV GROEN',
                               'CV EIG BOUW PL',
                               'CV EIG INST PL',
                               'NC PROJ',
                               'CVE INSTAL NIET PLAN',
                               'CVE GEB NIET PLAN')
                 )
              OR (     aaxx_get_user = 'DOW'
                   AND (    ot.mld_typeopdr_omschrijving = 'Workorder'
                        OR  ot.mld_typeopdr_omschrijving = 'Projectorder')
                   AND (    ks.prs_kostensoort_upper LIKE 'NC %'
                         OR ks.prs_kostensoort_upper LIKE 'NC P %'
                         OR ks.prs_kostensoort_upper = 'COR VAR MAIL SERVICES'
                         OR ks.prs_kostensoort_upper = 'COR VAR VENDING'
                         OR ks.prs_kostensoort_upper = 'COR VAR MAIN HANDYMAN'
                         OR ks.prs_kostensoort_upper = 'COR VAR GEN TEN SERV'
                       )
                 )
              OR (     aaxx_get_user = 'DSM'
                  AND  SUBSTR(ks.prs_kostensoort_upper,1,3) IN (
                               'CV ',
                               'CVE')
                 )
              OR (     aaxx_get_user = 'ESSENT'
                   AND ks.prs_kostensoort_upper LIKE 'CVE%'
                   AND ot.mld_typeopdr_omschrijving = 'Workorder'
                 )
              OR (     aaxx_get_user = 'LB'
                   AND ks.prs_kostensoort_upper LIKE 'NC%'
                   AND ks.prs_kostensoort_upper <> 'NC DERDEN'
                   AND ks.prs_kostensoort_upper <> 'NC PROJ'
                 )
              OR (     aaxx_get_user = 'NMM'
                   AND ks.prs_kostensoort_upper LIKE 'CV%'
                 )
              OR (     aaxx_get_user = 'RABO'
                  AND  ot.mld_typeopdr_omschrijving = 'Workorder'
                 )
              OR (     aaxx_get_user = 'SABIC'
                   AND (  (     o.mld_opdr_datumbegin < to_date ('20140101', 'yyyymmdd') --  Voor sabic geldt in 2014 een ander mechanisme (AASA#28673)
                            AND ks.prs_kostensoort_upper LIKE '%NC'
                            AND ot.mld_typeopdr_omschrijving = 'Workorder'
                          )
                       OR (     o.mld_opdr_datumbegin > to_date ('20140101', 'yyyymmdd') --  Voor sabic geldt voor 2014 een ander mechanisme (AASA#28673)
                            AND ks.prs_kostensoort_upper LIKE 'CV %'
                            AND ks.prs_kostensoort_upper <> 'CV CHIP'
                            AND (    o.mld_opdr_datumbegin > to_date ('20150101', 'yyyymmdd') --  Voor sabic geldt voor 2015 een ander mechanisme (AASA#31618)
                                  OR (      ks.prs_kostensoort_upper <> 'CV CONS REST'
                                        AND ks.prs_kostensoort_upper <> 'CV CONS AUT'
                                        AND ks.prs_kostensoort_upper <> 'CV SCH OVR'
                                        AND ks.prs_kostensoort_upper <> 'CV DOC POST'
                                        AND ks.prs_kostensoort_upper <> 'CV AFVAL REST'
                                     )
                                )
                            AND ( ks.prs_kostensoort_upper <> 'CV EIG BOUW PL' OR ot.mld_typeopdr_omschrijving = 'Workorder')
                          )
                       )
                 )
              OR (     aaxx_get_user = 'VL'
                   AND ( (     o.mld_opdr_datumbegin < to_date ('20160101', 'yyyymmdd') --  Voor VL geldt in 2016 een ander mechanisme (AAVL#34856)
                           AND ks.prs_kostensoort_upper IN (
                                    'CV OND',
                                    'CV TERR OVR',
                                    'CV BEWAK OVR',
                                    'CV BOUW PLAN',
                                    'CV CONS REST',
                                    'CV CONS OVR',
                                    'CV SCH',
                                    'CV WP',
                                    'CV GEB NIET PLAN',
                                    'CV CONS SERV',
                                    'CV SCH GLAS',
                                    'CV KART',
                                    'CV INSTAL PLAN',
                                    'CV BEWAK',
                                    'CV VERH',
                                    'CV GROEN',
                                    'CV INSTAL NIET PLAN',
                                    'CV PREV CAL',
                                    'CV DOC POST',
                                    'CV BEW',
                                    'CV TERR VERHARD',
                                    'CV REC',
                                    'CV DOC REP',
                                    'CV VERV PERS',
                                    'CV OND TERR',
                                    'CV ACHT OND',
                                    'CV EIG INST PL',
                                    'CV EIG BOUW PL',
                                    'NC ACHT OND',
                                    'NC INV BOUW',
                                    'NC INV WP',
                                    'NC INV INST')
                         )
                         OR
                         (     o.mld_opdr_datumbegin >= to_date ('20160101', 'yyyymmdd') --  Voor VL geldt in 2016 een ander mechanisme (AAVL#34856)
                           AND ( ks.prs_kostensoort_upper LIKE 'CVE %' OR ks.prs_kostensoort_upper LIKE 'NC %')
                         )
                       )
                 )
              OR (     aaxx_get_user = 'ZCN'
                   AND (   sd.ins_srtdiscipline_prefix = 'PR'
                        OR aaxx_get_top_dep_code(prs_kostenplaats_nr) = 'SN'
                        OR aaxx_get_top_dep_code(prs_kostenplaats_nr) = 'KL'
                       )
                 )
              OR (     aaxx_get_user = 'ZKHM'
                   AND (   sd.ins_srtdiscipline_prefix = 'PR'
                        OR aaxx_get_top_dep_code(prs_kostenplaats_nr) = 'SN'
                        OR aaxx_get_top_dep_code(prs_kostenplaats_nr) = 'KL'
                       )
                 )
             );


   -- voeg contract orders toe aan de verkoopbuffer
   -- bij SITECH wordt gegroepeerd op REMA contract
   IF aaxx_get_user = 'SITECH' THEN
     INSERT INTO fin_verkoopfactuur
     (
      -- module, export_datum, prs_kostenplaats_nr, debiteur, prs_kostensoort_oms, prs_kostensoort_opmerking, prs_kostensoort_refcode, prs_kostensoortgrp_oms, omschrijving, bedrag, btw, fin_btwtabelwaarde_code, opdr_jaar, exact_code_gebouw, groepering, subregelvolgorde
       fin_verkoopfactuur_id, fin_verkoopfactuur_xmlnode, fin_verkoopfactuur_refkey, fin_verkoopfactuur_aanmaak, prs_kostenplaats_nr, prs_debiteur_naam, prs_kostensoort_oms, prs_kostensoort_opmerking, prs_kostensoort_refcode, prs_kostensoortgrp_oms, fin_verkoopfactuur_omschr, fin_verkoopfactuur_bedrag, fin_btwtabelwaarde_code, fin_verkoopfactuur_maand, fin_verkoopfactuur_c1, fin_verkoopfactuur_c2, fin_verkoopfactuur_c3, fin_verkoopfactuur_n1
     )
      SELECT substr(to_char(v_logdate, 'dd-mm-yyyy') || ' - ' || 'C' || cnt_contract_nummer_intern || DECODE (cnt_contract_versie, NULL, '', '.' || cnt_contract_versie), 1,30 ),
             'contract',
             c.cnt_contract_key,
             v_logdate,
             aaxx_get_dep_code (k.prs_kostenplaats_nr),
             aaxx_get_dep_code (k.prs_kostenplaats_nr),
             ks.prs_kostensoort_oms || DECODE(TO_CHAR(opdr_datum,'YYYY'), TO_CHAR(TO_NUMBER(TO_CHAR(SYSDATE, 'yyyy'))-1), ' VJ','') ,
             ks.prs_kostensoort_opmerking,
             vk_prs_kostensoort_refcode,
             (SELECT prs_kostensoortgrp_oms
              FROM prs_kostensoortgrp ksg
              WHERE ksg.prs_kostensoortgrp_key = ks.prs_kostensoortgrp_key),
                'C'
             || cnt_contract_nummer_intern
             || DECODE (cnt_contract_versie, NULL, '', '.' || cnt_contract_versie)
                omschrijving,
             COALESCE((SELECT ROUND (COALESCE(cp.gewicht,1) * fg.bedrag * u.uplift, 2)
                         FROM aaxx_imp_uplift u
                        WHERE u.prs_leverancier_nr = b.prs_leverancier_nr
                          AND UPPER (soort_order) = 'CO'
                          AND UPPER (u.prs_kostensoort_oms) = ks.prs_kostensoort_upper
                          AND fg.fin_factuur_boekmaand =
                              TO_CHAR (u.jaar) || '-' || LTRIM (TO_CHAR (u.maand, '00'))), ROUND ((cp.gewicht * fg.bedrag), 2)),
             5, -- AADS#21168 , AADS#26856
             to_char(opdr_datum, 'YYYY'),
             cp.alg_gebouw_code,
             cp.rema,
             '',
             ''
      FROM cnt_contract c,
           prs_bedrijf b,
           prs_kostenplaats k,
           ins_tab_discipline d,
           prs_kostensoort ks,
           fin_factuur f,
           (SELECT fin_factuur_key,
                   cnt_contract_key,
                   SUM (fin_factuurregel_totaal) bedrag,
                   fin_factuurregel_btw btw,
                   aaxx_get_verkoop_btw_code (fin_btwtabelwaarde_key) fin_btwtabelwaarde_code,
                   prs_kostenplaats_key,
                   prs_kostensoort_key,
                   vk_prs_kostensoort_refcode,
                   fin_factuur_boekmaand,
                   opdr_datum,
                   fin_factuur_datum
            FROM aaxx_v_factuur_gegevens
            WHERE fin_factuur_statuses_key = 7
            GROUP BY fin_factuur_key,
                     cnt_contract_key,
                     prs_kostenplaats_key,
                     prs_kostensoort_key,
                     fin_factuur_boekmaand,
                     opdr_datum,
                     fin_factuur_datum,
                     fin_factuurregel_btw,
                     fin_btwtabelwaarde_key,
                     fin_btwtabelwaarde_code,
                     vk_prs_kostensoort_refcode,
                     fin_factuurregel_totaal) fg,
           (SELECT cnt_contract_key,
                   alg_gebouw_code,
                   rema.fac_usrdata_omschr rema,
                   cp.cnt_contract_plaats_gewicht
                   / (  SELECT DECODE (SUM (cp2.cnt_contract_plaats_gewicht),
                                       0, 1,
                                       SUM (cp2.cnt_contract_plaats_gewicht))
                          FROM cnt_contract_plaats cp2
                         WHERE cp2.cnt_contract_key = cp.cnt_contract_key
                               AND cp2.cnt_contract_plaats_verwijder IS NULL
                      GROUP BY cp.cnt_contract_key)
                      gewicht
              FROM cnt_contract_plaats cp,
                   alg_gebouw g,
                   (SELECT k.alg_onrgoed_key, ud.fac_usrdata_omschr
                      FROM alg_onrgoedkenmerk k, fac_usrdata ud
                     WHERE k.alg_kenmerk_key = 1060
                           AND fac.safe_to_number (alg_onrgoedkenmerk_waarde) =
                                 fac_usrdata_key) rema
             WHERE     cp.cnt_contract_plaats_verwijder IS NULL
                   AND cp.cnt_alg_plaats_key = g.alg_gebouw_key
                   AND g.alg_gebouw_key = rema.alg_onrgoed_key(+)) cp
      WHERE     fg.prs_kostenplaats_key = k.prs_kostenplaats_key
            AND fg.cnt_contract_key = c.cnt_contract_key
            AND c.cnt_contract_key = cp.cnt_contract_key(+)
            AND fg.fin_factuur_key = f.fin_factuur_key
            AND c.cnt_prs_bedrijf_key = b.prs_bedrijf_key
            AND c.ins_discipline_key = d.ins_discipline_key
            AND fg.prs_kostensoort_key = ks.prs_kostensoort_key
            AND aaxx_get_user = 'SITECH'
            AND (   ks.prs_kostensoort_upper LIKE 'AE%'
                 OR ks.prs_kostensoort_upper LIKE 'AS ONDH%'
                 OR ks.prs_kostensoort_upper LIKE 'ST ONDH%'
                 OR ks.prs_kostensoort_upper LIKE 'STB ONDH%'
                );
   ELSE
     INSERT INTO fin_verkoopfactuur
     (
      -- module, export_datum, prs_kostenplaats_nr, debiteur, prs_kostensoort_oms, prs_kostensoort_opmerking, prs_kostensoort_refcode, prs_kostensoortgrp_oms, omschrijving, bedrag, btw, fin_btwtabelwaarde_code, opdr_jaar, exact_code_gebouw, groepering, subregelvolgorde
         fin_verkoopfactuur_id, fin_verkoopfactuur_xmlnode, fin_verkoopfactuur_refkey, fin_verkoopfactuur_aanmaak, prs_kostenplaats_nr, prs_debiteur_naam, prs_bedrijf_key, prs_kostensoort_oms, prs_kostensoort_opmerking, prs_kostensoort_refcode, prs_kostensoortgrp_oms, fin_verkoopfactuur_omschr, fin_verkoopfactuur_bedrag, fin_btwtabelwaarde_code, fin_verkoopfactuur_maand, fin_verkoopfactuur_c1, fin_verkoopfactuur_c2, fin_verkoopfactuur_c3, fin_verkoopfactuur_n1
     )
      SELECT substr(to_char(v_logdate, 'dd-mm-yyyy') || ' - ' || 'C' || cnt_contract_nummer_intern || DECODE (cnt_contract_versie, NULL, '', '.' || cnt_contract_versie), 1,30 ),
             'contract',
             c.cnt_contract_key,
             v_logdate,
             DECODE (aaxx_get_user,
                     'AH',  aaxx_get_top_dep_code(k.prs_kostenplaats_nr),
                     'DBS', DECODE (ks.prs_kostensoort_upper, 'CV EIG BOUW PL', '913757',
                                                              'CV EIG INST PL', '913757',
                                                                                 substr(aaxx_get_lev2_dep_code(k.prs_kostenplaats_nr),1,6)),
                     'LB',  exact_code,
                     'NMM',  exact_code,
                     'DOW', k.prs_kostenplaats_nr,
                     'DSM', DECODE (SUBSTR(ks.prs_kostensoort_upper,1,3) , 'CV ', '520',
                                                                           'CVE', aaxx_get_top_dep_code(k.prs_kostenplaats_nr)),
                     'NS',  SUBSTR (prs_kostenplaats_nr, 1, 30),
                     'SABIC', aaxx_get_top_dep_code(k.prs_kostenplaats_nr),
                     'VL',  aaxx_get_top_dep_code(k.prs_kostenplaats_nr)
             ) prs_kostenplaats_nr,
             DECODE (aaxx_get_user,
                     'AH',  aaxx_get_top_dep_code(k.prs_kostenplaats_nr),
                     'DBS', DECODE (ks.prs_kostensoort_upper, 'CV EIG BOUW PL', '913757',
                                                              'CV EIG INST PL', '913757',
                                                                                 substr(aaxx_get_lev2_dep_code(k.prs_kostenplaats_nr),1,6)),
                     'LB',  DECODE(g.alg_locatie_key,
                                   1, '911928',   -- Worldwide Headquarters
                                   2, '911927',   -- Maasvlakte
                                   3, '911930',   -- Botlek
                                   4, '911929'    -- Moerdijk
                                  ),
                     'NMM',  DECODE(k.prs_kostenplaats_nr,
                                    '0001', '913799',   -- Heijmans
                                    '0002', '913810',   -- Vermaat
                                    '0003', '913766',   -- Defensie
                                    '0004', '913776',   -- Stichting Nationaal Militair Museum
                                            'Onbekend'
                                   ),
                     'DOW', substr(aaxx_get_top_dep_code(k.prs_kostenplaats_nr),1,6),
                     'DSM', DECODE (SUBSTR(ks.prs_kostensoort_upper,1,3) , 'CV ', '520',
                                                                           'CVE', aaxx_get_top_dep_code(k.prs_kostenplaats_nr)),
                     'NS',  SUBSTR (prs_kostenplaats_nr, 1, 30),
                     'SABIC', (SELECT distinct prs_leverancier_nr FROM prs_bedrijf b, prs_afdeling a
                                WHERE b.prs_bedrijf_key = a.prs_bedrijf_key
                                  AND b.prs_bedrijf_verwijder IS NULL
                                  AND a.prs_afdeling_verwijder IS NULL
                                  AND a.prs_afdeling_naam = aaxx_get_top_dep_code(k.prs_kostenplaats_nr)),
                     'VL',  aaxx_get_top_dep_code(k.prs_kostenplaats_nr),
                     'ZCN', '913815',
                     'ZCN', '913816'
             ) debiteur,
             b.prs_bedrijf_key,
             ks.prs_kostensoort_oms || DECODE(TO_CHAR(opdr_datum,'YYYY'), TO_CHAR(TO_NUMBER(TO_CHAR(SYSDATE, 'yyyy'))-1), ' VJ','') ,
             ks.prs_kostensoort_opmerking,
             vk_prs_kostensoort_refcode,
             DECODE (aaxx_get_user,
                        'DBS', DECODE(ks.prs_kostensoortgrp_key, 3, 'Projecten', 'Core Variable'),
                        'DOW', 'Service Charges',
                        'ZCN', DECODE(aaxx_get_top_dep_code(k.prs_kostenplaats_nr), 'SN', 'Servicekosten',
                                                                                    'KL', 'Klantvragen',
                                                                                    ''),
                        'ZKHM', DECODE(aaxx_get_top_dep_code(k.prs_kostenplaats_nr), 'SN', 'Servicekosten',
                                                                                     'KL', 'Klantvragen',
                                                                                     ''),
                        ksg.prs_kostensoortgrp_oms || DECODE (aaxx_get_user, 'DSM', DECODE (SUBSTR(ks.prs_kostensoort_upper,1,3) , 'CV ', ' ' || l.alg_locatie_code),
                                                                             'LB', ' ' || exact_code,
                                                                             'SABIC', ' ' || aaxx_get_top_dep_code(k.prs_kostenplaats_nr),
                                                                             'NMM', DECODE(k.prs_kostenplaats_nr, '0001', ' Heijmans',
                                                                                                                  '0002', ' Vermaat',
                                                                                                                  '0003', ' Defensie',
                                                                                                                  '0004', ' NMM',
                                                                                                                          ' Onbekend'))
                    ) prs_kostensoortgrp_oms,
                'C'
             || cnt_contract_nummer_intern
             || DECODE (cnt_contract_versie, NULL, '', '.' || cnt_contract_versie)
                omschrijving,
             DECODE (aaxx_get_user,
                     'NMM', ROUND (fg.bedrag * 1.1,2),
                     fg.bedrag),
             DECODE (aaxx_get_user, 'SABIC', DECODE (prs_kostensoort_upper, 'CV OP VERV', 2, 5),
                                             fin_btwtabelwaarde_code) fin_btwtabelwaarde_code,
             to_char(opdr_datum, 'YYYY'),
             DECODE (aaxx_get_user, 'LB', l.alg_locatie_code,
                                    COALESCE(exact_code, alg_gebouw_code)) exact_code,
             SUBSTR (
                DECODE (aaxx_get_user, 'AH', ksg.prs_kostensoortgrp_oms,
                                       'DBS', DECODE (ks.prs_kostensoort_upper, 'CV EIG BOUW PL', '913757',
                                                                                'CV EIG INST PL', '913757',
                                                                                                  aaxx_get_lev2_dep_code(k.prs_kostenplaats_nr)),
                                       'DOW', substr(aaxx_get_top_dep_code(k.prs_kostenplaats_nr),1,8) ||
                                              DECODE(substr(aaxx_get_top_dep_code(k.prs_kostenplaats_nr),1,3),
                                                 '911', DECODE(SUBSTR(ks.prs_kostensoort_upper, 1,5), 'NC P ', 'PR', 'NC/CV'),
                                                 '912', 'CV/NC/PR',
                                                 '913', DECODE(SUBSTR(ks.prs_kostensoort_upper, 1,7), 'COR VAR', 'CV', 'NC/PR'),
                                                 'Onbekend') ||
                                              substr(aaxx_get_top_dep_code(k.prs_kostenplaats_nr),1,8),
                                       'DSM', DECODE (SUBSTR(ks.prs_kostensoort_upper,1,3) , 'CV ', ksg.prs_kostensoortgrp_oms || ' ' || l.alg_locatie_code,
                                                                                             'CVE', aaxx_get_top_dep_code(k.prs_kostenplaats_nr)),
                                       'SABIC', aaxx_get_top_dep_code(k.prs_kostenplaats_nr),
                                       'ZCN', aaxx_get_top_dep_code(k.prs_kostenplaats_nr),
                                       'ZKHM', aaxx_get_top_dep_code(k.prs_kostenplaats_nr),
                                       '')
                ,1,12) groepering,
             DECODE (aaxx_get_user, 'LB', prs_kostensoort_oms || '1',
                                    'DOW', 'A' || prs_kostensoort_oms, '') subregelvolgorde,
             l.alg_locatie_key  -- N1
      FROM cnt_contract c,
           prs_bedrijf b,
           prs_kostenplaats k,
           ins_tab_discipline d,
           prs_kostensoort ks,
           prs_kostensoortgrp ksg,
           fin_factuur f,
           alg_locatie l,
           (SELECT cnt_contract_key, alg_gebouw_code, exact_code, ag.alg_gebouw_key, ag.alg_locatie_key
              FROM
               (SELECT cnt_contract_key, MIN (cp.cnt_alg_plaats_key) cnt_alg_plaats_key
                  FROM cnt_contract_plaats cp
                 WHERE     cp.cnt_contract_plaats_verwijder IS NULL
                       AND cp.cnt_alg_plaats_code = 'G'
                 GROUP BY cnt_contract_key) cp,
               alg_gebouw ag,
               aaxx_v_exact_code_gebouw ae
            WHERE  cp.cnt_alg_plaats_key = ag.alg_gebouw_key
              AND  cp.cnt_alg_plaats_key = ae.alg_gebouw_key) g,
           (SELECT fin_factuur_key,
                   cnt_contract_key,
                   SUM (fin_factuurregel_totaal) bedrag,
                   fin_factuurregel_btw btw,
                   aaxx_get_verkoop_btw_code (fin_btwtabelwaarde_key) fin_btwtabelwaarde_code,
                   prs_kostenplaats_key,
                   prs_kostensoort_key,
                   vk_prs_kostensoort_refcode,
                   fin_factuur_boekmaand,
                   opdr_datum,
                   fin_factuur_datum
            FROM aaxx_v_factuur_gegevens
            WHERE fin_factuur_statuses_key = 7
            GROUP BY fin_factuur_key,
                     cnt_contract_key,
                     prs_kostenplaats_key,
                     prs_kostensoort_key,
                     fin_factuur_boekmaand,
                     opdr_datum,
                     fin_factuur_datum,
                     fin_factuurregel_btw,
                     fin_btwtabelwaarde_key,
                     fin_btwtabelwaarde_code,
                     vk_prs_kostensoort_refcode,
                     fin_factuurregel_totaal) fg
      WHERE     fg.prs_kostenplaats_key = k.prs_kostenplaats_key
            AND fg.cnt_contract_key = c.cnt_contract_key
            AND fg.fin_factuur_key = f.fin_factuur_key
            AND g.alg_locatie_key = l.alg_locatie_key
            AND c.cnt_prs_bedrijf_key = b.prs_bedrijf_key
            AND c.ins_discipline_key = d.ins_discipline_key
            AND c.cnt_contract_key = g.cnt_contract_key(+)
            AND fg.prs_kostensoort_key = ks.prs_kostensoort_key(+)
            AND ks.prs_kostensoortgrp_key = ksg.prs_kostensoortgrp_key(+)
            AND ( (     aaxx_get_user = 'AH'
                    AND ks.prs_kostensoort_upper LIKE 'CV %'
                  )
                  OR
                  (     aaxx_get_user = 'LB'
                    AND ks.prs_kostensoort_upper LIKE 'NC%'                         --  LyondellBasell
                    AND ks.prs_kostensoort_upper <> 'NC DERDEN'
                    AND ks.prs_kostensoort_upper <> 'NC PROJ'
                  )
                  OR
                  (     aaxx_get_user = 'DBS'
                    AND ks.prs_kostensoort_upper IN (
                               'CV AFVAL REST',
                               'CV OND',
                               'CV GEB NIET PLAN',
                               'CV INSTAL NIET PLAN',
                               'CV TERR VERHARD',
                               'CV TERR NIET PL',
                               'CV OND TERR',
                               'CV TERR OVR',
                               'CV CONS REST',
                               'CV CONS SERV',
                               'CV CONS OVR',
                               'CV CONS AUT',
                               'CV BEWAK',
                               'CV PREV CAL',
                               'CV BEWAK OVR',
                               'CV SCH',
                               'CV SCH GLAS',
                               'CV SCH OVR',
                               'CV VGM',
                               'CV GROEN',
                               'CV EIG BOUW PL',
                               'CV EIG INST PL',
                               'NC PROJ',
                               'CVE INSTAL NIET PLAN',
                               'CVE GEB NIET PLAN')
                  )
                  OR
                  (     aaxx_get_user = 'DOW'
                    AND (    ks.prs_kostensoort_upper = 'COR VAR CATE COFFE'
                          OR ks.prs_kostensoort_upper = 'COR VAR IND CLO'
                          OR ks.prs_kostensoort_upper = 'COR VAR MAIL SERVICES'
                          OR ks.prs_kostensoort_upper = 'COR VAR VENDING'
                          OR ks.prs_kostensoort_upper = 'COR VAR MAIN HANDYMAN'
                          OR ks.prs_kostensoort_upper = 'COR VAR GEN TEN SERV'
                          OR ks.prs_kostensoort_upper = 'COR VAR HVAC'
                          OR ks.prs_kostensoort_upper = 'COR VAR CLEA BUILDING SAN'
                          OR ks.prs_kostensoort_upper = 'COR VAR CLEA VSR KMS')
                  )
                  OR
                  (     aaxx_get_user = 'DSM'
                    AND SUBSTR(ks.prs_kostensoort_upper,1,3) IN (
                                   'CV ',
                                   'CVE')
                  )
                  OR 
                  (     aaxx_get_user = 'NMM'
                    AND ks.prs_kostensoort_upper LIKE 'CV%'
                  )
                  OR
                  (     aaxx_get_user = 'SABIC'
                    AND c.cnt_contract_looptijd_van >= to_date ('20140101', 'yyyymmdd') --  Voor sabic geldt voor 2014 een ander mechanisme (AASA#28673)
                    AND ks.prs_kostensoort_upper LIKE 'CV %'
                    AND ks.prs_kostensoort_upper <> 'CV CHIP'
                    AND (    c.cnt_contract_looptijd_van >= to_date ('20150101', 'yyyymmdd') --  Voor sabic geldt voor 2015 een ander mechanisme (AASA#31618)
                          OR (      ks.prs_kostensoort_upper <> 'CV CONS REST'
                                AND ks.prs_kostensoort_upper <> 'CV CONS AUT'
                                AND ks.prs_kostensoort_upper <> 'CV SCH OVR'
                                AND ks.prs_kostensoort_upper <> 'CV DOC POST'
                                AND ks.prs_kostensoort_upper <> 'CV AFVAL REST'
                              )
                        )
                  )
                  OR
                  (     aaxx_get_user = 'VL'
                    AND c.cnt_contract_looptijd_van < to_date ('20160101', 'yyyymmdd') --  Voor VL geldt voor 2016 een ander mechanisme (AAVL#34856)
                    AND ks.prs_kostensoort_upper IN (
                                    'CV OND',
                                    'CV TERR OVR',
                                    'CV BEWAK OVR',
                                    'CV BOUW PLAN',
                                    'CV CONS REST',
                                    'CV CONS OVR',
                                    'CV SCH',
                                    'CV WP',
                                    'CV GEB NIET PLAN',
                                    'CV CONS SERV',
                                    'CV SCH GLAS',
                                    'CV KART',
                                    'CV INSTAL PLAN',
                                    'CV BEWAK',
                                    'CV VERH',
                                    'CV GROEN',
                                    'CV INSTAL NIET PLAN',
                                    'CV PREV CAL',
                                    'CV DOC POST',
                                    'CV BEW',
                                    'CV TERR VERHARD',
                                    'CV REC',
                                    'CV DOC REP',
                                    'CV VERV PERS',
                                    'CV OND TERR',
                                    'CV ACHT OND',
                                    'NC ACHT OND',
                                    'CV EIG INST PL',
                                    'CV EIG BOUW PL',
                                    'NC INV BOUW',
                                    'NC INV WP',
                                    'NC INV INST')
                  )
                  OR
                  (     aaxx_get_user = 'ZCN'
                    AND (   aaxx_get_top_dep_code(k.prs_kostenplaats_nr) = 'SN'
                         OR aaxx_get_top_dep_code(k.prs_kostenplaats_nr) = 'KL')
                  )
                  OR
                  (     aaxx_get_user = 'ZKHM'
                    AND (   aaxx_get_top_dep_code(k.prs_kostenplaats_nr) = 'SN'
                         OR aaxx_get_top_dep_code(k.prs_kostenplaats_nr) = 'KL')
                  )
                );
   END IF;
   -- voeg bestelorders toe aan de verkoopbuffer
   INSERT INTO fin_verkoopfactuur
   (
    -- module, export_datum, prs_kostenplaats_nr, debiteur, prs_kostensoort_oms, prs_kostensoort_opmerking, prs_kostensoort_refcode, prs_kostensoortgrp_oms, omschrijving, bedrag, btw, fin_btwtabelwaarde_code, opdr_jaar, exact_code_gebouw, groepering, subregelvolgorde
       fin_verkoopfactuur_id, fin_verkoopfactuur_xmlnode, fin_verkoopfactuur_refkey, fin_verkoopfactuur_aanmaak, prs_kostenplaats_nr, prs_debiteur_naam, prs_bedrijf_key, prs_kostensoort_oms, prs_kostensoort_opmerking, prs_kostensoort_refcode, prs_kostensoortgrp_oms, fin_verkoopfactuur_omschr, fin_verkoopfactuur_bedrag, fin_btwtabelwaarde_code, fin_verkoopfactuur_maand, fin_verkoopfactuur_c1, fin_verkoopfactuur_c2, fin_verkoopfactuur_c3, fin_verkoopfactuur_n1
   )
    SELECT substr(to_char(v_logdate, 'dd-mm-yyyy') || ' - ' || bestel.bes_bestelopdr_id, 1,30 ),
           'bestelopdr',
           bestel.bes_bestelopdr_key,
           v_logdate,
           DECODE (aaxx_get_user,
                   'AH',  aaxx_get_top_dep_code(k.prs_kostenplaats_nr),
                   'DOW', '911791',
                   'DSM', DECODE (SUBSTR(ks.prs_kostensoort_upper,1,3) , 'CV ', '520',
                                                                         'CVE', aaxx_get_top_dep_code(k.prs_kostenplaats_nr)),
                   'SITECH', aaxx_get_dep_code (k.prs_kostenplaats_nr),
                   'LB', exact_code,
                   'VL',  aaxx_get_top_dep_code(k.prs_kostenplaats_nr),
                   SUBSTR (prs_kostenplaats_nr, 1, 30)),
           DECODE (aaxx_get_user,
                   'AH',  aaxx_get_top_dep_code(k.prs_kostenplaats_nr),
                   'DOW', '911791',
                   'DSM', DECODE (SUBSTR(ks.prs_kostensoort_upper,1,3) , 'CV ', '520',
                                                                         'CVE', aaxx_get_top_dep_code(k.prs_kostenplaats_nr)),
                   'SITECH', aaxx_get_dep_code (k.prs_kostenplaats_nr),
                   'LB',  DECODE(g.alg_locatie_key,
                                 1, '911928',   -- Worldwide Headquarters
                                 2, '911927',   -- Maasvlakte
                                 3, '911930',   -- Botlek
                                 4, '911929'    -- Moerdijk
                                ),
                   'VL',  aaxx_get_top_dep_code(k.prs_kostenplaats_nr),
                   'ZCN', '913815',
                   'ZKHM', '913816',
                   SUBSTR (prs_kostenplaats_nr, 1, 30)),
           bestel.prs_bedrijf_key,
           ks.prs_kostensoort_oms
           || DECODE (TO_CHAR (opdr_datum, 'YYYY'),
                      TO_CHAR (TO_NUMBER (TO_CHAR (SYSDATE, 'yyyy')) - 1), ' VJ',
                      ''),
           ks.prs_kostensoort_opmerking,
           vk_prs_kostensoort_refcode,
           prs_kostensoortgrp_oms || DECODE (aaxx_get_user, 'DSM', DECODE (SUBSTR(ks.prs_kostensoort_upper,1,3) , 'CV ', ' ' || l.alg_locatie_code),
                                                            'LB', ' ' || exact_code,
                                                            'SABIC', ' ' || k.prs_kostenplaats_nr,
                                                            'ZCN', DECODE(aaxx_get_top_dep_code(k.prs_kostenplaats_nr), 'SN', 'Servicekosten',
                                                                                                                        'KL', 'Klantvragen',
                                                                                                                        ''),
                                                            'ZKHM', DECODE(aaxx_get_top_dep_code(k.prs_kostenplaats_nr), 'SN', 'Servicekosten',
                                                                                                                        'KL', 'Klantvragen',
                                                                                                                        '')
                                            ),
           bestel.bes_bestelopdr_id || ' ' || d.ins_discipline_omschrijving
              omschrijving,
           fin_factuurregel_totaal,
           DECODE (aaxx_get_user, 'SITECH', 5,
                                  fin_btwtabelwaarde_code) fin_btwtabelwaarde_code,
           TO_CHAR (opdr_datum, 'YYYY'),
           DECODE (aaxx_get_user,
                  'LB', alg_locatie_code,
                  COALESCE(exact_code, alg_gebouw_code)),
           DECODE (aaxx_get_user,
                   'AH',  ksg.prs_kostensoortgrp_oms,
                   'DSM', DECODE (SUBSTR(ks.prs_kostensoort_upper,1,3) , 'CV ', ksg.prs_kostensoortgrp_oms || ' ' || l.alg_locatie_code,
                                                                         'CVE', aaxx_get_top_dep_code(k.prs_kostenplaats_nr)),
                   'DOW', DECODE(SUBSTR(ks.prs_kostensoort_upper, 1,5), 'NC P ', 'NCP', 'NC/CV') ||
                          substr(aaxx_get_top_dep_code(k.prs_kostenplaats_nr),1,6),
                   'ZCN', aaxx_get_top_dep_code(k.prs_kostenplaats_nr),
                   'ZKHM', aaxx_get_top_dep_code(k.prs_kostenplaats_nr),
                   '') groepering, -- c2
           DECODE (aaxx_get_user, 'LB', prs_kostensoort_oms || '1', '') subregelvolgorde, -- c3
           l.alg_locatie_key   -- N1
      FROM (  SELECT *
                FROM aaxx_v_bestelgegevens
            GROUP BY bes_bestelopdr_key,
                     bes_bestelopdr_id,
                     ins_discipline_key,
                     mld_adres_key_lev,
                     bes_bestelling_leverdatum,
                     prs_bedrijf_key) bestel,
           mld_adres ad,
           prs_kostenplaats k,
           ins_tab_discipline d,
           prs_kostensoort ks,
           prs_kostensoortgrp ksg,
           fin_factuur f,
           alg_gebouw g,
           alg_locatie l,
           aaxx_v_exact_code_gebouw exact,
           (  SELECT fin_factuur_key,
                     bes_bestelopdr_key,
                     prs_kostenplaats_key,
                     prs_kostensoort_key,
                     vk_prs_kostensoort_refcode,
                     fin_factuur_boekmaand,
                     opdr_datum,
                     fin_factuur_datum,
                     aaxx_get_verkoop_btw_code (fin_btwtabelwaarde_key) fin_btwtabelwaarde_code,
                     sum(fin_factuurregel_totaal) fin_factuurregel_totaal
                FROM aaxx_v_factuur_gegevens
               WHERE fin_factuur_statuses_key = 7
                     AND bes_bestelopdr_key IS NOT NULL
            GROUP BY fin_factuur_key,
                     bes_bestelopdr_key,
                     prs_kostenplaats_key,
                     prs_kostensoort_key,
                     fin_factuur_boekmaand,
                     fin_btwtabelwaarde_key,
                     opdr_datum,
                     fin_factuur_datum,
                     vk_prs_kostensoort_refcode,
                     fin_btwtabelwaarde_code) fg
     WHERE     fg.bes_bestelopdr_key = bestel.bes_bestelopdr_key
           AND fg.prs_kostenplaats_key = k.prs_kostenplaats_key(+)
           AND bestel.ins_discipline_key = d.ins_discipline_key
           AND bestel.mld_adres_key_lev = ad.mld_adres_key(+)
           AND ad.mld_adres_gebouw_ruimte = g.alg_gebouw_code(+)
           AND g.alg_gebouw_key = exact.alg_gebouw_key(+)
           AND g.alg_locatie_key = l.alg_locatie_key
           AND fg.fin_factuur_key = f.fin_factuur_key
           AND fg.prs_kostensoort_key = ks.prs_kostensoort_key(+)
           AND ks.prs_kostensoortgrp_key = ksg.prs_kostensoortgrp_key(+)
           AND (  (     aaxx_get_user = 'AH'
                    AND ks.prs_kostensoort_upper LIKE 'CV%'
                  )
                  OR
                  (     aaxx_get_user = 'SITECH'
                    AND ks.prs_kostensoort_upper LIKE 'AE%'                         --  SITECH
                  )
                  OR
                  (     aaxx_get_user = 'DSM'
                    AND SUBSTR(ks.prs_kostensoort_upper,1,3) IN (
                                  'CV ',
                                  'CVE')
                  )
                  OR
                  (     aaxx_get_user = 'LB'
                    AND ks.prs_kostensoort_upper LIKE 'NC%'                         --  LyondellBasell
                    AND ks.prs_kostensoort_upper <> 'NC DERDEN'
                    AND ks.prs_kostensoort_upper <> 'NC PROJ'
                  )
                  OR
                  (     aaxx_get_user = 'VL'
                    AND (  (    bes_bestelling_leverdatum < to_date('20160101', 'yyyymmdd') --  Voor VL geldt voor 2016 een ander mechanisme (AAVL#34856)
                            AND ks.prs_kostensoort_upper LIKE 'CV %')
                           OR
                           (    bes_bestelling_leverdatum >= to_date('20160101', 'yyyymmdd') --  Voor VL geldt voor 2016 een ander mechanisme (AAVL#34856)
                            AND ks.prs_kostensoort_upper LIKE 'CVE %')
                        )
                  )
                  OR 
                  (     aaxx_get_user = 'ZCN'
                    AND (   aaxx_get_top_dep_code(k.prs_kostenplaats_nr) = 'SN'
                         OR aaxx_get_top_dep_code(k.prs_kostenplaats_nr) = 'KL')
                  )
                  OR 
                  (     aaxx_get_user = 'ZKHM'
                    AND (   aaxx_get_top_dep_code(k.prs_kostenplaats_nr) = 'SN'
                         OR aaxx_get_top_dep_code(k.prs_kostenplaats_nr) = 'KL')
                  )
               );

   -- bereken per klant de FEE over de omzet.
   IF aaxx_get_user = 'DBS' THEN
      INSERT INTO fin_verkoopfactuur
      (
      -- module, export_datum, prs_kostenplaats_nr, debiteur, prs_kostensoort_oms, prs_kostensoort_opmerking, prs_kostensoort_refcode, prs_kostensoortgrp_oms, omschrijving, bedrag, btw, fin_btwtabelwaarde_code, opdr_jaar, exact_code_gebouw, groepering, subregelvolgorde
         fin_verkoopfactuur_id, fin_verkoopfactuur_xmlnode, fin_verkoopfactuur_refkey, fin_verkoopfactuur_aanmaak, prs_kostenplaats_nr, prs_debiteur_naam, prs_kostensoort_oms, prs_kostensoort_opmerking, prs_kostensoort_refcode, prs_kostensoortgrp_oms, fin_verkoopfactuur_omschr, fin_verkoopfactuur_bedrag, fin_btwtabelwaarde_code, fin_verkoopfactuur_maand, fin_verkoopfactuur_c1, fin_verkoopfactuur_c2, fin_verkoopfactuur_c3, fin_verkoopfactuur_c4
      )
      SELECT fin_verkoopfactuur_id, fin_verkoopfactuur_xmlnode, fin_verkoopfactuur_refkey, fin_verkoopfactuur_aanmaak, '', prs_debiteur_naam, 'FEE' || DECODE (INSTR(prs_kostensoort_oms, ' VJ'), 0 , '', ' VJ'), '', '8110550', prs_kostensoortgrp_oms, 'FEE' , ROUND(fin_verkoopfactuur_bedrag * ma.marge, 2), fin_btwtabelwaarde_code, fin_verkoopfactuur_maand, 'X', fin_verkoopfactuur_c2, 'X', ok.ordernummer
        FROM fin_verkoopfactuur v, mld_opdr o,
             (SELECT km.mld_melding_key, fac.safe_to_number (fac_usrdata_code) marge
                FROM fac_usrdata ud,
                     mld_kenmerkmelding km,
                     mld_kenmerk k,
                     mld_srtkenmerk sk
               WHERE sk.mld_srtkenmerk_omschrijving = 'Marge'
                 AND sk.mld_srtkenmerk_key = k.mld_srtkenmerk_key
                 AND k.mld_kenmerk_key = km.mld_kenmerk_key
                 AND fac.safe_to_number (mld_kenmerkmelding_waarde) = fac_usrdata_key) ma,
             (SELECT km.mld_melding_key, mld_kenmerkmelding_waarde ordernummer
                FROM mld_kenmerkmelding km,
                     mld_kenmerk k,
                     mld_srtkenmerk sk
               WHERE sk.mld_srtkenmerk_omschrijving = 'Ordernummer klant'
                 AND sk.mld_srtkenmerk_key = k.mld_srtkenmerk_key
                 AND k.mld_kenmerk_key = km.mld_kenmerk_key) ok
       WHERE fin_verkoopfactuur_aanmaak = v_logdate
         AND fin_verkoopfactuur_xmlnode = 'opdracht'
         AND fin_verkoopfactuur_refkey = o.mld_opdr_key
         AND o.mld_melding_key = ma.mld_melding_key
         AND o.mld_melding_key = ok.mld_melding_key
         AND (v.prs_kostensoort_oms = 'NC PROJ' OR v.prs_kostensoort_oms LIKE 'CVE%');
      -- GROUP BY fin_verkoopfactuur_id, fin_verkoopfactuur_xmlnode, fin_verkoopfactuur_refkey, fin_verkoopfactuur_aanmaak, prs_debiteur_naam, DECODE (INSTR(prs_kostensoort_oms, ' VJ'), 0 , '', ' VJ'), prs_kostensoortgrp_oms, fin_btwtabelwaarde_code, fin_verkoopfactuur_maand, prs_debiteur_naam || 'FEE', fin_verkoopfactuur_c2, ma.marge;
   END IF;

   IF aaxx_get_user = 'DOW' THEN
      INSERT INTO fin_verkoopfactuur
      (
      -- module, export_datum, prs_kostenplaats_nr, debiteur, prs_kostensoort_oms, prs_kostensoort_opmerking, prs_kostensoort_refcode, prs_kostensoortgrp_oms, omschrijving, bedrag, btw, fin_btwtabelwaarde_code, opdr_jaar, exact_code_gebouw, groepering, subregelvolgorde
         fin_verkoopfactuur_id, fin_verkoopfactuur_xmlnode, fin_verkoopfactuur_refkey, fin_verkoopfactuur_aanmaak, prs_kostenplaats_nr, prs_debiteur_naam, prs_kostensoort_oms, prs_kostensoort_opmerking, prs_kostensoort_refcode, prs_kostensoortgrp_oms, fin_verkoopfactuur_omschr, fin_verkoopfactuur_bedrag, fin_btwtabelwaarde_code, fin_verkoopfactuur_maand, fin_verkoopfactuur_c1, fin_verkoopfactuur_c2, fin_verkoopfactuur_c3
      )
      SELECT fin_verkoopfactuur_id, fin_verkoopfactuur_xmlnode, fin_verkoopfactuur_refkey, fin_verkoopfactuur_aanmaak, '', prs_debiteur_naam, 'BASE FEE' || DECODE (INSTR(prs_kostensoort_oms, ' VJ'), 0 , '', ' VJ'), '', '8210511', prs_kostensoortgrp_oms, 'BASE FEE' , ROUND(SUM(fin_verkoopfactuur_bedrag) * 0.04, 2), fin_btwtabelwaarde_code, fin_verkoopfactuur_maand, 'X', fin_verkoopfactuur_c2, 'X'
        FROM fin_verkoopfactuur v
       WHERE fin_verkoopfactuur_aanmaak = v_logdate
       GROUP BY fin_verkoopfactuur_id, fin_verkoopfactuur_xmlnode, fin_verkoopfactuur_refkey, fin_verkoopfactuur_aanmaak, prs_debiteur_naam, DECODE (INSTR(prs_kostensoort_oms, ' VJ'), 0 , '', ' VJ'), prs_kostensoortgrp_oms, fin_btwtabelwaarde_code, fin_verkoopfactuur_maand, fin_verkoopfactuur_c2;
   END IF;

   IF aaxx_get_user = 'DSM' THEN
      -- CVE 
      -- Fee: De fee over dit CVE gedeelte wordt apart doorbelast aan de klant en moet in een separate factuur worden gezet. 
      -- Deze factuur moet standaard naar debiteurencode 520. 
      -- Per factuur dient een fee berekend te worden van 0% of 3%. 
      -- Hierbij geldt als uitgangspunt dat voor alle MA contracten 0% geldt, en voor alle CP 3%. 
      -- Deze fee dient als totaalbedrag geboekt te worden op 1 regel per BTW percentage op de kostensoort FEE.
      -- Extra verzoek hierover is om wel per locatie één regel te maken (dus Sittard, Urmond, Campus,etc). 
      -- Misschien dat we dit kunnen doen door artikelcode FEE te gebruiken, maar omschrijving Fee Sittard, Fee Urmond, etc?
      INSERT INTO fin_verkoopfactuur
      (
         fin_verkoopfactuur_id, fin_verkoopfactuur_xmlnode, fin_verkoopfactuur_refkey, fin_verkoopfactuur_aanmaak, prs_kostenplaats_nr, prs_debiteur_naam, prs_kostensoort_oms, prs_kostensoort_opmerking, prs_kostensoort_refcode, prs_kostensoortgrp_oms, fin_verkoopfactuur_omschr, fin_verkoopfactuur_bedrag, fin_btwtabelwaarde_code, fin_verkoopfactuur_maand, fin_verkoopfactuur_c1, fin_verkoopfactuur_c2, fin_verkoopfactuur_c3
      )
      SELECT fin_verkoopfactuur_id, fin_verkoopfactuur_xmlnode, fin_verkoopfactuur_refkey, fin_verkoopfactuur_aanmaak, '', '520', 'CVE FEE'  || DECODE (INSTR(prs_kostensoort_oms, ' VJ'), 0 , '', ' VJ'), '', '8210511', prs_kostensoortgrp_oms, 'FEE ' || l.alg_locatie_code, SUM(ROUND(fin_verkoopfactuur_bedrag * 0.03, 2)), fin_btwtabelwaarde_code, fin_verkoopfactuur_maand, 'X', 'FEE' || '520', 'X'
        FROM fin_verkoopfactuur v, prs_relatietype r, alg_locatie l, prs_bedrijf b
       WHERE fin_verkoopfactuur_aanmaak = v_logdate
         AND v.prs_bedrijf_key = b.prs_bedrijf_key
         AND b.prs_relatietype_key = r.prs_relatietype_key
         AND r.prs_relatietype_omschrijving = 'Contracting party'
         AND v.fin_verkoopfactuur_n1 = l.alg_locatie_key
         AND prs_kostensoort_oms LIKE 'CVE%'
       GROUP BY fin_verkoopfactuur_id, fin_verkoopfactuur_xmlnode, fin_verkoopfactuur_refkey, fin_verkoopfactuur_aanmaak, l.alg_locatie_code, prs_debiteur_naam, DECODE (INSTR(prs_kostensoort_oms, ' VJ'), 0 , '', ' VJ'), prs_kostensoortgrp_oms, fin_btwtabelwaarde_code, fin_verkoopfactuur_maand, fin_verkoopfactuur_c2;

      -- CV 
      -- Fee: Er wordt een fee van 0% of 3% berekend over deze factuur. 
      -- Het percentage is afhankelijk van het contracttype van de leverancier. 
      -- Bij alle Managing Agent (MA) geldt 0%, voor alle Contracting Party (CP) geldt 3%.  
      -- Deze fee dient als totaalbedrag geboekt te worden op 1 regel per BTW percentage op de kostensoort FEE.
      INSERT INTO fin_verkoopfactuur
      (
         fin_verkoopfactuur_id, fin_verkoopfactuur_xmlnode, fin_verkoopfactuur_refkey, fin_verkoopfactuur_aanmaak, prs_kostenplaats_nr, prs_debiteur_naam, prs_kostensoort_oms, prs_kostensoort_opmerking, prs_kostensoort_refcode, prs_kostensoortgrp_oms, fin_verkoopfactuur_omschr, fin_verkoopfactuur_bedrag, fin_btwtabelwaarde_code, fin_verkoopfactuur_maand, fin_verkoopfactuur_c1, fin_verkoopfactuur_c2, fin_verkoopfactuur_c3
      )
      SELECT fin_verkoopfactuur_id, fin_verkoopfactuur_xmlnode, fin_verkoopfactuur_refkey, fin_verkoopfactuur_aanmaak, '', '520', 'CV FEE' || DECODE (INSTR(prs_kostensoort_oms, ' VJ'), 0 , '', ' VJ'), '', '8210511', prs_kostensoortgrp_oms, 'FEE' , SUM(ROUND(fin_verkoopfactuur_bedrag * 0.03, 2)), fin_btwtabelwaarde_code, fin_verkoopfactuur_maand, 'X', fin_verkoopfactuur_c2, 'X'
        FROM fin_verkoopfactuur v, prs_relatietype r, alg_locatie l, prs_bedrijf b
       WHERE fin_verkoopfactuur_aanmaak = v_logdate
         AND v.prs_bedrijf_key = b.prs_bedrijf_key
         AND b.prs_relatietype_key = r.prs_relatietype_key
         AND r.prs_relatietype_omschrijving = 'Contracting party'
         AND prs_kostensoort_oms LIKE 'CV %'
       GROUP BY fin_verkoopfactuur_id, fin_verkoopfactuur_xmlnode, fin_verkoopfactuur_refkey, fin_verkoopfactuur_aanmaak, prs_debiteur_naam, DECODE (INSTR(prs_kostensoort_oms, ' VJ'), 0 , '', ' VJ'), prs_kostensoortgrp_oms, fin_btwtabelwaarde_code, fin_verkoopfactuur_maand, fin_verkoopfactuur_c2;
   END IF;

   IF aaxx_get_user = 'ESSENT' THEN
      INSERT INTO fin_verkoopfactuur
      (
      -- module, export_datum, prs_kostenplaats_nr, debiteur, prs_kostensoort_oms, prs_kostensoort_opmerking, prs_kostensoort_refcode, prs_kostensoortgrp_oms, omschrijving, bedrag, btw, fin_btwtabelwaarde_code, opdr_jaar, exact_code_gebouw, groepering, subregelvolgorde
         fin_verkoopfactuur_id, fin_verkoopfactuur_xmlnode, fin_verkoopfactuur_refkey, fin_verkoopfactuur_aanmaak, prs_kostenplaats_nr, prs_debiteur_naam, prs_kostensoort_oms, prs_kostensoort_opmerking, prs_kostensoort_refcode, prs_kostensoortgrp_oms, fin_verkoopfactuur_omschr, fin_verkoopfactuur_bedrag, fin_btwtabelwaarde_code, fin_verkoopfactuur_maand, fin_verkoopfactuur_c1, fin_verkoopfactuur_c2, fin_verkoopfactuur_c3
      )
      SELECT fin_verkoopfactuur_id, fin_verkoopfactuur_xmlnode, fin_verkoopfactuur_refkey, fin_verkoopfactuur_aanmaak, prs_kostenplaats_nr, prs_debiteur_naam, 'BASE FEE ' || to_char(u.uplift) || '%' || DECODE (INSTR(v.prs_kostensoort_oms, ' VJ'), 0 , '', ' VJ'), '', '8210511', prs_kostensoortgrp_oms, 'BASE FEE ' || TO_CHAR(u.uplift) || '%' , ROUND(SUM(fin_verkoopfactuur_bedrag) * (u.uplift/100),2), 5, fin_verkoopfactuur_maand, 'X', 'X', u.uplift || 'X'
        FROM fin_verkoopfactuur v, aaxx_imp_uplift u
       WHERE REPLACE(v.prs_kostensoort_oms, ' VJ', '') = u.prs_kostensoort_oms
         AND fin_verkoopfactuur_aanmaak = v_logdate
       GROUP BY fin_verkoopfactuur_id, fin_verkoopfactuur_xmlnode, fin_verkoopfactuur_refkey, fin_verkoopfactuur_aanmaak, prs_kostenplaats_nr, prs_debiteur_naam, instr(v.prs_kostensoort_oms, ' VJ'), prs_kostensoortgrp_oms, uplift, fin_verkoopfactuur_maand;
   END IF;

   IF aaxx_get_user = 'LB' THEN
      INSERT INTO fin_verkoopfactuur
      (
      -- module, export_datum, prs_kostenplaats_nr, debiteur, prs_kostensoort_oms, prs_kostensoort_opmerking, prs_kostensoort_refcode, prs_kostensoortgrp_oms, omschrijving, bedrag, btw, fin_btwtabelwaarde_code, opdr_jaar, exact_code_gebouw, groepering, subregelvolgorde
         fin_verkoopfactuur_id, fin_verkoopfactuur_xmlnode, fin_verkoopfactuur_refkey, fin_verkoopfactuur_aanmaak, prs_kostenplaats_nr, prs_debiteur_naam, prs_kostensoort_oms, prs_kostensoort_opmerking, prs_kostensoort_refcode, prs_kostensoortgrp_oms, fin_verkoopfactuur_omschr, fin_verkoopfactuur_bedrag, fin_btwtabelwaarde_code, fin_verkoopfactuur_maand, fin_verkoopfactuur_c1, fin_verkoopfactuur_c2, fin_verkoopfactuur_c3
      )
      SELECT fin_verkoopfactuur_id, fin_verkoopfactuur_xmlnode, fin_verkoopfactuur_refkey, fin_verkoopfactuur_aanmaak, prs_kostenplaats_nr, prs_debiteur_naam, 'BASE FEE' || DECODE (instr(prs_kostensoort_oms, ' VJ'), 0 , '', ' VJ'), prs_kostensoort_opmerking, decode(substr(prs_kostensoort_refcode, 1,1), '8', '8210511', '1033305'), prs_kostensoortgrp_oms, 'FEE ' || prs_kostensoort_oms, ROUND(SUM(fin_verkoopfactuur_bedrag)*0.075,2), fin_btwtabelwaarde_code, fin_verkoopfactuur_maand, 'X', 'X',  prs_kostensoort_oms || '2'
        FROM fin_verkoopfactuur
       WHERE fin_verkoopfactuur_aanmaak = v_logdate
       GROUP BY fin_verkoopfactuur_id, fin_verkoopfactuur_xmlnode, fin_verkoopfactuur_refkey, fin_verkoopfactuur_aanmaak, prs_kostenplaats_nr, prs_debiteur_naam, prs_kostensoort_oms, prs_kostensoort_opmerking, prs_kostensoortgrp_oms, fin_btwtabelwaarde_code, fin_verkoopfactuur_maand, decode(substr(prs_kostensoort_refcode, 1,1), '8', '8210511', '1033305');
   END IF;

   -- NMM
   -- Pas het bedrag van de bewaking aan. Opdrachten aan stdmelding 1121 moeten een bedrag krijgen van het aantal uren uit de opdracht maal het uurtarief dat
   -- In een eigentabel opgeslagen wordt. De entries in de eigen tabel kunnen verschillende tarieven met een vervaldatum bevatten.
   IF aaxx_get_user = 'NMM' THEN
      UPDATE fin_verkoopfactuur vk
         SET fin_verkoopfactuur_bedrag = (SELECT o.mld_opdr_uren * ud.fac_usrdata_prijs
                                            FROM mld_opdr o, fac_usrdata ud
                                           WHERE vk.fin_verkoopfactuur_refkey = o.mld_opdr_key
                                             AND vk.fin_verkoopfactuur_xmlnode = 'opdracht'
                                             AND ud.fac_usrtab_key = DECODE (TO_CHAR (COALESCE(mld_opdr_plandatum, mld_opdr_datumbegin), 'D'), 1, 141, 7, 141, 122)   -- Uurtarief bewaking (141 tabel weekend, 122 tabel weekdagen)
                                             AND ud.fac_usrdata_verwijder IS NULL
                                             AND o.mld_opdr_datumbegin < COALESCE(ud.fac_usrdata_vervaldatum, SYSDATE)
                                             AND NOT EXISTS (SELECT ud2.fac_usrdata_key
                                                               FROM fac_usrdata ud2
                                                              WHERE ud2.fac_usrtab_key = DECODE (TO_CHAR (COALESCE(mld_opdr_plandatum, mld_opdr_datumbegin), 'D'), 1, 141, 7, 141, 122)   -- Uurtarief bewaking (141 tabel weekend, 122 tabel weekdagen)
                                                                AND o.mld_opdr_datumbegin < COALESCE(ud2.fac_usrdata_vervaldatum, SYSDATE)
                                                                AND ud2.fac_usrdata_verwijder IS NULL
                                                                AND COALESCE(ud2.fac_usrdata_vervaldatum, SYSDATE) <
                                                                     COALESCE(ud.fac_usrdata_vervaldatum, SYSDATE)
                                                              )
                                         )
       WHERE EXISTS (SELECT mld_opdr_key
                       FROM mld_opdr o, mld_melding m
                      WHERE vk.fin_verkoopfactuur_refkey = o.mld_opdr_key
                        AND vk.fin_verkoopfactuur_xmlnode = 'opdracht'
                        AND o.mld_melding_key = m.mld_melding_key
                        AND m.mld_stdmelding_key = 1121 -- Aanvraag beveiligingsdienst(en) tbv evenementen
                    )
         AND fin_verkoopfactuur_aanmaak = v_logdate;
   END IF;

   IF aaxx_get_user = 'RABO' THEN  --  RABO#37283
      INSERT INTO fin_verkoopfactuur
      (
          fin_verkoopfactuur_id, fin_verkoopfactuur_xmlnode, fin_verkoopfactuur_refkey, fin_verkoopfactuur_aanmaak, prs_kostenplaats_nr, prs_debiteur_naam, prs_kostensoort_oms, prs_kostensoort_opmerking, prs_kostensoort_refcode, prs_kostensoortgrp_oms, fin_verkoopfactuur_omschr, fin_verkoopfactuur_bedrag, fin_btwtabelwaarde_code, fin_verkoopfactuur_maand, fin_verkoopfactuur_c1, fin_verkoopfactuur_c2, fin_verkoopfactuur_c3
      )
      SELECT fin_verkoopfactuur_id, fin_verkoopfactuur_xmlnode, fin_verkoopfactuur_refkey, fin_verkoopfactuur_aanmaak, '', prs_debiteur_naam, 'FEE' || DECODE (INSTR(prs_kostensoort_oms, ' VJ'), 0 , '', ' VJ'), '', '8210511', prs_kostensoortgrp_oms, 'FEE' , ROUND(SUM(fin_verkoopfactuur_bedrag) * fac_usrdata_prijs / 100, 2), fin_btwtabelwaarde_code, fin_verkoopfactuur_maand, 'X', fin_verkoopfactuur_c2, 'X'
        FROM fin_verkoopfactuur v,
             mld_opdr o,
             mld_melding m,
             alg_v_allonroerendgoed aog,
             alg_gebouw g,
             fac_usrdata ud
       WHERE v.fin_verkoopfactuur_refkey = o.mld_opdr_key
         AND o.mld_melding_key = m.mld_melding_key
         AND m.mld_alg_onroerendgoed_keys = aog.alg_onroerendgoed_keys
         AND aog.alg_gebouw_key = g.alg_gebouw_key
         AND g.alg_gebouw_code =
                SUBSTR (fac_usrdata_code,
                        1,
                        INSTR (fac_usrdata_code || ' ', ' ') - 1)
         AND fac_usrtab_key = 81
         AND o.mld_opdr_datumbegin < COALESCE (fac_usrdata_vervaldatum, SYSDATE)
         AND NOT EXISTS
                (SELECT fac_usrdata_key
                   FROM fac_usrdata ud2
                  WHERE SUBSTR (ud2.fac_usrdata_code,
                                1,
                                INSTR (ud2.fac_usrdata_code || ' ', ' ') - 1) =
                           SUBSTR (ud.fac_usrdata_code,
                                   1,
                                   INSTR (ud.fac_usrdata_code || ' ', ' ') - 1)
                    AND ud2.fac_usrtab_key = ud.fac_usrtab_key
                    AND ud2.fac_usrdata_key <> ud.fac_usrdata_key
                    AND COALESCE (ud2.fac_usrdata_vervaldatum, SYSDATE) <
                           COALESCE (ud.fac_usrdata_vervaldatum, SYSDATE)
                    AND o.mld_opdr_datumbegin <
                           COALESCE (ud2.fac_usrdata_vervaldatum, SYSDATE))
         AND fin_verkoopfactuur_aanmaak = v_logdate
      GROUP BY fin_verkoopfactuur_id, fin_verkoopfactuur_xmlnode, fin_verkoopfactuur_refkey, fin_verkoopfactuur_aanmaak, prs_debiteur_naam, prs_kostensoort_oms, prs_kostensoortgrp_oms, fac_usrdata_prijs, fin_btwtabelwaarde_code, fin_verkoopfactuur_maand, fin_verkoopfactuur_c2, 'X';
   END IF;

   IF aaxx_get_user = 'VL' THEN
      INSERT INTO fin_verkoopfactuur
      (
      -- module, export_datum, prs_kostenplaats_nr, debiteur, prs_kostensoort_oms, prs_kostensoort_opmerking, prs_kostensoort_refcode, prs_kostensoortgrp_oms, omschrijving, bedrag, btw, fin_btwtabelwaarde_code, opdr_jaar, exact_code_gebouw, groepering, subregelvolgorde
         fin_verkoopfactuur_id, fin_verkoopfactuur_xmlnode, fin_verkoopfactuur_refkey, fin_verkoopfactuur_aanmaak, prs_kostenplaats_nr, prs_debiteur_naam, prs_kostensoort_oms, prs_kostensoort_opmerking, prs_kostensoort_refcode, prs_kostensoortgrp_oms, fin_verkoopfactuur_omschr, fin_verkoopfactuur_bedrag, fin_btwtabelwaarde_code, fin_verkoopfactuur_maand, fin_verkoopfactuur_c1, fin_verkoopfactuur_c2, fin_verkoopfactuur_c3
      )
      SELECT fin_verkoopfactuur_id, fin_verkoopfactuur_xmlnode, fin_verkoopfactuur_refkey, fin_verkoopfactuur_aanmaak, prs_kostenplaats_nr, prs_debiteur_naam, 'FEE' || DECODE (INSTR(prs_kostensoort_oms, ' VJ'), 0 , '', ' VJ'), prs_kostensoort_opmerking, '8210513', prs_kostensoortgrp_oms, 'FEE', ROUND(fin_verkoopfactuur_bedrag*0.025,2), fin_btwtabelwaarde_code, fin_verkoopfactuur_maand, 'X', 'X', 'X'
        FROM fin_verkoopfactuur
       WHERE     prs_kostensoort_oms = 'NC ACHT OND'
             AND fin_verkoopfactuur_aanmaak = v_logdate;
   END IF;

   FOR rec1 IN c_bes
   LOOP
      BEGIN
        -- indien nog niet afgemeld, dan maar even afmelden.
        IF rec1.bes_bestelopdr_status = 3 THEN -- in behandeling
           UPDATE bes_bestelopdr
              SET bes_bestelopdr_status = 4
            WHERE bes_bestelopdr_key= rec1.bes_bestelopdr_key
              AND bes_bestelopdr_status = 3;
        END IF;

        IF rec1.bes_bestelopdr_status = 5    -- bevestigd
          OR rec1.bes_bestelopdr_status = 4  -- in bestelling
          OR rec1.bes_bestelopdr_status = 3 THEN

          UPDATE bes_bestelopdr_item B
             SET bes_bestelopdr_item_aantalontv = COALESCE(bes_bestelopdr_item_aantal, 0),
                 bes_bestelopdr_item_ontvangen = SYSDATE
           WHERE b.bes_bestelopdr_key = rec1.bes_bestelopdr_key;

          UPDATE bes_bestelling_item bi
             SET bes_bestelling_item_aantalontv = COALESCE(bes_bestelling_item_aantal, 0)
           WHERE EXISTS (SELECT bes_bestelopdr_key
                           FROM bes_bestelopdr_item boi
                          WHERE bi.bes_bestelopdr_item_key = boi.bes_bestelopdr_item_key
                            AND bes_bestelopdr_key = rec1.bes_bestelopdr_key);

          SELECT distinct bes_bestelling_key
            INTO v_bestelling_key
            FROM bes_bestelling_item bi, bes_bestelopdr_item boi
           WHERE bi.bes_bestelopdr_item_key = boi.bes_bestelopdr_item_key
             AND bes_bestelopdr_key = rec1.bes_bestelopdr_key;

          bes.updatebestelopdrstatus(rec1.bes_bestelopdr_key, v_aanvrager);
		 			bes.updatebestellingstatus(v_bestelling_key, v_aanvrager);

        END IF;
      END;
   END LOOP;


   FOR rec1 IN c_opdr
   LOOP
      BEGIN
        -- indien nog niet afgemeld, dan maar even afmelden.
        IF rec1.mld_statusopdr_key <> 6 AND rec1.mld_statusopdr_key <> 7 AND rec1.mld_statusopdr_key <> 9 THEN
          mld.setopdrachtstatus (rec1.mld_opdr_key, 6, v_aanvrager);
          mld.setopdrachtstatus (rec1.mld_opdr_key, 9, v_aanvrager);
        END IF;

        UPDATE mld_opdr o
           SET mld_opdr_kosten   =
                (SELECT SUM (fin_factuurregel_totaal)
                   FROM aaxx_v_aanwezigfactuur f
                      , fin_factuurregel fr
                  WHERE f.fin_factuur_key = fr.fin_factuur_key
                    AND f.mld_opdr_key = o.mld_opdr_key
                    AND f.fin_factuur_statuses_key >= 6)
         WHERE o.mld_opdr_key = rec1.mld_opdr_key
           AND rec1.mld_melding_status IN (4, 5, 7);  -- anders faalt de trigger sowieso

         -- update meldingstatus
         mld.updatemeldingstatusAV (rec1.mld_melding_key, 0, v_aanvrager, 0);
         -- zet de status naar verwerkt (user is facilitor)
         mld.setopdrachtstatus (rec1.mld_opdr_key, 7, v_aanvrager);
      END;
   END LOOP;

   FOR rec1 IN c_fact
   LOOP
      BEGIN
         UPDATE fin_factuur f
            SET fin_factuur_statuses_key = 7
          WHERE f.fin_factuur_key = rec1.fin_factuur_key;

         fac.trackaction ('FINVER', rec1.fin_factuur_key, v_aanvrager, NULL, NULL);
      END;
   END LOOP;
   -- verwijder de enties uit de tijdelijke tabel. (AAEY#29465)
   DELETE aaxx_exp_factuur;
END;
/


declare
begin
aaxx_export_verwerk_exact ('VERWERK_EXACT', NULL,NULL, NULL);
end;
/


CREATE OR REPLACE PROCEDURE aaxx_export_verwerk_exact (
   p_applname   IN   VARCHAR2,
   p_applrun    IN   VARCHAR2,
   p_filedir    IN   VARCHAR2,
   p_filename   IN   VARCHAR2
)
AS
   CURSOR c_fact
   IS
     SELECT f.fin_factuur_key
       FROM aaxx_exp_factuur f
          , aaxx_v_factuur_gegevens fg
      WHERE f.fin_factuur_key = fg.fin_factuur_key
        AND fg.fin_factuur_statuses_key = 6;

   CURSOR c_opdr
   IS
     SELECT distinct fg.mld_opdr_key, mld_statusopdr_key, m.mld_melding_status, m.mld_melding_key
       FROM aaxx_exp_factuur f
          , aaxx_v_factuur_gegevens fg
          , mld_opdr o
          , mld_melding m
      WHERE f.fin_factuur_key = fg.fin_factuur_key
        AND fg.mld_opdr_key = o.mld_opdr_key
        AND o.mld_melding_key = m.mld_melding_key
        AND laatste_factuur = 1
        AND fg.fin_factuur_statuses_key = 6;

   CURSOR c_bes
   IS
     SELECT bo.*
       FROM aaxx_exp_factuur f
          , aaxx_v_factuur_gegevens fg
          , bes_bestelopdr bo
      WHERE f.fin_factuur_key = fg.fin_factuur_key
        AND fg.bes_bestelopdr_key = bo.bes_bestelopdr_key
        AND laatste_factuur = 1
        AND fg.fin_factuur_statuses_key = 6;

    CURSOR c_sync_kostensoort
    IS
      SELECT COALESCE (kstd.prs_kostensoort_key, kvg.prs_kostensoort_key)
                std_kostensoort_key,
             f.prs_kostensoort_key fac_kostensoort_key,
             f.fin_factuur_key
        FROM fin_factuur f,
             aaxx_exp_factuur ef,
             mld_opdr o,
             mld_melding m,
             mld_stdmelding std,
             ins_tab_discipline md,
             prs_kostensoort kstd,
             prs_kostensoort kvg
       WHERE f.fin_factuur_key = ef.fin_factuur_key
         AND f.mld_opdr_key = o.mld_opdr_key
         AND m.mld_melding_key = o.mld_melding_key
         AND m.mld_stdmelding_key = std.mld_stdmelding_key
         AND std.mld_ins_discipline_key = md.ins_discipline_key
         AND std.prs_kostensoort_key = kstd.prs_kostensoort_key(+)
         AND md.prs_kostensoort_key = kvg.prs_kostensoort_key(+);

   v_errormsg       VARCHAR (200);
   oracle_err_num   NUMBER;
   oracle_err_mes   VARCHAR2 (200);
   v_aanvrager      NUMBER;
   v_bestelling_key NUMBER;
   v_logdate        DATE;
BEGIN
   v_errormsg := 'Geen akties';

-- Facilitor user
  IF aaxx_get_user = 'SITECH'
  THEN
     v_aanvrager := 6524;
  ELSE
     v_aanvrager := 4;
  END IF;

   -- AAIT#34097 aanpassen kostensoort bij factuur. Soms wordt de stdmelding aangepast terwijl
   -- er al een factuur geboekt is. Door bij het verwerken van de factuur deze kostensoort nog
   -- aan te passen wordt voorkomen dat hier verschillen gaan ontstaan.
   -- AAIT#36442 AAIT niet meenemen in dit mechanisme omdat bij AAIT de kostensoort uit de opdracht
   -- gehaald wordt.
   IF aaxx_get_user <> 'IT' 
   THEN
      v_errormsg := 'Aanpassen kostensoort';
      FOR reck IN c_sync_kostensoort
      LOOP
         BEGIN
            IF reck.fac_kostensoort_key <> reck.std_kostensoort_key
            THEN
               UPDATE fin_factuur
                  SET prs_kostensoort_key = reck.std_kostensoort_key
                WHERE fin_factuur_key = reck.fin_factuur_key;

               -- Pas de login aan
               INSERT INTO fac_tracking (fac_tracking_refkey, fac_srtnotificatie_key, fac_tracking_oms)
                 SELECT reck.fin_factuur_key, fac_srtnotificatie_key, 'Kostensoort aangepast in factuur export'
                   FROM fac_srtnotificatie
                  WHERE fac_srtnotificatie_code = 'FINUPD';
            END IF;
         END;
      END LOOP;
   END IF;

   -- Verkoopinterface

   v_logdate := SYSDATE;
   -- voeg SA en ST opdrachten toe aan de fin_verkoopfacturen (vh. verkoopbuffer)
   -- BTW tarief in verkoopbuffer is altijd 19 procent (AADS#18338)
   INSERT INTO fin_verkoopfactuur
   (
      -- module, export_datum, prs_kostenplaats_nr, debiteur, prs_kostensoort_oms, prs_kostensoort_opmerking, prs_kostensoort_refcode, prs_kostensoortgrp_oms, omschrijving, bedrag, btw, fin_btwtabelwaarde_code, opdr_jaar, exact_code_gebouw, groepering, subregelvolgorde
       fin_verkoopfactuur_id, fin_verkoopfactuur_xmlnode, fin_verkoopfactuur_refkey, fin_verkoopfactuur_aanmaak, prs_kostenplaats_nr, prs_debiteur_naam, prs_bedrijf_key, prs_kostensoort_oms, prs_kostensoort_opmerking, prs_kostensoort_refcode, prs_kostensoortgrp_oms, fin_verkoopfactuur_omschr, fin_verkoopfactuur_bedrag, fin_btwtabelwaarde_code, fin_verkoopfactuur_maand, fin_verkoopfactuur_c1, fin_verkoopfactuur_c2, fin_verkoopfactuur_c3, fin_verkoopfactuur_n1
   )
   SELECT substr(to_char(v_logdate, 'dd-mm-yyyy') || ' - ' || sd.ins_srtdiscipline_prefix || m.mld_melding_key || '/' || mld_opdr_bedrijfopdr_volgnr, 1,30 ),
          'opdracht',
          o.mld_opdr_key,
          v_logdate,
          DECODE (aaxx_get_user, 'AH',  aaxx_get_top_dep_code(k.prs_kostenplaats_nr),
                                 'DBS', DECODE (ks.prs_kostensoort_upper, 'CV EIG BOUW PL', '913757',
                                                                          'CV EIG INST PL', '913757',
                                                                          substr(aaxx_get_lev2_dep_code(k.prs_kostenplaats_nr),1,6)),
                                 'DOW', k.prs_kostenplaats_nr,
                                 'DSM', DECODE (SUBSTR(ks.prs_kostensoort_upper,1,3) , 'CV ', '520',
                                                                                       'CVE', aaxx_get_top_dep_code(k.prs_kostenplaats_nr)),
                                 'SITECH', aaxx_get_dep_code(k.prs_kostenplaats_nr),
                                 'ESSENT', '912001',
                                 'LB',  exact_code,
                                 'NMM',  'MGB',
                                 'SABIC', DECODE (to_char(opdr_datum, 'YYYY'), '2012', k.prs_kostenplaats_nr,
                                                                               '2013', k.prs_kostenplaats_nr,
                                                                                       aaxx_get_top_dep_code(k.prs_kostenplaats_nr)),
                                 'VL',  aaxx_get_top_dep_code(k.prs_kostenplaats_nr),
                                        SUBSTR (prs_kostenplaats_nr, 1, 30)) prs_kostenplaats_nr,
          DECODE (aaxx_get_user, 'AH',  aaxx_get_top_dep_code(k.prs_kostenplaats_nr),
                                 'DBS', DECODE (ks.prs_kostensoort_upper, 'CV EIG BOUW PL', '913757',
                                                                          'CV EIG INST PL', '913757',
                                                                          substr(aaxx_get_lev2_dep_code(k.prs_kostenplaats_nr),1,6)),
                                 'DOW', substr(aaxx_get_top_dep_code(k.prs_kostenplaats_nr),1,6),
                                 'DSM', DECODE (SUBSTR(ks.prs_kostensoort_upper,1,3) , 'CV ', '520',
                                                                                       'CVE', aaxx_get_top_dep_code(k.prs_kostenplaats_nr)),
                                 'SITECH', aaxx_get_dep_code(k.prs_kostenplaats_nr),
                                 'ESSENT', '912001',
                                 'LB',  DECODE(g.alg_locatie_key,
                                               1, '911928',   -- Worldwide Headquarters
                                               2, '911927',   -- Maasvlakte
                                               3, '911930',   -- Botlek
                                               4, '911929'    -- Moerdijk
                                              ),
                                 'NMM',  DECODE(k.prs_kostenplaats_nr,
                                                '0001', '913799',   -- Heijmans
                                                '0002', '913810',   -- Vermaat
                                                '0003', '913766',   -- Defensie
                                                '0004', '913776',   -- Stichting Nationaal Militair Museum
                                                        'Onbekend'
                                               ),
                                 'RABO', aaxx_get_dep_code(k.prs_kostenplaats_nr),
                                 'SABIC', DECODE (to_char(opdr_datum, 'YYYY'), '2012', aaxx_get_top_dep_code(k.prs_kostenplaats_nr),
                                                                               '2013', aaxx_get_top_dep_code(k.prs_kostenplaats_nr),
                                                                                       (SELECT distinct prs_leverancier_nr FROM prs_bedrijf b, prs_afdeling a
                                                                                         WHERE b.prs_bedrijf_key = a.prs_bedrijf_key
                                                                                           AND b.prs_bedrijf_verwijder IS NULL
                                                                                           AND a.prs_afdeling_verwijder IS NULL
                                                                                           AND a.prs_afdeling_naam = aaxx_get_top_dep_code(k.prs_kostenplaats_nr))),
                                 'VL',  aaxx_get_top_dep_code(k.prs_kostenplaats_nr),
                                 'ZCN', '913815',
                                 'ZKHM', '913816',
                                        SUBSTR (prs_kostenplaats_nr, 1, 30)) debiteur,
          b.prs_bedrijf_key,
          ks.prs_kostensoort_oms || DECODE(TO_CHAR(opdr_datum,'YYYY'), TO_CHAR(TO_NUMBER(TO_CHAR(SYSDATE, 'yyyy'))-1), ' VJ','') ,
          ks.prs_kostensoort_opmerking,
          vk_prs_kostensoort_refcode,
          SUBSTR(DECODE (aaxx_get_user,
                         'AH',  DECODE(SUBSTR(ks.prs_kostensoort_upper,1,2), 'CV', ksg.prs_kostensoortgrp_oms,
                                                                                   sd.ins_srtdiscipline_prefix || m.mld_melding_key),
                         'DBS', DECODE(ks.prs_kostensoortgrp_key, 3, 'Projecten', 'Core Variable'),
                         'DOW', 'Service Charges',
                         'RABO', 'Servicekosten ' || aaxx_get_dep_code(k.prs_kostenplaats_nr),
                         'VL', 'Core Variabel',
                         'ZCN', DECODE(sd.ins_srtdiscipline_prefix, 'PR',  'Projecten',  
                                                                    DECODE(aaxx_get_top_dep_code(prs_kostenplaats_nr), 'SN', 'Servicekosten',
                                                                                                                       'KL', 'Klantvragen',
                                                                                                                       '')),
                         'ZKHM', DECODE(sd.ins_srtdiscipline_prefix, 'PR',  'Projecten',  
                                                                     DECODE(aaxx_get_top_dep_code(prs_kostenplaats_nr), 'SN', 'Servicekosten',
                                                                                                                        'KL', 'Klantvragen',
                                                                                                                        '')),
                         ksg.prs_kostensoortgrp_oms || DECODE (aaxx_get_user, 'LB', ' ' || Exact_code,
                                                                              'SABIC', ' ' || DECODE (to_char(opdr_datum, 'YYYY'), '2012', k.prs_kostenplaats_nr,
                                                                                                                                   '2013', k.prs_kostenplaats_nr,
                                                                                                                                           aaxx_get_top_dep_code(k.prs_kostenplaats_nr)),
                                                                              'DSM', DECODE (SUBSTR(ks.prs_kostensoort_upper,1,3) , 'CV ', ' ' || l.alg_locatie_code),
                                                                              'NMM', DECODE(k.prs_kostenplaats_nr, '0001', ' Heijmans',
                                                                                                                   '0002', ' Vermaat',
                                                                                                                   '0003', ' Defensie',
                                                                                                                   '0004', ' NMM',
                                                                                                                           ' Onbekend')
                                                              )
                        )
                 , 1, 60) prs_kostensoortgrp_oms,
          sd.ins_srtdiscipline_prefix
          || m.mld_melding_key
          || '/'
          || mld_opdr_bedrijfopdr_volgnr
          || ' '
          || d.ins_discipline_omschrijving
          || ' ('
          || (SELECT MAX(mld_kenmerkmelding_waarde)
              FROM mld_kenmerkmelding km, mld_kenmerk k
              WHERE     km.mld_kenmerk_key = k.mld_kenmerk_key
                    AND (   ( aaxx_get_user <> 'DBS' AND k.mld_srtkenmerk_key = 143)              -- opdrachtnummer
                         OR ( aaxx_get_user = 'DBS' AND k.mld_srtkenmerk_key = 55)                -- projectnaam
                        )
                    AND km.mld_melding_key = m.mld_melding_key)
          || ')'
             omschrijving,
          ROUND (fg.bedrag
                 * COALESCE ( (SELECT u.uplift
                               FROM aaxx_imp_uplift u
                               WHERE u.prs_leverancier_nr = b.prs_leverancier_nr
                                     AND UPPER(soort_order) = 'WO'
                                     AND UPPER (u.prs_kostensoort_oms) =
                                           ks.prs_kostensoort_upper
                                     AND fg.fin_factuur_boekmaand =
                                              u.jaar
                                           || '-'
                                           || LTRIM (TO_CHAR (u.maand, '00'))),
                             DECODE (aaxx_get_user, 'NMM', 1.1, 1)
                   ),
                 2
          ),
          DECODE (aaxx_get_user,
                  'SABIC', DECODE (ks.prs_kostensoort_oms, 'RAS-NC', 2, 'CV OP VERV', 2, 5),     -- Kostensoorten RAS-NC en CV OP VERV zijn laag tarief
                  'SITECH', DECODE (fg.prs_kostensoort_refcode, '4321006', fin_btwtabelwaarde_code, 5), --AADS#21168
                  fin_btwtabelwaarde_code) fin_btwtabelwaarde_code,
          to_char(opdr_datum, 'YYYY'),
          DECODE (aaxx_get_user,
                  'LB', l.alg_locatie_code,
                  'NMM', 'MGB',
                  COALESCE(exact_code, alg_gebouw_code)),  -- C1
          SUBSTR (
             DECODE (aaxx_get_user, 'AH',  DECODE(SUBSTR(ks.prs_kostensoort_upper,1,2), 'CV', ksg.prs_kostensoortgrp_oms,
                                                                                              sd.ins_srtdiscipline_prefix || m.mld_melding_key),
                                    'DBS', DECODE (ks.prs_kostensoort_upper, 'NC PROJ', '913757' || m.mld_melding_key,
                                                                             'CV EIG BOUW PL', '913757',
                                                                             'CV EIG INST PL', '913757',
                                                                             'CVE GEB NIET PLAN', aaxx_get_lev2_dep_code(k.prs_kostenplaats_nr) || m.mld_melding_key,
                                                                             'CVE INSTAL NIET PLAN', aaxx_get_lev2_dep_code(k.prs_kostenplaats_nr) || m.mld_melding_key,
                                                                                        aaxx_get_lev2_dep_code(k.prs_kostenplaats_nr)),
                                    'SITECH', (SELECT fac_usrdata_omschr
                                              FROM alg_onrgoedkenmerk, fac_usrdata ud
                                             WHERE     alg_onrgoed_key = g.alg_gebouw_key
                                                   AND alg_kenmerk_key = 1060   -- rema contract
                                                   AND ud.fac_usrdata_key =
                                                         fac.safe_to_number (alg_onrgoedkenmerk_waarde)
                                                   AND (   ks.prs_kostensoort_upper LIKE 'ST ONDH%'
                                                        OR ks.prs_kostensoort_upper LIKE 'STB ONDH%')),
                                    'DOW', substr(aaxx_get_top_dep_code(k.prs_kostenplaats_nr),1,8) ||
                                           DECODE(substr(aaxx_get_top_dep_code(k.prs_kostenplaats_nr),1,3),
                                              '911', DECODE(SUBSTR(ks.prs_kostensoort_upper, 1,5), 'NC P ', 'PR', 'NC/CV'),
                                              '912', 'CV/NC/PR',
                                              '913', DECODE(SUBSTR(ks.prs_kostensoort_upper, 1,7), 'COR VAR', 'CV', 'NC/PR'),
                                              'Onbekend') ||
                                           substr(aaxx_get_top_dep_code(k.prs_kostenplaats_nr),1,8),
                                    'DSM', DECODE (SUBSTR(ks.prs_kostensoort_upper,1,3) , 'CV ', ksg.prs_kostensoortgrp_oms || ' ' || l.alg_locatie_code,
                                                                                          'CVE', aaxx_get_top_dep_code(k.prs_kostenplaats_nr)),
                                    'RABO', aaxx_get_dep_code(k.prs_kostenplaats_nr),
                                    'SABIC', DECODE (to_char(opdr_datum, 'YYYY'), '2012', '',
                                                                                  '2013', '',
                                                                                          aaxx_get_top_dep_code(k.prs_kostenplaats_nr)),
                                    'ZCN', DECODE(sd.ins_srtdiscipline_prefix, 'PR', to_char(m.mld_melding_key),
                                                                               aaxx_get_top_dep_code(prs_kostenplaats_nr)),
                                    'ZKHM', DECODE(sd.ins_srtdiscipline_prefix, 'PR', to_char(m.mld_melding_key),
                                                                                aaxx_get_top_dep_code(prs_kostenplaats_nr)),
                                    '')
             , 1, 12) groepering,   -- C2
          DECODE (aaxx_get_user, 'LB', prs_kostensoort_oms || '1',
                                 'DOW', 'A' || prs_kostensoort_oms,
                                 'ESSENT', (SELECT uplift
                                              FROM aaxx_imp_uplift u
                                             WHERE u.prs_kostensoort_oms = ks.prs_kostensoort_oms),
                                 '') subregelvolgorde,  -- C3
          l.alg_locatie_key    -- N1
   FROM mld_opdr o,
        mld_typeopdr ot,
        prs_bedrijf b,
        prs_kostenplaats k,
        mld_melding m,
        mld_stdmelding std,
        ins_tab_discipline d,
        ins_srtdiscipline sd,
        prs_kostensoort ks,
        prs_kostensoortgrp ksg,
        aaxx_exp_factuur f,
        alg_gebouw g,
        alg_locatie l,
        alg_v_onroerendgoed og,
        aaxx_v_exact_code_gebouw exact,
        (SELECT fin_factuur_key,
                mld_opdr_key,
                SUM (fin_factuurregel_totaal) bedrag,
                aaxx_get_verkoop_btw_code (fin_btwtabelwaarde_key) fin_btwtabelwaarde_code,
                prs_kostenplaats_key,
                prs_kostensoort_key,
                prs_kostensoort_refcode,
                vk_prs_kostensoort_refcode,
                fin_factuur_boekmaand,
                opdr_datum,
                fin_factuur_datum
         FROM aaxx_v_factuur_gegevens
         WHERE fin_factuur_statuses_key = 6
         GROUP BY fin_factuur_key,
                  fin_btwtabelwaarde_key,
                  mld_opdr_key,
                  prs_kostenplaats_key,
                  prs_kostensoort_key,
                  fin_factuur_boekmaand,
                  opdr_datum,
                  fin_factuur_datum,
                  fin_factuurregel_btw,
                  fin_btwtabelwaarde_code,
                  vk_prs_kostensoort_refcode,
                  prs_kostensoort_refcode,
                  fin_factuurregel_totaal) fg
   WHERE     fg.prs_kostenplaats_key = k.prs_kostenplaats_key(+)
         AND o.mld_typeopdr_key = ot.mld_typeopdr_key
         AND fg.mld_opdr_key = o.mld_opdr_key
         AND m.mld_alg_onroerendgoed_keys = og.alg_onroerendgoed_keys(+)
         AND og.alg_gebouw_key = g.alg_gebouw_key(+)
         AND m.mld_alg_locatie_key = l.alg_locatie_key(+)
         AND og.alg_gebouw_key = exact.alg_gebouw_key(+)
         AND fg.fin_factuur_key = f.fin_factuur_key
         AND o.mld_melding_key = m.mld_melding_key
         AND o.mld_uitvoerende_keys = b.prs_bedrijf_key
         AND fg.prs_kostensoort_key = ks.prs_kostensoort_key(+)
         AND ks.prs_kostensoortgrp_key = ksg.prs_kostensoortgrp_key(+)
         AND m.mld_stdmelding_key = std.mld_stdmelding_key
         AND std.mld_ins_discipline_key = d.ins_discipline_key
         AND d.ins_srtdiscipline_key = sd.ins_srtdiscipline_key
         AND ((       sd.ins_srtdiscipline_prefix = 'SA'
                  AND aaxx_get_user <> 'VL'
                  AND aaxx_get_user <> 'AH'
                  AND aaxx_get_user <> 'DSM'
                  AND aaxx_get_user <> 'SABIC'
                  AND aaxx_get_user <> 'ZCN'
                  AND aaxx_get_user <> 'ZKHM'
                  AND aaxx_get_user <> 'DOW'
                  AND aaxx_get_user <> 'LB'
                  AND aaxx_get_user <> 'NMM'
                  AND aaxx_get_user <> 'RABO'
                  AND aaxx_get_user <> 'DBS'
                  AND aaxx_get_user <> 'ESSENT')
              OR (     aaxx_get_user = 'SITECH'
                  AND (   ks.prs_kostensoort_upper LIKE 'ST ONDH%'
                       OR ks.prs_kostensoort_upper LIKE 'STB ONDH%')
                  AND ot.mld_typeopdr_omschrijving = 'Workorder'
                 )
              OR (     aaxx_get_user = 'AH'
                  AND (   ks.prs_kostensoort_upper LIKE 'CV%'
                       OR ks.prs_kostensoort_upper LIKE 'NC PROJ%')
                 )
              OR (     aaxx_get_user = 'DBS'
                  AND  ks.prs_kostensoort_upper IN (
                               'CV AFVAL REST',
                               'CV OND',
                               'CV GEB NIET PLAN',
                               'CV INSTAL NIET PLAN',
                               'CV TERR VERHARD',
                               'CV TERR NIET PL',
                               'CV OND TERR',
                               'CV TERR OVR',
                               'CV CONS REST',
                               'CV CONS SERV',
                               'CV CONS OVR',
                               'CV CONS AUT',
                               'CV BEWAK',
                               'CV PREV CAL',
                               'CV BEWAK OVR',
                               'CV SCH',
                               'CV SCH GLAS',
                               'CV SCH OVR',
                               'CV VGM',
                               'CV GROEN',
                               'CV EIG BOUW PL',
                               'CV EIG INST PL',
                               'NC PROJ',
                               'CVE INSTAL NIET PLAN',
                               'CVE GEB NIET PLAN')
                 )
              OR (     aaxx_get_user = 'DOW'
                   AND (    ot.mld_typeopdr_omschrijving = 'Workorder'
                        OR  ot.mld_typeopdr_omschrijving = 'Projectorder')
                   AND (    ks.prs_kostensoort_upper LIKE 'NC %'
                         OR ks.prs_kostensoort_upper LIKE 'NC P %'
                         OR ks.prs_kostensoort_upper = 'COR VAR MAIL SERVICES'
                         OR ks.prs_kostensoort_upper = 'COR VAR VENDING'
                         OR ks.prs_kostensoort_upper = 'COR VAR MAIN HANDYMAN'
                         OR ks.prs_kostensoort_upper = 'COR VAR GEN TEN SERV'
                       )
                 )
              OR (     aaxx_get_user = 'DSM'
                  AND  SUBSTR(ks.prs_kostensoort_upper,1,3) IN (
                               'CV ',
                               'CVE')
                 )
              OR (     aaxx_get_user = 'ESSENT'
                   AND ks.prs_kostensoort_upper LIKE 'CVE%'
                   AND ot.mld_typeopdr_omschrijving = 'Workorder'
                 )
              OR (     aaxx_get_user = 'LB'
                   AND ks.prs_kostensoort_upper LIKE 'NC%'
                   AND ks.prs_kostensoort_upper <> 'NC DERDEN'
                   AND ks.prs_kostensoort_upper <> 'NC PROJ'
                 )
              OR (     aaxx_get_user = 'NMM'
                   AND ks.prs_kostensoort_upper LIKE 'CV%'
                 )
              OR (     aaxx_get_user = 'RABO'
                  AND  ot.mld_typeopdr_omschrijving = 'Workorder'
                 )
              OR (     aaxx_get_user = 'SABIC'
                   AND (  (     o.mld_opdr_datumbegin < to_date ('20140101', 'yyyymmdd') --  Voor sabic geldt in 2014 een ander mechanisme (AASA#28673)
                            AND ks.prs_kostensoort_upper LIKE '%NC'
                            AND ot.mld_typeopdr_omschrijving = 'Workorder'
                          )
                       OR (     o.mld_opdr_datumbegin > to_date ('20140101', 'yyyymmdd') --  Voor sabic geldt voor 2014 een ander mechanisme (AASA#28673)
                            AND ks.prs_kostensoort_upper LIKE 'CV %'
                            AND ks.prs_kostensoort_upper <> 'CV CHIP'
                            AND (    o.mld_opdr_datumbegin > to_date ('20150101', 'yyyymmdd') --  Voor sabic geldt voor 2015 een ander mechanisme (AASA#31618)
                                  OR (      ks.prs_kostensoort_upper <> 'CV CONS REST'
                                        AND ks.prs_kostensoort_upper <> 'CV CONS AUT'
                                        AND ks.prs_kostensoort_upper <> 'CV SCH OVR'
                                        AND ks.prs_kostensoort_upper <> 'CV DOC POST'
                                        AND ks.prs_kostensoort_upper <> 'CV AFVAL REST'
                                     )
                                )
                            AND ( ks.prs_kostensoort_upper <> 'CV EIG BOUW PL' OR ot.mld_typeopdr_omschrijving = 'Workorder')
                          )
                       )
                 )
              OR (     aaxx_get_user = 'VL'
                   AND ( (     o.mld_opdr_datumbegin < to_date ('20160101', 'yyyymmdd') --  Voor VL geldt in 2016 een ander mechanisme (AAVL#34856)
                           AND ks.prs_kostensoort_upper IN (
                                    'CV OND',
                                    'CV TERR OVR',
                                    'CV BEWAK OVR',
                                    'CV BOUW PLAN',
                                    'CV CONS REST',
                                    'CV CONS OVR',
                                    'CV SCH',
                                    'CV WP',
                                    'CV GEB NIET PLAN',
                                    'CV CONS SERV',
                                    'CV SCH GLAS',
                                    'CV KART',
                                    'CV INSTAL PLAN',
                                    'CV BEWAK',
                                    'CV VERH',
                                    'CV GROEN',
                                    'CV INSTAL NIET PLAN',
                                    'CV PREV CAL',
                                    'CV DOC POST',
                                    'CV BEW',
                                    'CV TERR VERHARD',
                                    'CV REC',
                                    'CV DOC REP',
                                    'CV VERV PERS',
                                    'CV OND TERR',
                                    'CV ACHT OND',
                                    'CV EIG INST PL',
                                    'CV EIG BOUW PL',
                                    'NC ACHT OND',
                                    'NC INV BOUW',
                                    'NC INV WP',
                                    'NC INV INST')
                         )
                         OR
                         (     o.mld_opdr_datumbegin >= to_date ('20160101', 'yyyymmdd') --  Voor VL geldt in 2016 een ander mechanisme (AAVL#34856)
                           AND ( ks.prs_kostensoort_upper LIKE 'CVE %' OR ks.prs_kostensoort_upper LIKE 'NC %')
                         )
                       )
                 )
              OR (     aaxx_get_user = 'ZCN'
                   AND (   sd.ins_srtdiscipline_prefix = 'PR'
                        OR aaxx_get_top_dep_code(prs_kostenplaats_nr) = 'SN'
                        OR aaxx_get_top_dep_code(prs_kostenplaats_nr) = 'KL'
                       )
                 )
              OR (     aaxx_get_user = 'ZKHM'
                   AND (   sd.ins_srtdiscipline_prefix = 'PR'
                        OR aaxx_get_top_dep_code(prs_kostenplaats_nr) = 'SN'
                        OR aaxx_get_top_dep_code(prs_kostenplaats_nr) = 'KL'
                       )
                 )
             );


   -- voeg contract orders toe aan de verkoopbuffer
   -- bij SITECH wordt gegroepeerd op REMA contract
   IF aaxx_get_user = 'SITECH' THEN
     INSERT INTO fin_verkoopfactuur
     (
      -- module, export_datum, prs_kostenplaats_nr, debiteur, prs_kostensoort_oms, prs_kostensoort_opmerking, prs_kostensoort_refcode, prs_kostensoortgrp_oms, omschrijving, bedrag, btw, fin_btwtabelwaarde_code, opdr_jaar, exact_code_gebouw, groepering, subregelvolgorde
       fin_verkoopfactuur_id, fin_verkoopfactuur_xmlnode, fin_verkoopfactuur_refkey, fin_verkoopfactuur_aanmaak, prs_kostenplaats_nr, prs_debiteur_naam, prs_kostensoort_oms, prs_kostensoort_opmerking, prs_kostensoort_refcode, prs_kostensoortgrp_oms, fin_verkoopfactuur_omschr, fin_verkoopfactuur_bedrag, fin_btwtabelwaarde_code, fin_verkoopfactuur_maand, fin_verkoopfactuur_c1, fin_verkoopfactuur_c2, fin_verkoopfactuur_c3, fin_verkoopfactuur_n1
     )
      SELECT substr(to_char(v_logdate, 'dd-mm-yyyy') || ' - ' || 'C' || cnt_contract_nummer_intern || DECODE (cnt_contract_versie, NULL, '', '.' || cnt_contract_versie), 1,30 ),
             'contract',
             c.cnt_contract_key,
             v_logdate,
             aaxx_get_dep_code (k.prs_kostenplaats_nr),
             aaxx_get_dep_code (k.prs_kostenplaats_nr),
             ks.prs_kostensoort_oms || DECODE(TO_CHAR(opdr_datum,'YYYY'), TO_CHAR(TO_NUMBER(TO_CHAR(SYSDATE, 'yyyy'))-1), ' VJ','') ,
             ks.prs_kostensoort_opmerking,
             vk_prs_kostensoort_refcode,
             (SELECT prs_kostensoortgrp_oms
              FROM prs_kostensoortgrp ksg
              WHERE ksg.prs_kostensoortgrp_key = ks.prs_kostensoortgrp_key),
                'C'
             || cnt_contract_nummer_intern
             || DECODE (cnt_contract_versie, NULL, '', '.' || cnt_contract_versie)
                omschrijving,
             COALESCE((SELECT ROUND (COALESCE(cp.gewicht,1) * fg.bedrag * u.uplift, 2)
                         FROM aaxx_imp_uplift u
                        WHERE u.prs_leverancier_nr = b.prs_leverancier_nr
                          AND UPPER (soort_order) = 'CO'
                          AND UPPER (u.prs_kostensoort_oms) = ks.prs_kostensoort_upper
                          AND fg.fin_factuur_boekmaand =
                              TO_CHAR (u.jaar) || '-' || LTRIM (TO_CHAR (u.maand, '00'))), ROUND ((cp.gewicht * fg.bedrag), 2)),
             5, -- AADS#21168 , AADS#26856
             to_char(opdr_datum, 'YYYY'),
             cp.alg_gebouw_code,
             cp.rema,
             '',
             ''
      FROM cnt_contract c,
           prs_bedrijf b,
           prs_kostenplaats k,
           ins_tab_discipline d,
           prs_kostensoort ks,
           aaxx_exp_factuur f,
           (SELECT fin_factuur_key,
                   cnt_contract_key,
                   SUM (fin_factuurregel_totaal) bedrag,
                   fin_factuurregel_btw btw,
                   aaxx_get_verkoop_btw_code (fin_btwtabelwaarde_key) fin_btwtabelwaarde_code,
                   prs_kostenplaats_key,
                   prs_kostensoort_key,
                   vk_prs_kostensoort_refcode,
                   fin_factuur_boekmaand,
                   opdr_datum,
                   fin_factuur_datum
            FROM aaxx_v_factuur_gegevens
            WHERE fin_factuur_statuses_key = 6
            GROUP BY fin_factuur_key,
                     cnt_contract_key,
                     prs_kostenplaats_key,
                     prs_kostensoort_key,
                     fin_factuur_boekmaand,
                     opdr_datum,
                     fin_factuur_datum,
                     fin_factuurregel_btw,
                     fin_btwtabelwaarde_key,
                     fin_btwtabelwaarde_code,
                     vk_prs_kostensoort_refcode,
                     fin_factuurregel_totaal) fg,
           (SELECT cnt_contract_key,
                   alg_gebouw_code,
                   rema.fac_usrdata_omschr rema,
                   cp.cnt_contract_plaats_gewicht
                   / (  SELECT DECODE (SUM (cp2.cnt_contract_plaats_gewicht),
                                       0, 1,
                                       SUM (cp2.cnt_contract_plaats_gewicht))
                          FROM cnt_contract_plaats cp2
                         WHERE cp2.cnt_contract_key = cp.cnt_contract_key
                               AND cp2.cnt_contract_plaats_verwijder IS NULL
                      GROUP BY cp.cnt_contract_key)
                      gewicht
              FROM cnt_contract_plaats cp,
                   alg_gebouw g,
                   (SELECT k.alg_onrgoed_key, ud.fac_usrdata_omschr
                      FROM alg_onrgoedkenmerk k, fac_usrdata ud
                     WHERE k.alg_kenmerk_key = 1060
                           AND fac.safe_to_number (alg_onrgoedkenmerk_waarde) =
                                 fac_usrdata_key) rema
             WHERE     cp.cnt_contract_plaats_verwijder IS NULL
                   AND cp.cnt_alg_plaats_key = g.alg_gebouw_key
                   AND g.alg_gebouw_key = rema.alg_onrgoed_key(+)) cp
      WHERE     fg.prs_kostenplaats_key = k.prs_kostenplaats_key
            AND fg.cnt_contract_key = c.cnt_contract_key
            AND c.cnt_contract_key = cp.cnt_contract_key(+)
            AND fg.fin_factuur_key = f.fin_factuur_key
            AND c.cnt_prs_bedrijf_key = b.prs_bedrijf_key
            AND c.ins_discipline_key = d.ins_discipline_key
            AND fg.prs_kostensoort_key = ks.prs_kostensoort_key
            AND aaxx_get_user = 'SITECH'
            AND (   ks.prs_kostensoort_upper LIKE 'AE%'
                 OR ks.prs_kostensoort_upper LIKE 'AS ONDH%'
                 OR ks.prs_kostensoort_upper LIKE 'ST ONDH%'
                 OR ks.prs_kostensoort_upper LIKE 'STB ONDH%'
                );
   ELSE
     INSERT INTO fin_verkoopfactuur
     (
      -- module, export_datum, prs_kostenplaats_nr, debiteur, prs_kostensoort_oms, prs_kostensoort_opmerking, prs_kostensoort_refcode, prs_kostensoortgrp_oms, omschrijving, bedrag, btw, fin_btwtabelwaarde_code, opdr_jaar, exact_code_gebouw, groepering, subregelvolgorde
         fin_verkoopfactuur_id, fin_verkoopfactuur_xmlnode, fin_verkoopfactuur_refkey, fin_verkoopfactuur_aanmaak, prs_kostenplaats_nr, prs_debiteur_naam, prs_bedrijf_key, prs_kostensoort_oms, prs_kostensoort_opmerking, prs_kostensoort_refcode, prs_kostensoortgrp_oms, fin_verkoopfactuur_omschr, fin_verkoopfactuur_bedrag, fin_btwtabelwaarde_code, fin_verkoopfactuur_maand, fin_verkoopfactuur_c1, fin_verkoopfactuur_c2, fin_verkoopfactuur_c3, fin_verkoopfactuur_n1
     )
      SELECT substr(to_char(v_logdate, 'dd-mm-yyyy') || ' - ' || 'C' || cnt_contract_nummer_intern || DECODE (cnt_contract_versie, NULL, '', '.' || cnt_contract_versie), 1,30 ),
             'contract',
             c.cnt_contract_key,
             v_logdate,
             DECODE (aaxx_get_user,
                     'AH',  aaxx_get_top_dep_code(k.prs_kostenplaats_nr),
                     'DBS', DECODE (ks.prs_kostensoort_upper, 'CV EIG BOUW PL', '913757',
                                                              'CV EIG INST PL', '913757',
                                                                                 substr(aaxx_get_lev2_dep_code(k.prs_kostenplaats_nr),1,6)),
                     'LB',  exact_code,
                     'NMM',  exact_code,
                     'DOW', k.prs_kostenplaats_nr,
                     'DSM', DECODE (SUBSTR(ks.prs_kostensoort_upper,1,3) , 'CV ', '520',
                                                                           'CVE', aaxx_get_top_dep_code(k.prs_kostenplaats_nr)),
                     'NS',  SUBSTR (prs_kostenplaats_nr, 1, 30),
                     'SABIC', aaxx_get_top_dep_code(k.prs_kostenplaats_nr),
                     'VL',  aaxx_get_top_dep_code(k.prs_kostenplaats_nr)
             ) prs_kostenplaats_nr,
             DECODE (aaxx_get_user,
                     'AH',  aaxx_get_top_dep_code(k.prs_kostenplaats_nr),
                     'DBS', DECODE (ks.prs_kostensoort_upper, 'CV EIG BOUW PL', '913757',
                                                              'CV EIG INST PL', '913757',
                                                                                 substr(aaxx_get_lev2_dep_code(k.prs_kostenplaats_nr),1,6)),
                     'LB',  DECODE(g.alg_locatie_key,
                                   1, '911928',   -- Worldwide Headquarters
                                   2, '911927',   -- Maasvlakte
                                   3, '911930',   -- Botlek
                                   4, '911929'    -- Moerdijk
                                  ),
                     'NMM',  DECODE(k.prs_kostenplaats_nr,
                                    '0001', '913799',   -- Heijmans
                                    '0002', '913810',   -- Vermaat
                                    '0003', '913766',   -- Defensie
                                    '0004', '913776',   -- Stichting Nationaal Militair Museum
                                            'Onbekend'
                                   ),
                     'DOW', substr(aaxx_get_top_dep_code(k.prs_kostenplaats_nr),1,6),
                     'DSM', DECODE (SUBSTR(ks.prs_kostensoort_upper,1,3) , 'CV ', '520',
                                                                           'CVE', aaxx_get_top_dep_code(k.prs_kostenplaats_nr)),
                     'NS',  SUBSTR (prs_kostenplaats_nr, 1, 30),
                     'SABIC', (SELECT distinct prs_leverancier_nr FROM prs_bedrijf b, prs_afdeling a
                                WHERE b.prs_bedrijf_key = a.prs_bedrijf_key
                                  AND b.prs_bedrijf_verwijder IS NULL
                                  AND a.prs_afdeling_verwijder IS NULL
                                  AND a.prs_afdeling_naam = aaxx_get_top_dep_code(k.prs_kostenplaats_nr)),
                     'VL',  aaxx_get_top_dep_code(k.prs_kostenplaats_nr),
                     'ZCN', '913815',
                     'ZCN', '913816'
             ) debiteur,
             b.prs_bedrijf_key,
             ks.prs_kostensoort_oms || DECODE(TO_CHAR(opdr_datum,'YYYY'), TO_CHAR(TO_NUMBER(TO_CHAR(SYSDATE, 'yyyy'))-1), ' VJ','') ,
             ks.prs_kostensoort_opmerking,
             vk_prs_kostensoort_refcode,
             DECODE (aaxx_get_user,
                        'DBS', DECODE(ks.prs_kostensoortgrp_key, 3, 'Projecten', 'Core Variable'),
                        'DOW', 'Service Charges',
                        'ZCN', DECODE(aaxx_get_top_dep_code(k.prs_kostenplaats_nr), 'SN', 'Servicekosten',
                                                                                    'KL', 'Klantvragen',
                                                                                    ''),
                        'ZKHM', DECODE(aaxx_get_top_dep_code(k.prs_kostenplaats_nr), 'SN', 'Servicekosten',
                                                                                     'KL', 'Klantvragen',
                                                                                     ''),
                        ksg.prs_kostensoortgrp_oms || DECODE (aaxx_get_user, 'DSM', DECODE (SUBSTR(ks.prs_kostensoort_upper,1,3) , 'CV ', ' ' || l.alg_locatie_code),
                                                                             'LB', ' ' || exact_code,
                                                                             'SABIC', ' ' || aaxx_get_top_dep_code(k.prs_kostenplaats_nr),
                                                                             'NMM', DECODE(k.prs_kostenplaats_nr, '0001', ' Heijmans',
                                                                                                                  '0002', ' Vermaat',
                                                                                                                  '0003', ' Defensie',
                                                                                                                  '0004', ' NMM',
                                                                                                                          ' Onbekend'))
                    ) prs_kostensoortgrp_oms,
                'C'
             || cnt_contract_nummer_intern
             || DECODE (cnt_contract_versie, NULL, '', '.' || cnt_contract_versie)
                omschrijving,
             DECODE (aaxx_get_user,
                     'NMM', ROUND (fg.bedrag * 1.1,2),
                     fg.bedrag),
             DECODE (aaxx_get_user, 'SABIC', DECODE (prs_kostensoort_upper, 'CV OP VERV', 2, 5),
                                             fin_btwtabelwaarde_code) fin_btwtabelwaarde_code,
             to_char(opdr_datum, 'YYYY'),
             DECODE (aaxx_get_user, 'LB', l.alg_locatie_code,
                                    COALESCE(exact_code, alg_gebouw_code)) exact_code,
             SUBSTR (
                DECODE (aaxx_get_user, 'AH', ksg.prs_kostensoortgrp_oms,
                                       'DBS', DECODE (ks.prs_kostensoort_upper, 'CV EIG BOUW PL', '913757',
                                                                                'CV EIG INST PL', '913757',
                                                                                                  aaxx_get_lev2_dep_code(k.prs_kostenplaats_nr)),
                                       'DOW', substr(aaxx_get_top_dep_code(k.prs_kostenplaats_nr),1,8) ||
                                              DECODE(substr(aaxx_get_top_dep_code(k.prs_kostenplaats_nr),1,3),
                                                 '911', DECODE(SUBSTR(ks.prs_kostensoort_upper, 1,5), 'NC P ', 'PR', 'NC/CV'),
                                                 '912', 'CV/NC/PR',
                                                 '913', DECODE(SUBSTR(ks.prs_kostensoort_upper, 1,7), 'COR VAR', 'CV', 'NC/PR'),
                                                 'Onbekend') ||
                                              substr(aaxx_get_top_dep_code(k.prs_kostenplaats_nr),1,8),
                                       'DSM', DECODE (SUBSTR(ks.prs_kostensoort_upper,1,3) , 'CV ', ksg.prs_kostensoortgrp_oms || ' ' || l.alg_locatie_code,
                                                                                             'CVE', aaxx_get_top_dep_code(k.prs_kostenplaats_nr)),
                                       'SABIC', aaxx_get_top_dep_code(k.prs_kostenplaats_nr),
                                       'ZCN', aaxx_get_top_dep_code(k.prs_kostenplaats_nr),
                                       'ZKHM', aaxx_get_top_dep_code(k.prs_kostenplaats_nr),
                                       '')
                ,1,12) groepering,
             DECODE (aaxx_get_user, 'LB', prs_kostensoort_oms || '1',
                                    'DOW', 'A' || prs_kostensoort_oms, '') subregelvolgorde,
             l.alg_locatie_key  -- N1
      FROM cnt_contract c,
           prs_bedrijf b,
           prs_kostenplaats k,
           ins_tab_discipline d,
           prs_kostensoort ks,
           prs_kostensoortgrp ksg,
           aaxx_exp_factuur f,
           alg_locatie l,
           (SELECT cnt_contract_key, alg_gebouw_code, exact_code, ag.alg_gebouw_key, ag.alg_locatie_key
              FROM
               (SELECT cnt_contract_key, MIN (cp.cnt_alg_plaats_key) cnt_alg_plaats_key
                  FROM cnt_contract_plaats cp
                 WHERE     cp.cnt_contract_plaats_verwijder IS NULL
                       AND cp.cnt_alg_plaats_code = 'G'
                 GROUP BY cnt_contract_key) cp,
               alg_gebouw ag,
               aaxx_v_exact_code_gebouw ae
            WHERE  cp.cnt_alg_plaats_key = ag.alg_gebouw_key
              AND  cp.cnt_alg_plaats_key = ae.alg_gebouw_key) g,
           (SELECT fin_factuur_key,
                   cnt_contract_key,
                   SUM (fin_factuurregel_totaal) bedrag,
                   fin_factuurregel_btw btw,
                   aaxx_get_verkoop_btw_code (fin_btwtabelwaarde_key) fin_btwtabelwaarde_code,
                   prs_kostenplaats_key,
                   prs_kostensoort_key,
                   vk_prs_kostensoort_refcode,
                   fin_factuur_boekmaand,
                   opdr_datum,
                   fin_factuur_datum
            FROM aaxx_v_factuur_gegevens
            WHERE fin_factuur_statuses_key = 6
            GROUP BY fin_factuur_key,
                     cnt_contract_key,
                     prs_kostenplaats_key,
                     prs_kostensoort_key,
                     fin_factuur_boekmaand,
                     opdr_datum,
                     fin_factuur_datum,
                     fin_factuurregel_btw,
                     fin_btwtabelwaarde_key,
                     fin_btwtabelwaarde_code,
                     vk_prs_kostensoort_refcode,
                     fin_factuurregel_totaal) fg
      WHERE     fg.prs_kostenplaats_key = k.prs_kostenplaats_key
            AND fg.cnt_contract_key = c.cnt_contract_key
            AND fg.fin_factuur_key = f.fin_factuur_key
            AND g.alg_locatie_key = l.alg_locatie_key
            AND c.cnt_prs_bedrijf_key = b.prs_bedrijf_key
            AND c.ins_discipline_key = d.ins_discipline_key
            AND c.cnt_contract_key = g.cnt_contract_key(+)
            AND fg.prs_kostensoort_key = ks.prs_kostensoort_key(+)
            AND ks.prs_kostensoortgrp_key = ksg.prs_kostensoortgrp_key(+)
            AND ( (     aaxx_get_user = 'AH'
                    AND ks.prs_kostensoort_upper LIKE 'CV %'
                  )
                  OR
                  (     aaxx_get_user = 'LB'
                    AND ks.prs_kostensoort_upper LIKE 'NC%'                         --  LyondellBasell
                    AND ks.prs_kostensoort_upper <> 'NC DERDEN'
                    AND ks.prs_kostensoort_upper <> 'NC PROJ'
                  )
                  OR
                  (     aaxx_get_user = 'DBS'
                    AND ks.prs_kostensoort_upper IN (
                               'CV AFVAL REST',
                               'CV OND',
                               'CV GEB NIET PLAN',
                               'CV INSTAL NIET PLAN',
                               'CV TERR VERHARD',
                               'CV TERR NIET PL',
                               'CV OND TERR',
                               'CV TERR OVR',
                               'CV CONS REST',
                               'CV CONS SERV',
                               'CV CONS OVR',
                               'CV CONS AUT',
                               'CV BEWAK',
                               'CV PREV CAL',
                               'CV BEWAK OVR',
                               'CV SCH',
                               'CV SCH GLAS',
                               'CV SCH OVR',
                               'CV VGM',
                               'CV GROEN',
                               'CV EIG BOUW PL',
                               'CV EIG INST PL',
                               'NC PROJ',
                               'CVE INSTAL NIET PLAN',
                               'CVE GEB NIET PLAN')
                  )
                  OR
                  (     aaxx_get_user = 'DOW'
                    AND (    ks.prs_kostensoort_upper = 'COR VAR CATE COFFE'
                          OR ks.prs_kostensoort_upper = 'COR VAR IND CLO'
                          OR ks.prs_kostensoort_upper = 'COR VAR MAIL SERVICES'
                          OR ks.prs_kostensoort_upper = 'COR VAR VENDING'
                          OR ks.prs_kostensoort_upper = 'COR VAR MAIN HANDYMAN'
                          OR ks.prs_kostensoort_upper = 'COR VAR GEN TEN SERV'
                          OR ks.prs_kostensoort_upper = 'COR VAR HVAC'
                          OR ks.prs_kostensoort_upper = 'COR VAR CLEA BUILDING SAN'
                          OR ks.prs_kostensoort_upper = 'COR VAR CLEA VSR KMS')
                  )
                  OR
                  (     aaxx_get_user = 'DSM'
                    AND SUBSTR(ks.prs_kostensoort_upper,1,3) IN (
                                   'CV ',
                                   'CVE')
                  )
                  OR 
                  (     aaxx_get_user = 'NMM'
                    AND ks.prs_kostensoort_upper LIKE 'CV%'
                  )
                  OR
                  (     aaxx_get_user = 'SABIC'
                    AND c.cnt_contract_looptijd_van >= to_date ('20140101', 'yyyymmdd') --  Voor sabic geldt voor 2014 een ander mechanisme (AASA#28673)
                    AND ks.prs_kostensoort_upper LIKE 'CV %'
                    AND ks.prs_kostensoort_upper <> 'CV CHIP'
                    AND (    c.cnt_contract_looptijd_van >= to_date ('20150101', 'yyyymmdd') --  Voor sabic geldt voor 2015 een ander mechanisme (AASA#31618)
                          OR (      ks.prs_kostensoort_upper <> 'CV CONS REST'
                                AND ks.prs_kostensoort_upper <> 'CV CONS AUT'
                                AND ks.prs_kostensoort_upper <> 'CV SCH OVR'
                                AND ks.prs_kostensoort_upper <> 'CV DOC POST'
                                AND ks.prs_kostensoort_upper <> 'CV AFVAL REST'
                              )
                        )
                  )
                  OR
                  (     aaxx_get_user = 'VL'
                    AND c.cnt_contract_looptijd_van < to_date ('20160101', 'yyyymmdd') --  Voor VL geldt voor 2016 een ander mechanisme (AAVL#34856)
                    AND ks.prs_kostensoort_upper IN (
                                    'CV OND',
                                    'CV TERR OVR',
                                    'CV BEWAK OVR',
                                    'CV BOUW PLAN',
                                    'CV CONS REST',
                                    'CV CONS OVR',
                                    'CV SCH',
                                    'CV WP',
                                    'CV GEB NIET PLAN',
                                    'CV CONS SERV',
                                    'CV SCH GLAS',
                                    'CV KART',
                                    'CV INSTAL PLAN',
                                    'CV BEWAK',
                                    'CV VERH',
                                    'CV GROEN',
                                    'CV INSTAL NIET PLAN',
                                    'CV PREV CAL',
                                    'CV DOC POST',
                                    'CV BEW',
                                    'CV TERR VERHARD',
                                    'CV REC',
                                    'CV DOC REP',
                                    'CV VERV PERS',
                                    'CV OND TERR',
                                    'CV ACHT OND',
                                    'NC ACHT OND',
                                    'CV EIG INST PL',
                                    'CV EIG BOUW PL',
                                    'NC INV BOUW',
                                    'NC INV WP',
                                    'NC INV INST')
                  )
                  OR
                  (     aaxx_get_user = 'ZCN'
                    AND (   aaxx_get_top_dep_code(k.prs_kostenplaats_nr) = 'SN'
                         OR aaxx_get_top_dep_code(k.prs_kostenplaats_nr) = 'KL')
                  )
                  OR
                  (     aaxx_get_user = 'ZKHM'
                    AND (   aaxx_get_top_dep_code(k.prs_kostenplaats_nr) = 'SN'
                         OR aaxx_get_top_dep_code(k.prs_kostenplaats_nr) = 'KL')
                  )
                );
   END IF;
   -- voeg bestelorders toe aan de verkoopbuffer
   INSERT INTO fin_verkoopfactuur
   (
    -- module, export_datum, prs_kostenplaats_nr, debiteur, prs_kostensoort_oms, prs_kostensoort_opmerking, prs_kostensoort_refcode, prs_kostensoortgrp_oms, omschrijving, bedrag, btw, fin_btwtabelwaarde_code, opdr_jaar, exact_code_gebouw, groepering, subregelvolgorde
       fin_verkoopfactuur_id, fin_verkoopfactuur_xmlnode, fin_verkoopfactuur_refkey, fin_verkoopfactuur_aanmaak, prs_kostenplaats_nr, prs_debiteur_naam, prs_bedrijf_key, prs_kostensoort_oms, prs_kostensoort_opmerking, prs_kostensoort_refcode, prs_kostensoortgrp_oms, fin_verkoopfactuur_omschr, fin_verkoopfactuur_bedrag, fin_btwtabelwaarde_code, fin_verkoopfactuur_maand, fin_verkoopfactuur_c1, fin_verkoopfactuur_c2, fin_verkoopfactuur_c3, fin_verkoopfactuur_n1
   )
    SELECT substr(to_char(v_logdate, 'dd-mm-yyyy') || ' - ' || bestel.bes_bestelopdr_id, 1,30 ),
           'bestelopdr',
           bestel.bes_bestelopdr_key,
           v_logdate,
           DECODE (aaxx_get_user,
                   'AH',  aaxx_get_top_dep_code(k.prs_kostenplaats_nr),
                   'DOW', '911791',
                   'DSM', DECODE (SUBSTR(ks.prs_kostensoort_upper,1,3) , 'CV ', '520',
                                                                         'CVE', aaxx_get_top_dep_code(k.prs_kostenplaats_nr)),
                   'SITECH', aaxx_get_dep_code (k.prs_kostenplaats_nr),
                   'LB', exact_code,
                   'VL',  aaxx_get_top_dep_code(k.prs_kostenplaats_nr),
                   SUBSTR (prs_kostenplaats_nr, 1, 30)),
           DECODE (aaxx_get_user,
                   'AH',  aaxx_get_top_dep_code(k.prs_kostenplaats_nr),
                   'DOW', '911791',
                   'DSM', DECODE (SUBSTR(ks.prs_kostensoort_upper,1,3) , 'CV ', '520',
                                                                         'CVE', aaxx_get_top_dep_code(k.prs_kostenplaats_nr)),
                   'SITECH', aaxx_get_dep_code (k.prs_kostenplaats_nr),
                   'LB',  DECODE(g.alg_locatie_key,
                                 1, '911928',   -- Worldwide Headquarters
                                 2, '911927',   -- Maasvlakte
                                 3, '911930',   -- Botlek
                                 4, '911929'    -- Moerdijk
                                ),
                   'VL',  aaxx_get_top_dep_code(k.prs_kostenplaats_nr),
                   'ZCN', '913815',
                   'ZKHM', '913816',
                   SUBSTR (prs_kostenplaats_nr, 1, 30)),
           bestel.prs_bedrijf_key,
           ks.prs_kostensoort_oms
           || DECODE (TO_CHAR (opdr_datum, 'YYYY'),
                      TO_CHAR (TO_NUMBER (TO_CHAR (SYSDATE, 'yyyy')) - 1), ' VJ',
                      ''),
           ks.prs_kostensoort_opmerking,
           vk_prs_kostensoort_refcode,
           prs_kostensoortgrp_oms || DECODE (aaxx_get_user, 'DSM', DECODE (SUBSTR(ks.prs_kostensoort_upper,1,3) , 'CV ', ' ' || l.alg_locatie_code),
                                                            'LB', ' ' || exact_code,
                                                            'SABIC', ' ' || k.prs_kostenplaats_nr,
                                                            'ZCN', DECODE(aaxx_get_top_dep_code(k.prs_kostenplaats_nr), 'SN', 'Servicekosten',
                                                                                                                        'KL', 'Klantvragen',
                                                                                                                        ''),
                                                            'ZKHM', DECODE(aaxx_get_top_dep_code(k.prs_kostenplaats_nr), 'SN', 'Servicekosten',
                                                                                                                        'KL', 'Klantvragen',
                                                                                                                        '')
                                            ),
           bestel.bes_bestelopdr_id || ' ' || d.ins_discipline_omschrijving
              omschrijving,
           fin_factuurregel_totaal,
           DECODE (aaxx_get_user, 'SITECH', 5,
                                  fin_btwtabelwaarde_code) fin_btwtabelwaarde_code,
           TO_CHAR (opdr_datum, 'YYYY'),
           DECODE (aaxx_get_user,
                  'LB', alg_locatie_code,
                  COALESCE(exact_code, alg_gebouw_code)),
           DECODE (aaxx_get_user,
                   'AH',  ksg.prs_kostensoortgrp_oms,
                   'DSM', DECODE (SUBSTR(ks.prs_kostensoort_upper,1,3) , 'CV ', ksg.prs_kostensoortgrp_oms || ' ' || l.alg_locatie_code,
                                                                         'CVE', aaxx_get_top_dep_code(k.prs_kostenplaats_nr)),
                   'DOW', DECODE(SUBSTR(ks.prs_kostensoort_upper, 1,5), 'NC P ', 'NCP', 'NC/CV') ||
                          substr(aaxx_get_top_dep_code(k.prs_kostenplaats_nr),1,6),
                   'ZCN', aaxx_get_top_dep_code(k.prs_kostenplaats_nr),
                   'ZKHM', aaxx_get_top_dep_code(k.prs_kostenplaats_nr),
                   '') groepering, -- c2
           DECODE (aaxx_get_user, 'LB', prs_kostensoort_oms || '1', '') subregelvolgorde, -- c3
           l.alg_locatie_key   -- N1
      FROM (  SELECT *
                FROM aaxx_v_bestelgegevens
            GROUP BY bes_bestelopdr_key,
                     bes_bestelopdr_id,
                     ins_discipline_key,
                     mld_adres_key_lev,
                     bes_bestelling_leverdatum,
                     prs_bedrijf_key) bestel,
           mld_adres ad,
           prs_kostenplaats k,
           ins_tab_discipline d,
           prs_kostensoort ks,
           prs_kostensoortgrp ksg,
           aaxx_exp_factuur f,
           alg_gebouw g,
           alg_locatie l,
           aaxx_v_exact_code_gebouw exact,
           (  SELECT fin_factuur_key,
                     bes_bestelopdr_key,
                     prs_kostenplaats_key,
                     prs_kostensoort_key,
                     vk_prs_kostensoort_refcode,
                     fin_factuur_boekmaand,
                     opdr_datum,
                     fin_factuur_datum,
                     aaxx_get_verkoop_btw_code (fin_btwtabelwaarde_key) fin_btwtabelwaarde_code,
                     sum(fin_factuurregel_totaal) fin_factuurregel_totaal
                FROM aaxx_v_factuur_gegevens
               WHERE fin_factuur_statuses_key = 6
                     AND bes_bestelopdr_key IS NOT NULL
            GROUP BY fin_factuur_key,
                     bes_bestelopdr_key,
                     prs_kostenplaats_key,
                     prs_kostensoort_key,
                     fin_factuur_boekmaand,
                     fin_btwtabelwaarde_key,
                     opdr_datum,
                     fin_factuur_datum,
                     vk_prs_kostensoort_refcode,
                     fin_btwtabelwaarde_code) fg
     WHERE     fg.bes_bestelopdr_key = bestel.bes_bestelopdr_key
           AND fg.prs_kostenplaats_key = k.prs_kostenplaats_key(+)
           AND bestel.ins_discipline_key = d.ins_discipline_key
           AND bestel.mld_adres_key_lev = ad.mld_adres_key(+)
           AND ad.mld_adres_gebouw_ruimte = g.alg_gebouw_code(+)
           AND g.alg_gebouw_key = exact.alg_gebouw_key(+)
           AND g.alg_locatie_key = l.alg_locatie_key
           AND fg.fin_factuur_key = f.fin_factuur_key
           AND fg.prs_kostensoort_key = ks.prs_kostensoort_key(+)
           AND ks.prs_kostensoortgrp_key = ksg.prs_kostensoortgrp_key(+)
           AND (  (     aaxx_get_user = 'AH'
                    AND ks.prs_kostensoort_upper LIKE 'CV%'
                  )
                  OR
                  (     aaxx_get_user = 'SITECH'
                    AND ks.prs_kostensoort_upper LIKE 'AE%'                         --  SITECH
                  )
                  OR
                  (     aaxx_get_user = 'DSM'
                    AND SUBSTR(ks.prs_kostensoort_upper,1,3) IN (
                                  'CV ',
                                  'CVE')
                  )
                  OR
                  (     aaxx_get_user = 'LB'
                    AND ks.prs_kostensoort_upper LIKE 'NC%'                         --  LyondellBasell
                    AND ks.prs_kostensoort_upper <> 'NC DERDEN'
                    AND ks.prs_kostensoort_upper <> 'NC PROJ'
                  )
                  OR
                  (     aaxx_get_user = 'VL'
                    AND (  (    bes_bestelling_leverdatum < to_date('20160101', 'yyyymmdd') --  Voor VL geldt voor 2016 een ander mechanisme (AAVL#34856)
                            AND ks.prs_kostensoort_upper LIKE 'CV %')
                           OR
                           (    bes_bestelling_leverdatum >= to_date('20160101', 'yyyymmdd') --  Voor VL geldt voor 2016 een ander mechanisme (AAVL#34856)
                            AND ks.prs_kostensoort_upper LIKE 'CVE %')
                        )
                  )
                  OR 
                  (     aaxx_get_user = 'ZCN'
                    AND (   aaxx_get_top_dep_code(k.prs_kostenplaats_nr) = 'SN'
                         OR aaxx_get_top_dep_code(k.prs_kostenplaats_nr) = 'KL')
                  )
                  OR 
                  (     aaxx_get_user = 'ZKHM'
                    AND (   aaxx_get_top_dep_code(k.prs_kostenplaats_nr) = 'SN'
                         OR aaxx_get_top_dep_code(k.prs_kostenplaats_nr) = 'KL')
                  )
               );

   -- bereken per klant de FEE over de omzet.
   IF aaxx_get_user = 'DBS' THEN
      INSERT INTO fin_verkoopfactuur
      (
      -- module, export_datum, prs_kostenplaats_nr, debiteur, prs_kostensoort_oms, prs_kostensoort_opmerking, prs_kostensoort_refcode, prs_kostensoortgrp_oms, omschrijving, bedrag, btw, fin_btwtabelwaarde_code, opdr_jaar, exact_code_gebouw, groepering, subregelvolgorde
         fin_verkoopfactuur_id, fin_verkoopfactuur_xmlnode, fin_verkoopfactuur_refkey, fin_verkoopfactuur_aanmaak, prs_kostenplaats_nr, prs_debiteur_naam, prs_kostensoort_oms, prs_kostensoort_opmerking, prs_kostensoort_refcode, prs_kostensoortgrp_oms, fin_verkoopfactuur_omschr, fin_verkoopfactuur_bedrag, fin_btwtabelwaarde_code, fin_verkoopfactuur_maand, fin_verkoopfactuur_c1, fin_verkoopfactuur_c2, fin_verkoopfactuur_c3, fin_verkoopfactuur_c4
      )
      SELECT fin_verkoopfactuur_id, fin_verkoopfactuur_xmlnode, fin_verkoopfactuur_refkey, fin_verkoopfactuur_aanmaak, '', prs_debiteur_naam, 'FEE' || DECODE (INSTR(prs_kostensoort_oms, ' VJ'), 0 , '', ' VJ'), '', '8110550', prs_kostensoortgrp_oms, 'FEE' , ROUND(fin_verkoopfactuur_bedrag * ma.marge, 2), fin_btwtabelwaarde_code, fin_verkoopfactuur_maand, 'X', fin_verkoopfactuur_c2, 'X', ok.ordernummer
        FROM fin_verkoopfactuur v, mld_opdr o,
             (SELECT km.mld_melding_key, fac.safe_to_number (fac_usrdata_code) marge
                FROM fac_usrdata ud,
                     mld_kenmerkmelding km,
                     mld_kenmerk k,
                     mld_srtkenmerk sk
               WHERE sk.mld_srtkenmerk_omschrijving = 'Marge'
                 AND sk.mld_srtkenmerk_key = k.mld_srtkenmerk_key
                 AND k.mld_kenmerk_key = km.mld_kenmerk_key
                 AND fac.safe_to_number (mld_kenmerkmelding_waarde) = fac_usrdata_key) ma,
             (SELECT km.mld_melding_key, mld_kenmerkmelding_waarde ordernummer
                FROM mld_kenmerkmelding km,
                     mld_kenmerk k,
                     mld_srtkenmerk sk
               WHERE sk.mld_srtkenmerk_omschrijving = 'Ordernummer klant'
                 AND sk.mld_srtkenmerk_key = k.mld_srtkenmerk_key
                 AND k.mld_kenmerk_key = km.mld_kenmerk_key) ok
       WHERE fin_verkoopfactuur_aanmaak = v_logdate
         AND fin_verkoopfactuur_xmlnode = 'opdracht'
         AND fin_verkoopfactuur_refkey = o.mld_opdr_key
         AND o.mld_melding_key = ma.mld_melding_key
         AND o.mld_melding_key = ok.mld_melding_key
         AND (v.prs_kostensoort_oms = 'NC PROJ' OR v.prs_kostensoort_oms LIKE 'CVE%');
      -- GROUP BY fin_verkoopfactuur_id, fin_verkoopfactuur_xmlnode, fin_verkoopfactuur_refkey, fin_verkoopfactuur_aanmaak, prs_debiteur_naam, DECODE (INSTR(prs_kostensoort_oms, ' VJ'), 0 , '', ' VJ'), prs_kostensoortgrp_oms, fin_btwtabelwaarde_code, fin_verkoopfactuur_maand, prs_debiteur_naam || 'FEE', fin_verkoopfactuur_c2, ma.marge;
   END IF;

   IF aaxx_get_user = 'DOW' THEN
      INSERT INTO fin_verkoopfactuur
      (
      -- module, export_datum, prs_kostenplaats_nr, debiteur, prs_kostensoort_oms, prs_kostensoort_opmerking, prs_kostensoort_refcode, prs_kostensoortgrp_oms, omschrijving, bedrag, btw, fin_btwtabelwaarde_code, opdr_jaar, exact_code_gebouw, groepering, subregelvolgorde
         fin_verkoopfactuur_id, fin_verkoopfactuur_xmlnode, fin_verkoopfactuur_refkey, fin_verkoopfactuur_aanmaak, prs_kostenplaats_nr, prs_debiteur_naam, prs_kostensoort_oms, prs_kostensoort_opmerking, prs_kostensoort_refcode, prs_kostensoortgrp_oms, fin_verkoopfactuur_omschr, fin_verkoopfactuur_bedrag, fin_btwtabelwaarde_code, fin_verkoopfactuur_maand, fin_verkoopfactuur_c1, fin_verkoopfactuur_c2, fin_verkoopfactuur_c3
      )
      SELECT fin_verkoopfactuur_id, fin_verkoopfactuur_xmlnode, fin_verkoopfactuur_refkey, fin_verkoopfactuur_aanmaak, '', prs_debiteur_naam, 'BASE FEE' || DECODE (INSTR(prs_kostensoort_oms, ' VJ'), 0 , '', ' VJ'), '', '8210511', prs_kostensoortgrp_oms, 'BASE FEE' , ROUND(SUM(fin_verkoopfactuur_bedrag) * 0.04, 2), fin_btwtabelwaarde_code, fin_verkoopfactuur_maand, 'X', fin_verkoopfactuur_c2, 'X'
        FROM fin_verkoopfactuur v
       WHERE fin_verkoopfactuur_aanmaak = v_logdate
       GROUP BY fin_verkoopfactuur_id, fin_verkoopfactuur_xmlnode, fin_verkoopfactuur_refkey, fin_verkoopfactuur_aanmaak, prs_debiteur_naam, DECODE (INSTR(prs_kostensoort_oms, ' VJ'), 0 , '', ' VJ'), prs_kostensoortgrp_oms, fin_btwtabelwaarde_code, fin_verkoopfactuur_maand, fin_verkoopfactuur_c2;
   END IF;

   IF aaxx_get_user = 'DSM' THEN
      -- CVE 
      -- Fee: De fee over dit CVE gedeelte wordt apart doorbelast aan de klant en moet in een separate factuur worden gezet. 
      -- Deze factuur moet standaard naar debiteurencode 520. 
      -- Per factuur dient een fee berekend te worden van 0% of 3%. 
      -- Hierbij geldt als uitgangspunt dat voor alle MA contracten 0% geldt, en voor alle CP 3%. 
      -- Deze fee dient als totaalbedrag geboekt te worden op 1 regel per BTW percentage op de kostensoort FEE.
      -- Extra verzoek hierover is om wel per locatie één regel te maken (dus Sittard, Urmond, Campus,etc). 
      -- Misschien dat we dit kunnen doen door artikelcode FEE te gebruiken, maar omschrijving Fee Sittard, Fee Urmond, etc?
      INSERT INTO fin_verkoopfactuur
      (
         fin_verkoopfactuur_id, fin_verkoopfactuur_xmlnode, fin_verkoopfactuur_refkey, fin_verkoopfactuur_aanmaak, prs_kostenplaats_nr, prs_debiteur_naam, prs_kostensoort_oms, prs_kostensoort_opmerking, prs_kostensoort_refcode, prs_kostensoortgrp_oms, fin_verkoopfactuur_omschr, fin_verkoopfactuur_bedrag, fin_btwtabelwaarde_code, fin_verkoopfactuur_maand, fin_verkoopfactuur_c1, fin_verkoopfactuur_c2, fin_verkoopfactuur_c3
      )
      SELECT fin_verkoopfactuur_id, fin_verkoopfactuur_xmlnode, fin_verkoopfactuur_refkey, fin_verkoopfactuur_aanmaak, '', '520', 'CVE FEE'  || DECODE (INSTR(prs_kostensoort_oms, ' VJ'), 0 , '', ' VJ'), '', '8210511', prs_kostensoortgrp_oms, 'FEE ' || l.alg_locatie_code, SUM(ROUND(fin_verkoopfactuur_bedrag * 0.03, 2)), fin_btwtabelwaarde_code, fin_verkoopfactuur_maand, 'X', 'FEE' || '520', 'X'
        FROM fin_verkoopfactuur v, prs_relatietype r, alg_locatie l, prs_bedrijf b
       WHERE fin_verkoopfactuur_aanmaak = v_logdate
         AND v.prs_bedrijf_key = b.prs_bedrijf_key
         AND b.prs_relatietype_key = r.prs_relatietype_key
         AND r.prs_relatietype_omschrijving = 'Contracting party'
         AND v.fin_verkoopfactuur_n1 = l.alg_locatie_key
         AND prs_kostensoort_oms LIKE 'CVE%'
       GROUP BY fin_verkoopfactuur_id, fin_verkoopfactuur_xmlnode, fin_verkoopfactuur_refkey, fin_verkoopfactuur_aanmaak, l.alg_locatie_code, prs_debiteur_naam, DECODE (INSTR(prs_kostensoort_oms, ' VJ'), 0 , '', ' VJ'), prs_kostensoortgrp_oms, fin_btwtabelwaarde_code, fin_verkoopfactuur_maand, fin_verkoopfactuur_c2;

      -- CV 
      -- Fee: Er wordt een fee van 0% of 3% berekend over deze factuur. 
      -- Het percentage is afhankelijk van het contracttype van de leverancier. 
      -- Bij alle Managing Agent (MA) geldt 0%, voor alle Contracting Party (CP) geldt 3%.  
      -- Deze fee dient als totaalbedrag geboekt te worden op 1 regel per BTW percentage op de kostensoort FEE.
      INSERT INTO fin_verkoopfactuur
      (
         fin_verkoopfactuur_id, fin_verkoopfactuur_xmlnode, fin_verkoopfactuur_refkey, fin_verkoopfactuur_aanmaak, prs_kostenplaats_nr, prs_debiteur_naam, prs_kostensoort_oms, prs_kostensoort_opmerking, prs_kostensoort_refcode, prs_kostensoortgrp_oms, fin_verkoopfactuur_omschr, fin_verkoopfactuur_bedrag, fin_btwtabelwaarde_code, fin_verkoopfactuur_maand, fin_verkoopfactuur_c1, fin_verkoopfactuur_c2, fin_verkoopfactuur_c3
      )
      SELECT fin_verkoopfactuur_id, fin_verkoopfactuur_xmlnode, fin_verkoopfactuur_refkey, fin_verkoopfactuur_aanmaak, '', '520', 'CV FEE' || DECODE (INSTR(prs_kostensoort_oms, ' VJ'), 0 , '', ' VJ'), '', '8210511', prs_kostensoortgrp_oms, 'FEE' , SUM(ROUND(fin_verkoopfactuur_bedrag * 0.03, 2)), fin_btwtabelwaarde_code, fin_verkoopfactuur_maand, 'X', fin_verkoopfactuur_c2, 'X'
        FROM fin_verkoopfactuur v, prs_relatietype r, alg_locatie l, prs_bedrijf b
       WHERE fin_verkoopfactuur_aanmaak = v_logdate
         AND v.prs_bedrijf_key = b.prs_bedrijf_key
         AND b.prs_relatietype_key = r.prs_relatietype_key
         AND r.prs_relatietype_omschrijving = 'Contracting party'
         AND prs_kostensoort_oms LIKE 'CV %'
       GROUP BY fin_verkoopfactuur_id, fin_verkoopfactuur_xmlnode, fin_verkoopfactuur_refkey, fin_verkoopfactuur_aanmaak, prs_debiteur_naam, DECODE (INSTR(prs_kostensoort_oms, ' VJ'), 0 , '', ' VJ'), prs_kostensoortgrp_oms, fin_btwtabelwaarde_code, fin_verkoopfactuur_maand, fin_verkoopfactuur_c2;
   END IF;

   IF aaxx_get_user = 'ESSENT' THEN
      INSERT INTO fin_verkoopfactuur
      (
      -- module, export_datum, prs_kostenplaats_nr, debiteur, prs_kostensoort_oms, prs_kostensoort_opmerking, prs_kostensoort_refcode, prs_kostensoortgrp_oms, omschrijving, bedrag, btw, fin_btwtabelwaarde_code, opdr_jaar, exact_code_gebouw, groepering, subregelvolgorde
         fin_verkoopfactuur_id, fin_verkoopfactuur_xmlnode, fin_verkoopfactuur_refkey, fin_verkoopfactuur_aanmaak, prs_kostenplaats_nr, prs_debiteur_naam, prs_kostensoort_oms, prs_kostensoort_opmerking, prs_kostensoort_refcode, prs_kostensoortgrp_oms, fin_verkoopfactuur_omschr, fin_verkoopfactuur_bedrag, fin_btwtabelwaarde_code, fin_verkoopfactuur_maand, fin_verkoopfactuur_c1, fin_verkoopfactuur_c2, fin_verkoopfactuur_c3
      )
      SELECT fin_verkoopfactuur_id, fin_verkoopfactuur_xmlnode, fin_verkoopfactuur_refkey, fin_verkoopfactuur_aanmaak, prs_kostenplaats_nr, prs_debiteur_naam, 'BASE FEE ' || to_char(u.uplift) || '%' || DECODE (INSTR(v.prs_kostensoort_oms, ' VJ'), 0 , '', ' VJ'), '', '8210511', prs_kostensoortgrp_oms, 'BASE FEE ' || TO_CHAR(u.uplift) || '%' , ROUND(SUM(fin_verkoopfactuur_bedrag) * (u.uplift/100),2), 5, fin_verkoopfactuur_maand, 'X', 'X', u.uplift || 'X'
        FROM fin_verkoopfactuur v, aaxx_imp_uplift u
       WHERE REPLACE(v.prs_kostensoort_oms, ' VJ', '') = u.prs_kostensoort_oms
         AND fin_verkoopfactuur_aanmaak = v_logdate
       GROUP BY fin_verkoopfactuur_id, fin_verkoopfactuur_xmlnode, fin_verkoopfactuur_refkey, fin_verkoopfactuur_aanmaak, prs_kostenplaats_nr, prs_debiteur_naam, instr(v.prs_kostensoort_oms, ' VJ'), prs_kostensoortgrp_oms, uplift, fin_verkoopfactuur_maand;
   END IF;

   IF aaxx_get_user = 'LB' THEN
      INSERT INTO fin_verkoopfactuur
      (
      -- module, export_datum, prs_kostenplaats_nr, debiteur, prs_kostensoort_oms, prs_kostensoort_opmerking, prs_kostensoort_refcode, prs_kostensoortgrp_oms, omschrijving, bedrag, btw, fin_btwtabelwaarde_code, opdr_jaar, exact_code_gebouw, groepering, subregelvolgorde
         fin_verkoopfactuur_id, fin_verkoopfactuur_xmlnode, fin_verkoopfactuur_refkey, fin_verkoopfactuur_aanmaak, prs_kostenplaats_nr, prs_debiteur_naam, prs_kostensoort_oms, prs_kostensoort_opmerking, prs_kostensoort_refcode, prs_kostensoortgrp_oms, fin_verkoopfactuur_omschr, fin_verkoopfactuur_bedrag, fin_btwtabelwaarde_code, fin_verkoopfactuur_maand, fin_verkoopfactuur_c1, fin_verkoopfactuur_c2, fin_verkoopfactuur_c3
      )
      SELECT fin_verkoopfactuur_id, fin_verkoopfactuur_xmlnode, fin_verkoopfactuur_refkey, fin_verkoopfactuur_aanmaak, prs_kostenplaats_nr, prs_debiteur_naam, 'BASE FEE' || DECODE (instr(prs_kostensoort_oms, ' VJ'), 0 , '', ' VJ'), prs_kostensoort_opmerking, decode(substr(prs_kostensoort_refcode, 1,1), '8', '8210511', '1033305'), prs_kostensoortgrp_oms, 'FEE ' || prs_kostensoort_oms, ROUND(SUM(fin_verkoopfactuur_bedrag)*0.075,2), fin_btwtabelwaarde_code, fin_verkoopfactuur_maand, 'X', 'X',  prs_kostensoort_oms || '2'
        FROM fin_verkoopfactuur
       WHERE fin_verkoopfactuur_aanmaak = v_logdate
       GROUP BY fin_verkoopfactuur_id, fin_verkoopfactuur_xmlnode, fin_verkoopfactuur_refkey, fin_verkoopfactuur_aanmaak, prs_kostenplaats_nr, prs_debiteur_naam, prs_kostensoort_oms, prs_kostensoort_opmerking, prs_kostensoortgrp_oms, fin_btwtabelwaarde_code, fin_verkoopfactuur_maand, decode(substr(prs_kostensoort_refcode, 1,1), '8', '8210511', '1033305');
   END IF;

   -- NMM
   -- Pas het bedrag van de bewaking aan. Opdrachten aan stdmelding 1121 moeten een bedrag krijgen van het aantal uren uit de opdracht maal het uurtarief dat
   -- In een eigentabel opgeslagen wordt. De entries in de eigen tabel kunnen verschillende tarieven met een vervaldatum bevatten.
   IF aaxx_get_user = 'NMM' THEN
      UPDATE fin_verkoopfactuur vk
         SET fin_verkoopfactuur_bedrag = (SELECT o.mld_opdr_uren * ud.fac_usrdata_prijs
                                            FROM mld_opdr o, fac_usrdata ud
                                           WHERE vk.fin_verkoopfactuur_refkey = o.mld_opdr_key
                                             AND vk.fin_verkoopfactuur_xmlnode = 'opdracht'
                                             AND ud.fac_usrtab_key = DECODE (TO_CHAR (COALESCE(mld_opdr_plandatum, mld_opdr_datumbegin), 'D'), 1, 141, 7, 141, 122)   -- Uurtarief bewaking (141 tabel weekend, 122 tabel weekdagen)
                                             AND ud.fac_usrdata_verwijder IS NULL
                                             AND o.mld_opdr_datumbegin < COALESCE(ud.fac_usrdata_vervaldatum, SYSDATE)
                                             AND NOT EXISTS (SELECT ud2.fac_usrdata_key
                                                               FROM fac_usrdata ud2
                                                              WHERE ud2.fac_usrtab_key = DECODE (TO_CHAR (COALESCE(mld_opdr_plandatum, mld_opdr_datumbegin), 'D'), 1, 141, 7, 141, 122)   -- Uurtarief bewaking (141 tabel weekend, 122 tabel weekdagen)
                                                                AND o.mld_opdr_datumbegin < COALESCE(ud2.fac_usrdata_vervaldatum, SYSDATE)
                                                                AND ud2.fac_usrdata_verwijder IS NULL
                                                                AND COALESCE(ud2.fac_usrdata_vervaldatum, SYSDATE) <
                                                                     COALESCE(ud.fac_usrdata_vervaldatum, SYSDATE)
                                                              )
                                         )
       WHERE EXISTS (SELECT mld_opdr_key
                       FROM mld_opdr o, mld_melding m
                      WHERE vk.fin_verkoopfactuur_refkey = o.mld_opdr_key
                        AND vk.fin_verkoopfactuur_xmlnode = 'opdracht'
                        AND o.mld_melding_key = m.mld_melding_key
                        AND m.mld_stdmelding_key = 1121 -- Aanvraag beveiligingsdienst(en) tbv evenementen
                    )
         AND fin_verkoopfactuur_aanmaak = v_logdate;
   END IF;

   IF aaxx_get_user = 'RABO' THEN  --  RABO#37283
      INSERT INTO fin_verkoopfactuur
      (
          fin_verkoopfactuur_id, fin_verkoopfactuur_xmlnode, fin_verkoopfactuur_refkey, fin_verkoopfactuur_aanmaak, prs_kostenplaats_nr, prs_debiteur_naam, prs_kostensoort_oms, prs_kostensoort_opmerking, prs_kostensoort_refcode, prs_kostensoortgrp_oms, fin_verkoopfactuur_omschr, fin_verkoopfactuur_bedrag, fin_btwtabelwaarde_code, fin_verkoopfactuur_maand, fin_verkoopfactuur_c1, fin_verkoopfactuur_c2, fin_verkoopfactuur_c3
      )
      SELECT fin_verkoopfactuur_id, fin_verkoopfactuur_xmlnode, fin_verkoopfactuur_refkey, fin_verkoopfactuur_aanmaak, '', prs_debiteur_naam, 'FEE' || DECODE (INSTR(prs_kostensoort_oms, ' VJ'), 0 , '', ' VJ'), '', '8210511', prs_kostensoortgrp_oms, 'FEE' , ROUND(SUM(fin_verkoopfactuur_bedrag) * fac_usrdata_prijs / 100, 2), fin_btwtabelwaarde_code, fin_verkoopfactuur_maand, 'X', fin_verkoopfactuur_c2, 'X'
        FROM fin_verkoopfactuur v,
             mld_opdr o,
             mld_melding m,
             alg_v_allonroerendgoed aog,
             alg_gebouw g,
             fac_usrdata ud
       WHERE v.fin_verkoopfactuur_refkey = o.mld_opdr_key
         AND o.mld_melding_key = m.mld_melding_key
         AND m.mld_alg_onroerendgoed_keys = aog.alg_onroerendgoed_keys
         AND aog.alg_gebouw_key = g.alg_gebouw_key
         AND g.alg_gebouw_code =
                SUBSTR (fac_usrdata_code,
                        1,
                        INSTR (fac_usrdata_code || ' ', ' ') - 1)
         AND fac_usrtab_key = 81
         AND o.mld_opdr_datumbegin < COALESCE (fac_usrdata_vervaldatum, SYSDATE)
         AND NOT EXISTS
                (SELECT fac_usrdata_key
                   FROM fac_usrdata ud2
                  WHERE SUBSTR (ud2.fac_usrdata_code,
                                1,
                                INSTR (ud2.fac_usrdata_code || ' ', ' ') - 1) =
                           SUBSTR (ud.fac_usrdata_code,
                                   1,
                                   INSTR (ud.fac_usrdata_code || ' ', ' ') - 1)
                    AND ud2.fac_usrtab_key = ud.fac_usrtab_key
                    AND ud2.fac_usrdata_key <> ud.fac_usrdata_key
                    AND COALESCE (ud2.fac_usrdata_vervaldatum, SYSDATE) <
                           COALESCE (ud.fac_usrdata_vervaldatum, SYSDATE)
                    AND o.mld_opdr_datumbegin <
                           COALESCE (ud2.fac_usrdata_vervaldatum, SYSDATE))
         AND fin_verkoopfactuur_aanmaak = v_logdate
      GROUP BY fin_verkoopfactuur_id, fin_verkoopfactuur_xmlnode, fin_verkoopfactuur_refkey, fin_verkoopfactuur_aanmaak, prs_debiteur_naam, prs_kostensoort_oms, prs_kostensoortgrp_oms, fac_usrdata_prijs, fin_btwtabelwaarde_code, fin_verkoopfactuur_maand, fin_verkoopfactuur_c2, 'X';
   END IF;

   IF aaxx_get_user = 'VL' THEN
      INSERT INTO fin_verkoopfactuur
      (
      -- module, export_datum, prs_kostenplaats_nr, debiteur, prs_kostensoort_oms, prs_kostensoort_opmerking, prs_kostensoort_refcode, prs_kostensoortgrp_oms, omschrijving, bedrag, btw, fin_btwtabelwaarde_code, opdr_jaar, exact_code_gebouw, groepering, subregelvolgorde
         fin_verkoopfactuur_id, fin_verkoopfactuur_xmlnode, fin_verkoopfactuur_refkey, fin_verkoopfactuur_aanmaak, prs_kostenplaats_nr, prs_debiteur_naam, prs_kostensoort_oms, prs_kostensoort_opmerking, prs_kostensoort_refcode, prs_kostensoortgrp_oms, fin_verkoopfactuur_omschr, fin_verkoopfactuur_bedrag, fin_btwtabelwaarde_code, fin_verkoopfactuur_maand, fin_verkoopfactuur_c1, fin_verkoopfactuur_c2, fin_verkoopfactuur_c3
      )
      SELECT fin_verkoopfactuur_id, fin_verkoopfactuur_xmlnode, fin_verkoopfactuur_refkey, fin_verkoopfactuur_aanmaak, prs_kostenplaats_nr, prs_debiteur_naam, 'FEE' || DECODE (INSTR(prs_kostensoort_oms, ' VJ'), 0 , '', ' VJ'), prs_kostensoort_opmerking, '8210513', prs_kostensoortgrp_oms, 'FEE', ROUND(fin_verkoopfactuur_bedrag*0.025,2), fin_btwtabelwaarde_code, fin_verkoopfactuur_maand, 'X', 'X', 'X'
        FROM fin_verkoopfactuur
       WHERE     prs_kostensoort_oms = 'NC ACHT OND'
             AND fin_verkoopfactuur_aanmaak = v_logdate;
   END IF;

   FOR rec1 IN c_bes
   LOOP
      BEGIN
        -- indien nog niet afgemeld, dan maar even afmelden.
        IF rec1.bes_bestelopdr_status = 3 THEN -- in behandeling
           UPDATE bes_bestelopdr
              SET bes_bestelopdr_status = 4
            WHERE bes_bestelopdr_key= rec1.bes_bestelopdr_key
              AND bes_bestelopdr_status = 3;
        END IF;

        IF rec1.bes_bestelopdr_status = 5    -- bevestigd
          OR rec1.bes_bestelopdr_status = 4  -- in bestelling
          OR rec1.bes_bestelopdr_status = 3 THEN

          UPDATE bes_bestelopdr_item B
             SET bes_bestelopdr_item_aantalontv = COALESCE(bes_bestelopdr_item_aantal, 0),
                 bes_bestelopdr_item_ontvangen = SYSDATE
           WHERE b.bes_bestelopdr_key = rec1.bes_bestelopdr_key;

          UPDATE bes_bestelling_item bi
             SET bes_bestelling_item_aantalontv = COALESCE(bes_bestelling_item_aantal, 0)
           WHERE EXISTS (SELECT bes_bestelopdr_key
                           FROM bes_bestelopdr_item boi
                          WHERE bi.bes_bestelopdr_item_key = boi.bes_bestelopdr_item_key
                            AND bes_bestelopdr_key = rec1.bes_bestelopdr_key);

          SELECT distinct bes_bestelling_key
            INTO v_bestelling_key
            FROM bes_bestelling_item bi, bes_bestelopdr_item boi
           WHERE bi.bes_bestelopdr_item_key = boi.bes_bestelopdr_item_key
             AND bes_bestelopdr_key = rec1.bes_bestelopdr_key;

          bes.updatebestelopdrstatus(rec1.bes_bestelopdr_key, v_aanvrager);
		 			bes.updatebestellingstatus(v_bestelling_key, v_aanvrager);

        END IF;
      END;
   END LOOP;


   FOR rec1 IN c_opdr
   LOOP
      BEGIN
        -- indien nog niet afgemeld, dan maar even afmelden.
        IF rec1.mld_statusopdr_key <> 6 AND rec1.mld_statusopdr_key <> 7 AND rec1.mld_statusopdr_key <> 9 THEN
          mld.setopdrachtstatus (rec1.mld_opdr_key, 6, v_aanvrager);
          mld.setopdrachtstatus (rec1.mld_opdr_key, 9, v_aanvrager);
        END IF;

        UPDATE mld_opdr o
           SET mld_opdr_kosten   =
                (SELECT SUM (fin_factuurregel_totaal)
                   FROM aaxx_v_aanwezigfactuur f
                      , fin_factuurregel fr
                  WHERE f.fin_factuur_key = fr.fin_factuur_key
                    AND f.mld_opdr_key = o.mld_opdr_key
                    AND f.fin_factuur_statuses_key >= 6)
         WHERE o.mld_opdr_key = rec1.mld_opdr_key
           AND rec1.mld_melding_status IN (4, 5, 7);  -- anders faalt de trigger sowieso

         -- update meldingstatus
         mld.updatemeldingstatusAV (rec1.mld_melding_key, 0, v_aanvrager, 0);
         -- zet de status naar verwerkt (user is facilitor)
         mld.setopdrachtstatus (rec1.mld_opdr_key, 7, v_aanvrager);
      END;
   END LOOP;

   FOR rec1 IN c_fact
   LOOP
      BEGIN
         UPDATE fin_factuur f
            SET fin_factuur_statuses_key = 7
          WHERE f.fin_factuur_key = rec1.fin_factuur_key;

         fac.trackaction ('FINVER', rec1.fin_factuur_key, v_aanvrager, NULL, NULL);
      END;
   END LOOP;
   -- verwijder de enties uit de tijdelijke tabel. (AAEY#29465)
   DELETE aaxx_exp_factuur;
END;
/

COMMIT;     

BEGIN adm.systrackscriptId('$Id$'); END;
/

commit;

SPOOL OFF
