-- Script containing customer generic configuration sql statements for all PCH accounts
-- $Revision$
-- $Id$
--

DEFINE thisfile = 'PCHX.SQL'
DEFINE dbuser   = '^PCH'
DEFINE custid   = '^PCH'

SET ECHO ON
SET DEFINE ON
COLUMN fcltlogfile NEW_VALUE fcltlogfile NOPRINT;
WHENEVER SQLERROR EXIT;
SELECT adm.scriptspoolfile('&dbuser', '&thisfile') AS fcltlogfile FROM DUAL;
WHENEVER SQLERROR CONTINUE;
SPOOL &fcltlogfile
SET DEFINE OFF

------ payload begin ------

CREATE OR REPLACE PACKAGE PCHX
AS
  PROCEDURE add_xml_row (
    p_bestand   IN VARCHAR2,
    p_regel     IN VARCHAR2);

  PROCEDURE add_xml_element (
     p_bestand   IN VARCHAR2,
     p_tag       IN VARCHAR2,
     p_value     IN VARCHAR2);

  FUNCTION get_user
     RETURN VARCHAR2;

  FUNCTION get_administratienr
     RETURN VARCHAR2;

   FUNCTION get_kenmerk (p_module        IN VARCHAR2,
                         p_kenmerk_key   IN NUMBER,
                         p_link_key      IN NUMBER)
     RETURN VARCHAR2;

END;
/

CREATE OR REPLACE PACKAGE BODY pchx
AS
   PROCEDURE add_xml_row (p_bestand IN VARCHAR2, p_regel IN VARCHAR2)
   AS
      v_index           NUMBER;
      replace_bestand   VARCHAR2 (30);
      replace_regel     VARCHAR2 (2000);
   BEGIN
      -- Indien export 'SCANSYS', dan staat in p_bestand zowel administratie+boekstknr als 'SCANSYS', gescheiden door ##
      -- administratie+boekstknr zijn hierbij nodig om per factuur aparte xml-bestanden te exporteren.
      -- Ook voor export 'VERPL' is dit gehanteerd, dat is de eerste export van de facturen (verplichtingen),
      -- voordat de geaccordeerde facturen worden geexporteerd (scansys)
      IF INSTR (p_bestand, '##') > 0
      THEN
         replace_bestand := SUBSTR (p_bestand, INSTR (p_bestand, '##') + 2);
      ELSE
         replace_bestand := p_bestand;
      END IF;

      IF INSTR (p_bestand, '##') > 0
      THEN
         replace_regel :=
               SUBSTR (p_bestand, 1, INSTR (p_bestand, '##') - 1)
            || '##'
            || p_regel;
      ELSE
         replace_regel := p_regel;
      END IF;

      SELECT COALESCE (MAX (fac_rapport_volgnr), 0) + 1
        INTO v_index
        FROM fac_rapport
       WHERE fac_rapport_node = replace_bestand;

      INSERT INTO fac_rapport (fac_rapport_node,
                               fac_rapport_volgnr,
                               fac_rapport_regel)
          VALUES (replace_bestand, v_index, replace_regel);
   END;

   PROCEDURE add_xml_element (p_bestand   IN VARCHAR2,
                              p_tag       IN VARCHAR2,
                              p_value     IN VARCHAR2)
   AS
   BEGIN
      pchx.add_xml_row (
         p_bestand,
            '<'
         || p_tag
         || '>'
         || xml.char_to_html (p_value)
         || '</'
         || p_tag
         || '>');
   END;

   FUNCTION get_user
      RETURN VARCHAR2
   AS
      v_user   VARCHAR2 (20);
   BEGIN
      v_user := UPPER (SUBSTR (USER, 1, 4));
      RETURN v_user;
   END;

   FUNCTION get_administratienr
      RETURN VARCHAR2
   AS
      v_user   VARCHAR2 (20);
      v_adm    VARCHAR2 (20);
   BEGIN
      v_user := get_user;

      IF v_user = 'PCHA'
      THEN
         v_adm := '651';
      END IF;

      IF v_user = 'PCHD'
      THEN
         v_adm := '650';
      END IF;

      IF v_user = 'PCHH'
      THEN
         v_adm := '100';
      END IF;

      IF v_user = 'PCHP'
      THEN
         v_adm := '250';
      END IF;

      IF v_user = 'PCHS'
      THEN
         v_adm := '300';
      END IF;

      IF v_user = 'PCHY'
      THEN
         v_adm := '150';
      END IF;

      IF v_user = 'PCHW'
      THEN
         v_adm := '655';
      END IF;

      RETURN v_adm;
   END;

   -- interne functie om de waarde van het kenmerk te bepalen.
   FUNCTION get_kenmerkwaarde (p_kenmerk_type         VARCHAR2,
                               p_kenmerkdomein_key    NUMBER,
                               p_kenmerk_waarde       VARCHAR2)
      RETURN VARCHAR2
   AS
      v_result   VARCHAR2 (4000);
   BEGIN
      IF p_kenmerk_type = 'R' OR p_kenmerk_type = 'S'
      THEN
         v_result :=
            fac.getdomeinwaarde (p_kenmerkdomein_key, p_kenmerk_waarde);
      ELSIF p_kenmerk_type = 'D'
      THEN
         v_result :=
            TO_CHAR (fac.safe_to_date (p_kenmerk_waarde, 'dd-mm-yyyy'),
                     'yyyy-mm-dd');
      ELSE
         v_result := p_kenmerk_waarde;
      END IF;

      RETURN v_result;
   END;

   FUNCTION get_kenmerk (p_module        IN VARCHAR2,
                         p_kenmerk_key   IN NUMBER,
                         p_link_key      IN NUMBER)
      RETURN VARCHAR2
   AS
      v_kenmerk_type        mld_srtkenmerk.mld_srtkenmerk_kenmerktype%TYPE;
      v_kenmerk_waarde      mld_kenmerkmelding.mld_kenmerkmelding_waarde%TYPE;
      v_kenmerkdomein_key   fac_kenmerkdomein.fac_kenmerkdomein_key%TYPE;
      v_kenmerk_niveau      ins_kenmerk.ins_kenmerk_niveau%TYPE;
   BEGIN
      CASE p_module
         WHEN 'MLD'
         THEN
            SELECT mld_srtkenmerk_kenmerktype,
                   sk.fac_kenmerkdomein_key,
                   km.mld_kenmerkmelding_waarde
              INTO v_kenmerk_type, v_kenmerkdomein_key, v_kenmerk_waarde
              FROM mld_v_aanwezigkenmerkmelding km,
                   mld_kenmerk k,
                   mld_srtkenmerk sk
             WHERE     km.mld_melding_key = p_link_key
                   AND km.mld_kenmerk_key = p_kenmerk_key
                   AND km.mld_kenmerk_key = k.mld_kenmerk_key
                   AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key;
         WHEN 'CNT'
         THEN
            SELECT cnt_srtkenmerk_kenmerktype,
                   sk.fac_kenmerkdomein_key,
                   kc.cnt_kenmerkcontract_waarde
              INTO v_kenmerk_type, v_kenmerkdomein_key, v_kenmerk_waarde
              FROM cnt_kenmerkcontract kc, cnt_kenmerk k, cnt_srtkenmerk sk
             WHERE     kc.cnt_contract_key = p_link_key
                   AND kc.cnt_kenmerk_key = p_kenmerk_key
                   AND kc.cnt_kenmerk_key = k.cnt_kenmerk_key
                   AND k.cnt_srtkenmerk_key = sk.cnt_srtkenmerk_key;
         WHEN 'ALG'
         THEN
            SELECT alg_kenmerk_kenmerktype,
                   k.fac_kenmerkdomein_key,
                   aogk.alg_onrgoedkenmerk_waarde
              INTO v_kenmerk_type, v_kenmerkdomein_key, v_kenmerk_waarde
              FROM alg_onrgoedkenmerk aogk, alg_kenmerk k
             WHERE     aogk.alg_onrgoed_key = p_link_key
                   AND aogk.alg_kenmerk_key = p_kenmerk_key
                   AND aogk.alg_kenmerk_key = k.alg_kenmerk_key;
         WHEN 'INS'
         THEN
            SELECT k.ins_kenmerk_niveau
              INTO v_kenmerk_niveau
              FROM ins_kenmerk k
             WHERE ins_kenmerk_key = p_kenmerk_key;

            IF v_kenmerk_niveau = 'C'
            THEN
               SELECT sk.ins_srtkenmerk_kenmerktype,
                      sk.fac_kenmerkdomein_key,
                      ikds.ins_kmdeelsrtcontr_waarde
                 INTO v_kenmerk_type, v_kenmerkdomein_key, v_kenmerk_waarde
                 FROM ins_kmdeelsrtcontr ikds,
                      ins_kenmerk k,
                      ins_srtkenmerk sk
                WHERE     ikds.ins_kmdeelsrtcontr_key = p_link_key
                      AND ikds.ins_kmdeelsrtcontr_verwijder IS NULL
                      AND ikds.ins_kenmerk_key = p_kenmerk_key
                      AND ikds.ins_kenmerk_key = k.ins_kenmerk_key
                      AND k.ins_srtkenmerk_key = sk.ins_srtkenmerk_key;
            ELSE
               SELECT sk.ins_srtkenmerk_kenmerktype,
                      sk.fac_kenmerkdomein_key,
                      ikd.ins_kenmerkdeel_waarde
                 INTO v_kenmerk_type, v_kenmerkdomein_key, v_kenmerk_waarde
                 FROM ins_kenmerkdeel ikd, ins_kenmerk k, ins_srtkenmerk sk
                WHERE     ikd.ins_deel_key = p_link_key
                      AND ikd.ins_kenmerkdeel_verwijder IS NULL
                      AND ikd.ins_kenmerk_key = p_kenmerk_key
                      AND ikd.ins_kenmerk_key = k.ins_kenmerk_key
                      AND k.ins_srtkenmerk_key = sk.ins_srtkenmerk_key;
            END IF;
      END CASE;

      RETURN get_kenmerkwaarde (v_kenmerk_type,
                                v_kenmerkdomein_key,
                                v_kenmerk_waarde);
   END;
END;
/

--=============================================================================
-- IMPORTFUNCTIES
-------------------------------------------------------------------------------

CREATE OR REPLACE PROCEDURE pchx_import_perslid (p_import_key IN NUMBER)
AS
    v_seq_of_columns VARCHAR(255);
BEGIN
    v_seq_of_columns := '0;0;0;0;0;0;1;2;3;5;4;0;0;0;14;7;8;9;15;12;11;13;0;6;10;0;16;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0';
    prs.import_perslid(p_import_key, v_seq_of_columns, 'AFDELINGSCODE;PERSOONACHTERNAAM;TUSSENVOEGSEL;VOORLETTERS;VOORNAAM;TITEL_AANHEF;TELEFOONNUMMER;MOBIEL;EMAIL;APIKEY;FUNCTIE;PERSONEELSNUMMER;LOGINNAAM;GESLACHT;DIENSTVERBAND%');
END pchx_import_perslid;
/


CREATE OR REPLACE PROCEDURE pchx_update_perslid (
   p_import_key IN NUMBER
) IS

BEGIN
	-- generic update
  prs.update_perslid (p_import_key, 'APIKEY', NULL);

  UPDATE prs_perslid p
     SET prs_perslid_oslogin2 = (SELECT prs_kenmerk1
                                   FROM fac_imp_perslid i
                                  WHERE i.prs_perslid_key = p.prs_perslid_key)
   WHERE EXISTS (SELECT i.prs_perslid_key
                   FROM fac_imp_perslid i
                  WHERE i.prs_perslid_key = p.prs_perslid_key);

END pchx_update_perslid;
/


CREATE OR REPLACE VIEW pchx_v_noti_cntreminder
(
   code,
   sender,
   receiver,
   text,
   key,
   par1,
   par2,
   xkey
)
AS
   SELECT 'CNTMAI',
          '',
          c.prs_perslid_key_eig,
             'Rappèl: '
          || fac_version_cust
          || ' Contract '
          || c.cnt_contract_nummer_intern
          || ' ('
          || c.cnt_contract_omschrijving
          || ' '
          || b.prs_bedrijf_naam
          || ')'
          || ' moet uiterlijk per '
          || TO_CHAR (cnt.cnt_getopzegdatum (c.cnt_contract_key),
                      'DD-MM-YYYY')
          || ' worden verlengd of opgezegd.',
          c.cnt_contract_key,
          c.cnt_contract_nummer_intern,
          cnt.cnt_getopzegdatum (c.cnt_contract_key),
          NULL
     FROM cnt_v_aanwezigcontract c, prs_bedrijf b, fac_version
    WHERE     b.prs_bedrijf_key = c.cnt_prs_bedrijf_key
          AND cnt_contract_verwijder IS NULL
          AND cnt_contract_status = 0
          AND SYSDATE BETWEEN cnt.cnt_getrappeldatum (c.cnt_contract_key)
                          AND  cnt.cnt_getopzegdatum (c.cnt_contract_key);

--PCHD#33769 default reminder ook voor goedkeuringsverzoeken
CREATE OR REPLACE VIEW PCHX_V_NOTI_FINREMINDER
(
   CODE,
   SENDER,
   RECEIVER,
   TEXT,
   KEY,
   PAR1,
   PAR2,
   XKEY
)
AS
     SELECT   'FININF',
              '',
              prs.getkpverantwoordelijke (
                 fin.getfactuurkostenplaats (f.fin_factuur_key),
                 fac.getSetting ('prs_approvemethod'),
                 -1
              )
                 budgethouder,
              'Fiatteringsverzoek voor ' || COUNT (f.fin_factuur_key)
              || DECODE (COUNT (f.fin_factuur_key),
                         1, ' factuur.',
                         ' facturen.'),
              MIN (f.fin_factuur_key), -- Dummy key, althans een willekeurige; FSN#19425
              NULL,
              NULL,
              NULL
       FROM   fin_factuur f
      WHERE       prs.getkpverantwoordelijke (
                     fin.getfactuurkostenplaats (f.fin_factuur_key),
                     fac.getSetting ('prs_approvemethod'),
                     -1
                  ) <> -1                    -- die kan ik geen bericht sturen
              AND f.fin_factuur_statuses_key = 2
              AND f.fin_factuur_verwijder IS NULL
   GROUP BY   prs.getkpverantwoordelijke (
                 fin.getfactuurkostenplaats (f.fin_factuur_key),
                 fac.getSetting ('prs_approvemethod'),
                 -1
              )
   UNION ALL
     SELECT   'FININF',
              '',
              p.prs_perslid_key,
              'Goedkeuringsverzoek voor ' || COUNT (f.fin_factuur_key)
              || DECODE (COUNT (f.fin_factuur_key),
                         1, ' factuur.',
                         ' facturen.'),
              MIN (f.fin_factuur_key),
              NULL,
              NULL,
              NULL
       FROM   fin_factuur f, prs_perslid p
      WHERE       prs_perslid_key_goedkeur IS NOT NULL
              AND fin_factuur_statuses_key = 5
              AND fin_factuur_verwijder IS NULL
              AND p.prs_perslid_key = f.prs_perslid_key_goedkeur
   GROUP BY   prs_perslid_key;


CREATE OR REPLACE VIEW pchx_v_export_exact (
   result,
   result_order
   )
AS
   SELECT fac_rapport_regel, fac_rapport_volgnr
   FROM fac_rapport
   WHERE fac_rapport_node = 'EXACT';

CREATE OR REPLACE VIEW pchx_v_export_exact650 (
   result,
   result_order
   )
AS
   SELECT fac_rapport_regel, fac_rapport_volgnr
   FROM fac_rapport
   WHERE fac_rapport_node = 'EXACT650';


