-- Script containing customer specific configuration sql statements for SORO: Stichting ORO
-- (c) 2013 SG|facilitor
-- $Revision$
-- $Id$
--
-- Support: +31 53 4800710

set echo on

spool xsoro.lst

--
-- Personen import
--

-- soro_insert_huidige_wp bepaalt huidige werkplek en update de import-tabel 'fac_imp_perslid' daarmee. 
-- Indien persoon nieuw is (personeelsnr bestaat niet), of persoon bestaat wel maar heeft geen werkplek, dan wordt import-tabel 'fac_imp_perslid' niet geupdate met werkplek maar blijft null.
-- Indien persoon uit Beaufort op afdeling zit / is verhuisd waarbij geen werkplek kan worden bepaald (b.v. omdat v_sla_werkplek_over=1 of afdeling-gebouw relatie ontbreekt),
-- dan wordt de huidige werkplek in fac_imp_perslid geinsert, zodat die wordt aangehouden als correcte.
-- Op deze manier worden HANDMATIG geplaatste personen op een werkplek/ruimte gehandhaafd (anders zouden ze allemaal door de standaard worden verwijderd).

CREATE OR REPLACE PROCEDURE soro_insert_huidige_wp(
    p_import_key IN NUMBER,
    p_prs_perslid_nr IN VARCHAR2,
    p_prs_perslid_naam IN VARCHAR2,
    p_prs_afdeling_omschrijving IN VARCHAR2
) AS
    v_prs_perslid_key           prs_perslid.prs_perslid_key%TYPE;
    v_prs_werkplek_key          prs_werkplek.prs_werkplek_key%TYPE;
    
    
    v_alg_locatie_code          alg_locatie.alg_locatie_code%TYPE;
    v_alg_gebouw_code           alg_gebouw.alg_gebouw_code%TYPE;
    v_alg_verdieping_volgnr     alg_verdieping.alg_verdieping_volgnr%TYPE;
    v_alg_ruimte_nr             alg_ruimte.alg_ruimte_nr%TYPE;
    
    oracle_err_num              NUMBER;
    oracle_err_mes              VARCHAR2 (200);
    v_errormsg                  VARCHAR2 (400);
    v_errorhint                 VARCHAR2 (400);

BEGIN
    v_errormsg := 'Huidige werkplek: persoon (naam = ' || p_prs_perslid_naam  || ', afdeling =' || p_prs_afdeling_omschrijving || ') met personeelsnummer ' || p_prs_perslid_nr || ' is nieuw' ;
              
    SELECT prs_perslid_key
    INTO v_prs_perslid_key
    FROM prs_v_aanwezigperslid
    WHERE prs_perslid_nr = p_prs_perslid_nr;
    
    v_errormsg := 'Huidige werkplek: persoon (naam = ' || p_prs_perslid_naam  || ', afdeling =' || p_prs_afdeling_omschrijving || ') met personeelsnummer ' || p_prs_perslid_nr || ' is bekend en heeft geen werkplek';
    SELECT prs_werkplek_key
    INTO  v_prs_werkplek_key
    FROM prs_perslidwerkplek
    WHERE prs_perslid_key = v_prs_perslid_key
    AND prs_perslidwerkplek_bezetting = (SELECT MAX (prs_perslidwerkplek_bezetting) 
                                        FROM prs_perslidwerkplek  
                                        WHERE prs_perslid_key = v_prs_perslid_key);
    
    v_errormsg := 'Huidige werkplek: persoon (naam = ' || p_prs_perslid_naam  || ', afdeling =' || p_prs_afdeling_omschrijving || ') met personeelsnummer ' || p_prs_perslid_nr || ' had wel werkplek, maar bijbehorende ruimte kan niet worden gevonden' ;
    
    SELECT r.alg_locatie_code, r.alg_gebouw_upper, r.alg_verdieping_volgnr, r.alg_ruimte_upper_nr
    INTO v_alg_locatie_code, v_alg_gebouw_code, v_alg_verdieping_volgnr, v_alg_ruimte_nr
    FROM prs_werkplek w, alg_v_ruimte_gegevens_all r
    WHERE w.prs_werkplek_key = v_prs_werkplek_key
    AND w.prs_alg_ruimte_key = r.alg_ruimte_key;
    
    v_errormsg := 'Huidige werkplek: persoon (naam = ' || p_prs_perslid_naam  || ', afdeling =' || p_prs_afdeling_omschrijving || ')  met personeelsnummer ' || p_prs_perslid_nr || ' had wel werkplek, maar kon niet worden behouden.' ;
    
    UPDATE fac_imp_perslid
    SET alg_locatie_code = v_alg_locatie_code,
        alg_gebouw_code = v_alg_gebouw_code,
        alg_verdieping_volgnr = v_alg_verdieping_volgnr,
        alg_ruimte_nr = v_alg_ruimte_nr
    WHERE prs_perslid_nr = p_prs_perslid_nr;
    
    
EXCEPTION
       WHEN NO_DATA_FOUND
       THEN
            fac.imp_writelog (p_import_key, 'I', v_errormsg, v_errorhint);
       WHEN OTHERS
       THEN
          fac.imp_writelog (p_import_key, 'I', v_errormsg, v_errorhint);
 
END soro_insert_huidige_wp;
/


-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-- Voor iedere persoon vanuit Beaufort gaan we de werkplek erbij bepalen, op basis van de afdleingsnaam.
-- Indien de afdelingsnaam overeenkomt met een gebouwnaam (voor afdelingen Huisvesting, ICT, HRM b.v is dat niet het geval), dan zoeken we naar de 1e verdieping(volgnr=0) 
-- en 1e ruimte (laagste ruimtenummer) om die te updaten in de importtabel, zodat personen daar een werkplek gaan krijgen.
--

