YKPN#64081 Outlook afspraak naar alle bezoekers sturen

svn path=/Website/trunk/; revision=49523
This commit is contained in:
Erik Groener
2021-01-22 10:41:27 +00:00
parent 1a1d76df5f
commit ea5e98b89a
8 changed files with 204 additions and 205 deletions

View File

@@ -50,6 +50,8 @@ if (afspraak_key == -1)
}
else // Als er nog geen afspraak is dan de default actie nemen.
bez_actie_key = bez.default_actie();
oRs.Close();
sql = "SELECT rr.res_rsv_ruimte_bezoekers"
+ ", rr.res_rsv_ruimte_van"
+ ", rr.res_rsv_ruimte_tot"
@@ -66,6 +68,7 @@ if (afspraak_key == -1)
var restype = "R";
else
var restype = "CV"
oRs.Close();
if (restype == "R")
{

View File

@@ -4,8 +4,8 @@
$Revision$
$Id$
File: bez_outlook.asp
Description: Multi select bezoekers en stuur deze een outlook afspraak
File: bez_email_bezoeker.asp
Description: Multi select bezoekers en stuur deze een email
Parameters:
Context: Vanuit bez_show_bezoekers.asp
@@ -32,19 +32,6 @@ FCLTHeader.Requires({ plugins: ["jQuery"],
var this_bez = bez.func_enabled_afspraak(afspraak_key);
user.auth_required_or_abort(this_bez.canReadAny);
var sql = "SELECT r.res_reservering_key || '/'|| r.res_rsv_ruimte_volgnr res_nr"
+ " , r.res_reservering_key"
+ " , r.res_rsv_ruimte_key"
+ " FROM bez_afspraak a"
+ " , res_rsv_ruimte r"
+ " WHERE a.res_rsv_ruimte_key = r.res_rsv_ruimte_key"
+ " AND a.bez_afspraak_key = " + afspraak_key;
var oRs = Oracle.Execute(sql);
var reservering_nr = oRs("res_nr").Value;
var reservering_key = oRs("res_reservering_key").Value;
var rsv_ruimte_key = oRs("res_rsv_ruimte_key").Value;
oRs.Close();
%>
<script type="text/javascript">
@@ -52,12 +39,8 @@ FCLTHeader.Requires({ plugins: ["jQuery"],
function bez_submit(rowArray)
{
var bez_key_arr = getKeyString(rowArray);
var rowdata_arr = getDataArray(rowArray);
var data = { afspr_key: <%=afspraak_key%>
, rsv_key: <%=rsv_ruimte_key%>
, res_key: <%=reservering_key%>
, bez_key_arr: bez_key_arr
, data_arr: JSON.stringify(rowdata_arr)
};
protectRequest.dataToken(data);
$.post( $("form[name=u2]")[0].action
@@ -72,18 +55,11 @@ FCLTHeader.Requires({ plugins: ["jQuery"],
FcltMgr.closeDetail(window, { cancel: true } );
}
function getDataArray(rowArray)
$(function()
{
var obj;
var obj_arr = [];
for (var i = 0; i < rowArray.length; i++)
{
obj = JSON.parse(rowArray[i].getAttribute("ROWDATA"));
obj.rowkey = rowArray[i].getAttribute("ROWKEY");
obj_arr.push(JSON.stringify(obj));
}
return obj_arr;
}
// Vink gelijk alle regels aan.
$(".master").prop("checked", true).click();
});
</script>
@@ -91,32 +67,22 @@ FCLTHeader.Requires({ plugins: ["jQuery"],
<body class="modal" id="mod_afspraak">
<div id="email">
<form name="u2" method="post" action="../bez/bez_outlook_save.asp?afspr_key=<%=afspraak_key%>">
<form name="u2" method="post" action="../bez/bez_email_bezoeker_save.asp?afspr_key=<%=afspraak_key%>">
<%
BLOCK_START("bez_blk", L("lcl_bez_send_ics_to").format(reservering_nr), {icon: "fa-address-card"});
BLOCK_START("bez_blk", L("lcl_bez_mail_send_to"));
var sql = "SELECT b.bez_bezoekers_key"
+ " , b.bez_afspraak_naam naam"
+ " , b.bez_afspraak_bedrijf bedrijf"
+ " , COALESCE(b.bez_bezoekers_email, w.bez_kenmerkwaarde_waarde) email"
+ " , b.bez_bezoekers_email email"
+ " FROM bez_bezoekers b"
+ " , bez_kenmerkwaarde w"
+ " , bez_kenmerk k"
+ " WHERE b.bez_bezoekers_key = w.bez_bezoekers_key(+)"
+ " AND k.bez_kenmerk_key = w.bez_kenmerk_key"
+ " AND k.bez_kenmerk_default like '%prs_perslid_email%'"
+ " WHERE b.bez_bezoekers_email IS NOT NULL"
+ " AND b.bez_afspraak_key = " + afspraak_key;
function fnrowData(oRs)
{
var data = {email_to: oRs("email").Value};
return JSON.stringify(data);
}
var rsParms = { keyColumn: "bez_bezoekers_key"
, ID: "restable"
, sql: sql
, rowData: fnrowData
, noPrint: true
, outputmode: 0
};

View File

@@ -0,0 +1,76 @@
<%@ language = "JavaScript" %>
<%
/*
$Revision$
$Id$
File: bez_email_bezoeker_save.asp
Description: Door middel van notificatie versturen van email naar een bezoeker
eventueel en een outlook afspraak (ics).
Parameters:
Context:
Note:
*/
%>
<%
var JSON_Result = true;
%>
<!--#include file="../Shared/common.inc"-->
<!--#include file="../bez/bez.inc"-->
<%
var afspraak_key = getQParamInt("afspr_key");
var bez_key_arr = getFParamIntArray("bez_key_arr", []);
var this_bez = bez.func_enabled_afspraak(afspraak_key);
user.auth_required_or_abort(this_bez.canReadAny);
var aantal_verstuurd = 0;
for (i=0; i<bez_key_arr.length; i++)
{
var sql = "SELECT b.bez_bezoekers_key"
+ " , b.bez_afspraak_naam naam"
+ " , b.bez_afspraak_bedrijf bedrijf"
+ " , b.bez_bezoekers_email email"
+ " FROM bez_bezoekers b"
+ " WHERE b.bez_bezoekers_key = " + bez_key_arr[i];
var oRs = Oracle.Execute(sql);
if (!oRs.eof)
{
var email = oRs("email").Value;
email = email.replace(/^\s+|\s+$/g,""); // trim spaces
// Uberhaupt syntactisch geldige e-mail?
if (new RegExp(S("email_regexp_single"), "ig").test(email))
{
var noti_str = "BEGIN"
+ " fac.putnotificationsrtprio"
+ "( NULL"
+ ", NULL"
+ ", 'BEZBEZ'"
+ ", " + afspraak_key
+ ", NULL"
+ ", 18" // status: email + subject via xsl
+ ", " + safe.quoted_sql(email)
+ ", NULL"
+ ", " + bez_key_arr[i]
+ ", 2"
+ ", NULL"
+ ");"
+ " END;";
Oracle.Execute(noti_str);
aantal_verstuurd++;
}
}
oRs.Close();
}
var result = { success: true, message: ""};
if (aantal_verstuurd > 0)
{
result.toaster = aantal_verstuurd + " " + L("lcl_bez_mail_sent");
}
Response.Write(JSON.stringify(result));
%>
<% ASPPAGE_END(); %>

View File

@@ -1096,6 +1096,7 @@ function bez_list(pautfunction, params)
* End general callback functies ResultsetTable
*********************************************/
var this_bez_afspraak = bez.func_enabled_afspraak(afspr_key);
var xparams = "";
if (groupbez && groupbez != 99) // minfo
{
@@ -1137,7 +1138,14 @@ function bez_list(pautfunction, params)
oRs.Close()
}
var buttons = [{ icon: "fa-plus", title: L("lcl_add"), action: action }];
buttons = [{ icon: "fa-plus", title: L("lcl_add"), action: action }];
}
if (this_bez_afspraak.canReadAny)
{
var addurl = "../bez/bez_email_bezoeker.asp?afspr_key=" + afspr_key;
var mail_action = "FcltMgr.openModalDetail('" + addurl + "', '" + L("lcl_bez_mail_send") + "', {callback: FcltMgr.closeDetail} )";
buttons.push({title: L("lcl_bez_mail_send"), icon: "fa-envelope", action: mail_action, id: "bemail_bez_bezoekers"});
}
}
@@ -1320,7 +1328,6 @@ function bez_list(pautfunction, params)
rst.addColumn(new Column({caption: L("lcl_vis_number_park"), content: "sum_parking", datatype: "number"}));
}
// add multibadge action only if appointment canBadge
var this_bez_afspraak = bez.func_enabled_afspraak(afspr_key);
if (this_bez_afspraak.canBadge)
{
rst.addAction({ action: "resMultiPrint", caption: L("lcl_print"), single: false, multi: true, multiOnce: true});

View File

@@ -1,53 +0,0 @@
<%@ language = "JavaScript" %>
<%
/*
$Revision$
$Id$
File: bez_outlook_save.asp
Description: Door middel van notificatie versturen van email met een ics (outlook afspraak)
Parameters:
Context:
Note:
*/
%>
<%
var JSON_Result = true;
%>
<!--#include file="../Shared/common.inc"-->
<%
var afspraak_key = getQParamInt("afspr_key");
var reservering_key = getFParamInt("res_key", -1);
var rsv_ruimte_key = getFParamInt("rsv_key", -1);
var bez_key_arr = getFParamIntArray("bez_key_arr", []);
var rowdata_arr = JSON.parse(getFParam("data_arr", []));
for (i=0; i<rowdata_arr.length; i++)
{
var rowdata = JSON.parse(rowdata_arr[i]);
var noti_str = "BEGIN"
+ " fac.putnotificationsrtprio"
+ "( NULL"
+ ", NULL"
+ ", 'BEZBEZ'"
+ ", " + reservering_key
+ ", NULL"
+ ", 2"
+ ", " + safe.quoted_sql(rowdata.email_to)
+ ", NULL"
+ ", " + rsv_ruimte_key
+ ", 2"
+ ", NULL"
+ ");"
+ " END;";
Oracle.Execute(noti_str);
}
putorders.sendnotifications(user_key, "BEZBEZ");
var result = { success: true, message: "", toaster: L("lcl_bez_sent_ics")};
Response.Write(JSON.stringify(result));
%>
<% ASPPAGE_END(); %>

View File

@@ -110,11 +110,11 @@ user.auth_required_or_abort(this_bez.canReadAny);
window.location.href = "../bez/bez_edit_bezoekers.asp?urole=<%=urole%>&rsv_ruimte_key=<%=rsv_ruimte_key+(embedded?"&embedded=1":"")%>"
}
function bez_outlook()
function bez_email()
{
var url = "../BEZ/bez_outlook.asp?afspr_key=<%=afspraak_key%>";
var url = "../BEZ/bez_email_bezoeker.asp?afspr_key=<%=afspraak_key%>";
FcltMgr.openModalDetail( url
, L("lcl_bez_send_ics")
, L("lcl_bez_mail_send")
, {callback: "FcltMgr.closeDetail"}
);
@@ -158,7 +158,7 @@ user.auth_required_or_abort(this_bez.canReadAny);
+ " and b.bez_afspraak_key = " + afspraak_key;
var oRs = Oracle.Execute(sql);
if (!oRs.eof)
buttons.push( {title: L("lcl_bez_send_ics"), icon: "fa-calendar-alt", action: "bez_outlook()", id: "boutlook_bez_bezoekers"});
buttons.push( {title: L("lcl_bez_mail_send"), icon: "fa-envelope", action: "bez_email()", id: "bemail_bez_bezoekers"});
oRs.Close();
}

View File

@@ -1111,61 +1111,6 @@ END:VEVENT
END:VCALENDAR
</xsl:template>
<xsl:template match="reservering" mode="bez_vcalendar_mail">
<xsl:comment>ADDICS</xsl:comment>
Hierbij ontvangt u een uitnodiging voor het bijwonen van <xsl:value-of select="rsv_ruimte/omschrijving"/>.
</xsl:template>
<xsl:template match="reservering" mode="bez_vcalendar_ics">
BEGIN:VCALENDAR
PRODID:-//Microsoft Corporation//Outlook 16.0 MIMEDIR//EN
VERSION:2.0
METHOD:REQUEST
X-MS-OLK-FORCEINSPECTOROPEN:TRUE
BEGIN:VTIMEZONE
TZID:W. Europe Standard Time
BEGIN:STANDARD
DTSTART:16011028T030000
RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
END:STANDARD
BEGIN:DAYLIGHT
DTSTART:16010325T020000
RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VEVENT
CLASS:PUBLIC
CREATED:<xsl:value-of select="rsv_ruimte/aangemaakt/utcdatum"/>T<xsl:value-of select="rsv_ruimte/aangemaakt/utctijd"/>Z
DESCRIPTION:
DTEND;TZID="W. Europe Standard Time":<xsl:value-of select="rsv_ruimte/tot/utcdatum"/>T<xsl:value-of select="rsv_ruimte/tot/utctijd"/>Z
DTSTAMP:<xsl:value-of select="datum/utcdatum"/>T<xsl:value-of select="datum/utctijd"/>Z
DTSTART;TZID="W. Europe Standard Time":<xsl:value-of select="rsv_ruimte/van/utcdatum"/>T<xsl:value-of select="rsv_ruimte/van/utctijd"/>Z
LAST-MODIFIED:<xsl:value-of select="rsv_ruimte/aangemaakt/utcdatum"/>T<xsl:value-of select="rsv_ruimte/aangemaakt/utctijd"/>Z
LOCATION:<xsl:choose><xsl:when test="not(rsv_ruimte/res_ruimte/nr)"><xsl:value-of select="rsv_ruimte/plaats/regio/district/locatie/plaats"/> - <xsl:value-of select="rsv_ruimte/plaats/regio/district/locatie/gebouw/verdieping/ruimte/nr"/> (<xsl:value-of select="rsv_ruimte/plaats/regio/district/locatie/omschrijving"/>)</xsl:when><xsl:otherwise><xsl:value-of select="rsv_ruimte/res_ruimte/nr"/> (<xsl:value-of select="rsv_ruimte/res_ruimte/plaats/regio/district/locatie/omschrijving"/>)</xsl:otherwise></xsl:choose>
PRIORITY:5
SEQUENCE:0
SUMMARY;LANGUAGE=<xsl:value-of select="/facilitor/header/language"/>:<xsl:value-of select="rsv_ruimte/res_activiteit/omschrijving"/>: <xsl:value-of select="rsv_ruimte/omschrijving"/>
TRANSP:OPAQUE
UID:FCLTRES<xsl:value-of select="rsv_ruimte/key"/>
X-MICROSOFT-CDO-BUSYSTATUS:BUSY
X-MICROSOFT-CDO-IMPORTANCE:1
X-MICROSOFT-DISALLOW-COUNTER:FALSE
X-MS-OLK-AUTOFILLLOCATION:FALSE
X-MS-OLK-CONFTYPE:0
BEGIN:VALARM
TRIGGER:-PT15M
ACTION:DISPLAY
DESCRIPTION:Reminder
END:VALARM
END:VEVENT
END:VCALENDAR
</xsl:template>
<xsl:template match="reservering" mode="include">
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" WIDTH="100%">
<TR>
@@ -1316,12 +1261,6 @@ END:VCALENDAR
<xsl:when test="$mode='summary'"></xsl:when>
<xsl:otherwise>
<xsl:choose>
<xsl:when test="$srtnotificatiecode = 'BEZBEZ' and $mode='email'">
<xsl:apply-templates select="." mode="bez_vcalendar_mail"/>
</xsl:when>
<xsl:when test="$srtnotificatiecode = 'BEZBEZ' and $mode='ics'">
<xsl:apply-templates select="." mode="bez_vcalendar_ics"/>
</xsl:when>
<xsl:when test="$srtnotificatiecode = 'OUTLOOK' or $mode='ics'">
<xsl:apply-templates select="." mode="outlook"/>
</xsl:when>
@@ -1517,26 +1456,111 @@ END:VCALENDAR
<xsl:template match="afspraak" mode="full">
<xsl:choose>
<xsl:when test="$mode='summary'"></xsl:when>
<xsl:otherwise>
<html>
<xsl:comment>================================ AFSPRAKEN ==============================</xsl:comment>
<xsl:comment>Facilitor default XSL template for afspraak</xsl:comment>
<xsl:call-template name="htmlhead"/>
<xsl:element name="body">
<xsl:if test="$mode!='email'">
<xsl:attribute name="onload">window.print();</xsl:attribute>
</xsl:if>
<xsl:call-template name="pageheader"/>
<xsl:apply-templates select="." mode="include"/>
<xsl:call-template name="pagefooter"/>
</xsl:element>
</html>
</xsl:otherwise>
<xsl:choose>
<xsl:when test="$srtnotificatiecode = 'BEZBEZ' and $mode='email'">
<xsl:apply-templates select="." mode="bez_afspraak_mail"/>
</xsl:when>
<xsl:when test="$srtnotificatiecode = 'BEZBEZ' and $mode='ics'">
<xsl:apply-templates select="." mode="bez_afspraak_ics"/>
</xsl:when>
<xsl:when test="$srtnotificatiecode = 'BEZBEZ' and $mode='summary'">
<xsl:apply-templates select="." mode="bez_afspraak_summary"/>
</xsl:when>
<xsl:when test="$mode='summary'"></xsl:when>
<xsl:otherwise>
<html>
<xsl:comment>================================ AFSPRAKEN ==============================</xsl:comment>
<xsl:comment>Facilitor default XSL template for afspraak</xsl:comment>
<xsl:call-template name="htmlhead"/>
<xsl:element name="body">
<xsl:if test="$mode!='email'">
<xsl:attribute name="onload">window.print();</xsl:attribute>
</xsl:if>
<xsl:call-template name="pageheader"/>
<xsl:apply-templates select="." mode="include"/>
<xsl:call-template name="pagefooter"/>
</xsl:element>
</html>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="afspraak" mode="bez_afspraak_mail">
<xsl:comment>ADDICS</xsl:comment>
<xsl:choose>
<xsl:when test="not(rsv_ruimte)">
Hierbij ontvangt u een bevestiging van afspraak <xsl:value-of select="key"/>.<br/>
<xsl:value-of select="opmerking"/>
</xsl:when>
<xsl:otherwise>
Hierbij ontvangt u een uitnodiging voor het bijwonen van <xsl:value-of select="rsv_ruimte/omschrijving"/>.<br/>
<xsl:value-of select="rsv_ruimte/opmerking"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="afspraak" mode="bez_afspraak_summary">
<xsl:choose>
<xsl:when test="not(rsv_ruimte)">
Bevestiging afspraak <xsl:value-of select="key"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="rsv_ruimte/omschrijving"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="afspraak" mode="bez_afspraak_ics">
BEGIN:VCALENDAR
PRODID:-//Microsoft Corporation//Outlook 16.0 MIMEDIR//EN
VERSION:2.0
METHOD:REQUEST
X-MS-OLK-FORCEINSPECTOROPEN:TRUE
BEGIN:VTIMEZONE
TZID:W. Europe Standard Time
BEGIN:STANDARD
DTSTART:16011028T030000
RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
END:STANDARD
BEGIN:DAYLIGHT
DTSTART:16010325T020000
RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VEVENT
CLASS:PUBLIC
CREATED:<xsl:value-of select="aanmaak/utcdatum"/>T<xsl:value-of select="aanmaak/utctijd"/>Z
DESCRIPTION:
DTEND;TZID="W. Europe Standard Time":<xsl:value-of select="eind/utcdatum"/>T<xsl:value-of select="eind/utctijd"/>Z
DTSTAMP:<xsl:value-of select="datum/utcdatum"/>T<xsl:value-of select="datum/utctijd"/>Z
DTSTART;TZID="W. Europe Standard Time":<xsl:value-of select="datum/utcdatum"/>T<xsl:value-of select="datum/utctijd"/>Z
LAST-MODIFIED:<xsl:value-of select="aanmaak/utcdatum"/>T<xsl:value-of select="aanmaak/utctijd"/>Z
LOCATION:<xsl:choose><xsl:when test="not(rsv_ruimte/res_ruimte/nr)"><xsl:value-of select="rsv_ruimte/plaats/regio/district/locatie/plaats"/> - <xsl:value-of select="rsv_ruimte/plaats/regio/district/locatie/gebouw/verdieping/ruimte/nr"/> (<xsl:value-of select="rsv_ruimte/plaats/regio/district/locatie/omschrijving"/>)</xsl:when><xsl:otherwise><xsl:value-of select="rsv_ruimte/res_ruimte/nr"/> (<xsl:value-of select="rsv_ruimte/res_ruimte/plaats/regio/district/locatie/omschrijving"/>)</xsl:otherwise></xsl:choose>
PRIORITY:5
SEQUENCE:0
SUMMARY;LANGUAGE=<xsl:value-of select="/facilitor/header/language"/>:<xsl:value-of select="rsv_ruimte/res_activiteit/omschrijving"/>: <xsl:value-of select="rsv_ruimte/omschrijving"/>
TRANSP:OPAQUE
UID:FCLTBEZ<xsl:value-of select="bezoeker/key"/>
X-MICROSOFT-CDO-BUSYSTATUS:BUSY
X-MICROSOFT-CDO-IMPORTANCE:1
X-MICROSOFT-DISALLOW-COUNTER:FALSE
X-MS-OLK-AUTOFILLLOCATION:FALSE
X-MS-OLK-CONFTYPE:0
BEGIN:VALARM
TRIGGER:-PT15M
ACTION:DISPLAY
DESCRIPTION:Reminder
END:VALARM
END:VEVENT
END:VCALENDAR
</xsl:template>
<xsl:template match="bezoeker" mode="include">
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" WIDTH="100%">
<TR>

View File

@@ -244,30 +244,6 @@ function notificationMail(rec, p_notificationXSL, params)
, rec("fac_srtnotificatie_code").value
, "ics"
);
// In ics staat een DESCRIPTION. Deze waarde kunnen we gebruiken voor het mail-subject als de METHOD REQUEST is.
// Anders wordt de notificatie-lcl in het subject van de mail gezet.
// Wordt METHOD PUBLISH gebruikt dan komt in het subject van de mail de waarde bij SUMMARY te staan.
// De ics kan meerdere DESCRIPTION tags hebben. Alleen die binnen VEVENT willen we hebben.
var subjectTag = "SUMMARY"; // Waarde toch uit SUMMARY halen ipv DESCRIPTION.
var SubjectTextICS = "";
var ics_arr = icsResult.replace("\r", "").split("\n");
var lvl = [];
for (var i=0; i<ics_arr.length; i++)
{
if (ics_arr[i].substr(0,6) == "BEGIN:")
lvl.push(ics_arr[i].substr(6).replace("\r", "") );
if (ics_arr[i].substr(0,4) == "END:")
lvl.pop();
if ((lvl[lvl.length-1] == "VEVENT") && (ics_arr[i].substr(0, subjectTag.length) == subjectTag))
{
SubjectTextICS = ics_arr[i].substr(ics_arr[i].indexOf(":")+1);
}
}
if (SubjectTextICS)
{
SubjectText = SubjectTextICS;
}
}
if (rec("fac_notificatie_status").value & params.STATUS_SUMMARY_XSL)