CREATE OR REPLACE VIEW pchx_v_factuur_gegevens
(
   fin_factuur_key,
   opdracht_id,
   fin_factuur_datum,
   fin_factuur_nr,
   prs_bedrijf_key_org,
   prs_bedrijf_key_afw,
   prs_bedrijf_key,
   fin_factuurregel_omschrijving,
   fin_factuurregel_totaal,
   fin_factuurregel_btw,
   fin_btwtabelwaarde_code,
   fin_btwtabelwaarde_key,
   fin_factuurregel_nr,
   fin_factuurregel_key,
   fin_factuur_debiteur_nr,
   fin_factuur_opmerking,
   fin_factuur_boekmaand,
   opdr_datum,
   boekstuknummer,
   project_nummer,
   project_naam,
   prs_kostensoort_oms,
   prs_kostensoort_refcode,
   vk_prs_kostensoort_refcode,
   prs_kostensoort_key,
   prs_kostenplaats_key,
   prs_kostenplaats_org,
   mld_opdr_key,
   cnt_contract_key,
   bes_bestelopdr_key,
   fin_factuur_statuses_key,
   fin_factuur_statuses_org_key,
   lev_kpn,
   reknr,
   kstdrcode,
   administratie,
   afwboekdatum
)
AS
   SELECT f.fin_factuur_key,
          DECODE (
             c.cnt_contract_key,
             NULL,
             DECODE (
                bo.bes_bestelopdr_key,
                NULL,
                (SELECT    sd.ins_srtdiscipline_prefix
                        || m.mld_melding_key
                        || '/'
                        || o.mld_opdr_bedrijfopdr_volgnr
                   FROM mld_melding m,
                        mld_stdmelding std,
                        ins_tab_discipline d,
                        ins_srtdiscipline sd
                  WHERE     m.mld_melding_key = o.mld_melding_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),
                bo.bes_bestelopdr_id),
             'C' || TO_CHAR (cnt_contract_nummer_intern))
             opdracht_id,
          DECODE (TO_CHAR (f.fin_factuur_datum, 'yyyy'),
                  '2010', TO_DATE ('20110102', 'YYYYMMDD'),
                  '2011', TO_DATE ('20120102', 'YYYYMMDD'),
                  f.fin_factuur_datum),
          f.fin_factuur_nr,
          b_f.prs_bedrijf_key prs_bedrijf_key_afw,
          COALESCE (b_c.prs_bedrijf_key,
                    COALESCE (b_o.prs_bedrijf_key, b_b.prs_bedrijf_key))
             prs_bedrijf_key_org,
          COALESCE (
             b_f.prs_bedrijf_key,
             COALESCE (b_c.prs_bedrijf_key,
                       COALESCE (b_o.prs_bedrijf_key, b_b.prs_bedrijf_key)))
             prs_bedrijf_key,
          fin_factuurregel_omschrijving,
          fr.fin_factuurregel_totaal,
          COALESCE (
             fr_btw.afw_btw_bedrag,
             ROUND (
                fr.fin_factuurregel_totaal
                * DECODE (btw.fin_btwtabelwaarde_verlegd,
                          1, 0,
                          btw.fin_btwtabelwaarde_perc / 100),
                2))
             fin_factuurregel_btw,
          btw.fin_btwtabelwaarde_code,
          btw.fin_btwtabelwaarde_key,
          fr.fin_factuurregel_nr,
          fr.fin_factuurregel_key,
          f.fin_factuur_debiteur_nr,
          f.fin_factuur_opmerking,
          f.fin_factuur_boekmaand,
          COALESCE (
             o.mld_opdr_datumbegin,
             COALESCE (c.cnt_contract_looptijd_tot, bo.bes_bestelopdr_datum)),
          (SELECT fin_kenmerkfactuur_waarde
             FROM fin_kenmerkfactuur fk
            WHERE fk.fin_factuur_key = f.fin_factuur_key
                  AND fk.fin_kenmerk_key = 3)
             boekstuknummer,
          (SELECT fac_usrdata_code
             FROM fin_kenmerkfactregel kfr, fac_usrdata ud
            WHERE fin_kenmerk_key = 61
                  AND kfr.fin_factuurregel_key = fr.fin_factuurregel_key
                  AND fac.safe_to_number (fin_kenmerkfactregel_waarde) =
                        ud.fac_usrdata_key)
             projectnummer,
          (SELECT fac_usrdata_omschr
             FROM fin_kenmerkfactregel kfr, fac_usrdata ud
            WHERE fin_kenmerk_key = 61
                  AND kfr.fin_factuurregel_key = fr.fin_factuurregel_key
                  AND fac.safe_to_number (fin_kenmerkfactregel_waarde) =
                        ud.fac_usrdata_key)
             projectnaam,
          COALESCE (kr.prs_kostensoort_oms, k.prs_kostensoort_oms),
          k.prs_kostensoort_refcode,
          'Onbekend' vk_prs_kostensoort_refcode,
          COALESCE (kr.prs_kostensoort_key, k.prs_kostensoort_key),
          COALESCE (
             (SELECT prs_kostenplaats_key
                FROM prs_kostenplaats kpr, fin_kenmerkfactregel kfr
               WHERE kfr.fin_kenmerk_key = 26
                     AND kfr.fin_factuurregel_key = fr.fin_factuurregel_key
                     AND fac.safe_to_number (fin_kenmerkfactregel_waarde) =
                           kpr.prs_kostenplaats_key),
             o.prs_kostenplaats_key,
             c.prs_kostenplaats_key,
             (SELECT DISTINCT b.prs_kostenplaats_key
                FROM bes_bestelling b,
                     bes_bestelopdr_item boi,
                     bes_bestelling_item bi
               WHERE bo.bes_bestelopdr_key = boi.bes_bestelopdr_key
                     AND boi.bes_bestelopdr_item_key =
                           bi.bes_bestelopdr_item_key
                     AND bi.bes_bestelling_key = b.bes_bestelling_key))
             prs_kostenplaats_key,
          COALESCE (
             o.prs_kostenplaats_key,
             c.prs_kostenplaats_key,
             (SELECT DISTINCT b.prs_kostenplaats_key
                FROM bes_bestelling b,
                     bes_bestelopdr_item boi,
                     bes_bestelling_item bi
               WHERE bo.bes_bestelopdr_key = boi.bes_bestelopdr_key
                     AND boi.bes_bestelopdr_item_key =
                           bi.bes_bestelopdr_item_key
                     AND bi.bes_bestelling_key = b.bes_bestelling_key))
             prs_kostenplaats_org,
          o.mld_opdr_key,
          c.cnt_contract_key,
          bo.bes_bestelopdr_key,
          ( -- status van de factuur is ingevoerd als er facturen van dezelfde leverancier en nummer zijn
                              -- met status ingevoerd, afgewezen of incompleet
           SELECT DECODE (COUNT ( * ), 0, f.fin_factuur_statuses_key, 2)
             FROM fin_factuur f_t,
                  cnt_contract c_t,
                  bes_bestelopdr b_t,
                  mld_opdr o_t
            WHERE     f_t.fin_factuur_verwijder IS NULL
                  AND f_t.mld_opdr_key = o_t.mld_opdr_key(+)
                  AND f_t.cnt_contract_key = c_t.cnt_contract_key(+)
                  AND f_t.bes_bestelopdr_key = b_t.bes_bestelopdr_key(+)
                  AND COALESCE (
                        o_t.mld_uitvoerende_keys,
                        COALESCE (b_t.prs_bedrijf_key,
                                  c_t.cnt_prs_bedrijf_key)) =
                        COALESCE (
                           o.mld_uitvoerende_keys,
                           COALESCE (bo.prs_bedrijf_key,
                                     c.cnt_prs_bedrijf_key))
                  AND f.fin_factuur_nr = f_t.fin_factuur_nr
                  AND f_t.fin_factuur_statuses_key IN (1, 2, 3, 5) -- Afgewezen,Ingevoerd,Incompleet,TerGoedkeuring
                  AND f.fin_factuur_statuses_key = 6)
             fin_factuur_statuses_key,
          f.fin_factuur_statuses_key fin_factuur_statuses_org_key,
          lk.prs_kostenplaats_nr lev_kpn,
          rn.reknr,
          kd.kstdrcode,
          (SELECT fin_kenmerkfactuur_waarde
             FROM fin_kenmerkfactuur fk
            WHERE fk.fin_factuur_key = f.fin_factuur_key
                  AND fk.fin_kenmerk_key = 2)
             administratie,
          (SELECT fac.safe_to_date (fin_kenmerkfactregel_waarde,
                                    'DD-MM-YYYY')
                     afwboekdatum
             FROM fin_kenmerkfactregel fkf, fin_kenmerk fk
            WHERE     fk.fin_kenmerk_key = fkf.fin_kenmerk_key
                  AND fkf.fin_kenmerkfactregel_verwijder IS NULL
                  AND fk.fin_kenmerk_verwijder IS NULL
                  AND UPPER (fk.fin_kenmerk_omschrijving) = 'AFW. BOEKDATUM'
                  AND fkf.fin_factuurregel_key = fr.fin_factuurregel_key)
             afwboekdatum
     FROM fin_factuur f,
          fin_factuurregel fr,
          fin_btwtabelwaarde btw,
          mld_opdr o,
          mld_typeopdr ot,
          cnt_contract c,
          bes_bestelopdr bo,
          prs_bedrijf b_o,
          prs_bedrijf b_c,
          prs_bedrijf b_b,
          (SELECT b.*, fin_factuur_key
             FROM fin_kenmerkfactuur km, prs_bedrijf b
            WHERE fin_kenmerk_key = 41
                  AND fac.safe_to_number (km.fin_kenmerkfactuur_waarde) =
                        b.prs_bedrijf_key) b_f,           -- Afwijkend bedrijf
          (SELECT kfr.fin_factuurregel_key,
                  fac.safe_to_number (fin_kenmerkfactregel_waarde)
                     afw_btw_bedrag
             FROM fin_kenmerkfactregel kfr
            WHERE fin_kenmerk_key = 4) fr_btw,          -- Afwijkend btwbedrag
          prs_kostensoort k,
          prs_kostensoort kr,
          prs_kostensoortgrp kg,
          prs_kostenplaats lk,
          pchx_v_kenm_kstdrcode kd,
          pchx_v_kenm_reknr rn
    WHERE     f.fin_factuur_key = fr.fin_factuur_key
          AND fr.fin_btwtabelwaarde_key = btw.fin_btwtabelwaarde_key
          AND f.mld_opdr_key = o.mld_opdr_key(+)
          AND o.mld_typeopdr_key = ot.mld_typeopdr_key(+)
          AND f.cnt_contract_key = c.cnt_contract_key(+)
          AND f.bes_bestelopdr_key = bo.bes_bestelopdr_key(+)
          AND bo.prs_bedrijf_key = b_b.prs_bedrijf_key(+)
          AND o.mld_uitvoerende_keys = b_o.prs_bedrijf_key(+)
          AND c.cnt_prs_bedrijf_key = b_c.prs_bedrijf_key(+)
          AND f.fin_factuur_key = b_f.fin_factuur_key(+)
          AND f.prs_kostensoort_key = k.prs_kostensoort_key(+)
          AND k.prs_kostenplaats_key = lk.prs_kostenplaats_key(+)
          AND k.prs_kostensoortgrp_key = kg.prs_kostensoortgrp_key(+)
          AND fr.prs_kostensoort_key = kr.prs_kostensoort_key(+)
          AND fr.fin_factuurregel_key = kd.fin_factuurregel_key(+)
          AND fr.fin_factuurregel_key = rn.fin_factuurregel_key(+)
          AND fr.fin_factuurregel_key = fr_btw.fin_factuurregel_key(+)
          AND f.fin_factuur_verwijder IS NULL;


CREATE OR REPLACE VIEW pchx_v_rap_factuurgegevens
(
   html_factuur_key,
   fclt_f_boekstuknummer,
   factuurdatum,
   referentie,
   factuurnummer,
   bedrag,
   fclt_f_bedrijf
)
AS
     SELECT '<a class="details" onclick=''FcltMgr.openDetail("appl/fin/fin_factuur.asp?urole=bo&'
            || 'fin_key='
            || fin_factuur_key
            || '")''>'
            || fin_factuur_key
            || '</a>'
               fin_factuur_key,
            boekstuknummer,
            fin_factuur_datum,
            opdracht_id,
            fin_factuur_nr,
            SUM (fin_factuurregel_totaal) totaal,
            b.prs_bedrijf_naam
       FROM pchx_v_factuur_gegevens fg, prs_bedrijf b
      WHERE fg.prs_bedrijf_key = b.prs_bedrijf_key(+)
   GROUP BY fin_factuur_key,
            boekstuknummer,
            opdracht_id,
            fin_factuur_datum,
            fin_factuur_nr,
            prs_bedrijf_naam;

CREATE OR REPLACE VIEW pchx_v_rap_factuurgegevens_fin
(
   fin_factuur_key,
   nr,
   factuurdatum,
   uitvoerende,
   leveranciernr,
   factuurnr,
   excl_btw,
   incl_btw,
   status,
   afwbedrijf,
   grootboekrekening,
   kostendrager,
   factuurregel_omschrijving,
   afw_boekdatum
)
AS
  SELECT fin_factuur_key,
         TO_CHAR (fin_factuur_key),
         fin_factuur_datum,
         borg.prs_bedrijf_naam,
         borg.prs_leverancier_nr,
         fin_factuur_nr,
         SUM (fin_factuurregel_totaal),
         SUM (fin_factuurregel_totaal + fin_factuurregel_btw),
         DECODE (fin_factuur_statuses_org_key,
                 1, 'Afgewezen',
                 2, 'Ingevoerd',
                 5, 'Ter goedkeuring',
                 6, 'Akkoord')
            Status,
         bafw.prs_bedrijf_naam,
         reknr,
         kstdrcode,
         fin_factuurregel_omschrijving,
         afwboekdatum
    FROM pchx_v_factuur_gegevens f,
         prs_bedrijf borg,
         prs_bedrijf bafw
   WHERE     borg.prs_bedrijf_key = f.prs_bedrijf_key_org
         AND bafw.prs_bedrijf_key = f.prs_bedrijf_key_afw(+)
         AND f.fin_factuur_statuses_org_key IN (1, 2, 5, 6)
GROUP BY fin_factuur_key,
         fin_factuur_datum,
         borg.prs_bedrijf_naam,
         borg.prs_leverancier_nr,
         fin_factuur_nr,
         fin_factuur_statuses_org_key,
         bafw.prs_bedrijf_naam,
         reknr,
         kstdrcode,
         fin_factuurregel_omschrijving,
         afwboekdatum;

-------------------------------------------------------------------------------
-- EXPORTFUNCTIE - Export exact
-------------------------------------------------------------------------------
CREATE OR REPLACE VIEW pchx_v_aanwezigfactuur
(
   FIN_FACTUUR_KEY,
   FIN_FACTUUR_NR,
   FIN_FACTUUR_TOTAAL,
   FIN_FACTUUR_TOTAAL_BTW,
   MLD_OPDR_KEY,
   CNT_CONTRACT_KEY,
   BES_BESTELOPDR_KEY,
   PRS_PERSLID_KEY_USER,
   FIN_FACTUUR_DATUM,
   FIN_FACTUUR_BOEKMAAND,
   FIN_FACTUUR_DEBITEUR_NR,
   PRS_KOSTENSOORT_KEY,
   FIN_FACTUUR_OPMERKING,
   FIN_FACTUUR_STATUSES_KEY,
   FIN_FACTUUR_VERWIJDER
)
AS
   SELECT FIN_FACTUUR_KEY,
          FIN_FACTUUR_NR,
          FIN_FACTUUR_TOTAAL,
          FIN_FACTUUR_TOTAAL_BTW,
          MLD_OPDR_KEY,
          CNT_CONTRACT_KEY,
          BES_BESTELOPDR_KEY,
          PRS_PERSLID_KEY_USER,
          FIN_FACTUUR_DATUM,
          FIN_FACTUUR_BOEKMAAND,
          FIN_FACTUUR_DEBITEUR_NR,
          PRS_KOSTENSOORT_KEY,
          FIN_FACTUUR_OPMERKING,
          FIN_FACTUUR_STATUSES_KEY,
          FIN_FACTUUR_VERWIJDER
     FROM fin_factuur
    WHERE fin_factuur_verwijder IS NULL AND fin_factuur_statuses_key > 1;

CREATE OR REPLACE VIEW pchx_v_kenm_reknr
(
   fin_factuurregel_key,
   reknr
)
AS
   SELECT fr1.fin_factuurregel_key,
          COALESCE (
             (SELECT fac_usrdata_code
                FROM fin_kenmerkfactregel kfr1, fac_usrdata ud
               WHERE fin_kenmerk_key = 24
                 AND kfr1.fin_factuurregel_key = fr1.fin_factuurregel_key
                 AND fac.safe_to_number (fin_kenmerkfactregel_waarde) =
                        ud.fac_usrdata_key),
             (SELECT fac_usrdata_code
                FROM fin_kenmerkfactuur kf1, fac_usrdata ud
               WHERE fin_kenmerk_key = 21
                 AND kf1.fin_factuur_key = fr1.fin_factuur_key
                 AND fac.safe_to_number (fin_kenmerkfactuur_waarde) =
                        ud.fac_usrdata_key))
     FROM fin_factuurregel fr1;

CREATE OR REPLACE VIEW pchx_v_kenm_kstdrcode
(
   fin_factuurregel_key,
   kstdrcode
)
AS
   SELECT fr1.fin_factuurregel_key,
          COALESCE (
             (SELECT fac_usrdata_code
                FROM fin_kenmerkfactregel kfr1, fac_usrdata ud
               WHERE fin_kenmerk_key = 25
                 AND kfr1.fin_factuurregel_key = fr1.fin_factuurregel_key
                 AND fac.safe_to_number (fin_kenmerkfactregel_waarde) =
                        ud.fac_usrdata_key),
             (SELECT fac_usrdata_code
                FROM fin_kenmerkfactuur kf1, fac_usrdata ud
               WHERE fin_kenmerk_key = 22
                 AND kf1.fin_factuur_key = fr1.fin_factuur_key
                 AND fac.safe_to_number (fin_kenmerkfactuur_waarde) =
                        ud.fac_usrdata_key))
     FROM fin_factuurregel fr1;


CREATE OR REPLACE VIEW pchx_v_bron_export_exact_xml
(
   bkstnr,
   fact_oms25,
   regel_oms25,
   datum,
   afw_datum,
   crdnr,
   projectnr,
   projectnaam,
   bedrag_txt,
   bedrag,
   bedrag_incl,
   betaalref,
   itemcode,
   reknr,
   kstdrcode,
   kstplcode,
   btw_code,
   lev_kpn,
   administratie,
   fin_factuur_key
)
AS
   SELECT (SELECT fin_kenmerkfactuur_waarde kf
             FROM fin_kenmerkfactuur kf
            WHERE kf.fin_factuur_key = fg.fin_factuur_key
                  AND kf.fin_kenmerk_key = 3)                -- boekstuknummer
             bkstnr,
          REPLACE (fin_factuur_opmerking, ',', '') fact_oms25,
             opdracht_id
          || ' - '
          || REPLACE (fin_factuurregel_omschrijving, ',', '')
             regel_oms25,
          TO_CHAR (fin_factuur_datum, 'yyyy-mm-dd') datum,
          (SELECT TO_CHAR (
                     fac.safe_to_date (fin_kenmerkfactregel_waarde,
                                       'dd-mm-yyyy'),
                     'yyyy-mm-dd')
             FROM fin_kenmerkfactregel kfr
            WHERE kfr.fin_factuurregel_key = fg.fin_factuurregel_key
                  AND kfr.fin_kenmerk_key = 23)               -- afw boekdatum
             afw_datum,
          (SELECT prs_leverancier_nr
             FROM prs_bedrijf b
            WHERE b.prs_bedrijf_key = fg.prs_bedrijf_key)
             crdnr,
          project_nummer,
          project_naam,
          REPLACE (TO_CHAR (fin_factuurregel_totaal), ',', '.') bedrag_txt,
          fin_factuurregel_totaal bedrag,
          fin_factuurregel_totaal + fin_factuurregel_btw bedrag_incl,
          fin_factuur_nr || '/' || fin_factuur_debiteur_nr betaalref,
          prs_kostensoort_oms itemcode,
          reknr,
          kstdrcode,
          (SELECT prs_kostenplaats_nr
             FROM prs_kostenplaats kp
            WHERE kp.prs_kostenplaats_key = fg.prs_kostenplaats_key)
             kstplcode,
          fin_btwtabelwaarde_code btw_code,
          lev_kpn,
          administratie,
          fin_factuur_key
     FROM pchx_v_factuur_gegevens fg
    WHERE fin_factuur_statuses_key = 6;




-- Procedure om alle facturen te exporteren naar exact voor de geselecteerde administratie.
CREATE OR REPLACE PROCEDURE pchx_select_exact_adm (p_applname IN VARCHAR2,
                                                   p_applrun IN VARCHAR2,
                                                   p_administratie IN VARCHAR2
)
AS
   CURSOR c
   IS
       SELECT bkstnr, datum, max(fact_oms25) fact_oms25
         FROM pchx_v_bron_export_exact_xml
        WHERE administratie = p_administratie
        GROUP BY bkstnr, datum;

   CURSOR c_sub (c_bkstnr VARCHAR2)
   IS
       SELECT *
         FROM pchx_v_bron_export_exact_xml
        WHERE administratie = p_administratie
          AND bkstnr = c_bkstnr;

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

BEGIN

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

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

   DELETE fac_rapport
    WHERE fac_rapport_node = v_bestand;

   -- Bewaar de factuur keys in een tijdelijke tabel zodat bij het verwerken (nieuwe export)
   -- deze keys gebruikt kunnen worden.
   -- Verwijder alleen de records van de geselecteerde administratie
   DELETE pchx_exp_factuur e
    WHERE administratie = p_administratie;

   INSERT INTO pchx_exp_factuur (fin_factuur_key, administratie)
   ( SELECT DISTINCT fin_factuur_key, p_administratie
       FROM pchx_v_factuur_gegevens
      WHERE fin_factuur_statuses_key = 6
        AND administratie = p_administratie
   );


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

   FOR rec IN c
   LOOP
      BEGIN
         -- bepalen dagboeknr
         v_dagboeknr := SUBSTR(rec.bkstnr, 3,2);

         v_count := 1; -- dummy
         IF v_count <> 0
         THEN
            pchx.add_xml_row (v_bestand, '<GLEntry status="E" entry="' || xml.char_to_html(rec.bkstnr) || '">');
               pchx.add_xml_element (v_bestand, 'Description', rec.fact_oms25);
               pchx.add_xml_element (v_bestand, 'Date', rec.datum);
               pchx.add_xml_element (v_bestand, 'DocumentDate', TO_CHAR(SYSDATE, 'YYYY-MM-DD') );
               pchx.add_xml_row (v_bestand, '<Journal type="I" code="' || v_dagboeknr || '"/>');
                  v_sub_count := 1;
                  FOR rec1 IN c_sub (rec.bkstnr)
                  LOOP
                     BEGIN
                        pchx.add_xml_row (v_bestand, '<FinEntryLine number="' || v_sub_count || '" subtype="T" type="N">');
                           pchx.add_xml_element (v_bestand, 'Date', COALESCE(rec1.afw_datum, rec1.datum));
                           pchx.add_xml_row (v_bestand, '<GLAccount code="' || xml.char_to_html(rec1.reknr) || '"/>');
                           IF pchx.get_user = 'PCHD' THEN
                              pchx.add_xml_row (v_bestand, '<Project code="' || rec1.projectnr || '" type="I" status="A">');
                                 pchx.add_xml_element (v_bestand, 'Description', rec1.projectnaam);
                              pchx.add_xml_row (v_bestand, '</Project>');
                           END IF;
                           pchx.add_xml_element (v_bestand, 'Description', rec1.regel_oms25);
                           IF pchx.get_user = 'PCHD' or pchx.get_user = 'PCHS' or pchx.get_user = 'PCHP' or pchx.get_user = 'PCHY'
                           THEN
                              pchx.add_xml_row (v_bestand, '<Costcenter code="' || xml.char_to_html(rec1.kstplcode) || '"/>');
                           END IF;
                           -- LET OP: PCHA en PCHW gebruiken het projectcode veld om de kostenplaats te vullen in Exact
                           -- De Facilitor kostenplaats wordt bij deze accounts al gebruikt voor de klantkostenplaats.
                           IF pchx.get_user = 'PCHA' or pchx.get_user = 'PCHW'
                           THEN
                              pchx.add_xml_row (v_bestand, '<Costcenter code="' || xml.char_to_html(rec1.projectnr) || '"/>');
                           END IF;
                           IF pchx.get_user = 'PCHD'
                           THEN
                              pchx.add_xml_row (v_bestand, '<Costunit code="' || xml.char_to_html(rec1.kstdrcode) || '"/>');
                           END IF;
                           pchx.add_xml_row (v_bestand, '<Creditor number="' || xml.char_to_html(rec1.crdnr) || '"/>');
                           IF pchx.get_user = 'PCHD'
                           THEN
                              pchx.add_xml_row (v_bestand, '<Item code="' || xml.char_to_html(rec1.itemcode) || '"/>');
                           END IF;
                           pchx.add_xml_row (v_bestand, '<Amount>');
                              pchx.add_xml_element (v_bestand, 'Debit', rec1.bedrag_txt);
                              pchx.add_xml_row (v_bestand, '<VAT code="' || xml.char_to_html(rec1.btw_code) || '"/>');
                           pchx.add_xml_row (v_bestand, '</Amount>');
                           pchx.add_xml_row (v_bestand, '<Payment>');
                              pchx.add_xml_element (v_bestand, 'Reference', rec1.betaalref);
                              pchx.add_xml_element (v_bestand, 'InvoiceNumber', rec1.bkstnr);
                           pchx.add_xml_row (v_bestand, '</Payment>');
                           pchx.add_xml_row (v_bestand, '<FinReferences>');
                              pchx.add_xml_element (v_bestand, 'YourRef', rec1.betaalref);
                              pchx.add_xml_element (v_bestand, 'DocumentDate', TO_CHAR(SYSDATE, 'YYYY-MM-DD') );
                           pchx.add_xml_row (v_bestand, '</FinReferences>');
                        pchx.add_xml_row (v_bestand, '</FinEntryLine>');
                        v_sub_count := v_sub_count + 1;
                        v_amount_sum   := v_amount_sum + rec1.bedrag;
                        v_amount_sum_incl   := v_amount_sum_incl + rec1.bedrag_incl;
                     END;
                  END LOOP;
            pchx.add_xml_row (v_bestand, '</GLEntry>');
         END IF;
      END;
      v_order_count  := v_order_count + 1;
   END LOOP;

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

