<% /*
     $Revision$
     $Id$

     File:          uitvoerendeselector.inc
     Description:   Algemene interface functie om een uitvoerenden suggestbox te maken
                    Deze moet je kunnen includen en aanroepen.
                    Resulteert dan uiteindelijk in een zichtbaar textveld aangemaakt die de uitvoerendenaam bevat (uitvoerendenaam veld)
                    en een hidden keyveld die de key van de uitvoerende bevat (uitvoerendekey veld).
                    Het uitvoerendenaam veld heeft geen naam en wordt niet meegesubmit.
                    Het uitvoerendekey veld heeft een naam en wordt meegesubmit.
                    Het resultaat heeft de vorm "[<td>label</td><td>]selectveld[</td>]"
    parameters:     fieldName:    veldnaam van het uitvoerendekey veld. Dit veld wordt gesubmit.
                    objectName:   naam van het suggest object dat wordt aangemaakt.
                    params:       object met meegegeven parameters.
                                  uitvoerendekey:    initiële key waarde van de uitvoerende die ingevuld moet worden.
                                  label:             label dat voor het uitvoerendenaam veld wordt weergegeven.
                                  filtercode:        extra filtercode voor de query die gebruikt wordt voor de suggest.
                                  onChange:          onchange op het textveld.
                                  trclass:           wordt ook op de <tr> gezet
                                  extraParamField:   veldnaam voor een extra hidden parameter veld.
                                  locatiekey         Alleen uitvoerende tonen die op deze locatie leveren
                                  gebouwkey          Alleen uitvoerende tonen die in dit gebouw leveren
                                  disciplinekey      Alleen uitvoerende tonen met rechten op deze discipline
                                  onrgoedkey         Alleen uitvoerende tonen die in dit onroerendgoed leveren
                                  lutype             Alleen leveranciers (L) of uitvoerenden (U) tonen
                                  externonly         Alleen externe bedrijven tonen
                                  exhandler          Ik ben een contactpersoon van een extern bedrijf?
                                                     Dan mag ik alleen de opdrachten van mijn bedrijf/bedrijven zien
                                  isBad:             boolean die aangeeft dat het uitvoerendenaam veld als ongeldig
                                                     en leeg weergegeven moet worden (true|false(default)).
                                  readonly:          geeft aan of het uitvoerendenaam veld readonly weergegeven moet worden (true|false(default)).
                                  moreinfo:          geeft een extra informatie button achter het suggest veld. Klikken hierop geeft informatie
                                                     over de geselecteerde waarde
                                  noBad              Als uitvoerendekey niet gevonden binnen filter dan veld leeglaten
                                                     (in plaats van standaard gedrag: naam wel opzoeken maar 'Bad' maken)
*/ %>

<!-- #include file="./Suggest/uitvoerendeFilter.inc" -->

<%
FCLTHeader.Requires({ plugins: ["suggest", "jQuery"], js: [] });

