Files
Facilitor/CUST/UWVA/custfunctions.wsc
Jos Groot Lipman 831cfb8cb4 Te veel ARO timeouts in de logging, iets meer tijd geven
svn path=/Website/branches/v5.4.3/; revision=23530
2014-12-03 08:32:27 +00:00

473 lines
18 KiB
XML

<?xml version="1.0"?>
<component>
<?component error="true" debug="true"?>
<registration
description="custfunctions"
progid="custfunction.wsc"
version="1.00"
classid="{4F51571C-1DFC-4769-B8DD-37B356378F12}"
>
</registration>
<public>
<!-- properties -->
<property name="Oracle">
<put/>
</property>
<property name="__Log">
<put/>
</property>
<property name="__DoLog">
<put/>
</property>
<property name="safe">
<put/>
</property>
<!-- methods -->
<method name="bez_postsave">
<PARAMETER name="bezkeyArr"/>
</method>
<method name="res_postsave">
<PARAMETER name="rsv_ruimte_key"/>
</method>
<method name="mld_postsave">
<PARAMETER name="melding_key"/>
</method>
<method name="API_PHONEBOOK">
<PARAMETER name="prs_key"/>
<PARAMETER name="data"/>
</method>
<method name="bes_punch_receive">
<PARAMETER name="RequestForm"/>
<PARAMETER name="bes_srtdeel_key"/>
<PARAMETER name="item"/>
</method>
</public>
<script language="javascript">
<![CDATA[
/* properties */
function put_Oracle(newValue) {Oracle = newValue};
function put___Log(newValue) {__Log = newValue};
function put___DoLog(newValue) {__DoLog = newValue};
function put_safe(newValue) {safe = newValue};
/* methods */
/*
$Revision$
$Id$
File: UWVAcustfunction.wsc
*/
/* Dit zijn de enige drie functies die je mag gebruiken */
var Oracle;
var __Log;
var __DoLog;
var safe;
// ARO
var ARO_RootUrl = "https://www.agressieregistratieoverheid.nl/services/";
var ARO_User = "ARO-facilitor@uwv.nl";
var ARO_Pass = "G<9k3k)1";
var ARO_bez_bsn_key = 1; // bez flex to perform ARO-BSN-Check against
//var ARO_bez_warn_key = 2; // bez flex to register ARO-BSN-Check-result (if true)
var ARO_bsnsrt_key = 3; // res srtflex to perform ARO-BSN-Check against
var ARO_warnsrt_key = 41; // res srtflex to register ARO-BSN-Check-result (if true)
//var ARO_mld_bsnsrt_key = 105; // mld srtflex to perform ARO-BSN-Check against
var ARO_mld_bsn_key = 109; // mld flex to perform ARO-BSN-Check against (SpoBiLo)
//var ARO_mld_warnsrt_key = 11; // mld srtflex to register ARO-BSN-Check-result (if true)
var ARO_mld_warn_key = 115; // mld flex to register ARO-BSN-Check-result (if true)
UWVA_ARO =
{
http_get: function _http_get(url)
{
var http_request = new ActiveXObject("MSXML2.ServerXMLHTTP.6.0");
// Het mag niet te lang duren!
var lResolve = 1 * 1000;
var lConnect = 1 * 1000;
var lSend = 1 * 1000;
var lReceive = 2 * 1000; // 1 seconde wordt in de praktijk te vaak overschreden
http_request.setTimeouts(lResolve, lConnect, lSend, lReceive);
http_request.open("GET", url, false); // Synchroon nog even
//http_request.setRequestHeader("Content-Type", "application/json; charset=utf-8");
__Log("Getting ARO: " + url);
http_request.send();
if (http_request.status != 200)
{
__DoLog("ARO: " + http_request.status + "<br>" + http_request.statusText, "#FF0000");
return null;
}
__Log("Returning: " + http_request.responseText);
return http_request.responseText;
},
Check: function _Check(bsn, RootUrl, User, Pass)
{
try
{
var tokentxt = UWVA_ARO.http_get(RootUrl + "AuthenticationService.svc/RequestToken?username=" + User + "&password=" + Pass);
if (!tokentxt)
return false;
var token = eval('(' + tokentxt + ')').d;
var tmstart = (new Date).getTime();
var lookuptxt = UWVA_ARO.http_get(RootUrl + "IncidentService.svc/TokenizedRegistratieLookupByBsn?bsn="+bsn+"&guid="+token);
var tmend = (new Date).getTime();
if (tmend - tmstart > 1000)
__DoLog("Slow ARO check took " + (tmend - tmstart) + "ms", "#FFFF00");
if (!lookuptxt)
return false;
var lookup = eval('(' + lookuptxt + ')').d;
UWVA_ARO.http_get(RootUrl + "AuthenticationService.svc/ExpireToken?guid="+token);
return lookup;
}
catch (e)
{
__DoLog("ARO Controle mislukt: " + e.description, "#FF0000");
return false;
}
}
}
bez_postsave = function (bezkeyArr, pResult)
{
for (var i = 0; i < bezkeyArr.length; i++)
{
var sql = "SELECT bkw.bez_kenmerkwaarde_waarde"
+ " , bkw.bez_kenmerkwaarde_aanmaak"
+ " FROM bez_kenmerkwaarde bkw"
+ " WHERE bkw.bez_kenmerk_key = " + ARO_bez_bsn_key // BSN-nummer
+ " AND bkw.bez_bezoekers_key = " + bezkeyArr[i];
var oRs = Oracle.Execute(sql);
if (!oRs.Eof)
{
var bsn = oRs("bez_kenmerkwaarde_waarde").Value;
var aanmaak = new Date(oRs("bez_kenmerkwaarde_aanmaak").Value);
var expire = new Date();
expire.setMinutes(expire.getMinutes() - 5);
if (aanmaak < expire)
{
__Log("BSN " + bsn + " niet opnieuw controleren, is al gebeurd om: " + aanmaak);
continue; // Volgende bezoeker
}
var chk = UWVA_ARO.Check(bsn, ARO_RootUrl, ARO_User, ARO_Pass);
if (chk == null)
break; // De (eerste) bezoeker geeft een timeout. Dan de rest niet meer doen.
var sql = "UPDATE bez_bezoekers SET bez_afspraak_opmerking = NULL WHERE bez_bezoekers_key = " + bezkeyArr[i];
Oracle.Execute(sql);
if (chk)
{
// UWVA#30245: Opmerking vullen ipv. kenmerk 'ARO_bez_warn_key' zoals voorheen!
var sql = "UPDATE bez_bezoekers SET bez_afspraak_opmerking = 'LET OP: BSN staat in ARO [' || TO_CHAR(SYSDATE, 'DD-MM-YYYY') || ']' WHERE bez_bezoekers_key = " + bezkeyArr[i];
Oracle.Execute(sql);
}
}
else
{ // Waarde van kenmerk "bsn" (niet verplicht) is niet ingevuld.
// Omdat deze net leeg gemaakt kan zijn kan Opmerking nog gevuld zijn. Deze voor de zekerheid wissen.
// UWVA#30245: Opmerking wissen ipv. kenmerk 'ARO_bez_warn_key' zoals voorheen!
var sql = "UPDATE bez_bezoekers SET bez_afspraak_opmerking = NULL WHERE bez_bezoekers_key = " + bezkeyArr[i];
Oracle.Execute(sql);
}
oRs.Close();
}
return true;
}
res_postsave = function (rsv_ruimte_key, pResult)
{
if (ARO_warnsrt_key < 0)
return true;
var sql = "SELECT rk.res_kenmerk_key"
+ " FROM res_kenmerk rk, res_rsv_ruimte rrr"
+ " WHERE rk.res_srtkenmerk_key = " + ARO_warnsrt_key // Waarschuwing flex kenmerk
+ " AND rrr.res_rsv_ruimte_key = " + rsv_ruimte_key
+ " AND rrr.res_activiteit_key = rk.res_activiteit_key";
var oRs = Oracle.Execute(sql);
if (oRs.Eof) // deze activiteit heeft geen ARO-waarschuwing-kenmerk
{
oRs.Close();
return true;
}
var warn_key = oRs("res_kenmerk_key").Value;
var sql = "SELECT LPAD(rkw.res_kenmerkreservering_waarde,9,'0') res_kenmerkreservering_waarde"
+ " FROM res_kenmerk rk, res_kenmerkwaarde rkw"
+ " WHERE rk.res_srtkenmerk_key = " + ARO_bsnsrt_key // BSN-nummer
+ " AND rk.res_kenmerk_key = rkw.res_kenmerk_key"
+ " AND rkw.res_rsv_ruimte_key = " + rsv_ruimte_key;
var oRs = Oracle.Execute(sql);
if (!oRs.Eof)
{
var bsn = oRs("res_kenmerkreservering_waarde").Value;
var chk = UWVA_ARO.Check(bsn, ARO_RootUrl, ARO_User, ARO_Pass);
var sql = "DELETE FROM res_kenmerkwaarde rkw"
+ " WHERE rkw.res_rsv_ruimte_key = " + rsv_ruimte_key
+ " AND rkw.res_kenmerk_key = " + warn_key;
Oracle.Execute(sql);
if (chk)
{
var sql = "INSERT INTO res_kenmerkwaarde(res_rsv_ruimte_key, res_kenmerk_key, res_kenmerkreservering_waarde) "
+ " VALUES (" + rsv_ruimte_key + ", " + warn_key + ", TO_CHAR(SYSDATE, 'DD-MM-YYYY'))";
Oracle.Execute(sql);
}
}
oRs.Close();
// Flex naar bezoekers synchroniseren
var sql = "BEGIN "
+ " res.follow_afspraak (" + rsv_ruimte_key + ", " + 7 /*res_copy_to_bez*/ + "); " // flex overnemen verplaatsen
+ "END;";
Oracle.Execute(sql);
return true;
}
mld_postsave = function (melding_key, pResult)
{
if (ARO_mld_warn_key < 0)
return true;
var sql = "SELECT mk.mld_kenmerk_key"
+ " FROM mld_kenmerk mk, mld_melding m"
+ " WHERE mk.mld_kenmerk_key = " + ARO_mld_warn_key // Waarschuwing flex kenmerk
+ " AND m.mld_melding_key = " + melding_key
+ " AND m.mld_stdmelding_key = mk.mld_stdmelding_key"
+ " AND mk.mld_kenmerk_niveau = 'S'";
var oRs = Oracle.Execute(sql);
if (oRs.Eof) // deze stdmelding heeft geen ARO-waarschuwing-kenmerk
{
oRs.Close();
return true;
}
var sql = "SELECT km.mld_kenmerkmelding_waarde"
+ " FROM mld_kenmerk mk, mld_kenmerkmelding km"
+ " WHERE mk.mld_kenmerk_key = " + ARO_mld_bsn_key // BSN-nummer
+ " AND mk.mld_kenmerk_key = km.mld_kenmerk_key"
+ " AND km.mld_melding_key = " + melding_key;
var oRs = Oracle.Execute(sql);
if (!oRs.Eof)
{
var bsn = oRs("mld_kenmerkmelding_waarde").Value;
var chk = UWVA_ARO.Check(bsn, ARO_RootUrl, ARO_User, ARO_Pass);
var sql = "DELETE FROM mld_kenmerkmelding km"
+ " WHERE km.mld_melding_key = " + melding_key
+ " AND km.mld_kenmerk_key = " + ARO_mld_warn_key;
Oracle.Execute(sql);
if (chk)
{
var sql = "INSERT INTO mld_kenmerkmelding(mld_melding_key, mld_kenmerk_key, mld_kenmerkmelding_waarde) "
+ " VALUES (" + melding_key + ", " + ARO_mld_warn_key + ", TO_CHAR(SYSDATE, 'DD-MM-YYYY'))";
Oracle.Execute(sql);
}
}
oRs.Close();
return true;
}
API_PHONEBOOK =
function (prs_key, data)
{
var result = {};
//
// Toestel
//
var sql = "SELECT prs_kenmerklink_waarde"
+ " FROM prs_kenmerklink"
+ " WHERE prs_link_key = " + prs_key
+ " AND prs_kenmerklink_niveau = 'P'"
+ " AND prs_kenmerklink_verwijder IS NULL"
+ " AND prs_kenmerk_key = 1160"; // toestel
var oRs = Oracle.Execute(sql);
if (!oRs.Eof)
{
result.uwva_toestel = safe.html(oRs("prs_kenmerklink_waarde").Value);
}
oRs.Close();
//
// Mobiel verkort
//
var sql = "SELECT prs_kenmerklink_waarde"
+ " FROM prs_kenmerklink"
+ " WHERE prs_link_key = " + prs_key
+ " AND prs_kenmerklink_niveau = 'P'"
+ " AND prs_kenmerklink_verwijder IS NULL"
+ " AND prs_kenmerk_key = 1175"; // mobiel verkort
var oRs = Oracle.Execute(sql);
if (!oRs.Eof)
{
result.uwva_mobielverkort = safe.html(oRs("prs_kenmerklink_waarde").Value);
}
oRs.Close();
//
// Alt afdeling
//
result.uwva_afdeling = data.afdeling;
var sql = "SELECT d.prs_afdeling_naam4 afd"
+ " FROM prs_kenmerklink, uwva_v_alt_afdeling d"
+ " WHERE prs_link_key = " + prs_key
+ " AND prs_kenmerklink_niveau = 'P'"
+ " AND prs_kenmerklink_verwijder IS NULL"
+ " AND prs_kenmerk_key = 1173" // Alternatieve afdeling
+ " AND fac.safe_to_number(prs_kenmerklink_waarde) = prs_afdeling_key"
var oRs = Oracle.Execute(sql);
if (!oRs.Eof)
{
result.uwva_afdeling = safe.html(oRs("afd").Value);
}
oRs.Close();
//
// Alt functie
//
result.uwva_functie = data.prs_srtperslid;
var sql = "SELECT prs_srtperslid_omschrijving fnc"
+ " FROM prs_kenmerklink, prs_srtperslid"
+ " WHERE prs_link_key = " + prs_key
+ " AND prs_kenmerklink_niveau = 'P'"
+ " AND prs_kenmerklink_verwijder IS NULL"
+ " AND prs_kenmerk_key = 1192" // Alternatieve functie
+ " AND fac.safe_to_number(prs_kenmerklink_waarde) = prs_srtperslid_key"
var oRs = Oracle.Execute(sql);
if (!oRs.Eof)
{
result.uwva_functie = safe.html(oRs("fnc").Value);
}
oRs.Close();
//
// Werklocatie
//
if (data.werklocatie.alg_locatie_key)
{
var wl = (!data.werklocatie.alg_gebouw_key? data.werklocatie.alg_locatie_code : "")
+ (data.werklocatie.alg_gebouw_key? data.werklocatie.alg_gebouw_code : "")
+ (data.werklocatie.alg_verdieping_key? ", etage " + data.werklocatie.alg_verdieping_code : "")
+ (data.werklocatie.alg_ruimte_key? ", kamer " + data.werklocatie.alg_ruimte_nr: "")
+ (data.werklocatie.prs_werkplek_key? "/" + data.werklocatie.prs_werkplek_volgnr: "");
result.uwva_werklocatie = safe.html(wl);
// Werklocatieadres
var sql = " SELECT alg_locatie_omschrijving"
+ ", alg_locatie_adres"
+ ", alg_locatie_postcode"
+ ", alg_locatie_plaats"
+ ", alg_locatie_land"
+ ", l.alg_locatie_omschrijving || ' (' || l.alg_locatie_code || ')' locatie_string"
+ " FROM alg_locatie l"
+ " WHERE l.alg_locatie_key = " + data.werklocatie.alg_locatie_key;
var oRs = Oracle.Execute(sql);
result.uwva_werklocatieadres = safe.html(oRs("alg_locatie_omschrijving").value) + "<br>"
+ safe.html(oRs("alg_locatie_adres").value) + "<br>"
+ safe.html(oRs("alg_locatie_postcode").value) + " " + safe.html(oRs("alg_locatie_plaats").value) + "<br>";
oRs.Close();
}
//
// Hoofdlocatie
//
if (data.werkplekken.length)
{
var txt = "";
var wp;
var wplabel = "Hoofdlocatie:";
var loc_key = -1;
for (wp in data.werkplekken)
{
if (!data.werkplekken[wp].prs_werkplek_aanduiding.isVirtueel && wp < 1) // pak er maar eentje, TODO hoofdwerkplek
{
txt += data.werkplekken[wp].prs_werkplek_aanduiding.substring(0,5)
+ ", etage "+ data.werkplekken[wp].prs_werkplek_aanduiding.substring(6,8)
+ ", kamer "+ data.werkplekken[wp].prs_werkplek_aanduiding.substring(9);
loc_key = data.werkplekken[wp].alg_locatie_key;
}
}
result.uwva_locatie = safe.html(txt);
// Postadres
var sql = " SELECT alg_locatie_omschrijving"
+ ", alg_locatie_post_adres"
+ ", alg_locatie_post_postcode"
+ ", alg_locatie_post_plaats"
+ ", alg_locatie_post_land"
+ ", l.alg_locatie_omschrijving || ' (' || l.alg_locatie_code || ')' locatie_string"
+ " FROM alg_locatie l"
+ " WHERE l.alg_locatie_key = " + loc_key;
var oRs = Oracle.Execute(sql);
result.uwva_postadres = safe.html(oRs("alg_locatie_omschrijving").Value) + "<br>"
+ safe.html(oRs("alg_locatie_post_adres").Value) + "<br>"
+ safe.html(oRs("alg_locatie_post_postcode").Value) + " " + safe.html(oRs("alg_locatie_post_plaats").Value) + "<br>";
oRs.Close();
// Bezoekadres
var sql = " SELECT alg_locatie_omschrijving"
+ ", alg_locatie_adres"
+ ", alg_locatie_postcode"
+ ", alg_locatie_plaats"
+ ", alg_locatie_land"
+ ", l.alg_locatie_omschrijving || ' (' || l.alg_locatie_code || ')' locatie_string"
+ " FROM alg_locatie l"
+ " WHERE l.alg_locatie_key = " + loc_key;
var oRs = Oracle.Execute(sql);
result.uwva_bezoekadres = safe.html(oRs("alg_locatie_omschrijving").Value) + "<br>"
+ safe.html(oRs("alg_locatie_adres").Value) + "<br>"
+ safe.html(oRs("alg_locatie_postcode").Value) + " " + safe.html(oRs("alg_locatie_plaats").Value) + "<br>";
oRs.Close();
}
//
// Klikbaar e-mailadres
//
if (data.prs_perslid_email)
{
result.uwva_mailto = "<a href='mailto:" + data.prs_perslid_email + "'>" + data.prs_perslid_email + "</a>";
}
return result;
};
bes_punch_receive = function (RequestForm, bes_srtdeel_key, item, pResult)
{
var result = {orderurl: ""};
var sql = "SELECT sd.prs_bedrijf_key FROM bes_srtdeel sd WHERE sd.bes_srtdeel_key = " + bes_srtdeel_key;
var oRs = Oracle.Execute(sql);
var bedr_key = oRs("prs_bedrijf_key").value;
oRs.Close();
function punchNVL(nm, n, def)
{
var nm = nm.replace('#', n);
if (RequestForm(nm).Count() == 0)
return def;
if (RequestForm(nm) == "")
return def;
return RequestForm(nm)(1);
};
// Alleen voor leverancier Worldmeetings uitvoeren (prs_bedrijf_key = 69793)
if (bedr_key == 69793)
{
var detail_url = punchNVL("NEW_ITEM-ATTACHMENT[#]", item, "Onbekend");
if (detail_url != "Onbekend")
{
sql = "UPDATE bes_srtdeel"
+ " SET bes_srtdeel_details_loc = " + safe.quoted_sql(detail_url)
+ " WHERE bes_srtdeel_key = " + bes_srtdeel_key;
Oracle.Execute(sql);
}
var leverdatum = punchNVL("NEW_ITEM-CUST_FIELD1[#]", item, "Onbekend");
if (leverdatum != "Onbekend")
{
sql = "SELECT TO_DATE(" + safe.quoted_sql(leverdatum) + ", 'yyyymmdd') leverdatum FROM DUAL";
var oRs = Oracle.Execute(sql);
leverdatum = oRs("leverdatum").value;
oRs.Close();
result.orderurl = "&leverdatum=" + (new Date(leverdatum)).getTime();
}
}
return result;
}
]]>
</script>
</component>