END;
/

CREATE OR REPLACE PROCEDURE pchx_select_exact650 (p_applname IN VARCHAR2,
                                                  p_applrun IN VARCHAR2)
AS
BEGIN
   pchx_select_exact_adm (p_applname, p_applrun, '650');
END;
/

CREATE OR REPLACE PROCEDURE pchx_select_exact (p_applname IN VARCHAR2,
                                               p_applrun IN VARCHAR2)
AS
BEGIN
   pchx_select_exact_adm (p_applname, p_applrun, pchx.get_administratienr);
END;
/

-------------------------------------------------------------------------------
-- EXPORTFUNCTIE - Export exact verwerk
-------------------------------------------------------------------------------

CREATE OR REPLACE VIEW pchx_v_exp_verwerk_exact_adm (
   result,
   result_order,
   administratie
   )
AS
SELECT REPLACE(REPLACE(f.fin_factuur_key
       || ';'
       || opdracht_id
       || ';'
       || fin_factuur_datum
       || ';'
       || fin_factuur_nr
       || ';'
       || prs_bedrijf_key
       || ';'
       || fin_factuurregel_totaal
       || ';'
       || fin_factuurregel_btw
       || ';'
       || fin_factuurregel_nr
       || ';'
       || fin_factuur_debiteur_nr
       || ';'
       || project_nummer
       || ';'
       || prs_kostensoort_refcode
       || ';'
       || mld_opdr_key
       || ';'
       || cnt_contract_key
      ,CHR (13), ''), CHR (10), '<ret>'),
      f.fin_factuur_key,
      f.administratie
  FROM pchx_exp_factuur f,
       pchx_v_factuur_gegevens fg
 WHERE f.fin_factuur_key = fg.fin_factuur_key
   AND fg.fin_factuur_statuses_key = 6;

CREATE OR REPLACE VIEW pchx_v_export_verwerk_exact650 (
   result,
   result_order
   )
AS
   SELECT result, result_order
     FROM pchx_v_exp_verwerk_exact_adm
    WHERE administratie = '650';

CREATE OR REPLACE VIEW pchx_v_export_verwerk_exact (
   result,
   result_order
   )
AS
   SELECT result, result_order
     FROM pchx_v_exp_verwerk_exact_adm
    WHERE administratie = pchx.get_administratienr;


-- Procedure om alle geexporteerde facturen naar status verwerkt te zetten.
CREATE OR REPLACE PROCEDURE pchx_export_verwerk_exact_adm (
   p_applname   IN   VARCHAR2,
   p_applrun    IN   VARCHAR2,
   p_filedir    IN   VARCHAR2,
   p_filename   IN   VARCHAR2,
   p_administratie IN VARCHAR2
)
AS
   CURSOR c_fact
   IS
     SELECT f.fin_factuur_key
       FROM pchx_exp_factuur f
          , pchx_v_factuur_gegevens fg
      WHERE f.fin_factuur_key = fg.fin_factuur_key
        AND fg.fin_factuur_statuses_key = 6
        AND f.administratie = p_administratie;

   CURSOR c_opdr
   IS
     SELECT distinct fg.mld_opdr_key, mld_statusopdr_key, m.mld_melding_status, m.mld_melding_key
       FROM pchx_exp_factuur f
          , pchx_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 fg.fin_factuur_statuses_key = 6
        AND f.administratie = p_administratie;

   CURSOR c_bes
   IS
     SELECT bo.*
       FROM pchx_exp_factuur f
          , pchx_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 fg.fin_factuur_statuses_key = 6
        AND f.administratie = p_administratie;

   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
   v_aanvrager := 4;

   v_logdate := SYSDATE;

   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 pchx_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;
   DELETE pchx_exp_factuur
    WHERE administratie = p_administratie;
END;
/

CREATE OR REPLACE PROCEDURE pchx_export_verwerk_exact650 (
   p_applname   IN   VARCHAR2,
   p_applrun    IN   VARCHAR2,
   p_filedir    IN   VARCHAR2,
   p_filename   IN   VARCHAR2)
AS
BEGIN
   pchx_export_verwerk_exact_adm (p_applname, p_applrun, p_filedir, p_filename, '650');
END;
/

CREATE OR REPLACE PROCEDURE pchx_export_verwerk_exact (
   p_applname   IN   VARCHAR2,
   p_applrun    IN   VARCHAR2,
   p_filedir    IN   VARCHAR2,
   p_filename   IN   VARCHAR2)
AS
BEGIN
   pchx_export_verwerk_exact_adm (p_applname, p_applrun, p_filedir, p_filename, pchx.get_administratienr);
END;
/


CREATE OR REPLACE PROCEDURE pchx_import_factuur (p_import_key IN NUMBER)
AS
   CURSOR c_cursor
   IS
        SELECT *
          FROM fac_imp_file
         WHERE fac_import_key = p_import_key
      ORDER BY fac_imp_file_index;

   v_newline          VARCHAR2 (1000);                                                                   -- Import line
   v_field            VARCHAR2 (100);                                                                   -- Import field
   v_fielddelimitor   VARCHAR2 (1);
   v_errormsg         VARCHAR (200);
   v_errorhint        VARCHAR (200);
   oracle_err_num     NUMBER;
   oracle_err_mes     VARCHAR2 (200);
   v_barcode          VARCHAR2 (12);
BEGIN
   v_fielddelimitor := ';';

   DELETE pchx_imp_factuur
    WHERE fac_import_key <> p_import_key;

   FOR rec IN c_cursor
   LOOP
      BEGIN
         v_newline := rec.fac_imp_file_line;

         fac.imp_getfield (v_newline, v_fielddelimitor, v_barcode);

         IF LENGTH (v_barcode) = 12
         THEN
            INSERT INTO pchx_imp_factuur (fac_import_key, barcode)
                VALUES (p_import_key, v_barcode);
         ELSE
            -- na een geldige barcode volgt altijd nog een linefeed op de volgende regel.
            IF ASCII(SUBSTR(v_barcode, 1, 1)) <> 10
            THEN
               fac.imp_writelog (
                  p_import_key,
                  'E',
                  'Factuurimport: Geen geldige barcode aangetroffen: '
                  || v_barcode,
                  '');
            END IF;
         END IF;
      END;
   END LOOP;

   -- verwijder de entries uit de imp_file omdat er meerdere bestanden in één run ingelezen kunnen worden.
   DELETE fac_imp_file WHERE fac_import_key = p_import_key;
EXCEPTION
   WHEN OTHERS
   THEN
      oracle_err_num := SQLCODE;
      oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
      v_errormsg :=
         'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
      fac.imp_writelog (p_import_key,
                        'E',
                        SUBSTR (v_errormsg, 1, 1000),
                        '');
END;
/


CREATE OR REPLACE PROCEDURE pchx_update_factuur (p_import_key IN NUMBER)
AS
   CURSOR c_cursor
   IS
      SELECT *
        FROM pchx_imp_factuur
       WHERE fac_import_key = p_import_key;

   v_factuur_key      NUMBER (10);
   v_errormsg         VARCHAR (200);
   v_errorhint        VARCHAR (200);
   oracle_err_num     NUMBER;
   oracle_err_mes     VARCHAR2 (200);
BEGIN
   FOR rec IN c_cursor
   LOOP
      BEGIN
         INSERT INTO fin_factuur (fin_factuur_statuses_key,
                                  fin_factuur_datum,
                                  fin_factuur_totaal_btw,
                                  fin_factuur_nr)
             VALUES (3,
                     SYSDATE,
                     0,
                     ' ')
          RETURNING fin_factuur_key
               INTO v_factuur_key;

         -- link naar gescand document
         INSERT INTO fin_kenmerkfactuur (fin_factuur_key,
                                         fin_kenmerk_key,
                                         fin_kenmerkfactuur_waarde)
             VALUES (v_factuur_key,
                     1,
                        'http://vbwnlms326/inkoopfacturen/'
                     || rec.barcode
                     || '.pdf');

         -- administratie
         INSERT INTO fin_kenmerkfactuur (fin_factuur_key,
                                         fin_kenmerk_key,
                                         fin_kenmerkfactuur_waarde)
             VALUES (v_factuur_key, 2, SUBSTR (rec.barcode, 2, 3));

         -- boekstuknummer
         INSERT INTO fin_kenmerkfactuur (fin_factuur_key,
                                         fin_kenmerk_key,
                                         fin_kenmerkfactuur_waarde)
             VALUES (v_factuur_key, 3, SUBSTR (rec.barcode, 5, 8));
      END;
   END LOOP;
EXCEPTION
   WHEN OTHERS
   THEN
      oracle_err_num := SQLCODE;
      oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
      v_errormsg :=
         'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
      fac.imp_writelog (p_import_key,
                        'E',
                        SUBSTR (v_errormsg, 1, 1000),
                        '');
END;
/


CREATE OR REPLACE VIEW pchx_v_rap_usrdata
(
   fac_usrtab_key,
   fac_usrtab_omschrijving,
   fac_usrdata_key,
   fac_usrdata_code,
   fac_usrdata_omschr,
   fac_usrdata_prijs,
   fac_usrdata_volgnr,
   fac_usrdata_parentkey,
   fac_usrdata_vervaldatum
)
AS
   SELECT ut.fac_usrtab_key,
          ut.fac_usrtab_omschrijving,
          ud.fac_usrdata_key,
          ud.fac_usrdata_code,
          ud.fac_usrdata_omschr,
          fac_usrdata_prijs,
          fac_usrdata_volgnr,
          fac_usrdata_parentkey,
          fac_usrdata_vervaldatum
     FROM fac_usrtab ut, fac_usrdata ud
    WHERE ut.fac_usrtab_key = ud.fac_usrtab_key;


CREATE OR REPLACE PROCEDURE pchx_import_usrdata (p_import_key IN NUMBER)
AS
   CURSOR c_cursor
   IS
        SELECT *
          FROM fac_imp_file
         WHERE fac_import_key = p_import_key
      ORDER BY fac_imp_file_index;

   v_newline                   fac_imp_file.fac_imp_file_line%TYPE;                  -- Import line
   v_field                     VARCHAR2 (100);                                       -- Import field
   v_fielddelimitor            VARCHAR2 (1);
   v_errormsg                  VARCHAR (200);
   v_errorhint                 VARCHAR (200);
   v_error                     BOOLEAN;
   v_header_found              BOOLEAN;
   v_oracle_err_num            NUMBER;
   v_oracle_err_mes            VARCHAR2 (200);
   v_usrtab_key_txt            VARCHAR2 (100);
   v_usrtab_key                fac_usrtab.fac_usrtab_key%TYPE;
   v_usrtab_naam               fac_usrtab.fac_usrtab_naam%TYPE;
   v_usrdata_key_txt           VARCHAR2 (100);
   v_usrdata_key               fac_usrdata.fac_usrdata_key%TYPE;
   v_usrdata_code              fac_usrdata.fac_usrdata_code%TYPE;
   v_usrdata_omschr            fac_usrdata.fac_usrdata_omschr%TYPE;
   v_usrdata_volgnr_txt        VARCHAR2 (100);
   v_usrdata_volgnr            fac_usrdata.fac_usrdata_volgnr%TYPE;
   v_usrdata_prijs_txt         VARCHAR2 (100);
   v_usrdata_prijs             fac_usrdata.fac_usrdata_prijs%TYPE;
   v_usrdata_parentkey_txt     VARCHAR2 (100);
   v_usrdata_parentkey         fac_usrdata.fac_usrdata_parentkey%TYPE;
   v_usrdata_vervaldatum_txt   VARCHAR2 (100);
   v_usrdata_vervaldatum       fac_usrdata.fac_usrdata_vervaldatum%TYPE;
BEGIN
   v_fielddelimitor := ';';
   v_header_found := FALSE;

   DELETE pchx_imp_usrdata;

   FOR rec IN c_cursor
   LOOP
      BEGIN
         v_newline := rec.fac_imp_file_line;

         fac.imp_getfield (v_newline, v_fielddelimitor, v_usrtab_key_txt);
      --   fac.imp_getfield (v_newline, v_fielddelimitor, v_usrtab_naam);
         fac.imp_getfield (v_newline, v_fielddelimitor, v_usrdata_key_txt);
         fac.imp_getfield (v_newline, v_fielddelimitor, v_usrdata_code);
         fac.imp_getfield (v_newline, v_fielddelimitor, v_usrdata_omschr);
         fac.imp_getfield (v_newline, v_fielddelimitor, v_usrdata_prijs_txt);
         fac.imp_getfield (v_newline, v_fielddelimitor, v_usrdata_volgnr_txt);
         fac.imp_getfield (v_newline, v_fielddelimitor, v_usrdata_parentkey_txt);
         fac.imp_getfield (v_newline, v_fielddelimitor, v_usrdata_vervaldatum_txt);

         -- Skip until a valid header is found
         IF UPPER (v_usrtab_key_txt) = 'FAC USRTAB KEY'
        AND UPPER (v_usrdata_key_txt) = 'FAC USRDATA KEY'
        AND UPPER (v_usrdata_volgnr_txt) = 'FAC USRDATA VOLGNR'
        AND UPPER (v_usrdata_parentkey_txt) = 'FAC USRDATA PARENTKEY'
        AND UPPER (v_usrdata_vervaldatum_txt) = 'FAC USRDATA VERVALDATUM'
         THEN
            -- Sla de kopregel over.
            v_header_found := TRUE;
         ELSIF v_header_found
         THEN
            v_usrtab_key := fac.safe_to_number (v_usrtab_key_txt);
            v_usrdata_key := fac.safe_to_number (v_usrdata_key_txt);
            v_usrdata_volgnr := fac.safe_to_number (v_usrdata_volgnr_txt);
            v_usrdata_prijs := fac.safe_to_number (REPLACE (v_usrdata_prijs_txt, ',', '.'));
            v_usrdata_parentkey := fac.safe_to_number (v_usrdata_parentkey_txt);
            v_usrdata_vervaldatum := fac.safe_to_date (v_usrdata_vervaldatum_txt, 'dd-mm-yyyy');

            INSERT INTO pchx_imp_usrdata (fac_usrtab_key,
                                          fac_usrtab_naam,
                                          fac_usrdata_key,
                                          fac_usrdata_code,
                                          fac_usrdata_omschr,
                                          fac_usrdata_volgnr,
                                          fac_usrdata_prijs,
                                          fac_usrdata_parentkey,
                                          fac_usrdata_vervaldatum)
                VALUES (v_usrtab_key,
                        v_usrtab_naam,
                        v_usrdata_key,
                        v_usrdata_code,
                        v_usrdata_omschr,
                        v_usrdata_volgnr,
                        v_usrdata_prijs,
                        v_usrdata_parentkey,
                        v_usrdata_vervaldatum);
         END IF;
      END;
   END LOOP;

   IF NOT v_header_found
   THEN
      fac.imp_writelog (p_import_key,
                        'E',
                        'Geen geldige header aangetroffen',
                        'Bestand is geen geldig eigentabel importbestand.');
   END IF;
EXCEPTION
   WHEN OTHERS
   THEN
      v_oracle_err_num := SQLCODE;
      v_oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
      v_errormsg := 'OTHERS (error ' || v_oracle_err_num || '/' || v_oracle_err_mes || ')';
      fac.imp_writelog (p_import_key,
                        'E',
                        SUBSTR (v_errormsg, 1, 1000),
                        '');
END;
/


CREATE OR REPLACE PROCEDURE pchx_update_usrdata (p_import_key IN NUMBER)
AS
   CURSOR c
   IS
      SELECT * FROM pchx_imp_usrdata;

   v_errormsg       VARCHAR (200);
   v_errorhint      VARCHAR (200);
   oracle_err_num   NUMBER;
   oracle_err_mes   VARCHAR2 (200);
BEGIN
   FOR rec IN c
   LOOP
      BEGIN
         IF rec.fac_usrdata_key IS NULL
         THEN
            INSERT INTO fac_usrdata (fac_usrtab_key,
                                     fac_usrdata_code,
                                     fac_usrdata_omschr,
                                     fac_usrdata_volgnr,
                                     fac_usrdata_prijs,
                                     fac_usrdata_parentkey,
                                     fac_usrdata_vervaldatum)
                VALUES (rec.fac_usrtab_key,
                        LPAD (rec.fac_usrdata_code, 6, '0'),
                        rec.fac_usrdata_omschr,
                        rec.fac_usrdata_volgnr,
                        rec.fac_usrdata_prijs,
                        rec.fac_usrdata_parentkey,
                        rec.fac_usrdata_vervaldatum);
         ELSE
            UPDATE fac_usrdata
               SET fac_usrtab_key = rec.fac_usrtab_key,
                   fac_usrdata_code = LPAD (rec.fac_usrdata_code, 6, '0'),
                   fac_usrdata_omschr = rec.fac_usrdata_omschr,
                   fac_usrdata_volgnr = rec.fac_usrdata_volgnr,
                   fac_usrdata_prijs = rec.fac_usrdata_prijs,
                   fac_usrdata_parentkey = rec.fac_usrdata_parentkey,
                   fac_usrdata_vervaldatum = rec.fac_usrdata_vervaldatum
             WHERE fac_usrdata_key = rec.fac_usrdata_key;
         END IF;
      END;
   END LOOP;
EXCEPTION
   WHEN OTHERS
   THEN
      oracle_err_num := SQLCODE;
      oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
      v_errormsg := 'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
      fac.imp_writelog (p_import_key,
                        'E',
                        SUBSTR (v_errormsg, 1, 1000),
                        '');
END;
/

-- view voor het exporteren van een catalogus. Deze kan later via de import ingelezen worden.
CREATE OR REPLACE VIEW pchx_v_imp_bes_artikel_sync
(
   FCLT_F_CatalogusNaam,
   Leverancier,
   CatDatum,
   Artikelnr,
   Groep,
   Omschrijving,
   Prijs,
   Eenheid,
   Picture,
   Orderaantal,
   Tax,
   DueDate,
   Inkoopprijs,
   Minimum,
   Staffeltabel,
   Wijzigdagen,
   Annuleerdagen
)
AS
   SELECT   td.ins_discipline_omschrijving,
            b.prs_bedrijf_naam,
            TO_CHAR (td.ins_discipline_aanmaak, 'yyyymmdd'),
            sd.bes_srtdeel_nr,
            sg.bes_srtgroep_omschrijving,
            sd.bes_srtdeel_omschrijving,
            TO_CHAR (bes.getsrtdeelprijs (sd.bes_srtdeel_key, NULL)),
            sd.bes_srtdeel_eenheid,
            sd.bes_srtdeel_image,
            TO_CHAR (sd.bes_srtdeel_veelvoud),
            TO_CHAR (sd.bes_srtdeel_btw),
            TO_CHAR (sd.bes_srtdeel_vervaldatum, 'yyyymmdd'),
            TO_CHAR (bes.getsrtdeelinkprijs (sd.bes_srtdeel_key, NULL)),
            NULL,
            bs.bes_staffeltabel_naam,
            sd.bes_srtdeel_wijzigdagen,
            sd.bes_srtdeel_annuleerdagen
     FROM   ins_tab_discipline td,
            bes_srtgroep sg,
            bes_srtdeel sd,
            prs_bedrijf b,
            bes_staffeltabel bs
    WHERE       td.ins_discipline_module = 'BES'
            AND td.ins_discipline_verwijder IS NULL
            AND td.ins_discipline_key = sg.ins_discipline_key
            AND sg.bes_srtgroep_verwijder IS NULL
            AND sg.bes_srtgroep_key = sd.bes_srtgroep_key
            AND sd.bes_srtdeel_verwijder IS NULL
            AND sd.prs_bedrijf_key = b.prs_bedrijf_key
            AND bs.bes_staffeltabel_key(+) = sd.bes_staffeltabel_key;

