FSN#51222: Anonimiseren van historische bezoekers.

svn path=/Website/branches/v2017.3/; revision=37974
This commit is contained in:
Maykel Geerdink
2018-05-28 14:13:30 +00:00
parent b1f5821361
commit 32cf330d2b
5 changed files with 138 additions and 86 deletions

View File

@@ -38,19 +38,41 @@ var anodatetime = new Date();
// Bijvoorbeeld het veld bez_afspraak_gastheer die door trigger automatisch weer wordt gevuld met tekstnaam van host.
var sql;
var anosql = "BEGIN"
// Persoon als eerste i.v.m. tekstovername van gastheer bij afspraken.
if (moduleString.indexOf("PRS") != -1)
{ // Anonimiseer procedure voor PRS aanroepen.
anosql += " ano.anonymizeprs(" + startdatum.beginToSQL() + ", " + einddatum.endToSQL() + ");";
}
if (moduleString.indexOf("BES") != -1)
{ // Anonimiseer procedure voor PRS aanroepen.
anosql += " ano.anonymizebes(" + startdatum.beginToSQL() + ", " + einddatum.endToSQL() + ");";
}
if (moduleString.indexOf("BEZ") != -1)
{ // Anonimiseer procedure voor BEZ aanroepen.
anosql += " ano.anonymizebez(" + startdatum.beginToSQL() + ", " + einddatum.endToSQL() + ");";
}
if (moduleString.indexOf("MLD") != -1)
{ // Anonimiseer procedure voor PRS aanroepen.
anosql += " ano.anonymizemld(" + startdatum.beginToSQL() + ", " + einddatum.endToSQL() + ");";
}
anosql += " END;";
Oracle.Execute(anosql);
var messageArray = [];
if (moduleString.indexOf("BES") != -1)
{ // Bepalen hoeveel bestellingen zijn geanonimiseerd.
sql = "SELECT COUNT(ft.fac_tracking_key) aantalbes"
+ " FROM fac_tracking ft"
+ " WHERE ft.fac_tracking_datum >= " + anodatetime.toSQL(true, true)
+ " AND ft.fac_srtnotificatie_key = (SELECT fac_srtnotificatie_key"
+ " FROM fac_srtnotificatie"
+ " WHERE fac_srtnotificatie_code = ('BESANO'))";
oRs = Oracle.Execute(sql);
messageArray.push(oRs("aantalbes").Value + " " + L("lcl_bes_bestellingen"));
oRs.Close();
}
if (moduleString.indexOf("BEZ") != -1)
{ // Bepalen hoeveel afspraken zijn geanonimiseerd.
sql = "SELECT COUNT(ft.fac_tracking_key) aantalbez"
@@ -60,11 +82,23 @@ if (moduleString.indexOf("BEZ") != -1)
+ " FROM fac_srtnotificatie"
+ " WHERE fac_srtnotificatie_code = ('BEZANO'))";
oRs = Oracle.Execute(sql);
var aantalbez = oRs("aantalbez").Value;
messageArray.push(oRs("aantalbez").Value + " " + L("lcl_bez_appointments"));
oRs.Close();
}
if (moduleString.indexOf("MLD") != -1)
{ // Bepalen hoeveel bestellingen zijn geanonimiseerd.
sql = "SELECT COUNT(ft.fac_tracking_key) aantalmld"
+ " FROM fac_tracking ft"
+ " WHERE ft.fac_tracking_datum >= " + anodatetime.toSQL(true, true)
+ " AND ft.fac_srtnotificatie_key = (SELECT fac_srtnotificatie_key"
+ " FROM fac_srtnotificatie"
+ " WHERE fac_srtnotificatie_code = ('MLDANO'))";
oRs = Oracle.Execute(sql);
messageArray.push(oRs("aantalmld").Value + " " + L("lcl_mld_meldingen"));
oRs.Close();
}
if (moduleString.indexOf("PRS") != -1)
{ // Bepalen hoeveel afspraken zijn geanonimiseerd.
sql = "SELECT COUNT(ft.fac_tracking_key) aantalprs"
@@ -74,7 +108,6 @@ if (moduleString.indexOf("PRS") != -1)
+ " FROM fac_srtnotificatie"
+ " WHERE fac_srtnotificatie_code = ('PRSANO'))";
oRs = Oracle.Execute(sql);
var aantalbez = oRs("aantalprs").Value;
messageArray.push(oRs("aantalprs").Value + " " + L("lcl_prs_persons"));
oRs.Close();
}

View File

