AAIT#40392 mogelijkheid om (app)notificaties naar meerdere (bedrijfs)adressen te kunnen sturen

svn path=/Website/trunk/; revision=35288
This commit is contained in:
Jos Groot Lipman
2017-09-13 09:03:00 +00:00
parent 57a07d5701
commit 710cf816b3
4 changed files with 70 additions and 16 deletions

View File

@@ -40,10 +40,15 @@ function model_aut_client_perslid(params)
},
"device_id": {
"dbs": "aut_client_perslid_device_id",
"label": L("aut_client_perslid_device"),
"label": L("aut_client_perslid_device_id"),
"typ": "varchar",
"filter": "exact"
},
"device_name": {
"dbs": "aut_client_perslid_device_name",
"label": L("aut_client_perslid_device_name"),
"typ": "varchar"
},
"scope": {
"dbs": "aut_client_perslid_scope",
"label": L("aut_client_perslid_scope"),

View File

@@ -24,6 +24,8 @@ var JSON_Result = true;
var client_id = getQParam("client_id");
var device_id = getQParam("device_id", "AUTO_" + shared.random(32)); // optional device identification
// Hetzelfde device krijgt altijd hetzelfde token terug
var device_name = getQParam("device_name", "<unkwown>"); // Friendly name naar de gebruiker toe
var model_client = new model_aut_client({ internal: true });
var client_data = api2.GET(model_client, { filter: { "code": client_id } }); // sp moet er dan zijn voor Service Provider
if (!client_data && client_id == "FCLTAPP1") // Voor FCLTAPP1 ondersteunen we auto-create
@@ -56,6 +58,7 @@ var JSON_Result = true;
var cp_data = { "autclient" : client_data.id,
"scope" : "*",
"device_id" : device_id,
"device_name" : device_name,
"refreshtoken": '1$' + customerId + "_" + shared.random(32), // unused yet
"refreshdate" : new Date(),
"accesstoken" : '1$' + customerId + "_" + shared.random(32), // Does not expire yet?
@@ -65,7 +68,7 @@ var JSON_Result = true;
}
var result = model_client_perslid.REST_POST({}, cp_data);
// "App {0} aanmelding voor {1}/{2}";
shared.trackaction("PRSLOG", user_key, L("lcl_client_perslid_registered").format(client_id, getQParam("device_name", "<unkwown>"), device_id));
shared.trackaction("PRSLOG", user_key, L("lcl_client_perslid_registered").format(client_id, device_name, device_id));
cp_data = api2.GET(model_client_perslid, result.key );
}

View File