-- view voor bedrijfsuggest bij facturen die niet gekoppeld zijn aan een contract
-- of opdracht.
CREATE OR REPLACE VIEW pchx_v_fin_bedrijf
(
   prs_bedrijf_key,
   prs_bedrijf_naam,
   prs_bedrijf_verwijder
)
AS
   SELECT prs_bedrijf_key, prs_bedrijf_naam, prs_bedrijf_verwijder
     FROM prs_bedrijf b
    WHERE prs_bedrijf_intern IS NULL;


-------------------------------------------------------------------------------
-- EXPORTFUNCTIE - Export VERPLICHTINGEN EN SCANSYS
-------------------------------------------------------------------------------

CREATE OR REPLACE PROCEDURE pchx_select_scansys_adm (
   p_applname        IN VARCHAR2,
   p_applrun         IN VARCHAR2,
   p_administratie   IN VARCHAR2)
AS
   CURSOR c
   IS
        SELECT bkstnr,
               datum,
               MAX (fact_oms25) fact_oms25,
               administratie,
               crdnr
          FROM pchx_v_bron_export_exact_xml f
         WHERE administratie = 650
               AND fin_factuur_key IN
                        (SELECT fac_tracking_refkey
                           FROM fac_tracking t, fac_srtnotificatie sn
                          WHERE t.fac_srtnotificatie_key =
                                   sn.fac_srtnotificatie_key
                                AND sn.fac_srtnotificatie_code = 'CUST10'
                                AND t.fac_tracking_refkey = fin_factuur_key)
      GROUP BY bkstnr,
               datum,
               administratie,
               crdnr;

   CURSOR c_sub (c_bkstnr VARCHAR2)
   IS
      SELECT *
        FROM pchx_v_bron_export_exact_xml
       WHERE administratie = p_administratie AND bkstnr = c_bkstnr;

   v_order_count       NUMBER;
   v_amount_sum        NUMBER (10, 2);
   v_amount_sum_incl   NUMBER (10, 2);
   v_count             NUMBER;
   v_sub_count         NUMBER;
   v_bestand           VARCHAR2 (30);
   v_dagboeknr         VARCHAR2 (2);
BEGIN
   v_order_count := 0;
   v_amount_sum := 0;
   v_amount_sum_incl := 0;
   v_count := 0;
   v_bestand := SUBSTR (p_applname, 1, 12);

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

   DELETE fac_rapport
    WHERE fac_rapport_node = v_bestand;

   -- Bewaar de factuur keys in een tijdelijke tabel zodat bij het verwerken (nieuwe export)
   -- deze keys gebruikt kunnen worden.
   -- Verwijder alleen de records van de geselecteerde administratie
   DELETE pchx_exp_factuur e
    WHERE administratie = p_administratie;

   INSERT INTO pchx_exp_factuur (fin_factuur_key, administratie)
      (SELECT DISTINCT fin_factuur_key, p_administratie
         FROM pchx_v_factuur_gegevens
        WHERE fin_factuur_statuses_key = 6
              AND administratie = p_administratie);

   FOR rec IN c
   LOOP
      BEGIN
         -- bepalen dagboeknr & boekstuknr
         v_dagboeknr := SUBSTR (rec.bkstnr, 3, 2);
         v_bestand :=
            TO_CHAR(   rec.administratie
                    || rec.bkstnr
                    || '##'
                    || SUBSTR (p_applname, 1, 12));

         v_count := 1;                                                -- dummy

         IF v_count <> 0
         THEN
            pchx.add_xml_row (
               v_bestand,
               '<?xml version="1.0" encoding="windows-1252"?>');
            pchx.add_xml_row (v_bestand, '<eExact>');
            pchx.add_xml_row (v_bestand, '<GLEntries>');
            pchx.add_xml_row (
               v_bestand,
                  '<GLEntry status="E" entry="'
               || xml.char_to_html (rec.bkstnr)
               || '">');
            pchx.add_xml_element (v_bestand, 'Description', rec.fact_oms25);
            pchx.add_xml_element (v_bestand, 'Date', rec.datum);
            pchx.add_xml_element (v_bestand,
                                  'DocumentDate',
                                  TO_CHAR (SYSDATE, 'YYYY-MM-DD'));
            pchx.add_xml_row (
               v_bestand,
               '<Journal type="I" code="' || v_dagboeknr || '"/>');
            v_sub_count := 1;
            pchx.add_xml_row (
               v_bestand,
               '<Creditor number="' || xml.char_to_html (rec.crdnr) || '"/>');

            FOR rec1 IN c_sub (rec.bkstnr)
            LOOP
               BEGIN
                  pchx.add_xml_row (
                     v_bestand,
                        '<FinEntryLine number="'
                     || v_sub_count
                     || '" subtype="T" type="N">');
                  pchx.add_xml_element (
                     v_bestand,
                     'Date',
                     COALESCE (rec1.afw_datum, rec1.datum));
                  pchx.add_xml_row (
                     v_bestand,
                        '<GLAccount code="'
                     || xml.char_to_html (rec1.reknr)
                     || '"/>');

                  IF pchx.get_user = 'PCHD'
                  THEN
                     pchx.add_xml_row (
                        v_bestand,
                           '<Project code="'
                        || rec1.projectnr
                        || '" type="I" status="A">');
                     pchx.add_xml_element (v_bestand,
                                           'Description',
                                           rec1.projectnaam);
                     pchx.add_xml_row (v_bestand, '</Project>');
                  END IF;

                  pchx.add_xml_element (v_bestand,
                                        'Description',
                                        rec1.regel_oms25);

                  IF    pchx.get_user = 'PCHD'
                     OR pchx.get_user = 'PCHS'
                     OR pchx.get_user = 'PCHP'
                     OR pchx.get_user = 'PCHY'
                  THEN
                     pchx.add_xml_row (
                        v_bestand,
                           '<Costcenter code="'
                        || xml.char_to_html (rec1.kstplcode)
                        || '"/>');
                  END IF;

                  -- LET OP: PCHA en PCHW gebruiken het projectcode veld om de kostenplaats te vullen in Exact
                  -- De Facilitor kostenplaats wordt bij deze accounts al gebruikt voor de klantkostenplaats.
                  IF pchx.get_user = 'PCHA' OR pchx.get_user = 'PCHW'
                  THEN
                     pchx.add_xml_row (
                        v_bestand,
                           '<Costcenter code="'
                        || xml.char_to_html (rec1.projectnr)
                        || '"/>');
                  END IF;

                  IF pchx.get_user = 'PCHD'
                  THEN
                     pchx.add_xml_row (
                        v_bestand,
                           '<Costunit code="'
                        || xml.char_to_html (rec1.kstdrcode)
                        || '"/>');
                  END IF;

                  IF pchx.get_user = 'PCHD'
                  THEN
                     pchx.add_xml_row (
                        v_bestand,
                           '<Item code="'
                        || xml.char_to_html (rec1.itemcode)
                        || '"/>');
                  END IF;

                  pchx.add_xml_row (v_bestand, '<Amount>');
                  pchx.add_xml_element (v_bestand, 'Debit', rec1.bedrag_txt);
                  pchx.add_xml_row (
                     v_bestand,
                        '<VAT code="'
                     || xml.char_to_html (rec1.btw_code)
                     || '"/>');
                  pchx.add_xml_row (v_bestand, '</Amount>');
                  pchx.add_xml_row (v_bestand, '<Payment>');
                  pchx.add_xml_element (v_bestand,
                                        'Reference',
                                        rec1.betaalref);
                  pchx.add_xml_element (v_bestand,
                                        'InvoiceNumber',
                                        rec1.bkstnr);
                  pchx.add_xml_row (v_bestand, '</Payment>');
                  pchx.add_xml_row (v_bestand, '<FinReferences>');
                  pchx.add_xml_element (v_bestand, 'YourRef', rec1.betaalref);
                  pchx.add_xml_element (v_bestand,
                                        'DocumentDate',
                                        TO_CHAR (SYSDATE, 'YYYY-MM-DD'));
                  pchx.add_xml_row (v_bestand, '</FinReferences>');
                  pchx.add_xml_row (v_bestand, '</FinEntryLine>');
                  v_sub_count := v_sub_count + 1;
                  v_amount_sum := v_amount_sum + rec1.bedrag;
                  v_amount_sum_incl := v_amount_sum_incl + rec1.bedrag_incl;
               END;
            END LOOP;

            pchx.add_xml_row (v_bestand, '</GLEntry>');
            pchx.add_xml_row (v_bestand, '</GLEntries>');
            pchx.add_xml_row (v_bestand, '</eExact>');
         END IF;
      END;

      v_order_count := v_order_count + 1;
   END LOOP;


   fac.writelog (
      p_applname,
      'S',
         'Exact export uitgevoerd. Aantal regels: '
      || v_order_count
      || ' Totaal bedrag: '
      || v_amount_sum
      || ' Totaal bedrag (incl): '
      || v_amount_sum_incl,
      '');
END;
/


CREATE OR REPLACE PROCEDURE pchx_select_scansys (p_applname   IN VARCHAR2,
                                                 p_applrun    IN VARCHAR2)
AS
BEGIN
   pchx_select_scansys_adm (p_applname, p_applrun, pchx.get_administratienr);
END;
/

CREATE OR REPLACE VIEW pchx_v_bron_verplichtingen_xml
(
   bkstnr,
   fact_oms25,
   regel_oms25,
   datum,
   afw_datum,
   crdnr,
   projectnr,
   projectnaam,
   bedrag_txt,
   bedrag,
   bedrag_incl,
   betaalref,
   itemcode,
   reknr,
   kstdrcode,
   kstplcode,
   btw_code,
   lev_kpn,
   administratie,
   fin_factuur_key,
   track_verpl
)
AS
   SELECT (SELECT fin_kenmerkfactuur_waarde kf
             FROM fin_kenmerkfactuur kf
            WHERE kf.fin_factuur_key = fg.fin_factuur_key
                  AND kf.fin_kenmerk_key = 3)                -- boekstuknummer
             bkstnr,
          REPLACE (fin_factuur_opmerking, ',', '') fact_oms25,
             opdracht_id
          || ' - '
          || REPLACE (fin_factuurregel_omschrijving, ',', '')
             regel_oms25,
          TO_CHAR (fin_factuur_datum, 'yyyy-mm-dd') datum,
          (SELECT TO_CHAR (
                     fac.safe_to_date (fin_kenmerkfactregel_waarde,
                                       'dd-mm-yyyy'),
                     'yyyy-mm-dd')
             FROM fin_kenmerkfactregel kfr
            WHERE kfr.fin_factuurregel_key = fg.fin_factuurregel_key
                  AND kfr.fin_kenmerk_key = 23)               -- afw boekdatum
             afw_datum,
          (SELECT prs_leverancier_nr
             FROM prs_bedrijf b
            WHERE b.prs_bedrijf_key = fg.prs_bedrijf_key)
             crdnr,
          project_nummer,
          project_naam,
          REPLACE (TO_CHAR (fin_factuurregel_totaal), ',', '.') bedrag_txt,
          fin_factuurregel_totaal bedrag,
          fin_factuurregel_totaal + fin_factuurregel_btw bedrag_incl,
          fin_factuur_nr || '/' || fin_factuur_debiteur_nr betaalref,
          prs_kostensoort_oms itemcode,
          reknr,
          kstdrcode,
          (SELECT prs_kostenplaats_nr
             FROM prs_kostenplaats kp
            WHERE kp.prs_kostenplaats_key = fg.prs_kostenplaats_key)
             kstplcode,
          fin_btwtabelwaarde_code btw_code,
          lev_kpn,
          administratie,
          fin_factuur_key,
          (SELECT fac_tracking_datum
             FROM fac_tracking t, fac_srtnotificatie sn
            WHERE     t.fac_tracking_refkey = fin_factuur_key
                  AND t.fac_srtnotificatie_key = sn.fac_srtnotificatie_key
                  AND sn.fac_srtnotificatie_code = 'CUST10')
             track_verpl
     FROM pchx_v_factuur_gegevens fg
    WHERE fin_factuur_statuses_key between 1 and 6;


CREATE OR REPLACE VIEW pchx_v_export_verpl
(
   result,
   result_order,
   boekstuknummer
)
AS
   SELECT SUBSTR (fac_rapport_regel, INSTR (fac_rapport_regel, '##') + 2),
          fac_rapport_volgnr,
          SUBSTR (fac_rapport_regel, 1, INSTR (fac_rapport_regel, '##') - 1)
     FROM fac_rapport
    WHERE fac_rapport_node = 'VERPL';


CREATE OR REPLACE VIEW pchx_v_export_scansys
(
   result,
   result_order,
   boekstuknummer
)
AS
   SELECT SUBSTR (fac_rapport_regel, INSTR (fac_rapport_regel, '##') + 2),
          fac_rapport_volgnr,
          SUBSTR (fac_rapport_regel, 1, INSTR (fac_rapport_regel, '##') - 1)
     FROM fac_rapport
    WHERE fac_rapport_node = 'SCANSYS';


/* Formatted on 12-4-2019 12:02:45 (QP5 v5.136.908.31019) */
/* Formatted on 12-4-2019 13:41:05 (QP5 v5.136.908.31019) */
CREATE OR REPLACE PROCEDURE pchx_select_verpl_adm (
   p_applname        IN VARCHAR2,
   p_applrun         IN VARCHAR2,
   p_administratie   IN VARCHAR2)
AS
   CURSOR c
   IS
        SELECT bkstnr,
               datum,
               MAX (fact_oms25) fact_oms25,
               administratie,
               crdnr
          FROM pchx_v_bron_verplichtingen_xml
         WHERE administratie = 650 AND track_verpl IS NULL
      GROUP BY bkstnr,
               datum,
               administratie,
               crdnr;

   CURSOR c_sub
   IS
      SELECT *
        FROM pchx_v_bron_verplichtingen_xml
       WHERE administratie = p_administratie AND track_verpl IS NULL;

   v_order_count       NUMBER;
   v_amount_sum        NUMBER (10, 2);
   v_amount_sum_incl   NUMBER (10, 2);
   v_count             NUMBER;
   v_sub_count         NUMBER;
   v_bestand           VARCHAR2 (30);
   v_dagboeknr         VARCHAR2 (2);
   v_applname          VARCHAR2 (2);
BEGIN
   --Eerst maar de resultaten van vorige export opruimen

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

   DELETE fac_rapport
    WHERE fac_rapport_node = v_bestand;

   FOR rec IN c
   LOOP
      BEGIN
         -- bepalen dagboeknr & boekstuknr
         -- We zetten hier administratie, boekstuknummer en ## voor,
         --   dit is nodig omdat de we bij het vullen van FAC_RAPPORT een toevoeging moeten hebben om
         --   de unieke bestandsnamen te kunnen bepalen.
         --   In add_xml_row en add_xml_element filteren we dit weer, zodat dit niet in de node komt.
         v_dagboeknr := SUBSTR (rec.bkstnr, 3, 2);
         v_bestand :=
            TO_CHAR(   rec.administratie
                    || rec.bkstnr
                    || '##'
                    || SUBSTR (p_applname, 1, 12));

         v_count := 1;                                                -- dummy

         IF v_count <> 0
         THEN
            pchx.add_xml_row (
               v_bestand,
               '<?xml version="1.0" encoding="windows-1252"?>');
            pchx.add_xml_row (v_bestand, '<eExact>');
            pchx.add_xml_row (v_bestand, '<GLEntries>');
            pchx.add_xml_row (
               v_bestand,
                  '<GLEntry status="E" entry="'
               || xml.char_to_html (rec.bkstnr)
               || '">');
            pchx.add_xml_element (v_bestand, 'Description', rec.fact_oms25);
            pchx.add_xml_element (v_bestand, 'Date', rec.datum);
            pchx.add_xml_element (v_bestand,
                                  'DocumentDate',
                                  TO_CHAR (SYSDATE, 'YYYY-MM-DD'));
            pchx.add_xml_row (
               v_bestand,
               '<Journal type="I" code="' || v_dagboeknr || '"/>');
            v_sub_count := 1;
            pchx.add_xml_row (
               v_bestand,
               '<Creditor number="' || xml.char_to_html (rec.crdnr) || '"/>');

            FOR rec1 IN c_sub
            LOOP
               IF rec1.bkstnr = rec.bkstnr
               THEN
                  BEGIN
                     pchx.add_xml_row (
                        v_bestand,
                           '<FinEntryLine number="'
                        || v_sub_count
                        || '" subtype="T" type="N">');
                     pchx.add_xml_element (
                        v_bestand,
                        'Date',
                        COALESCE (rec1.afw_datum, rec1.datum));
                     pchx.add_xml_row (
                        v_bestand,
                           '<GLAccount code="'
                        || xml.char_to_html (rec1.reknr)
                        || '"/>');

                     IF pchx.get_user = 'PCHD'
                     THEN
                        pchx.add_xml_row (
                           v_bestand,
                              '<Project code="'
                           || rec1.projectnr
                           || '" type="I" status="A">');
                        pchx.add_xml_element (v_bestand,
                                              'Description',
                                              rec1.projectnaam);
                        pchx.add_xml_row (v_bestand, '</Project>');
                     END IF;

                     pchx.add_xml_element (v_bestand,
                                           'Description',
                                           rec1.regel_oms25);

                     IF    pchx.get_user = 'PCHD'
                        OR pchx.get_user = 'PCHS'
                        OR pchx.get_user = 'PCHP'
                        OR pchx.get_user = 'PCHY'
                     THEN
                        pchx.add_xml_row (
                           v_bestand,
                              '<Costcenter code="'
                           || xml.char_to_html (rec1.kstplcode)
                           || '"/>');
                     END IF;

                     -- LET OP: PCHA en PCHW gebruiken het projectcode veld om de kostenplaats te vullen in Exact
                     -- De Facilitor kostenplaats wordt bij deze accounts al gebruikt voor de klantkostenplaats.
                     IF pchx.get_user = 'PCHA' OR pchx.get_user = 'PCHW'
                     THEN
                        pchx.add_xml_row (
                           v_bestand,
                              '<Costcenter code="'
                           || xml.char_to_html (rec1.projectnr)
                           || '"/>');
                     END IF;

                     IF pchx.get_user = 'PCHD'
                     THEN
                        pchx.add_xml_row (
                           v_bestand,
                              '<Costunit code="'
                           || xml.char_to_html (rec1.kstdrcode)
                           || '"/>');
                     END IF;

                     IF pchx.get_user = 'PCHD'
                     THEN
                        pchx.add_xml_row (
                           v_bestand,
                              '<Item code="'
                           || xml.char_to_html (rec1.itemcode)
                           || '"/>');
                     END IF;

                     pchx.add_xml_row (v_bestand, '<Amount>');
                     pchx.add_xml_element (v_bestand,
                                           'Debit',
                                           rec1.bedrag_txt);
                     pchx.add_xml_row (
                        v_bestand,
                           '<VAT code="'
                        || xml.char_to_html (rec1.btw_code)
                        || '"/>');
                     pchx.add_xml_row (v_bestand, '</Amount>');
                     pchx.add_xml_row (v_bestand, '<Payment>');
                     pchx.add_xml_element (v_bestand,
                                           'Reference',
                                           rec1.betaalref);
                     pchx.add_xml_element (v_bestand,
                                           'InvoiceNumber',
                                           rec1.bkstnr);
                     pchx.add_xml_row (v_bestand, '</Payment>');
                     pchx.add_xml_row (v_bestand, '<FinReferences>');
                     pchx.add_xml_element (v_bestand,
                                           'YourRef',
                                           rec1.betaalref);
                     pchx.add_xml_element (v_bestand,
                                           'DocumentDate',
                                           TO_CHAR (SYSDATE, 'YYYY-MM-DD'));
                     pchx.add_xml_row (v_bestand, '</FinReferences>');
                     pchx.add_xml_row (v_bestand, '</FinEntryLine>');
                     v_sub_count := v_sub_count + 1;
                     v_amount_sum := v_amount_sum + rec1.bedrag;
                     v_amount_sum_incl := v_amount_sum_incl + rec1.bedrag_incl;

                     INSERT INTO fac_tracking (fac_tracking_refkey, fac_srtnotificatie_key, fac_tracking_oms)
                        SELECT rec1.fin_factuur_key,
                               fac_srtnotificatie_key,
                               'Verplichting verzonden naar Scansys'
                          FROM fac_srtnotificatie
                         WHERE fac_srtnotificatie_code = 'CUST10'
                               AND rec1.fin_factuur_key NOT IN
                                        (SELECT t.fac_tracking_refkey
                                           FROM fac_tracking t,
                                                fac_srtnotificatie sn
                                          WHERE t.fac_srtnotificatie_key =
                                                   sn.fac_srtnotificatie_key
                                                AND sn.fac_srtnotificatie_code =
                                                      'CUST10'
                                                AND t.fac_tracking_refkey =
                                                      rec1.fin_factuur_key);
                  END;
               END IF;
            END LOOP;

            pchx.add_xml_row (v_bestand, '</GLEntry>');
            pchx.add_xml_row (v_bestand, '</GLEntries>');
            pchx.add_xml_row (v_bestand, '</eExact>');
         END IF;
      END;

      v_order_count := v_order_count + 1;
   END LOOP;

   fac.writelog (
      p_applname,
      'S',
         'Scansys verplichtingen export uitgevoerd. Aantal regels: '
      || v_order_count
      || ' Totaal bedrag: '
      || v_amount_sum
      || ' Totaal bedrag (incl): '
      || v_amount_sum_incl,
      '');