function FCLTuitvoerendeselector(fieldName, objectName, params)
{
  if (typeof params == "undefined") params = {};

  var lwhenEmpty = (params.whenEmpty != null ? params.whenEmpty :  (params.readonly ? L("lcl_select_readonly") : L("lcl_select_uitvoerende")));
  var luitvoerendeName = (device.test(device.supportsPlaceholder) ? "" : lwhenEmpty);
  var lpbtype = "";
  var isBad = false;
  var canbePerslid = (!params.dienst && !params.externonly && !params.exhandler)
  if (params.uitvoerendekey && params.uitvoerendekey > 0)
  {
    var filtClause = getFiltClauseUitvoerende(params.filtercode, params);

    sql = "SELECT prs_bedrijf_naam uitv_naam"
        + "     , CASE"
        + "       WHEN prs_bedrijf_intern = 1"
        + "       THEN 'BI'"
        + "       ELSE 'BE'"
        + "       END pbtype"
        + "  FROM prs_v_aanwezigbedrijf b"
        + " WHERE b.prs_bedrijf_key = " + params.uitvoerendekey
        + filtClause.bedrijf
        + (canbePerslid
          ? " UNION ALL "
            + " SELECT " + S("prs_pers_string") + " uitv_naam"
            + ",   'P' pbtype"
            + "   FROM prs_perslid p"
            + "  WHERE p.prs_perslid_key = " + params.uitvoerendekey
            + filtClause.perslid
          : "");
    var oRs = Oracle.Execute(sql);
    if (oRs.eof) // Misschien (tegenwoordig) uit scope?
    { // Probeer dan maar zonder extra 'where's
      isBad = true;
      sql = " SELECT prs_bedrijf_naam uitv_naam"
          + ", CASE"
          + "  WHEN prs_bedrijf_intern = 1"
          + "  THEN 'BI'"
          + "  ELSE 'BE'"
          + "  END pbtype"
          + " FROM prs_bedrijf b"
          + " WHERE b.prs_bedrijf_key = " + params.uitvoerendekey
          //+ filtClause.bedrijf
          + (canbePerslid
            ? " UNION ALL "
              + "SELECT " + S("prs_pers_string") + " uitv_naam"
              + ", 'P' pbtype"
              + " FROM prs_perslid p"
              + " WHERE p.prs_perslid_key = " + params.uitvoerendekey
              //+ filtClause.perslid
            : "");
      var oRs = Oracle.Execute(sql);
    }
    if (isBad && params.noBad)
    {
      isBad = false;
      params.uitvoerendekey = -1;
    }
    else
    {
      luitvoerendeName = oRs("uitv_naam").Value;
      lpbtype = oRs("pbtype").Value;
    }
    oRs.Close();
  }
  else
  {
    var filtClause = getFiltClauseUitvoerende(params.filtercode, params);
      sqlBP = " SELECT prs_bedrijf_key uitv_key"
            + "      , prs_bedrijf_naam uitv_naam"
          + "        , CASE"
          + "          WHEN prs_bedrijf_intern = 1"
          + "          THEN 'BI'"
          + "          ELSE 'BE'"
          + "          END pbtype"
            + " FROM prs_bedrijf b"
            + " WHERE 1 = 1"
            + filtClause.bedrijf
            + (canbePerslid
              ? " UNION ALL "
                + "SELECT prs_perslid_key uitv_key"
                + "     , " + S("prs_pers_string") + " uitv_naam"
                + "     , 'P' pbtype"
                + " FROM prs_perslid p"
                + " WHERE 1 = 1"
                + filtClause.perslid
                : "")

    sql = "SELECT COUNT(*) aantal"
        + " FROM (" + sqlBP + ")";

    var oRs = Oracle.Execute(sql);
    // Als er maar één vakgroep is, dan deze selecteren.
    if (oRs("aantal").Value == 1)
    {
      sql = "SELECT uitv_key"
          + "     , uitv_naam"
          + "     , pbtype"
          + " FROM (" + sqlBP + ")";

      var oRs = Oracle.Execute(sql);
      params.uitvoerendeKey = oRs("uitv_key").Value;
      luitvoerendeName = oRs("uitv_naam").Value;
      lpbtype = oRs("pbtype").Value;
    }
  }

  // Bouw de url voor de uitvoerenden query op
  var uitvoerendeQueryUrl = rooturl + "/appl/shared/suggest/SuggestUitvoerende.asp"
                          + ((typeof params.autlevel != "undefined")? "?autlevel=" + params.autlevel : "?autlevel=-1")
                          + (params.filtercode? "&filtcode=" + params.filtercode : "")
                          + (params.locatiekey? "&loc_key=" + params.locatiekey : "")
                          + (params.gebouwkey? "&bld_key=" + params.gebouwkey : "")
                          + (params.disciplinekey? "&disc_key=" + params.disciplinekey : "")
                          + (params.onrgoedkey? "&onrgoed_key=" + params.onrgoedkey : "")
                          + (params.lutype? "&lutype=" + params.lutype : "")
                          + (params.externonly? "&externonly=1" : "")
                          + (params.exhandler? "&exhandler=1" : "");
  if (params.label)
  { %><tr <%=params.trclass?"class='"+params.trclass+"'":""%>>
    <td class="label">
      <label class='selector' for="<%=fieldName%>"><%=params.label%>:</label>
    <%=params.moreinfo && !params.readonly ? "<span class='labelextra'><i class='fa fa-info-circle details' onclick='" + objectName + "_uitvoerendedetails(\"" + fieldName + "\")'></i></span>" : ""%>
    </td>
    <td>
<%
  } %>
  <nobr>
    <input id="<%=fieldName%>_show" class="flduitvoerende<%=!params.readonly&&params.required? " required" : ""%><%=params.readonly && params.moreinfo ? " details" : ""%>"
           <% =params.moreinfo && params.readonly ? " title='" + L("lcl_details") + "' onclick='" + objectName + "_uitvoerendedetails(\"" + fieldName + "\")'" : ""%>
           value="<%=safe.htmlattr(luitvoerendeName)%>" placeholder="<%=lwhenEmpty%>"
           <%=params.readonly? " readonly tabindex=-1" : ""%>
           <%=params.onChange && !params.readonly? " sgonChange='" + params.onChange + "'" : ""%>>
    <input type="hidden" id="<%=fieldName%>" name="<%=fieldName%>" value="<%=params.uitvoerendekey%>">
    <%=params.moreinfo && !params.label && !params.readonly ? "<i class='fa fa-info-circle details' onclick='" + objectName + "_uitvoerendedetails(\"" + fieldName + "\")'></i>" : ""%>
    <input type="hidden" id="pbtype" name="pbtype" value="<%=lpbtype%>">
  </nobr>
<%
  if (params.label)
  { %>
    </td></tr>
<%
  }
%>

  <script type="text/javascript">
    function <%=objectName%>_uitvoerendedetails(fieldName)
    {
        var pkey=$('#'+fieldName)[0].value;
        var pname=$('#'+fieldName+'_show')[0].value;
        if (pkey != -1) {
            if ($('#pbtype')[0].value == "P")
              FcltMgr.openDetail("appl/fac/fac_user.asp?prs_key=" + pkey, pname);  // Overweeg een specifiekere, met planningsinfo
            else if ($('#pbtype')[0].value == "BI" || $('#pbtype')[0].value == "BE")
              FcltMgr.openDetail("appl/prs/prs_bedrijf.asp?bedrijf_key=" + pkey, pname);
        } else {
            // FcltMgr.alert("Kies eerst een persoon?");
        }
    }
  </script>

<%
  if (!params.readonly)
  {
    if (params.urlAdd)
    {
      var urlAddTxt = "[";
      for (var i = 0; i < params.urlAdd.length; i++)
      {
        urlAddTxt += (i > 0? ", " : "") + "{ urlParam: \"" + params.urlAdd[i].urlParam + "\", field: \"" + params.urlAdd[i].field + "\" }";
      }
      urlAddTxt += "]"
    }
%>
    <script type="text/javascript">
      jQuery(document).ready( function()
                              {
                                <%=objectName%> = new Suggest({ objectName: "<%=objectName%>",
                                                                queryField: $("#<%=fieldName%>_show")[0],
                                                                queryUrl: "<%=uitvoerendeQueryUrl%>",
                                                                initKey: <%=params.uitvoerendekey? params.uitvoerendekey : -1%>,
                                                                keyField: $("#<%=fieldName%>")[0],
                                                                extraParamField: $("#pbtype")[0], // geeft aan of het een persoon 'P' of intern/extern bedrijf 'BI'/'BE' is.
                                                                initExtraParam: "<%=lpbtype%>"
                                                                <%=params.urlAdd? ", urlAdd: " + urlAddTxt : ""%>
                                                                <%=params.isBad? ", isBad: true": ""%>
                                                                <%=params.readonly? ", fieldReadonly: true": ""%>
                                                              });
                                  if (FcltMgr.getCaller())
                                  {
                                      $("#<%=fieldName%>_caller").show();
                                  }
                               <% if (isBad) { %>
                                 <%=objectName%>.isBad();
                               <% } %>
                              }
                            )
    </script>
<%
  }
}
%>