@@ -18,14 +18,10 @@
<!-- #include file="fac.inc" -->
<%
var smodule = getQParamArray("smodule");
var allmod = false;
if (smodule[0] == "-1")
allmod = true;
var showall = getQParamInt("showall", 0) == 1;
var outputmode = getQParamInt("outputmode", 0);
var startdatum = getQParamDate("startdatum"); // Periode van
var startdatum = new Date(1); // Periode van (Startdatum is dan 1970. Bij doorgeven verwacht getFParamDate "startdatum > 0", daarom 1)
var einddatum = getQParamDate("einddatum"); // Perdiode tot
var autfunction = "WEB_PRSSYS";
@@ -46,70 +42,98 @@ FCLTHeader.Requires({ plugins: ["jQuery"] })
{
var pmoduleString = getKeyString(rowArray);
var data = { moduleString: pmoduleString,
startdatum: <%= startdatum.getTime() %>,
einddatum: <%= einddatum.getTime() %> };
protectRequest.dataToken(data);
$.post("../fac/fac_anonymize.asp",
data,
FcltCallbackRefresh,
"json");
}
FcltMgr.confirm(L("lcl_shared_doaction1").format(L("mgt_kenmerk_systeem_ano")),
{ autoconfirm: isMulti },
function() {
var data = { moduleString: pmoduleString,
startdatum: <%= startdatum.getTime() %>,
einddatum: <%= einddatum.getTime() %> };
protectRequest.dataToken(data);
$.post("../fac/fac_anonymize.asp",
data,
FcltCallbackRefresh,
"json");
}
);
}
</script>
<%
var sql;
var sqln = [];
if (allmod || inArray("BEZ", smodule))
{
sql = "SELECT 'BEZ' module"
+ " , " + safe.quoted_sql(L("lcl_bez_appointments")) + " onderdeel"
+ " , COUNT(bez_afspraak_key) aantal"
+ " , " + startdatum.beginToSQL() + " mindate"
+ " , " + einddatum.endToSQL() + " maxdate"
+ " FROM bez_afspraak"
+ " WHERE bez_afspraak_datum BETWEEN " + startdatum.beginToSQL() + " AND " + einddatum.endToSQL()
+ " AND NOT EXISTS"
+ " (SELECT ft.fac_tracking_key"
+ " FROM fac_tracking ft"
+ " WHERE ft.fac_tracking_refkey = bez_afspraak_key"
+ " AND ft.fac_srtnotificatie_key = (SELECT fac_srtnotificatie_key"
+ " FROM fac_srtnotificatie"
+ " WHERE fac_srtnotificatie_code = 'BEZANO'))";
sqln.push(sql);
}
sql = "SELECT 'BES' module"
+ " , " + safe.quoted_sql(L("lcl_bes_bestellingen")) + " onderdeel"
+ " , COUNT(b.bes_bestelling_key) aantal"
+ " FROM bes_bestelling b"
+ " WHERE b.bes_bestelling_datum BETWEEN " + startdatum.beginToSQL() + " AND " + einddatum.endToSQL()
+ " AND NOT EXISTS (SELECT ft.fac_tracking_key"
+ " FROM fac_tracking ft"
+ " WHERE ft.fac_tracking_refkey = b.bes_bestelling_key"
+ " AND ft.fac_srtnotificatie_key = (SELECT fac_srtnotificatie_key"
+ " FROM fac_srtnotificatie"
+ " WHERE fac_srtnotificatie_code = 'BESANO'))";
sqln.push(sql);
if (allmod || inArray("PRS", smodule))
{
sql = "SELECT 'PRS' module"
+ " , " + safe.quoted_sql(L("lcl_prs_persons")) + " onderdeel"
+ " , COUNT(p.prs_perslid_key) aantal"
+ " , " + startdatum.beginToSQL() + " mindate"
+ " , " + einddatum.endToSQL() + " maxdate"
+ " FROM prs_perslid p"
+ " WHERE p.prs_perslid_verwijder IS NOT NULL"
+ " AND p.prs_perslid_verwijder BETWEEN " + startdatum.beginToSQL() + " AND " + einddatum.endToSQL()
+ " AND NOT EXISTS (SELECT ft.fac_tracking_key"
+ " FROM fac_tracking ft"
+ " WHERE ft.fac_tracking_refkey = p.prs_perslid_key"
+ " AND ft.fac_srtnotificatie_key = (SELECT fac_srtnotificatie_key"
+ " FROM fac_srtnotificatie"
+ " WHERE fac_srtnotificatie_code = 'PRSANO'))";
sql = "SELECT 'BEZ' module"
+ " , " + safe.quoted_sql(L("lcl_bez_appointments")) + " onderdeel"
+ " , COUNT(bez_afspraak_key) aantal"
+ " FROM bez_afspraak"
+ " WHERE bez_afspraak_datum BETWEEN " + startdatum.beginToSQL() + " AND " + einddatum.endToSQL()
+ " AND NOT EXISTS"
+ " (SELECT ft.fac_tracking_key"
+ " FROM fac_tracking ft"
+ " WHERE ft.fac_tracking_refkey = bez_afspraak_key"
+ " AND ft.fac_srtnotificatie_key = (SELECT fac_srtnotificatie_key"
+ " FROM fac_srtnotificatie"
+ " WHERE fac_srtnotificatie_code = 'BEZANO'))";
sqln.push(sql);
sql = "SELECT 'MLD' module"
+ " , " + safe.quoted_sql(L("lcl_mld_meldingen")) + " onderdeel"
+ " , COUNT(m.mld_melding_key) aantal"
+ " FROM mld_melding m"
+ " WHERE m.mld_melding_datum BETWEEN " + startdatum.beginToSQL() + " AND " + einddatum.endToSQL()
+ " AND NOT EXISTS (SELECT ft.fac_tracking_key"
+ " FROM fac_tracking ft"
+ " WHERE ft.fac_tracking_refkey = m.mld_melding_key"
+ " AND ft.fac_srtnotificatie_key = (SELECT fac_srtnotificatie_key"
+ " FROM fac_srtnotificatie"
+ " WHERE fac_srtnotificatie_code = 'MLDANO'))";
sqln.push(sql);
sql = "SELECT 'PRS' module"
+ " , " + safe.quoted_sql(L("lcl_prs_persons")) + " onderdeel"
+ " , COUNT(p.prs_perslid_key) aantal"
+ " FROM prs_perslid p"
+ " WHERE p.prs_perslid_verwijder IS NOT NULL"
+ " AND p.prs_perslid_verwijder BETWEEN " + startdatum.beginToSQL() + " AND " + einddatum.endToSQL()
+ " AND NOT EXISTS (SELECT ft.fac_tracking_key"
+ " FROM fac_tracking ft"
+ " WHERE ft.fac_tracking_refkey = p.prs_perslid_key"
+ " AND ft.fac_srtnotificatie_key = (SELECT fac_srtnotificatie_key"
+ " FROM fac_srtnotificatie"
+ " WHERE fac_srtnotificatie_code = 'PRSANO'))";
sqln.push(sql);
var currentWeekDay = new Date().getDay();
var lessDays = currentWeekDay == 0 ? 6 : currentWeekDay - 1;
var startdatumweek = new Date(new Date().getTime() - (1000 * 60 * 60 * 24 * lessDays));
sqln.push(sql);
}
sql = "SELECT module"
+ " , onderdeel"
+ " , aantal"
+ " , mindate"
+ " , maxdate"
+ " , (SELECT COUNT(ft.fac_tracking_key)"
+ " FROM fac_tracking ft"
+ " WHERE TRUNC(ft.fac_tracking_datum, 'DDD') = TRUNC(SYSDATE, 'DDD')"
+ " WHERE ft.fac_tracking_datum BETWEEN " + startdatumweek.beginToSQL() + " AND " + new Date().endToSQL()
+ " AND ft.fac_srtnotificatie_key = (SELECT fac_srtnotificatie_key"
+ " FROM fac_srtnotificatie"
+ " WHERE fac_srtnotificatie_code = (module || 'ANO'))) anonimized_today"
+ " WHERE fac_srtnotificatie_code = (module || 'ANO'))) anonimized_thisweek"
+ " , (SELECT COUNT(ft.fac_tracking_key)"
+ " FROM fac_tracking ft"
+ " WHERE ft.fac_srtnotificatie_key = (SELECT fac_srtnotificatie_key"
+ " FROM fac_srtnotificatie"
+ " WHERE fac_srtnotificatie_code = (module || 'ANO'))) anonimized_total"
+ " FROM (" + sqln.join(" UNION ") + ")";
function fncolaantal(oRs)
@@ -127,10 +151,9 @@ FCLTHeader.Requires({ plugins: ["jQuery"] })
rst.addColumn(new Column({caption: L("lcl_fac_module"), content: "module"}));
rst.addColumn(new Column({caption: L("lcl_fac_component"), content: "onderdeel"}));
rst.addColumn(new Column({caption: L("lcl_fac_aantal"), content: fncolaantal, datatype: "number"}));
rst.addColumn(new Column({caption: L("lcl_fac_ano_time_period_start"), content: "mindate", datatype: "date"}));
rst.addColumn(new Column({caption: L("lcl_fac_ano_time_period_end"), content: "maxdate", datatype: "date"}));
rst.addColumn(new Column({caption: L("lcl_fac_anonymized_today"), content: "anonimized_today", datatype: "number"}));
rst.addColumn(new Column({caption: L("lcl_fac_toanonymize"), content: fncolaantal, datatype: "number"}));
rst.addColumn(new Column({caption: L("lcl_fac_anonymized"), content: "anonimized_total", datatype: "number"}));
rst.addColumn(new Column({caption: L("lcl_fac_thisweek"), content: "anonimized_thisweek", datatype: "number"}));
rst.addAction({action: "mld_anonymize", caption: L("mgt_kenmerk_systeem_ano"), multi: true, multiOnce: true});

