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

    File:               fac_user_info.asp
    Description:        Details van een user aka persoon
    Parameters:         prs_key (default user_key)
    Context:            Bijvoorbeeld vanuit telefoongids
    Note:

*/ %>

<!-- #include file="../Shared/common.inc" -->
<!-- #include file="../Shared/iface.inc" -->
<!-- #include file="../prs/prs.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 no_ins = getQParamInt("no_ins", 0) == 1; // onderdruk objecten, die zitten al in een ander frame

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();

// 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 FB-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 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")%>");
      }
      function prs_objecten()
      {
            var url = "appl/ins/ins_my_objects.asp";
            FcltMgr.openDetail(url, "<%=L("lcl_spo_header")%>");
      }
<%
      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.
            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: function (data) { $(img).closest("td").next().html(data.wp_aanduiding); } }
                                 );
      }
    </script>
  </head>

  <body id="showbody">
<%  var buttons = [];
    if (!prs_deleted)
    {
      if (canChange) {
          buttons.push({ title: L("lcl_change"), icon: "wijzigen.png", action: "prs_change()", id: "bchange_perslid" });
      }
      if (itsme) {
          if (S("qrc_enable") == 1) {
            buttons.push({ title: L("lcl_qrc_authenticatie"), icon: "qr_code.png", action: "prs_connectmobile()", id: "bconnect_perslid" });
          }
          if (otpsecret // zonder pass nog maar even niet || S("prs_password_otp_mode")==3
                        || S("prs_password_otp_mode")==2 && haspass
                        || S("prs_password_otp_mode")==1 && user.checkAutorisation("WEB_PRSSYS", true)
             )
          {
            buttons.push({ title: L("lcl_otp_authenticatie"), icon: "otp_code.png", action: "prs_showotp()", id: "otp_perslid" });
          }
          buttons.push({ title: L("lcl_password_title"), icon: "wall_brick.png", action: "prs_changepwd()", id: "bchange_pwd" });
          if (S("prs_collegas_used") < 9) {
              buttons.push({ title: L("lcl_prs_frame_substitutes"), icon: "group.png", action: "prs_collegas()", id: "bcollegas" });
          }
          if (xfunc.canWrite("WEB_PRSOBJ"))
              buttons.push({ title: L("lcl_spo_header"), icon: "briefcase.png", action: "prs_objecten()", id: "bobjecten" });
      }
      if (thisUser.prs_perslid_apikey() && (xfunc.canWrite("WEB_PRSSYS"))) {
        buttons.push({ title: L("lcl_prs_apiuser"), icon: "key.png", action: "prs_apikey()", id: "bapikey" });
      }
    }
    IFRAMER_HEADER(L("lcl_prs_frame_algemeen"), buttons);

    var fac_profiel_limiet = -1;
    var sql = "select fp.fac_profiel_limiet, fp.fac_profiel_omschrijving"
            + "  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_limiet = oRs("fac_profiel_limiet").value;
      fac_profiel_omschrijving = oRs("fac_profiel_omschrijving").value;
    }
%>
    <script  type="text/javascript" >
      $(document).ready(function () {
                    FcltMgr.setTitle("<%=itsme ? L("lcl_prs_person_mijndata") : safe.jsstring(thisUser.naam())%>");
                });
    </script>
    <div id="show">
<%    if (prs_deleted == 1)
      {
%>      <div class="prs_deleted"><%=L("lcl_record_is_deleted")%></div><%
      }
%>
      <form name=u2 onSubmit="return false;">
<%      // ============================= PERSOONSGEGEVENS ======================================
        BLOCK_START("prsNaw", L("lcl_prs_basisblok"));
