#ifdef PRJ
/*  PRJ_TAB.SRC
 *
 * $Revision$
 * $Id$
 */

/* Om een naam te kunnen geven aan een scenario en deze later weer op te kunnen roepen */
CREATE_TABLE(prj_scenario, 0)
(
    prj_scenario_key
        NUMBER(10)
        CONSTRAINT prj_k_prj_scenario_key PRIMARY KEY,
    prj_scenario_omschrijving
        VARCHAR2(30),
        NOT_NULL(prj_scenario_omschrijving, prj_r_prj_scenario_omschr),
    mld_melding_key
        NUMBER(10)
        CONSTRAINT prj_r_mld_melding_key1 REFERENCES mld_melding ON DELETE CASCADE,
    prj_scenario_status
        VARCHAR2(30),
    prj_scenario_opmerking
        VARCHAR2(2000),
    prj_scenario_datum
        DATE,
    prj_scenario_raming
        NUMBER(10),
    prs_perslid_key
        NUMBER(10)
        CONSTRAINT prj_r_prs_perslid_key0 REFERENCES prs_perslid(prs_perslid_key),
    prj_scenario_aanmaak
        DATE
        DEFAULT SYSDATE,
    prj_scenario_verwerkt
        DATE
);


/* Om afwijkende oppervlaktes en nieuwe ruimtes te ondersteunen; een ruimte zou ook nog kunnen
   vervallen in dit scenario, dus dat moet ook kunnen. Een andere ruimtefunctie: idem. Kunnen we
   ook een ander ruimtenummer aan? */
CREATE_TABLE(prj_ruimte, 0)
(
    prj_ruimte_key
        NUMBER(10)
        CONSTRAINT prj_k_prj_ruimte_key PRIMARY KEY,
    prj_scenario_key
        NUMBER(10)
        NOT_NULL(prj_scenario_key, prj_c_prj_scenario_key1)
        CONSTRAINT prj_r_prj_scenario_key1 REFERENCES prj_scenario(prj_scenario_key) ON DELETE CASCADE,
    alg_ruimte_key
        NUMBER(10)
        CONSTRAINT prj_r_alg_ruimte_key2 REFERENCES alg_ruimte(alg_ruimte_key),
    alg_verdieping_key
        NUMBER(10)
        CONSTRAINT prj_r_alg_verdieping_key2 REFERENCES alg_verdieping(alg_verdieping_key),
    alg_srtruimte_key
        NUMBER(10)
        CONSTRAINT prj_r_alg_srtruimte_key REFERENCES alg_srtruimte(alg_srtruimte_key),
    prj_ruimte_nr
        VARCHAR2(20)
        NOT_NULL(prj_ruimte_nr, prj_c_alg_ruimte_nr),
    prj_ruimte_upper_nr
        VARCHAR2(20)
        NOT_NULL(prj_ruimte_upper_nr, prj_c_alg_ruimte_upper_nr),
    prj_ruimte_omschrijving
        VARCHAR2(30),
    prj_ruimte_aanmaak
        DATE
        DEFAULT SYSDATE
        NOT_NULL(prj_ruimte_aanmaak, prj_c_prj_ruimte_aanmaak),
    prj_ruimte_verwijder
        DATE
        DEFAULT NULLDATUM,
    prj_ruimte_bruto_vloeropp
        NUMBER(8,2)
        CONSTRAINT prj_c_prj_ruimte_vloeropp CHECK(prj_ruimte_bruto_vloeropp >= 0),
    prj_ruimte_omtrek
        NUMBER(8,2),
        CONSTRAINT prj_c_prj_ruimte_omtrek CHECK(prj_ruimte_omtrek >= 0),
    prj_ruimte_inhoud
        NUMBER(12,2)
        CONSTRAINT prj_c_prj_ruimte_inhoud CHECK(prj_ruimte_inhoud >= 0),
    prj_ruimte_opmerking
        VARCHAR2(50),
    CONSTRAINT prj_u_prj_ruimte_upper_nr UNIQUE(prj_scenario_key, alg_verdieping_key, prj_ruimte_upper_nr, prj_ruimte_verwijder)
);

