2477 lines
90 KiB
Plaintext
2477 lines
90 KiB
Plaintext
#ifdef FAC
|
|
/* $Revision: 166 $
|
|
* $Modtime: 5-10-09 14:04 $
|
|
*/
|
|
|
|
/*
|
|
*
|
|
* FAC_P_FAC_SAVE_RESTORE: Package voor het bewaren en teruggeven van primary keys binnen triggers.
|
|
*
|
|
* Gebruikt in: De status van de MLD_MELDING is afhankelijk van de minimale status van zijn opdrachten, of als
|
|
* er geen opdrachten kan dit door de gebruiker gezet worden. Als er een nieuwe opdrachten aangemaakt
|
|
* wordt, of als een opdracht van status veranderd of als een opdracht verwijderd wordt, heeft dit invloed
|
|
* op de status van de bijbehorende melding. Dit mechanisme is opgelost via de triggers van MLD_OPDR.
|
|
*
|
|
* De volgende functies zijn beschikbaar:
|
|
* - ResetSelectie(TableName) RETURN BOOLEAN:
|
|
* Verwijderd de vorige selectie van de Primary-keys van de tabel. Hou hier rekening met multi-user dmv. de
|
|
* huidige SessionId. Retourneerd of het gelukt (TRUE) is of niet (FALSE).
|
|
* Deze moet aangeroepen worden in de BEFORE-statement-trigger,
|
|
* bijvoorbeeld: BEFORE INSERT OR UPDATE OR DELETE ON mld_opdr.
|
|
* - SavePrimaryKey(TableName, PrimaryKey) RETURN BOOLEAN:
|
|
* Onthou de PrimaryKey-waarde, hou hiet ook rekening met multi-user dmv. de huidige SessionId. Retourneerd
|
|
* of het gelukt (TRUE) is of niet (FALSE).
|
|
* Deze moet aangeroepen worden in de BEFORE-row-trigger,
|
|
* bijvoorbeeld: BEFORE INSERT OR UPDATE ON mld_opdr FOR EACH ROW
|
|
* EN : BEFORE DELETE ON mld_opdr FOR EACH ROW
|
|
* - GetPrimaryKey(TableName, IndexNr) RETURN NUMBER:
|
|
* Geef de nth onthouden PrimaryKey terug, hou hiet ook rekening met multi-user dmv. de huidige SessionId.
|
|
* Het IndexNr begint met 1 en loopt door totdat er geen volgende PrimaryKey onthouden is.
|
|
* Retourneerd de gevonden PrimaryKey of NULL (als er geen volgende is).
|
|
* Deze moet aangeroepen worden in de AFTER-statement-trigger,
|
|
* bijvoorbeeld: AFTER INSERT OR UPDATE OR DELETE ON mld_opdr.
|
|
*
|
|
* LET OP: FAC_P_FAC_SAVE_RESTORE_UPDATE(Func, TableName)
|
|
* Voor het gebruik van GetPrimaryKey() is een #define FAC_P_FAC_SAVE_RESTORE_UPDATE(Func, TableName)
|
|
* gemaakt in COMSQL.H: Deze doorloopt alle onthouden PrimaryKeys van TableName en roept voor elk record
|
|
* de functie Func aan. Func krijgt 1 argument, nl. PrimaryKey en moet een BOOLEAN retourneren.
|
|
*
|
|
*/
|
|
|
|
#include "comsql.h"
|
|
#include "fac_pacx.src"
|
|
#include "fac_pacf.src"
|
|
|
|
|
|
CREATE OR REPLACE PACKAGE fac_p_fac_save_restore AS
|
|
-- Maak de vorige selectie van de tabel en de huidige sessie leeg.
|
|
FUNCTION ResetSelectie( TableName IN VARCHAR2 ) RETURN BOOLEAN;
|
|
-- Onthou de primary key van de tabel en de huidige sessie.
|
|
FUNCTION SavePrimaryKey( TableName IN VARCHAR2, PrimaryKey IN NUMBER ) RETURN BOOLEAN;
|
|
-- Geef de nth primary key van de tabel en de huidige sessie. IndexNr begint met 1.
|
|
FUNCTION GetPrimaryKey( TableName IN VARCHAR2, IndexNr IN NUMBER ) RETURN NUMBER;
|
|
-- Onthou naast Primary key ook de datum i.v.m. een eventuele UNDO vanuit AutoCAD.
|
|
FUNCTION SavePrimaryKeyAndDate( TableName IN VARCHAR2, PrimaryKey IN NUMBER, Datum IN Date ) RETURN BOOLEAN;
|
|
-- Geef verwijderdatum of NULL terug van primary key i.v.m. eventuele UNDO vanuit AutoCAD.
|
|
FUNCTION GetDate( TableName IN VARCHAR2, PrimaryKey IN NUMBER ) RETURN DATE;
|
|
PRAGMA RESTRICT_REFERENCES (GetPrimaryKey,WNDS, WNPS);
|
|
END fac_p_fac_save_restore;
|
|
/
|
|
|
|
CREATE OR REPLACE PACKAGE BODY fac_p_fac_save_restore AS
|
|
FUNCTION GetSessionId _MSSQL(()) RETURN VARCHAR2 IS
|
|
Session_Id VARCHAR2(20);
|
|
BEGIN
|
|
#ifndef MS_SQL
|
|
SELECT USERENV('SESSIONID')
|
|
INTO Session_Id
|
|
FROM DUAL;
|
|
#else
|
|
Session_Id := @@SPID;
|
|
#endif
|
|
|
|
RETURN Session_Id;
|
|
END;
|
|
|
|
#ifdef MS_SQL
|
|
PROCEDURE ResetSelectie( TableName IN VARCHAR2 ) IS
|
|
#else
|
|
FUNCTION ResetSelectie( TableName IN VARCHAR2 ) RETURN BOOLEAN IS
|
|
#endif
|
|
SessionId VARCHAR2(20);
|
|
BEGIN
|
|
SessionId := _MSSQL(fac_p_fac_save_restore.)GetSessionId();
|
|
|
|
DELETE FROM fac_selectie
|
|
WHERE fac_selectie_node = SessionId
|
|
AND fac_selectie_tabel = TableName;
|
|
|
|
RETURN TRUE;
|
|
EXCEPTION
|
|
WHEN OTHERS
|
|
THEN RETURN FALSE;
|
|
END;
|
|
|
|
#ifdef MS_SQL
|
|
PROCEDURE SavePrimaryKey( TableName IN VARCHAR2, PrimaryKey IN NUMBER ) IS
|
|
#else
|
|
FUNCTION SavePrimaryKey( TableName IN VARCHAR2, PrimaryKey IN NUMBER ) RETURN BOOLEAN IS
|
|
#endif
|
|
SessionId VARCHAR2(20);
|
|
BEGIN
|
|
SessionId := _MSSQL(fac_p_fac_save_restore.)GetSessionId();
|
|
|
|
INSERT INTO fac_selectie (fac_selectie_node,
|
|
fac_selectie_tabel,
|
|
fac_selectie_key)
|
|
VALUES (SessionId, TableName, PrimaryKey);
|
|
#ifndef MS_SQL
|
|
RETURN TRUE;
|
|
EXCEPTION
|
|
WHEN OTHERS
|
|
THEN RETURN FALSE;
|
|
#endif
|
|
END;
|
|
|
|
-- Geef de nth Fac_Selectie_Key van de geselecteerde records
|
|
-- terug. IndexNr begint met 1.
|
|
FUNCTION GetPrimaryKey( TableName IN VARCHAR2, IndexNr IN NUMBER ) RETURN NUMBER IS
|
|
SessionId VARCHAR2(20);
|
|
CURSOR Selectie IS SELECT DISTINCT fac_selectie_key
|
|
FROM fac_selectie
|
|
WHERE fac_selectie_node = SessionId
|
|
AND fac_selectie_tabel = TableName
|
|
ORDER BY fac_selectie_key;
|
|
#ifndef MS_SQL
|
|
SelectieRec Selectie%ROWTYPE;
|
|
#endif
|
|
TmpIndex NUMBER;
|
|
ReturnKey NUMBER(10);
|
|
BEGIN
|
|
SessionId := _MSSQL(fac_p_fac_save_restore.)GetSessionId();
|
|
ReturnKey := NULL;
|
|
TmpIndex := 1;
|
|
FOR SelectieRec IN Selectie LOOP
|
|
IF IndexNr = TmpIndex
|
|
THEN
|
|
#ifndef MS_SQL
|
|
ReturnKey := SelectieRec.fac_selectie_key;
|
|
#else
|
|
ReturnKey := TO_NUMBER(SelectieRec);
|
|
#endif
|
|
EXIT;
|
|
END IF;
|
|
TmpIndex := TmpIndex + 1;
|
|
END LOOP;
|
|
RETURN ReturnKey;
|
|
END;
|
|
|
|
#ifdef MS_SQL
|
|
PROCEDURE SavePrimaryKeyAndDate( TableName IN VARCHAR2, PrimaryKey IN NUMBER, Datum IN Date ) IS
|
|
#else
|
|
FUNCTION SavePrimaryKeyAndDate( TableName IN VARCHAR2, PrimaryKey IN NUMBER, Datum IN Date ) RETURN BOOLEAN IS
|
|
#endif
|
|
SessionId VARCHAR2(20);
|
|
BEGIN
|
|
SessionId := _MSSQL(fac_p_fac_save_restore.)GetSessionId();
|
|
|
|
INSERT INTO fac_selectie (fac_selectie_node,
|
|
fac_selectie_tabel,
|
|
fac_selectie_key,
|
|
fac_selectie_datum)
|
|
VALUES (SessionId, TableName, PrimaryKey, Datum);
|
|
#ifndef MS_SQL
|
|
RETURN TRUE;
|
|
EXCEPTION
|
|
WHEN OTHERS
|
|
THEN RETURN FALSE;
|
|
#endif
|
|
END;
|
|
|
|
FUNCTION GetDate( TableName IN VARCHAR2, PrimaryKey IN NUMBER ) RETURN DATE IS
|
|
SessionId VARCHAR2(20);
|
|
ReturnDate Date;
|
|
|
|
CURSOR Selectie IS SELECT DISTINCT fac_selectie_datum
|
|
FROM fac_selectie
|
|
|
|
WHERE fac_selectie_node = SessionId
|
|
AND fac_selectie_key = PrimaryKey
|
|
AND fac_selectie_tabel = TableName;
|
|
#ifndef MS_SQL
|
|
SelectieRec Selectie%ROWTYPE;
|
|
#endif
|
|
TmpIndex NUMBER;
|
|
ReturnKey NUMBER(10);
|
|
|
|
BEGIN
|
|
SessionId := _MSSQL(fac_p_fac_save_restore.)GetSessionId();
|
|
ReturnDate := NULL;
|
|
FOR SelectieRec IN Selectie LOOP
|
|
#ifndef MS_SQL
|
|
ReturnDate := SelectieRec.fac_selectie_datum;
|
|
#else
|
|
ReturnDate := SelectieRec;
|
|
#endif
|
|
EXIT;
|
|
END LOOP;
|
|
RETURN ReturnDate;
|
|
END;
|
|
END fac_p_fac_save_restore;
|
|
/
|
|
|
|
|
|
CREATE OR REPLACE PACKAGE webfac AS
|
|
FUNCTION fac_f_usrrap_query (p_tabelnaam IN VARCHAR2) RETURN VARCHAR2;
|
|
FUNCTION fac_f_usrrap_orderby (p_tabelnaam IN VARCHAR2) RETURN VARCHAR2;
|
|
END webfac;
|
|
/
|
|
|
|
CREATE OR REPLACE PACKAGE BODY webfac AS
|
|
/* These functions won't work for MS SQL server, they need new views */
|
|
|
|
FUNCTION fac_f_usrrap_query ( p_tabelnaam IN VARCHAR2 ) RETURN VARCHAR2 IS
|
|
QueryString VARCHAR2(4000);
|
|
Kolomnaam VARCHAR2(64);
|
|
mainuser VARCHAR2(80);
|
|
#ifdef MS_SQL
|
|
LabelRec_data_type VARCHAR2(106);
|
|
LabelRec_column_name VARCHAR2(30);
|
|
#endif
|
|
BEGIN
|
|
BEGIN
|
|
DECLARE
|
|
CURSOR Zoek_label IS
|
|
SELECT column_name
|
|
, data_type
|
|
FROM all_tab_columns
|
|
WHERE table_name = UPPER(p_tabelnaam)
|
|
AND owner = UPPER(USER)
|
|
ORDER BY COLUMN_ID;
|
|
|
|
BEGIN
|
|
|
|
QueryString := 'Select ';
|
|
#ifndef MS_SQL
|
|
FOR LabelRec in zoek_label LOOP
|
|
#else
|
|
[skip]
|
|
OPEN zoek_label;
|
|
FETCH NEXT FROM zoek_label INTO @LabelRec_column_name, @LabelRec_data_type;
|
|
WHILE (@@FETCH_STATUS <> -1 )
|
|
BEGIN
|
|
[/skip]
|
|
#endif
|
|
|
|
IF LabelRec.data_type = 'NUMBER'
|
|
THEN
|
|
QueryString := QueryString ||'to_number('||_MSSQL('web.number_')_ORACLE('')||'TO_CHAR('|| LabelRec.column_name ||',''99999999D9999'')) "'||LabelRec.column_name||'",';
|
|
ELSE
|
|
IF LabelRec.data_type = 'DATE'
|
|
THEN
|
|
QueryString := QueryString ||_MSSQL('web.date_')_ORACLE('')||'TO_CHAR(' || LabelRec.column_name ||',''MM-DD-YYYY'') "'||LabelRec.column_name||'",';
|
|
ELSE
|
|
QueryString := QueryString ||' ' || LabelRec.column_name ||',';
|
|
END IF;
|
|
END IF;
|
|
|
|
#ifndef MS_SQL
|
|
END LOOP;
|
|
END;
|
|
END;
|
|
QueryString := Substr(QueryString,1,(LENGTH(QueryString)-1))||' from '|| p_tabelnaam ;
|
|
RETURN QueryString;
|
|
#else
|
|
[skip]
|
|
FETCH NEXT FROM zoek_label INTO @LabelRec_column_name, @LabelRec_data_type;
|
|
END;
|
|
CLOSE zoek_label;
|
|
DEALLOCATE zoek_label;
|
|
END;
|
|
END;
|
|
set @QueryString = Substring(@QueryString,1,(LEN(@QueryString)-1))+' from '+ @p_tabelnaam ;
|
|
RETURN @QueryString;
|
|
[/skip]
|
|
#endif
|
|
END fac_f_usrrap_query;
|
|
|
|
|
|
FUNCTION fac_f_usrrap_orderby ( p_tabelnaam IN VARCHAR2 ) RETURN VARCHAR2 IS
|
|
AantalRecords NUMBER(10);
|
|
OrderBy VARCHAR2(255);
|
|
mainuser VARCHAR2(80);
|
|
i NUMBER(10);
|
|
|
|
BEGIN
|
|
SELECT count(*)
|
|
INTO AantalRecords
|
|
FROM all_tab_columns
|
|
WHERE table_name = UPPER(p_tabelnaam)
|
|
AND owner = UPPER(USER);
|
|
--
|
|
OrderBy := '';
|
|
i := 1;
|
|
|
|
[skip]
|
|
#ifndef MS_SQL
|
|
FOR i IN 1..AantalRecords LOOP
|
|
OrderBy := OrderBy||TO_CHAR(i)||',';
|
|
END LOOP;
|
|
#else
|
|
WHILE (@i <= @AantalRecords) BEGIN
|
|
SET @OrderBy = @OrderBy + RTRIM(CONVERT(char,@i)) + ',';
|
|
SET @i = @i + 1;
|
|
END;
|
|
#endif
|
|
[/skip]
|
|
OrderBy := SUBSTR(OrderBy,1,(LENGTH(OrderBy)-1));
|
|
RETURN ' ORDER BY ' || OrderBy;
|
|
END fac_f_usrrap_orderby;
|
|
END webfac;
|
|
/
|
|
|
|
|
|
|
|
CREATE OR REPLACE FUNCTION _MSSQL(web.)FAC_F_FAC_GET_DESCRIPTION(LPNName IN VARCHAR2
|
|
,CondKey IN NUMBER
|
|
,Prefix IN VARCHAR2
|
|
,PrefixKey IN NUMBER) RETURN VARCHAR2 IS
|
|
NextVolgNr VARCHAR2(20);
|
|
DeelUpper ins_deel.ins_deel_omschrijving%TYPE;
|
|
ReturnString VARCHAR2(30);
|
|
BEGIN
|
|
-- From 4.40 on, CondKey is dummy for ins_deel (object/subobject): uniqueness is assumed over the entire database
|
|
IF LPNName = 'LPN_INS_DEEL'
|
|
THEN
|
|
SELECT NVL(LPAD( TO_CHAR(MAX(TO_NUMBER(SUBSTR(ins_deel_upper, LENGTH(Prefix)+1,LENGTH(ins_deel_upper)-LENGTH(Prefix))))+1) , MAX(LENGTH(ins_deel_upper)-LENGTH(Prefix)),'0'),'001')
|
|
INTO NextVolgNr
|
|
FROM INS_DEEL
|
|
WHERE ins_deel_upper LIKE Prefix||'%'
|
|
AND Fac.safe_to_number(SUBSTR(ins_deel_upper, LENGTH(Prefix)+1,LENGTH(ins_deel_upper)-LENGTH(Prefix))) IS NOT NULL
|
|
AND ins_deel_parent_key IS NULL
|
|
AND ins_deel_verwijder IS NULL;
|
|
ELSIF LPNName = 'LPN_INS_ONDERDEEL'
|
|
THEN
|
|
SELECT NVL(LPAD( TO_CHAR(MAX(TO_NUMBER(SUBSTR(ins_deel_upper, LENGTH(Prefix)+1,LENGTH(ins_deel_upper)-LENGTH(Prefix))))+1) , MAX(LENGTH(ins_deel_upper)-LENGTH(Prefix)),'0'),'001')
|
|
INTO NextVolgNr
|
|
FROM INS_DEEL
|
|
WHERE ins_deel_upper LIKE Prefix||'%'
|
|
AND Fac.safe_to_number(SUBSTR(ins_deel_upper, LENGTH(Prefix)+1,LENGTH(ins_deel_upper)-LENGTH(Prefix))) IS NOT NULL
|
|
AND ins_deel_parent_key = CondKey
|
|
AND ins_deel_verwijder IS NULL;
|
|
ELSIF LPNName = 'LPN_ALG_TERREINSECTOR'
|
|
THEN
|
|
FOR i IN 3..10
|
|
LOOP
|
|
SELECT NVL(TO_CHAR(MAX(TO_NUMBER(SUBSTR(alg_terreinsector_code,LENGTH(alg_terreinsector_code)-(i-1),LENGTH(alg_terreinsector_code)))+1)), '***')
|
|
INTO NextVolgNr
|
|
FROM alg_v_aanwezigterreinsector
|
|
WHERE LTRIM(SUBSTR(alg_terreinsector_code, LENGTH(alg_terreinsector_code)-(i-1), LENGTH(alg_terreinsector_code))) BETWEEN '0' AND LPAD('9',i,'9')
|
|
AND alg_locatie_key = CondKey
|
|
AND LENGTH(alg_terreinsector_code) <= i;
|
|
IF NextVolgNr = '***'
|
|
THEN
|
|
IF i = 3
|
|
THEN
|
|
NextVolgNr := '001';
|
|
ELSE
|
|
NextVolgNr := POWER(10, (i-1));
|
|
END IF;
|
|
EXIT;
|
|
ELSE
|
|
IF LENGTH(NextVolgNr) <= i
|
|
THEN
|
|
NextVolgNr:= LPAD(NextVolgNr,i,'0');
|
|
EXIT;
|
|
END IF;
|
|
END IF;
|
|
END LOOP;
|
|
ELSIF LPNName = 'LPN_ALG_GEBOUW'
|
|
THEN
|
|
FOR i IN 3..10
|
|
LOOP
|
|
SELECT NVL(TO_CHAR(MAX(TO_NUMBER(SUBSTR(alg_gebouw_code, LENGTH(alg_gebouw_code)-(i-1), LENGTH(alg_gebouw_code)))+1)), '***')
|
|
INTO NextVolgNr
|
|
FROM alg_v_aanweziggebouw
|
|
WHERE LTRIM(SUBSTR(alg_gebouw_code, LENGTH(alg_gebouw_code)-(i-1), LENGTH(alg_gebouw_code))) BETWEEN '0' AND LPAD('9',i,'9')
|
|
AND alg_locatie_key = CondKey
|
|
AND LENGTH(alg_gebouw_code) <= i;
|
|
IF NextVolgNr = '***'
|
|
THEN
|
|
IF i = 3
|
|
THEN
|
|
NextVolgNr := '001';
|
|
ELSE
|
|
NextVolgNr := POWER(10, (i-1));
|
|
END IF;
|
|
EXIT;
|
|
ELSE
|
|
IF LENGTH(NextVolgNr) <= i
|
|
THEN
|
|
NextVolgNr:= LPAD(NextVolgNr,i,'0');
|
|
EXIT;
|
|
END IF;
|
|
END IF;
|
|
END LOOP;
|
|
ELSIF LPNName = 'LPN_ALG_RUIMTE'
|
|
THEN
|
|
FOR i IN 3..10
|
|
LOOP
|
|
SELECT NVL(TO_CHAR(MAX(TO_NUMBER(SUBSTR(alg_ruimte_nr, LENGTH(alg_ruimte_nr)-(i-1), LENGTH(alg_ruimte_nr)))+1)), '***')
|
|
INTO NextVolgNr
|
|
FROM alg_v_aanwezigruimte
|
|
WHERE LTRIM(SUBSTR(alg_ruimte_nr, LENGTH(alg_ruimte_nr)-(i-1), LENGTH(alg_ruimte_nr))) BETWEEN '0' AND LPAD('9',i,'9')
|
|
AND alg_verdieping_key = CondKey
|
|
AND LENGTH(alg_ruimte_nr) <= i;
|
|
IF NextVolgNr = '***'
|
|
THEN
|
|
IF i = 3
|
|
THEN
|
|
NextVolgNr := '001';
|
|
ELSE
|
|
NextVolgNr := POWER(10, (i-1));
|
|
END IF;
|
|
EXIT;
|
|
ELSE
|
|
IF LENGTH(NextVolgNr) <= i
|
|
THEN
|
|
NextVolgNr:= LPAD(NextVolgNr,i,'0');
|
|
EXIT;
|
|
END IF;
|
|
END IF;
|
|
END LOOP;
|
|
ELSIF LPNName = 'LPN_PRS_WERKPLEK'
|
|
THEN
|
|
BEGIN
|
|
SELECT TO_CHAR(NVL(MAX(prs_werkplek_volgnr),0) +1)
|
|
INTO NextVolgNr
|
|
FROM prs_werkplek
|
|
WHERE prs_alg_ruimte_key = CondKey
|
|
AND prs_werkplek_verwijder IS NULL;
|
|
EXCEPTION
|
|
WHEN NO_DATA_FOUND
|
|
THEN NextVolgNr := '1';
|
|
END;
|
|
/* Omschrijving */
|
|
BEGIN
|
|
SELECT alg_ruimte_nr ||' - '|| NextVolgNr
|
|
INTO NextVolgNr
|
|
FROM alg_ruimte
|
|
WHERE alg_ruimte_key = CondKey;
|
|
EXCEPTION
|
|
WHEN OTHERS
|
|
THEN NULL;
|
|
END;
|
|
END IF;
|
|
ReturnString := Prefix||NextVolgNr;
|
|
RETURN ReturnString;
|
|
END;
|
|
/
|
|
|
|
CREATE OR REPLACE PACKAGE fac AS
|
|
FUNCTION addMonths (pdate1 IN DATE, padd_mon IN NUMBER) RETURN DATE;
|
|
FUNCTION safe_To_Number( str IN VARCHAR2 ) RETURN NUMBER;
|
|
FUNCTION safe_To_Date ( pchar IN VARCHAR2, pfmt IN VARCHAR2 ) RETURN DATE;
|
|
FUNCTION getrefwaarde (module IN VARCHAR2, kkey IN NUMBER, waarde IN VARCHAR2) RETURN VARCHAR2;
|
|
FUNCTION count_Work_Days ( pdate1 IN DATE , pdate2 IN DATE ) RETURN NUMBER;
|
|
FUNCTION count_Work_Days_InclTime ( pdate1 IN DATE , pdate2 IN DATE ) RETURN NUMBER;
|
|
FUNCTION datumtijdplusuitvoertijd (begindatum IN DATE, uitvoertijd IN NUMBER, uitvoertijdtype IN VARCHAR2) RETURN DATE;
|
|
PROCEDURE imp_getfield ( p_parseline IN OUT VARCHAR2,
|
|
p_fielddelimitor IN VARCHAR2,
|
|
p_field OUT VARCHAR2
|
|
);
|
|
PROCEDURE imp_writelog( pAppl IN VARCHAR2,
|
|
pRun IN VARCHAR2,
|
|
pLevel IN VARCHAR2,
|
|
pMsg IN VARCHAR2,
|
|
pHint IN VARCHAR2
|
|
);
|
|
FUNCTION imp_export_fac_rapport (
|
|
p_applname IN VARCHAR2,
|
|
p_applrun IN VARCHAR2,
|
|
p_filedir IN VARCHAR2,
|
|
p_filename IN VARCHAR2
|
|
) RETURN BOOLEAN;
|
|
PROCEDURE imp_alg_delete_onrgoed (p_applname IN VARCHAR2, p_applrun IN VARCHAR2, p_mode IN NUMBER);
|
|
PROCEDURE imp_prs_delete_organisatie (p_applname IN VARCHAR2, p_applrun IN VARCHAR2, p_mode IN NUMBER);
|
|
PROCEDURE imp_mld_delete_mld (p_applname IN VARCHAR2, p_applrun IN VARCHAR2, p_mode IN NUMBER);
|
|
PROCEDURE fac_perfmon_incr(limiet IN NUMBER, zwaarte IN NUMBER);
|
|
PROCEDURE putnotificationprio (pfrom NUMBER, pto NUMBER, pmessage VARCHAR2, pmode NUMBER,
|
|
poptemail VARCHAR2, poptmobile VARCHAR2, pprio NUMBER);
|
|
PROCEDURE putnotification (pfrom NUMBER, pto NUMBER, pmessage VARCHAR2, pmode NUMBER,
|
|
poptemail VARCHAR2, poptmobile VARCHAR2);
|
|
PROCEDURE putsystemnotification (pmessage VARCHAR2, pmode NUMBER);
|
|
PROCEDURE putnotificationsrtprio (pfrom NUMBER, pto NUMBER, pcode VARCHAR2, pref NUMBER,
|
|
poptmessage VARCHAR2, poptstatus NUMBER, poptemail VARCHAR2, poptmobile VARCHAR2, pxref NUMBER,
|
|
pprio NUMBER, psender VARCHAR2);
|
|
PROCEDURE clrnotifications (pcode VARCHAR2, pref NUMBER);
|
|
PROCEDURE putnotificationjobs (pcust VARCHAR2);
|
|
PROCEDURE putjobnotifications (pviewname VARCHAR2, pmode NUMBER);
|
|
FUNCTION getMobile ( pkey IN NUMBER ) RETURN VARCHAR2;
|
|
PROCEDURE executeschedules;
|
|
PROCEDURE markorderassent(pxmlnode VARCHAR2, pkey NUMBER, presult NUMBER);
|
|
FUNCTION getSetting (pname IN VARCHAR2 ) RETURN VARCHAR2;
|
|
PROCEDURE trackaction (pcode VARCHAR2, prefkey NUMBER, puserkey NUMBER, pdatum DATE, poms VARCHAR2);
|
|
PROCEDURE registerversion (pmaj IN NUMBER, pmin IN NUMBER, ppatch IN VARCHAR2, prevision IN VARCHAR2, plang IN VARCHAR2);
|
|
PROCEDURE registercustversion (pcustid IN VARCHAR2, pcustnr IN NUMBER);
|
|
/* PRAGMA RESTRICT_REFERENCES (datumtijdplusuitvoertijd, WNDS, WNPS); */
|
|
END fac;
|
|
/
|
|
|
|
CREATE OR REPLACE PACKAGE BODY fac AS
|
|
-- This function is to be used instead of the native ADD_MONTHS function
|
|
-- If 29, 30 or 31 date doesn't exist in the month then de first of the next month is taken
|
|
FUNCTION addMonths (pdate1 IN DATE, padd_mon IN NUMBER) RETURN DATE IS
|
|
pdate2 date;
|
|
BEGIN
|
|
pdate2:= ADD_MONTHS(pdate1-1, padd_mon);
|
|
IF LAST_DAY(pdate1) = pdate1 OR LAST_DAY(pdate2) = pdate2
|
|
THEN
|
|
RETURN pdate2+1;
|
|
ELSE
|
|
RETURN ADD_MONTHS(pdate1, padd_mon);
|
|
END IF;
|
|
END;
|
|
|
|
-- This function is to be used instead of the native TO_NUMBER in situations
|
|
-- where the value might be an invalid number. This is the case for (FSN#203)
|
|
-- flexible properties as in FAC.SAFE_TO_NUMBER(alg_onrgoedkenmerk_waarde)<200
|
|
-- It returns NULL instead of an ORA1722:error (or even another error)
|
|
FUNCTION safe_To_Number( str IN VARCHAR2 ) RETURN NUMBER IS
|
|
BEGIN
|
|
#ifndef MS_SQL
|
|
RETURN TO_NUMBER(str);
|
|
EXCEPTION
|
|
WHEN OTHERS THEN RETURN NULL;
|
|
#else
|
|
IF Web.IsNumberString(str) = 1 RETURN CAST(str as money);
|
|
RETURN NULL;
|
|
#endif
|
|
END;
|
|
|
|
FUNCTION safe_To_Date( pchar IN VARCHAR2, pfmt IN VARCHAR2 ) RETURN DATE IS
|
|
BEGIN
|
|
#ifndef MS_SQL
|
|
RETURN TO_DATE(pchar, pfmt);
|
|
EXCEPTION
|
|
WHEN OTHERS THEN RETURN NULL;
|
|
#else
|
|
/* weet niet of dit voor sqls klopt -pf */
|
|
IF Web.IsDateString(pchar, pfmt) = 1 RETURN CAST(pchar as date);
|
|
RETURN NULL;
|
|
#endif
|
|
END;
|
|
|
|
/* Levert de gerefereerde waarde van een flexkenmerk op, gegeven de kenmerk_key en de waarde
|
|
(en vereist ook de module)
|
|
*/
|
|
FUNCTION getrefwaarde (module IN VARCHAR2, kkey IN NUMBER, waarde IN VARCHAR2) RETURN VARCHAR2 IS
|
|
sresult VARCHAR2 (255);
|
|
kolomnaam VARCHAR2 (50);
|
|
kolomtxt VARCHAR2 (50);
|
|
objectnaam VARCHAR2 (50);
|
|
tab_key NUMBER (10);
|
|
ttype VARCHAR2 (1);
|
|
resultvalue VARCHAR2 (255);
|
|
BEGIN
|
|
CASE module
|
|
WHEN 'ALG'
|
|
THEN
|
|
SELECT rsk.alg_refkenmerk_kolomnaam,
|
|
rsk.alg_refkenmerk_kolomtxt,
|
|
rsk.alg_refkenmerk_objectnaam,
|
|
rsk.fac_usrtab_key,
|
|
ut.fac_usrtab_view
|
|
INTO kolomnaam,
|
|
kolomtxt,
|
|
objectnaam,
|
|
tab_key,
|
|
ttype
|
|
FROM alg_refkenmerk rsk, alg_kenmerk sk, fac_usrtab ut
|
|
WHERE sk.alg_kenmerk_key = kkey
|
|
AND rsk.fac_usrtab_key = ut.fac_usrtab_key(+)
|
|
AND sk.alg_refkenmerk_key = rsk.alg_refkenmerk_key;
|
|
WHEN 'FIN'
|
|
THEN
|
|
SELECT rsk.fin_refkenmerk_kolomnaam,
|
|
rsk.fin_refkenmerk_kolomtxt,
|
|
rsk.fin_refkenmerk_objectnaam,
|
|
rsk.fac_usrtab_key,
|
|
ut.fac_usrtab_view
|
|
INTO kolomnaam,
|
|
kolomtxt,
|
|
objectnaam,
|
|
tab_key,
|
|
ttype
|
|
FROM fin_refkenmerk rsk, fin_kenmerk sk, fac_usrtab ut
|
|
WHERE sk.fin_kenmerk_key = kkey
|
|
AND rsk.fac_usrtab_key = ut.fac_usrtab_key(+)
|
|
AND sk.fin_refkenmerk_key = rsk.fin_refkenmerk_key;
|
|
WHEN 'INS'
|
|
THEN
|
|
SELECT rsk.ins_refsrtkenmerk_kolomnaam,
|
|
rsk.ins_refsrtkenmerk_kolomtxt,
|
|
rsk.ins_refsrtkenmerk_objectnaam,
|
|
rsk.fac_usrtab_key,
|
|
ut.fac_usrtab_view
|
|
INTO kolomnaam,
|
|
kolomtxt,
|
|
objectnaam,
|
|
tab_key,
|
|
ttype
|
|
FROM ins_refsrtkenmerk rsk, ins_srtkenmerk sk, fac_usrtab ut
|
|
WHERE sk.ins_srtkenmerk_key = kkey
|
|
AND rsk.fac_usrtab_key = ut.fac_usrtab_key(+)
|
|
AND sk.ins_refsrtkenmerk_key = rsk.ins_refsrtkenmerk_key;
|
|
WHEN 'MLD'
|
|
THEN
|
|
SELECT rsk.mld_refsrtkenmerk_kolomnaam,
|
|
rsk.mld_refsrtkenmerk_kolomtxt,
|
|
rsk.mld_refsrtkenmerk_objectnaam,
|
|
rsk.fac_usrtab_key,
|
|
ut.fac_usrtab_view
|
|
INTO kolomnaam,
|
|
kolomtxt,
|
|
objectnaam,
|
|
tab_key,
|
|
ttype
|
|
FROM mld_refsrtkenmerk rsk, mld_srtkenmerk sk, fac_usrtab ut
|
|
WHERE sk.mld_srtkenmerk_key = kkey
|
|
AND rsk.fac_usrtab_key = ut.fac_usrtab_key(+)
|
|
AND sk.mld_refsrtkenmerk_key = rsk.mld_refsrtkenmerk_key;
|
|
WHEN 'PRS'
|
|
THEN
|
|
SELECT rsk.prs_refkenmerk_kolomnaam,
|
|
rsk.prs_refkenmerk_kolomtxt,
|
|
rsk.prs_refkenmerk_objectnaam,
|
|
rsk.fac_usrtab_key,
|
|
ut.fac_usrtab_view
|
|
INTO kolomnaam,
|
|
kolomtxt,
|
|
objectnaam,
|
|
tab_key,
|
|
ttype
|
|
FROM prs_refkenmerk rsk, prs_kenmerk sk, fac_usrtab ut
|
|
WHERE sk.prs_kenmerk_key = kkey
|
|
AND rsk.fac_usrtab_key = ut.fac_usrtab_key(+)
|
|
AND sk.prs_refkenmerk_key = rsk.prs_refkenmerk_key;
|
|
WHEN 'RES'
|
|
THEN
|
|
SELECT rsk.res_refsrtkenmerk_kolomnaam,
|
|
rsk.res_refsrtkenmerk_kolomtxt,
|
|
rsk.res_refsrtkenmerk_objectnaam,
|
|
rsk.fac_usrtab_key,
|
|
ut.fac_usrtab_view
|
|
INTO kolomnaam,
|
|
kolomtxt,
|
|
objectnaam,
|
|
tab_key,
|
|
ttype
|
|
FROM res_refsrtkenmerk rsk, res_srtkenmerk sk, fac_usrtab ut
|
|
WHERE sk.res_srtkenmerk_key = kkey
|
|
AND rsk.fac_usrtab_key = ut.fac_usrtab_key(+)
|
|
AND sk.res_refsrtkenmerk_key = rsk.res_refsrtkenmerk_key;
|
|
WHEN 'BES'
|
|
THEN
|
|
SELECT rsk.bes_refsrtkenmerk_kolomnaam,
|
|
rsk.bes_refsrtkenmerk_kolomtxt,
|
|
rsk.bes_refsrtkenmerk_objectnaam,
|
|
rsk.fac_usrtab_key,
|
|
ut.fac_usrtab_view
|
|
INTO kolomnaam,
|
|
kolomtxt,
|
|
objectnaam,
|
|
tab_key,
|
|
ttype
|
|
FROM bes_refsrtkenmerk rsk, bes_srtkenmerk sk, fac_usrtab ut
|
|
WHERE sk.bes_srtkenmerk_key = kkey
|
|
AND rsk.fac_usrtab_key = ut.fac_usrtab_key(+)
|
|
AND sk.bes_refsrtkenmerk_key = rsk.bes_refsrtkenmerk_key;
|
|
WHEN 'CNT'
|
|
THEN
|
|
SELECT rsk.cnt_refsrtkenmerk_kolomnaam,
|
|
rsk.cnt_refsrtkenmerk_kolomtxt,
|
|
rsk.cnt_refsrtkenmerk_objectnaam,
|
|
rsk.fac_usrtab_key,
|
|
ut.fac_usrtab_view
|
|
INTO kolomnaam,
|
|
kolomtxt,
|
|
objectnaam,
|
|
tab_key,
|
|
ttype
|
|
FROM cnt_refsrtkenmerk rsk, cnt_srtkenmerk sk, fac_usrtab ut
|
|
WHERE sk.cnt_srtkenmerk_key = kkey
|
|
AND rsk.fac_usrtab_key = ut.fac_usrtab_key(+)
|
|
AND sk.cnt_refsrtkenmerk_key = rsk.cnt_refsrtkenmerk_key;
|
|
ELSE
|
|
RETURN NULL;
|
|
END CASE;
|
|
|
|
IF tab_key IS NULL OR ttype = 'V' OR ttype IS NULL
|
|
THEN
|
|
sresult := 'SELECT ' || kolomtxt || ' from ' || objectnaam || ' where ' || kolomnaam || '=' || waarde;
|
|
ELSE
|
|
sresult :=
|
|
'SELECT '
|
|
|| kolomtxt
|
|
|| ' from '
|
|
|| objectnaam
|
|
|| ' where '
|
|
|| kolomnaam
|
|
|| '='
|
|
|| waarde
|
|
|| ' AND fac_usrtab_key = '
|
|
|| TO_CHAR (tab_key);
|
|
END IF;
|
|
|
|
IF sresult IS NOT NULL
|
|
THEN
|
|
EXECUTE IMMEDIATE sresult INTO resultvalue;
|
|
END IF;
|
|
|
|
RETURN resultvalue;
|
|
END;
|
|
|
|
/* Werkt vast nog niet voor sqls -pf */
|
|
-- Return number of workdays between two dates, not including the startdate, weekends and holidays
|
|
FUNCTION count_Work_Days0( pdate1 IN DATE , pdate2 IN DATE, pInclTime IN BOOLEAN ) RETURN NUMBER IS
|
|
eikdag NUMBER;
|
|
v_date_from DATE;
|
|
v_date_to DATE;
|
|
v_time_from NUMBER;
|
|
v_time_to NUMBER;
|
|
v_extra_day NUMBER;
|
|
lbackwards BOOLEAN;
|
|
v_week NUMBER;
|
|
v_mod NUMBER;
|
|
v_day_from NUMBER;
|
|
v_day_to NUMBER;
|
|
v_holidays NUMBER;
|
|
BEGIN
|
|
|
|
-- Dit is een maandag, is dat volgens de huidige territory dag 2?
|
|
SELECT TO_NUMBER (DATE_TO_CHAR (TO_DATE('01-01-2007','DD-MM-YYYY'), 'D'))
|
|
INTO eikdag
|
|
FROM DUAL;
|
|
IF eikdag <> 2
|
|
THEN
|
|
-- WE MOETEN met zondag=1 werken (geen nieuwe eis, wel duidelijker probleem)
|
|
RETURN NULL;
|
|
END IF;
|
|
|
|
-- Remove time-part from dates (ie. set to 0:00) and set dates chronologically
|
|
IF pdate1 > pdate2 THEN
|
|
v_date_from := TRUNC(pdate2);
|
|
v_date_to := TRUNC(pdate1);
|
|
v_time_from := to_char(pdate2,'sssss');
|
|
v_time_to := to_char(pdate1,'sssss');
|
|
lbackwards := TRUE;
|
|
ELSE
|
|
v_date_from := TRUNC(pdate1);
|
|
v_date_to := TRUNC(pdate2);
|
|
v_time_from := to_char(pdate1,'sssss');
|
|
v_time_to := to_char(pdate2,'sssss');
|
|
lbackwards := FALSE;
|
|
END IF;
|
|
|
|
-- Determine whole weeks (v_week) and remaining days (v_mod) between FROM and TO
|
|
v_week := trunc((v_date_to - v_date_from)/7);
|
|
v_mod := mod((v_date_to - v_date_from),7);
|
|
|
|
-- Correct remaining days (v_mod) depending on the FROM and TO "day-number"
|
|
v_day_from := to_number(DATE_TO_CHAR(v_date_from,'d'));
|
|
v_day_to := to_number(DATE_TO_CHAR(v_date_to,'d'));
|
|
IF v_day_from = 1 THEN /* FROM is sunday */
|
|
IF v_day_to = 7 THEN /* TO is saturday */
|
|
v_mod := v_mod - 1; /* should always be 5! */
|
|
END IF;
|
|
ELSE IF v_day_from = 7 THEN /* FROM is saturday */
|
|
IF v_day_to != 7 THEN /* TO is not saturday */
|
|
v_mod := v_mod - 1; /* exclude sunday succeding FROM-saturday */
|
|
END IF;
|
|
ELSE /* FROM is workday */
|
|
IF v_day_to = 7 THEN /* TO is saturday */
|
|
v_mod := v_mod - 1; /* exclude TO-saturday */
|
|
ELSE IF v_day_to < v_day_from THEN /* weekend between FROM and TO */
|
|
v_mod := v_mod - 2; /* exclude weekend */
|
|
END IF;
|
|
END IF;
|
|
END IF;
|
|
END IF;
|
|
|
|
v_extra_day := 0;
|
|
IF pInclTime THEN
|
|
IF v_time_to > v_time_from THEN
|
|
v_extra_day := 1;
|
|
END IF;
|
|
END IF;
|
|
|
|
|
|
-- Determine the registered holidays between FROM and TO
|
|
SELECT count(*)
|
|
INTO v_holidays
|
|
FROM MLD_VRIJE_DAGEN
|
|
WHERE MLD_VRIJE_DAGEN_DATUM BETWEEN v_date_from AND v_date_to;
|
|
|
|
IF lbackwards THEN
|
|
RETURN 0 - (5 * v_week + v_mod + v_extra_day - v_holidays);
|
|
ELSE
|
|
RETURN 5 * v_week + v_mod + v_extra_day - v_holidays;
|
|
END IF;
|
|
EXCEPTION
|
|
WHEN OTHERS THEN RETURN NULL;
|
|
END;
|
|
|
|
FUNCTION count_Work_Days_InclTime( pdate1 IN DATE , pdate2 IN DATE ) RETURN NUMBER IS
|
|
BEGIN
|
|
RETURN count_Work_Days0(pdate1,pdate2, TRUE);
|
|
END;
|
|
|
|
FUNCTION count_Work_Days( pdate1 IN DATE , pdate2 IN DATE ) RETURN NUMBER IS
|
|
BEGIN
|
|
RETURN count_Work_Days0(pdate1,pdate2, FALSE);
|
|
END;
|
|
|
|
/*
|
|
** Bepaal een nieuwe datum van de begindatum waarbij de uitvoertijd is
|
|
** opgeteld. De uitvoertijd (UitvoerTijdType) kan in 'UREN' of in 'DAGEN' zijn.
|
|
** Er wordt rekening gehouden met Werkuren, BeginWerkTijd en EindWerkTijd en
|
|
** Weekenddagen (Zondag = 1, Zaterdag = 7) en Vrije dagen (MLD_VRIJE_DAGEN).
|
|
*/
|
|
FUNCTION datumtijdplusuitvoertijd (begindatum IN DATE, uitvoertijd IN NUMBER, uitvoertijdtype IN VARCHAR2)
|
|
RETURN DATE
|
|
IS
|
|
olddatumgereed DATE;
|
|
newdatumgereed DATE;
|
|
dagvdweek NUMBER;
|
|
vrijedagen NUMBER;
|
|
aantalwerkweken NUMBER;
|
|
aantaldagen NUMBER;
|
|
aantaldagenover NUMBER;
|
|
beginuur NUMBER (5, 2);
|
|
einduur NUMBER (5, 2);
|
|
newuitvoertijd NUMBER (5, 2);
|
|
beginwerknr NUMBER (5, 2);
|
|
eindewerknr NUMBER (5, 2);
|
|
werkurennr NUMBER (5, 2);
|
|
beginuurnr NUMBER (5, 2);
|
|
uitvoernr NUMBER (5, 2);
|
|
einduurnr NUMBER (5, 2);
|
|
newuitvoernr NUMBER (5, 2);
|
|
returnval DATE;
|
|
eikdag NUMBER;
|
|
BeginWerkTijd DATE := TO_DATE('08:00', 'HH24:MI');
|
|
EindWerkTijd DATE := TO_DATE('17:00', 'HH24:MI');
|
|
/* FSN#495: TO_NUMBER gebruikt NLS-Setting. Forceer '.' */
|
|
BeginWerkUur NUMBER(4,2) := TO_NUMBER(DATE_TO_CHAR(BeginWerkTijd, 'HH24.MI'), '9999D99', 'nls_numeric_characters = ''.,''');
|
|
EindWerkUur NUMBER(4,2) := TO_NUMBER(DATE_TO_CHAR(EindWerkTijd, 'HH24.MI'), '9999D99', 'nls_numeric_characters = ''.,''');
|
|
AantalWerkUren NUMBER(4,2) := EindWerkUur - BeginWerkUur;
|
|
|
|
BEGIN
|
|
--veronderstelt NLS_TERRITORY='AMERICA'
|
|
IF uitvoertijd IS NOT NULL AND begindatum IS NOT NULL AND uitvoertijdtype = 'DAGEN'
|
|
THEN
|
|
-- Dit is een maandag, is dat volgens de huidige territory dag 2?
|
|
eikdag := TO_NUMBER (DATE_TO_CHAR (_TO_DATE2('01-01-2007', 'DD-MM-YYYY'), 'D'));
|
|
|
|
IF eikdag <> 2
|
|
THEN
|
|
-- WE MOETEN met zondag=1 werken (geen nieuwe eis, wel duidelijker probleem)
|
|
RETURN NULL;
|
|
END IF;
|
|
|
|
dagvdweek := TO_NUMBER (DATE_TO_CHAR (begindatum, 'D'));
|
|
|
|
-- dagvdweek: zondag=1,.., zaterdag=7
|
|
aantalwerkweken := TRUNC (uitvoertijd / 5);
|
|
aantaldagenover := uitvoertijd MOD 5;
|
|
-- een werkweek van 5 dagen zorgt voor een doorlooptijd van 7 kalenderdagen
|
|
newdatumgereed := begindatum + aantalwerkweken * 7 + aantaldagenover;
|
|
--DBMS_OUTPUT.put_line ('zonder vrije dagen of weekends ' || TO_CHAR (newdatumgereed));
|
|
|
|
IF uitvoertijd > 0
|
|
THEN
|
|
|
|
IF dagvdweek + aantaldagenover > 6
|
|
THEN
|
|
-- er zit dan een weekend tussen
|
|
newdatumgereed := newdatumgereed + 2;
|
|
END IF;
|
|
|
|
IF dagvdweek = 1 AND uitvoertijd = 1
|
|
THEN
|
|
-- begin op zondag en uitvoertijd 1 dag
|
|
newdatumgereed := newdatumgereed + 1;
|
|
END IF;
|
|
|
|
--DBMS_OUTPUT.put_line ('zonder vrije dagen ' || DATE_TO_CHAR (newdatumgereed));
|
|
olddatumgereed := begindatum;
|
|
|
|
LOOP
|
|
dagvdweek := TO_NUMBER (DATE_TO_CHAR (newdatumgereed, 'D'));
|
|
|
|
IF dagvdweek = 7 OR dagvdweek = 1
|
|
THEN
|
|
-- zaterdag wordt maandag, zondag wordt dinsdag
|
|
newdatumgereed := newdatumgereed + 2;
|
|
--DBMS_OUTPUT.put_line ('opschuiven: ' || TO_CHAR (newdatumgereed));
|
|
|
|
dagvdweek := TO_NUMBER (DATE_TO_CHAR (newdatumgereed, 'D'));
|
|
END IF;
|
|
|
|
SELECT COUNT (*)
|
|
INTO vrijedagen
|
|
FROM mld_vrije_dagen
|
|
WHERE mld_vrije_dagen_datum > olddatumgereed AND mld_vrije_dagen_datum <= newdatumgereed;
|
|
|
|
IF dagvdweek > 1 AND dagvdweek < 7 AND vrijedagen = 0
|
|
THEN
|
|
-- Het uiteindelijke resultaat is gevonden
|
|
--DBMS_OUTPUT.put_line ('met vrije dagen en weekendcorrectie ' || TO_CHAR (newdatumgereed));
|
|
EXIT;
|
|
END IF;
|
|
|
|
IF vrijedagen > 0
|
|
THEN
|
|
-- schuif het eindresultaat evenzoveel dagen op; hier kan dan een weekend tussen zitten!
|
|
olddatumgereed := newdatumgereed;
|
|
newdatumgereed := newdatumgereed + TRUNC (vrijedagen / 5) * 7 + vrijedagen MOD 5;
|
|
--DBMS_OUTPUT.put_line ('met vrije dagen mogelijk weekend ' || TO_CHAR (newdatumgereed));
|
|
|
|
IF dagvdweek + (vrijedagen MOD 5) > 6
|
|
THEN
|
|
-- er zit dan een weekend tussen
|
|
newdatumgereed := newdatumgereed + 2;
|
|
END IF;
|
|
|
|
--DBMS_OUTPUT.put_line ('met vrije dagen na een weekend ' || TO_CHAR (newdatumgereed));
|
|
END IF;
|
|
-- En doorloop de controle nog een keer met deze nieuwe datum, daar kunnen ook weer vrije dagen tussen zitten
|
|
END LOOP;
|
|
|
|
END IF;
|
|
|
|
returnval := newdatumgereed;
|
|
ELSIF uitvoertijd IS NOT NULL AND begindatum IS NOT NULL AND uitvoertijdtype = 'UREN'
|
|
THEN
|
|
/*
|
|
** Zet eerst alle tijden om in decimalen. Hiermee kan dan normaal gerekend worden
|
|
** zonder dat er rekening moet worden gehouden dat 60 minuten weer een uur is.
|
|
*/
|
|
/* FSN#495: TO_NUMBER gebruikt NLS-Setting. Forceer '.' */
|
|
BeginUur := TO_NUMBER(DATE_TO_CHAR(BeginDatum, 'HH24.MI'), '9999D99', 'nls_numeric_characters = ''.,''');
|
|
BeginWerkNr := TRUNC(BeginWerkUur) + (BeginWerkUur - TRUNC(BeginWerkUur))/0.6;
|
|
EindeWerkNr := TRUNC(EindWerkUur) + (EindWerkUur - TRUNC(EindWerkUur ))/0.6;
|
|
BeginUurNr := TRUNC(BeginUur) + (BeginUur - TRUNC(BeginUur ))/0.6;
|
|
UitvoerNr := TRUNC(UitvoerTijd) + (UitvoerTijd - TRUNC(UitvoerTijd ))/0.6;
|
|
WerkUrenNr := EindeWerkNr - BeginWerkNr;
|
|
EindUurNr := BeginUurNr + UitvoerNr;
|
|
AantalDagen := 0;
|
|
--
|
|
IF EindUurNr > EindeWerkNr
|
|
THEN
|
|
AantalDagen := TRUNC(EindUurNr / WerkUrenNr);
|
|
EindUurNr := EindUurNr - AantalDagen * WerkUrenNr;
|
|
END IF;
|
|
EindUur := TRUNC(EindUurNr) + (EindUurNr - TRUNC(EindUurNr))*0.6;
|
|
/*
|
|
** Bij de onderstaande omzetting van decimaal naar datum kan de foutmelding
|
|
** "ORA-01850: hour must be between 0 and 23" optreden. Onderzoek dan of de
|
|
** initialisatie-procedure SetWerkTijden(..,..) wel wordt aangeroepen in een
|
|
** PL/SQL-blok (van form of script) voordat de functie DatumTijdPlusUitvoerTijd
|
|
** wordt aangeroepen (bijvoorbeeld in view mld_v_mld_openmelding).
|
|
**
|
|
** Eventuele verbetering hierin: Indien geen begin en eindtijd van werkdag bekend,
|
|
** dan 0:00 en 23:59 nemen, waardoor een werkdag 24 uur wordt. Kan dus gebruikt
|
|
** worden voor bedrijven waar continu gewerkt wordt.
|
|
*/
|
|
OldDatumGereed := TO_DATE(DATE_TO_CHAR(TRUNC(BeginDatum), 'DD-MM-YYYY')||' '
|
|
|| NUMBER_TO_CHAR(EindUur, '09.99'), 'DD-MM-YYYY HH24.MI');
|
|
IF AantalDagen > 0
|
|
THEN
|
|
ReturnVal := DatumTijdPlusUitvoerTijd(OldDatumGereed, AantalDagen, 'DAGEN');
|
|
ELSE
|
|
ReturnVal := OldDatumGereed;
|
|
END IF;
|
|
ELSE
|
|
ReturnVal := NULL;
|
|
END IF;
|
|
/*
|
|
** Voor controle op juiste berekening van de einddatum en tijd.
|
|
** raise_application_error(-20000,'klaar op : '|| DATE_to_char(returnval,'dd-mm-yyyy hh24:mi'));
|
|
*/
|
|
RETURN ReturnVal;
|
|
END;
|
|
|
|
|
|
PROCEDURE imp_getfield (
|
|
p_parseline IN OUT VARCHAR2,
|
|
p_fielddelimitor IN VARCHAR2,
|
|
p_field OUT VARCHAR2
|
|
)
|
|
AS
|
|
v_firstdelim NUMBER;
|
|
v_quote NUMBER;
|
|
BEGIN
|
|
v_firstdelim := INSTR (p_parseline, p_fielddelimitor, 1);
|
|
|
|
IF v_firstdelim = 0
|
|
THEN
|
|
p_field := SUBSTR2 (p_parseline, 1);
|
|
p_parseline := '';
|
|
RETURN;
|
|
END IF;
|
|
|
|
p_field := SUBSTR (p_parseline, 1, v_firstdelim - 1);
|
|
v_quote := INSTR(p_field, '"', 1);
|
|
IF v_quote <> 1 OR p_field IS NULL THEN
|
|
p_parseline := SUBSTR2 (p_parseline, v_firstdelim + 1);
|
|
RETURN;
|
|
ELSE
|
|
-- double quote found. Search for the end double quote.
|
|
v_quote := INSTR (p_parseline, '"', 2);
|
|
p_field := SUBSTR (p_parseline, 2, v_quote -2);
|
|
p_parseline := SUBSTR (p_parseline, v_quote +2);
|
|
RETURN;
|
|
END IF;
|
|
END;
|
|
|
|
PROCEDURE imp_writelog (
|
|
pappl IN VARCHAR2,
|
|
prun IN VARCHAR2,
|
|
plevel IN VARCHAR2,
|
|
pmsg IN VARCHAR2,
|
|
phint IN VARCHAR2
|
|
)
|
|
AS
|
|
BEGIN
|
|
INSERT INTO imp_log
|
|
(imp_log_applicatie, imp_log_run, imp_log_datum,
|
|
imp_log_status, imp_log_omschrijving, imp_log_hint
|
|
)
|
|
VALUES (pappl, prun, SYSDATE,
|
|
plevel, pmsg, phint
|
|
);
|
|
END;
|
|
|
|
FUNCTION imp_export_fac_rapport (
|
|
p_applname IN VARCHAR2,
|
|
p_applrun IN VARCHAR2,
|
|
p_filedir IN VARCHAR2,
|
|
p_filename IN VARCHAR2
|
|
) RETURN BOOLEAN
|
|
AS
|
|
v_filehandle UTL_FILE.file_type;
|
|
v_newline VARCHAR2 (1000);
|
|
v_errormsg VARCHAR (200);
|
|
oracle_err_num NUMBER;
|
|
oracle_err_mes VARCHAR2 (200);
|
|
l_cnt NUMBER;
|
|
|
|
CURSOR cregels
|
|
IS
|
|
SELECT FAC_RAPPORT_REGEL regel
|
|
FROM FAC_RAPPORT
|
|
WHERE FAC_RAPPORT_NODE=userenv('SESSIONID')
|
|
ORDER BY FAC_RAPPORT_VOLGNR;
|
|
BEGIN
|
|
|
|
v_filehandle := UTL_FILE.fopen (p_filedir, p_filename, 'w');
|
|
fac.imp_writelog (p_applname,
|
|
p_applrun,
|
|
'I',
|
|
'Export naar ' || p_filedir || '/' || p_filename,
|
|
''
|
|
);
|
|
l_cnt := 0;
|
|
|
|
FOR rcregels IN cregels
|
|
LOOP
|
|
BEGIN
|
|
v_newline := rcregels.regel;
|
|
UTL_FILE.put_line (v_filehandle, v_newline);
|
|
l_cnt := l_cnt + 1;
|
|
EXCEPTION
|
|
WHEN NO_DATA_FOUND
|
|
THEN
|
|
UTL_FILE.fclose (v_filehandle);
|
|
-- EOF reached
|
|
EXIT;
|
|
WHEN OTHERS
|
|
THEN
|
|
oracle_err_num := SQLCODE;
|
|
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
|
|
v_errormsg := '(ORACLE error ' || oracle_err_num || '/' || oracle_err_mes || ')';
|
|
fac.imp_writelog (p_applname, p_applrun, 'E', v_errormsg, '');
|
|
END;
|
|
END LOOP;
|
|
|
|
fac.imp_writelog (p_applname, p_applrun, 'I', 'Aantal geschreven records: ' || l_cnt, '');
|
|
RETURN TRUE;
|
|
EXCEPTION
|
|
WHEN UTL_FILE.invalid_operation
|
|
THEN
|
|
UTL_FILE.fclose (v_filehandle);
|
|
oracle_err_num := SQLCODE;
|
|
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
|
|
v_errormsg :=
|
|
'UTL_FILE.INVALID_OPERATION (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
|
|
fac.imp_writelog (p_applname,
|
|
p_applrun,
|
|
'E',
|
|
v_errormsg,
|
|
'Controleer bestandsnaam van exportbestand'
|
|
);
|
|
RETURN FALSE;
|
|
WHEN UTL_FILE.invalid_filehandle
|
|
THEN
|
|
UTL_FILE.fclose (v_filehandle);
|
|
oracle_err_num := SQLCODE;
|
|
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
|
|
v_errormsg :=
|
|
'UTL_FILE.INVALID_FILEHANDLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
|
|
fac.imp_writelog (p_applname, p_applrun, 'E', v_errormsg, '');
|
|
RETURN FALSE;
|
|
WHEN UTL_FILE.invalid_path
|
|
THEN
|
|
UTL_FILE.fclose (v_filehandle);
|
|
oracle_err_num := SQLCODE;
|
|
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
|
|
v_errormsg :=
|
|
'UTL_FILE.INVALID_PATH (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
|
|
fac.imp_writelog
|
|
(p_applname,
|
|
p_applrun,
|
|
'E',
|
|
v_errormsg,
|
|
'Controleer directory van importbestand (init.ora bevat utl_file_dir setting om te beschrijven welke directories te gebruiken zijn'
|
|
);
|
|
RETURN FALSE;
|
|
WHEN UTL_FILE.read_error
|
|
THEN
|
|
UTL_FILE.fclose (v_filehandle);
|
|
oracle_err_num := SQLCODE;
|
|
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
|
|
v_errormsg :=
|
|
'UTL_FILE.READ_ERROR (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
|
|
fac.imp_writelog (p_applname, p_applrun, 'E', v_errormsg, '');
|
|
RETURN FALSE;
|
|
WHEN OTHERS
|
|
THEN
|
|
UTL_FILE.fclose (v_filehandle);
|
|
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_applname, p_applrun, 'E', v_errormsg, '');
|
|
RETURN FALSE;
|
|
END;
|
|
|
|
PROCEDURE imp_alg_delete_onrgoed (p_applname IN VARCHAR2, p_applrun IN VARCHAR2, p_mode IN NUMBER)
|
|
AS
|
|
v_errormsg VARCHAR2 (1000);
|
|
v_errorhint VARCHAR2 (1000);
|
|
oracle_err_num NUMBER;
|
|
oracle_err_mes VARCHAR2 (200);
|
|
BEGIN
|
|
DELETE FROM bez_bezoekers;
|
|
|
|
DELETE FROM bez_afspraak;
|
|
|
|
DELETE FROM res_rsv_deel;
|
|
|
|
DELETE FROM res_rsv_artikel;
|
|
|
|
DELETE FROM res_rsv_ruimte;
|
|
|
|
DELETE FROM res_reservering;
|
|
|
|
DELETE FROM res_kenmerkwaarde;
|
|
|
|
DELETE FROM res_alg_ruimte;
|
|
|
|
DELETE FROM res_ruimte_opstelling;
|
|
|
|
DELETE FROM res_ruimte;
|
|
|
|
DELETE FROM res_opstelling;
|
|
|
|
DELETE FROM res_activiteitdiscipline;
|
|
|
|
DELETE FROM res_disc_params;
|
|
|
|
DELETE FROM ins_tab_discipline
|
|
WHERE ins_discipline_module = 'RES' AND ins_discipline_min_level = '3';
|
|
|
|
DELETE FROM res_srtartikel_onrgoed;
|
|
|
|
DELETE FROM fin_factuur
|
|
WHERE mld_opdr_key IS NOT NULL;
|
|
|
|
DELETE FROM cnt_contract_plaats;
|
|
|
|
DELETE FROM cnt_contract_onrgoed;
|
|
|
|
DELETE FROM mld_kenmerkmelding;
|
|
|
|
DELETE FROM mld_melding_object;
|
|
|
|
DELETE FROM mld_opdr;
|
|
|
|
DELETE FROM mld_melding;
|
|
|
|
DELETE FROM mld_adres;
|
|
|
|
DELETE FROM prs_perslidwerkplek;
|
|
|
|
IF (p_mode < 2)
|
|
THEN
|
|
DELETE FROM prs_contactpersoon_locatie;
|
|
END IF;
|
|
|
|
DELETE FROM ins_verbinding;
|
|
|
|
DELETE FROM ins_deelkoppeling;
|
|
|
|
DELETE FROM ins_deel
|
|
WHERE ins_deel_parent_key IS NOT NULL;
|
|
|
|
DELETE FROM ins_deel
|
|
WHERE ins_alg_ruimte_type IS NOT NULL;
|
|
|
|
DELETE FROM alg_terreinsector;
|
|
|
|
DELETE FROM alg_srtterreinsector;
|
|
|
|
DELETE FROM alg_ruimte;
|
|
|
|
DELETE FROM alg_srtruimte;
|
|
|
|
DELETE FROM alg_verdieping;
|
|
|
|
IF (p_mode < 2)
|
|
THEN
|
|
DELETE FROM alg_onrgoedkenmerk;
|
|
|
|
DELETE FROM alg_gebouw;
|
|
|
|
DELETE FROM alg_srtgebouw;
|
|
|
|
DELETE FROM alg_locatie;
|
|
|
|
DELETE FROM alg_district;
|
|
|
|
DELETE FROM alg_regio;
|
|
ELSE
|
|
DELETE FROM alg_onrgoedkenmerk
|
|
WHERE alg_onrgoed_niveau IN ('R', 'T');
|
|
END IF;
|
|
EXCEPTION
|
|
WHEN OTHERS
|
|
THEN
|
|
oracle_err_num := SQLCODE;
|
|
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
|
|
|
|
IF (v_errormsg = '')
|
|
THEN
|
|
v_errormsg := 'Niet alle onroerendgoed gegevens zijn verwijderd!';
|
|
END IF;
|
|
|
|
v_errorhint :=
|
|
v_errorhint
|
|
|| ' (ORACLE error NUMBER = <'
|
|
|| oracle_err_num
|
|
|| '> ORACLE error message = <'
|
|
|| oracle_err_mes
|
|
|| '>)';
|
|
fac.imp_writelog (p_applname, p_applrun, 'E', v_errormsg, v_errorhint);
|
|
COMMIT;
|
|
END;
|
|
|
|
PROCEDURE imp_prs_delete_organisatie (p_applname IN VARCHAR2, p_applrun IN VARCHAR2, p_mode IN NUMBER)
|
|
AS
|
|
v_errormsg VARCHAR2 (1000);
|
|
v_errorhint VARCHAR2 (1000);
|
|
oracle_err_num NUMBER;
|
|
oracle_err_mes VARCHAR2 (200);
|
|
|
|
v_bedrijf_key NUMBER(10);
|
|
v_srtperslid_key NUMBER(10);
|
|
v_afdeling_key NUMBER(10);
|
|
v_groep_key_def NUMBER(10);
|
|
v_groep_key_admin NUMBER(10);
|
|
v_perslid_key_gast NUMBER(10);
|
|
v_perslid_key_fac NUMBER(10);
|
|
v_functie_key_prssys NUMBER(10);
|
|
|
|
-- PRS_CONTACTPERSOON_LOCATIE
|
|
CURSOR c1
|
|
IS
|
|
SELECT prs_contactpersoon_locatie_key
|
|
FROM prs_contactpersoon_locatie;
|
|
|
|
rec1 c1%ROWTYPE;
|
|
|
|
-- PRS_CONTACTPERSOON
|
|
CURSOR c2
|
|
IS
|
|
SELECT prs_contactpersoon_key
|
|
FROM prs_contactpersoon;
|
|
|
|
rec2 c2%ROWTYPE;
|
|
|
|
-- PRS_BEDRIJFDIENSTLOCATIE
|
|
CURSOR c3
|
|
IS
|
|
SELECT prs_bedrijfdienstlocatie_key
|
|
FROM prs_bedrijfdienstlocatie;
|
|
|
|
rec3 c3%ROWTYPE;
|
|
|
|
-- PRS_PERSLIDWERKPLEK
|
|
CURSOR c4
|
|
IS
|
|
SELECT prs_perslidwerkplek_key
|
|
FROM prs_perslidwerkplek;
|
|
|
|
rec4 c4%ROWTYPE;
|
|
|
|
-- PRS_WERKPLEK
|
|
CURSOR c5
|
|
IS
|
|
SELECT prs_werkplek_key
|
|
FROM prs_werkplek;
|
|
|
|
rec5 c5%ROWTYPE;
|
|
|
|
-- PRS_PERSLID
|
|
CURSOR c6
|
|
IS
|
|
SELECT prs_perslid_key
|
|
FROM prs_perslid
|
|
WHERE prs_perslid_oslogin not in ('_GAST','_FACILITOR')
|
|
OR prs_perslid_oslogin IS NULL;
|
|
|
|
rec6 c6%ROWTYPE;
|
|
|
|
-- PRS_SRTPERSLID
|
|
CURSOR c7
|
|
IS
|
|
SELECT prs_srtperslid_key
|
|
FROM prs_srtperslid
|
|
where prs_srtperslid_upper <> 'ONBEKEND';
|
|
|
|
rec7 c7%ROWTYPE;
|
|
|
|
-- PRS_KOSTENPLAATS
|
|
CURSOR c8
|
|
IS
|
|
SELECT prs_kostenplaats_key
|
|
FROM prs_kostenplaats;
|
|
|
|
rec8 c8%ROWTYPE;
|
|
|
|
BEGIN
|
|
IF (p_mode <= 1)
|
|
THEN
|
|
|
|
FOR rec1 IN c1
|
|
LOOP
|
|
BEGIN
|
|
delete from prs_contactpersoon_locatie where prs_contactpersoon_locatie_key = rec1.prs_contactpersoon_locatie_key;
|
|
EXCEPTION
|
|
WHEN OTHERS THEN
|
|
v_errormsg := 'Ok, dan niet. Neem het volgende record ....';
|
|
END;
|
|
END LOOP;
|
|
|
|
commit;
|
|
|
|
FOR rec2 IN c2
|
|
LOOP
|
|
BEGIN
|
|
delete from prs_contactpersoon where prs_contactpersoon_key = rec2.prs_contactpersoon_key;
|
|
EXCEPTION
|
|
WHEN OTHERS THEN
|
|
v_errormsg := 'Ok, dan niet. Neem het volgende record ....';
|
|
END;
|
|
END LOOP;
|
|
|
|
commit;
|
|
|
|
FOR rec3 IN c3
|
|
LOOP
|
|
BEGIN
|
|
delete from prs_bedrijfdienstlocatie where prs_bedrijfdienstlocatie_key = rec3.prs_bedrijfdienstlocatie_key;
|
|
EXCEPTION
|
|
WHEN OTHERS THEN
|
|
v_errormsg := 'Ok, dan niet. Neem het volgende record ....';
|
|
END;
|
|
END LOOP;
|
|
|
|
commit;
|
|
|
|
END IF;
|
|
|
|
IF (p_mode <= 2)
|
|
THEN
|
|
|
|
FOR rec4 IN c4
|
|
LOOP
|
|
BEGIN
|
|
delete from prs_perslidwerkplek where prs_perslidwerkplek_key = rec4.prs_perslidwerkplek_key;
|
|
EXCEPTION
|
|
WHEN OTHERS THEN
|
|
v_errormsg := 'Ok, dan niet. Neem het volgende record ....'; -- agv prs_v_verplichting_all/fac_gebruikersgroep
|
|
END;
|
|
END LOOP;
|
|
|
|
commit;
|
|
|
|
FOR rec5 IN c5
|
|
LOOP
|
|
BEGIN
|
|
delete from prs_werkplek where prs_werkplek_key = rec5.prs_werkplek_key;
|
|
EXCEPTION
|
|
WHEN OTHERS THEN
|
|
v_errormsg := 'Ok, dan niet. Neem het volgende record ....'; --
|
|
END;
|
|
END LOOP;
|
|
|
|
commit;
|
|
|
|
FOR rec6 IN c6
|
|
LOOP
|
|
BEGIN
|
|
delete from prs_perslid where prs_perslid_key = rec6.prs_perslid_key;
|
|
EXCEPTION
|
|
WHEN OTHERS THEN
|
|
v_errormsg := 'Ok, dan niet. Neem het volgende record ....'; -- agv prs_v_verplichting_all/fac_gebruikersgroep/prs_perslidwerkplek
|
|
END;
|
|
END LOOP;
|
|
|
|
commit;
|
|
|
|
FOR rec7 IN c7
|
|
LOOP
|
|
BEGIN
|
|
delete from prs_srtperslid where prs_srtperslid_key = rec7.prs_srtperslid_key;
|
|
EXCEPTION
|
|
WHEN OTHERS THEN
|
|
v_errormsg := 'Ok, dan niet. Neem het volgende record ....'; -- agv prs_perslid
|
|
END;
|
|
END LOOP;
|
|
|
|
commit;
|
|
|
|
END IF;
|
|
|
|
IF (p_mode <= 1)
|
|
THEN
|
|
|
|
-- Verwijder ALLE afdelingen indien mogelijk. Doe dit wel in de 'juiste' volgorde.
|
|
|
|
DELETE FROM prs_afdeling
|
|
WHERE prs_afdeling_key IN (SELECT prs_afdeling_key
|
|
FROM prs_v_afdeling
|
|
WHERE niveau = 5) AND prs_afdeling_key NOT IN (SELECT prs_afdeling_key
|
|
FROM prs_perslid);
|
|
|
|
DELETE FROM prs_afdeling
|
|
WHERE prs_afdeling_key IN (SELECT prs_afdeling_key
|
|
FROM prs_v_afdeling
|
|
WHERE niveau = 4)
|
|
AND prs_afdeling_key NOT IN (SELECT prs_afdeling_key
|
|
FROM prs_perslid)
|
|
AND prs_afdeling_key NOT IN (SELECT prs_afdeling_parentkey
|
|
FROM prs_v_afdeling
|
|
WHERE niveau = 5);
|
|
|
|
DELETE FROM prs_afdeling
|
|
WHERE prs_afdeling_key IN (SELECT prs_afdeling_key
|
|
FROM prs_v_afdeling
|
|
WHERE niveau = 3)
|
|
AND prs_afdeling_key NOT IN (SELECT prs_afdeling_key
|
|
FROM prs_perslid)
|
|
AND prs_afdeling_key NOT IN (SELECT prs_afdeling_parentkey
|
|
FROM prs_v_afdeling
|
|
WHERE niveau = 4);
|
|
|
|
DELETE FROM prs_afdeling
|
|
WHERE prs_afdeling_key IN (SELECT prs_afdeling_key
|
|
FROM prs_v_afdeling
|
|
WHERE niveau = 2)
|
|
AND prs_afdeling_key NOT IN (SELECT prs_afdeling_key
|
|
FROM prs_perslid)
|
|
AND prs_afdeling_key NOT IN (SELECT prs_afdeling_parentkey
|
|
FROM prs_v_afdeling
|
|
WHERE niveau = 3);
|
|
|
|
DELETE FROM prs_afdeling
|
|
WHERE prs_afdeling_key IN (SELECT prs_afdeling_key
|
|
FROM prs_v_afdeling
|
|
WHERE niveau = 1)
|
|
AND prs_afdeling_upper <> 'ONBEKEND'
|
|
AND prs_afdeling_key NOT IN (SELECT prs_afdeling_key
|
|
FROM prs_perslid)
|
|
AND prs_afdeling_key NOT IN (SELECT prs_afdeling_parentkey
|
|
FROM prs_v_afdeling
|
|
WHERE niveau = 2);
|
|
|
|
-- Verwijder ALLE bedrijven voor zover mogelijk
|
|
DELETE FROM prs_bedrijf
|
|
WHERE prs_bedrijf_key NOT IN (SELECT prs_bedrijf_key
|
|
FROM prs_afdeling)
|
|
AND prs_bedrijf_naam_upper <> 'ONBEKEND';
|
|
|
|
commit;
|
|
|
|
END IF;
|
|
|
|
-- Verwijder ALLE kostenplaatsen voor zover mogelijk
|
|
FOR rec8 IN c8
|
|
LOOP
|
|
BEGIN
|
|
delete from prs_kostenplaats where prs_kostenplaats_key = rec8.prs_kostenplaats_key;
|
|
EXCEPTION
|
|
WHEN OTHERS THEN
|
|
v_errormsg := 'Ok, dan niet. Neem het volgende record ....';
|
|
END;
|
|
END LOOP;
|
|
|
|
COMMIT;
|
|
|
|
-- Maak initiele vulling aan
|
|
BEGIN
|
|
INSERT INTO prs_srtperslid (prs_srtperslid_omschrijving, prs_bedrijf_key)
|
|
VALUES ('Onbekend', NULL);
|
|
EXCEPTION
|
|
WHEN OTHERS THEN
|
|
v_errormsg := 'Ok. Kennelijk bestaat het record al';
|
|
END;
|
|
|
|
SELECT prs_srtperslid_key
|
|
INTO v_srtperslid_key
|
|
FROM prs_srtperslid
|
|
WHERE prs_srtperslid_upper = 'ONBEKEND';
|
|
|
|
BEGIN
|
|
INSERT INTO prs_bedrijf (prs_bedrijf_naam, prs_bedrijf_intern)
|
|
VALUES ('Onbekend', 1);
|
|
EXCEPTION
|
|
WHEN OTHERS THEN
|
|
v_errormsg := 'Ok. Kennelijk bestaat het record al';
|
|
END;
|
|
|
|
SELECT prs_bedrijf_key
|
|
INTO v_bedrijf_key
|
|
FROM prs_bedrijf
|
|
WHERE prs_bedrijf_naam_upper = 'ONBEKEND';
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
BEGIN
|
|
INSERT INTO prs_afdeling (prs_bedrijf_key, prs_afdeling_naam)
|
|
VALUES (v_bedrijf_key, 'Onbekend');
|
|
EXCEPTION
|
|
WHEN OTHERS THEN
|
|
v_errormsg := 'Ok. Kennelijk bestaat het record al';
|
|
END;
|
|
|
|
SELECT prs_afdeling_key
|
|
INTO v_afdeling_key
|
|
FROM prs_afdeling
|
|
WHERE prs_afdeling_upper = 'ONBEKEND';
|
|
|
|
BEGIN
|
|
INSERT INTO prs_perslid
|
|
(prs_perslid_module,
|
|
prs_srtperslid_key,
|
|
prs_afdeling_key,
|
|
prs_perslid_naam,
|
|
prs_perslid_oslogin,
|
|
prs_perslid_wachtwoord,
|
|
prs_perslid_dienstverband,
|
|
prs_perslid_ingangsdatum,
|
|
prs_perslid_login
|
|
)
|
|
VALUES ('PRS',
|
|
v_srtperslid_key,
|
|
v_afdeling_key,
|
|
'Gast',
|
|
'_GAST',
|
|
'nobodyknow$',
|
|
100,
|
|
SYSDATE,
|
|
SYSDATE
|
|
);
|
|
EXCEPTION
|
|
WHEN OTHERS THEN
|
|
v_errormsg := 'Ok. Kennelijk bestaat het record al';
|
|
END;
|
|
|
|
SELECT prs_perslid_key
|
|
INTO v_perslid_key_gast
|
|
FROM prs_perslid
|
|
WHERE prs_perslid_oslogin = '_GAST';
|
|
|
|
BEGIN
|
|
INSERT INTO prs_perslid
|
|
(prs_perslid_module,
|
|
prs_srtperslid_key,
|
|
prs_afdeling_key,
|
|
prs_perslid_naam,
|
|
prs_perslid_oslogin,
|
|
prs_perslid_wachtwoord,
|
|
prs_perslid_dienstverband,
|
|
prs_perslid_ingangsdatum,
|
|
prs_perslid_login
|
|
)
|
|
VALUES ('PRS',
|
|
v_srtperslid_key,
|
|
v_afdeling_key,
|
|
'Facilitor',
|
|
'_FACILITOR',
|
|
'fictorial',
|
|
100,
|
|
SYSDATE,
|
|
SYSDATE
|
|
);
|
|
EXCEPTION
|
|
WHEN OTHERS THEN
|
|
v_errormsg := 'Ok. Kennelijk bestaat het record al';
|
|
END;
|
|
|
|
SELECT prs_perslid_key
|
|
INTO v_perslid_key_fac
|
|
FROM prs_perslid
|
|
WHERE prs_perslid_oslogin = '_FACILITOR';
|
|
|
|
BEGIN
|
|
INSERT INTO fac_groep
|
|
(fac_groep_omschrijving)
|
|
VALUES ('_Default');
|
|
EXCEPTION
|
|
WHEN OTHERS THEN
|
|
v_errormsg := 'Ok. Kennelijk bestaat het record al';
|
|
END;
|
|
|
|
SELECT fac_groep_key
|
|
INTO v_groep_key_def
|
|
FROM fac_groep
|
|
WHERE fac_groep_upper = '_DEFAULT';
|
|
|
|
BEGIN
|
|
INSERT INTO fac_groep
|
|
(fac_groep_omschrijving)
|
|
VALUES ('_Admin');
|
|
EXCEPTION
|
|
WHEN OTHERS THEN
|
|
v_errormsg := 'Ok. Kennelijk bestaat het record al';
|
|
END;
|
|
|
|
SELECT fac_groep_key
|
|
INTO v_groep_key_admin
|
|
FROM fac_groep
|
|
WHERE fac_groep_upper = '_ADMIN';
|
|
|
|
BEGIN
|
|
INSERT INTO fac_gebruikersgroep
|
|
(fac_groep_key, prs_perslid_key)
|
|
VALUES (v_groep_key_def, v_perslid_key_gast);
|
|
EXCEPTION
|
|
WHEN OTHERS THEN
|
|
v_errormsg := 'Ok. Kennelijk bestaat het record al';
|
|
END;
|
|
|
|
BEGIN
|
|
INSERT INTO fac_gebruikersgroep
|
|
(fac_groep_key, prs_perslid_key)
|
|
VALUES (v_groep_key_admin, v_perslid_key_fac);
|
|
EXCEPTION
|
|
WHEN OTHERS THEN
|
|
v_errormsg := 'Ok. Kennelijk bestaat het record al';
|
|
END;
|
|
|
|
SELECT fac_functie_key
|
|
INTO v_functie_key_prssys
|
|
FROM fac_functie
|
|
WHERE fac_functie_code = 'WEB_PRSSYS';
|
|
|
|
BEGIN
|
|
INSERT INTO fac_groeprechten
|
|
(fac_groep_key,
|
|
fac_functie_key,
|
|
fac_gebruiker_prs_level_read,
|
|
fac_gebruiker_alg_level_read,
|
|
fac_gebruiker_prs_level_write,
|
|
fac_gebruiker_alg_level_write
|
|
)
|
|
VALUES (v_groep_key_admin, v_functie_key_prssys, -1, -1, -1, -1);
|
|
EXCEPTION
|
|
WHEN OTHERS THEN
|
|
v_errormsg := 'Ok. Kennelijk bestaat het record al';
|
|
END;
|
|
|
|
commit;
|
|
|
|
EXCEPTION
|
|
WHEN OTHERS
|
|
THEN
|
|
oracle_err_num := SQLCODE;
|
|
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
|
|
|
|
IF (v_errormsg = '')
|
|
THEN
|
|
v_errormsg := 'Niet alle bedrijven zijn verwijderd';
|
|
END IF;
|
|
|
|
v_errorhint :=
|
|
v_errorhint
|
|
|| ' (ORACLE error NUMBER = <'
|
|
|| oracle_err_num
|
|
|| '> ORACLE error message = <'
|
|
|| oracle_err_mes
|
|
|| '>)';
|
|
fac.imp_writelog (p_applname, p_applrun, 'E', v_errormsg, v_errorhint);
|
|
COMMIT;
|
|
END;
|
|
|
|
PROCEDURE imp_mld_delete_mld (p_applname IN VARCHAR2, p_applrun IN VARCHAR2, p_mode IN NUMBER)
|
|
AS
|
|
v_errormsg VARCHAR2 (1000);
|
|
v_errorhint VARCHAR2 (1000);
|
|
oracle_err_num NUMBER;
|
|
oracle_err_mes VARCHAR2 (200);
|
|
BEGIN
|
|
|
|
delete from mld_opdr;
|
|
|
|
delete from mld_melding;
|
|
|
|
delete from mld_stdmelding;
|
|
|
|
delete from prs_kostensoort;
|
|
|
|
delete from mld_disc_params;
|
|
|
|
delete from ins_tab_discipline where ins_discipline_module='MLD';
|
|
|
|
delete from ins_srtdiscipline;
|
|
|
|
EXCEPTION
|
|
WHEN OTHERS
|
|
THEN
|
|
oracle_err_num := SQLCODE;
|
|
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
|
|
|
|
v_errormsg := 'Niet alle servicedesk gegevens zijn verwijderd!';
|
|
|
|
v_errorhint :=
|
|
v_errorhint
|
|
|| ' (ORACLE error NUMBER = <'
|
|
|| oracle_err_num
|
|
|| '> ORACLE error message = <'
|
|
|| oracle_err_mes
|
|
|| '>)';
|
|
fac.imp_writelog (p_applname, p_applrun, 'E', v_errormsg, v_errorhint);
|
|
COMMIT;
|
|
END; -- imp_mld_delete_mld
|
|
|
|
PROCEDURE fac_perfmon_incr (limiet IN NUMBER, zwaarte IN NUMBER)
|
|
AS
|
|
dummy VARCHAR2 (1);
|
|
BEGIN
|
|
BEGIN
|
|
SELECT ''
|
|
INTO dummy
|
|
FROM fac_perfmon
|
|
WHERE fac_perfmon_datum = TRUNC (SYSDATE);
|
|
|
|
UPDATE fac_perfmon
|
|
SET fac_perfmon_waarde = fac_perfmon_waarde + zwaarte,
|
|
fac_perfmon_aantal = fac_perfmon_aantal + 1
|
|
WHERE fac_perfmon_datum = TRUNC (SYSDATE);
|
|
EXCEPTION
|
|
WHEN NO_DATA_FOUND
|
|
THEN
|
|
-- a brandnew day. vul het aantal gebruikers van de vorige dag in en start een nieuwe
|
|
UPDATE fac_perfmon
|
|
SET fac_perfmon_users =
|
|
(SELECT COUNT (prs_perslid_key)
|
|
FROM prs_perslid
|
|
WHERE TRUNC (prs_perslid_login) = fac_perfmon_datum)
|
|
WHERE fac_perfmon_users IS NULL;
|
|
|
|
INSERT INTO fac_perfmon
|
|
(fac_perfmon_aantal, fac_perfmon_waarde,
|
|
fac_perfmon_datum, fac_perfmon_threshold
|
|
)
|
|
VALUES (1, zwaarte,
|
|
TRUNC (SYSDATE), limiet
|
|
);
|
|
END;
|
|
END;
|
|
|
|
-- Retourneert string met emailadres van persoon pkey, '' indien niet beschikbaar
|
|
FUNCTION getemail (pkey IN NUMBER)
|
|
RETURN VARCHAR2
|
|
IS
|
|
lemail prs_perslid.prs_perslid_email%TYPE;
|
|
BEGIN
|
|
lemail := '';
|
|
|
|
BEGIN
|
|
-- emailadres van ontvanger
|
|
SELECT prs_perslid_email
|
|
INTO lemail
|
|
FROM prs_perslid
|
|
WHERE prs_perslid_key = pkey;
|
|
EXCEPTION
|
|
WHEN OTHERS
|
|
THEN
|
|
NULL;
|
|
END;
|
|
|
|
RETURN lemail;
|
|
END;
|
|
|
|
-- Retourneert string met mobielnummer van persoon pkey, '' indien niet beschikbaar
|
|
FUNCTION getmobile (pkey IN NUMBER)
|
|
RETURN VARCHAR2
|
|
IS
|
|
lphone prs_perslid.prs_perslid_mobiel%TYPE;
|
|
BEGIN
|
|
lphone := '';
|
|
|
|
BEGIN
|
|
-- mobiele telefoon van ontvanger
|
|
SELECT prs_perslid_mobiel
|
|
INTO lphone
|
|
FROM prs_perslid
|
|
WHERE prs_perslid_key = pkey;
|
|
EXCEPTION
|
|
WHEN OTHERS
|
|
THEN
|
|
NULL;
|
|
END;
|
|
|
|
RETURN lphone;
|
|
END;
|
|
-- Zet een vrij bericht in de queue ter verspreiding volgens pmode. Dit is geen bestaande srtnotificatie
|
|
-- In plaats van pto (een intern prs_perslid) kan optioneel ook expliciete adressering worden meegegeven.
|
|
PROCEDURE putnotificationprio (pfrom NUMBER, pto NUMBER, pmessage VARCHAR2, pmode NUMBER,
|
|
poptemail VARCHAR2, poptmobile VARCHAR2, pprio NUMBER)
|
|
AS
|
|
lemail prs_perslid.prs_perslid_email%TYPE;
|
|
lphone prs_perslid.prs_perslid_mobiel%TYPE;
|
|
lmode NUMBER;
|
|
BEGIN
|
|
lmode := pmode;
|
|
IF poptemail IS NULL
|
|
THEN
|
|
lemail := fac.getemail (pto);
|
|
ELSE
|
|
lemail := poptemail;
|
|
END IF;
|
|
|
|
IF poptmobile IS NULL
|
|
THEN
|
|
lphone := fac.getmobile (pto);
|
|
ELSE
|
|
lphone := poptmobile;
|
|
END IF;
|
|
|
|
-- Stuur notificatie
|
|
IF BITAND(pmode, 2) = 2 AND lemail IS NULL
|
|
THEN
|
|
lmode := BITAND(lmode, 255-2);
|
|
END IF;
|
|
|
|
IF BITAND(pmode, 4) = 4 AND lphone IS NULL
|
|
THEN
|
|
lmode := BITAND(lmode, 255-4);
|
|
END IF;
|
|
|
|
IF lmode > 0 THEN
|
|
INSERT INTO fac_notificatie
|
|
(fac_srtnotificatie_key, fac_notificatie_status, prs_perslid_key_sender, prs_perslid_key_receiver,
|
|
fac_notificatie_receiver_email, fac_notificatie_receiver_phone, fac_notificatie_oms,
|
|
fac_notificatie_refkey, fac_notificatie_prioriteit
|
|
)
|
|
VALUES (NULL, lmode, pfrom, pto,
|
|
lemail, lphone, SUBSTR(pmessage, 1, 2048),
|
|
NULL, pprio
|
|
);
|
|
END IF;
|
|
END;
|
|
|
|
/* for code compatibility only */
|
|
PROCEDURE putnotification (pfrom NUMBER, pto NUMBER, pmessage VARCHAR2, pmode NUMBER,
|
|
poptemail VARCHAR2, poptmobile VARCHAR2)
|
|
AS
|
|
BEGIN
|
|
putnotificationprio (pfrom, pto, pmessage, pmode, poptemail, poptmobile, 2);
|
|
END;
|
|
|
|
-- Zet een bericht in de queue ter verspreiding aan de applicatiebeheerders
|
|
PROCEDURE putsystemnotification (pmessage VARCHAR2, pmode NUMBER)
|
|
AS
|
|
CURSOR c1
|
|
IS
|
|
SELECT fgg.prs_perslid_key
|
|
FROM fac_functie f, fac_groeprechten fgr, fac_gebruikersgroep fgg
|
|
WHERE fgg.fac_groep_key = fgr.fac_groep_key
|
|
AND f.fac_functie_key = fgr.fac_functie_key
|
|
AND f.fac_functie_code = 'WEB_PRSSYS';
|
|
BEGIN
|
|
FOR rec1 IN c1
|
|
LOOP
|
|
putnotification (NULL, rec1.prs_perslid_key, pmessage, pmode, NULL, NULL);
|
|
END LOOP;
|
|
END;
|
|
|
|
-- Zet een bericht in de queue ter verspreiding volgens definitie van een bestaande strnotificatie
|
|
-- Eventueel gebeurt er dus niets, als de srtnotificatie uitgeschakeld (mode=0) is.
|
|
-- Als het bericht wordt meegegeven in poptmessage dan wordt die tekst gebruikt ipv de standaardtekst van pcode
|
|
-- Evenzo wordt de standaardmode overruled door poptstatus als die meegegeven is, en
|
|
-- kan de email en mobile van pto optioneel worden overruled door poptemail en poptmobile
|
|
-- Als email of sms gevraagt wordt (smode) en email of mobile kan niet bepaald worden, wordt niet gequeued
|
|
-- pprio is de prioriteit (1, 2 of 3) die geen effect heeft op de quebehandeling, maar wel wordt meegegeven
|
|
-- psender is een optioneel emailadres dat als afzender kan worden gehanteerd.
|
|
PROCEDURE putnotificationsrtprio (
|
|
pfrom NUMBER,
|
|
pto NUMBER,
|
|
pcode VARCHAR2,
|
|
pref NUMBER,
|
|
poptmessage VARCHAR2,
|
|
poptstatus NUMBER,
|
|
poptemail VARCHAR2,
|
|
poptmobile VARCHAR2,
|
|
pxref NUMBER,
|
|
pprio NUMBER,
|
|
psender VARCHAR2
|
|
)
|
|
AS
|
|
soms fac_srtnotificatie.fac_srtnotificatie_oms%TYPE;
|
|
smode fac_srtnotificatie.fac_srtnotificatie_mode%TYPE;
|
|
susermode fac_srtnotificatie.fac_srtnotificatie_usermode%TYPE;
|
|
lmode fac_srtnotificatie.fac_srtnotificatie_mode%TYPE;
|
|
skey fac_srtnotificatie.fac_srtnotificatie_key%TYPE;
|
|
lemail prs_perslid.prs_perslid_email%TYPE;
|
|
lphone prs_perslid.prs_perslid_mobiel%TYPE;
|
|
BEGIN
|
|
IF pcode IS NOT NULL
|
|
THEN
|
|
BEGIN
|
|
IF poptstatus IS NULL
|
|
THEN
|
|
-- Geen status/mode meegegeven, bepaal em zelf
|
|
SELECT sn.fac_srtnotificatie_oms, sn.fac_srtnotificatie_mode, sn.fac_srtnotificatie_key,
|
|
fac_srtnotificatie_usermode
|
|
INTO soms, smode, skey, susermode
|
|
FROM fac_srtnotificatie sn
|
|
WHERE sn.fac_srtnotificatie_code = pcode AND sn.fac_srtnotificatie_mode > 0;
|
|
|
|
-- Als deze notificatiesoort userafhankelijk kan zijn, kijken we
|
|
-- naar de status/mode die bij de user is aangegeven
|
|
IF susermode = 1 AND pto IS NOT NULL
|
|
THEN
|
|
BEGIN
|
|
SELECT prs_perslid_srtnoti_mode
|
|
INTO smode
|
|
FROM prs_perslid
|
|
WHERE prs_perslid_key = pto AND prs_perslid_srtnoti_mode IS NOT NULL;
|
|
EXCEPTION
|
|
WHEN NO_DATA_FOUND
|
|
THEN
|
|
-- geen gebruikersoverrule, gebruik gewoon de centrale mode
|
|
NULL;
|
|
END;
|
|
END IF;
|
|
ELSE
|
|
-- Wel status meegegeven; die is dan vast
|
|
smode := poptstatus;
|
|
|
|
SELECT sn.fac_srtnotificatie_oms, sn.fac_srtnotificatie_key
|
|
INTO soms, skey
|
|
FROM fac_srtnotificatie sn
|
|
WHERE sn.fac_srtnotificatie_code = pcode;
|
|
END IF;
|
|
EXCEPTION
|
|
WHEN NO_DATA_FOUND
|
|
THEN
|
|
-- Nothing to do
|
|
RETURN;
|
|
END;
|
|
|
|
IF poptmessage IS NOT NULL
|
|
THEN
|
|
soms := poptmessage;
|
|
END IF;
|
|
|
|
soms := REPLACE (soms, '##KEY##', TO_CHAR (pref));
|
|
|
|
IF poptemail IS NULL
|
|
THEN
|
|
lemail := fac.getemail (pto);
|
|
ELSE
|
|
lemail := poptemail;
|
|
END IF;
|
|
|
|
IF poptmobile IS NULL
|
|
THEN
|
|
lphone := fac.getmobile (pto);
|
|
ELSE
|
|
lphone := poptmobile;
|
|
END IF;
|
|
|
|
lmode := smode;
|
|
|
|
IF BITAND (smode, 2) = 2 AND lemail IS NULL
|
|
THEN
|
|
lmode := BITAND (lmode, 255 - 2);
|
|
END IF;
|
|
|
|
IF BITAND (smode, 4) = 4 AND lphone IS NULL
|
|
THEN
|
|
lmode := BITAND (lmode, 255 - 4);
|
|
END IF;
|
|
|
|
IF lmode > 0
|
|
THEN
|
|
-- Stuur notificatie
|
|
INSERT INTO fac_notificatie
|
|
(fac_srtnotificatie_key, fac_notificatie_status, prs_perslid_key_sender,
|
|
prs_perslid_key_receiver, fac_notificatie_receiver_email, fac_notificatie_receiver_phone,
|
|
fac_notificatie_oms, fac_notificatie_refkey, fac_notificatie_extrakey,
|
|
fac_notificatie_prioriteit, fac_notificatie_sender_email
|
|
)
|
|
VALUES (skey, lmode, pfrom,
|
|
pto, lemail, lphone,
|
|
soms, pref, pxref,
|
|
pprio, psender
|
|
);
|
|
END IF;
|
|
END IF;
|
|
END;
|
|
|
|
-- Ruim zoveel mogelijk notificatiespul op voor dit item. Pcode mag een wildcard zijn!
|
|
PROCEDURE clrnotifications (pcode VARCHAR2, pref NUMBER)
|
|
AS
|
|
skey fac_srtnotificatie.fac_srtnotificatie_key%TYPE;
|
|
BEGIN
|
|
-- gequeuede berichten
|
|
DELETE FROM fac_notificatie
|
|
WHERE fac_srtnotificatie_key IN (SELECT sn.fac_srtnotificatie_key
|
|
FROM fac_srtnotificatie sn
|
|
WHERE sn.fac_srtnotificatie_code LIKE pcode)
|
|
AND fac_notificatie_refkey = pref;
|
|
|
|
-- portalberichten
|
|
DELETE FROM web_user_messages
|
|
WHERE fac_srtnotificatie_key IN (SELECT sn.fac_srtnotificatie_key
|
|
FROM fac_srtnotificatie sn
|
|
WHERE sn.fac_srtnotificatie_code LIKE pcode)
|
|
AND web_user_mess_action_params = pref;
|
|
|
|
END;
|
|
|
|
-- Kijk welke jobs gescheduled zijn en nu uitgevoerd moeten worden.
|
|
PROCEDURE putnotificationjobs (pcust VARCHAR2)
|
|
AS
|
|
CURSOR c1
|
|
IS
|
|
SELECT fac_notificatie_job_key, fac_notificatie_job_view, fac_notificatie_job_oms,
|
|
fac_notificatie_job_interval, fac_notificatie_job_mode, fac_notificatie_job_nextrun
|
|
FROM fac_notificatie_job
|
|
WHERE fac_notificatie_job_nextrun <= SYSDATE OR fac_notificatie_job_nextrun IS NULL; -- eerste keer
|
|
tnextrun fac_notificatie_job.fac_notificatie_job_nextrun%TYPE;
|
|
BEGIN
|
|
FOR rec1 IN c1
|
|
LOOP
|
|
-- Voer de job uit
|
|
putjobnotifications (rec1.fac_notificatie_job_view, rec1.fac_notificatie_job_mode);
|
|
-- Notificeer de uitvoering van de job aan de beheerder(s)? Regel dat zelf maar!
|
|
-- putsystemnotification ('Notificatiejob ' || rec1.fac_notificatie_job_oms || ' uitgevoerd.', 1);
|
|
-- Bepaal de volgende keer voor deze job, en garandeer dat dat altijd NA NU gaat gebeuren
|
|
-- dus zonder dat eventueel overgeslagen keren nog zullen worden ingehaald.
|
|
tnextrun := COALESCE (rec1.fac_notificatie_job_nextrun, SYSDATE);
|
|
|
|
WHILE tnextrun <= SYSDATE
|
|
LOOP
|
|
-- Interval in hrs, DATE arithmetics are in days, so we will have to divide by 24 hrs a day
|
|
UPDATE fac_notificatie_job
|
|
SET fac_notificatie_job_nextrun =
|
|
COALESCE (fac_notificatie_job_nextrun, SYSDATE)
|
|
+ rec1.fac_notificatie_job_interval / 24
|
|
WHERE fac_notificatie_job_key = rec1.fac_notificatie_job_key;
|
|
|
|
SELECT fac_notificatie_job_nextrun
|
|
INTO tnextrun
|
|
FROM fac_notificatie_job
|
|
WHERE fac_notificatie_job_key = rec1.fac_notificatie_job_key;
|
|
END LOOP;
|
|
END LOOP;
|
|
END;
|
|
|
|
-- Voer nu job pcode uit.
|
|
PROCEDURE putjobnotifications (pviewname VARCHAR2, pmode NUMBER)
|
|
AS
|
|
TYPE noticursortype IS REF CURSOR;
|
|
|
|
messages noticursortype;
|
|
lsender fac_notificatie.prs_perslid_key_sender%TYPE;
|
|
lreceiver fac_notificatie.prs_perslid_key_receiver%TYPE;
|
|
ltext fac_notificatie.fac_notificatie_oms%TYPE;
|
|
lcode fac_srtnotificatie.fac_srtnotificatie_code%TYPE;
|
|
lrefkey fac_notificatie.fac_notificatie_refkey%TYPE;
|
|
lxkey fac_notificatie.fac_notificatie_extrakey%TYPE;
|
|
BEGIN
|
|
OPEN messages FOR 'SELECT sender, receiver, text, code, key, xkey FROM ' || pviewname;
|
|
|
|
LOOP
|
|
FETCH messages
|
|
INTO lsender, lreceiver, ltext, lcode, lrefkey, lxkey;
|
|
|
|
EXIT WHEN messages%NOTFOUND;
|
|
|
|
IF lcode IS NULL
|
|
THEN
|
|
putnotification (lsender, lreceiver, ltext, pmode, NULL, NULL);
|
|
ELSE
|
|
putnotificationsrtprio (lsender, lreceiver, lcode, lrefkey, ltext, pmode, NULL, NULL, lxkey, 2, NULL);
|
|
END IF;
|
|
END LOOP;
|
|
|
|
CLOSE messages;
|
|
EXCEPTION
|
|
WHEN OTHERS
|
|
THEN
|
|
raise_application_error (-20000, 'Facilitor: invalid notification job/view ' || pviewname);
|
|
END;
|
|
|
|
PROCEDURE executeactiviteit (pxmlnode VARCHAR2, pactkey NUMBER)
|
|
AS
|
|
lkey NUMBER (10);
|
|
lkey_new NUMBER (10);
|
|
lvolgnr mld_opdr.mld_opdr_bedrijfopdr_volgnr%TYPE;
|
|
BEGIN
|
|
BEGIN
|
|
CASE pxmlnode
|
|
WHEN 'melding'
|
|
THEN
|
|
SELECT MAX (mld_melding_key)
|
|
INTO lkey
|
|
FROM mld_melding
|
|
WHERE fac_activiteit_key = pactkey;
|
|
|
|
SELECT mld_s_mld_melding_key.nextval
|
|
INTO lkey_new
|
|
FROM DUAL;
|
|
|
|
INSERT INTO mld_melding
|
|
(mld_melding_key, mld_melding_module, mld_ins_discipline_key, mld_meldbron_key, mld_alg_locatie_key,
|
|
mld_alg_onroerendgoed_keys, mld_melding_datum, mld_melding_omschrijving,
|
|
mld_melding_opmerking, mld_melding_user_key, mld_stdmelding_key, mld_melding_uitvoertijd,
|
|
mld_melding_uitvoertijd2, mld_kosten_klant, mld_melding_document, prs_kostenplaats_key,
|
|
prs_perslid_key, mld_melding_melder_telefoon, mld_melding_melder_plaats, mld_adres_key,
|
|
mld_workflowstep_key, mld_melding_start_key, mld_melding_ordernr, mld_melding_spoed)
|
|
SELECT lkey_new, mld_melding_module, mld_ins_discipline_key, mld_meldbron_key, mld_alg_locatie_key,
|
|
mld_alg_onroerendgoed_keys, SYSDATE, mld_melding_omschrijving,
|
|
'Automatisch gegenereerd door activiteit ' || pactkey || '. ' || mld_melding_opmerking,
|
|
mld_melding_user_key, mld_stdmelding_key, mld_melding_uitvoertijd, mld_melding_uitvoertijd2,
|
|
mld_kosten_klant, mld_melding_document, prs_kostenplaats_key, prs_perslid_key,
|
|
mld_melding_melder_telefoon, mld_melding_melder_plaats, mld_adres_key, NULL, NULL,
|
|
mld_melding_ordernr, mld_melding_spoed
|
|
FROM mld_melding
|
|
WHERE mld_melding_key = lkey;
|
|
|
|
INSERT INTO mld_kenmerkmelding
|
|
(mld_melding_key, mld_kenmerk_key, mld_kenmerkmelding_waarde)
|
|
SELECT lkey_new, mld_kenmerk_key, mld_kenmerkmelding_waarde
|
|
FROM mld_kenmerkmelding
|
|
WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_melding_key = lkey;
|
|
WHEN 'opdracht'
|
|
THEN
|
|
SELECT MAX (mld_opdr_key)
|
|
INTO lkey
|
|
FROM mld_opdr
|
|
WHERE fac_activiteit_key = pactkey;
|
|
|
|
SELECT mld.bepaalopdrmeldingvolgnr (lkey)
|
|
INTO lvolgnr
|
|
FROM DUAL;
|
|
|
|
SELECT mld_s_mld_opdr_key.nextval
|
|
INTO lkey_new
|
|
FROM DUAL;
|
|
|
|
INSERT INTO mld_opdr
|
|
(mld_opdr_key, mld_opdr_module, mld_melding_key, mld_uitvoerende_keys, mld_typeopdr_key,
|
|
mld_statusopdr_key, mld_standaardopdr_key, mld_opdr_omschrijving, mld_opdr_datumbegin,
|
|
mld_opdr_dagen, mld_opdr_werkzaamheden, mld_opdr_uren, mld_opdr_materiaal, mld_opdr_kosten,
|
|
mld_opdr_contactpersoon, mld_opdr_bedrijfopdr_volgnr, mld_opdr_uurloon, prs_perslid_key,
|
|
prs_contactpersoon_key, cnt_contract_key, cnt_contract_dienst_key, prs_kostenplaats_key,
|
|
mld_opdr_ordernr, mld_opdr_teverzenden)
|
|
SELECT lkey_new, mld_opdr_module, mld_melding_key, mld_uitvoerende_keys, mld_typeopdr_key, mld_statusopdr_key,
|
|
mld_standaardopdr_key, mld_opdr_omschrijving, SYSDATE, mld_opdr_dagen,
|
|
'Automatisch gegenereerd door activiteit ' || pactkey || '. ' || mld_opdr_werkzaamheden,
|
|
mld_opdr_uren, mld_opdr_materiaal, mld_opdr_kosten, mld_opdr_contactpersoon, lvolgnr,
|
|
mld_opdr_uurloon, prs_perslid_key, prs_contactpersoon_key, cnt_contract_key,
|
|
cnt_contract_dienst_key, prs_kostenplaats_key, mld_opdr_ordernr, mld_opdr_teverzenden
|
|
FROM mld_opdr
|
|
WHERE mld_opdr_key = lkey;
|
|
|
|
INSERT INTO mld_kenmerkopdr
|
|
(mld_opdr_key, mld_kenmerk_key, mld_kenmerkopdr_waarde)
|
|
SELECT lkey_new, mld_kenmerk_key, mld_kenmerkopdr_waarde
|
|
FROM mld_kenmerkopdr
|
|
WHERE mld_kenmerkopdr_verwijder IS NULL AND mld_opdr_key = lkey;
|
|
WHEN 'bestelling'
|
|
THEN
|
|
SELECT MAX (bes_bestelling_key)
|
|
INTO lkey
|
|
FROM bes_bestelling
|
|
WHERE fac_activiteit_key = pactkey;
|
|
|
|
SELECT bes_s_bes_bestelling_key.nextval
|
|
INTO lkey_new
|
|
FROM DUAL;
|
|
|
|
INSERT INTO bes_bestelling
|
|
(bes_bestelling_key, bes_bestelling_module, bes_bestelling_status, bes_bestelling_datum, prs_perslid_key,
|
|
bes_bestelling_owner_key, bes_bestelling_opmerking, bes_bestelling_documentnaam,
|
|
bes_bestelling_ordernr, bes_bestelling_telefoon, bes_bestelling_plaats, mld_adres_key_lev,
|
|
bes_bestelling_item_cnt, prs_kostenplaats_key, bes_bestelling_leverdatum,
|
|
bes_bestelling_kosten_klant)
|
|
SELECT lkey_new, bes_bestelling_module, bes_bestelling_status, SYSDATE, prs_perslid_key,
|
|
bes_bestelling_owner_key,
|
|
'Automatisch gegenereerd door activiteit ' || pactkey || '. ' || bes_bestelling_opmerking,
|
|
bes_bestelling_documentnaam, bes_bestelling_ordernr, bes_bestelling_telefoon,
|
|
bes_bestelling_plaats, mld_adres_key_lev, bes_bestelling_item_cnt, prs_kostenplaats_key,
|
|
TRUNC(SYSDATE + (bes_bestelling_leverdatum - bes_bestelling_datum)), bes_bestelling_kosten_klant
|
|
FROM bes_bestelling
|
|
WHERE bes_bestelling_key = lkey;
|
|
|
|
INSERT INTO bes_kenmerkbestell
|
|
(bes_bestelling_key, bes_kenmerk_key, bes_kenmerkbestell_waarde)
|
|
SELECT lkey_new, bes_kenmerk_key, bes_kenmerkbestell_waarde
|
|
FROM bes_kenmerkbestell
|
|
WHERE bes_kenmerkbestell_verwijder IS NULL AND bes_bestelling_key = lkey;
|
|
END CASE;
|
|
EXCEPTION
|
|
WHEN OTHERS
|
|
THEN
|
|
putsystemnotification ( 'Facilitor scheduler: opdracht voor activiteit '
|
|
|| pactkey
|
|
|| ' kan niet worden aangemaakt: '
|
|
|| SQLERRM,
|
|
3
|
|
);
|
|
END;
|
|
END;
|
|
|
|
PROCEDURE executeschedules
|
|
AS
|
|
newaantal NUMBER;
|
|
|
|
-- Interval in hrs, DATE arithmetics are in days, so we will have to divide interval by 24 hrs a day
|
|
CURSOR c1
|
|
IS
|
|
SELECT fac_activiteit_key, fac_activiteit_xmlnode, fac_activiteit_status_key, fac_activiteit_interval,
|
|
fac_activiteit_aantal
|
|
FROM fac_activiteit
|
|
WHERE ((fac_activiteit_volgende <= SYSDATE AND fac_activiteit_einddatum IS NULL)
|
|
OR (fac_activiteit_volgende <= SYSDATE AND SYSDATE < fac_activiteit_einddatum)
|
|
OR (fac_activiteit_volgende IS NULL AND SYSDATE BETWEEN fac_activiteit_eerste AND fac_activiteit_einddatum)
|
|
OR (fac_activiteit_volgende IS NULL AND fac_activiteit_einddatum IS NULL AND SYSDATE > fac_activiteit_eerste)
|
|
)
|
|
AND fac_activiteit_status_key IN (2, 3)
|
|
AND fac_activiteit_xmlnode IS NOT NULL
|
|
AND NVL (fac_activiteit_aantal, 1) > 0
|
|
AND fac_activiteit_verwijder IS NULL;
|
|
BEGIN
|
|
FOR rec1 IN c1
|
|
LOOP
|
|
-- Voer de job uit
|
|
IF rec1.fac_activiteit_aantal IS NOT NULL
|
|
THEN
|
|
newaantal := rec1.fac_activiteit_aantal - 1;
|
|
END IF;
|
|
|
|
IF rec1.fac_activiteit_status_key = 2
|
|
THEN
|
|
executeactiviteit (rec1.fac_activiteit_xmlnode, rec1.fac_activiteit_key);
|
|
|
|
-- Remove time-part from volgende (ie. set to 0:00)!
|
|
UPDATE fac_activiteit
|
|
SET fac_activiteit_volgende = TRUNC(COALESCE (fac_activiteit_volgende, fac_activiteit_eerste) + fac_activiteit_interval / 24),
|
|
fac_activiteit_laatste = SYSDATE,
|
|
fac_activiteit_aantal = newaantal
|
|
WHERE fac_activiteit_key = rec1.fac_activiteit_key;
|
|
ELSE
|
|
-- 1 keer overslaan, de volgende keer weer wel dus. Ook hier: remove time-part from volgende (ie. set to 0:00)!
|
|
UPDATE fac_activiteit
|
|
SET fac_activiteit_volgende = TRUNC(COALESCE (fac_activiteit_volgende, fac_activiteit_eerste) + fac_activiteit_interval / 24),
|
|
fac_activiteit_status_key = 2,
|
|
fac_activiteit_aantal = newaantal
|
|
WHERE fac_activiteit_key = rec1.fac_activiteit_key;
|
|
END IF;
|
|
END LOOP;
|
|
END;
|
|
|
|
-- MarkOrderAsSent
|
|
-- Markeert dat een opdracht verzonden is, zoals door PutOrders.exe
|
|
-- Hoe dat moet is afhankelijk van het soort opdracht: bestelopdracht, meldingsopdracht e.d.
|
|
-- pxmlnode is (lowercase!) de xml-naam van de entiteit (opdracht, bestelopdr)
|
|
-- pkey is de key daarvan
|
|
-- presult geeft het succes van de verzending aan: 0=succesvol, 1=geweigerd
|
|
-- wat gebruikt *kan* worden bij het bepalen van de status die gezet moet worden.
|
|
-- Voor customer-orderqueues dient overeenkomstige CUST.markorderassent() te worden gedefinieerd.
|
|
PROCEDURE markorderassent(pxmlnode VARCHAR2, pkey NUMBER, presult NUMBER)
|
|
AS
|
|
BEGIN
|
|
CASE pxmlnode
|
|
WHEN 'opdracht'
|
|
THEN
|
|
IF presult = 0
|
|
THEN
|
|
UPDATE mld_opdr
|
|
SET mld_opdr_verzonden = SYSDATE
|
|
WHERE mld_opdr_key = pkey;
|
|
END IF;
|
|
WHEN 'bestelopdr'
|
|
THEN
|
|
IF presult = 0
|
|
THEN
|
|
UPDATE bes_bestelopdr
|
|
SET bes_bestelopdr_status = 4
|
|
WHERE bes_bestelopdr_key = pkey;
|
|
ELSIF presult = 1
|
|
THEN
|
|
UPDATE bes_bestelopdr
|
|
SET bes_bestelopdr_status = 1
|
|
WHERE bes_bestelopdr_key = pkey;
|
|
END IF;
|
|
END CASE;
|
|
END;
|
|
|
|
-- Returnt de geldende waarde voor setting pname, bepaald uit de settingstabel
|
|
-- en wetende welke omgeving we draaien (OTAP), default indien omgeving onbekend
|
|
FUNCTION getSetting (pname IN VARCHAR2 ) RETURN VARCHAR2
|
|
AS
|
|
lenv fac_version.fac_version_otap%TYPE;
|
|
lres fac_setting.fac_setting_default%TYPE;
|
|
BEGIN
|
|
SELECT fac_version_otap
|
|
INTO lenv
|
|
FROM fac_version;
|
|
|
|
CASE lenv
|
|
WHEN 'P'
|
|
THEN
|
|
SELECT COALESCE(fac_setting_pvalue, fac_setting_default)
|
|
INTO lres
|
|
FROM fac_setting
|
|
WHERE fac_setting_name = pname;
|
|
WHEN 'A'
|
|
THEN
|
|
SELECT COALESCE(fac_setting_avalue, fac_setting_default)
|
|
INTO lres
|
|
FROM fac_setting
|
|
WHERE fac_setting_name = pname;
|
|
WHEN 'T'
|
|
THEN
|
|
SELECT COALESCE(fac_setting_tvalue, fac_setting_default)
|
|
INTO lres
|
|
FROM fac_setting
|
|
WHERE fac_setting_name = pname;
|
|
WHEN 'O'
|
|
THEN
|
|
SELECT COALESCE(fac_setting_ovalue, fac_setting_default)
|
|
INTO lres
|
|
FROM fac_setting
|
|
WHERE fac_setting_name = pname;
|
|
ELSE
|
|
SELECT fac_setting_default
|
|
INTO lres
|
|
FROM fac_setting
|
|
WHERE fac_setting_name = pname;
|
|
END CASE;
|
|
|
|
RETURN lres;
|
|
|
|
END;
|
|
|
|
-- add a trackrecord for action pcode, entity prefkey. pdatum may be NULL
|
|
PROCEDURE trackaction (pcode VARCHAR2, prefkey NUMBER, puserkey NUMBER, pdatum DATE, poms VARCHAR2)
|
|
AS
|
|
tkey fac_srttracking.fac_srttracking_key%TYPE;
|
|
BEGIN
|
|
IF pcode IS NULL
|
|
THEN
|
|
RETURN;
|
|
END IF;
|
|
|
|
IF prefkey IS NULL
|
|
THEN
|
|
RETURN;
|
|
END IF;
|
|
|
|
SELECT fac_srttracking_key
|
|
INTO tkey
|
|
FROM fac_srttracking
|
|
WHERE fac_srttracking_code = pcode;
|
|
|
|
IF pdatum IS NULL
|
|
THEN
|
|
INSERT INTO fac_tracking (fac_tracking_refkey, prs_perslid_key, fac_srttracking_key, fac_tracking_oms
|
|
)
|
|
VALUES (prefkey, puserkey, tkey, poms
|
|
);
|
|
ELSE
|
|
INSERT INTO fac_tracking (fac_tracking_refkey, prs_perslid_key, fac_srttracking_key, fac_tracking_datum, fac_tracking_oms
|
|
)
|
|
VALUES (prefkey, puserkey, tkey, pdatum, poms
|
|
);
|
|
END IF;
|
|
EXCEPTION
|
|
WHEN NO_DATA_FOUND
|
|
THEN
|
|
NULL;
|
|
END;
|
|
|
|
PROCEDURE registerversion (pmaj IN NUMBER, pmin IN NUMBER, ppatch IN VARCHAR2, prevision IN VARCHAR2, plang IN VARCHAR2)
|
|
AS
|
|
verstring fac_module.fac_module_version%TYPE;
|
|
BEGIN
|
|
IF pmaj IS NOT NULL AND pmin IS NOT NULL AND ppatch IS NOT NULL
|
|
THEN
|
|
verstring := TO_CHAR (pmaj) || '.' || TO_CHAR (pmin) || '.' || TO_CHAR (ppatch);
|
|
|
|
UPDATE fac_module
|
|
SET fac_module_version = verstring;
|
|
|
|
UPDATE fac_version
|
|
SET fac_version_major = pmaj,
|
|
fac_version_minor = pmin,
|
|
fac_version_patch = ppatch,
|
|
fac_version_revision = prevision,
|
|
fac_version_date = SYSDATE;
|
|
|
|
UPDATE fac_message
|
|
SET fac_message_text = 'Facilitor ' || verstring || '$' || SUBSTR (prevision, 12, 2)
|
|
WHERE fac_message_code = 'FAC_M002';
|
|
END IF;
|
|
|
|
IF plang IS NOT NULL
|
|
THEN
|
|
UPDATE fac_version
|
|
SET fac_version_lang = plang;
|
|
END IF;
|
|
END;
|
|
|
|
PROCEDURE registercustversion (pcustid IN VARCHAR2, pcustnr IN NUMBER)
|
|
AS
|
|
BEGIN
|
|
IF pcustid IS NOT NULL AND pcustnr IS NOT NULL
|
|
THEN
|
|
UPDATE fac_version
|
|
SET fac_version_cust = pcustid,
|
|
fac_version_custnr = pcustnr,
|
|
fac_version_date = SYSDATE;
|
|
END IF;
|
|
END;
|
|
|
|
END fac;
|
|
/
|
|
|
|
#endif // FAC
|