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

    File:               fac_user_info.asp
    Description:        Toont de details van een user aka persoon, diens profielpagina
                        De intentie is dat een gebruiker de relevante gegevens kan zien, en dat hangt af van je rol:
                        - een collega mag algemene, openbare gegevens zien
                        - iemand met beheerautorisatie mag meer zien
                        - een keyuser die service verleent aan deze persoon kan nog wat meer zien, zoals lopende zaken enzo
                        - ik mag mijn eigen gegevens zien

    Parameters:         prs_key (default user_key)
    Context:            Bijvoorbeeld vanuit telefoongids, elke doorklik vanuit een naam
    Note:

*/ %>

<!-- #include file="../Shared/common.inc" -->
<!-- #include file="../Shared/iface.inc" -->
<!-- #include file="../prs/prs.inc" -->
<!-- #include file="../Shared/selector.inc" -->
<!-- #include file="../API2/api2.inc" -->
<!-- #include file="../prs/prs_flexkenmerk.inc" -->

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


// AUTORISATIEPARAMETERS
var prs_key = getQParamInt("prs_key", user_key);
var itsme = (prs_key == user_key);

var sql = "SELECT prs_srtperslid_key"
        + "     , prs_perslid_otpsecret"
        + "     , prs_perslid_verwijder"
        + "     , prs_perslid_wachtwoord_hash"
        + "  FROM prs_perslid"
        + " WHERE prs_perslid_key = " + prs_key;
var oRs = Oracle.Execute(sql);
if (oRs.Eof)
    shared.record_not_found(); // Kan gebeuren met heel oude gepinde tabbladen

var prs_deleted = oRs("prs_perslid_verwijder").value != null;
var prs_srtkey = oRs("prs_srtperslid_key").value;
var otpsecret = oRs("prs_perslid_otpsecret").Value;
var haspass = oRs("prs_perslid_wachtwoord_hash").Value != null;
oRs.Close();

// In ieder geval deze
prs.checkAutorisation(prs_key);

// TODO autorisaties checken
// van welke personen mag ik deze gegevens zien? Het is denkbaar dat hiervoor de
// WEB_PHONEB-scope wordt gehanteerd, waarmee mensen binnen mijn organisatie of mijn
// gebied kunnen worden bepaald. De overige mensen kunnen bv wel gevonden worden, maar
// daarvan mag ik niet deze detailgegevens bekijken.
//
// Ik val zelf natuurlijk altijd binnen mijn scope, dus mag ik mijn gegevens altijd zien.
// Indien ik weet dat het over mezelf gaat, komen er nog wat extra features beschikbaar,
// zoals wachtwoord wijzigen.

// OVERIGE PARAMETERS
%>
<html>
  <head>
<%  FCLTHeader.Generate();

    // PRS_PHONEB gebruiken voor READ-bepaling, en PRSMAN/PRSUSE of PRSSYS vereisen voor write?

    // Bepaal of ik facilitair-achtigegevens van deze persoon mag zien,
    // geimplementeerd als "I am FO" indien ik schrijfrechten heb voor
    // RES, BES of MLD voor deze persoon, of Systeembeheer
    var xfunc = user.func_enabled("*", null, null, prs_key);
    var iamfo = (xfunc.canWrite("WEB_RESFOF")
                || xfunc.canWrite("WEB_MLDFOF")
                || xfunc.canWrite("WEB_BESFOF")
                || xfunc.canWrite("WEB_PRSSYS"));
    var canChange = ((itsme && xfunc.canWrite("WEB_PROFIL"))
                    || xfunc.canWrite("WEB_PRSMAN")
                    || xfunc.canWrite("WEB_PRSUSE"));

    var prsauthparams = prs.checkAutorisation(prs_key);
    var canImpers = prsauthparams.writetab || (S("prs_allow_impersonate") && prsauthparams.writesys);
    var thisUser = new Perslid(prs_key); // geeft ook alle informatie
%>

    <script type="text/javascript" >
      function prs_change()
      {
          if (FcltMgr.startEdit(window))
              window.location.href = "../prs/prs_edit_perslid.asp?prs_key=<%=prs_key%>";
      }
      function prs_changepwd()
      {
          var url = "../prs/pchange.asp";
          FcltMgr.openModalDetail(url, L("lcl_password_title"));
      }
      function prs_connectmobile()
      {
          var url = "../prs/prs_perslid_qr.asp";
          FcltMgr.openModalDetail(url, L("lcl_qrc_authenticatie"));
      }
      function prs_showotp()
      {
          var url = "../prs/prs_perslid_otp.asp";
          FcltMgr.openModalDetail(url, L("lcl_otp_authenticatie"));
      }
      function prs_collegas()
      {
          var url = "../prs/prs_perslid_substitutes.asp?pkey=<%=prs_key%>";
          FcltMgr.openModalDetail(url, L("lcl_prs_frame_substitutes"), { callback: FcltCallbackRefresh });
      }