END;
/


CREATE OR REPLACE PROCEDURE pchx_select_verpl (p_applname   IN VARCHAR2,
                                               p_applrun    IN VARCHAR2)
AS
BEGIN
   pchx_select_verpl_adm (p_applname, p_applrun, pchx.get_administratienr);
END;
/

CREATE OR REPLACE PROCEDURE pchx_export_verpl (p_applname   IN VARCHAR2,
                                               p_applrun    IN VARCHAR2,
                                               p_filedir    IN VARCHAR2,
                                               p_filename   IN VARCHAR2)
AS
   v_errormsg       VARCHAR (200);
   oracle_err_num   NUMBER;
   oracle_err_mes   VARCHAR2 (200);
BEGIN
   -- Verwerk actie direct starten na de export
   NULL;
END;
/



--------------------------------------------------------------------------------------
--  views tbv realtime monitor
--------------------------------------------------------------------------------------

CREATE OR REPLACE VIEW pchx_v_graph_meldingpd_fm
(
   fclt_xas_,
   fclt_yas_,
   volgorde
)
AS
     SELECT TO_CHAR (mld_melding_datum, 'dd'),
            COUNT (mld_melding_key),
            TRUNC (mld_melding_datum) - TRUNC (SYSDATE)
       FROM mld_melding m
      WHERE mld_melding_datum > SYSDATE - 15
        AND mld_melding_datum > TO_DATE ('20131001', 'yyyymmdd')
        AND mld_melding_datum < SYSDATE
   GROUP BY TO_CHAR (mld_melding_datum, 'dd'),
            TRUNC (mld_melding_datum) - TRUNC (SYSDATE);

CREATE OR REPLACE VIEW pchx_v_graph_meldingpm_fm
(
   fclt_xas_,
   fclt_yas_,
   volgorde
)
AS
     SELECT DECODE (SUBSTR (TO_CHAR (mld_melding_datum, 'yyyymm'), 5),
                    '01', 'Januari',
                    '02', 'Februari',
                    '03', 'Maart',
                    '04', 'April',
                    '05', 'Mei',
                    '06', 'Juni',
                    '07', 'Juli',
                    '08', 'Augustus',
                    '09', 'September',
                    '10', 'Oktober',
                    '11', 'November',
                    'December'),
            COUNT (mld_melding_key),
            TO_CHAR (mld_melding_datum, 'yyyymm')
       FROM mld_melding m
      WHERE mld_melding_datum BETWEEN ADD_MONTHS (
                                         TO_DATE (
                                            TO_CHAR (SYSDATE, 'yyyymm') || '01',
                                            'yyyymmdd'),
                                         -11)
                                  AND  SYSDATE
        AND mld_melding_datum > TO_DATE ('20131001', 'yyyymmdd')
   GROUP BY TO_CHAR (mld_melding_datum, 'yyyymm');

CREATE OR REPLACE VIEW pchx_v_graph_openst_behand
(
   fclt_xas_,
   fclt_yas_,
   fclt_yas2_,
   sortering
)
AS
     SELECT behandelaar,
            COUNT (mld_key) - SUM (uitvoeringoptijd) telaat,
            SUM (uitvoeringoptijd) op_tijd,
            1 - COUNT (mld_key)
       FROM (SELECT DISTINCT
                    m.mld_melding_key mld_key,
                    CASE SIGN (mld_melding_einddatum - SYSDATE)
                       WHEN -1 THEN 0
                       ELSE 1
                    END
                       uitvoeringoptijd,
                    DECODE (
                       mld_melding_flag,
                       1,
                       'FSB',
                       (SELECT prs_perslid_naam_full
                          FROM prs_v_perslid_fullnames pf
                         WHERE pf.prs_perslid_key =
                                  m.mld_melding_behandelaar_key))
                       behandelaar
               FROM mld_melding m
              WHERE mld_melding_status IN (2, 3, 4, 0) -- 2-ingevoerd, 3-ingezien, 4-geaccepteerd, 7-uitgegeven, 0-pending
                                                      )
      WHERE behandelaar IS NOT NULL
   GROUP BY behandelaar;

CREATE OR REPLACE VIEW pchx_v_graph_openst_uitv
(
   fclt_xas_,
   fclt_yas_,
   fclt_yas2_,
   fclt_url,
   sortering
)
AS
     SELECT behandelaar,
            COUNT (opdr_key) - SUM (uitvoeringoptijd) telaat,
            SUM (uitvoeringoptijd) op_tijd,
               'appl/mld/opdr_search.asp?urole=bo'
            || '&'
            || 'autosearch=1'
            || '&'
            || 'handler_key='
            || behandelaar_key,
            1 - COUNT (opdr_key)
       FROM (SELECT DISTINCT
                    o.mld_opdr_key opdr_key,
                    CASE SIGN (mld_opdr_einddatum - SYSDATE)
                       WHEN -1 THEN 0
                       ELSE 1
                    END
                       uitvoeringoptijd,
                    (SELECT prs_perslid_naam_full
                       FROM prs_v_perslid_fullnames pf
                      WHERE mld_uitvoerende_keys = pf.prs_perslid_key
                     UNION ALL
                     SELECT prs_bedrijf_naam
                       FROM prs_bedrijf b
                      WHERE mld_uitvoerende_keys = b.prs_bedrijf_key)
                       behandelaar,
                    o.mld_uitvoerende_keys behandelaar_key
               FROM mld_opdr o
              WHERE o.mld_statusopdr_key IN (3, 4, 5, 8, 10) -- 3 Ter fiattering, 4 Gefiatteerd, 5 Toegekend, 8 Geaccepteerd, 10 Ter goedkeuring
                                                            )
      WHERE behandelaar IS NOT NULL
   GROUP BY behandelaar, behandelaar_key;

CREATE OR REPLACE VIEW pchx_v_graph_ppi_acc (fclt_xas_, fclt_yas_)
AS
   SELECT SUM (acceptoptijd) aantal, COUNT (mld_key) totaal
     FROM (SELECT DISTINCT
                  m.mld_melding_key mld_key,
                  CASE SIGN(fac.datumtijdplusuitvoertijd (
                               fac.gettrackingdate ('MLDNEW', m.mld_melding_key),
                               std.mld_stdmelding_t_accepttijd.tijdsduur,
                               std.mld_stdmelding_t_accepttijd.eenheid)
                            - COALESCE (
                                 fac.gettrackingdate ('MLDREJ', m.mld_melding_key),
                                 fac.gettrackingdate ('MLDACP', m.mld_melding_key),
                                 SYSDATE))
                     WHEN -1
                     THEN
                        0
                     ELSE
                        1
                  END
                     acceptoptijd
             FROM mld_melding m, mld_discipline md, mld_stdmelding std
            WHERE md.ins_discipline_key = std.mld_ins_discipline_key
              AND std.mld_stdmelding_key = m.mld_stdmelding_key
              AND mld_melding_status IN (2, 3)      -- 2-ingevoerd, 3-ingezien
                                              );

CREATE OR REPLACE VIEW pchx_v_graph_ppi_uitv (fclt_xas_, fclt_yas_)
AS
   SELECT SUM (uitvoeringoptijd) aantal, COUNT (mld_key) totaal
     FROM (SELECT DISTINCT
                  m.mld_melding_key mld_key,
                  CASE
                     WHEN fac.gettrackingdate ('MLDREJ', m.mld_melding_key) IS NULL
                     THEN
                        CASE SIGN(fac.datumtijdplusuitvoertijd (
                                     m.mld_melding_datum,
                                     m.mld_melding_t_uitvoertijd.tijdsduur,
                                     m.mld_melding_t_uitvoertijd.eenheid)
                                  - COALESCE (
                                       fac.gettrackingdate ('MLDREJ', m.mld_melding_key),
                                       fac.gettrackingdate ('MLDAFM', m.mld_melding_key),
                                       SYSDATE))
                           WHEN -1
                           THEN
                              0
                           ELSE
                              1
                        END
                     ELSE
                        1
                  END
                     uitvoeringoptijd
             FROM mld_melding m, mld_discipline md, mld_stdmelding std
            WHERE md.ins_discipline_key = std.mld_ins_discipline_key
              AND std.mld_stdmelding_key = m.mld_stdmelding_key
              AND mld_melding_status IN (2, 3, 4, 7, 0) -- 2-ingevoerd, 3-ingezien, 4-geaccepteerd, 7-uitgegeven, 0-pending
                                                       );

CREATE OR REPLACE VIEW pchx_v_graph_vakgroep_open
(
   fclt_xas_,
   fclt_yas_,
   fclt_yas2_,
   sortering,
   fclt_url,
   fclt_3d_discipline_key
)
AS
     SELECT ins_srtdiscipline_prefix || ' '
            || lcl.x ('ins_discipline_omschrijving',
                      d.ins_discipline_key,
                      d.ins_discipline_omschrijving),
            COUNT (m.mld_melding_key) - SUM (uitvoeringoptijd) telaat,
            SUM (uitvoeringoptijd) op_tijd,
            -1 * COUNT (m.mld_melding_key) totaal,
               'appl/mld/mld_search.asp?urole=fo'
            || '&'
            || 'autosearch=1'
            || '&'
            || 'disc_key_str='
            || d.ins_discipline_key,
            d.ins_discipline_key
       FROM mld_melding m,
            mld_stdmelding std,
            ins_tab_discipline d,
            ins_srtdiscipline sd,
            (SELECT mld_melding_key,
                    CASE SIGN (mld_melding_einddatum - SYSDATE)
                       WHEN -1 THEN 0
                       ELSE 1
                    END
                       uitvoeringoptijd
               FROM mld_melding m2) uitv
      WHERE 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 m.mld_melding_key = uitv.mld_melding_key
        AND mld_melding_status IN (2, 3, 4, 7, 0) -- 2-ingevoerd, 3-ingezien, 4-geaccepteerd, 7-uitgegeven, 0-pending
   GROUP BY d.ins_discipline_key,
            d.ins_discipline_omschrijving,
            ins_srtdiscipline_prefix
   ORDER BY COUNT (d.ins_discipline_omschrijving) DESC;

CREATE OR REPLACE VIEW pchx_v_graph_fact_count
(
   fclt_xas_,
   fclt_yas_,
   sortering
)
AS
     SELECT prs_perslid_naam_full, COUNT ( * ), 1 - COUNT ( * )
       FROM (  SELECT boekstuknummer,
                      prs_perslid_naam_full,
                      SUM (fin_factuurregel_totaal) totaal
                 FROM pchx_v_factuur_gegevens fg,
                      prs_kostenplaats k,
                      prs_v_perslid_fullnames pf
                WHERE fin_factuur_statuses_key = 2
                  AND fg.prs_kostenplaats_org = k.prs_kostenplaats_key
                  AND k.prs_perslid_key = pf.prs_perslid_key
             GROUP BY prs_perslid_naam_full, boekstuknummer)
   GROUP BY prs_perslid_naam_full;

CREATE OR REPLACE VIEW pchx_v_graph_fact_amount
(
   fclt_xas_,
   fclt_yas_,
   sortering
)
AS
     SELECT prs_perslid_naam_full, SUM(totaal), 1 - SUM(totaal)
       FROM (  SELECT boekstuknummer,
                      prs_perslid_naam_full,
                      SUM (fin_factuurregel_totaal) totaal
                 FROM pchx_v_factuur_gegevens fg,
                      prs_kostenplaats k,
                      prs_v_perslid_fullnames pf
                WHERE fin_factuur_statuses_key = 2
                  AND fg.prs_kostenplaats_org = k.prs_kostenplaats_key
                  AND k.prs_perslid_key = pf.prs_perslid_key
             GROUP BY prs_perslid_naam_full, boekstuknummer)
   GROUP BY prs_perslid_naam_full;

CREATE OR REPLACE VIEW PCHX_V_RAP_TECH_ADRES
(
   FCLT_F_BEDRIJF,
   L,
   U,
   C,
   H,
   FCLT_F_KANAAL,
   FCLT_F_Opdrachttype,
   Adres,
   Stylesheet,
   Bijlage
)
AS
   SELECT   prs_bedrijf_naam,
            DECODE (prs_bedrijf_leverancier, 1, 'x', NULL) L,
            DECODE (prs_bedrijf_uitvoerende, 1, 'x', NULL) U,
            DECODE (prs_bedrijf_contract, 1, 'x', NULL) C,
            DECODE (prs_bedrijf_huurder, 1, 'x', NULL) H,
            DECODE (ba.prs_bedrijfadres_type,
                    'B', 'Bestellingen',
                    'C', 'Contracten',
                    'O', 'Opdrachten',
                    NULL)
               Kanaal,
            DECODE (
               prs_bedrijfadres_type,
               'O',
               DECODE (ot.mld_typeopdr_key,
                       NULL, 'Geen/Overige opdrachten',
                       ot.mld_typeopdr_omschrijving),
               NULL,
               '',
               'N.v.t.'
            )
               opdrachttype,
            prs_bedrijfadres_url,
            prs_bedrijfadres_xsl,
            prs_bedrijfadres_attachfile Bijlage
     FROM   prs_bedrijf b, prs_bedrijfadres ba, mld_typeopdr ot
    WHERE       prs_bedrijf_verwijder IS NULL
            AND b.prs_bedrijf_key = ba.prs_bedrijf_key(+)
            AND ba.mld_typeopdr_key = ot.mld_typeopdr_key(+)
            AND b.prs_bedrijf_intern IS NULL;

CREATE OR REPLACE VIEW PCHX_V_RAP_BEDRIJFDIENSTLOC
(
   FCLT_F_BEDRIJF,
   L,
   U,
   C,
   H,
   FCLT_F_DIENST,
   FCLT_F_LOCATIE,
   FCLT_F_GEBOUW
)
AS
   SELECT   prs_bedrijf_naam,
            DECODE (prs_bedrijf_leverancier, 1, 'x', NULL) L,
            DECODE (prs_bedrijf_uitvoerende, 1, 'x', NULL) U,
            DECODE (prs_bedrijf_contract, 1, 'x', NULL) C,
            DECODE (prs_bedrijf_huurder, 1, 'x', NULL) H,
            d.prs_dienst_omschrijving dienst,
            l.alg_locatie_omschrijving Locatie,
            'Alle' Gebouw
     FROM   prs_bedrijf b,
            prs_bedrijfdienstlocatie bdl,
            prs_dienst d,
            alg_locatie l
    WHERE       prs_bedrijf_verwijder IS NULL
            AND b.prs_bedrijf_key = bdl.prs_bedrijf_key(+)
            AND d.prs_dienst_key(+) = bdl.prs_dienst_key
            AND b.prs_bedrijf_intern IS NULL
            AND l.alg_locatie_key = bdl.alg_locatie_key
   UNION ALL
   SELECT   prs_bedrijf_naam,
            DECODE (prs_bedrijf_leverancier, 1, 'x', NULL) L,
            DECODE (prs_bedrijf_uitvoerende, 1, 'x', NULL) U,
            DECODE (prs_bedrijf_contract, 1, 'x', NULL) C,
            DECODE (prs_bedrijf_huurder, 1, 'x', NULL) H,
            d.prs_dienst_omschrijving dienst,
            l.alg_locatie_omschrijving Locatie,
            g.alg_gebouw_omschrijving Gebouw
     FROM   prs_bedrijf b,
            prs_bedrijfdienstlocatie bdl,
            prs_dienst d,
            alg_locatie l,
            alg_gebouw g
    WHERE       prs_bedrijf_verwijder IS NULL
            AND b.prs_bedrijf_key = bdl.prs_bedrijf_key(+)
            AND d.prs_dienst_key(+) = bdl.prs_dienst_key
            AND b.prs_bedrijf_intern IS NULL
            AND g.alg_locatie_key = l.alg_locatie_key
            AND g.alg_gebouw_key = bdl.alg_gebouw_key
   UNION ALL
   SELECT   prs_bedrijf_naam,
            DECODE (prs_bedrijf_leverancier, 1, 'x', NULL) L,
            DECODE (prs_bedrijf_uitvoerende, 1, 'x', NULL) U,
            DECODE (prs_bedrijf_contract, 1, 'x', NULL) C,
            DECODE (prs_bedrijf_huurder, 1, 'x', NULL) H,
            d.prs_dienst_omschrijving dienst,
            'Alle' Locatie,
            'Alle' Gebouw
     FROM   prs_bedrijf b, prs_bedrijfdienstlocatie bdl, prs_dienst d
    WHERE       prs_bedrijf_verwijder IS NULL
            AND b.prs_bedrijf_key = bdl.prs_bedrijf_key(+)
            AND d.prs_dienst_key(+) = bdl.prs_dienst_key
            AND b.prs_bedrijf_intern IS NULL
            AND bdl.alg_gebouw_key IS NULL
            AND bdl.alg_locatie_key IS NULL;

