<%@language = "javascript" %>
<% /*
     $Revision$
     $Id$

    File:               SuggestObject.asp
    Description:        Suggereer objecten
    Parameters:         k         De eerste paar letters
                        bAll      Haal alle records op (met nog steeds een maximum van 500)
                        filtcode  Beperkt de lijst met getoonde objecten
                                  'I': Filter op ingenomen objecten (die ingenomen zijn)
                                  'U': Filter op uitgeleende objecten (die uitgeleend zijn)
    Globals:
    Context:
    Note:               Tot nu alleen ondersteund/gebruikt: niet uitgeleende,
                        plaatsgebonden objecten laten zien met objecten suggestbox (filtcode = "I")!
*/ %>

<%
JSON_Result = true;
%>

<!-- #include file="../../Shared/common.inc" -->
<!-- #include file="./suggest.inc" -->
<!-- #include file="./objectFilter.inc" -->
<!-- #include file="../discx3d.inc" -->

<%
var chars = getQParam("k", "");
var bAll = getQParamInt("SuggestAll", 0) == 1;
var filtcode = getQParam("filtcode", "");
var disc_key = getQParamInt("disc_key", -1);
var srtgroup_key = getQParamInt("srtgroup_key", -1);
var srtdeel_key = getQParamInt("srtdeel_key", -1);
var extracode = getQParam("extraCode", "");
var pautfunction = getQParam("autfunction");

chars = chars.replace(/\*/g,"%");

var filt_params = { filtcode: filtcode,
                    disc_key: disc_key,
                    srtgroup_key: srtgroup_key,
                    srtdeel_key: srtdeel_key
                  };

var filtClause = getFiltClauseObject(filt_params);

// Objecten laten zien waar ik rechten op heb (die ik mag zien)
// Objecten kunnen gekoppeld zijn aan een afdeling, persoon, contactpersoon, terrein, ruimte of werkplek (alg_ruimte_type 'A', 'P', 'C;, 'T', 'R' of 'W')
// met ieder een eigen 3d autorisatie (eigen union tak).
sqlR = "SELECT d.ins_deel_key"
     + "     , d.ins_deel_omschrijving"
     + "     , " + lcl.xsqla('s.ins_srtdeel_omschrijving', 's.ins_srtdeel_key')
     + "     , d.ins_deel_upper"
     + "     , '' extra"
     + "     , d.ins_deel_opmerking"
     + "  FROM ins_v_aanwezigdeel d"
     + "     , ins_v_aanwezigsrtdeel s"
     + "     , alg_locatie l"
     + "     , alg_district di"
     + "     , alg_ruimte alg_r"
     + "     , alg_verdieping alg_v"
     + "     , alg_gebouw alg_g"
     + " WHERE ins_deel_upper LIKE " + safe.quoted_sql_wild(chars + "%")
     + "   AND d.ins_srtdeel_key = s.ins_srtdeel_key"
     + "   AND alg_r.alg_ruimte_key = d.ins_alg_ruimte_key"
     + "   AND d.ins_alg_ruimte_type = 'R'"
     + "   AND alg_g.alg_locatie_key = d.ins_alg_locatie_key"
     + "   AND alg_g.alg_locatie_key = l.alg_locatie_key"
     + "   AND l.alg_district_key = di.alg_district_key"
     + "   AND alg_r.alg_verdieping_key = alg_v.alg_verdieping_key"
     + "   AND alg_v.alg_gebouw_key = alg_g.alg_gebouw_key"
     + "   AND (d.ins_deel_vervaldatum IS NULL OR d.ins_deel_vervaldatum > TRUNC(SYSDATE))"
     + filtClause;

sqlR = discx3d (sqlR,
                "d.ins_discipline_key",
                "di.alg_regio_key",
                "l.alg_district_key",
                "l.alg_locatie_key",
                "o.alg_gebouw_key",
                "o.alg_verdieping_key",
                "o.alg_ruimte_key",
                "", // b.prs_bedrijf_key: not used because algprs == 0
                "", // d.prs_afdeling_key: not used because algprs == 0
                pautfunction,
                (disc_key > 0? disc_key : ''),
                0);

