Files
Facilitor/APPL/FAC/fac_user_info.asp
Jos Groot Lipman d6833288f3 UWVA#37141 Notificaties overrulen aanscherpen
svn path=/Website/trunk/; revision=30417
2016-08-25 10:20:49 +00:00

490 lines
23 KiB
Plaintext

<%@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.has("WEB_PRSSYS")
|| user.has("WEB_FACFAC") // die mag het *altijd*
)
{
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())%>");
});
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>
<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"));
Response.write("<tr><td style='text-align: right'>");
if (S("prs_use_edit_photo") && canChange)
{
%><img src='../../appl/Pictures/wijzigen.png' class='details' title='<%=L("lcl_change")%>' onclick='edit_photo(this)'><%
}
Response.write("</td><td class='profile'><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") + ": " + safe.html(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/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();
}
}
// ============================= 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 ========================================
var notis = prs.check4notis();
if (itsme && notis.canany)
{
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" });
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();
}
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>