%>      <tr valign="center">
          <td colspan="2"></td><td rowspan="20">
            <img id='photo' class='profile' src="<%=thisUser.photoinfo().photopaththumb %>">
          </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);
        }
        ROFIELDTR('fld', L("lcl_prs_person_dept_name"), thisUser.afdeling().naam());
        ROFIELDTR('fld', L("lcl_prs_person_function"), thisUser.prs_srtperslid(), {suppressEmpty: true});
        ROFIELDTR('fld', L("lcl_prs_person_phone"), thisUser.prs_perslid_telefoonnr(), {suppressEmpty: true});
        ROFIELDTR('fld', L("lcl_prs_person_mobile"), thisUser.prs_perslid_mobiel(), {suppressEmpty: true});
        AFIELDTR('fldmailto details', L("lcl_prs_person_email"), "mailto:" + thisUser.prs_perslid_email(), thisUser.prs_perslid_email(), { suppressEmpty: true });

        ROFIELDTR('fld', L("lcl_prs_person_nr"), thisUser.prs_perslid_nr(), {suppressEmpty: true});

        var algfunc = user.func_enabled2("ALG", { isOptional: true });
        var anyALG = algfunc && algfunc.anyfound;

        for (i = 0; i<thisUser.werkplekken().length; i++)
        {  // order by ?
          var infoPointer = null;
          if (anyALG)
              infoPointer = {Url:"appl/alg/alg_locatie.asp?key="+thisUser.werkplekken()[i].alg_locatie_key()};
          if (S("prs_use_edit_werkplek") < 9 && canChange)
          {
%>          <tr>
              <td class="label">
                <label class="selector"><%=(i==0 ? L("lcl_workplace")+":":null)%></label>
                <span class='labelextra'>
                    <img class='details' src='../Pictures/wijzigen.png'
                         title='<%=L("lcl_change")%>'
                         onclick='edit_werkplek(this, <%=thisUser.werkplekken()[i].prs_perslidwerkplek_key()%>)'>
                </span></td>
              <td><%ROFIELD('fldroom', null, thisUser.werkplekken()[i].prs_werkplek_aanduiding(),{infoPointer: infoPointer}); %></td>
            </tr><%
          }
          else
            ROFIELDTR('fldroom', (i==0 ? 'Werkplek':null), thisUser.werkplekken()[i].prs_werkplek_aanduiding(), {suppressEmpty: true, infoPointer: infoPointer});
        }
        BLOCK_END();

        // ============================= KOSTENGEGEVENS ========================================
        if (itsme || iamfo)
        { // indien ik facilitair ben
          BLOCK_START("prsFin", L("lcl_prs_finblock"));
          ROFIELDTR('fld', L("lcl_account"), thisUser.kpn_string());
          if (thisUser.kpn_budgethouderkey() > 0)
          {
              budgethouderUser = new Perslid(thisUser.kpn_budgethouderkey());
              selfbudgethouder = (prs_key == thisUser.kpn_budgethouderkey());  // ik hoef geen details die ik al zie
              ROFIELDTR('fld', L("lcl_prs_budgethouder"), budgethouderUser.naam(),
                        !selfbudgethouder
                        ? {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)
          {
              ROFIELDTR('fld', L("lcl_prs_profile")   , fac_profiel_omschrijving);
              if (fac_profiel_limiet)
                  ROFIELDTR('fld', L("lcl_prs_mandate_for"), S("currency_pref") + ' ' + safe.curr(fac_profiel_limiet),
                        {infoPointer: {Url:"appl/prs/kpn_mandate_search.asp?prs_key="+prs_key+"&autosearch=1", Title:L("lcl_menu_fin_mandatering")} });
          }
          BLOCK_END();
        }

        // ============================= FLEXKENMERKEN =========================================
        BLOCK_START("prsUsrFlex", L("lcl_prs_flexblok"));
        generateFlexKenmerkCode({link_key: prs_key,
                                 srt_key: prs_srtkey,
                                 niveau: "P",
                                 kenmerk_2col: false,
                                 reado: true,
                                 publiconly: true,
                                 prsauthparams: prs.checkAutorisation(prs_key)
                                 });   // MOETEN WE NOG FORCEREN DAT ALLEEN prsuse WORDT GETOOND?
                                       // Dat doet generateFlex zelf maar?! TODO
        BLOCK_END();

        // ============================= 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"
                  + "  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);
          if (!oRs.eof) {
              BLOCK_START("prsSubst", L("lcl_prs_substitutesblock"));
              while (!oRs.eof) {
                  var params = { infoPointer :{Url : 'appl/fac/fac_user_info.asp?prs_key='+oRs("prs_perslid_key_alt").value }};
                  ROFIELDTR("fldpers", "", oRs("prs_perslid_naam").value, params);
                  oRs.moveNext();
              }
              BLOCK_END();
          }
          oRs.Close()
        }

        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);
              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;

          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)
          {
            BLOCK_START("prsAut", L("lcl_mgt_aut_group"));
            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/facmgtVB/fac_authgroepgrid.asp?FAC_GROEP_KEY=" + oRs("fac_groep_key").value,
                                        Title: L("lcl_menu_fac_autorisatiegroepe")
                                      };
              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();
          }
        }

        // ============================= OBJECTGEGEVENS ========================================
        // Mijn persoonlijke bezittingen, en de mogelijkheid om deze te editen via
        // een button zit bovenin voor de user zelf.
        if (!no_ins && (itsme || iamfo))
        {
          sql=  " SELECT D.ins_deel_omschrijving, "
              + 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_discipline_key = DI.ins_discipline_key"
              + "    AND ins_alg_ruimte_type = 'P'"
              + "    AND ins_alg_ruimte_key = " + prs_key
              + "  ORDER BY 2,1";
          oRs = Oracle.Execute (sql);
          if (!oRs.eof)
          {
            BLOCK_START("prsIns", L("lcl_spo_title"));
            while (!oRs.eof)
            {
%>            <tr>
<%              ROFIELD("fld", oRs("ins_srtdeel_omschrijving").value, oRs("ins_deel_omschrijving").value);
%>            </tr>
<%            oRs.moveNext();
            }
            BLOCK_END();
          }
        }
        // ============================= NOTIFICATIES ========================================
        // Kan de gebruiker uberhaubt *iets* overrulen? Zo nee dan ook geen vinkjes tonen
        var sql = "select count(*) from fac_srtnotificatie"
                + " where fac_srtnotificatie_mode IS NOT NULL"
                + "   AND fac_srtnotificatie_mode > 0"
                + "   AND fac_srtnotificatie_usermode is not null"
                + "   and fac_srtnotificatie_usermode > 0"
        var oRs = Oracle.Execute(sql);
        var anyOverrule = oRs(0).Value > 0;
        oRs.Close();

        if (itsme && anyOverrule)
        {
          BLOCK_START("prsNoti", L("lcl_noti_prsvoorkeur"));
          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" });
            CHECKBOXTR(L("lcl_noti_portal"), "fldfacnoti", "noti1", thisUser.noti_portal(), { html: " disabled" });
            CHECKBOXTR(L("lcl_noti_email"), "fldfacnoti", "noti2", thisUser.noti_email(), { html: " disabled" });
            CHECKBOXTR(L("lcl_noti_sms"), "fldfacnoti", "noti4", thisUser.noti_sms(), { html: " disabled" });
            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();
        }

        if (S("prs_use_mld_wijzigkey") > 0 && itsme)
        {
          BLOCK_START("prsNoti", L("lcl_prs_mldblock"));
            buttons = [{ title: L("lcl_prs_mld_wijzig"), action: "FcltMgr.openDetail('appl/mld/mld_melding.asp?urole=fe&disc="+S("prs_use_mld_wijzigkey")+"', '"+L("lcl_add")+"')" }];
            CreateButtons(buttons);
          BLOCK_END();
        }
%>
      </form>
    </div>
  </body>
</html>
