<% /*
     $Revision$
     $Id$

    File:               bedrijfFilter.inc
    Description:        functies voor bedrijf suggest velden
    Globals:
    Context:
    Note:
*/ %>


<%

function getFiltClauseBedrijf(pfiltcode, params)
{
  var lfiltClause = "";
  if (pfiltcode && pfiltcode != "")
  {
    switch(pfiltcode)
    {
      case 'B':  lfiltClause = " AND b.prs_bedrijf_key IN (SELECT prs_bedrijf_key FROM bes_bestelopdr)";
                 break;
      case 'BL': // BES leveranciers
                 lfiltClause = " AND b.prs_bedrijf_key IN (SELECT prs_bedrijf_key FROM bes_srtdeel)";
                 break;
      case 'C':  lfiltClause = " AND b.prs_bedrijf_key IN (SELECT cnt_prs_bedrijf_key FROM cnt_contract)";
                 break;
      case 'CI': // Met contract op inspecteerbare objecten en objectsoorten
                 // Het bedrijfsfilter kijkt niet naar:
                 // 1) Of de scope op de plaats een verfijning is van de scope op de gehele objectsoort.
                 // 2) Of objecten wellicht individueel in contractscope zitten van een ander bedrijf.
                 // Daardoor zouden enkele bedrijven ten onrechte zichtbaar kunnen zijn. Dit is echter geen probleem
                 lfiltClause = " AND b.prs_bedrijf_key IN ("
                               // Bedrijven die een scope hebben op individuele object(en) en/of die een scopen hebben op objectensoort(en)
                               + " SELECT cnt_prs_bedrijf_key"
                               + "   FROM cnt_contract c,"
                               + "        cnt_contract_object co, "
                               + "        ins_srtcontrole isc,"
                               + "        ins_srtgroep g,"
                               + "        ins_srtdeel  s"
                               + "  WHERE co.cnt_contract_key = c.cnt_contract_key" // op objecten
                               + "    AND co.cnt_contract_object_verwijder IS NULL"
                               + "    AND co.cnt_ins_srtdeel_key = s.ins_srtdeel_key"
                               + "    AND s.ins_srtgroep_key = g.ins_srtgroep_key"
                               + "    AND (    isc.ins_srtcontrole_niveau = 'S' AND isc.ins_srtinstallatie_key = s.ins_srtdeel_key"
                               + "          OR isc.ins_srtcontrole_niveau = 'G' AND isc.ins_srtinstallatie_key = g.ins_srtgroep_key"
                               + "          OR isc.ins_srtcontrole_niveau = 'D' AND isc.ins_srtinstallatie_key = g.ins_discipline_key"
                               + "        )"
                               + " UNION"
                               // Bedrijven die objecten hebben binnen hun plaats scope
                               + " SELECT c.cnt_prs_bedrijf_key"
                               + "   FROM cnt_contract c"
                               + "      , cnt_contract_plaats cp"
                               + "  WHERE cp.cnt_contract_key = c.cnt_contract_key"
                               + "    AND cp.cnt_contract_plaats_verwijder IS NULL"
                               + "    AND EXISTS (SELECT d.ins_deel_key" // Delen die gekoppeld zijn aan een ruimte
                               + "                  FROM ins_deel d"
                               + "                     , alg_v_onrgoed_boom ogb"
                               + "                 WHERE d.ins_alg_ruimte_key = ogb.alg_ruimte_key"
                               + "                   AND d.ins_alg_ruimte_type = 'R'"
                               + "                   AND ogb.alg_gebouw_key IN (SELECT DISTINCT g.alg_gebouw_key" // Alle gebouwen van de locaties in de scope
                               + "                                                FROM cnt_contract_plaats cp"
                               + "                                                   , alg_gebouw g"
                               + "                                                   , cnt_contract c"
                               + "                                               WHERE g.alg_locatie_key = cp.cnt_alg_plaats_key"
                               + "                                                 AND cp.cnt_contract_key = c.cnt_contract_key"
                               + "                                                 AND c.cnt_prs_bedrijf_key = c.cnt_prs_bedrijf_key"
                               + "                                                 AND cnt_contract_plaats_verwijder IS NULL"
                               + "                                                 AND cp.cnt_alg_plaats_code = 'L'"
                               + "                                              UNION"
                               + "                                              SELECT DISTINCT cp.cnt_alg_plaats_key" // Alle gebouwen van de gebouwen in de scope
                               + "                                                FROM cnt_contract_plaats cp"
                               + "                                                   , cnt_contract c"
                               + "                                               WHERE cp.cnt_contract_key = c.cnt_contract_key"
                               + "                                                 AND c.cnt_prs_bedrijf_key = c.cnt_prs_bedrijf_key"
                               + "                                                 AND cnt_contract_plaats_verwijder IS NULL"
                               + "                                                 AND cp.cnt_alg_plaats_code = 'G'"
                               + "                                             )"
                               + "                UNION"
                               + "                SELECT d.ins_deel_key" // Delen die gekoppeld zijn aan een werkplek
                               + "                  FROM ins_deel d"
                               + "                     , prs_werkplek w"
                               + "                     , alg_v_onrgoed_boom ogb"
                               + "                 WHERE d.ins_alg_ruimte_key = w.prs_werkplek_key"
                               + "                   AND w.prs_alg_ruimte_key = ogb.alg_ruimte_key"
                               + "                   AND d.ins_alg_ruimte_type = 'W'"
                               + "                   AND ogb.alg_gebouw_key IN (SELECT DISTINCT g.alg_gebouw_key" // Alle gebouwen van de locaties in de scope
                               + "                                                FROM cnt_contract_plaats cp"
                               + "                                                   , alg_gebouw g"
                               + "                                                   , cnt_contract c"
                               + "                                               WHERE g.alg_locatie_key = cp.cnt_alg_plaats_key"
                               + "                                                 AND cp.cnt_contract_key = c.cnt_contract_key"
                               + "                                                 AND c.cnt_prs_bedrijf_key = c.cnt_prs_bedrijf_key"
                               + "                                                 AND cnt_contract_plaats_verwijder IS NULL"
                               + "                                                 AND cp.cnt_alg_plaats_code = 'L'"
                               + "                                              UNION"
                               + "                                              SELECT DISTINCT cp.cnt_alg_plaats_key" // Alle gebouwen van de gebouwen in de scope
                               + "                                                FROM cnt_contract_plaats cp"
                               + "                                                   , cnt_contract c"
                               + "                                               WHERE cp.cnt_contract_key = c.cnt_contract_key"
                               + "                                                 AND c.cnt_prs_bedrijf_key = c.cnt_prs_bedrijf_key"
                               + "                                                 AND cnt_contract_plaats_verwijder IS NULL"
                               + "                                                 AND cp.cnt_alg_plaats_code = 'G'"
                               + "                                             )"
                               + "               )"
                               + ")";
                 break;
      case 'CP': lfiltClause = " AND b.prs_bedrijf_key IN (SELECT cp.prs_bedrijf_key"
                             + "                             FROM prs_contactpersoon cp"
                             + "                            WHERE cp.prs_perslid_key = " + user_key + ")";
                 break;
      case 'I':  lfiltClause = " AND b.prs_bedrijf_intern = 1";
                 break;
      case 'M':  lfiltClause = " AND b.prs_bedrijf_key IN (SELECT mld_uitvoerende_keys from mld_opdr)";
                 break;
      case 'U':  lfiltClause = " AND b.prs_bedrijf_uitvoerende = 1";
                 break;
      case 'L':
      case 'Lv': lfiltClause = " AND b.prs_bedrijf_leverancier = 1";
                 break;
      case 'K':  lfiltClause = " AND b.prs_bedrijf_contract = 1";
                 break;
      case 'H':  lfiltClause = " AND b.prs_bedrijf_huurder = 1";
                 break;
      case 'X':  lfiltClause = " AND b.prs_bedrijf_intern IS NULL";
                 break;
    }
  }
  if (params && params.dienst > 0)
    lfiltClause += " AND b.prs_bedrijf_key IN (SELECT DISTINCT bdl.prs_bedrijf_key"
                 + "                             FROM prs_bedrijfdienstlocatie bdl"
                 + "                                , prs_dienst d"
                 + "                             WHERE bdl.prs_dienst_key = d.prs_dienst_key"
                 + "                               AND d.prs_dienst_key = " + params.dienst + ")";
  return lfiltClause;
}

function getExtraInfbedrijf(pextracode)
{
  var lExtraInf = ", 'Extra' extra";
  if (pextracode && pextracode != "")
  {
    switch(pextracode)
    {
      case 'E': lExtraInf = ", b.prs_bedrijf_email extra"; // module
                break;
    }
  }
  return lExtraInf;
}
%>