@@ -32,7 +32,8 @@ scaffolding(this_model,
"autclient",
//"scope",
"refreshdate",
"login"
"login",
"device_name"
]
},
"edit": {

View File

@@ -17,23 +17,63 @@ function sendAPP( p_perslid_key
{
var APPsend = false;
var url = S("puo_apppushurl"); // "http://facilitordev.azurewebsites.net/api/Notification/SendNotification"; Ooit uit aut_client of een kanaal
if (!url)
{
Log2File(1, "APP bericht: '" + p_msg + "' *niet* verzonden naar " + p_perslid_key + " want puo_apppushurl niet geconfigureerd.");
return false;
}
var sql = "SELECT aut_client_perslid_pushtoken "
+ " , aut_client_perslid_device_id "
+ " , aut_client_id"
+ " , prs_perslid_naam_friendly"
+ " , ba.*"
+ " FROM aut_client_perslid acp"
+ " , aut_client ac"
+ " , prs_bedrijf b"
+ " , prs_bedrijfadres ba"
+ " , prs_v_perslid_fullnames p"
+ " WHERE acp.aut_client_key = ac.aut_client_key"
+ " AND prs_perslid_key = " + p_perslid_key
+ " AND aut_client_id = 'FCLTAPP1'"; // NWNX is de enige die we ondersteunen
+ " AND acp.prs_perslid_key = " + p_perslid_key
+ " AND acp.prs_perslid_key = p.prs_perslid_key"
+ " AND ac.prs_bedrijf_key = b.prs_bedrijf_key(+)" // outer join alleen omdat FCLTAPP1 hardcoded is
+ " AND b.prs_bedrijf_key = ba.prs_bedrijf_key(+)"
+ " AND ba.prs_bedrijfadres_type(+) = 'N'"; // Notificatie
var oRs = Oracle.Execute(sql);
while (!oRs.Eof)
{
{ // Let op: lang niet alles wordt (al) ondersteund
var bedrijfadres = { key: oRs("prs_bedrijf_key").value,
url: oRs("prs_bedrijfadres_url").value,
encoding: oRs("prs_bedrijfadres_encoding").value,
ordermode: oRs("prs_bedrijfadres_ordermode").value,
typeopdr_key: oRs("mld_typeopdr_key").value,
certificateName: oRs("prs_bedrijfadres_certificate").value || "",
extension: oRs("prs_bedrijfadres_ext").value||"",
flexfiles: oRs("prs_bedrijfadres_flexfiles").value,
AttachFile: oRs("prs_bedrijfadres_attachfile").Value,// E<>n vaste bijlage ('algemene voorwaarden') om bij te sluiten
XSLbedr: (oRs("prs_bedrijfadres_xsl").value||"").toLowerCase(),
username: oRs("prs_bedrijfadres_username").value,
password: oRs("prs_bedrijfadres_password").value,
authmethod: oRs("prs_bedrijfadres_authmethod").value || 0,
soapversion: oRs("prs_bedrijfadres_soapversion").value,
soapaction: oRs("prs_bedrijfadres_soapaction").value,
locksecret: oRs("prs_bedrijfadres_locksecret").value,
loglevel: oRs("prs_bedrijfadres_loglevel").value
};
if (!bedrijfadres.key && oRs("aut_client_id").Value == 'FCLTAPP1') // NWNX is de enige die we hardcoded ondersteunen
{
bedrijfadres.url = S("puo_apppushurl"); // "http://facilitordev.azurewebsites.net/api/Notification/SendNotification"; Ooit ook uit een kanaal
//bedrijfadres.XSLbedr = '../appl/shared/fcltapp1.xsl';
if (!bedrijfadres.url)
{
Log2File(1, "APP bericht: '" + p_msg + "' *niet* verzonden naar " + p_perslid_key + " want puo_apppushurl niet geconfigureerd.");
return false;
}
}
if (!bedrijfadres.url)
return false;
// Dit zou ik het liefst doen met een stylesheet achtige oplossing en dan een XML2JSON
// Enerzijds wil je echter gewoon de volledige standaard xml_content gebruiken
// maar anderzijds zit daar in het bijzonder het pushtoken niet in
// Bovendien kan ik me ook goed een APP voorstellen waarbij het pushtoken in de url moet komen,
// dat red je ook weer niet echt met een stylesheet.
// Welbeschouwd moet er misschien beter een plugin achtige constructie komen?
// Praktijk afwachten maar
var json = {
"Title" : "FACILITOR",
"Message": p_msg,
@@ -42,13 +82,18 @@ function sendAPP( p_perslid_key
if (p_url)
{
json["Url"] = p_url;
json["FullUrl"] = S("puo_fclt_web_url") + p_url;
json["FullUrl"] = S("puo_fclt_web_url") + p_url; // als de APP een webclient van FACILITOR is kan hij hier 'naar toe' springen
}
var body = JSON.stringify(json);
Log2File(1, "APP bericht: '" + p_msg + "' wordt via " + oRs("aut_client_id").Value + " verzonden naar: " + p_perslid_key);
Log2File(1, "APP bericht: '{0}' wordt via {1} verzonden naar: {2}/{3}".format(p_msg, oRs("aut_client_id").Value,
oRs("prs_perslid_naam_friendly").Value,
oRs("aut_client_perslid_device_id").Value));
Log2File(2, "Payload: " + body);
var xmlHTTP = doHTTP(url, { data: body, headers: { "Content-Type": "application/json"} });
var params = bedrijfadres;
params.data = body;
params.headers = { "Content-Type": "application/json" };
var xmlHTTP = doHTTP(bedrijfadres.url, params);
if (xmlHTTP.status >= 200 && xmlHTTP.status <= 299)
{
APPsend = true;