<%
      if (thisUser.prs_perslid_apikey() && (xfunc.canWrite("WEB_PRSSYS")))
      {
%>
      function prs_apikey()
      {
            // Idee om hier de apikey te laten wissen om deze user uit de xd-synchronisatie te halen
            // en niet daardoor als key-user te laten tellen.
            // Maar de aanduiding dat het een apiuser is, is ook al wat.
            FcltMgr.alert('<%=safe.jsstring(thisUser.prs_perslid_apikey().substr(0,4) +"..."+ thisUser.prs_perslid_apikey().substr(thisUser.prs_perslid_apikey().length-3))%>');
      }
<%
      }
%>
      function edit_werkplek(img, pwp_key)
      {
          FcltMgr.openModalDetail("../prs/prs_move_perslidwerkplek.asp?pwp_key="+pwp_key, "<%=safe.jsstring(thisUser.naam())%>",
                                        { callback: FcltCallbackRefresh }
                                 );
      }
      <% if (prsauthparams) { %>
      function edit_werklocatie(img, prs_key)
      {
          var url = "../../appl/prs/prs_move_huidigewerkplek.asp?prs_key=" + prs_key;
          FcltMgr.openModalDetail(url, "<%=safe.jsstring(thisUser.naam())%>",
                      { callback: FcltCallbackRefresh });
      }
      <% } %>
<%  if (canImpers) { %>
      function impersCallback(json, textStatus)
      {
          window.top.location.href = "<%=rooturl%>/";
      }

      function prs_impersonate()
      {
        var fnImpers = (reden = "") => {
          var data = { prs_key: <%=prs_key%>
                      , prs_reason: reden
                      };
          <% protectRequest.dataToken("data"); %>
          $.post( "../prs/prs_impersonate.asp"
                , data
                , FcltCallbackAndThen(impersCallback)
                , "json"
                );
        }
<%    if (
        Application("otap_environment") == "O" ||
        Application("otap_environment") == "A"
      ) { %>
        fnImpers();
<%    } else { %>
        params = { oktekst: L("lcl_ok")
                 , title: L("lcl_impersonate")
                 , ishtmlsafe: true
                 , fncallback: function($dialog)
                                {
                                    var reden = $dialog.find("#prs_reden").val();
                                    if (reden.length < 10)
                                    {
                                        FcltMgr.alert(L("lcl_impersonate_abort"));
                                        return false;
                                    }
                                    else
                                    {
                                        fnImpers(reden);
                                    }
                                }
                 , buttons: [{ text: L("lcl_cancel"), icon: "fal fa-fw fa-undo", class: "alertCancel" }]
                 };
        var page_content = L("lcl_impersonate_start").format("<b><%=safe.jsstring(thisUser.prs_perslid_voornaam())%>" + " " + "<%=safe.jsstring(thisUser.prs_perslid_achternaam())%></b>")
                         + '<br>'
                         + '<div>'
                         + '<label for="prs_reden">' + L("lcl_impersonate_reason") + ': </label>'
                         + '<textarea class="fldtxt" id="prs_reden" name="prs_reden" rows="3" minlength="10"></textarea>'
                         + '</div>';
        FcltMgr.mydialog(page_content, params);
<%    } %>
      } // \ prs_impersonate
<%  } %>

    </script>
  </head>

  <body class="showmode">
