Files
Facilitor/APPL/Shared/WPFunctions.inc
Peter Feij 7ffa83b54c FSN#26947 perslidwerkplek_verwijder en werkplek_verwijder vervallen
svn path=/Website/trunk/; revision=19017
2013-09-06 16:06:54 +00:00

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