/* Nieuwe werkplekken? Alle werkplekken van een verdieping in scenario? */
CREATE_TABLE(prj_werkplek, 0)
(
    prj_werkplek_key
        NUMBER(10)
        CONSTRAINT prj_k_prj_werkplek_key PRIMARY KEY,
    prs_werkplek_key
         NUMBER(10)
         CONSTRAINT prj_r_prs_werkplek_key REFERENCES prs_werkplek(prs_werkplek_key) ON DELETE CASCADE,
    prj_werkplek_volgnr
        NUMBER(8)
        NOT_NULL(prj_werkplek_volgnr, prj_c_prj_werkplek_volgnr),
    prj_werkplek_omschrijving
        VARCHAR2(30),
    prj_werkplek_vastopp
        NUMBER(1)
        CONSTRAINT prj_c_prj_werkplek_vastopp CHECK(prj_werkplek_vastopp IS NULL
                                                 OR prj_werkplek_vastopp = 1),
    prj_werkplek_opp
        NUMBER(8,2)
        CONSTRAINT prj_c_prs_werkplek_opp CHECK(prj_werkplek_opp >= 0
                                             OR prj_werkplek_opp IS NULL),
    prj_ruimte_key
        NUMBER(10)
        NOT_NULL(prj_ruimte_key, prj_r_prs_prj_ruimte_key1)
        CONSTRAINT prs_r_prs_prj_ruimte_key2 REFERENCES prj_ruimte(prj_ruimte_key) ON DELETE CASCADE,
    prj_werkplek_dwgx
        NUMBER(16,3),
    prj_werkplek_dwgy
        NUMBER(16,3),
    prj_werkplek_dwgz
        NUMBER(16,3),
    prj_werkplek_dwgrotatie
        NUMBER(5,1),
    prj_werkplek_dwgschaal
        NUMBER(5,2),
    prj_werkplek_aanmaak
        DATE
        DEFAULT SYSDATE
        NOT_NULL(prj_werkplek_aanmaak, prj_c_prj_werkplek_aanmaak),
    prj_werkplek_verwijder
        DATE
        DEFAULT NULLDATUM,
    CONSTRAINT prj_u_prj_werkplek_volgnr UNIQUE(prj_ruimte_key, prj_werkplek_volgnr, prj_werkplek_verwijder)
);

CREATE_TABLE(prj_ruimteafdeling,0)
(
    prj_ruimteafdeling_key
        NUMBER(10)
        CONSTRAINT prj_k_prs_ruimteafdeling_key PRIMARY KEY,
    prs_ruimteafdeling_key
        NUMBER(10)
         CONSTRAINT prj_r_prs_ruimteafd_key REFERENCES prs_ruimteafdeling(prs_ruimteafdeling_key) ON DELETE SET NULL,
    prs_afdeling_key
        NUMBER(10)
        CONSTRAINT prj_c_prs_afdeling_key3 CHECK(prs_afdeling_key IS NOT NULL)
        CONSTRAINT prj_r_prs_ra_afdeling_key REFERENCES prs_afdeling(prs_afdeling_key) ON DELETE CASCADE,
    prj_ruimte_key
        NUMBER(10)
        CONSTRAINT prj_c_alg_ruimte_key CHECK(prj_ruimte_key IS NOT NULL)
        CONSTRAINT prj_r_alg_ruimte_key1 REFERENCES prj_ruimte(prj_ruimte_key) ON DELETE CASCADE,
    prj_ruimteafdeling_bezetting
        NUMBER(3)
        DEFAULT 100
        CONSTRAINT prj_c_prs_ruimteafd_bezetting2 CHECK
         (prj_ruimteafdeling_bezetting is not null AND prj_ruimteafdeling_bezetting BETWEEN 0 AND 100),
    prj_ruimteafdeling_aanmaak
        DATE
        DEFAULT SYSDATE,
    prj_ruimteafdeling_verwijder
        DATE
        DEFAULT NULLDATUM,
    CONSTRAINT prj_u_ruimteafdeling UNIQUE(prs_afdeling_key, prj_ruimte_key, prj_ruimteafdeling_verwijder)
);


