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