Files
Database/_UP/115TO116.SRC
1998-09-23 08:56:36 +00:00

867 lines
36 KiB
Plaintext

SPOOL 115to116
/*
* [V:\SQL\_UPDATE]
*
* Update script van versie 01.15 naar 01.16
*
* Dit script wordt geprecompileerd dus is het mogelijk (verplicht)
* om #ifdef's te gebruiken voor de diverse modules.
*
* History:
*
* 05-06-96 KTH SPOOL-filenaam gecorrigeerd (was nog 114to115)
* 05-06-96 AH PRS-entities toegevoegd
* 04-06-96 EH View prs_v_werkplek_gegevens intern aangepast (Performance)
* 03-06-96 EH 2 entities voor PRS toegevoegd.
* 03-06-96 AH INV_SRTDEEL-entity is Artikelsoort geworden.
* 31-05-96 AH LEV-message tegevoegd.
* 31-05-96 AH INS_T_INS_DEEL_B_IU aangepast voor INV/LEV. INS_Alg_ruimte_key
* kan ook 'L' (locaties) bevatten.
* 31-05-96 AH Voor LEV is de UNIQUE op INS_DEEL veranderd.
* 31-05-96 AH INV-entities en messages toegevoegd
* 31-05-96 AH Views INV_V_DEEL_GEGEVENS, INV_V_DEEL_PLAATS_GEGEVENS
* en INV_V_DEEL_BEZIT_GEGEVENS aangepast
* 31-05-96 AH Vakgroep, Artikelgroep en Artikelsoort aangepast in
* entities en messages
* 29-05-96 EH Aan de view prs_v_werkplekperslidgegevens persleden weer hun
* afdeling teruggegeven.
* 29-05-96 EH Lege file aangemaakt
*/
#include "comsql.h"
#ifdef PRS
CREATE OR REPLACE VIEW prs_v_werkplek_gegevens AS
SELECT PRS_W.prs_werkplek_key,
PRS_W.prs_werkplek_volgnr,
PRS_W.prs_werkplek_omschrijving,
PRS_W.prs_werkplek_opp,
ALG_R.alg_ruimte_key,
ALG_R.alg_ruimte_nr,
ALG_R.alg_ruimte_upper_nr,
ALG_R.alg_ruimte_bruto_vloeropp,
ALG_V.alg_verdieping_key,
ALG_V.alg_verdieping_volgnr,
ALG_V.alg_verdieping_omschrijving,
ALG_G.alg_gebouw_key,
ALG_G.alg_gebouw_omschrijving,
ALG_G.alg_gebouw_upper,
ALG_G.alg_locatie_key
FROM prs_v_aanwezigwerkplek PRS_W, alg_ruimte ALG_R,
alg_verdieping ALG_V, alg_gebouw ALG_G
WHERE ALG_R.alg_verdieping_key = ALG_V.alg_verdieping_key
AND ALG_V.alg_gebouw_key = ALG_G.alg_gebouw_key
AND PRS_W.prs_alg_ruimte_key = ALG_R.alg_ruimte_key;
CREATE_VIEW(prs_v_werkplekperslid_gegevens,NORMAAL_PRIVILEGE)
( prs_perslidwerkplek_key,
prs_perslid_key,
prs_afdeling_key,
prs_naam,
prs_werkplek_key,
prs_werkplek_volgnr,
prs_werkplek_opp,
alg_locatie_key,
alg_gebouw_omschrijving,
alg_gebouw_upper,
alg_verdieping_volgnr,
alg_verdieping_omschrijving,
alg_ruimte_nr,
alg_ruimte_upper_nr ) AS
SELECT PRS_PW.prs_perslidwerkplek_key,
PRS_PW.prs_perslid_key,
PRS_P.prs_afdeling_key,
PRS_P.prs_perslid_naam||' '||prs_perslid_voorletters,
PRS_PW.prs_werkplek_key,
PRS_W.prs_werkplek_volgnr,
PRS_W.prs_werkplek_opp,
PRS_W.alg_locatie_key,
PRS_W.alg_gebouw_omschrijving,
PRS_W.alg_gebouw_upper,
PRS_W.alg_verdieping_volgnr,
PRS_W.alg_verdieping_omschrijving,
PRS_W.alg_ruimte_nr,
PRS_W.alg_ruimte_upper_nr
FROM prs_v_aanwezigperslidwerkplek PRS_PW, prs_perslid PRS_P,
prs_v_werkplek_gegevens PRS_W
WHERE PRS_PW.prs_perslid_key = PRS_P.prs_perslid_key
AND PRS_PW.prs_werkplek_key = PRS_W.prs_werkplek_key
UNION
SELECT PRS_PW.prs_perslidwerkplek_key,
to_number(NULL),
PRS_PW.prs_afdeling_key,
'['||PRS_A.prs_afdeling_naam||']',
PRS_PW.prs_werkplek_key,
PRS_W.prs_werkplek_volgnr,
PRS_W.prs_werkplek_opp,
PRS_W.alg_locatie_key,
PRS_W.alg_gebouw_omschrijving,
PRS_W.alg_gebouw_upper,
PRS_W.alg_verdieping_volgnr,
PRS_W.alg_verdieping_omschrijving,
PRS_W.alg_ruimte_nr,
PRS_W.alg_ruimte_upper_nr
FROM prs_v_aanwezigperslidwerkplek PRS_PW, prs_afdeling PRS_A,
prs_v_werkplek_gegevens PRS_W
WHERE PRS_PW.prs_afdeling_key = PRS_A.prs_afdeling_key
AND PRS_PW.prs_werkplek_key = PRS_W.prs_werkplek_key;
#endif //PRS
DEF_FAC_ENTITY ('PRS_RAFRAP_PERC', 'Perc.', NULL, NULL);
DEF_FAC_ENTITY ('PRS_RAFRAP_OPP', 'Opp. (m2)', NULL, NULL);
DEF_FAC_ENTITY ('PRS_OGWRAP_BUTTON', 'Overzicht', NULL, NULL);
DEF_FAC_ENTITY ('INV_SRTDEEL', 'Artikel', 'Artikelen', 'het');
DEF_FAC_MESSAGE ('inv_m001', 'Verwijderen vakgroep ');
DEF_FAC_MESSAGE ('inv_m002', 'De omschrijving van de vakgroep is niet ingevuld.');
DEF_FAC_MESSAGE ('inv_m004', 'De vakgroep is niet ingevuld.');
DEF_FAC_MESSAGE ('inv_m007', 'De omschrijving voor het artikelsoort is niet ingevuld.');
DEF_FAC_MESSAGE ('inv_m008', 'Verwijderen artikelsoort ');
DEF_FAC_MESSAGE ('inv_m012', 'Het artikelsoort is niet ingevuld.');
#ifdef INV
CREATE_VIEW(inv_v_deel_gegevens,NORMAAL_PRIVILEGE) AS
SELECT INV_D.ins_discipline_key, INV_D.ins_discipline_omschrijving,
INV_SG.ins_srtgroep_key, INV_SG.ins_srtgroep_omschrijving,
INV_SG.ins_srtgroep_upper, INV_SD.ins_srtdeel_key,
INV_SD.ins_srtdeel_omschrijving, INV_SD.ins_srtdeel_upper,
INV_SD.inv_srtdeel_nr,
INV_DEEL.ins_deel_key, INV_DEEL.ins_deel_aantal,
INV_DEEL.ins_deel_omschrijving, INV_DEEL.ins_deel_upper,
INV_DEEL.ins_deel_serienr, INV_DEEL.ins_alg_ruimte_key,
INV_DEEL.ins_alg_ruimte_type, INV_DEEL.ins_prs_bezit_key,
INV_DEEL.ins_prs_bezit_type
#ifdef LEV
, INV_DEEL.lev_afvoerlijst_datum
#endif
FROM inv_v_aanwezigdiscipline INV_D, inv_v_aanwezigsrtgroep INV_SG,
inv_v_aanwezigsrtdeel INV_SD, inv_v_aanwezigdeel INV_DEEL
WHERE INV_SG.ins_srtgroep_key = INV_SD.ins_srtgroep_key
AND INV_D.ins_discipline_key = INV_SG.ins_discipline_key
AND INV_DEEL.ins_srtdeel_key = INV_SD.ins_srtdeel_key;
CREATE_VIEW(inv_v_deel_plaats_gegevens,NORMAAL_PRIVILEGE)
(ins_deel_key, ins_deel_omschrijving,
ins_deel_upper, ins_deel_aantal,
ins_alg_ruimte_key,
ins_alg_ruimte_type, ins_srtdeel_key,
#ifdef INV
inv_srtdeel_nr,
#endif
ins_srtdeel_omschrijving, ins_srtdeel_upper,
alg_locatie_key, alg_gebouw_key,
alg_gebouw_omschrijving, alg_gebouw_upper,
alg_verdieping_key, alg_verdieping_omschrijving,
alg_verdieping_volgnr, alg_ruimte_key,
alg_ruimte_nr, alg_ruimte_omschrijving,
alg_ruimte_upper_nr,
prs_werkplek_key, prs_werkplek_volgnr) AS
SELECT INV_D.ins_deel_key,
INV_D.ins_deel_omschrijving,
INV_D.ins_deel_upper,
INV_D.ins_deel_aantal,
INV_D.ins_alg_ruimte_key,
INV_D.ins_alg_ruimte_type,
INV_SD.ins_srtdeel_key,
#ifdef INV
INV_SD.inv_srtdeel_nr,
#endif
INV_SD.ins_srtdeel_omschrijving,
INV_SD.ins_srtdeel_upper,
ALG_G.alg_locatie_key,
ALG_G.alg_gebouw_key,
ALG_G.alg_gebouw_omschrijving,
ALG_G.alg_gebouw_upper,
ALG_V.alg_verdieping_key,
ALG_V.alg_verdieping_omschrijving,
ALG_V.alg_verdieping_volgnr,
ALG_R.alg_ruimte_key,
ALG_R.alg_ruimte_nr,
ALG_R.alg_ruimte_omschrijving,
ALG_R.alg_ruimte_upper_nr,
TO_NUMBER(NULL),
TO_NUMBER(NULL)
FROM inv_v_aanwezigdeel INV_D, ins_srtdeel INV_SD,
alg_gebouw ALG_G, alg_verdieping ALG_V,
alg_ruimte ALG_R
WHERE ALG_G.alg_gebouw_key = ALG_V.alg_gebouw_key
AND ALG_V.alg_verdieping_key = ALG_R.alg_verdieping_key
AND INV_SD.ins_srtdeel_key = INV_D.ins_srtdeel_key
AND ALG_R.alg_ruimte_key = INV_D.ins_alg_ruimte_key
AND INV_D.ins_alg_ruimte_type = 'R'
UNION
SELECT INV_D.ins_deel_key,
INV_D.ins_deel_omschrijving,
INV_D.ins_deel_upper,
INV_D.ins_deel_aantal,
INV_D.ins_alg_ruimte_key,
INV_D.ins_alg_ruimte_type,
INV_SD.ins_srtdeel_key,
#ifdef INV
INV_SD.inv_srtdeel_nr,
#endif
INV_SD.ins_srtdeel_omschrijving,
INV_SD.ins_srtdeel_upper,
ALG_G.alg_locatie_key,
ALG_G.alg_gebouw_key,
ALG_G.alg_gebouw_omschrijving,
ALG_G.alg_gebouw_upper,
ALG_V.alg_verdieping_key,
ALG_V.alg_verdieping_omschrijving,
ALG_V.alg_verdieping_volgnr,
ALG_R.alg_ruimte_key,
ALG_R.alg_ruimte_nr,
ALG_R.alg_ruimte_omschrijving,
ALG_R.alg_ruimte_upper_nr,
PRS_W.prs_werkplek_key,
PRS_W.prs_werkplek_volgnr
FROM inv_v_aanwezigdeel INV_D, ins_srtdeel INV_SD,
alg_gebouw ALG_G, alg_verdieping ALG_V,
alg_ruimte ALG_R, prs_werkplek PRS_W
WHERE ALG_G.alg_gebouw_key = ALG_V.alg_gebouw_key
AND ALG_V.alg_verdieping_key = ALG_R.alg_verdieping_key
AND ALG_R.alg_ruimte_key = PRS_W.prs_alg_ruimte_key
AND INV_SD.ins_srtdeel_key = INV_D.ins_srtdeel_key
AND PRS_W.prs_werkplek_key = INV_D.ins_alg_ruimte_key
AND INV_D.ins_alg_ruimte_type = 'W';
CREATE_VIEW(inv_v_deel_bezit_gegevens,NORMAAL_PRIVILEGE)
(ins_discipline_key, ins_srtgroep_key,
ins_srtdeel_key, ins_srtdeel_omschrijving,
ins_srtdeel_upper,
#ifdef INV
inv_srtdeel_nr,
#endif
ins_deel_key,
ins_deel_omschrijving, ins_deel_upper,
ins_deel_aantal,
ins_alg_ruimte_key, ins_alg_ruimte_type,
ins_prs_bezit_key, ins_prs_bezit_type,
prs_afdeling_key, prs_afdeling_naam,
prs_afdeling_omschrijving,
prs_afdeling_upper, prs_perslid_key,
prs_perslid_naam, prs_perslid_upper) AS
SELECT INV_D.ins_discipline_key,
INV_D.ins_srtgroep_key,
INV_D.ins_srtdeel_key,
INV_D.ins_srtdeel_omschrijving,
INV_D.ins_srtdeel_upper,
#ifdef INV
INV_D.inv_srtdeel_nr,
#endif
INV_D.ins_deel_key,
INV_D.ins_deel_omschrijving,
INV_D.ins_deel_upper,
INV_D.ins_deel_aantal,
INV_D.ins_alg_ruimte_key,
INV_D.ins_alg_ruimte_type,
INV_D.ins_prs_bezit_key,
INV_D.ins_prs_bezit_type,
PRS_A.prs_afdeling_key,
PRS_A.prs_afdeling_naam,
PRS_A.prs_afdeling_omschrijving,
PRS_A.prs_afdeling_upper,
TO_NUMBER(NULL),
NULL,
NULL
FROM inv_v_deel_gegevens INV_D, prs_v_aanwezigafdeling PRS_A
WHERE INV_D.ins_prs_bezit_type = 'A'
AND INV_D.ins_prs_bezit_key = PRS_A.prs_afdeling_key
UNION
SELECT INV_D.ins_discipline_key,
INV_D.ins_srtgroep_key,
INV_D.ins_srtdeel_key,
INV_D.ins_srtdeel_omschrijving,
INV_D.ins_srtdeel_upper,
#ifdef INV
INV_D.inv_srtdeel_nr,
#endif
INV_D.ins_deel_key,
INV_D.ins_deel_omschrijving,
INV_D.ins_deel_upper,
INV_D.ins_deel_aantal,
INV_D.ins_alg_ruimte_key,
INV_D.ins_alg_ruimte_type,
INV_D.ins_prs_bezit_key,
INV_D.ins_prs_bezit_type,
PRS_A.prs_afdeling_key,
PRS_A.prs_afdeling_naam,
PRS_A.prs_afdeling_omschrijving,
PRS_A.prs_afdeling_upper,
PRS_P.prs_perslid_key,
PRS_P.prs_perslid_naam||' '||PRS_P.prs_perslid_voorletters,
PRS_P.prs_perslid_upper||' '||UPPER(PRS_P.prs_perslid_voorletters)
FROM inv_v_deel_gegevens INV_D, prs_v_aanwezigafdeling PRS_A,
prs_v_aanwezigperslid PRS_P
WHERE INV_D.ins_prs_bezit_type = 'P'
AND INV_D.ins_prs_bezit_key = PRS_P.prs_perslid_key
AND PRS_P.prs_afdeling_key = PRS_A.prs_afdeling_key;
CREATE TRIGGER ins_t_ins_deel_B_IU
BEFORE INSERT OR UPDATE ON ins_deel
FOR EACH ROW
BEGIN
LOG('Begin INS_T_INS_DEEL_B_IU');
UPDATE_PRIMARY_KEY(ins_deel_key,ins_s_ins_inst_keys);
UPDATE_UPPER(ins_deel_omschrijving,ins_deel_upper);
SET_VERWIJDER_CHILDREN(ins_onderdeel, ins_deel_key, ins_deel_verwijder,
ins_onderdeel_verwijder);
/* Bij INS_DEEL in INS-mode moet INS_ALG_RUIMTE_KEY ingevuld zijn
* en wel met ruimte of terreinsector, daarvoor moet ook het
* INS_ALG_RUIMTE_TYPE veld goed ingevuld zijn (met 'R' of 'T').
* Dit geldt als INS_ALG_RUIMTE_KEY veranderd is of als er een
* nieuw record geinsert wordt.
*
* IN INV-mode hoeft INS_ALG_RUIMTE_KEY niet ingevuld te zijn, maar
* als deze ingevuld is moet INS_ALG_RUIMTE_KEY met ruimte of werkplek
* gevuld zijn, daarvoor moet het veld INS_ALG_RUITMTE_KEY goed
* ingevuld zijn (met 'R' of 'W').
*
* IN INV-mode kan het veld INS_PRS_BEZIT_KEY ook ingevuld zijn, maar
* INS_ALG_RUIMTE_KEY en INS_PRS_BEZIT_KEY kunnen niet beide ingevuld worden.
* INS_PRS_BEZIT_KEY kan de waarde perslid of afdeling bevatten en het
* veld INS_PRS_BEZIT_TYPE moet dan goed ingevuld zijn (met 'P' of 'A').
*/
IF :new.ins_deel_module = 'INS'
AND (:old.ins_alg_ruimte_key <> :new.ins_alg_ruimte_key
OR :old.ins_alg_ruimte_key IS NULL)
THEN
IF :new.ins_alg_ruimte_type = 'R'
THEN
CHECK_KEY_REFERENCE(alg_v_aanwezigruimte, alg_ruimte_key,
:new.ins_alg_ruimte_key, 'ins_m83');
ELSIF :new.ins_alg_ruimte_type = 'T'
THEN
CHECK_KEY_REFERENCE(alg_v_aanwezigterreinsector, alg_terreinsector_key,
:new.ins_alg_ruimte_key, 'ins_m83');
ELSE
APPLICATION_ERROR(-20000, 'ins_m84');
END IF;
#ifdef INV
ELSIF :new.ins_deel_module = 'INV'
AND (:new.ins_alg_ruimte_key IS NOT NULL
OR :new.ins_prs_bezit_key IS NOT NULL )
THEN
IF :new.ins_alg_ruimte_key IS NOT NULL
AND :new.ins_prs_bezit_key IS NOT NULL
THEN
APPLICATION_ERROR(-20000, 'ins_m85');
ELSIF :new.ins_alg_ruimte_key IS NOT NULL
THEN
IF :new.ins_alg_ruimte_type = 'R'
THEN
CHECK_KEY_REFERENCE(alg_v_aanwezigruimte, alg_ruimte_key,
:new.ins_alg_ruimte_key, 'ins_m88');
ELSIF :new.ins_alg_ruimte_type = 'W'
THEN
CHECK_KEY_REFERENCE(prs_v_aanwezigwerkplek, prs_werkplek_key,
:new.ins_alg_ruimte_key, 'ins_m88');
ELSIF :new.ins_alg_ruimte_type = 'L'
THEN
CHECK_KEY_REFERENCE(alg_v_aanweziglocatie, alg_locatie_key,
:new.ins_alg_ruimte_key, 'ins_m88');
ELSE
APPLICATION_ERROR(-20000, 'ins_m84');
END IF;
ELSIF :new.ins_prs_bezit_key IS NOT NULL
THEN
IF :new.ins_prs_bezit_type = 'P'
THEN
CHECK_KEY_REFERENCE(prs_v_aanwezigperslid, prs_perslid_key,
:new.ins_prs_bezit_key, 'ins_m86');
ELSIF :new.ins_prs_bezit_type = 'A'
THEN
CHECK_KEY_REFERENCE(prs_v_aanwezigafdeling, prs_afdeling_key,
:new.ins_prs_bezit_key, 'ins_m86');
ELSE
APPLICATION_ERROR(-20000, 'ins_m86');
END IF;
ELSE
APPLICATION_ERROR(-20000, 'ins_m87');
END IF;
#endif
END IF;
#ifdef INV
/* Als een INS_DEEL in INV-mode (red. een artikel) verwijderd, gekoppeld,
* ontkoppeld of verplaatst wordt van een ruimte of een werkplek,
* dan is de bijbehorende verdieping-tekening niet meer up to date en
* moet dus het INV_DWGUPTODATE-veld gezet worden.
*
* Als in INV-mode het INS_DEEL van INS_SRTDEEL veranderd,
* moet in het geval dit INS_SRTDEEL een ander ACADSYMBOL heeft
* het INV_DWGUPTODATE-veld van de verdiepingtekening ook gezet worden.
*/
IF :new.ins_deel_module = 'INV'
THEN
/* Verwijderen */
IF :new.ins_deel_verwijder IS NOT NULL
/* Koppelen */
OR (:old.ins_alg_ruimte_key IS NULL
AND :new.ins_alg_ruimte_key IS NOT NULL)
/* Ontkoppelen */
OR (:old.ins_alg_ruimte_key IS NOT NULL
AND :new.ins_alg_ruimte_key IS NULL)
/* Verplaatsen */
OR (:old.ins_alg_ruimte_key <> :new.ins_alg_ruimte_key)
/* Van INS_SRTDEEL veranderen.
* ACADSYMBOL is hierin nog niet verwerkt.
*/
OR (:old.ins_srtdeel_key <> :new.ins_srtdeel_key)
THEN
/* Voor de oude INS_ALG_RUIMTE_KEY */
IF :old.ins_alg_ruimte_type = 'R'
AND :old.ins_alg_ruimte_key IS NOT NULL
THEN
SET_DWGUPTODATE(alg_verdieping, alg_verdieping_key,
(SELECT ALG_R.alg_verdieping_key
FROM alg_ruimte ALG_R
WHERE ALG_R.alg_ruimte_key = :old.ins_alg_ruimte_key),
inv_dwguptodate);
ELSIF :old.ins_alg_ruimte_type = 'W'
AND :old.ins_alg_ruimte_key IS NOT NULL
THEN
SET_DWGUPTODATE(alg_verdieping, alg_verdieping_key,
(SELECT ALG_R.alg_verdieping_key
FROM prs_v_aanwezigwerkplek PRS_W,
alg_ruimte ALG_R
WHERE PRS_W.prs_werkplek_key = :old.ins_alg_ruimte_key
AND ALG_R.alg_ruimte_key = PRS_W.prs_alg_ruimte_key),
inv_dwguptodate);
END IF;
/* Voor de nieuwe INS_ALG_RUIMTE_KEY*/
IF :new.ins_alg_ruimte_type = 'R'
AND :new.ins_alg_ruimte_key IS NOT NULL
THEN
SET_DWGUPTODATE(alg_verdieping, alg_verdieping_key,
(SELECT ALG_R.alg_verdieping_key
FROM alg_ruimte ALG_R
WHERE ALG_R.alg_ruimte_key = :new.ins_alg_ruimte_key),
inv_dwguptodate);
ELSIF :new.ins_alg_ruimte_type = 'W'
AND :new.ins_alg_ruimte_key IS NOT NULL
THEN
SET_DWGUPTODATE(alg_verdieping, alg_verdieping_key,
(SELECT ALG_R.alg_verdieping_key
FROM prs_v_aanwezigwerkplek PRS_W,
alg_ruimte ALG_R
WHERE PRS_W.prs_werkplek_key = :new.ins_alg_ruimte_key
AND ALG_R.alg_ruimte_key = PRS_W.prs_alg_ruimte_key),
inv_dwguptodate);
END IF;
END IF;
END IF;
#endif // INV
/* Gedeelte t.b.v. eventuele attribuutjes */
DECLARE dummy NUMBER;
BEGIN
SELECT count(*) INTO dummy
FROM ins_v_attribute_gegevens
WHERE ins_srtdeel_key = :new.ins_srtdeel_key;
IF dummy <> 0 /* attributen aanwezig */
THEN
IF :new.fac0 <> :old.fac0 OR :new.fac0 IS NULL OR :old.fac0 IS NULL
THEN
/*
* Trigger t.b.v. de 'flexibele' velden in ins_deel
*/
CHECK_ATTRIBUTE(fac0,0);
END IF;
IF :new.fac1 <> :old.fac1 OR :new.fac1 IS NULL OR :old.fac1 IS NULL THEN CHECK_ATTRIBUTE(fac1,1); END IF;
IF :new.fac2 <> :old.fac2 OR :new.fac2 IS NULL OR :old.fac2 IS NULL THEN CHECK_ATTRIBUTE(fac2,2); END IF;
IF :new.fac3 <> :old.fac3 OR :new.fac3 IS NULL OR :old.fac3 IS NULL THEN CHECK_ATTRIBUTE(fac3,3); END IF;
IF :new.fac4 <> :old.fac4 OR :new.fac4 IS NULL OR :old.fac4 IS NULL THEN CHECK_ATTRIBUTE(fac4,4); END IF;
IF :new.fac5 <> :old.fac5 OR :new.fac5 IS NULL OR :old.fac5 IS NULL THEN CHECK_ATTRIBUTE(fac5,5); END IF;
IF :new.fac6 <> :old.fac6 OR :new.fac6 IS NULL OR :old.fac6 IS NULL THEN CHECK_ATTRIBUTE(fac6,6); END IF;
IF :new.fac7 <> :old.fac7 OR :new.fac7 IS NULL OR :old.fac7 IS NULL THEN CHECK_ATTRIBUTE(fac7,7); END IF;
IF :new.fac8 <> :old.fac8 OR :new.fac8 IS NULL OR :old.fac8 IS NULL THEN CHECK_ATTRIBUTE(fac8,8); END IF;
IF :new.fac9 <> :old.fac9 OR :new.fac9 IS NULL OR :old.fac9 IS NULL THEN CHECK_ATTRIBUTE(fac9,9); END IF;
END IF;
END;
/* Einde attributen */
#ifdef BCP
/* Procedure Taak */
IF :new.ins_deel_module = 'INS' AND :new.ins_alg_ruimte_type = 'R'
THEN
DECLARE
/* zoek taak bij nGebouw en bij deelsoort */
CURSOR c1(nGebouw NUMBER, nSrtdeel NUMBER) IS
SELECT A.bcp_taak_key, B.bcp_verzamel_key
FROM bcp_v_aanwezigtaak A, bcp_v_aanwezigverzamel B
WHERE A.bcp_verzamel_key = B.bcp_verzamel_key
AND B.bcp_ins_srtdeel_key = nSrtdeel
AND A.bcp_alg_gebouw_key = nGebouw;
Rec c1%ROWTYPE;
/* zoek alle verzamelopdrachten bij een deelsoort */
CURSOR c2(nSrtdeel NUMBER) IS
SELECT bcp_verzamel_key
FROM bcp_v_aanwezigverzamel
WHERE bcp_ins_srtdeel_key = nSrtdeel;
Rec2 c2%ROWTYPE;
nGebouw NUMBER(10);
nOudGebouw NUMBER(10);
nVerzamel NUMBER(10);
nUren NUMBER(10);
nMateriaal NUMBER(12);
nFreqWeken NUMBER(2);
nSector NUMBER(2);
nStartweek NUMBER(4);
nStartwerkweek NUMBER(4);
nJaar NUMBER(4);
nWeek NUMBER(4);
nWerkweek NUMBER(4);
nTaak NUMBER(10);
nStatus NUMBER(10);
nFactor NUMBER(10);
teller NUMBER(10);
teller2 NUMBER(10);
totaal NUMBER(10);
aant NUMBER(10);
nStatusUpper VARCHAR2(30);
verzamel_veranderd BOOLEAN;
taken_veranderd BOOLEAN;
nOthing BOOLEAN;
BEGIN
/* zoek gebouw en sector bij ruimte waar deel is */
SELECT A.alg_gebouw_key, A.bco_gebouw_sector
INTO nGebouw, nSector
FROM alg_v_aanweziggebouw A, alg_v_aanwezigverdieping B, alg_v_aanwezigruimte C
WHERE A.alg_gebouw_key = B.alg_gebouw_key
AND B.alg_verdieping_key = C.alg_verdieping_key
AND C.alg_ruimte_key = :new.ins_alg_ruimte_key;
IF NOT :old.ins_srtdeel_key IS NULL THEN
SELECT A.alg_gebouw_key
INTO nOudGebouw
FROM alg_v_aanweziggebouw A, alg_v_aanwezigverdieping B, alg_v_aanwezigruimte C
WHERE A.alg_gebouw_key = B.alg_gebouw_key
AND B.alg_verdieping_key = C.alg_verdieping_key
AND C.alg_ruimte_key = :old.ins_alg_ruimte_key;
END IF;
/* bepalen of de taken en eventueel de verzamelopdrachten van
het deel veranderd zijn. */
IF (:new.ins_srtdeel_key = :old.ins_srtdeel_key) AND (nGebouw = nOudGebouw) THEN
verzamel_veranderd := FALSE;
taken_veranderd := FALSE;
ELSIF (:new.ins_srtdeel_key = :old.ins_srtdeel_key) THEN
verzamel_veranderd := TRUE;
taken_veranderd := FALSE;
ELSE
verzamel_veranderd := TRUE;
taken_veranderd := TRUE;
END IF;
IF taken_veranderd THEN
/* alleen de taken bij oud_deel updaten als er een oud_deel is */
IF (NOT :old.ins_srtdeel_key IS NULL)
AND (NOT nOudGebouw IS NULL)
AND (NOT :old.ins_deel_verwijder = NULLDATUM)
THEN
OPEN c1(nOudGebouw, :old.ins_srtdeel_key);
LOOP
FETCH c1 INTO Rec;
EXIT WHEN c1%NOTFOUND;
nTaak := Rec.bcp_taak_key;
SELECT bcp_taak_aantal, bcp_ins_deel_aantal
INTO totaal, teller
FROM bcp_v_aanwezigtaak
WHERE bcp_taak_key = nTaak;
IF (teller = 1) THEN
UPDATE bcp_taak
SET bcp_taak_verwijder = SYSDATE
WHERE bcp_taak_key = nTaak;
ELSIF (teller > 1) THEN
/* bepaal aantal van het te verwijderen deel ...*/
aant := :old.ins_deel_aantal;
/* ... en pas de taak aan */
UPDATE bcp_taak
SET bcp_taak_uren = (totaal-aant)/totaal * bcp_taak_uren,
bcp_taak_materiaal = (totaal-aant)/totaal * bcp_taak_materiaal,
bcp_ins_deel_aantal = bcp_ins_deel_aantal-1,
bcp_taak_aantal = bcp_taak_aantal - :old.ins_deel_aantal
WHERE bcp_taak_key = nTaak;
END IF;
END LOOP;
CLOSE c1;
END IF; /* einde: CHANGE? */
/* nu passen we het nieuwe deel in de taken in,
(nog steeds taken_veranderd=TRUE) */
IF (NOT :new.ins_srtdeel_key IS NULL)
AND (NOT nGebouw IS NULL)
AND (NOT :new.ins_deel_verwijder = NULLDATUM)
THEN
OPEN c2(:new.ins_srtdeel_key);
LOOP
FETCH c2 INTO Rec2;
EXIT WHEN c2%NOTFOUND;
nVerzamel := Rec2.bcp_verzamel_key;
/* zoek of er een taak is bij de verzamelopdracht
en betreffende het gebouw */
BEGIN
SELECT bcp_taak_key
INTO nTaak
FROM bcp_v_aanwezigtaak
WHERE bcp_verzamel_key = nVerzamel
AND bcp_alg_gebouw_key = nGebouw;
EXCEPTION
WHEN NO_DATA_FOUND THEN
nTaak:= NULL;
END;
IF (nTaak IS NULL) THEN /* geen taak bij verzamel gevonden */
SELECT A.bcp_verzamel_uren, A.bcp_verzamel_materiaal, B.bcp_frequentie_weken
INTO nUren, nMateriaal, nFreqWeken
FROM bcp_verzamel A, bcp_frequentie B
WHERE A.bcp_frequentie_key = B.bcp_frequentie_key
AND A.bcp_verzamel_key = nVerzamel;
nJaar := mod(to_number(to_char(SYSDATE, 'YYYY')),100);
nStartweek := bcp_f_bcp4deel.bepaal_startweek(nSector, nFreqWeken, nVerzamel, nJaar);
INSERT INTO bcp_taak(bcp_verzamel_key,
bcp_alg_gebouw_key,
bcp_taak_uren,
bcp_taak_materiaal,
bcp_taak_eersteweek,
bcp_taak_aantal,
bcp_ins_deel_aantal)
VALUES(nVerzamel,
nGebouw,
nUren * :new.ins_deel_aantal,
nMateriaal * :new.ins_deel_aantal,
nStartweek,
:new.ins_deel_aantal,
1);
SELECT bcp_taak_key
INTO nTaak
FROM bcp_v_aanwezigtaak
WHERE bcp_verzamel_key = nVerzamel
AND bcp_alg_gebouw_key = nGebouw;
nStatus := bcp_f_bcp4deel.bepaalstatusopdrkey('BCP_STATUSOPDR_INGEPLAND');
nWeek := to_number(to_char(SYSDATE, 'YY') || to_char(SYSDATE,'WW'));
nOthing := bcp_f_bcp4deel.bcp_jaarweek2jaarwerkweek(nWeek, nWerkweek);
nOthing := bcp_f_bcp4deel.bcp_jaarweek2jaarwerkweek(nStartweek, nStartwerkweek);
INSERT INTO bcp_prevopdr(bcp_taak_key,
bcp_mld_statusopdr_key,
bcp_prevopdr_ingepland,
bcp_prevopdr_ingepland2)
VALUES(nTaak,
nStatus,
nStartweek,
nStartwerkweek);
ELSE /* Taak gevonden, bij elke gevonden verzamelopdracht
is er precies eentje, dus uniek */
SELECT bcp_taak_aantal, bcp_ins_deel_aantal,
bcp_taak_uren, bcp_taak_materiaal
INTO teller, teller2, nUren, nMateriaal
FROM bcp_v_aanwezigtaak A
WHERE A.bcp_taak_key = nTaak;
nFactor := (teller + :new.ins_deel_aantal)/teller;
IF (nUren * nFactor > 999.99) THEN
APPLICATION_ERROR(-20000,'bcp_m044');
END IF;
IF (nMateriaal * nFactor > 999999.99) THEN
APPLICATION_ERROR(-20000,'bcp_m045');
END IF;
UPDATE bcp_taak
SET bcp_taak_uren = bcp_taak_uren * nFactor,
bcp_taak_materiaal = bcp_taak_materiaal * NFactor,
bcp_taak_aantal = teller2 + :new.ins_deel_aantal,
bcp_ins_deel_aantal = teller + 1
WHERE bcp_taak_key = nTaak;
END IF;
END LOOP;
CLOSE c2;
END IF;
ELSE /* taken niet veranderd, alleen uren & materiaal even updaten */
OPEN c1(nOudGebouw, :old.ins_srtdeel_key);
LOOP
FETCH c1 INTO Rec;
EXIT WHEN c1%NOTFOUND;
nTaak := Rec.bcp_taak_key;
SELECT bcp_taak_uren, bcp_taak_materiaal, bcp_taak_aantal
INTO nUren, nMateriaal, teller
FROM bcp_v_aanwezigtaak
WHERE bcp_taak_key = nTaak;
/* factor is (totaal-oud+nieuw)/totaal */
nFactor := (teller + :new.ins_deel_aantal - :old.ins_deel_aantal)/teller;
IF (nUren * nFactor > 999.99) THEN
APPLICATION_ERROR(-20000,'bcp_m044');
END IF;
IF (nMateriaal * nFactor > 999999.99) THEN
APPLICATION_ERROR(-20000,'bcp_m045');
END IF;
UPDATE bcp_taak
SET bcp_taak_uren = bcp_taak_uren * nFactor,
bcp_taak_materiaal = bcp_taak_materiaal * NFactor,
bcp_taak_aantal = teller + :new.ins_deel_aantal - :old.ins_deel_aantal
WHERE bcp_taak_key = nTaak;
END LOOP; /* taken voor update */
CLOSE c1;
END IF; /* einde: taken_veranderd */
END;
END IF;
#endif
#ifdef LEV
LOG('Begin voor gedeelte van LEV voor kostenpost');
/* Bij het aanmaken van een leveringsregel wordt een INS_DEEL
* aangemaakt. Als OLD.lev_levering_key IS NULL en NEW.lev_levering_key
* IS NOT NULL dan wordt dit INS_DEEL nieuw aangemaakt, dus kunnen
* de kosten van deze levering bij ALG_KOSTENPOST_BESTEED geboekt worden.
*
* Bij het wijzigen van een leveringsregel kan niet bepaald worden of
* in het scherm EDIT-levering het aantal aangepast is of bij
* toekenning een aantal het INS_DEEL verhuisd naar een ander INS_DEEL.
* Deze stap is opgelost in het form EDIT-levering.
*/
IF :old.lev_levering_key IS NULL
AND :new.lev_levering_key IS NOT NULL
THEN
DECLARE
prijs INS_SRTDEEL.INV_SRTDEEL_PRIJS%TYPE;
BEGIN
SELECT NVL(INS_SD.inv_srtdeel_prijs, 0)
INTO prijs
FROM ins_srtdeel INS_SD
WHERE INS_SD.ins_srtdeel_key = :new.ins_srtdeel_key;
UPDATE alg_kostenpost
SET alg_kostenpost_besteed = NVL(alg_kostenpost_besteed, 0) +
NVL(:new.ins_deel_aantal, 0) * prijs
WHERE alg_kostenpost_key = (SELECT lev_alg_kostenpost_key
FROM lev_bestelling
WHERE lev_bestelling_key = :new.lev_bestelling_key);
EXCEPTION
WHEN NO_DATA_FOUND
THEN NULL;
END;
END IF;
LOG('Einde voor gedeelte van LEV voor kostenpost');
#endif
LOG('Eind INS_T_INS_DEEL_B_IU');
END;
/
#endif // INV
DEF_FAC_ENTITY ('INV_VERHUIS_DATUM', 'Verhuisdatum', 'Verhuisdata', 'de');
DEF_FAC_ENTITY ('INV_VERHUIS_VAN', 'Van', NULL, NULL);
DEF_FAC_ENTITY ('INV_VERHUIS_NAAR', 'Naar', NULL, NULL);
DEF_FAC_ENTITY ('INV_VERHUIS_BIJZONDERHEDEN', 'Bijzonderheden', NULL, 'de');
DEF_FAC_MESSAGE ('INV_M037', 'Verhuisformulier');
DEF_FAC_MESSAGE ('INV_M038', 'Het registratienummer moet ingevuld worden.');
DEF_FAC_MESSAGE ('INV_M039', 'De datum is niet ingevuld.');
DEF_FAC_MESSAGE ('INV_M040', 'Gewenste verhuisdatum');
DEF_FAC_MESSAGE ('INV_M041', 'Het artikelnummer is niet ingevuld.');
DEF_FAC_MESSAGE ('INV_M042', 'Gereserveerd voor afvoer');
DEF_FAC_MESSAGE ('INV_M043', 'Artikel moet gekozen zijn.');
DEF_FAC_MESSAGE ('INV_M044', 'Aantal te verwijderen artikelen');
DEF_FAC_MESSAGE ('INV_M045', 'Het te verwijderen aantal moet kleiner of gelijk zijn aan het aantal delen.');
#ifdef LEV
ALTER TABLE ins_deel
DROP
UNIQUE(ins_alg_ruimte_key, ins_srtdeel_key, ins_deel_upper,
lev_levering_key, lev_bestelling_key, ins_deel_verwijder);
ALTER TABLE ins_deel
ADD
UNIQUE(ins_alg_ruimte_key, ins_srtdeel_key, ins_deel_upper,
lev_levering_key, lev_bestelling_key, lev_afvoerlijst_datum,
ins_deel_verwijder);
#endif // LEV
INSERT INTO fac_message VALUES('LEV_M050', 'Alleen nog toe te wijzen leveringen');
UPDATE fac_entity_name
SET fac_entity_user_name = 'Artikelsoort',
fac_entity_user_name_m = 'Artikelsoorten',
fac_entity_user_name_pre = 'het'
WHERE fac_entity_system_name = 'INV_SRTDEEL';
UPDATE fac_message
SET fac_message_text = 'Verwijderen vakgroep '
WHERE fac_message_code = 'INV_M001';
UPDATE fac_message
SET fac_message_text = 'De omschrijving van de vakgroep is niet ingevuld.'
WHERE fac_message_code = 'INV_M002';
UPDATE fac_message
SET fac_message_text = 'De vakgroep is niet ingevuld.'
WHERE fac_message_code = 'INV_M004';
UPDATE fac_message
SET fac_message_text = 'De omschrijving voor het artikelsoort is niet ingevuld.'
WHERE fac_message_code = 'INV_M007';
UPDATE fac_message
SET fac_message_text = 'Verwijderen artikelsoort '
WHERE fac_message_code = 'INV_M008';
UPDATE fac_message
SET fac_message_text = 'Het artikelsoort is niet ingevuld.'
WHERE fac_message_code = 'INV_M012';
DEF_FAC_ENTITY ('PRS_PERSLID_ELCONR', 'Elconr.', 'Elconummers', 'het');
DEF_FAC_ENTITY ('PRS_PERSLID_EENHEID', 'Eenheid', 'Eenheden', 'de');
DEF_FAC_ENTITY ('PRS_PERSLID_RANG', 'Rang', 'Rangen', 'de');
SPOOL OFF