CREATE_TABLE(prj_perslidwerkplek, 0)
(
    prj_perslidwerkplek_key
        NUMBER(10)
        CONSTRAINT prj_k_prj_perslidwerkplek_key PRIMARY KEY,
    prs_perslidwerkplek_key
         NUMBER(10)
         CONSTRAINT prj_r_prs_perslidwp_key REFERENCES prs_perslidwerkplek(prs_perslidwerkplek_key) ON DELETE CASCADE,
    prs_perslid_key
        NUMBER(10)
        NOT_NULL (prs_perslid_key, prj_c_prs_perslid_key)
        CONSTRAINT prj_r_prs_perslid_key REFERENCES prs_perslid(prs_perslid_key) ON DELETE CASCADE,
//    prs_afdeling_key
//        NUMBER(10)
//        CONSTRAINT prj_r_prs_pw_afdeling_key REFERENCES prs_afdeling(prs_afdeling_key) ON DELETE CASCADE,
    prj_werkplek_key
        NUMBER(10)
        CONSTRAINT prj_r_prj_werkplek_key REFERENCES prj_werkplek(prj_werkplek_key) ON DELETE CASCADE,
    prj_perslidwerkplek_bezetting
        NUMBER(3)
        DEFAULT 100
        CONSTRAINT prj_c_prj_perslidwp_bezetting2 CHECK
         (prj_perslidwerkplek_bezetting is not null and prj_perslidwerkplek_bezetting BETWEEN 0 AND 100),
    prj_perslidwerkplek_aanmaak
        DATE
        DEFAULT SYSDATE
        NOT_NULL(prj_perslidwerkplek_aanmaak, prj_c_prj_perslidwp_aanmaak),
    prj_perslidwerkplek_verwijder
        DATE
        DEFAULT NULLDATUM,
//    CONSTRAINT prj_c_prj_perslidwp_koppeling CHECK(
//          (prs_perslid_key IS NULL AND prs_afdeling_key IS NOT NULL) OR
//          (prs_afdeling_key IS NULL AND prs_perslid_key IS NOT NULL)
//         ),
    CONSTRAINT prj_u_perslidwerkplek UNIQUE(prs_perslid_key, prj_werkplek_key, prj_perslidwerkplek_verwijder)
);

/* Noot: waar in de real world met een gecombineerde key+type wordt gewerkt, hebben we hier twee aparte verwijzingen
 * waarbij de ruimte_key verplicht is en de werkplek_key optioneel
 */
CREATE_TABLE(prj_deel, 0)
(
    prj_deel_key
        NUMBER(10)
        CONSTRAINT prj_k_prj_deel_key PRIMARY KEY
,  ins_deel_key
       NUMBER(10)
       CONSTRAINT prj_r_prj_deel_key REFERENCES ins_deel(ins_deel_key)
,  ins_srtdeel_key
       NUMBER(10)
       NOT_NULL(ins_srtdeel_key, prj_r_deel_srtdeel_key1)
       CONSTRAINT prj_r_deel_srtdeel_key2 REFERENCES ins_srtdeel
,  prj_ruimte_key
        NUMBER(10)
        NOT_NULL(prj_ruimte_key, prj_r_prs_prj_ruimte_key2)
        CONSTRAINT prs_r_prs_prj_ruimte_key3 REFERENCES prj_ruimte(prj_ruimte_key) ON DELETE CASCADE
,  prj_werkplek_key
        NUMBER(10)
        CONSTRAINT prj_r_prj_werkplek_key2 REFERENCES prj_werkplek(prj_werkplek_key) ON DELETE CASCADE
,  prj_deel_omschrijving
       VARCHAR2(60)
       CONSTRAINT prj_c_ins_deel_omschrijving CHECK(prj_deel_omschrijving IS NOT NULL)
,  prj_deel_dwgx
       NUMBER(16,3)
,  prj_deel_dwgy
       NUMBER(16,3)
,  prj_deel_dwgz
       NUMBER(16,3)
,  prj_deel_dwgrotatie
       NUMBER(5,1)
,  prj_deel_dwgschaal
       NUMBER(5,2)
,  prj_deel_aanmaak
       DATE
       DEFAULT SYSDATE
,  prj_deel_verwijder
       DATE
       DEFAULT NULL
);

