192 lines
7.3 KiB
SQL
192 lines
7.3 KiB
SQL
<% /*
|
|
$Revision$
|
|
$Id$
|
|
|
|
File: FGII/WPFunctions.asp
|
|
Description: Generieke serverside werkplek functies
|
|
Parameters:
|
|
Context:
|
|
Result:
|
|
Note: Voornamelijk gebruikt voor S("prs_werkplek_implicit")==1 en binnen FGII
|
|
*/
|
|
|
|
/************************************************************\
|
|
* Kijk of we schrijfrechten (WEB_PRSBOF) hebben op werkplekken
|
|
* op een bepaalde verdieping
|
|
* Result: false: ik mag niet schrijven
|
|
* true: ik mag wel schrijven
|
|
* Veronderstel dat autorisatie minimaal verdieping is, ruimte wordt niet ondersteund
|
|
\************************************************************/
|
|
function WPCanWrite(vKey)
|
|
{
|
|
// Hebben we wel schrijfrechten op deze werkplek op deze verdieping?
|
|
var sql = "SELECT MIN(fac_gebruiker_alg_level_write) lvl"
|
|
+ " FROM fac_v_webgebruiker w, fac_functie f"
|
|
+ " WHERE w.fac_functie_key = f.fac_functie_key "
|
|
+ " AND w.prs_perslid_key = " + user_key
|
|
+ " AND fac_functie_code = 'WEB_PRSBOF'";
|
|
var oRs = Oracle.Execute(sql);
|
|
if (oRs.eof)
|
|
return false; // Geen rechten
|
|
|
|
var ALGWriteLevel = oRs("lvl").value;
|
|
if (ALGWriteLevel == 9)
|
|
return false; // Geen rechten
|
|
|
|
if (ALGWriteLevel < 0)
|
|
return true; // Alle rechten
|
|
|
|
var fac_v_my_disc_onrgoed_write = ""
|
|
+ "SELECT a.alg_ruimte_key"
|
|
+ " FROM alg_v_onrgoed_familie a,"
|
|
+ " alg_v_onrgoed_familie aa,"
|
|
+ " alg_v_my_room mr"
|
|
+ " WHERE mr.alg_ruimte_key = aa.alg_ruimte_key"
|
|
+ " AND mr.prs_perslid_key = " + user_key
|
|
+ " AND a.alg_onrgoed_elder_key = aa.alg_onrgoed_elder_key"
|
|
+ " AND aa.niveau = a.niveau" // Noodzakelijk want ALG_LOCATIE heeft eigen sequence
|
|
+ " AND aa.niveau >= " + ALGWriteLevel
|
|
|
|
var rsql = " SELECT 1" // plaatsgebonden en gebruiker heeft een plaats (werkplek)
|
|
+ " FROM ("+fac_v_my_disc_onrgoed_write+") oga, alg_ruimte ar"
|
|
+ " WHERE oga.alg_ruimte_key = ar.alg_ruimte_key"
|
|
+ " AND ar.alg_verdieping_key = " + vKey
|
|
|
|
return !(Oracle.Execute(rsql).eof);
|
|
}
|
|
|
|
function WPnextvolg(room_key)
|
|
{
|
|
var sql = "SELECT MIN (prs_werkplek_volgnr + 1) "
|
|
+ " FROM prs_werkplek pw "
|
|
+ " WHERE prs_alg_ruimte_key = " + room_key
|
|
+ " AND NOT EXISTS ( "
|
|
+ " SELECT * "
|
|
+ " FROM prs_werkplek pw2 "
|
|
+ " WHERE prs_alg_ruimte_key = " + room_key
|
|
+ " AND pw2.prs_werkplek_volgnr = pw.prs_werkplek_volgnr + 1)"
|
|
var oRs = Oracle.Execute(sql);
|
|
if (oRs.Eof || oRs(0).Value == null)
|
|
return 1;
|
|
else
|
|
return oRs(0).value;
|
|
}
|
|
|
|
/************************************************************\
|
|
* Verplaats een PERSLIDWERKPLEK naar een andere ruimte door zijn
|
|
* PRS_WERKPLEK over te zetten naar die nieuwe ruimte
|
|
\************************************************************/
|
|
function WPMove_PRS_PERSLIDWERKPLEK(prswp_key, room_key)
|
|
{
|
|
var sql = "SELECT prs_werkplek_key FROM prs_perslidwerkplek"
|
|
+ " WHERE prs_perslidwerkplek_key = " + prswp_key;
|
|
var oRs = Oracle.Execute(sql);
|
|
var wp_key = oRs(0).Value;
|
|
WPMove_PRS_WERKPLEK(wp_key, room_key);
|
|
}
|
|
|
|
/************************************************************\
|
|
* Verplaats een WERKPLEK naar een andere ruimte
|
|
\************************************************************/
|
|
function WPMove_PRS_WERKPLEK(wp_key, room_key)
|
|
{
|
|
var sql = "UPDATE PRS_WERKPLEK"
|
|
+ " SET PRS_ALG_RUIMTE_KEY = " + room_key
|
|
+ " WHERE PRS_WERKPLEK_KEY = " + wp_key;
|
|
try
|
|
{
|
|
Oracle.Execute(sql);
|
|
}
|
|
catch (e) // Neem aan dat volgnummer niet goed was, anders snappen we het niet
|
|
{
|
|
__Log("^^^ PRS_U_PRS_WERKPLEK_VOLGNR hierboven is niet erg: we gaan nu een nieuw volgnummer zoeken:");
|
|
var nextvolg = WPnextvolg(room_key)
|
|
sql = "UPDATE PRS_WERKPLEK"
|
|
+ " SET PRS_ALG_RUIMTE_KEY = " + room_key
|
|
+ " ,PRS_WERKPLEK_VOLGNR = " + nextvolg
|
|
+ " WHERE PRS_WERKPLEK_KEY = " + wp_key;
|
|
var oRs = Oracle.Execute(sql);
|
|
}
|
|
}
|
|
|
|
/************************************************************\
|
|
* Maak een nieuwe werkplek in een ruimte, eventueel virtueel
|
|
* Lever de nieuwe key op
|
|
* params: bVirtual true of false,
|
|
\************************************************************/
|
|
function WPMake_WP(room_key, params)
|
|
{
|
|
params = params || {};
|
|
__Log("Making WP");
|
|
var nextvolg = WPnextvolg(room_key);
|
|
|
|
var sql = "INSERT INTO prs_werkplek w"
|
|
+ " (prs_werkplek_volgnr, prs_werkplek_omschrijving, prs_alg_ruimte_key, prs_werkplek_virtueel)"
|
|
+ " SELECT " + nextvolg + ", alg_ruimte_nr || '/"+nextvolg+"', " + room_key + ", " + (params.bVirtual?1:0)
|
|
+ " FROM alg_ruimte WHERE alg_ruimte_key = " + room_key;
|
|
Oracle.Execute(sql);
|
|
// Effe terugzoeken
|
|
sql = "SELECT prs_werkplek_key"
|
|
+ " FROM prs_werkplek w"
|
|
+ " WHERE w.prs_werkplek_volgnr = " + nextvolg
|
|
+ " AND w.prs_alg_ruimte_key = " + room_key
|
|
var oRs = Oracle.Execute(sql);
|
|
var wp_key = oRs(0).Value;
|
|
oRs.Close();
|
|
return wp_key;
|
|
}
|
|
|
|
/************************************************************\
|
|
* Plaats een persoon (eventueel virtueel) in een ruimte
|
|
* Maak daartoe een nieuwe PRS_WERKPLEK en PRS_PERSLIDWERKPLEK aan
|
|
\************************************************************/
|
|
function WPPlace_PRS_PERSLID(prs_key, room_key, bVirtual)
|
|
{
|
|
__Log("Placing person");
|
|
var wp_key = WPMake_WP(room_key, { bVirtual: bVirtual })
|
|
// Nu PRS_PERSLIDWERKPLEK aanmaken
|
|
var sql = "INSERT INTO prs_perslidwerkplek w"
|
|
+ " (prs_werkplek_key, prs_perslid_key)"
|
|
+ " VALUES (" + wp_key + ", " + prs_key + ")";
|
|
Oracle.Execute(sql);
|
|
}
|
|
|
|
/************************************************************\
|
|
* Verwijder een persoon uit een ruimte
|
|
* Verwijder daartoe zijn PRS_WERKPLEK en PRS_PERSLIDWERKPLEK
|
|
\************************************************************/
|
|
function WPRemove_PRS_PERSLID(prs_key, room_key, bVirtual)
|
|
{
|
|
|
|
|
|
}
|
|
|
|
/************************************************************\
|
|
* Verwijder een aantal perslidwerkplekken en automatisch
|
|
* ook de onderliggende werkplekken
|
|
* wpdel is een comma-separated lijst met PERSLIDWERKPLEK key's
|
|
\************************************************************/
|
|
function WPRemove_PRS_PERSLIDWERKPLEK(pwpdel)
|
|
{
|
|
var sql = "select prs_werkplek_key from prs_perslidwerkplek"
|
|
+ " where prs_perslidwerkplek_key in ("+pwpdel+")";
|
|
var oRs = Oracle.Execute(sql);
|
|
if (!oRs.Eof)
|
|
{
|
|
//var wpdel = oRs.GetString(2,-1,"column-delim","row-delim","null");
|
|
var wpdel = ""
|
|
do
|
|
{
|
|
wpdel += ","+oRs(0).Value; // Komma gescheiden lijst
|
|
oRs.MoveNext();
|
|
} while (!oRs.Eof);
|
|
wpdel = wpdel.substring(1); // Eerst komma er af
|
|
|
|
var sql = "delete prs_perslidwerkplek where prs_perslidwerkplek_key in ("+pwpdel+")";
|
|
Oracle.Execute(sql);
|
|
var sql = "delete prs_werkplek where prs_werkplek_key in ("+wpdel+")";
|
|
Oracle.Execute(sql);
|
|
}
|
|
}
|
|
%>
|