Files
Facilitor/APPL/Shared/persoonselector.inc
Jos Groot Lipman 85dede4f01 FSN#34686 Diverse layout verbeteringen
svn path=/Website/trunk/; revision=27996
2016-02-02 11:15:05 +00:00

203 lines
9.8 KiB
C++

<% /*
$Revision$
$Id$
File: persoonselector.inc
Description: Algemene interface functie om een personen suggestbox te maken
Deze moet je kunnen includen en aanroepen.
Resulteert dan uiteindelijk in een zichtbaar textveld aangemaakt die de persoonnaam bevat (persoonnaam veld)
en een hidden keyveld die de key van de persoon bevat (persoonkey veld).
Het persoonnaam veld heeft geen naam en wordt niet meegesubmit.
Het persoonkey veld heeft een naam en wordt meegesubmit.
Het resultaat heeft de vorm "[<td>label</td><td>]selectveld[</td>]"
parameters: fieldName: veldnaam van het persoonkey veld. Dit veld wordt gesubmit.
objectName: naam van het suggest object dat wordt aangemaakt.
params: object met meegegeven parameters.
perslidKey: initiële key waarde van de persoon die ingevuld moet worden.
label: label dat voor het persoonnaam 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.
autlevel: PRS autorisatie niveau voor de query die gebruikt wordt voor de suggest.
extraParamField: veldnaam voor een extra hidden parameter veld.
isBad: boolean die aangeeft dat het persoonnaam veld als ongeldig
en leeg weergegeven moet worden (true|false(default)).
readonly: geeft aan of het persoonnaam veld readonly weergegeven moet worden (true|false(default)).
filtercode: filtercode van extra filter clausule voor initiële waarde.
moreinfo: geeft een extra informatie button achter het label veld of achter de suggest als er geen label is.
Klikken hierop geeft informatie over de geselecteerde waarde.
suppressEmpty Onderdrukt het veld helemaal indien EN readonly EN leeg.
suppressNoValues Onderdrukt het veld helemaal indien er geen waarden zijn.
noBad Als perslid_key niet gevonden binnen filter dan veld leeglaten
(in plaats van standaard gedrag: naam wel opzoeken maar 'Bad' maken).
*/ %>
<!-- #include file="./Suggest/persoonFilter.inc" -->
<%
FCLTHeader.Requires({ plugins: ["suggest", "jQuery"], js: ["iface.js"] });
function FCLTpersoonselector(fieldName, objectName, params)
{
if (params.suppressNoValues)
{ // Check of er wel waarden zijn.
var filtClause = getFiltClausePersoon(params.filtercode, params);
var extraInf = getExtraInfPersoon(params.extracode);
sql = "SELECT " + S("prs_pers_string") + " naam"
+ extraInf.selectstr
+ " FROM prs_perslid p"
+ ", prs_v_afdeling d"
+ extraInf.fromstr
+ " WHERE p.prs_afdeling_key = d.prs_afdeling_key"
+ filtClause
+ extraInf.wherestr;
var oRs = Oracle.Execute(sql);
if (oRs.Eof)
return; // Er zijn geen waarden
}
if (!(params.perslidKey && params.perslidKey > 0) && params.readonly && params.suppressEmpty) return;
if (typeof params=="undefined") params = {};
var lwhenEmpty = (params.whenEmpty != null ? params.whenEmpty : (params.readonly ? L("lcl_select_readonly") : L("lcl_select_persoon")));
var lperslidName = (device.test(device.supportsPlaceholder) ? "" : lwhenEmpty);
var lextraInit = "";
var isBad = false;
if (params.perslidKey && params.perslidKey > 0)
{
//var filt_params = {};
var filt_params = params // Bijvoorbeeld params.perslidKey ook meegeven aan getFiltClausePersoon. params.perslidKey kan ook meegegeven worden met urlAdd zodat de waarde uit een veld wordt gehaald;
if (params.urlAdd)
{
for (i in params.urlAdd)
{
filt_params[params.urlAdd[i].urlParam] = params.urlAdd[i].init;
}
}
var filtClause = getFiltClausePersoon(params.filtercode, filt_params);
var extraInf = getExtraInfPersoon(params.extracode);
// Is er een initiele waarde meegegeven? Zoek dan de omschrijving erbij
sql = "SELECT " + S("prs_pers_string") + " naam"
+ extraInf.selectstr
+ " FROM prs_perslid p"
+ ", prs_v_afdeling d"
+ extraInf.fromstr
+ " WHERE p.prs_afdeling_key = d.prs_afdeling_key"
+ " AND p.prs_perslid_key = " + params.perslidKey
+ filtClause
+ extraInf.wherestr;
var oRs = Oracle.Execute(sql);
if (oRs.Eof) // Misschien (tegenwoordig) uit scope?
{ // Probeer dan maar zonder extra 'where's
isBad = true;
sql = "SELECT " + S("prs_pers_string") + " naam"
+ extraInf.selectstr
+ " FROM prs_perslid p"
+ ", prs_v_afdeling d"
+ extraInf.fromstr
+ " WHERE p.prs_afdeling_key = d.prs_afdeling_key"
+ " AND p.prs_perslid_key = " + params.perslidKey;
var oRs = Oracle.Execute(sql);
}
if (isBad && params.noBad)
{
isBad = false;
params.perslidKey = -1;
}
else
{
lperslidName = oRs("naam").value;
lextraInit = oRs("extra").value;
}
oRs.Close();
}
// Bouw de url voor de persoons query op
var personQueryUrl = rooturl+"/appl/shared/suggest/SuggestPerslid.asp"
+ ((typeof params.autlevel != "undefined")? "?autlevel=" + params.autlevel : "?autlevel=-1")
+ (params.perslidKey>0? "&perslidKey=" + params.perslidKey : "") // Kan ook met urlAdd meegegeven worden
+ (params.extracode? "&extracode=" + params.extracode : "")
+ (params.filtercode? "&filtcode=" + params.filtercode : "")
+ (params.disc_key? "&disc_key=" + params.disc_key : "");
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'><img alt='' class='details' src='" + rooturl + "/appl/Pictures/detail.png' onclick='iface.persoonDetails(\"" + fieldName + "\")'></span>" : ""%>
</td>
<td>
<%
}
if (params.readonly) { %>
<span id="<%=fieldName%>_show" class="readonly fldpers<%=params.moreinfo ? " details" : ""%>"
<%=params.moreinfo ? " onclick='iface.persoonDetails(\"" + fieldName + "\", \"" + (params.info||"") + "\")'" : "" %>>
<%=safe.html(lperslidName)%>
</span>
<% } else { %>
<input id="<%=fieldName%>_show" class="fldpers<%=params.required? " required" : ""%>" value="<%=safe.htmlattr(lperslidName)%>" placeholder="<%=lwhenEmpty%>"
<%=params.onChange ? " sgonChange='" + params.onChange + "'" : ""%>>
<% } %>
<input type="hidden" id="<%=fieldName%>" name="<%=fieldName%>" value="<%=params.perslidKey%>">
<%=params.moreinfo && !params.readonly && !params.label? "<img alt='' class='details' src='" + rooturl + "/appl/Pictures/exclamation.png' onclick='iface.persoonDetails(\"" + fieldName + "\")'>" : ""%>
<% if (!params.readonly) { %>
<img alt='' class='details' id='<%=fieldName%>_caller'
style="display:none"
onmouseover="iface.showCaller(this)"
src='<%=rooturl%>/appl/Pictures/person.png' onclick='iface.setCaller(<%=objectName%>)'>
<% }
if (params.extraParamField)
{ /* het extra parameter veld wordt door suggest object gevuld */%>
<input type="hidden" id="<%=params.extraParamField%>" name="<%=params.extraParamField%>" value="<%=safe.htmlattr(lextraInit)%>">
<%
}
if (params.label)
{ %>
</td>
</tr>
<%
}
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: "<%=personQueryUrl%>",
initKey: <%=params.perslidKey? params.perslidKey : -1%>,
noJustOne: true, // Controleer niet of er maar één waarde is die geselecteerd moet worden.
keyField: $("#<%=fieldName%>")[0]
<%=params.urlAdd? ", urlAdd: " + urlAddTxt : ""%>
<%=params.extraParamField? ", extraParamField: " + "$(\"#" + params.extraParamField + "\")[0]" + "": ""%>
<%=params.extraParamField? ", initExtraParam: \"" + safe.jsstring("" + lextraInit) + "\"": ""%>
<%=params.isBad? ", isBad: true": ""%>
<%=params.readonly? ", fieldReadonly: true": ""%>
// ,highlightDescript: true
});
if (FcltMgr.getCaller())
{
$("#<%=fieldName%>_caller").show();
}
<% if (isBad) { %>
<%=objectName%>.isBad();
<% } %>
});
</script>
<%
}
}
%>