<%  SUBFRAME_START();
    var buttons = [];
    if (!prs_deleted)
    {
      if (canChange)
          buttons.push({ title: L("lcl_change"), icon: "fa-fclt-edit", action: "prs_change()", id: "bchange_perslid" });

      if (itsme)
      {
          if (S("qrc_enable") == 1)
            buttons.push({ title: L("lcl_qrc_authenticatie"), icon: "fa-mobile", action: "prs_connectmobile()", id: "bconnect_perslid" });

          if (otpsecret || S("prs_password_otp_mode") & 2 && haspass
                        || S("prs_password_otp_mode") & 1 && user.has("WEB_PRSSYS")
                        || user.has("WEB_FACFAC") // die mag het *altijd*
             )
          {
            buttons.push({ title: L("lcl_otp_authenticatie"), icon: "fa-unlock-alt", action: "prs_showotp()", id: "otp_perslid" });
          }
          buttons.push({ title: L("lcl_password_title"), icon: "fa-key", action: "prs_changepwd()", id: "bchange_pwd" });
      }
      if (thisUser.prs_perslid_apikey() && (xfunc.canWrite("WEB_PRSSYS")))
          buttons.push({ title: L("lcl_prs_apiuser"), icon: "fa-code", action: "prs_apikey()", id: "bapikey" });

      if (canImpers && prs_key != user_key && typeof Session("org_user_key") == "undefined")
          buttons.push({ title: L("lcl_impersonate"), icon: "fa-handshake", action: "prs_impersonate()", id: "bimpers" });

      if (itsme && S("prs_use_mld_wijzigkey") > 0)
          buttons.push({ title: L("lcl_prs_mld_wijzig"), icon: "fa-user-edit", action: "FcltMgr.openDetail('appl/mld/mld_melding.asp?urole=fe&disc="+S("prs_use_mld_wijzigkey")+"', '"+L("lcl_add")+"')" });
    }
    IFRAMER_HEADER(L("lcl_prs_frame_algemeen"), buttons);

    var fac_profiel_limiet = -1;
    var sql = "SELECT fp.fac_profiel_limiet, fp.fac_profiel_omschrijving, fp.fac_profiel_key"
            + "  FROM prs_v_aanwezigperslid p, "
            + "       fac_profiel fp"
            + " WHERE prs_perslid_key = " + prs_key
            + "   AND p.fac_profiel_key = fp.fac_profiel_key";

    oRs = Oracle.Execute (sql);
    if (!oRs.eof) {
      fac_profiel_key = oRs("fac_profiel_key").value;
      fac_profiel_limiet = oRs("fac_profiel_limiet").value;
      fac_profiel_omschrijving = oRs("fac_profiel_omschrijving").value;
    }
    oRs.Close();
%>
    <script type="text/javascript">

      $(function ()
      {
        FcltMgr.setTitle("<%=itsme ? safe.jsstring(L("lcl_prs_person_mijndata")) : safe.jsstring(thisUser.naam())%>");
      });

      function edit_photo(img)
      {
        var url = "<%=protectQS.create("../../appl/shared/BijlagenForm.asp?module=SML&key="+prs_key)%>";
        FcltMgr.openModalDetail(url, L("lcl_prs_upload_foto"),
                    { callback: FcltMgr.reload } );
      }
    </script>
<%    if (prs_deleted == 1)
      {
        SIMPLE_BLOCK_START();
%>      <div class="prs_deleted"><%=safe.html(L("lcl_record_is_deleted"))%></div><%
        SIMPLE_BLOCK_END();
      }
%>
      <form name="u2" onSubmit="return false;">