CREATE OR REPLACE VIEW pchx_v_rap_mld_qrc
(
   fclt_3d_locatie_key,
   fclt_3d_discipline_key,
   fclt_f_discipline,
   fclt_f_soortmelding,
   fclt_f_locatie,
   fclt_f_gebouw,
   fclt_f_verdieping,
   plaats,
   ruimte_key,
   ruimtefunctie,
   fclt_f_objectdiscipline,
   fclt_f_objectgroep,
   objectsoort_key,
   fclt_f_objectsoort,
   objectsoort_code,
   ins_deel_key,
   ins_deel_omschrijving,
   ins_deel_upper,
   hide_f_bookmark_id,
   variabele
)
AS
   SELECT   l.alg_locatie_key,
            disc.ins_discipline_key,
            disc.ins_discipline_omschrijving,
            msd.mld_stdmelding_omschrijving,
            l.alg_locatie_omschrijving,
            o.alg_gebouw_omschrijving,
            o.alg_verdieping_omschrijving,
            o.alg_plaatsaanduiding plaats,
            d.ins_alg_ruimte_key ruimte_key,
            sr.alg_srtruimte_omschrijving,
            disc.ins_discipline_omschrijving,
            sg.ins_srtgroep_omschrijving,
            sd.ins_srtdeel_key,
            sd.ins_srtdeel_omschrijving,
            sd.ins_srtdeel_code,
            d.ins_deel_key,
            d.ins_deel_omschrijving,
            d.ins_deel_upper,
            b.fac_bookmark_id,
            'INS_KEY'
     FROM   (SELECT   DECODE (
                         INSTR (
                            SUBSTR (
                               UPPER (fac_bookmark_query),
                               INSTR (UPPER (fac_bookmark_query),
                                      'STDM_KEY=')
                            ),
                            '&'
                         ),
                         0,
                         SUBSTR (
                            SUBSTR (
                               UPPER (fac_bookmark_query),
                               INSTR (UPPER (fac_bookmark_query),
                                      'STDM_KEY=')
                            ),
                            10
                         ),
                         SUBSTR (
                            SUBSTR (
                               UPPER (fac_bookmark_query),
                               INSTR (UPPER (fac_bookmark_query),
                                      'STDM_KEY=')
                            ),
                            10,
                            INSTR (
                               SUBSTR (
                                  UPPER (fac_bookmark_query),
                                  INSTR (UPPER (fac_bookmark_query),
                                         'STDM_KEY=')
                               ),
                               '&'
                            )
                            - 10
                         )
                      )
                         stdm_key,
                      fac_bookmark_id
               FROM   fac_bookmark
              WHERE   UPPER (fac_bookmark_path) = 'APPL/PDA/MELDING.ASP'
--                      AND INSTR (UPPER (fac_bookmark_query), 'STDM_KEY') > 0  (nog) niet nodig voor PCH
                 )
            b,                                           -- stdm_key-bookmarks
            (SELECT   sm.mld_stdmelding_key,
                      sm.mld_stdmelding_omschrijving,
                      si.ins_srtinstallatie_key ins_srtdeel_key
               FROM   mld_stdmelding sm,
                      mld_stdmelding_srtinst si
              WHERE       sm.mld_stdmelding_key = si.mld_stdmelding_key
                      AND sm.mld_stdmelding_verwijder IS NULL
                      AND si.ins_srtinstallatie_niveau = 'S'
             UNION ALL
             SELECT   sm.mld_stdmelding_key,
                      sm.mld_stdmelding_omschrijving,
                      sd.ins_srtdeel_key
               FROM   mld_stdmelding sm,
                      mld_stdmelding_srtinst si,
                      ins_srtdeel sd
              WHERE       sm.mld_stdmelding_key = si.mld_stdmelding_key
                      AND sm.mld_stdmelding_verwijder IS NULL
                      AND si.ins_srtinstallatie_niveau = 'G'
                      AND si.ins_srtinstallatie_key = sd.ins_srtgroep_key
             UNION ALL
             SELECT   sm.mld_stdmelding_key,
                      sm.mld_stdmelding_omschrijving,
                      sd.ins_srtdeel_key
               FROM   mld_stdmelding sm,
                      mld_stdmelding_srtinst si,
                      ins_srtgroep sg,
                      ins_srtdeel sd
              WHERE       sm.mld_stdmelding_key = si.mld_stdmelding_key
                      AND sm.mld_stdmelding_verwijder IS NULL
                      AND si.ins_srtinstallatie_niveau = 'D'
                      AND si.ins_srtinstallatie_key = sg.ins_discipline_key
                      AND sg.ins_srtgroep_key = sd.ins_srtgroep_key) msd, -- object-meldingen
            ins_v_aanwezigdeel d,
            ins_srtdeel sd,
            ins_srtgroep sg,
            ins_discipline disc,
            ins_v_alg_overzicht o,
            alg_locatie l,
            alg_ruimte r,
            alg_srtruimte sr
    WHERE   1=1 --    fac.safe_to_number (b.stdm_key) = msd.mld_stdmelding_key
            AND msd.ins_srtdeel_key = d.ins_srtdeel_key
            AND d.ins_alg_ruimte_type IN ('T', 'R', 'W')
            AND d.ins_deel_parent_key IS NULL
            AND d.ins_srtdeel_key = sd.ins_srtdeel_key
            AND sd.ins_srtgroep_key = sg.ins_srtgroep_key
            AND sg.ins_discipline_key = disc.ins_discipline_key
            AND d.ins_alg_ruimte_key = o.alg_onroerendgoed_keys
            AND d.ins_alg_ruimte_type = o.alg_onroerendgoed_type
            AND d.ins_alg_locatie_key = o.alg_locatie_key        -- redundant?
            AND o.alg_locatie_key = l.alg_locatie_key
            AND d.ins_alg_ruimte_key = r.alg_ruimte_key
            AND r.alg_srtruimte_key = sr.alg_srtruimte_key(+);

-- QR codes om melding op bepaalde ruimte aan te maken.
CREATE OR REPLACE VIEW pchx_v_rap_mld_qrc1
(
    alg_ruimte_key,
    alg_ruimte_aanduiding,
    alg_ruimte_nr,
    alg_ruimte_omschrijving,
    alg_srtruimte_omschrijving,
    fac_bookmark_naam,
    fac_bookmark_id
)
AS
    SELECT alg_ruimte_key,
           rg.alg_ruimte_aanduiding,
           rg.alg_ruimte_nr,
           rg.alg_ruimte_omschrijving,
           rg.alg_srtruimte_omschrijving,
           b.fac_bookmark_naam,
           b.fac_bookmark_id
      FROM alg_v_ruimte_gegevens rg, fac_bookmark b
     WHERE b.fac_bookmark_naam LIKE 'QR%';

-- PCHD#34422
CREATE OR REPLACE VIEW PCHX_V_RAP_DOORLOOP_FACT
(
   FACTUUR_KEY,
   FCLT_F_FACTUUR_NR,
   FCLT_F_STATUS,
   FCLT_F_ACTIE,
   DATUM,
   FCLT_F_DATUM
)
AS
   SELECT   fin_factuur_key factuur_key,
            fin_factuur_nr factuur_nr,
            COALESCE (fin_factuur_statuses_omschr, 'Ter goedkeuring') status,
            'Geregistreerd' Actie,
            fin_factuur_datum Datum,
            'Import' Door
     FROM   fin_factuur f, fin_factuur_statuses stat
    WHERE   fin_factuur_key NOT IN
                  (SELECT   fac_tracking_refkey
                     FROM   fac_tracking ft, fac_srtnotificatie srt
                    WHERE   srt.fac_srtnotificatie_key =
                               ft.fac_srtnotificatie_key
                            AND srt.fac_srtnotificatie_code = 'FINNEW')
            AND fin_factuur_verwijder IS NULL
            AND f.fin_factuur_statuses_key = stat.fin_factuur_statuses_key(+)
   UNION ALL
   SELECT   fin_factuur_key,
            fin_factuur_nr,
            COALESCE (fin_factuur_statuses_omschr, 'Ter goedkeuring'),
            'Geregistreerd',
            fac_tracking_datum,
            prs_perslid_naam_friendly
     FROM   fin_factuur f,
            fac_tracking ft,
            fac_srtnotificatie srt,
            prs_v_perslid_fullnames p,
            fin_factuur_statuses stat
    WHERE       fac_tracking_refkey = f.fin_factuur_key
            AND srt.fac_srtnotificatie_key = ft.fac_srtnotificatie_key
            AND srt.fac_srtnotificatie_code = 'FINNEW'
            AND fin_factuur_verwijder IS NULL
            AND p.prs_perslid_key(+) = ft.prs_perslid_key
            AND f.fin_factuur_statuses_key = stat.fin_factuur_statuses_key(+)
   UNION ALL
   SELECT   fin_factuur_key,
            fin_factuur_nr,
            COALESCE (fin_factuur_statuses_omschr, 'Ter goedkeuring'),
            'Goedgekeurd',
            fac_tracking_datum,
            prs_perslid_naam_friendly
     FROM   fin_factuur f,
            fac_tracking ft,
            fac_srtnotificatie srt,
            prs_v_perslid_fullnames p,
            fin_factuur_statuses stat
    WHERE       fac_tracking_refkey = f.fin_factuur_key
            AND srt.fac_srtnotificatie_key = ft.fac_srtnotificatie_key
            AND srt.fac_srtnotificatie_code = 'FINFOK'
            AND fin_factuur_verwijder IS NULL
            AND p.prs_perslid_key(+) = ft.prs_perslid_key
            AND f.fin_factuur_statuses_key = stat.fin_factuur_statuses_key(+)
   UNION ALL
   SELECT   fin_factuur_key,
            fin_factuur_nr,
            COALESCE (fin_factuur_statuses_omschr, 'Ter goedkeuring'),
            'Gefiatteerd',
            fac_tracking_datum,
            prs_perslid_naam_friendly
     FROM   fin_factuur f,
            fac_tracking ft,
            fac_srtnotificatie srt,
            prs_v_perslid_fullnames p,
            fin_factuur_statuses stat
    WHERE       fac_tracking_refkey = f.fin_factuur_key
            AND srt.fac_srtnotificatie_key = ft.fac_srtnotificatie_key
            AND srt.fac_srtnotificatie_code = 'FINGOE'
            AND fin_factuur_verwijder IS NULL
            AND p.prs_perslid_key(+) = ft.prs_perslid_key
            AND f.fin_factuur_statuses_key = stat.fin_factuur_statuses_key(+);

-- PCHE#36676
CREATE OR REPLACE VIEW pchx_v_rap_export_schedule
(
   hide_f_orderby,
   exportnaam,
   startdatum,
   uitvoerdatum
)
AS
   SELECT 1000000 - imp_schedule_key,
          imp_schedule_name,
          imp_schedule_aanmaak,
          imp_schedule_done
     FROM imp_schedule;

--- PCHD#37981
CREATE OR REPLACE VIEW pchx_v_rap_searchresult
(
   fclt_f_datum,
   fclt_f_persoon,
   fclt_f_zoekterm,
   resultaat,
   fclt_f_keuze_type,
   keuze_url,
   keuze_omschrijving
)
AS
   SELECT fac_gui_counter_date datum,
          prs_perslid_naam_full persoon,
          fgc.fac_gui_counter_info zoekterm,
          COALESCE (result.result, 'Geen') resultaat,
          COALESCE (choice.TYPE, 'Geen') keuze_type,
          choice.url keuze_url,
          choice.oms keuze_omschrijving
     FROM fac_gui_counter fgc,
          prs_v_perslid_fullnames pf,
          (SELECT fac_gui_counter_refkey,
                  fac_gui_counter_info url,
                  'Reserveerbaar artikel' TYPE,
                  res_artikel_omschrijving oms
             FROM fac_gui_counter fgc, res_artikel ra
            WHERE fac_gui_counter_info IS NOT NULL
              AND fac_gui_counter_group = 'searchchoice'
              AND fac_gui_counter_info LIKE '%res_artikel%'
              AND ra.res_artikel_key(+) =
                     fac.safe_to_number(SUBSTR (
                                           fac_gui_counter_info,
                                           (INSTR (fac_gui_counter_info,
                                                   'key=')
                                            + 4)
                                        ))
           UNION
           SELECT fac_gui_counter_refkey,
                  fac_gui_counter_info,
                  'Reserveerbaar object',
                  res_deel_omschrijving
             FROM fac_gui_counter fgc, res_deel rd
            WHERE fac_gui_counter_info IS NOT NULL
              AND fac_gui_counter_group = 'searchchoice'
              AND fac_gui_counter_info LIKE '%res_deel%'
              AND rd.res_deel_key(+) =
                     fac.safe_to_number(SUBSTR (
                                           fac_gui_counter_info,
                                           (INSTR (fac_gui_counter_info,
                                                   'key=')
                                            + 4)
                                        ))
           UNION
           SELECT fac_gui_counter_refkey,
                  fac_gui_counter_info,
                  'Melding',
                  std.mld_stdmelding_omschrijving oms
             FROM fac_gui_counter fgc, mld_stdmelding std
            WHERE fac_gui_counter_info IS NOT NULL
              AND fac_gui_counter_group = 'searchchoice'
              AND fac_gui_counter_info LIKE '%stdm%'
              AND std.mld_stdmelding_key(+) =
                     fac.safe_to_number(SUBSTR (
                                           fac_gui_counter_info,
                                           (INSTR (fac_gui_counter_info, '=')
                                            + 1)
                                        ))
           UNION
           SELECT fac_gui_counter_refkey,
                  fac_gui_counter_info,
                  'Kennisbank',
                  fac_faq_question oms
             FROM fac_gui_counter fgc, fac_faq faq
            WHERE fac_gui_counter_info IS NOT NULL
              AND fac_gui_counter_group = 'searchchoice'
              AND fac_gui_counter_info LIKE '%faq%'
              AND fac_faq_key(+) =
                     fac.safe_to_number(SUBSTR (
                                           fac_gui_counter_info,
                                           (INSTR (fac_gui_counter_info, '=')
                                            + 1)
                                        ))
           UNION
           SELECT fac_gui_counter_refkey,
                  fac_gui_counter_info,
                  'Reserveerbare ruimte',
                  res_ruimte_nr oms
             FROM fac_gui_counter fgc, res_ruimte
            WHERE fac_gui_counter_info IS NOT NULL
              AND fac_gui_counter_group = 'searchchoice'
              AND fac_gui_counter_info LIKE '%res_ruimte%'
              AND res_ruimte_key(+) =
                     fac.safe_to_number(SUBSTR (
                                           fac_gui_counter_info,
                                           (INSTR (fac_gui_counter_info, '=')
                                            + 1)
                                        ))
           UNION
           SELECT fac_gui_counter_refkey,
                  fac_gui_counter_info,
                  'Bestelling',
                  ins_discipline_omschrijving
             FROM fac_gui_counter fgc, bes_discipline
            WHERE fac_gui_counter_info IS NOT NULL
              AND fac_gui_counter_group = 'searchchoice'
              AND fac_gui_counter_info LIKE '%bes%'
              AND ins_discipline_key(+) =
                     fac.safe_to_number(SUBSTR (
                                           fac_gui_counter_info,
                                           (INSTR (fac_gui_counter_info,
                                                   'dis_key=')
                                            + 8)
                                        ))
           UNION
           SELECT fac_gui_counter_refkey,
                  fac_gui_counter_info,
                  'Telefoonboek',
                  prs_perslid_naam_full
             FROM fac_gui_counter fgc, prs_v_perslid_fullnames pf
            WHERE fac_gui_counter_info IS NOT NULL
              AND fac_gui_counter_group = 'searchchoice'
              AND fac_gui_counter_info LIKE '%phone%'
              AND pf.prs_perslid_key(+) =
                     fac.safe_to_number(SUBSTR (
                                           fac_gui_counter_info,
                                           (INSTR (fac_gui_counter_info, '=')
                                            + 1)
                                        ))) choice,
          (SELECT fac_gui_counter_refkey,
                  REPLACE (REPLACE (fac_gui_counter_info, '{', ''), '}', '')
                     result
             FROM fac_gui_counter fgc
            WHERE fac_gui_counter_info IS NOT NULL
              AND fac_gui_counter_group = 'searchresult') result
    WHERE fac_gui_counter_group = 'search'
      AND fgc.fac_gui_counter_info IS NOT NULL
      AND fgc.prs_perslid_key = pf.prs_perslid_key
      AND choice.fac_gui_counter_refkey(+) = fgc.fac_gui_counter_key
      AND result.fac_gui_counter_refkey(+) = fgc.fac_gui_counter_key;



CREATE OR REPLACE VIEW pchx_v_autorisatierol
(
   fac_groep_omschrijving,
   fac_functie_omschrijving,
   ins_srtdiscipline_omschrijving,
   ins_discipline_omschrijving,
   prs_rechten,
   alg_rechten
)
AS
   SELECT fac_groep_omschrijving,
          COALESCE(fac_locale_xsl_tekst, fac_functie_omschrijving),
          ins_srtdiscipline_omschrijving,
          d.ins_discipline_omschrijving,
          DECODE (
             fac_functie_min_level,
             0,
             DECODE (fac_gebruiker_prs_level_write,
                     9, DECODE (fac_gebruiker_prs_level_read, 9, '-', 'Read'),
                     'Write'),
             1,
             DECODE (fac_gebruiker_prs_level_write,
                     9, DECODE (fac_gebruiker_prs_level_read, 9, '-', 'Read'),
                     'Write'),
             3,
             DECODE (fac_gebruiker_prs_level_write,
                     9, DECODE (fac_gebruiker_prs_level_read, 9, '-', 'Read'),
                     'Write'),
             7,
             DECODE (fac_gebruiker_prs_level_write,
                     9, DECODE (fac_gebruiker_prs_level_read, 9, '-', 'Read'),
                     'Write'),
             11,
             '-',
             13,
             DECODE (fac_gebruiker_prs_level_read, 9, '-', 'Read'),
             15,
             DECODE (fac_gebruiker_prs_level_write,
                     9, DECODE (fac_gebruiker_prs_level_read, 9, '-', 'Read'),
                     'Write'))
             prs_rechten,
          DECODE (
             fac_functie_min_level,
             0,
             DECODE (fac_gebruiker_alg_level_write,
                     9, DECODE (fac_gebruiker_alg_level_read, 9, '-', 'Read'),
                     'Write'),
             1,
             DECODE (fac_gebruiker_alg_level_write,
                     9, DECODE (fac_gebruiker_alg_level_read, 9, '-', 'Read'),
                     'Write'),
             3,
             DECODE (fac_gebruiker_alg_level_write,
                     9, DECODE (fac_gebruiker_alg_level_read, 9, '-', 'Read'),
                     'Write'),
             7,
             '-',
             11,
             DECODE (fac_gebruiker_alg_level_write,
                     9, DECODE (fac_gebruiker_alg_level_read, 9, '-', 'Read'),
                     'Write'),
             13,
             DECODE (fac_gebruiker_alg_level_read, 9, '-', 'Read'),
             15,
             DECODE (fac_gebruiker_alg_level_write,
                     9, DECODE (fac_gebruiker_alg_level_read, 9, '-', 'Read'),
                     'Write'))
             alg_rechten
     FROM fac_groeprechten gr,
          fac_groep g,
          ins_tab_discipline d,
          fac_functie f,
          ins_srtdiscipline sd,
          (SELECT fac_locale_xsl_label, fac_locale_xsl_tekst
             FROM fac_locale_xsl
            WHERE fac_locale_xsl_lang = 'NL') l
    WHERE gr.fac_groep_key = g.fac_groep_key
      AND gr.ins_discipline_key = d.ins_discipline_key(+)
      AND d.ins_srtdiscipline_key = sd.ins_srtdiscipline_key(+)
      AND gr.fac_functie_key = f.fac_functie_key
      AND f.fac_functie_omschrijving = fac_locale_xsl_label(+);

/* Formatted on 1-6-2017 8:40:22 (QP5 v5.136.908.31019) */
CREATE OR REPLACE VIEW pchx_v_autorisatie
(
   prs_perslid_naam_full,
   prs_afdeling_naam,
   prs_afdeling_omschrijving,
   prs_bedrijf_naam,
   fac_groep_omschrijving
)
AS
   SELECT prs_perslid_naam_full,
          prs_afdeling_naam,
          prs_afdeling_omschrijving,
          prs_bedrijf_naam,
          fac_groep_omschrijving
     FROM fac_gebruikersgroep gg,
          fac_groep g,
          prs_perslid p,
          prs_v_perslid_fullnames pf,
          prs_v_afdeling a,
          prs_bedrijf b
    WHERE gg.fac_groep_key = g.fac_groep_key
      AND gg.prs_perslid_key = p.prs_perslid_key
      AND p.prs_perslid_key = pf.prs_perslid_key
      AND p.prs_afdeling_key = a.prs_afdeling_key
      AND a.prs_bedrijf_key = b.prs_bedrijf_key;


-- Organisastie brede view voor het tonen van het aantal meldingen per dag met een tijdspanne van een week
CREATE OR REPLACE VIEW pchx_aant_per_dag
(
    mld_melding_datum
)
AS
    SELECT mld_melding_datum
      FROM mld_melding
     WHERE     TO_CHAR (mld_melding_datum, 'D') NOT IN (1, 7)
           AND TRUNC (mld_melding_datum) NOT IN
                   (SELECT TRUNC (mld_vrije_dagen_datum) FROM mld_vrije_dagen)
           AND mld_melding_datum > SYSDATE - 7
           AND NOT mld_melding_datum > SYSDATE;

-- Organisastie brede view voor het tonen van het aantal meldingen per maand met een tijdspanne van een jaar
CREATE OR REPLACE VIEW pchx_v_aant_mld_per_maand
(
    mld_melding_datum
)
AS
    SELECT TRUNC(mld_melding_datum)
      FROM mld_melding
     WHERE     TO_CHAR (mld_melding_datum, 'D') NOT IN (1, 7)
           AND TRUNC (mld_melding_datum) NOT IN
                   (SELECT TRUNC (mld_vrije_dagen_datum) FROM mld_vrije_dagen)
           AND mld_melding_datum > ADD_MONTHS (SYSDATE, -11)
           AND NOT mld_melding_datum > SYSDATE;

-- Organisastie brede view voor het tonen van het aantal meldingen per locatie
CREATE OR REPLACE VIEW pchx_open_meldingen_locatie
AS
    SELECT mld_melding_key,
           mld_alg_locatie_key,
           alg_locatie_key,
           mld_melding_status,
           alg_locatie_omschrijving
      FROM mld_melding, alg_locatie
     WHERE     mld_alg_locatie_key = alg_locatie_key
           AND mld_melding_status IS NOT NULL
           AND mld_melding_status <> 5;