sqlW = "SELECT d.ins_deel_key"
     + "     , d.ins_deel_omschrijving"
     + "     , " + lcl.xsqla('s.ins_srtdeel_omschrijving', 's.ins_srtdeel_key')
     + "     , d.ins_deel_upper"
     + "     , '' extra"
     + "     , d.ins_deel_opmerking"
     + "  FROM ins_v_aanwezigdeel d"
     + "     , ins_v_aanwezigsrtdeel s"
     + "     , prs_werkplek w"
     + "     , alg_locatie l"
     + "     , alg_district di"
     + "     , alg_ruimte alg_r"
     + "     , alg_verdieping alg_v"
     + "     , alg_gebouw alg_g"
     + " WHERE ins_deel_upper LIKE " + safe.quoted_sql_wild(chars + "%")
     + "   AND d.ins_srtdeel_key = s.ins_srtdeel_key"
     + "   AND w.prs_werkplek_key = d.ins_alg_ruimte_key"
     + "   AND alg_r.alg_ruimte_key = w.prs_alg_ruimte_key"
     + "   AND d.ins_alg_ruimte_type = 'W'"
     + "   AND alg_g.alg_locatie_key = d.ins_alg_locatie_key"
     + "   AND alg_g.alg_locatie_key = l.alg_locatie_key"
     + "   AND l.alg_district_key = di.alg_district_key"
     + "   AND alg_r.alg_verdieping_key = alg_v.alg_verdieping_key"
     + "   AND alg_v.alg_gebouw_key = alg_g.alg_gebouw_key"
     + "   AND (d.ins_deel_vervaldatum IS NULL OR d.ins_deel_vervaldatum > TRUNC(SYSDATE))"
     + filtClause;

sqlW = discx3d (sqlW,
                "d.ins_discipline_key",
                "di.alg_regio_key",
                "l.alg_district_key",
                "l.alg_locatie_key",
                "o.alg_gebouw_key",
                "o.alg_verdieping_key",
                "o.alg_ruimte_key",
                "", // b.prs_bedrijf_key: not used because algprs == 0
                "", // d.prs_afdeling_key: not used because algprs == 0
                pautfunction,
                (disc_key > 0? disc_key : ''),
                0);


sqlT = "SELECT d.ins_deel_key"
     + "     , d.ins_deel_omschrijving"
     + "     , " + lcl.xsqla('s.ins_srtdeel_omschrijving', 's.ins_srtdeel_key')
     + "     , d.ins_deel_upper"
     + "     , '' extra"
     + "     , d.ins_deel_opmerking"
     + "  FROM ins_v_aanwezigdeel d"
     + "     , ins_v_aanwezigsrtdeel s"
     + "     , alg_locatie l"
     + "     , alg_district di"
     + "     , alg_terreinsector alg_t"
     + " WHERE ins_deel_upper LIKE " + safe.quoted_sql_wild(chars + "%")
     + "   AND d.ins_srtdeel_key = s.ins_srtdeel_key"
     + "   AND alg_t.alg_terreinsector_key = d.ins_alg_ruimte_key"
     + "   AND d.ins_alg_ruimte_type = 'T'"
     + "   AND alg_t.alg_locatie_key = d.ins_alg_locatie_key"
     + "   AND alg_t.alg_locatie_key = l.alg_locatie_key"
     + "   AND l.alg_district_key = di.alg_district_key"
     + "   AND (d.ins_deel_vervaldatum IS NULL OR d.ins_deel_vervaldatum > TRUNC(SYSDATE))"
     + filtClause;

sqlT = discx3d (sqlT,
                "d.ins_discipline_key",
                "di.alg_regio_key",
                "l.alg_district_key",
                "l.alg_locatie_key",
                "", // o.alg_gebouw_key
                "", // o.alg_verdieping_key
                "", // o.alg_ruimte_key
                "", // b.prs_bedrijf_key: not used because algprs == 0
                "", // d.prs_afdeling_key: not used because algprs == 0
                pautfunction,
                (disc_key > 0? disc_key : ''),
                0);

sqlP = "SELECT d.ins_deel_key"
     + "     , d.ins_deel_omschrijving"
     + "     , s.ins_srtdeel_omschrijving ins_srtdeel_omschrijving"
     + "     , d.ins_deel_upper"
     + "     , '' extra"
     + "     , d.ins_deel_opmerking"
     + "  FROM ins_v_aanwezigdeel d"
     + "     , ins_v_aanwezigsrtdeel s"
     + "     , prs_perslid p"
     + "     , prs_v_afdeling_boom boom"
     + " WHERE ins_deel_upper LIKE " + safe.quoted_sql_wild(chars + "%")
     + "   AND d.ins_srtdeel_key = s.ins_srtdeel_key"
     + "   AND p.prs_perslid_key = d.ins_alg_ruimte_key"
     + "   AND p.prs_afdeling_key = boom.prs_afdeling_key"
     + "   AND d.ins_alg_ruimte_type = 'P'"
     + "   AND (d.ins_deel_vervaldatum IS NULL OR d.ins_deel_vervaldatum > TRUNC(SYSDATE))"
     + filtClause;