CREATE OR REPLACE PROCEDURE soro_lookup_4_wp(
    p_import_key IN NUMBER
) AS

    CURSOR c_prs
    IS
        SELECT i.prs_perslid_nr, i.prs_perslid_naam, i.prs_afdeling_naam, i.prs_kenmerk1 as prs_afdeling_omschrijving
          FROM fac_imp_perslid i;
         
    v_alg_locatie_key           alg_locatie.alg_locatie_key%TYPE;
    v_alg_locatie_code          alg_locatie.alg_locatie_code%TYPE;
    v_alg_gebouw_key            alg_gebouw.alg_gebouw_key%TYPE;
    v_alg_gebouw_code           alg_gebouw.alg_gebouw_code%TYPE;
    v_alg_verdieping_key        alg_verdieping.alg_verdieping_key%TYPE;
    v_alg_verdieping_volgnr     alg_verdieping.alg_verdieping_volgnr%TYPE;
    v_alg_ruimte_nr             alg_ruimte.alg_ruimte_nr%TYPE;
    
    v_beganegrond_bestaat       NUMBER;
    v_ruimte_met_naam_ruimte    NUMBER;
    v_sla_werkplek_over         NUMBER;
    v_stamgebouw                NUMBER;
    
    
    oracle_err_num              NUMBER;
    oracle_err_mes              VARCHAR2 (200);
    v_errormsg                  VARCHAR2 (400);
    v_errorhint                 VARCHAR2 (400);
    
    
    
BEGIN

    FOR rec_wp IN c_prs
    LOOP
        BEGIN
            
            -- Bepaal huidige werkplek (die wellicht handmatig is geplaatst), en zet die in import-tabel om die INTAKT te laten, want alle lege 'werkplekken' worden achteraf verwijderd.
            soro_insert_huidige_wp(p_import_key, rec_wp.prs_perslid_nr, rec_wp.prs_perslid_naam, rec_wp.prs_afdeling_omschrijving);         
            
            v_errormsg :=
                 'Afdeling bestaat niet van persoon (personeelsnr - naam / afdeling - omschrijving) '
              || rec_wp.prs_perslid_nr
              || '-'
              || rec_wp.prs_perslid_naam
              || '/'
              || rec_wp.prs_afdeling_naam
              || '-'
              || rec_wp.prs_afdeling_omschrijving;
           
            -- Check of afdeling expliciet heeft ingesteld dat voor persoon GEEN werkplek moet worden gezocht.
            -- Dit is kenmerk key = 1000, is een vinkje, uit (=0) betekent wel werkplek zoeken, aan (=1) betekent geen werkplek zoeken.
            -- Bij GEEN werkplek zoeken, zorgen we ervoor dat een bestaande werkplek (met de hand aangemaakt b.v.) intakt blijft.
            SELECT fac.safe_to_number(COALESCE(prs_kenmerklink_waarde,'0'))
            INTO v_sla_werkplek_over
            FROM prs_afdeling a, prs_kenmerklink k
            WHERE prs_afdeling_upper = UPPER(rec_wp.prs_afdeling_naam)
            AND  a.prs_afdeling_key = K.PRS_LINK_KEY (+)
            AND K.PRS_KENMERKLINK_NIVEAU (+) = 'A'
            AND k.prs_kenmerk_key(+) = 1000;
            
            IF v_sla_werkplek_over = 0
            THEN
                -- We gaan op zoek naar werkplek, hetzij op basis van 
                -- 1) afdelingnaam = gebouwnaam (dit is de standaard manier), in dit geval is stamgebouw niet gevuld.
                -- 2) STAMGEBOUW, dit is als stamgebouw wel is gevuld, dan overruled die regel 1), en is dit expliciet het gebouw waar afdeling zit.
                
                -- Dus eerst op zoek of afdeling een stamgebouw heeft.
                -- Dit is kenmerk key = 1001, is een ref-kenmerk naar VIEW ALG_V_AANWEZIGGEBOUW
                
                SELECT fac.safe_to_number(COALESCE(prs_kenmerklink_waarde,'0'))
                INTO v_stamgebouw
                FROM prs_afdeling a, prs_kenmerklink k
                WHERE prs_afdeling_upper = UPPER(rec_wp.prs_afdeling_naam)
                AND  a.prs_afdeling_key = K.PRS_LINK_KEY (+)
                AND K.PRS_KENMERKLINK_NIVEAU (+) = 'A'
                AND k.prs_kenmerk_key(+) = 1001;
                
                v_alg_gebouw_key := NULL;
                
                IF v_stamgebouw = 0
                THEN
                    -- Er is GEEN stamgebouw, dus zoek op standaard manier naar gebouw waarvan de gebouwnaam overeenkomt met afdelingsomschrijving.
                    
                    v_errormsg :=
                         'Geen gebouw kunnen bepalen afdeling van persoon (personeelsnr - naam / afdeling - omschrijving) '
                      || rec_wp.prs_perslid_nr
                      || '-'
                      || rec_wp.prs_perslid_naam
                      || '/'
                      || rec_wp.prs_afdeling_naam
                      || '-'
                      || rec_wp.prs_afdeling_omschrijving;
                          
                    SELECT alg_gebouw_key, alg_gebouw_code, alg_locatie_key
                    INTO   v_alg_gebouw_key, v_alg_gebouw_code, v_alg_locatie_key
                    FROM   alg_v_aanweziggebouw
                    WHERE UPPER(alg_gebouw_naam) = (SELECT  UPPER(prs_afdeling_omschrijving) FROM prs_afdeling WHERE prs_afdeling_upper = UPPER(rec_wp.prs_afdeling_naam));
                ELSE
                    -- Er is WEL een stamgebouw
                    
                    v_errormsg :=
                         'Stamgebouw bestaat NIET meer bij afdeling van persoon (personeelsnr - naam / afdeling - omschrijving) '
                      || rec_wp.prs_perslid_nr
                      || '-'
                      || rec_wp.prs_perslid_naam
                      || '/'
                      || rec_wp.prs_afdeling_naam
                      || '-'
                      || rec_wp.prs_afdeling_omschrijving;
                    
                    SELECT alg_gebouw_key, alg_gebouw_code, alg_locatie_key
                    INTO   v_alg_gebouw_key, v_alg_gebouw_code, v_alg_locatie_key
                    FROM   alg_v_aanweziggebouw
                    WHERE  alg_gebouw_key = v_stamgebouw;
                END IF;
                
                SELECT alg_locatie_code
                INTO   v_alg_locatie_code
                FROM   alg_locatie
                WHERE  alg_locatie_key = v_alg_locatie_key;
                
                SELECT count(*)
                INTO   v_beganegrond_bestaat
                FROM   alg_v_aanwezigverdieping
                WHERE  alg_gebouw_key = v_alg_gebouw_key
                AND    alg_verdieping_volgnr = 0;
                
                IF v_beganegrond_bestaat = 1
                THEN
                    -- Begane grond bestaat!
                    
                    SELECT alg_verdieping_key, alg_verdieping_volgnr
                    INTO v_alg_verdieping_key, v_alg_verdieping_volgnr
                    FROM alg_v_aanwezigverdieping
                    WHERE alg_gebouw_key = v_alg_gebouw_key
                    AND alg_verdieping_volgnr = 0;
                ELSE
                    -- Begane grond bestaat niet, dan de eerste verdieping met laagste volgnummer, indien die niet gevonden, dan houd het op.
                    v_errormsg :='Fout bij bepalen verdieping bij gebouw (gebouwcode) ' || v_alg_gebouw_code;
                    
                     v_errormsg :=
                         'Fout bij bepalen verdieping bij gebouw (gebouwcode) ' || v_alg_gebouw_code || ' van persoon (personeelsnr - naam / afdeling - omschrijving) '
                      || rec_wp.prs_perslid_nr
                      || '-'
                      || rec_wp.prs_perslid_naam
                      || '/'
                      || rec_wp.prs_afdeling_naam
                      || '-'
                      || rec_wp.prs_afdeling_omschrijving;
                    
                    
                    SELECT alg_verdieping_key, alg_verdieping_volgnr
                    INTO v_alg_verdieping_key, v_alg_verdieping_volgnr
                    FROM alg_v_aanwezigverdieping
                    WHERE alg_gebouw_key = v_alg_gebouw_key
                    AND alg_verdieping_volgnr = (SELECT MIN(alg_verdieping_volgnr) FROM alg_v_aanwezigverdieping WHERE alg_gebouw_key = v_alg_gebouw_key);
                END IF;
                
                SELECT count(*)
                INTO v_ruimte_met_naam_ruimte
                FROM alg_v_aanwezigruimte
                WHERE alg_verdieping_key = v_alg_verdieping_key
                AND UPPER(alg_ruimte_nr) = 'RUIMTE';
                
                IF v_ruimte_met_naam_ruimte = 1
                THEN
                    -- Ruimte op verdieping met nummer 'RUIMTE' bestaat!
                    v_alg_ruimte_nr := 'RUIMTE';
                ELSE
                    -- Ruimte op verdieping met nummer 'RUIMTE' bestaat NIET! Dan de eerste ruimte met laagste ruimtenr, indien die niet gevonden, dan houd het op.
                    v_errormsg :='Fout bij bepalen ruimte bij gebouw en verdieping (gebouwcode / verdiepingvolgnr) ' || v_alg_gebouw_code || '/' || v_alg_verdieping_volgnr;
                    SELECT MIN(alg_ruimte_nr)
                    INTO v_alg_ruimte_nr
                    FROM alg_v_aanwezigruimte
                    WHERE alg_verdieping_key = v_alg_verdieping_key;
                END IF;
                
                -- Alleen werkplek bijwerken indien een van de volgende regeltjes waar is:
                -- 1) de persoon nog geen werkplek had (nieuw persoon of bestaande persoon zonder werkplek), dus als gebouw leeg is.
                -- 2) de persoon wel werkplek had, maar nu is gebouw een andere.
                -----> M.a.w. indien de persoon een werkplek heeft in hetzelfde gebouw, dan niet updaten, maar bestaande werkplek heeft voorrang (handmatig geplaatst b.v.)
                
                UPDATE fac_imp_perslid
                SET alg_locatie_code = v_alg_locatie_code,
                    alg_gebouw_code = v_alg_gebouw_code,
                    alg_verdieping_volgnr = v_alg_verdieping_volgnr,
                    alg_ruimte_nr = v_alg_ruimte_nr
                WHERE prs_perslid_nr = rec_wp.prs_perslid_nr
                AND (alg_gebouw_code IS NULL OR alg_gebouw_code <> v_alg_gebouw_code);
            END IF;
        EXCEPTION
           WHEN NO_DATA_FOUND
           THEN
                fac.imp_writelog (p_import_key, 'W', v_errormsg, v_errorhint);
           WHEN OTHERS
           THEN
               fac.imp_writelog (p_import_key, 'W', v_errormsg, v_errorhint);
        END;    

    END LOOP;