-- Organisastie brede view voor het tonen van het aantal opgelost binnen SLA
CREATE OR REPLACE VIEW pchx_v_graph_optijd_sla
(
    fclt_xas_,
    fclt_yas_
)
AS
    SELECT SUM (acceptoptijd) aantal, COUNT (mld_key) totaal
      FROM (SELECT DISTINCT
                   m.mld_melding_key
                       mld_key,
                   CASE SIGN (
                              fac.datumtijdplusuitvoertijd (
                                  fac.gettrackingdate ('MLDNEW',
                                                       m.mld_melding_key),
                                  std.mld_stdmelding_t_accepttijd.tijdsduur,
                                  std.mld_stdmelding_t_accepttijd.eenheid)
                            - COALESCE (
                                  fac.gettrackingdate ('MLDREJ',
                                                       m.mld_melding_key),
                                  COALESCE (
                                      fac.gettrackingdate ('MLDACP',
                                                           m.mld_melding_key),
                                      SYSDATE)))
                       WHEN -1
                       THEN
                           0
                       ELSE
                           1
                   END
                       acceptoptijd
              FROM mld_melding        m,
                   mld_discipline     md,
                   mld_stdmelding     std,
                   ins_srtdiscipline  sd
             WHERE     md.ins_discipline_key = std.mld_ins_discipline_key
                   AND std.mld_stdmelding_key = m.mld_stdmelding_key
                   AND md.ins_srtdiscipline_key = sd.INS_SRTDISCIPLINE_KEY
                   AND sd.INS_SRTDISCIPLINE_KEY = 102                           --Aangegeven dat het alleen om storingen gaat
                   --AND m.mld_melding_datum >= SYSDATE -7                      --Bepaling tijdspanne
                   --TO_DATE ('01-01-1990','DD-MM-YYYY')                        --Alternatieve bepaling tijdspanne
                   AND mld_melding_status NOT IN (1, 5, 6)
                   AND mld_melding_datum > SYSDATE - 7
                   AND NOT mld_melding_datum > SYSDATE);

--Klant specifieke view voor het tonen van alle nieuwe meldingen gesorteerd op THT
/*
CREATE OR REPLACE VIEW pchx_v_lijst_nieuwe_mld
AS
      SELECT meldingnummer,
             productgroep,
             melding_ruimte,
             onderwerp,
             melding_status,
             ROUND (
                 mld_t_uitvoertijd (
                     m.min_t_sla.tijdsduur + m.max_t_respijt.tijdsduur,
                     m.min_t_sla.eenheid).tijdsduur,
                 2)
                 tht
        FROM mld_v_udr_melding mu, pchx_v_startmelding_geg m
       WHERE     MELDING_STATUS IN ('Nieuw', 'Te accepteren')
             AND mu.melding_key = m_start
    ORDER BY tht;
*/

CREATE OR REPLACE VIEW pchx_v_kostenplaatsen
AS
   SELECT prs_kostenplaats_key,
          prs_kostenplaats_nr || ' - ' || prs_kostenplaats_omschrijving
             prs_kostenplaats_omschrijving,
          COALESCE (prs_kostenplaats_verwijder, prs_kostenplaats_eind)
             prs_kostenplaats_eind
     FROM prs_kostenplaats;

--PCHD#54161 - Rapportage verwijderde facturen
CREATE OR REPLACE VIEW pchx_v_fintrack
(FACTUUR_KEY,
TRACKING_KEY,
TRACKING_DATUM,
TRACKING_OMS,
NAAM,
NOTI_CODE,
STATUS_OUD,
STATUS_NIEUW)
AS
SELECT
          f.factuur_key,
          t.fac_tracking_key,
          t.fac_tracking_datum,
          t.fac_tracking_oms,
          p.prs_perslid_naam_friendly,
          sn.fac_srtnotificatie_code,
            CASE
               WHEN t.fac_tracking_oms LIKE '%Status:%'
               THEN
                  SUBSTR (
                     t.fac_tracking_oms,
                     INSTR (t.fac_tracking_oms, 'Status:') + 8,
                     INSTR (
                        SUBSTR (t.fac_tracking_oms,
                                INSTR (t.fac_tracking_oms, 'Status:') + 9,
                                100),
                        ' --> '))
               ELSE
                  ''
            END
               AS status_oud,
            CASE
               WHEN t.fac_tracking_oms LIKE '%Status:%'
               THEN
                  SUBSTR (
                     SUBSTR (t.fac_tracking_oms,
                             INSTR (t.fac_tracking_oms, 'Status:') + 10,
                             999),
                     INSTR (
                        SUBSTR (t.fac_tracking_oms,
                                INSTR (t.fac_tracking_oms, 'Status:') + 10,
                                999),
                        ' --> ')
                     + 5,
                     INSTR (
                        SUBSTR (
                           SUBSTR (
                              t.fac_tracking_oms,
                              INSTR (t.fac_tracking_oms, 'Status:') + 14
                              + INSTR (
                                   SUBSTR (
                                      t.fac_tracking_oms,
                                      INSTR (t.fac_tracking_oms, 'Status:')
                                      + 10,
                                      999),
                                   ' --> ')),
                           0),
                        CHR (10)))
               ELSE
                  ''
            END
            AS status_nieuw
FROM fac_tracking t,
            fac_srtnotificatie sn,
            fin_v_udr_factuur f,
            prs_v_perslid_fullnames_all p
WHERE t.fac_srtnotificatie_key = sn.fac_srtnotificatie_key
    AND SUBSTR (sn.fac_srtnotificatie_code, 1, 3) = 'FIN'
    AND  t.fac_tracking_refkey = f.factuur_key
    AND  p.prs_perslid_key = t.prs_perslid_key;

--PCHD#54161 - Rapportage verwijderde facturen
CREATE OR REPLACE VIEW pchx_v_rap_finfno
   (FACTUUR_KEY,
   FACTUUR_DATUM,
   UITVOERENDE,
   LEVERANCIER_NR,
   FACTUURNR_EXTERN,
   FACTUUR_VOOR,
   OPDRACHTNR,
   OPDRACHT_KEY,
   CONTRACT_KEY,
   BESTELLING_KEY,
   KOSTENPLAATS,
   KOSTENPLAATS_EXTERN,
   DISCIPLINE_OMSCHRIJVING,
   CATALOGUS,
   KOSTENSOORT,
   KOSTENSOORT_OPMERKING,
   KOSTENSOORT_REFCODE,
   KOSTENSOORT_ALTCODE,
   KOSTENSOORT_BTW,
   STDMELDING_OMSCHRIJVING,
   BEDRAG_INCL_BTW,
   BEDRAG_EXCL_BTW,
   HUIDIGE_STATUS_MELDING,
   STATUS_MELDING_AFWIJZING,
   OPMERKING,
   BUDGETHOUDER,
   DATUM_WIJZIGING,
   NAAM_WIJZIGING,
   GROOTBOEKREKENING,
   AF_BEDRIJF)
AS
SELECT f.factuur_key,
          f.factuur_datum,
          f.uitvoerende,
          f.leverancier_nr,
          f.factuurnr_extern,
          f.factuur_voor,
          f.opdrachtnr,
          f.opdracht_key,
          f.contract_key,
          f.bestelling_key,
          f.kostenplaats,
          f.kostenplaats_extern,
          f.discipline_omschrijving,
          f.catalogus,
          f.kostensoort,
          f.kostensoort_opmerking,
          f.kostensoort_refcode,
          f.kostensoort_altcode,
          f.kostensoort_btw,
          f.stdmelding_omschrijving,
          f.bedrag_incl_btw,
          f.bedrag_excl_btw,
          f.status,
          (SELECT t2.status_nieuw
            FROM pchx_v_fintrack t2
            WHERE t2.tracking_key =
              (SELECT MAX(t2.tracking_key)
                FROM pchx_v_fintrack t2
                WHERE t2.status_nieuw IS NOT NULL
                AND t2.tracking_key < t1.fac_tracking_key)) AS status_melding_afwijzing,
          f.opmerking,
          f.budgethouder,
          t1.fac_tracking_datum,
          p.prs_perslid_naam_friendly,
          (SELECT ud.fac_usrdata_omschr
            FROM fin_kenmerkfactuur kf, fin_kenmerk k, fac_kenmerkdomein fkd, fac_usrdata ud
            WHERE k.fin_kenmerk_key = 21                      -- Key voor aanvullend gegeven Grootboekrekening
            AND f.factuur_key = kf.fin_factuur_key
            AND k.fin_kenmerk_key = kf.fin_kenmerk_key
            AND fkd.fac_kenmerkdomein_key = k.fac_kenmerkdomein_key
            AND ud.fac_usrtab_key = fkd.fac_usrtab_key
            AND kf.fin_kenmerkfactuur_waarde = ud.fac_usrdata_key),
          (SELECT b.prs_bedrijf_naam
            FROM fin_kenmerkfactuur kf, fin_kenmerk k, fac_kenmerkdomein fkd, pchx_v_fin_bedrijf b
            WHERE k.fin_kenmerk_key = 41                      -- Key voor aanvullend gegeven Afw. bedrijf
            AND f.factuur_key = kf.fin_factuur_key
            AND k.fin_kenmerk_key = kf.fin_kenmerk_key
            AND fkd.fac_kenmerkdomein_key = k.fac_kenmerkdomein_key
            AND kf.fin_kenmerkfactuur_waarde = b.prs_bedrijf_key)
     FROM fin_v_udr_factuur f,
          fac_tracking t1,
          fac_srtnotificatie sn,
          prs_v_perslid_fullnames_all p
    WHERE     t1.fac_tracking_refkey = f.factuur_key
          AND sn.fac_srtnotificatie_key = t1.fac_srtnotificatie_key
          AND sn.fac_srtnotificatie_code = 'FINFNO'
          AND p.prs_perslid_key = t1.prs_perslid_key;


-- Koppeling om crediteurgegevens vanuit PCHD te verspreiden over de andere PCH omgevingen.
CREATE OR REPLACE PROCEDURE pchx_import_bedrijf_gegevens (
    p_import_key    NUMBER)
AS
    CURSOR c
    IS
          SELECT *
            FROM fac_imp_file
           WHERE fac_import_key = p_import_key
        ORDER BY fac_imp_file_index;

    v_bedrijf_key                  VARCHAR2 (1000);
    v_bedrijf_naam                 VARCHAR2 (1000);
    v_bedrijf_post_adres           VARCHAR2 (1000);
    v_bedrijf_post_postcode        VARCHAR2 (1000);
    v_bedrijf_post_plaats          VARCHAR2 (1000);
    v_bedrijf_post_land            VARCHAR2 (1000);
    v_bedrijf_bezoek_adres         VARCHAR2 (1000);
    v_bedrijf_bezoek_postcode      VARCHAR2 (1000);
    v_bedrijf_bezoek_plaats        VARCHAR2 (1000);
    v_bedrijf_bezoek_land          VARCHAR2 (1000);
    v_bedrijf_telefoon             VARCHAR2 (1000);
    v_bedrijf_fax                  VARCHAR2 (1000);
    v_bedrijf_telefoon2            VARCHAR2 (1000);
    v_bedrijf_contact_persoon      VARCHAR2 (1000);
    v_bedrijf_contact_telefoon     VARCHAR2 (1000);
    v_bedrijf_contact_fax          VARCHAR2 (1000);
    v_bedrijf_opmerking            VARCHAR2 (1000);
    v_bedrijf_opmerking2           VARCHAR2 (1000);
    v_bedrijf_uurloon              VARCHAR2 (1000);
    v_leverancier_nr               VARCHAR2 (1000);
    v_overeenkomst_nr              VARCHAR2 (1000);
    v_overeenkomst_datum           VARCHAR2 (1000);
    v_bedrijf_email                VARCHAR2 (1000);
    v_bedrijf_order_confirm        VARCHAR2 (1000);
    v_bedrijf_image_loc            VARCHAR2 (1000);
    v_bedrijf_details_loc          VARCHAR2 (1000);
    v_bedrijf_xmldetails_loc       VARCHAR2 (1000);
    v_bedrijf_xmlcatalogus_loc     VARCHAR2 (1000);
    v_bedrijf_bes_limiet           VARCHAR2 (1000);
    v_bedrijf_bes_kosten           VARCHAR2 (1000);
    v_bedrijf_aanmaak              VARCHAR2 (1000);
    v_bedrijf_verwijder            VARCHAR2 (1000);
    v_bedrijf_leverancier          VARCHAR2 (1000);
    v_bedrijf_uitvoerende          VARCHAR2 (1000);
    v_bedrijf_contract             VARCHAR2 (1000);
    v_bedrijf_intern               VARCHAR2 (1000);
    v_bedrijf_huurder              VARCHAR2 (1000);
    v_bedrijf_bezoeker             VARCHAR2 (1000);
    v_bedrijf_ingids               VARCHAR2 (1000);
    v_bedrijf_bes_factor           VARCHAR2 (1000);
    v_relatietype_omschrijving     VARCHAR2 (1000);
    v_bedrijfadres_key             VARCHAR2 (1000);
    v_bedrijfadres_type            VARCHAR2 (1000);
    v_typeopdr_omschrijving        VARCHAR2 (1000);
    v_bedrijfadres_url             VARCHAR2 (1000);
    v_bedrijfadres_ordermode       VARCHAR2 (1000);
    v_bedrijfadres_certificate     VARCHAR2 (1000);
    v_bedrijfadres_xsl             VARCHAR2 (1000);
    v_bedrijfadres_ext             VARCHAR2 (1000);
    v_bedrijfadres_username        VARCHAR2 (1000);
    v_bedrijfadres_password        VARCHAR2 (1000);
    v_bedrijfadres_attachfile      VARCHAR2 (1000);
    v_bedrijfadres_flexfiles       VARCHAR2 (1000);
    v_bedrijfadres_encoding        VARCHAR2 (1000);
    v_bedrijfadres_authmethod      VARCHAR2 (1000);
    v_bedrijfadres_soapversion     VARCHAR2 (1000);
    v_bedrijfadres_soapaction      VARCHAR2 (1000);
    v_bedrijfadres_lockuser_naam   VARCHAR2 (1000);
    v_bedrijfadres_locksecret      VARCHAR2 (1000);
    v_bedrijfadres_lockexpire      VARCHAR2 (1000);
    v_typeopdr_key                 NUMBER (10);
    v_relatietype_key              NUMBER (10);
    v_bedrijfadres_lockuser_key    NUMBER (10);

    v_newline                      VARCHAR2 (4000);             -- Import line
    v_field                        VARCHAR2 (1000);            -- Import field
    v_fielddelimitor               VARCHAR2 (1);
    v_errormsg                     VARCHAR (200);
    v_errorhint                    VARCHAR (200);
    v_header_is_valid              NUMBER (1) := 0;
    oracle_err_num                 NUMBER;
    oracle_err_mes                 VARCHAR2 (200);