sqlP = discx3d (sqlP,
                "d.ins_discipline_key",
                "", // alg_regio_key
                "", // alg_district_key
                "", // alg_locatie_key
                "", // alg_gebouw_key
                "", // alg_verdieping_key
                "", // alg_ruimte_key
                "boom.prs_bedrijf_key", // b.prs_bedrijf_key
                "boom.prs_afdeling_key", // d.prs_afdeling_key
                pautfunction,
                (disc_key > 0? disc_key : ''),
                1); // algprs mode (only prs)

// Contactpersonen hebben geen alg en prs scope. Contactpersonen behoren tot EXTERNE bedrijven.
sqlC = "SELECT d.ins_deel_key"
     + "     , d.ins_deel_omschrijving"
     + "     , s.ins_srtdeel_omschrijving ins_srtdeel_omschrijving"
     + "     , d.ins_deel_upper"
     + "     , '' extra"
     + "     , d.ins_deel_opmerking"
     + "  FROM ins_v_aanwezigdeel d"
     + "     , ins_v_aanwezigsrtdeel s"
     + "     , prs_contactpersoon c"
     + " WHERE ins_deel_upper LIKE " + safe.quoted_sql_wild(chars + "%")
     + "   AND d.ins_srtdeel_key = s.ins_srtdeel_key"
     + "   AND c.prs_contactpersoon_key = d.ins_alg_ruimte_key"
     + "   AND d.ins_alg_ruimte_type = 'C'"
     + "   AND (d.ins_deel_vervaldatum IS NULL OR d.ins_deel_vervaldatum > TRUNC(SYSDATE))"
     + (disc_key > 0
       ? " AND d.ins_discipline_key = " + disc_key
       : "")
     + filtClause;

sqlA = "SELECT d.ins_deel_key"
     + "     , d.ins_deel_omschrijving"
     + "     , s.ins_srtdeel_omschrijving ins_srtdeel_omschrijving"
     + "     , d.ins_deel_upper"
     + "     , '' extra"
     + "     , d.ins_deel_opmerking"
     + "  FROM ins_v_aanwezigdeel d"
     + "     , ins_v_aanwezigsrtdeel s"
     + "     , prs_v_afdeling_boom boom"
     + " WHERE ins_deel_upper LIKE " + safe.quoted_sql_wild(chars + "%")
     + "   AND d.ins_srtdeel_key = s.ins_srtdeel_key"
     + "   AND boom.prs_afdeling_key = d.ins_alg_ruimte_key"
     + "   AND d.ins_alg_ruimte_type = 'A'"
     + "   AND (d.ins_deel_vervaldatum IS NULL OR d.ins_deel_vervaldatum > TRUNC(SYSDATE))"
     + filtClause;

sqlA = discx3d (sqlA,
                "d.ins_discipline_key",
                "", // alg_regio_key
                "", // alg_district_key
                "", // alg_locatie_key
                "", // alg_gebouw_key
                "", // alg_verdieping_key
                "", // alg_ruimte_key
                "boom.prs_bedrijf_key", // b.prs_bedrijf_key: not used because algprs == 0
                "boom.prs_afdeling_key", // d.prs_afdeling_key: not used because algprs == 0
                pautfunction,
                (disc_key > 0? disc_key : ''),
                1); // algprs mode (only prs)

sql = "SELECT x.ins_deel_key"
     + "    , x.ins_deel_omschrijving || ' ' ||  x.ins_deel_opmerking deel_omschrijving"
     + "    , x.ins_srtdeel_omschrijving ins_srtdeel_omschrijving"
     + "    , x.ins_deel_upper"
     + "    , x.extra"
     + "  FROM (" + sqlT + " UNION " + sqlR + " UNION " + sqlW + " UNION " + sqlP + " UNION " + sqlC + " UNION " + sqlA + ") x"
     + " ORDER BY x.ins_deel_upper";

WriteResult2(sql, { bAll: bAll,
                    fldName: "deel_omschrijving",
                    fldKey: "ins_deel_key",
                    fldDesc: "ins_srtdeel_omschrijving",
                    fldExtraParam: "ins_srtdeel_omschrijving"
                  } );
%>