END soro_lookup_4_wp;
/




CREATE OR REPLACE PROCEDURE soro_post_import_perslid(
    p_import_key IN NUMBER
) AS
BEGIN
   
   -- Codering naamgebruik ORO:
   --  B = Naam partner - Geboortenaam
   --  C = Geboortenaam - Naam partner
   --  E = Geboortenaam
   --  P = Naam partner
   UPDATE fac_imp_perslid SET PRS_PERSLID_NAAMGEBRUIK_CODE = 0 WHERE PRS_KENMERK3 = 'E';  -- 0 (default) perslid_naam en perslid_tussenvoegsel worden gebruikt
   UPDATE fac_imp_perslid SET PRS_PERSLID_NAAMGEBRUIK_CODE = 1 WHERE PRS_KENMERK3 = 'B';  -- 1 personen die de geboortenaam van de partner icm de eigen naam willen gebruiken
   UPDATE fac_imp_perslid SET PRS_PERSLID_NAAMGEBRUIK_CODE = 2 WHERE PRS_KENMERK3 = 'P';  -- 2 personen die de geboortenaam van de partner willen gebruiken
   UPDATE fac_imp_perslid SET PRS_PERSLID_NAAMGEBRUIK_CODE = 3 WHERE PRS_KENMERK3 = 'C';  -- 3 personen die de eigen naam icm de geboortenaam van de partner willen gebruiken

    -- Toewijzen werkplek adhv afdelingsnaam
    -- Indien afdelingsnaam als gebouw bestaat, dan persoon hier de werkplek geven (op verdieping met volgnr 0 of anders 1e verdieping die bestaat, zo ook met ruimte (laagste ruimtenummer)
    soro_lookup_4_wp(p_import_key);

END soro_post_import_perslid;
/


---------------------------------------------------------------------------------------------------------------------------------------------------------------------------




CREATE OR REPLACE PROCEDURE soro_import_perslid (p_import_key IN NUMBER)
AS
   oracle_err_num            NUMBER;
   oracle_err_mes            VARCHAR2 (200);
   v_errormsg                VARCHAR2 (400);
   v_errorhint               VARCHAR2 (400);
BEGIN
   
   v_errorhint := 'Generieke update';
   -- de sequence array staat beschreven in PRS_PAC.SRC bij de prs.import_perslid proc
   prs.import_perslid (p_import_key,
                       '0;0;0;0;0;0;1;7;6;5;' ||
                       '0;9;8;13;;0;0;12;0;3;' || 
                       '11;3;0;0;0;0;2;1;13;0;'||
                       '0;0;0;0;0;0;0;0;0;0;'||
                       '0;0;0;0;0;0',
                       '"Org.eenh.";"Naam org.eenh.";"Persoonsnr.";"Naam samengesteld";"Roepnaam";"Voorvoeg.geb.naam";"Geb.naam";"Voorvoeg.partner";"Naam partner";"Functiecode DV";"Oms functie";"Email werk";"Gebruik achternaam"%'
                       ); 

   -- Klantspecifieke aanpassingen
   soro_post_import_perslid(p_import_key);
   
   COMMIT;
EXCEPTION
   WHEN OTHERS
   THEN
      oracle_err_num := SQLCODE;
      oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
      v_errormsg := 'Error ' || oracle_err_num || '/' || oracle_err_mes;
      fac.imp_writelog (p_import_key, 'E', v_errormsg, v_errorhint);
END soro_import_perslid;
/


CREATE OR REPLACE PROCEDURE soro_update_perslid (
   p_import_key IN NUMBER
) IS

CURSOR c_del
IS
    SELECT p.prs_perslid_key, p.prs_perslid_nr, pf.prs_perslid_naam_full
      FROM fac_imp_perslid i, prs_perslid p, prs_v_perslid_fullnames_all pf
     WHERE p.prs_perslid_nr = i.prs_perslid_nr(+)
       AND pf.prs_perslid_key = p.prs_perslid_key
       AND p.prs_perslid_nr IS NOT NULL
       AND i.prs_perslid_nr IS NULL
       AND p.prs_perslid_verwijder IS NULL
    ORDER BY 2;

v_count           NUMBER;

BEGIN
    -- generic update

    SELECT count(*)
      INTO v_count
      FROM fac_imp_perslid;

    IF v_count < 1000
    THEN
      fac.imp_writelog (p_import_key,
                        'E',
                        'Het aantal te importeren personen is te klein ('
                        || TO_CHAR (v_count) || ')',
                        'Zie Specificatie'
      );
      RETURN;
    END IF;

  -- 'NR' betekent dat op basis van personeelsNummeR wordt gematched.
  -- 'A' betekent altijd alle (andere/overige) werkplekken verwijderen
  prs.update_perslid (p_import_key, 'NR', 'A');

  -- Verwijder personen die niet meer in de import voorkomen.
  FOR rec IN c_del
  LOOP
     BEGIN
       prs.delete_perslid (p_import_key, rec.prs_perslid_key);
     END;
  END LOOP;

END soro_update_perslid;
/

-- SORO#29825: Unieke objectid loopt globaal over alle ICT objecten, alle ICT objecten moeten dan wel de objectsoortcode 'ORO' gaan krijgen.
CREATE OR REPLACE VIEW soro_v_ict_ins_volgnr
(volgnr)
AS SELECT 'ORO' ||  NVL(LPAD( TO_CHAR(MAX(TO_NUMBER(SUBSTR(ins_deel_upper, LENGTH('ORO')+1,LENGTH(ins_deel_upper)-LENGTH('ORO'))))+1) , MAX(LENGTH(ins_deel_upper)-LENGTH('ORO')),'0'),'001')
          --  INTO NextVolgNr
        FROM INS_DEEL
        WHERE ins_deel_upper LIKE 'ORO'||'%'
        AND fac.safe_to_integer(SUBSTR(ins_deel_upper, LENGTH('ORO')+1,LENGTH(ins_deel_upper)-LENGTH('ORO'))) IS NOT NULL
        AND LTRIM(SUBSTR (ins_deel_upper, LENGTH ('ORO') + 1), '0') = TO_CHAR(fac.safe_to_integer ((SUBSTR (ins_deel_upper, LENGTH ('ORO') + 1))))
        AND ins_deel_parent_key IS NULL
        AND ins_deel_verwijder IS NULL;
        
        
-- SORO#30996: Autoritten administratie
-- View van reserveringsnummers van autoritten (res_activiteit_key = 30)  in het verleden (dus res. tot datum in het verleden) waarvan nog geen kilometerstand melding (std_melding_key = 181) van bestaat.
-- Let op: alleen de definitieve reserveringen (res_status_fo_key = 2)
-- Let op: harde datum-vanaf 1 januari 2015, zodat de hele oude autoritten (van voor 1 jan 2015) niet meedoen, aangezien dit vanaf 1 jan 2015 ingaat
-- Let op: de union is nodig zodat een gekozen reserveringsnummer (bij een melding) wel zichtbaar is als ref-flexprop, maar niet meer selecteerbaar bij edit/nieuw (vandaar de vervaldatum).
CREATE OR REPLACE VIEW soro_v_autorit_km
(
   res_rsv_ruimte_key,
   res_nummer,
   vervaldatum,
   mld_melding_key
)
AS
   SELECT   rrr.res_rsv_ruimte_key,
            rrr.res_reservering_key || '/' || rrr.res_rsv_ruimte_volgnr,
            NULL,
            NULL
     FROM   res_rsv_ruimte rrr
    WHERE       res_activiteit_key = 30
            AND res_rsv_ruimte_verwijder IS NULL
            AND res_rsv_ruimte_dirtlevel = 0
            AND res_status_fo_key = 2
            AND res_rsv_ruimte_tot < SYSDATE
            AND res_rsv_ruimte_van >= TO_DATE ('01-01-2015', 'dd-mm-yyyy')
            AND res_rsv_ruimte_aanmaak >=
                  TO_DATE ('01-01-2015', 'dd-mm-yyyy')
            AND NOT EXISTS
                  (SELECT   'x'
                     FROM   mld_melding m,
                            mld_kenmerkmelding km,
                            mld_kenmerk k,
                            mld_srtkenmerk sk,
                            fac_kenmerkdomein kd
                    WHERE       m.mld_stdmelding_key = 181
                            AND km.mld_melding_key = m.mld_melding_key
                            AND km.mld_kenmerk_key = k.mld_kenmerk_key
                            AND k.mld_kenmerk_verwijder IS NULL
                            AND sk.mld_srtkenmerk_key = k.mld_srtkenmerk_key
                            AND sk.mld_srtkenmerk_verwijder IS NULL
                            AND kd.fac_kenmerkdomein_key =
                                  sk.fac_kenmerkdomein_key
                            AND kd.fac_kenmerkdomein_module = 'MLD'
                            AND kd.fac_kenmerkdomein_objectnaam =
                                  'SORO_V_AUTORIT_KM'
                            AND kd.fac_kenmerkdomein_verwijder IS NULL
                            AND km.mld_kenmerkmelding_waarde =
                                  TO_CHAR (rrr.res_rsv_ruimte_key))
   UNION
   SELECT   rrr.res_rsv_ruimte_key,
            res_reservering_key || '/' || res_rsv_ruimte_volgnr,
            TO_DATE ('01-01-2000', 'dd-mm-yyyy'),
            m.mld_melding_key
     FROM   mld_melding m,
            mld_kenmerkmelding km,
            mld_kenmerk k,
            mld_srtkenmerk sk,
            fac_kenmerkdomein kd,
            res_rsv_ruimte rrr
    WHERE       m.mld_stdmelding_key = 181
            AND km.mld_melding_key = m.mld_melding_key
            AND km.mld_kenmerk_key = k.mld_kenmerk_key
            AND k.mld_kenmerk_verwijder IS NULL
            AND sk.mld_srtkenmerk_key = k.mld_srtkenmerk_key
            AND sk.mld_srtkenmerk_verwijder IS NULL
            AND kd.fac_kenmerkdomein_key = sk.fac_kenmerkdomein_key
            AND kd.fac_kenmerkdomein_module = 'MLD'
            AND kd.fac_kenmerkdomein_objectnaam = 'SORO_V_AUTORIT_KM'
            AND kd.fac_kenmerkdomein_verwijder IS NULL
            AND TO_CHAR (rrr.res_rsv_ruimte_key) =
                  km.mld_kenmerkmelding_waarde;

CREATE OR REPLACE VIEW SORO_V_NOTI_AUTORIT_KM
(
   CODE,
   SENDER,
   RECEIVER,
   TEXT,
   KEY,
   PAR1,
   PAR2,
   XKEY
)
AS
   SELECT   'CUST01',
            '',
            rrr.res_rsv_ruimte_contact_key,
               'Reminder: u heeft de kilometers van reservering/autovervoer '
            || res_reservering_key
            || '/'
            || res_rsv_ruimte_volgnr
            || ' nog niet ingevoerd',
            rrr.res_rsv_ruimte_key, -- reserveringskey, althans een willekeurige; FSN#19425
            NULL,
            NULL,
            NULL
     FROM   res_rsv_ruimte rrr
    WHERE       res_activiteit_key = 30
            AND res_rsv_ruimte_verwijder IS NULL
            AND res_rsv_ruimte_dirtlevel = 0
            AND res_status_fo_key = 2
            AND res_rsv_ruimte_tot < SYSDATE
            AND res_rsv_ruimte_van >= TO_DATE ('01-01-2015', 'dd-mm-yyyy')
            AND res_rsv_ruimte_aanmaak >=
                  TO_DATE ('01-01-2015', 'dd-mm-yyyy')
            AND NOT EXISTS
                  (SELECT   'x'
                     FROM   mld_melding m,
                            mld_kenmerkmelding km,
                            mld_kenmerk k,
                            mld_srtkenmerk sk,
                            fac_kenmerkdomein kd
                    WHERE       m.mld_stdmelding_key = 181
                            AND km.mld_melding_key = m.mld_melding_key
                            AND km.mld_kenmerk_key = k.mld_kenmerk_key
                            AND k.mld_kenmerk_verwijder IS NULL
                            AND sk.mld_srtkenmerk_key = k.mld_srtkenmerk_key
                            AND sk.mld_srtkenmerk_verwijder IS NULL
                            AND kd.fac_kenmerkdomein_key =
                                  sk.fac_kenmerkdomein_key
                            AND kd.fac_kenmerkdomein_module = 'MLD'
                            AND kd.fac_kenmerkdomein_objectnaam =
                                  'SORO_V_AUTORIT_KM'
                            AND kd.fac_kenmerkdomein_verwijder IS NULL
                            AND km.mld_kenmerkmelding_waarde =
                                  TO_CHAR (rrr.res_rsv_ruimte_key));
       

-- 1e deel: alle ritten zonder km's
--UNION
-- 2e deel: alle ritten met km's

-- Kenmerk-keys:
-- res_srtkenmerk_key = 1 ->  Naam client
-- res_srtkenmerk_key = 2 ->  Kosten: Client met/zonder verblijf
-- res_srtkenmerk_key = 23 -> Van
-- res_srtkenmerk_key = 24 -> Naar
-- mld_srtkenmerk_key = 63 -> Beginstand kilometers
-- mld_srtkenmerk_key = 64 -> Eindstand kilometers

CREATE OR REPLACE VIEW soro_v_autorit_met_km_reg
	(res_rsv_ruimte_key,
	 res_nummer,
	 res_rsv_ruimte_omschrijving,
	 res_rsv_ruimte_van,
	 res_rsv_ruimte_tot,
	 res_deel_omschrijving,
	 alg_locatie_code,
	 alg_locatie_omschrijving,
	 prs_perslid_naam,
	 prs_perslid_tussenvoegsel,
   prs_perslid_voorletters,
   prs_perslid_voornaam,
   client,
   kosten,
   reden_vervoer,
   van,
   naar,
   km_start,
   km_einde
   )
AS
 	SELECT  rit.res_rsv_ruimte_key, 
				rit.res_nummer, 
				rrr.res_rsv_ruimte_omschrijving,
				rrr.res_rsv_ruimte_van,
				rrr.res_rsv_ruimte_tot,
				rd.res_deel_omschrijving,
				l.alg_locatie_code,
				l.alg_locatie_omschrijving,
				p.prs_perslid_naam,
        p.prs_perslid_tussenvoegsel,
        p.prs_perslid_voorletters,
        p.prs_perslid_voornaam,
        NULL client,
        (SELECT UD.FAC_USRDATA_OMSCHR
           FROM res_kenmerkwaarde w, res_kenmerk k, fac_usrdata ud 
           WHERE ud.fac_usrdata_key = fac.safe_to_number(w.res_kenmerkreservering_waarde)
           AND w.res_rsv_ruimte_key = rit.res_rsv_ruimte_key
           AND w.res_kenmerk_key = k.res_kenmerk_key
           AND k.res_srtkenmerk_key = 2
           AND w.res_kenmerkwaarde_verwijder IS NULL) kosten,
        (SELECT UD.FAC_USRDATA_OMSCHR
           FROM res_kenmerkwaarde w, res_kenmerk k, fac_usrdata ud 
           WHERE ud.fac_usrdata_key = fac.safe_to_number(w.res_kenmerkreservering_waarde)
           AND w.res_rsv_ruimte_key = rit.res_rsv_ruimte_key
           AND w.res_kenmerk_key = k.res_kenmerk_key
           AND k.res_srtkenmerk_key = 41
           AND w.res_kenmerkwaarde_verwijder IS NULL) reden_vervoer,
        (SELECT w.res_kenmerkreservering_waarde
           FROM res_kenmerkwaarde w, res_kenmerk k
           WHERE w.res_rsv_ruimte_key = rit.res_rsv_ruimte_key
           AND w.res_kenmerk_key = k.res_kenmerk_key
           AND k.res_srtkenmerk_key = 23
           AND w.res_kenmerkwaarde_verwijder IS NULL) van,
        (SELECT w.res_kenmerkreservering_waarde
           FROM res_kenmerkwaarde w, res_kenmerk k
           WHERE w.res_rsv_ruimte_key = rit.res_rsv_ruimte_key
           AND w.res_kenmerk_key = k.res_kenmerk_key
           AND k.res_srtkenmerk_key = 24
           AND w.res_kenmerkwaarde_verwijder IS NULL) naar,
           NULL km_start,
           NULL km_einde
    FROM soro_v_autorit_km rit, res_rsv_ruimte rrr, prs_perslid p, res_rsv_deel rrd, res_deel rd, ins_deel d, alg_locatie l
    WHERE vervaldatum IS NULL
    AND rrr.res_rsv_ruimte_key = rit.res_rsv_ruimte_key
    AND p.prs_perslid_key = rrr.res_rsv_ruimte_host_key
    AND rrd.res_rsv_ruimte_key = rit.res_rsv_ruimte_key
    AND rrd.res_rsv_deel_verwijder IS NULL
    AND rd.res_deel_key=rrd.res_deel_key
    AND d.ins_deel_key = rd.res_ins_deel_key
    AND l.alg_locatie_key = d.ins_alg_locatie_key
UNION
    SELECT rit.res_rsv_ruimte_key, 
				rit.res_nummer, 
				rrr.res_rsv_ruimte_omschrijving,
				rrr.res_rsv_ruimte_van,
				rrr.res_rsv_ruimte_tot,
				rd.res_deel_omschrijving,
				l.alg_locatie_code,
				l.alg_locatie_omschrijving,
				p.prs_perslid_naam,
        p.prs_perslid_tussenvoegsel,
        p.prs_perslid_voorletters,
        p.prs_perslid_voornaam,
        NULL client,
        (SELECT UD.FAC_USRDATA_OMSCHR
           FROM res_kenmerkwaarde w, res_kenmerk k, fac_usrdata ud 
           WHERE ud.fac_usrdata_key = fac.safe_to_number(w.res_kenmerkreservering_waarde)
           AND w.res_rsv_ruimte_key = rit.res_rsv_ruimte_key
           AND w.res_kenmerk_key = k.res_kenmerk_key
           AND k.res_srtkenmerk_key = 2
           AND w.res_kenmerkwaarde_verwijder IS NULL) kosten,
        (SELECT UD.FAC_USRDATA_OMSCHR
           FROM res_kenmerkwaarde w, res_kenmerk k, fac_usrdata ud 
           WHERE ud.fac_usrdata_key = fac.safe_to_number(w.res_kenmerkreservering_waarde)
           AND w.res_rsv_ruimte_key = rit.res_rsv_ruimte_key
           AND w.res_kenmerk_key = k.res_kenmerk_key
           AND k.res_srtkenmerk_key = 41
           AND w.res_kenmerkwaarde_verwijder IS NULL) reden_vervoer,
        (SELECT w.res_kenmerkreservering_waarde
           FROM res_kenmerkwaarde w, res_kenmerk k
           WHERE w.res_rsv_ruimte_key = rit.res_rsv_ruimte_key
           AND w.res_kenmerk_key = k.res_kenmerk_key
           AND k.res_srtkenmerk_key = 23
           AND w.res_kenmerkwaarde_verwijder IS NULL) van,
        (SELECT w.res_kenmerkreservering_waarde
           FROM res_kenmerkwaarde w, res_kenmerk k
           WHERE w.res_rsv_ruimte_key = rit.res_rsv_ruimte_key
           AND w.res_kenmerk_key = k.res_kenmerk_key
           AND k.res_srtkenmerk_key = 24
           AND w.res_kenmerkwaarde_verwijder IS NULL) naar,
        (SELECT km.mld_kenmerkmelding_waarde
           FROM mld_kenmerkmelding km, mld_kenmerk k
           WHERE km.mld_melding_key = rit.mld_melding_key
           AND km.mld_kenmerk_key = k.mld_kenmerk_key
           AND k.mld_srtkenmerk_key = 63
           AND km.mld_kenmerkmelding_verwijder IS NULL) km_start,           
        (SELECT km.mld_kenmerkmelding_waarde
           FROM mld_kenmerkmelding km, mld_kenmerk k
           WHERE km.mld_melding_key = rit.mld_melding_key
           AND km.mld_kenmerk_key = k.mld_kenmerk_key
           AND k.mld_srtkenmerk_key = 64
           AND km.mld_kenmerkmelding_verwijder IS NULL) km_einde
    FROM soro_v_autorit_km rit, res_rsv_ruimte rrr, prs_perslid p, res_rsv_deel rrd, res_deel rd, ins_deel d, alg_locatie l
    WHERE vervaldatum IS NOT NULL
    AND rrr.res_rsv_ruimte_key = rit.res_rsv_ruimte_key
    AND p.prs_perslid_key = rrr.res_rsv_ruimte_host_key
    AND rrd.res_rsv_ruimte_key = rit.res_rsv_ruimte_key
    AND rrd.res_rsv_deel_verwijder IS NULL
    AND rd.res_deel_key=rrd.res_deel_key
    AND d.ins_deel_key = rd.res_ins_deel_key
    AND l.alg_locatie_key = d.ins_alg_locatie_key;


-- Kenmerk-keys:
-- mld_srtkenmerk_key = 85 ->  Naam client
-- mld_srtkenmerk_key = 84  ->  Kosten: Client met/zonder verblijf
-- mld_srtkenmerk_key = 87  ->  Reden van de rit
-- mld_srtkenmerk_key = 88 -> Van
-- mld_srtkenmerk_key = 86 -> Naar
-- mld_srtkenmerk_key = 83 -> Datum van de rit
-- mld_srtkenmerk_key = 63 -> Beginstand kilometers
-- mld_srtkenmerk_key = 64 -> Eindstand kilometers

-- mld_std_melding_key = 221 -> Prive rit registratie

-- Kilometers gereden met prive auto, dus de ritten ZONDER autoRESERVERING, maar gewoon met je eigen prive-bak
-- Dit zijn de gegevens(records) waar een melding is gemaakt van standaard melding key 221

CREATE OR REPLACE VIEW soro_v_prive_autorit_met_km
    (mld_melding_key,
     mld_nummer,
     mld_melding_omschrijving,
     datum_van,
     datum_tot,
     auto_omschrijving,
     alg_locatie_code,
     alg_locatie_omschrijving,
     prs_perslid_naam,
     prs_perslid_tussenvoegsel,
     prs_perslid_voorletters,
     prs_perslid_voornaam,
     client,
     kosten,
     reden_vervoer,
     van,
     naar,
     km_start,
     km_einde
   )
AS
SELECT m.mld_melding_key,
            m.mld_melding_key,
            m.mld_melding_omschrijving,   
        (SELECT to_date(km.mld_kenmerkmelding_waarde,'dd-mm-yyyy')
           FROM mld_kenmerkmelding km, mld_kenmerk k
           WHERE km.mld_melding_key = m.mld_melding_key
           AND km.mld_kenmerk_key = k.mld_kenmerk_key
           AND k.mld_srtkenmerk_key = 83
           AND km.mld_kenmerkmelding_verwijder IS NULL) datum_van,                      
        (SELECT to_date(km.mld_kenmerkmelding_waarde,'dd-mm-yyyy')
           FROM mld_kenmerkmelding km, mld_kenmerk k
           WHERE km.mld_melding_key = m.mld_melding_key
           AND km.mld_kenmerk_key = k.mld_kenmerk_key
           AND k.mld_srtkenmerk_key = 83
           AND km.mld_kenmerkmelding_verwijder IS NULL) datum_tot,           
            'Eigen auto',
            l.alg_locatie_code,
            l.alg_locatie_omschrijving,
            p.prs_perslid_naam,
            p.prs_perslid_tussenvoegsel,
            p.prs_perslid_voorletters,
            p.prs_perslid_voornaam,
        (SELECT km.mld_kenmerkmelding_waarde
           FROM mld_kenmerkmelding km, mld_kenmerk k
           WHERE km.mld_melding_key = m.mld_melding_key
           AND km.mld_kenmerk_key = k.mld_kenmerk_key
           AND k.mld_srtkenmerk_key = 85
           AND km.mld_kenmerkmelding_verwijder IS NULL) client,
        (SELECT UD.FAC_USRDATA_OMSCHR
           FROM mld_kenmerkmelding km, mld_kenmerk k, fac_usrdata ud 
           WHERE ud.fac_usrdata_key = fac.safe_to_number(km.mld_kenmerkmelding_waarde)
           AND km.mld_melding_key = m.mld_melding_key
           AND km.mld_kenmerk_key = k.mld_kenmerk_key
           AND k.mld_srtkenmerk_key = 84
           AND km.mld_kenmerkmelding_verwijder IS NULL) kosten,
        (SELECT UD.FAC_USRDATA_OMSCHR
           FROM mld_kenmerkmelding km, mld_kenmerk k, fac_usrdata ud 
           WHERE ud.fac_usrdata_key = fac.safe_to_number(km.mld_kenmerkmelding_waarde)
           AND km.mld_melding_key = m.mld_melding_key
           AND km.mld_kenmerk_key = k.mld_kenmerk_key
           AND k.mld_srtkenmerk_key = 87
           AND km.mld_kenmerkmelding_verwijder IS NULL) reden_vervoer,
       (SELECT km.mld_kenmerkmelding_waarde
           FROM mld_kenmerkmelding km, mld_kenmerk k
           WHERE km.mld_melding_key = m.mld_melding_key
           AND km.mld_kenmerk_key = k.mld_kenmerk_key
           AND k.mld_srtkenmerk_key = 88
           AND km.mld_kenmerkmelding_verwijder IS NULL) van,
           (SELECT km.mld_kenmerkmelding_waarde
           FROM mld_kenmerkmelding km, mld_kenmerk k
           WHERE km.mld_melding_key = m.mld_melding_key
           AND km.mld_kenmerk_key = k.mld_kenmerk_key
           AND k.mld_srtkenmerk_key = 86
           AND km.mld_kenmerkmelding_verwijder IS NULL) naar,
       (SELECT km.mld_kenmerkmelding_waarde
           FROM mld_kenmerkmelding km, mld_kenmerk k
           WHERE km.mld_melding_key = m.mld_melding_key
           AND km.mld_kenmerk_key = k.mld_kenmerk_key
           AND k.mld_srtkenmerk_key = 63
           AND km.mld_kenmerkmelding_verwijder IS NULL) km_start,           
       (SELECT km.mld_kenmerkmelding_waarde
           FROM mld_kenmerkmelding km, mld_kenmerk k
           WHERE km.mld_melding_key = m.mld_melding_key
           AND km.mld_kenmerk_key = k.mld_kenmerk_key
           AND k.mld_srtkenmerk_key = 64
           AND km.mld_kenmerkmelding_verwijder IS NULL) km_einde
    FROM mld_melding m, prs_perslid p, alg_locatie l
    WHERE m.mld_stdmelding_key =  221
    AND p.prs_perslid_key = m.prs_perslid_key_voor
    AND l.alg_locatie_key = m.mld_alg_locatie_key;
    

CREATE OR REPLACE VIEW soro_v_rap_autorit_belasting
(	
	fclt_f_auto,
	fclt_f_jaar,
	fclt_f_kwartaal,
	fclt_f_maand,
	datum,
	omschrijving,
	chauffeur,
	van,
	naar,
	km_start,
	km_eind,
	km_gereden
)
AS
SELECT 
	 res_deel_omschrijving,
	 to_char(res_rsv_ruimte_van,'YYYY'),
	 'Q' || to_char(res_rsv_ruimte_van,'Q'),
	 to_char(res_rsv_ruimte_van,'MM'),
	 to_char(res_rsv_ruimte_van,'DD-MM-YYYY'),
	 res_rsv_ruimte_omschrijving,
	 TRIM(prs_perslid_voornaam || decode (prs_perslid_tussenvoegsel, NULL, NULL, ' ' || prs_perslid_tussenvoegsel) || decode (prs_perslid_naam, NULL, NULL, ' ' || prs_perslid_naam)),
   van,
   naar,
   km_start,
   km_einde,
   fac.safe_to_number(km_einde) - fac.safe_to_number(km_start) km_gereden
FROM soro_v_autorit_met_km_reg;




CREATE OR REPLACE VIEW soro_v_rap_autorit_locatie
(
	fclt_f_locatie,
	fclt_f_jaar,
	fclt_f_kwartaal,
	fclt_f_maand,
	datum,
	fclt_f_prive_zakelijk,
	omschrijving,
	chauffeur,
	van,
	naar,
	auto,
	km_start,
	km_eind,
	km_gereden,
	kosten
)
AS
SELECT 
    alg_locatie_code || alg_locatie_omschrijving,
    to_char(res_rsv_ruimte_van,'YYYY'),
    'Q' || to_char(res_rsv_ruimte_van,'Q'),
    to_char(res_rsv_ruimte_van,'MM'),
    to_char(res_rsv_ruimte_van,'DD-MM-YYYY'),    
    'Zakelijk',
    res_rsv_ruimte_omschrijving,
    TRIM(prs_perslid_voornaam || decode (prs_perslid_tussenvoegsel, NULL, NULL, ' ' || prs_perslid_tussenvoegsel) || decode (prs_perslid_naam, NULL, NULL, ' ' || prs_perslid_naam)),
    van,
    naar,
    res_deel_omschrijving,
    km_start,
    km_einde,
    fac.safe_to_number(km_einde) - fac.safe_to_number(km_start) km_gereden,
    0.29 * (fac.safe_to_number(km_einde) - fac.safe_to_number(km_start)) kosten
FROM soro_v_autorit_met_km_reg
WHERE UPPER(kosten) LIKE '%LOCATIE%'
UNION ALL
SELECT 
    alg_locatie_code || alg_locatie_omschrijving,
    to_char(datum_van,'YYYY'),
    'Q' || to_char(datum_van,'Q'),
    to_char(datum_van,'MM'),
    to_char(datum_van,'DD-MM-YYYY'),
    'Prive',
    mld_melding_omschrijving,
    TRIM(prs_perslid_voornaam || decode (prs_perslid_tussenvoegsel, NULL, NULL, ' ' || prs_perslid_tussenvoegsel) || decode (prs_perslid_naam, NULL, NULL, ' ' || prs_perslid_naam)),
    van,
    naar,
    auto_omschrijving,
    km_start,
    km_einde,
    fac.safe_to_number(km_einde) - fac.safe_to_number(km_start) km_gereden,
    0.29 * (fac.safe_to_number(km_einde) - fac.safe_to_number(km_start)) kosten
FROM soro_v_prive_autorit_met_km
WHERE UPPER(kosten) LIKE '%LOCATIE%';


CREATE OR REPLACE VIEW soro_v_rap_autorit_client
(
	fclt_f_client,
	fclt_f_verblijf_behandeling,
	fclt_f_reden_vervoer,
	fclt_f_jaar,
	fclt_f_kwartaal,
	fclt_f_maand,
	datum,
	fclt_f_prive_zakelijk,
	omschrijving,
	chauffeur,
	van,
	naar,
	auto,
	km_start,
	km_eind,
	km_gereden,
	kosten
)
AS
SELECT
		w.res_kenmerkreservering_waarde client,
		kosten,
		reden_vervoer,
    to_char(res_rsv_ruimte_van,'YYYY'),
    'Q' || to_char(res_rsv_ruimte_van,'Q'),
    to_char(res_rsv_ruimte_van,'MM'),
    to_char(res_rsv_ruimte_van,'DD-MM-YYYY'),
    'Zakelijk',
    res_rsv_ruimte_omschrijving,
    TRIM(prs_perslid_voornaam || decode (prs_perslid_tussenvoegsel, NULL, NULL, ' ' || prs_perslid_tussenvoegsel) || decode (prs_perslid_naam, NULL, NULL, ' ' || prs_perslid_naam)),
    van,
    naar,
    res_deel_omschrijving,
    km_start,
    km_einde,
    fac.safe_to_number(km_einde) - fac.safe_to_number(km_start) km_gereden,
    0.29 * (fac.safe_to_number(km_einde) - fac.safe_to_number(km_start)) kosten
FROM soro_v_autorit_met_km_reg a, res_kenmerkwaarde w, res_kenmerk k
WHERE UPPER(kosten) LIKE '%CLIËNT%'
AND w.res_rsv_ruimte_key = a.res_rsv_ruimte_key
AND w.res_kenmerk_key = k.res_kenmerk_key
AND k.res_srtkenmerk_key = 1
AND w.res_kenmerkwaarde_verwijder IS NULL
UNION ALL
SELECT 
		client,
		kosten,
		reden_vervoer,
		to_char(datum_van,'YYYY'),
    'Q' || to_char(datum_van,'Q'),
    to_char(datum_van,'MM'),
    to_char(datum_van,'DD-MM-YYYY'),
    'Prive',
    mld_melding_omschrijving,
    TRIM(prs_perslid_voornaam || decode (prs_perslid_tussenvoegsel, NULL, NULL, ' ' || prs_perslid_tussenvoegsel) || decode (prs_perslid_naam, NULL, NULL, ' ' || prs_perslid_naam)),
    van,
    naar,
    auto_omschrijving,
    km_start,
    km_einde,
    fac.safe_to_number(km_einde) - fac.safe_to_number(km_start) km_gereden,
    0.29 * (fac.safe_to_number(km_einde) - fac.safe_to_number(km_start)) kosten
FROM soro_v_prive_autorit_met_km
WHERE UPPER(kosten) LIKE '%CLIËNT%';


    
BEGIN fac.registercustversion('SORO', 8); END;
/

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

show errors;


commit;


spool off;