BEGIN
    v_fielddelimitor := ';';

    DELETE pchx_imp_bedrijf_gegevens;

    FOR rec IN c
    LOOP
        BEGIN
            v_newline := rec.fac_imp_file_line;

            IF v_header_is_valid = 1
            THEN
                fac.imp_getfield (v_newline, v_fielddelimitor, v_bedrijf_key);
                fac.imp_getfield (v_newline,
                                  v_fielddelimitor,
                                  v_bedrijf_naam);
                fac.imp_getfield (v_newline,
                                  v_fielddelimitor,
                                  v_bedrijf_post_adres);
                fac.imp_getfield (v_newline,
                                  v_fielddelimitor,
                                  v_bedrijf_post_postcode);
                fac.imp_getfield (v_newline,
                                  v_fielddelimitor,
                                  v_bedrijf_post_plaats);
                fac.imp_getfield (v_newline,
                                  v_fielddelimitor,
                                  v_bedrijf_post_land);
                fac.imp_getfield (v_newline,
                                  v_fielddelimitor,
                                  v_bedrijf_bezoek_adres);
                fac.imp_getfield (v_newline,
                                  v_fielddelimitor,
                                  v_bedrijf_bezoek_postcode);
                fac.imp_getfield (v_newline,
                                  v_fielddelimitor,
                                  v_bedrijf_bezoek_plaats);
                fac.imp_getfield (v_newline,
                                  v_fielddelimitor,
                                  v_bedrijf_bezoek_land);
                fac.imp_getfield (v_newline,
                                  v_fielddelimitor,
                                  v_bedrijf_telefoon);
                fac.imp_getfield (v_newline, v_fielddelimitor, v_bedrijf_fax);
                fac.imp_getfield (v_newline,
                                  v_fielddelimitor,
                                  v_bedrijf_telefoon2);
                fac.imp_getfield (v_newline,
                                  v_fielddelimitor,
                                  v_bedrijf_contact_persoon);
                fac.imp_getfield (v_newline,
                                  v_fielddelimitor,
                                  v_bedrijf_contact_telefoon);
                fac.imp_getfield (v_newline,
                                  v_fielddelimitor,
                                  v_bedrijf_contact_fax);
                fac.imp_getfield (v_newline,
                                  v_fielddelimitor,
                                  v_bedrijf_opmerking);
                fac.imp_getfield (v_newline,
                                  v_fielddelimitor,
                                  v_bedrijf_opmerking2);
                fac.imp_getfield (v_newline,
                                  v_fielddelimitor,
                                  v_bedrijf_uurloon);
                fac.imp_getfield (v_newline,
                                  v_fielddelimitor,
                                  v_leverancier_nr);
                fac.imp_getfield (v_newline,
                                  v_fielddelimitor,
                                  v_overeenkomst_nr);
                fac.imp_getfield (v_newline,
                                  v_fielddelimitor,
                                  v_overeenkomst_datum);
                fac.imp_getfield (v_newline,
                                  v_fielddelimitor,
                                  v_bedrijf_email);
                fac.imp_getfield (v_newline,
                                  v_fielddelimitor,
                                  v_bedrijf_order_confirm);
                fac.imp_getfield (v_newline,
                                  v_fielddelimitor,
                                  v_bedrijf_image_loc);
                fac.imp_getfield (v_newline,
                                  v_fielddelimitor,
                                  v_bedrijf_details_loc);
                fac.imp_getfield (v_newline,
                                  v_fielddelimitor,
                                  v_bedrijf_xmldetails_loc);
                fac.imp_getfield (v_newline,
                                  v_fielddelimitor,
                                  v_bedrijf_xmlcatalogus_loc);
                fac.imp_getfield (v_newline,
                                  v_fielddelimitor,
                                  v_bedrijf_bes_limiet);
                fac.imp_getfield (v_newline,
                                  v_fielddelimitor,
                                  v_bedrijf_bes_kosten);
                fac.imp_getfield (v_newline,
                                  v_fielddelimitor,
                                  v_bedrijf_aanmaak);
                fac.imp_getfield (v_newline,
                                  v_fielddelimitor,
                                  v_bedrijf_verwijder);
                fac.imp_getfield (v_newline,
                                  v_fielddelimitor,
                                  v_bedrijf_leverancier);
                fac.imp_getfield (v_newline,
                                  v_fielddelimitor,
                                  v_bedrijf_uitvoerende);
                fac.imp_getfield (v_newline,
                                  v_fielddelimitor,
                                  v_bedrijf_contract);
                fac.imp_getfield (v_newline,
                                  v_fielddelimitor,
                                  v_bedrijf_intern);
                fac.imp_getfield (v_newline,
                                  v_fielddelimitor,
                                  v_bedrijf_huurder);
                fac.imp_getfield (v_newline,
                                  v_fielddelimitor,
                                  v_bedrijf_bezoeker);
                fac.imp_getfield (v_newline,
                                  v_fielddelimitor,
                                  v_bedrijf_ingids);
                fac.imp_getfield (v_newline,
                                  v_fielddelimitor,
                                  v_bedrijf_bes_factor);
                fac.imp_getfield (v_newline,
                                  v_fielddelimitor,
                                  v_relatietype_omschrijving);
                fac.imp_getfield (v_newline,
                                  v_fielddelimitor,
                                  v_bedrijfadres_key);
                fac.imp_getfield (v_newline,
                                  v_fielddelimitor,
                                  v_bedrijfadres_type);
                fac.imp_getfield (v_newline,
                                  v_fielddelimitor,
                                  v_typeopdr_omschrijving);
                fac.imp_getfield (v_newline,
                                  v_fielddelimitor,
                                  v_bedrijfadres_url);
                fac.imp_getfield (v_newline,
                                  v_fielddelimitor,
                                  v_bedrijfadres_ordermode);
                fac.imp_getfield (v_newline,
                                  v_fielddelimitor,
                                  v_bedrijfadres_certificate);
                fac.imp_getfield (v_newline,
                                  v_fielddelimitor,
                                  v_bedrijfadres_xsl);
                fac.imp_getfield (v_newline,
                                  v_fielddelimitor,
                                  v_bedrijfadres_ext);
                fac.imp_getfield (v_newline,
                                  v_fielddelimitor,
                                  v_bedrijfadres_username);
                fac.imp_getfield (v_newline,
                                  v_fielddelimitor,
                                  v_bedrijfadres_password);
                fac.imp_getfield (v_newline,
                                  v_fielddelimitor,
                                  v_bedrijfadres_attachfile);
                fac.imp_getfield (v_newline,
                                  v_fielddelimitor,
                                  v_bedrijfadres_flexfiles);
                fac.imp_getfield (v_newline,
                                  v_fielddelimitor,
                                  v_bedrijfadres_encoding);
                fac.imp_getfield (v_newline,
                                  v_fielddelimitor,
                                  v_bedrijfadres_authmethod);
                fac.imp_getfield (v_newline,
                                  v_fielddelimitor,
                                  v_bedrijfadres_soapversion);
                fac.imp_getfield (v_newline,
                                  v_fielddelimitor,
                                  v_bedrijfadres_soapaction);
                fac.imp_getfield (v_newline,
                                  v_fielddelimitor,
                                  v_bedrijfadres_lockuser_naam);
                fac.imp_getfield (v_newline,
                                  v_fielddelimitor,
                                  v_bedrijfadres_locksecret);
                fac.imp_getfield (v_newline,
                                  v_fielddelimitor,
                                  v_bedrijfadres_lockexpire);


                SELECT MAX (prs_relatietype_key)
                  INTO v_relatietype_key
                  FROM prs_relatietype rt
                 WHERE UPPER (rt.prs_relatietype_omschrijving) =
                       UPPER (v_relatietype_omschrijving);

                SELECT MAX (mld_typeopdr_key)
                  INTO v_typeopdr_key
                  FROM mld_typeopdr ot
                 WHERE UPPER (ot.mld_typeopdr_omschrijving) =
                       UPPER (v_typeopdr_omschrijving);

                SELECT MAX (prs_perslid_key)
                  INTO v_bedrijfadres_lockuser_key
                  FROM prs_perslid p
                 WHERE UPPER (p.prs_perslid_naam) =
                       UPPER (v_bedrijfadres_lockuser_naam);

                INSERT INTO pchx_imp_bedrijf_gegevens (
                                prs_bedrijf_key,
                                prs_bedrijf_naam,
                                prs_bedrijf_post_adres,
                                prs_bedrijf_post_postcode,
                                prs_bedrijf_post_plaats,
                                prs_bedrijf_post_land,
                                prs_bedrijf_bezoek_adres,
                                prs_bedrijf_bezoek_postcode,
                                prs_bedrijf_bezoek_plaats,
                                prs_bedrijf_bezoek_land,
                                prs_bedrijf_telefoon,
                                prs_bedrijf_fax,
                                prs_bedrijf_telefoon2,
                                prs_bedrijf_contact_persoon,
                                prs_bedrijf_contact_telefoon,
                                prs_bedrijf_contact_fax,
                                prs_bedrijf_opmerking,
                                prs_bedrijf_opmerking2,
                                prs_bedrijf_uurloon,
                                prs_leverancier_nr,
                                prs_overeenkomst_nr,
                                prs_overeenkomst_datum,
                                prs_bedrijf_email,
                                prs_bedrijf_order_confirm,
                                prs_bedrijf_image_loc,
                                prs_bedrijf_details_loc,
                                prs_bedrijf_xmldetails_loc,
                                prs_bedrijf_xmlcatalogus_loc,
                                prs_bedrijf_bes_limiet,
                                prs_bedrijf_bes_kosten,
                                prs_bedrijf_aanmaak,
                                prs_bedrijf_verwijder,
                                prs_bedrijf_leverancier,
                                prs_bedrijf_uitvoerende,
                                prs_bedrijf_contract,
                                prs_bedrijf_intern,
                                prs_bedrijf_huurder,
                                prs_bedrijf_bezoeker,
                                prs_bedrijf_ingids,
                                prs_bedrijf_bes_factor,
                                prs_relatietype_key,
                                prs_bedrijfadres_key,
                                prs_bedrijfadres_type,
                                mld_typeopdr_key,
                                prs_bedrijfadres_url,
                                prs_bedrijfadres_ordermode,
                                prs_bedrijfadres_certificate,
                                prs_bedrijfadres_xsl,
                                prs_bedrijfadres_ext,
                                prs_bedrijfadres_username,
                                prs_bedrijfadres_password,
                                prs_bedrijfadres_attachfile,
                                prs_bedrijfadres_flexfiles,
                                prs_bedrijfadres_encoding,
                                prs_bedrijfadres_authmethod,
                                prs_bedrijfadres_soapversion,
                                prs_bedrijfadres_soapaction,
                                prs_bedrijfadres_lockuser_key,
                                prs_bedrijfadres_locksecret,
                                prs_bedrijfadres_lockexpire)
                         VALUES (
                                    v_bedrijf_key,
                                    v_bedrijf_naam,
                                    v_bedrijf_post_adres,
                                    v_bedrijf_post_postcode,
                                    v_bedrijf_post_plaats,
                                    v_bedrijf_post_land,
                                    v_bedrijf_bezoek_adres,
                                    v_bedrijf_bezoek_postcode,
                                    v_bedrijf_bezoek_plaats,
                                    v_bedrijf_bezoek_land,
                                    v_bedrijf_telefoon,
                                    v_bedrijf_fax,
                                    v_bedrijf_telefoon2,
                                    v_bedrijf_contact_persoon,
                                    v_bedrijf_contact_telefoon,
                                    v_bedrijf_contact_fax,
                                    v_bedrijf_opmerking,
                                    v_bedrijf_opmerking2,
                                    FAC.safe_to_number(REPLACE(v_bedrijf_uurloon, ',', '.')),
                                    v_leverancier_nr,
                                    v_overeenkomst_nr,
                                    FAC.safe_to_date (
                                        v_overeenkomst_datum,
                                        'yyyy-mm-dd hh24:mi:ss'),
                                    v_bedrijf_email,
                                    v_bedrijf_order_confirm,
                                    v_bedrijf_image_loc,
                                    v_bedrijf_details_loc,
                                    v_bedrijf_xmldetails_loc,
                                    v_bedrijf_xmlcatalogus_loc,
                                    FAC.safe_to_number(REPLACE(v_bedrijf_bes_limiet, ',', '.')),
                                    FAC.safe_to_number(REPLACE(v_bedrijf_bes_kosten, ',', '.')),
                                    FAC.safe_to_date (
                                        v_bedrijf_aanmaak,
                                        'yyyy-mm-dd hh24:mi:ss'),
                                    FAC.safe_to_date (
                                        v_bedrijf_verwijder,
                                        'yyyy-mm-dd hh24:mi:ss'),
                                    v_bedrijf_leverancier,
                                    v_bedrijf_uitvoerende,
                                    v_bedrijf_contract,
                                    v_bedrijf_intern,
                                    v_bedrijf_huurder,
                                    v_bedrijf_bezoeker,
                                    v_bedrijf_ingids,
                                    FAC.safe_to_number(REPLACE(v_bedrijf_bes_factor, ',', '.')),
                                    v_relatietype_key,
                                    v_bedrijfadres_key,
                                    v_bedrijfadres_type,
                                    v_typeopdr_key,
                                    v_bedrijfadres_url,
                                    v_bedrijfadres_ordermode,
                                    v_bedrijfadres_certificate,
                                    v_bedrijfadres_xsl,
                                    v_bedrijfadres_ext,
                                    v_bedrijfadres_username,
                                    v_bedrijfadres_password,
                                    v_bedrijfadres_attachfile,
                                    v_bedrijfadres_flexfiles,
                                    v_bedrijfadres_encoding,
                                    v_bedrijfadres_authmethod,
                                    v_bedrijfadres_soapversion,
                                    v_bedrijfadres_soapaction,
                                    v_bedrijfadres_lockuser_key,
                                    v_bedrijfadres_locksecret,
                                    v_bedrijfadres_lockexpire);
            ELSE
                IF LOWER (v_newline) LIKE
                       'prs_bedrijf_key;prs_bedrijf_naam;prs_bedrijf_post_adres;prs_bedrijf_post_postcode;prs_bedrijf_post_plaats;prs_bedrijf_post_land;prs_bedrijf_bezoek_adres;prs_bedrijf_bezoek_postcode;prs_bedrijf_bezoek_plaats;prs_bedrijf_bezoek_land;prs_bedrijf_telefoon;prs_bedrijf_fax;prs_bedrijf_telefoon2;prs_bedrijf_contact_persoon;prs_bedrijf_contact_telefoon;prs_bedrijf_contact_fax;prs_bedrijf_opmerking;prs_bedrijf_opmerking2;prs_bedrijf_uurloon;prs_leverancier_nr;prs_overeenkomst_nr;prs_overeenkomst_datum;prs_bedrijf_email;prs_bedrijf_order_confirm;prs_bedrijf_image_loc;prs_bedrijf_details_loc;prs_bedrijf_xmldetails_loc;prs_bedrijf_xmlcatalogus_loc;prs_bedrijf_bes_limiet;prs_bedrijf_bes_kosten;prs_bedrijf_aanmaak;prs_bedrijf_verwijder;prs_bedrijf_leverancier;prs_bedrijf_uitvoerende;prs_bedrijf_contract;prs_bedrijf_intern;prs_bedrijf_huurder;prs_bedrijf_bezoeker;prs_bedrijf_ingids;prs_bedrijf_bes_factor;prs_relatietype_omschrijving;prs_bedrijfadres_key;prs_bedrijfadres_type;mld_typeopdr_omschrijving;prs_bedrijfadres_url;prs_bedrijfadres_ordermode;prs_bedrijfadres_certificate;prs_bedrijfadres_xsl;prs_bedrijfadres_ext;prs_bedrijfadres_username;prs_bedrijfadres_password;prs_bedrijfadres_attachfile;prs_bedrijfadres_flexfiles;prs_bedrijfadres_encoding;prs_bedrijfadres_authmethod;prs_bedrijfadres_soapversion;prs_bedrijfadres_soapaction;bedrijfadres_lockuser_naam;prs_bedrijfadres_locksecret;prs_bedrijfadres_lockexpire%'
                THEN
                    v_header_is_valid := 1;
                END IF;
            END IF;
        END;
    END LOOP;
EXCEPTION
    WHEN OTHERS
    THEN
        oracle_err_num := SQLCODE;
        oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
        v_errormsg :=
               'OTHERS (error '
            || oracle_err_num
            || '/'
            || oracle_err_mes
            || ')';
        fac.imp_writelog (p_import_key,
                          'E',
                          SUBSTR (v_errormsg, 1, 1000),
                          '');
END;
/


CREATE OR REPLACE PROCEDURE pchx_update_bedrijf_gegevens (
    p_import_key    NUMBER)
AS
    CURSOR c
    IS
        SELECT DISTINCT prs_bedrijf_key,
                        prs_bedrijf_naam,
                        prs_bedrijf_post_adres,
                        prs_bedrijf_post_postcode,
                        prs_bedrijf_post_plaats,
                        prs_bedrijf_post_land,
                        prs_bedrijf_bezoek_adres,
                        prs_bedrijf_bezoek_postcode,
                        prs_bedrijf_bezoek_plaats,
                        prs_bedrijf_bezoek_land,
                        prs_bedrijf_telefoon,
                        prs_bedrijf_fax,
                        prs_bedrijf_telefoon2,
                        prs_bedrijf_contact_persoon,
                        prs_bedrijf_contact_telefoon,
                        prs_bedrijf_contact_fax,
                        prs_bedrijf_opmerking,
                        prs_bedrijf_opmerking2,
                        prs_bedrijf_uurloon,
                        prs_leverancier_nr,
                        prs_overeenkomst_nr,
                        prs_overeenkomst_datum,
                        prs_bedrijf_email,
                        prs_bedrijf_order_confirm,
                        prs_bedrijf_image_loc,
                        prs_bedrijf_details_loc,
                        prs_bedrijf_xmldetails_loc,
                        prs_bedrijf_xmlcatalogus_loc,
                        prs_bedrijf_bes_limiet,
                        prs_bedrijf_bes_kosten,
                        prs_bedrijf_aanmaak,
                        prs_bedrijf_verwijder,
                        prs_bedrijf_leverancier,
                        prs_bedrijf_uitvoerende,
                        prs_bedrijf_contract,
                        prs_bedrijf_intern,
                        prs_bedrijf_huurder,
                        prs_bedrijf_bezoeker,
                        prs_bedrijf_ingids,
                        prs_bedrijf_bes_factor,
                        prs_relatietype_key
          FROM pchx_imp_bedrijf_gegevens;

    CURSOR c_addr(c_bedrijf_key NUMBER)
    IS
        SELECT DISTINCT prs_bedrijfadres_type,
                        mld_typeopdr_key,
                        prs_bedrijfadres_url,
                        prs_bedrijfadres_ordermode,
                        prs_bedrijfadres_certificate,
                        prs_bedrijfadres_xsl,
                        prs_bedrijfadres_ext,
                        prs_bedrijfadres_username,
                        prs_bedrijfadres_password,
                        prs_bedrijfadres_attachfile,
                        prs_bedrijfadres_flexfiles,
                        prs_bedrijfadres_encoding,
                        prs_bedrijfadres_authmethod,
                        prs_bedrijfadres_soapversion,
                        prs_bedrijfadres_soapaction,
                        prs_bedrijfadres_lockuser_key,
                        prs_bedrijfadres_locksecret,
                        prs_bedrijfadres_lockexpire
          FROM pchx_imp_bedrijf_gegevens
         WHERE prs_bedrijf_key = c_bedrijf_key;


    v_leverancier_nr   prs_bedrijf.prs_leverancier_nr%TYPE;
    v_bedrijf_key      prs_bedrijf.prs_bedrijf_key%TYPE;
    v_bedrijf_key_pchd prs_bedrijf.prs_bedrijf_key%TYPE;

    v_errormsg         VARCHAR (200);
    v_errorhint        VARCHAR (200);
    oracle_err_num     NUMBER;
    oracle_err_mes     VARCHAR2 (200);
BEGIN
    FOR rec IN c
    LOOP
        BEGIN
            v_bedrijf_key_pchd := rec.prs_bedrijf_key;

            SELECT prs_bedrijf_key
              INTO v_bedrijf_key
              FROM prs_bedrijf
             WHERE prs_leverancier_nr = rec.prs_leverancier_nr;
        EXCEPTION
            WHEN NO_DATA_FOUND
            THEN
                INSERT INTO prs_bedrijf (prs_bedrijf_naam,
                                         prs_bedrijf_post_adres,
                                         prs_bedrijf_post_postcode,
                                         prs_bedrijf_post_plaats,
                                         prs_bedrijf_post_land,
                                         prs_bedrijf_bezoek_adres,
                                         prs_bedrijf_bezoek_postcode,
                                         prs_bedrijf_bezoek_plaats,
                                         prs_bedrijf_bezoek_land,
                                         prs_bedrijf_telefoon,
                                         prs_bedrijf_fax,
                                         prs_bedrijf_telefoon2,
                                         prs_bedrijf_contact_persoon,
                                         prs_bedrijf_contact_telefoon,
                                         prs_bedrijf_contact_fax,
                                         prs_bedrijf_opmerking,
                                         prs_bedrijf_opmerking2,
                                         prs_bedrijf_uurloon,
                                         prs_leverancier_nr,
                                         prs_overeenkomst_nr,
                                         prs_overeenkomst_datum,
                                         prs_bedrijf_email,
                                         prs_bedrijf_order_confirm,
                                         prs_bedrijf_image_loc,
                                         prs_bedrijf_details_loc,
                                         prs_bedrijf_xmldetails_loc,
                                         prs_bedrijf_xmlcatalogus_loc,
                                         prs_bedrijf_bes_limiet,
                                         prs_bedrijf_bes_kosten,
                                         prs_bedrijf_aanmaak,
                                         prs_bedrijf_verwijder,
                                         prs_bedrijf_leverancier,
                                         prs_bedrijf_uitvoerende,
                                         prs_bedrijf_contract,
                                         prs_bedrijf_intern,
                                         prs_bedrijf_huurder,
                                         prs_bedrijf_bezoeker,
                                         prs_bedrijf_ingids,
                                         prs_bedrijf_bes_factor,
                                         prs_relatietype_key)
                     VALUES (rec.prs_bedrijf_naam,
                             rec.prs_bedrijf_post_adres,
                             rec.prs_bedrijf_post_postcode,
                             rec.prs_bedrijf_post_plaats,
                             rec.prs_bedrijf_post_land,
                             rec.prs_bedrijf_bezoek_adres,
                             rec.prs_bedrijf_bezoek_postcode,
                             rec.prs_bedrijf_bezoek_plaats,
                             rec.prs_bedrijf_bezoek_land,
                             rec.prs_bedrijf_telefoon,
                             rec.prs_bedrijf_fax,
                             rec.prs_bedrijf_telefoon2,
                             rec.prs_bedrijf_contact_persoon,
                             rec.prs_bedrijf_contact_telefoon,
                             rec.prs_bedrijf_contact_fax,
                             rec.prs_bedrijf_opmerking,
                             rec.prs_bedrijf_opmerking2,
                             rec.prs_bedrijf_uurloon,
                             rec.prs_leverancier_nr,
                             rec.prs_overeenkomst_nr,
                             rec.prs_overeenkomst_datum,
                             rec.prs_bedrijf_email,
                             rec.prs_bedrijf_order_confirm,
                             rec.prs_bedrijf_image_loc,
                             rec.prs_bedrijf_details_loc,
                             rec.prs_bedrijf_xmldetails_loc,
                             rec.prs_bedrijf_xmlcatalogus_loc,
                             rec.prs_bedrijf_bes_limiet,
                             rec.prs_bedrijf_bes_kosten,
                             rec.prs_bedrijf_aanmaak,
                             rec.prs_bedrijf_verwijder,
                             rec.prs_bedrijf_leverancier,
                             rec.prs_bedrijf_uitvoerende,
                             rec.prs_bedrijf_contract,
                             rec.prs_bedrijf_intern,
                             rec.prs_bedrijf_huurder,
                             rec.prs_bedrijf_bezoeker,
                             rec.prs_bedrijf_ingids,
                             rec.prs_bedrijf_bes_factor,
                             rec.prs_relatietype_key)
                     RETURNING prs_bedrijf_key INTO v_bedrijf_key;

            FOR rec1 IN c_addr(v_bedrijf_key_pchd)
            LOOP
                INSERT INTO prs_bedrijfadres (prs_bedrijf_key,
                                              prs_bedrijfadres_type,
                                              mld_typeopdr_key,
                                              prs_bedrijfadres_url,
                                              prs_bedrijfadres_ordermode,
                                              prs_bedrijfadres_certificate,
                                              prs_bedrijfadres_xsl,
                                              prs_bedrijfadres_ext,
                                              prs_bedrijfadres_username,
                                              prs_bedrijfadres_password,
                                              prs_bedrijfadres_attachfile,
                                              prs_bedrijfadres_flexfiles,
                                              prs_bedrijfadres_encoding,
                                              prs_bedrijfadres_authmethod,
                                              prs_bedrijfadres_soapversion,
                                              prs_bedrijfadres_soapaction,
                                              prs_bedrijfadres_lockuser_key,
                                              prs_bedrijfadres_locksecret,
                                              prs_bedrijfadres_lockexpire)
                     VALUES (v_bedrijf_key,
                             rec1.prs_bedrijfadres_type,
                             rec1.mld_typeopdr_key,
                             rec1.prs_bedrijfadres_url,
                             rec1.prs_bedrijfadres_ordermode,
                             rec1.prs_bedrijfadres_certificate,
                             rec1.prs_bedrijfadres_xsl,
                             rec1.prs_bedrijfadres_ext,
                             rec1.prs_bedrijfadres_username,
                             rec1.prs_bedrijfadres_password,
                             rec1.prs_bedrijfadres_attachfile,
                             rec1.prs_bedrijfadres_flexfiles,
                             rec1.prs_bedrijfadres_encoding,
                             rec1.prs_bedrijfadres_authmethod,
                             rec1.prs_bedrijfadres_soapversion,
                             rec1.prs_bedrijfadres_soapaction,
                             rec1.prs_bedrijfadres_lockuser_key,
                             rec1.prs_bedrijfadres_locksecret,
                             rec1.prs_bedrijfadres_lockexpire);

            END LOOP;

        END;
    END LOOP;
EXCEPTION
    WHEN OTHERS
    THEN
        oracle_err_num := SQLCODE;
        oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
        v_errormsg :=
               'OTHERS (error '
            || oracle_err_num
            || '/'
            || oracle_err_mes
            || ')';
        fac.imp_writelog (p_import_key,
                          'E',
                          SUBSTR (v_errormsg, 1, 1000),
                          '');
END;
/

------ payload end   ------

SET DEFINE OFF
BEGIN adm.systrackscriptId ('$Id$', 0); END;
/

COMMIT;
SET ECHO OFF
SPOOL OFF
SET DEFINE ON
PROMPT Logfile of this upgrade is: &fcltlogfile