CREATE_TABLE(prj_selectie, 0)
(
    prj_selectie_key
        NUMBER(10)
        CONSTRAINT prj_k_prj_selectie_key PRIMARY KEY,
    prj_scenario_key
        NUMBER(10)
        NOT_NULL(prj_scenario_key, prj_c_prj_scenario_key2)
        CONSTRAINT prj_r_prj_scenario_key2 REFERENCES prj_scenario(prj_scenario_key) ON DELETE CASCADE,
    prs_perslid_key
        NUMBER(10)
        CONSTRAINT prj_r_prs_perslid_key2 REFERENCES prs_perslid(prs_perslid_key) ON DELETE CASCADE,
    prj_selectie_tabelnaam
        VARCHAR2(128)
        CONSTRAINT prj_c_prj_selectie_tabelnaam1 CHECK(prj_selectie_tabelnaam IN ('PRJ_WERKPLEK', 'PRJ_PERSLIDWERKPLEK', 'PRJ_DEEL', 'PRS_PERSLID', 'PRS_AFDELING'))
        NOT_NULL(prj_selectie_tabelnaam, prj_c_prj_selectie_tabelnm2),
    prj_selectie_tabelkey
        NUMBER(10),
        NOT_NULL(prj_selectie_tabelkey, prj_c_prj_selectie_tabelkey),
    prj_selectie_aanmaak
        DATE
        DEFAULT SYSDATE
);

CREATE_TABLE(prj_scenario_note, 0)
(
    prj_scenario_note_key
        NUMBER(10)
        CONSTRAINT prj_k_prj_scenario_reamrk_key PRIMARY KEY,
    prj_scenario_key
        NUMBER(10)
        NOT_NULL(prj_scenario_key, prj_c_prj_scenario_key6)
        CONSTRAINT prj_r_prj_scenario_key6 REFERENCES prj_scenario(prj_scenario_key) ON DELETE CASCADE,
    prj_scenario_note_nr
        NUMBER(3),
    prj_scenario_note_DWGX
        NUMBER(16,3),
    prj_scenario_note_DWGY
        NUMBER(16,3),
    prj_scenario_note_omschrijving
        VARCHAR2(2000),
    prj_ruimte_key
        NUMBER(10)
        CONSTRAINT prj_r_prj_ruimte_key3 REFERENCES prj_ruimte(prj_ruimte_key) ON DELETE SET NULL,
    alg_verdieping_key
        NUMBER(10)
        CONSTRAINT prj_r_alg_verdieping_key3 REFERENCES alg_verdieping(alg_verdieping_key) ON DELETE CASCADE,
    prs_perslid_key
        NUMBER(10)
        CONSTRAINT prj_r_prs_perslid_key6 REFERENCES prs_perslid(prs_perslid_key),
    prj_scenario_note_aanmaak
        DATE
        DEFAULT SYSDATE
);


ALTER TABLE cad_imp_contour
  ADD prj_scenario_key NUMBER(10) REFERENCES prj_scenario(prj_scenario_key) ON DELETE CASCADE;

REGISTERONCE('$Id$')

#endif // PRJ