View File

@@ -50,23 +50,6 @@ var anonymize_period = S("anonymize_period");
<table><!-- x rijen, 2 kolommen: label + veld -->
<!-- module -->
<%
sql = "SELECT DISTINCT fac_setting_module fac_module"
+ " , fac_setting_module fac_module"
+ " FROM fac_setting "
+ " WHERE fac_setting_module IN ('BEZ', 'PRS')" // Vooralsnog alleen voor bezoekers en
+ (module != ""
? " AND fac_setting_module = " + safe.quoted_sql(module)
: "")
+ " ORDER BY fac_setting_module";
FCLTselector("smodule",
sql,
{ label: L("lcl_fac_module"),
trclass: "primsearch",
emptyOption: module == ""? L("lcl_all") : null,
multi: true
});
// Startdatum bepalen door van de nog niet geanonimiseerde personen, de persoon te nemen met de laagste verwijder datum.
sql = "SELECT MIN(sd.startdatum) minstartdatum"
+ " FROM (SELECT CASE"
@@ -104,15 +87,6 @@ var anonymize_period = S("anonymize_period");
var startdatum = new Date(oRs("minstartdatum").Value);
var einddatum = new Date(new Date().getFullYear(), new Date().getMonth(), new Date().getDate() - anonymize_period);
// <!-- Datum van -->
FCLTcalendar("startdatum",
{ label : L("lcl_period_from"),
datum: startdatum,
minDate: new Date(2000,0, 1),
trclass: "primsearch",
required: true,
volgnr: 1
});
// <!-- Datum tot -->
FCLTcalendar("einddatum",
{ label: L("lcl_period_to"),
@@ -128,6 +102,8 @@ var anonymize_period = S("anonymize_period");
</td>
<!-- Second column -->
<td>
<div id="anointotext1"><%=L("lcl_fac_ano_intotext1")%></div>
<div id="anointotext2"><%=L("lcl_fac_ano_intotext2")%></div>
</td>
</tr>
<% BLOCK_END();

View File

@@ -3025,6 +3025,22 @@ div#lcldialect .label
width: auto;
}
div#anointotext1 {
font-size: 2em;
color: #ff5050;
margin: 4px;
padding: 5px 1px 5px 1px;
font-weight: bold;
}
div#anointotext2 {
font-size: 1.5em;
color: #000000;
margin: 4px;
padding: 5px 1px 5px 1px;
font-weight: bold;
}
#itemfilter
{
width: 218px;

View File

@@ -133,6 +133,7 @@ var status = {
case "MLDAFR" : tekst = L("lcl_mld_is_mldafr") ; break;
case "MLDVER" : tekst = L("lcl_mld_is_mldver") ; break;
case "MLDNOT" : tekst = L("lcl_mld_is_mldnot") ; break;
case "MLDANO" : tekst = L("lcl_fac_is_ano") ; break;
case "RESNEW" : tekst = L("lcl_res_is_resnew") ; break;
case "RESOPT" : tekst = L("lcl_res_is_resopt") ; break;
@@ -175,6 +176,7 @@ var status = {
case "BEZDON" : tekst = L("lcl_bez_is_bezdon") ; break;
case "BEZOUT" : tekst = L("lcl_bez_is_bezout") ; break;
case "BEZBAD" : tekst = L("lcl_bez_is_bezbad") ; break;
case "BEZANO" : tekst = L("lcl_fac_is_ano") ; break;
case "BESNEW" : tekst = L("lcl_bes_is_besnew") ; break;
case "BESACP" : tekst = L("lcl_bes_is_besacp") ; break;
@@ -188,6 +190,7 @@ var status = {
case "BESUPD" : tekst = L("lcl_bes_is_besupd") ; break;
case "BESVER" : tekst = L("lcl_bes_is_besver") ; break;
case "BESCAN" : tekst = L("lcl_bes_is_bescan") ; break;
case "BESANO" : tekst = L("lcl_fac_is_ano") ; break;
case "BES2NE" : tekst = L("lcl_bes_is_bes2ne") ; break;
case "BES2AF" : tekst = L("lcl_bes_is_bes2af") ; break;
@@ -237,6 +240,7 @@ var status = {
case "PRSDEL" : tekst = L("lcl_prs_is_prsdel") ; break;
case "PRSKPU" : tekst = L("lcl_prs_is_prskpu") ; break;
case "PRSLOG" : tekst = L("lcl_prs_is_prslog") ; break;
case "PRSANO" : tekst = L("lcl_fac_is_ano") ; break;
case "ALGCAD" : tekst = L("lcl_alg_is_algcad") ; break;
case "ALGRNE" : tekst = L("lcl_alg_is_algrne") ; break;