<%      // ============================= PERSOONSGEGEVENS ======================================
        var inlineEdits = true;
        var btns =  [];

        if (thisUser.werkplekken().length == 1)
        {
          if (S("prs_use_edit_werkplek") < 9 && canChange)
          {
            inlineEdits = false;
            btns.push({ icon: "fa-fclt-edit", title: L("lcl_workplace"), action: "edit_werkplek(this, " + thisUser.werkplekken()[0].prs_perslidwerkplek_key() + ")", importance: 2});
          }
        }
          // Fast check to see if we have anything to do with geographics, else do nothing at all
              var sql= "SELECT 1 FROM alg_locatie WHERE alg_locatie_verwijder IS NULL AND (alg_locatie_vervaldatum > SYSDATE OR alg_locatie_vervaldatum IS NULL) AND ROWNUM = 1";
              var oRs = Oracle.Execute(sql);
              var anygeo = !oRs.eof;
              oRs.close();
        if ((prsauthparams.writeuse || prsauthparams.writeself) && anygeo)
            btns.push({ icon: "fa-fclt-edit", title: L("lcl_prs_work_location"), action: "edit_werklocatie(this, " + prs_key + ")", importance: 2});

        BLOCK_START("prsNaw", L("lcl_prs_basisblok"), { buttons: btns, icon: "fa-address-card" });
        Response.write("<tr>"
                      + " <td style='text-align: right'></td>"
                      + " <td class='profile' style='display: flex;align-items: flex-end;'>"
                      + "   <span class='wrapper-span'>"
                      + "     <img id='photo' alt='" + safe.htmlattr(L("fac_profiel")) + " " + safe.htmlattr(L("lcl_photos")) + "' "
                      + (         (S("prs_use_edit_photo") && canChange) ? "onclick='edit_photo(this)'" : "")
                      +             " style='cursor: pointer;' class='profile' src='"
                      +             safe.htmlattr(thisUser.photoinfo().photopaththumb) + "'>"
                      + (     (S("prs_use_edit_photo") && canChange) ?
                               "<span id='editAnim' class='image-edit' title='" + L("lcl_change") + "' onclick='edit_photo(this)'>"
                      +             I("fa-fclt-edit")
                      + "       </span>"                               : "")
                      + "   </span>"
                      + " </td>"
                      + "</tr>");

        ROFIELDTR("fld", L("lcl_prs_person_name"), thisUser.naam());

        // Is persoon een contactpersoon, en zo ja van welk bedrijf.
        sql = "SELECT b.prs_bedrijf_key"
            + "     , b.prs_bedrijf_naam"
            + "  FROM prs_contactpersoon p"
            + "     , prs_bedrijf b"
            + " WHERE p.prs_bedrijf_key = b.prs_bedrijf_key"
            + "   AND prs_contactpersoon_verwijder IS NULL"
            + "   AND prs_perslid_key = " + prs_key;
        oRs = Oracle.Execute(sql);
        if (!oRs.eof)
        {
          var cnt_key = oRs("prs_bedrijf_key").value;
          var cnt_str = oRs("prs_bedrijf_naam").value;
          var params_cnt = { suppressEmpty: true
                           , infoPointer: { Url: "appl/prs/prs_bedrijf.asp?bedrijf_key=" + cnt_key
                                          }
                           };
          ROFIELDTR("fld", L("lcl_prs_perslid_contactpersoon"), cnt_str, params_cnt);
        }
        oRs.Close();

        var params = { suppressEmpty: true };
        if (user.has("WEB_PRSUSE"))
            params.infoPointer = { Url: "appl/prs/prs_bedrijf.asp?bedrijf_key=" + thisUser.afdeling().prs_bedrijf_key() };
        ROFIELDTR("fld", L("lcl_prs_company"), thisUser.afdeling().bedrijf().naam(), params);

        params = {};
        if (user.has("WEB_PRSUSE"))
            params = { infoPointer: { Url: "appl/prs/prs_afdeling.asp?key=" + thisUser.prs_afdeling_key() }};
        ROFIELDTR("fld", L("lcl_prs_person_dept_name"), thisUser.afdeling().naam(), params);

        params = { suppressEmpty: true };
        if (user.has("WEB_PRSMSU"))
            params.infoPointer = { Url: "appl/mgt/prs_srtperslid.asp?mode=show&id=" + thisUser.prs_srtperslid_key() };

        ROFIELDTR("fld", L("lcl_prs_person_function"), thisUser.prs_srtperslid(), params);
        ROFIELDTR("fld", L("lcl_prs_person_phone"), thisUser.prs_perslid_telefoonnr(), { suppressEmpty: true, type: "telefoon" });
        ROFIELDTR("fld", L("lcl_prs_person_mobile"), thisUser.prs_perslid_mobiel(), { suppressEmpty: true, type: "telefoon" });
        ROFIELDTR("fld", L("lcl_prs_person_email"), thisUser.prs_perslid_email(), { suppressEmpty: true, type: "email" });
        var thisPrs = prs.prs_perslid(prs_key, { withWL: true }); // geeft ook alle informatie
        var wl = thisPrs.werklocatie.alg_locatie_key ? thisPrs.werklocatie.aanduiding : "";
        ROFIELDTR("fld", L("lcl_prs_work_location"), wl, { suppressEmpty: true });

        if (itsme || iamfo)
        {
	        ROFIELDTR("fld", L("lcl_prs_person_nr"), thisUser.prs_perslid_nr(), { suppressEmpty: true });
	        ROFIELDTR("fld", L("lcl_lcl_taal"), thisUser.dblang(), { suppressEmpty: true });
	        ROFIELDTR("fld", L("lcl_prs_person_timezone"), thisUser.timezone(), { suppressEmpty: true });
	      }
        sql = api2.splitLOV2sql(L("lcl_prs_person_lcidLOV"));
        FCLTselector("prs_lcid", sql,
                  { label: L("lcl_prs_person_lcid"),
                    initKey: thisUser.lcid(),
                    readonly: true,
                    suppressEmpty: true,
                    extraclass: "notmulti"
                  });
        var algfunc = user.func_enabled2("ALG", { isOptional: true });
        var anyALG = algfunc && algfunc.anyfound;

        for (i = 0; i < thisUser.werkplekken().length; i++)
        {  // order by ?
          var params = { suppressEmpty: true };
          if  (S("ph_placeFG")==1)
          {
              params.infoPointer = {Url:"../cad/showroom.asp?rkey=" + thisUser.werkplekken()[i].alg_ruimte_key(), Modal: true, Title: L("lcl_workplace")};
          }
          else if (anyALG)
          {
              params.infoPointer = {Url:"appl/alg/alg_locatie.asp?key="+thisUser.werkplekken()[i].alg_locatie_key()};
          }
          if (S("prs_use_edit_werkplek") < 9 && canChange) {
            params.labelbutton = { icon: "fa-fclt-edit", title: L("lcl_change"), action: "edit_werkplek(this, " + thisUser.werkplekken()[i].prs_perslidwerkplek_key() + ")" };
          }
          ROFIELDTR("fldroom", (i==0 ? L("lcl_prs_workplace") : "&nbsp;"), thisUser.werkplekken()[i].prs_werkplek_aanduiding(), params);
        }
        ROFIELDTR("fld", L("lcl_prs_person_visibility"), (thisUser.prs_perslid_visibility() ? L("lcl_prs_perslid_visibility1") : L("lcl_prs_perslid_visibility0")), { suppressEmpty: true });

        BLOCK_END();

        // ============================= KOSTENGEGEVENS ========================================
        if (itsme || iamfo)
        { // indien ik facilitair ben
          BLOCK_START("prsFin", L("lcl_prs_finblock"), { icon: "fa-euro-sign" });
          if (thisUser.prs_perslid_key_verantw() > 0)
          {
              var verantwoordelijkeUser = new Perslid(thisUser.prs_perslid_key_verantw());
              ROFIELDTR("fld", L("lcl_prs_person_verantw"), verantwoordelijkeUser.naam(),
                       (prs_key != thisUser.prs_perslid_key_verantw())  // ik hoef geen details die ik al zie
                        ? { infoPointer: { Url: "appl/fac/fac_user_info.asp?prs_key="+thisUser.prs_perslid_key_verantw(), Title:L("lcl_details") }, suppressEmpty: true }
                        : { suppressEmpty: true }
                       );
          }

          params = {suppressEmpty: true};
          if (xfunc.canWrite("WEB_FINMSU"))
              params.infoPointer = { Url: "appl/mgt/prs_kostenplaats.asp?mode=show&id=" + thisUser.prs_kostenplaats_key() };

          ROFIELDTR("fld", L("lcl_account"), thisUser.kpn_string(), params);
          if (thisUser.kpn_budgethouderkey() > 0)
          {
              var budgethouderUser = new Perslid(thisUser.kpn_budgethouderkey());
              ROFIELDTR("fld", L("lcl_prs_budgethouder"), budgethouderUser.naam(),
                        (prs_key != thisUser.kpn_budgethouderkey())  // ik hoef geen details die ik al zie
                        ? { infoPointer: { Url: "appl/fac/fac_user_info.asp?prs_key="+thisUser.kpn_budgethouderkey(), Title:L("lcl_details") }, suppressEmpty: true }
                        : { suppressEmpty: true }
                       );
          }

          if (fac_profiel_limiet != -1)
          {
              params = {};
              if (xfunc.canWrite("WEB_FINMSU"))
                 params.infoPointer = { Url: "appl/mgt/fac_profiel.asp?mode=show&id=" + fac_profiel_key };
              ROFIELDTR("fld", L("lcl_prs_profile"), fac_profiel_omschrijving, params);
              if (fac_profiel_limiet)
                  ROFIELDTR("fld", L("lcl_prs_mandate_for"), fac_profiel_limiet,
                        { datatype: "currency", prefix: true, infoPointer: { Url:"appl/prs/kpn_mandate_search.asp?prs_key="+prs_key+"&autosearch=1", Title:L("lcl_menu_fin_mandatering") } });
          }
          BLOCK_END();
        }

        // ============================= FLEXKENMERKEN =========================================
        // de autorisatie van de user wordt toegepast, maar dankzij includepublic worden alle flexkenmerken met prs_kenmerk_toonbaar&2
        // sowieso getoond als je canRead("WEB_PROFIL") hebt
        generateFlexKenmerkCode({link_key: prs_key,
                                 srt_key: prs_srtkey,
                                 niveau: "P",
                                 kenmerk_2col: false,
                                 reado: true,
                                 includepublic: xfunc.canRead("WEB_PROFIL")
                                 });
        // ============================= VERVANGERS ============================================
        if (S("prs_collegas_used") < 9 && (itsme || iamfo))
        {  // indien ik facilitair ben
          var sql = "SELECT pc.prs_perslid_key_alt"
                  + "     , " + S("prs_pers_string") + " prs_perslid_naam"
                  + "     , prs_collega_vervaldatum"
                  + "  FROM prs_collega pc"
                  + ",      prs_perslid p"
                  + " WHERE pc.prs_perslid_key_alt = p.prs_perslid_key"
                  + "   AND pc.prs_perslid_key = " + prs_key
                  + " ORDER BY 2";
          var oRs = Oracle.Execute (sql);
          var btns = [];
          if (S("prs_collegas_used") < 9) {
            btns.push({ title: L("lcl_prs_frame_substitutes"), icon: "fa-fclt-edit", action: "prs_collegas()", id: "bcollegas", importance: 2});
          }
          BLOCK_START("prsSubst", L("lcl_prs_substitutesblock"), { icon: "fa-people-arrows", buttons: btns });
          var i=0;
          // de enige reden om een volgnummertje te laten zien is esthetisch, niet verder vertellen
          while (!oRs.eof) { %>
            <tr>
              <td onclick="FcltMgr.openDetail('appl/fac/fac_user_info.asp?prs_key=<%=oRs("prs_perslid_key_alt").Value%>', { reuse: true })">
                <span class="details">
                  <%=safe.html(oRs("prs_perslid_naam").value)%>
                </span>
              </td>
              <td>
                <%=(oRs("prs_collega_vervaldatum").value !== null ? safe.html(L("lcl_tot") + " " + toDateString(oRs("prs_collega_vervaldatum").value, true)) : "")%>
              </td>
            </tr>
<%          oRs.moveNext();
          }
          BLOCK_END();
          oRs.Close()
        }

        if ((itsme || iamfo))
        {
          BLOCK_START("prsSubstTo", L("lcl_prs_replaceblock"), { icon: "fa-people-arrows" });
            var sql_o = "SELECT pc.prs_perslid_key"
                      + "     , " + S("prs_pers_string") + " prs_perslid_naam"
                      + "     , prs_collega_vervaldatum"
                      + "  FROM prs_collega pc"
                      + "     , prs_perslid p"
                      + " WHERE pc.prs_perslid_key = p.prs_perslid_key"
                      + "   AND pc.prs_perslid_key_alt = " + prs_key
                      + " ORDER BY 2";
            var oRs_o = Oracle.Execute("SELECT COUNT(*) aantal FROM (" + sql_o + ")");
            var vervangt_aantal = oRs_o("aantal").Value;
            oRs_o.Close();
            if (vervangt_aantal <= S("prs_collegas_groep"))
            {
              oRs_o = Oracle.Execute(sql_o);
              var i = 0;
              // de enige reden om een volgnummertje te laten zien is esthetisch, niet verder vertellen
              while (!oRs_o.eof) { %>
                <tr>
                  <td onclick="FcltMgr.openDetail('appl/fac/fac_user_info.asp?prs_key=<%=oRs_o("prs_perslid_key").Value%>', { reuse: true })">
                    <span class="details">
                      <%=safe.html(oRs_o("prs_perslid_naam").value)%>
                    </span>
                  </td>
                  <td>
                    <%=(oRs_o("prs_collega_vervaldatum").value !== null ? safe.html(L("lcl_tot") + " " + toDateString(oRs_o("prs_collega_vervaldatum").value, true)) : "")%>
                  </td>
                </tr>
<%              oRs_o.moveNext();
              }
              oRs_o.Close();
            }
            else
            {
                ROFIELDTR("fldpers", "", L("lcl_prs_substitutes_toomany").format(vervangt_aantal));
            }
          BLOCK_END();
        }

        if (S("prs_collegas_groep") > 0 && (itsme || iamfo))
        {
          var sql = "SELECT fac_groep_omschrijving, fac_groep_key"
                  + "  FROM fac_groep"
                  + " WHERE fac_groep_key IN "
                  + "     (SELECT fac_groep_key"
                  + "        FROM fac_gebruikersgroep"
                  + "       WHERE prs_perslid_key = " + prs_key
                  + "         AND fac_groep_collega = 1)";
          var oRs = Oracle.Execute (sql);
          while (!oRs.eof)
          {
              BLOCK_START("prsSubst", L("lcl_prs_substitutesblock") + ": " + oRs("fac_groep_omschrijving").Value, {icon: "fa-people-arrows"});
              var sql = "SELECT p.prs_perslid_key"
                      + ", " + S("prs_pers_string") + " prs_perslid_naam"
                      + "  FROM fac_gebruikersgroep fgg"
                      + ",      prs_perslid p"
                      + " WHERE fgg.prs_perslid_key = p.prs_perslid_key"
                      + "   AND fgg.prs_perslid_key <> " + prs_key
                      + "   AND fgg.fac_groep_key = " + oRs("fac_groep_key").Value
                      + " ORDER BY 2";
              var oRs2 = Oracle.Execute (sql);
              while (!oRs2.eof)
              {
                  var params = { infoPointer :{Url : 'appl/fac/fac_user_info.asp?prs_key='+oRs2("prs_perslid_key").Value }};
                  ROFIELDTR("fldpers", "", oRs2("prs_perslid_naam").Value, params);
                  oRs2.moveNext();
              }
              oRs2.Close();
              BLOCK_END();

              oRs.moveNext();
          }
          oRs.Close();
        }

        // ============================= LOGIN- EN AUTORISATIEGROEPGEGEVENS ====================
        // Indien Ik beheer ben laat ik lekker handig de autorisatiegroepen zien
        if (xfunc.canWrite("WEB_PRSSYS") || xfunc.canRead("WEB_PRSMSU") || xfunc.canWrite("WEB_FACMGT"))
        {
          // bereken de waarderingsgegevens van de persoon
          var sql = "SELECT AVG(waardering) gemiddeld"
                  + "     , COUNT(waardering) aantal_reacties"
                  + "     , COUNT(*) totaal"
                  + "  FROM ("
                          +  "SELECT mld_melding_satisfaction waardering"
                          +  "     , prs_perslid_key"
                          +  "     , mld_melding_einddatum rekendatum"
                          +  "  FROM mld_melding"
                          +  " UNION ALL "
                          +  "SELECT bes_bestelling_satisfaction"
                          +  "     , prs_perslid_key"
                          +  "     , bes_bestelling_leverdatum"
                          +  "  FROM bes_bestelling"
                          +  " UNION ALL "
                          +  "SELECT res_rsv_ruimte_satisfaction"
                          +  "     , res_rsv_ruimte_contact_key"
                          +  "     , res_rsv_ruimte_van"
                          +  "  FROM res_rsv_ruimte"
                  + "       ) all_satisfaction"
                  + " WHERE prs_perslid_key = " + prs_key
                  + "   AND rekendatum BETWEEN (SYSDATE - " + S("personal_satisfaction_period") + ")"
                                       + " AND  SYSDATE";
          oRs = Oracle.Execute (sql);
          var aantal_reacties = oRs("aantal_reacties").value;
          var gem_waardering = oRs("gemiddeld").value;
          var totaal = oRs("totaal").value;
          oRs.Close();

          var sql = "SELECT g.fac_groep_omschrijving"
                  + "     , g.fac_groep_key"
                  + "  FROM fac_groep g, fac_gebruikersgroep gg"
                  + " WHERE g.fac_groep_key = gg.fac_groep_key"
                  + "   AND gg.prs_perslid_key = " + prs_key
                  + " ORDER BY 1";
          oRs = Oracle.Execute (sql);
          if (!oRs.eof)
          {
            // Een vooralsnog hidden aanzetje voor de "waarde" van een user
            // in de lijn van een geverifieerde artiest op spotify
            // of een actieve deelnemer aan een forum. Je kunt een waardering
            // krijgen voor de hoeveelheid interactiviteit, hier plat afgemeten
            // aan het aantal trackingregels dat je in het afgelopen jaar veroorzaakte.
            // Wanneer we ooit aan de AI toe zijn, zou dit een weegfactor kunnen zijn,
            // nauwkeuriger te berekenen in een prs_perslid_xx kolom. Dan zou je een
            // markering (reddit: flare) bij die user kunnen tonen om deze meer serieus
            // te nemen dan iemand anders. Dat zouden ook de users zijn de we voor een
            // usertest uit zouden kunnen nodigen. Een badge op de avatar zou kunnen.
            // Voor de grap nu ongedocumenteerd hier tonen, kijken of het iemand opvalt.
            var flare = "";
            var sql2 = "SELECT COUNT (*) flare"
                    + "  FROM fac_tracking"
                    + " WHERE fac_tracking_datum > SYSDATE - 365 AND prs_perslid_key =" + prs_key;
            var oRs2 = Oracle.Execute (sql2);
            if (oRs2("flare").value > 1000)
              flare = "fa-trophy-alt";
            else if (oRs2("flare").value > 500)
              flare = "fa-medal";
            else if (oRs2("flare").value > 100)
              flare = "fa-award";
            else
              flare = "fa-portal-enter";
            oRs2.Close();

            BLOCK_START("prsAut", L("lcl_mgt_aut_group"), {icon: flare});
            ROFIELDTR("fld",L("lcl_prs_person_login"), thisUser.oslogin(), { suppressEmpty: true });
            ROFIELDTR("fld",L("lcl_prs_person_login2"), thisUser.oslogin2(), { suppressEmpty: true });
            var i= 0;
            while (!oRs.eof)
            {
              params = {};
              if (xfunc.canWrite("WEB_PRSMSU"))
                 params.infoPointer = { Url: "appl/mgt/fac_functie.asp?fac_groep=" + oRs("fac_groep_key").value };
              ROFIELDTR("fld", (i == 0 ? L("lcl_mgt_aut_group") : ""), oRs("fac_groep_omschrijving").value, params);
              i++;
              oRs.moveNext();
            }
            ROFIELDTR("fld", L("lcl_prs_person_lastlogin"), toDateTimeString(thisUser.login()), { suppressEmpty: true });
            // We kunnen gedetecteerd hebben waar iemand laatst was:
            if (thisUser.prs_perslid_bezetdatum() != null) {
                ROFIELDTR("fld", L("lcl_prs_person_lastchecked_place"), new Locatie(thisUser.alg_locatie_key({ withcurrent:true })).locatie_string());
                ROFIELDTR("fld", L("lcl_prs_person_lastchecked_time"), toDateTimeString(thisUser.prs_perslid_bezetdatum()));
            }
            // klanttevredenheid
            if (aantal_reacties > 0)
                ROFIELDTR("fld", L("lcl_fac_like_mijnoordeel"), gem_waardering.toFixed(1) + "   ( "+aantal_reacties+" / "+totaal+" )");
            BLOCK_END();
          }
          oRs.Close();
        }

        // ============================= OBJECTGEGEVENS ========================================
        // Mijn persoonlijke bezittingen, en de mogelijkheid om deze te editen via
        // een button zit bovenin voor de user zelf.
        if (itsme || (iamfo && S("prs_fof_show_belongings") == 1))
        {
          sql=  " SELECT D.ins_deel_omschrijving, D.ins_deel_opmerking, "
              + lcl.xsqla('SD.ins_srtdeel_omschrijving','SD.ins_srtdeel_key') +","
              + "        D.ins_deel_key,"
              + "        di.ins_discipline_min_level auth, sd.ins_srtdeel_key"
              + "   FROM ins_v_aanwezigdeel D,ins_v_aanwezigsrtdeel SD, ins_discipline DI"
              + "  WHERE D.ins_srtdeel_key = SD.ins_srtdeel_key"
              + "    AND (D.ins_deel_vervaldatum IS NULL OR D.ins_deel_vervaldatum > SYSDATE)"
              + "    AND D.ins_discipline_key = DI.ins_discipline_key"
              + "    AND ins_alg_ruimte_type = 'P'"
              + "    AND ins_alg_ruimte_key = " + prs_key
              + "  ORDER BY 3,1";
          oRs = Oracle.Execute (sql);
          if (!oRs.eof)
          {
            BLOCK_START("prsIns", L("lcl_spo_title"), { icon: "fa-suitcase" });
            while (!oRs.eof)
            {
%>            <tr>
<%              ROFIELD("fld", oRs("ins_srtdeel_omschrijving").value, oRs("ins_deel_omschrijving").value + (oRs("ins_deel_opmerking").value? " - " + oRs("ins_deel_opmerking").value : ""));
%>            </tr>
<%            oRs.moveNext();
            }
            BLOCK_END();
          }
          oRs.Close();
        }
        // ============================= NOTIFICATIES ========================================
        var notis = prs.check4notis();

        if (itsme && notis.canany)
        {
          BLOCK_START("prsNoti", L("lcl_noti_prsvoorkeur"), { icon: "fa-bell-on"} );
          if (thisUser.noti_niks() == 1 || thisUser.noti_portal() == 1 || thisUser.noti_email() == 1 || thisUser.noti_sms() == 1 || thisUser.noti_popup() == 1)
          {
            CHECKBOXTR(L("lcl_noti_niks"), "fldfacnoti", "noti0", thisUser.noti_niks(), { html: " disabled" });
            if (notis.can1) CHECKBOXTR(L("lcl_noti_portal"), "fldfacnoti", "noti1", thisUser.noti_portal(), { html: " disabled" });
            if (notis.can2) CHECKBOXTR(L("lcl_noti_email"), "fldfacnoti", "noti2", thisUser.noti_email(), { html: " disabled" });
            if (notis.can4) CHECKBOXTR(L("lcl_noti_sms"), "fldfacnoti", "noti4", thisUser.noti_sms(), { html: " disabled" });
            if (notis.can8) CHECKBOXTR(L("lcl_noti_popup"), "fldfacnoti", "noti8", thisUser.noti_popup(), { html: " disabled" });
          }
          else
          {%>
            <tr id="noNotipref">
              <td class="label" colspan="2">
                <label><span><%=L("lcl_no_noti_prsvoorkeur")%></span></label>
              </td>
            </tr>
          <%}
          BLOCK_END();
        }
%>
      </form>
<% SUBFRAME_END(); %>
  </body>
</html>
<% ASPPAGE_END(); %>
