AAFM#34758 Berichtenfunctie vanuit meldingen inrichten

svn path=/Website/trunk/; revision=28542
This commit is contained in:
Erik Groener
2016-03-18 12:36:50 +00:00
parent 6a5aea3654
commit a6a6e0db41
5 changed files with 397 additions and 172 deletions

View File

@@ -3,13 +3,14 @@
$Revision$
$Id$
File: mld_note_save.asp
File: mld_edit_note_save.asp
Description: Het echte bewaren van een melding notitie, zonder interactie
Parameters: mld_key Meldingnummer
note_key notitie key
note notitie tekst
urole
Context: A Vanuit mld_edit_note.asp
B Vanuit PDA/notitie.asp
Context: Vanuit mld_edit_note.asp
*/
var JSON_Result = true;
@@ -67,7 +68,11 @@ if (note != "")
}
fields.push({ dbs: "mld_melding_note_flag", typ: "number", val: (zichtbaarFE? 1 : 0) });
fields.push({ dbs: "mld_melding_note_key", typ: "key", seq: "mld_s_mld_melding_note_key" });
var noteIns = buildInsert("mld_melding_note", fields);
note_key = noteIns.sequences["mld_melding_note_key"];
Oracle.Execute(noteIns.sql);
// Tracking (MLDNOT) indien notitie zichtbaar is voor FE.
@@ -160,7 +165,8 @@ if (note != "")
}
var result = {success: true,
mld_key: mld_key
mld_key: mld_key,
note_key: note_key
};
Response.Write(JSON.stringify(result));

View File

@@ -44,46 +44,48 @@ lcl.set_dialect(mld_opdr.opdr_type, "MLD_TYPEOPDR_KEY");
var note_key = getQParamInt("note_key", -1);
var submitting = getQParamInt("submit", 0) == 1;
if (submitting)
{
var note = getFParam("note", "");
if (note != "")
{
var fields = [ { dbs: "mld_opdr_key", typ: "key", val: opdr_key },
{ dbs: "prs_perslid_key", typ: "key", val: user_key },
{ dbs: "mld_opdr_note_omschrijving", typ: "varchar", frm: "note", len:4000 }
]
if (note_key == -1)
{
var noteIns = buildInsert("mld_opdr_note", fields);
Oracle.Execute(noteIns.sql);
}
else
{
var sql = buildUpdate("mld_opdr_note", fields)
+ " mld_opdr_note_key = " + note_key
+ " AND prs_perslid_key = " + user_key; // Voorkom dat er een notitie van een ander aangepast wordt.
Oracle.Execute(sql);
}
}
%>
<script type="text/javascript">
FcltMgr.closeDetail(window, { refresh: true } );
</script>
<%
Response.End;
}
// if (submitting)
%>
<script type="text/javascript">
function opdr_notesubmit()
function checkInput()
{
if (!validateForm("u2"))
return false;
document.u2.submit();
var s = $("#note").val();
if (s.length > 4000)
{
s = s.substring(0, 4000);
$("#note").val(s);
}
return true;
}
function opdr_notesubmit()
{
if (!checkInput())
return false;
if (!validateForm("u2"))
return false;
var url = $("form[name=u2]")[0].action;
$.post($("form[name=u2]")[0].action,
$("[name=u2]").serialize(),
FcltCallbackAndThenAlways(opdr_submit_callback),
"json");
return true;
}
function opdr_submit_callback(json)
{
if (json.success)
{
FcltMgr.closeDetail(window, json);
}
}
function opdr_notecancel()
{
FcltMgr.closeDetail(window, { cancel: true } );
@@ -92,7 +94,7 @@ lcl.set_dialect(mld_opdr.opdr_type, "MLD_TYPEOPDR_KEY");
<body id="editbody">
<div id="edit">
<form name=u2 method=post action="opdr_edit_note.asp?submit=1&opdr_key=<%=opdr_key%>&note_key=<%=note_key%>">
<form name=u2 method=post action="opdr_edit_note_save.asp?opdr_key=<%=opdr_key%>&note_key=<%=note_key%>">
<%
var buttons = [ {title: L("lcl_submit"), icon: "opslaan.png", action:"opdr_notesubmit()" },
{title: L("lcl_cancel"), icon: "undo.png", action:"opdr_notecancel()" }];

View File

@@ -0,0 +1,63 @@
<%@language = "javascript" %>
<% /*
$Revision$
$Id$
File: opdr_edit_note_save.asp
Description: Het echte bewaren van een opdracht notitie, zonder interactie
Parameters: opdr_key opdrachtnummer
note_key notitie key
note notitie tekst
urole
Context: Vanuit opdr_edit_note.asp
*/
var JSON_Result = true;
%>
<!-- #include file="../Shared/common.inc" -->
<!-- #include file="../Shared/json2.js" -->
<!-- #include file="../Shared/save2db.inc" -->
<!-- #include file="mld.inc" -->
<%
var opdr_key = getQParamInt("opdr_key");
var note_key = getQParamInt("note_key", -1);
var note = getFParam("note", "");
var this_opdr = mld.func_enabled_opdracht(opdr_key); // wat mag ik zoal op deze opdracht
var mld_opdr = mld.mld_opdr_info(opdr_key);
lcl.set_dialect(mld_opdr.opdr_type, "MLD_TYPEOPDR_KEY");
user.auth_required_or_abort(this_opdr.canEditOpdrNote);
if (note != "")
{
var fields = [ { dbs: "mld_opdr_key", typ: "key", val: opdr_key },
{ dbs: "prs_perslid_key", typ: "key", val: user_key },
{ dbs: "mld_opdr_note_omschrijving", typ: "varchar", frm: "note", len:4000 }
]
if (note_key > -1)
{
var sql = buildUpdate("mld_opdr_note", fields)
+ " mld_opdr_note_key = " + note_key
+ " AND prs_perslid_key = " + user_key; // Voorkom dat er een notitie van een ander aangepast wordt.
Oracle.Execute(sql);
}
else
{
fields.push({ dbs: "mld_opdr_note_key", typ: "key", seq: "mld_s_mld_opdr_note_key" });
var noteIns = buildInsert("mld_opdr_note", fields);
note_key = noteIns.sequences["mld_opdr_note_key"];
Oracle.Execute(noteIns.sql);
}
}
var result = {success: true,
opdr_key: opdr_key,
note_key: note_key
};
Response.Write(JSON.stringify(result));
Response.End;
%>

View File

@@ -33,14 +33,14 @@ var defemail_type = getQParam("defemail_type", "P");
var defemail_key = getQParamInt("defemail_key", -1);
var pcode = getQParam("pcode", "");
var pkey = getQParamInt("key", -1);
var xkey = getQParamInt("xkey", -1);
var subject = getQParam("subject", "");
var pshowcompany = getQParamInt("pshowcompany", 0) == 1;
var submitting = getQParamInt("submitting", 0) == 1;
var emails = getQParam("emails", "");
var pmodule = getQParam("pmodule", "");
var pniveau = getQParam("pniveau", "");
var pkey = getQParamInt("key", -1);
var subject = getQParam("subject", "");
var mailfrom = getQParamInt("mailfrom", 0) == 1;
var emails = getQParam("emails", "");
var xkey = getQParamInt("xkey", -1);
var pshowcompany = getQParamInt("pshowcompany", 0) == 1;
// Ben ik voor deze module FO, en mag ik dus attachments selecteren?
var xfunc = user.func_enabled("*", null, null, user_key);
@@ -110,120 +110,8 @@ function bestandenlijstALL(pmodule, pniveau, pkey)
return bestandlijst
}
function tracksentemail(key, srttracking, emails, mailfrom, subject, prs_perslid_key, xkey, att_list)
{
// This function is our gate to the mail (and probably other media) queue for ad hoc sending needs by the user
// To be invoked e.g. when a user wants to e-mail a reservation form ("bon") to requestor or other address
function queuemail(pcode, pref, pmessage, pemail, pmailfrom, xkey)
{
// pcode hoort te zijn een van BESMAI, BES2MA, BEZMAI, MLDMAI, ORDMAI, RESMAI, RES2MA
// en is noodzakelijk om in de queue nog het type te kunnen bepalen.
// PutOrders moet er nl. een bon van kunnen maken. De status/mode aldaar is dummy.
// En: De laatste parameter is voor RESMAI/alleen een deelreservering.
if (pemail == null) return false;
if (pmailfrom == "")
{ // Geen namens mail adres meegekregen. Dan mailadres van user invullen
// notify approver and requestor by message & mail as configured in fac_srtnotificatie with BESAPx
pmailfrom = user.prs_perslid_email();
}
var attachments = att_list.join("|"); // lijst met attachments als string naar putnotificationsrtprio.
Oracle.Execute("BEGIN fac.putnotificationsrtprio("
+ user_key
+ ", NULL " // pto
+ ", " + safe.quoted_sql(pcode)
+ ", " + pref
+ ", " + safe.quoted_sql(pmessage)
+ ", 2" // pstatus
+ ", " + safe.quoted_sql(pemail)
+ ", NULL" // pmobile
+ ", " + xkey
+ ", 2"
+ ", " + safe.quoted_sql(pmailfrom)
+ ", " + safe.quoted_sql(attachments)
+ "); END;");
putorders.sendnotifications(pref, pcode);
return true;
}
// emails splitten
var emailArr = ('' + emails).split(';');
for (i = 0; i < emailArr.length; i++)
{
queuemail (srttracking, key, subject, emailArr[i], mailfrom, xkey);
}
// srttracking hoort te zijn een van BESMAI, BES2MA, BEZMAI, MLDMAI, ORDMAI, RESMAI, RES2MA
if (typeof prs_perslid_key == 'undefined')
prs_perslid_key = user_key;
var mail_str = "";
// PF: ik vind specifieke tekst niet nodig. Dit is nu dus gewoon documentatie ;-)
switch (srttracking)
{
case "MLDMAI" :
case "ORDMAI" :
case "BESMAI" :
case "BES2MA" :
case "BEZMAI" :
case "CNTMAI" :
case "FINMAI" :
case "INSMAI" :
case "MESMAI" :
case "PRJMAI" :
case "PRSMAI" :
case "RAPMAI" :
case "RESMAI" : mail_str = L("lcl_hasbeenmailed_to") + emails;
break;
}
if (subject != orgsubject)
mail_str += "\n" + L("lcl_noti_sendsubject") + " " + subject;
// Voor RESMAI moet res_rsv_ruimte_key meegegeven worden van de deelreservering.
// Tracken van het mailen van een gehele reservering heeft geen zin.
if (srttracking != "RES2MA")
shared.trackaction(srttracking, (srttracking == "RESMAI"? xkey : key), mail_str);
}; //tracksentemail()
if (submitting)
{
var subject = getFParam("subject", "");
var orgsubject = getFParam("orgsubject", "");
var mailfrom = getFParam("namens", "");
var emails = getFParam("emails", "");
var maillist = "\n" + emails.replace(/\;/g, "\n");
// Welke bestanden zijn geselecteerd.
var checklist = bestandenlijstALL(pmodule, pniveau, pkey);
var file_list = [];
if (checklist.length > 0)
{
for (att = 0; att < checklist.length; att++)
{
if (getFParam("kmnr" + att, "off") == "on")
{
file_list.push( checklist[att].folder + "/" + checklist[att].file.kenmerkkey + "/" + checklist[att].file.bestandnaam );
}
}
}
FCLTHeader.Generate();
// track het senden van de mail
tracksentemail(pkey, pcode, emails, mailfrom, subject, user_key, (xkey > 0? xkey : null), file_list);
%>
<script>
FcltMgr.closeDetail(window, { emails: "<%=safe.jsstring(maillist)%>",
key: "<%=pkey%>" });
</script>
<%
}
else
{
var mailfrom = getQParamInt("mailfrom", 0) == 1; %>
<html>
<head>
<% // Bepaal default email
@@ -255,6 +143,12 @@ else
FCLTHeader.Generate();
%>
<script type='text/javascript'>
jQuery(document).ready(function()
{
$("textarea").resize(function () { FcltMgr.resized(window) } );
$("textarea").autogrow();
});
jQuery(function()
{
FcltMgr.fixActiveelementError();
@@ -294,14 +188,73 @@ else
function queueSubmit()
{
// Standaard checks op verplichte velden, datum formaat, numeriek en float formaat, currency formaat.
if (!validateForm("u2"))
return false;
// Standaard checks op verplichte velden, datum formaat, numeriek en float formaat, currency formaat.
if (!validateForm("u2"))
return false;
if (!new RegExp("<%=safe.jsstring(S("email_regexp"))%>", "ig").test($("#emails").val()))
alert(L("lcl_invalid_email"))
else
document.getElementById("u2").submit();
if (!new RegExp("<%=safe.jsstring(S("email_regexp"))%>", "ig").test($("#emails").val()))
{
alert(L("lcl_invalid_email"));
}
else
{
<%
if (pcode == "MLDMAI" || pcode == "ORDMAI")
{
if (pcode == "MLDMAI")
var save_note_url = "../mld/mld_edit_note_save.asp?mld_key=" + pkey;
if (pcode == "ORDMAI")
var save_note_url = "../mld/opdr_edit_note_save.asp?opdr_key=" + pkey;
%>
if ($("#notes").length)
{
var vnotes = $("#notes").val();
if (vnotes.length > 4000)
$("#notes").val(vnotes.substring(0,4000));
}
var data = { note: $("#notes").val() };
<% protectRequest.dataToken("data"); %>
$.post("<%=save_note_url%>",
data,
FcltCallbackAndThenAlways(queueSubmitCallback),
"json");
<%
}
else
{
%>
var data = { success: true,
note_key: <%=xkey %>
};
queueSubmitCallback(data);
<%
}
%>
}
}
function queueSubmitCallback(data)
{
if (data.note_key > -1 )
{
$("#xkey").val(data.note_key);
}
var xurl = "queuemail_save.asp?key=<%=pkey%>&pcode=<%=pcode%>&pmodule=<%=pmodule%>&pniveau=<%=pniveau%>";
$.post(xurl,
$("[name=u2]").serialize(),
FcltCallbackAndThenAlways(queueMailClose),
"json");
}
function queueMailClose(data)
{
var emails = $("#emails").val();
var maillist = "\n" + emails.replace(/\;/g, "\n");
FcltMgr.closeDetail(window, { emails: maillist,
key: "<%=pkey%>" });
}
function queueCancel()
@@ -319,11 +272,9 @@ else
<body class="modal" id="mod_queuemail">
<div id="email">
<%
url = "queuemail.asp?submit=1&pcode="+pcode+"&key="+pkey+"&xkey="+xkey+"&submitting=1"+"&pmodule="+pmodule+"&pniveau="+pniveau;
%>
<form name="u2" id="u2" method="post" action="<%=protectQS.create(url)%>">
<input type="hidden" name="orgsubject" value="<%=safe.htmlattr(subject)%>">
<form name="u2" id="u2" method="post">
<input type="hidden" id="orgsubject" name="orgsubject" value="<%=safe.htmlattr(subject)%>">
<input type="hidden" id="xkey" name="xkey" value="<%=xkey%>">
<%
BLOCK_START("emailInput", subject);
@@ -393,6 +344,19 @@ url = "queuemail.asp?submit=1&pcode="+pcode+"&key="+pkey+"&xkey="+xkey+"&submitt
<input class="fldsubject" type="text" id="subject" name="subject" value="<%=safe.htmlattr(subject)%>">
</td>
</tr>
<%
// Notitie
if (pmodule == "MLD" || pcode == "ORDMAI")
{
RWTEXTAREATR("notes",
"fldmaillist",
L("lcl_mld_note"),
"",
{html: "rows='2' cols='60'"}
);
}
%>
<tr><td><br/></td></tr>
<%
@@ -426,6 +390,3 @@ IFACE.FORM_END();
</div>
</body>
</html>
<%
}
%>

View File

@@ -0,0 +1,193 @@
<%@language = "javascript" %>
<% /*
$Revision$
$Id$
File: queuemail_save.asp
Description: Het echte bewaren van een opdracht notitie, zonder interactie
Parameters: opdr_key opdrachtnummer
note_key notitie key
urole
Context: A Vanuit mld_edit_note.asp
B Vanuit PDA/notitie.asp
*/
var JSON_Result = true;
%>
<!-- #include file="../Shared/common.inc" -->
<!-- #include file="../Shared/json2.js" -->
<!-- #include file="../Shared/save2db.inc" -->
<!-- #include file="../Shared/FlexFiles.inc" -->
<%
var pkey = getQParamInt("key", -1);
var pcode = getQParam("pcode", "");
var pmodule = getQParam("pmodule", "");
var pniveau = getQParam("pniveau", "");
var orgsubject = getFParam("orgsubject", "");
var subject = getFParam("subject", "");
var mailfrom = getFParam("namens", "");
var emails = getFParam("emails", "");
var xkey = getFParamInt("xkey", -1);
var maillist = "\n" + emails.replace(/\;/g, "\n");
function tracksentemail(key, srttracking, emails, mailfrom, subject, prs_perslid_key, xkey, att_list)
{
// This function is our gate to the mail (and probably other media) queue for ad hoc sending needs by the user
// To be invoked e.g. when a user wants to e-mail a reservation form ("bon") to requestor or other address
function queuemail(pcode, pref, pmessage, pemail, pmailfrom, xkey)
{
// pcode hoort te zijn een van BESMAI, BES2MA, BEZMAI, MLDMAI, ORDMAI, RESMAI, RES2MA
// en is noodzakelijk om in de queue nog het type te kunnen bepalen.
// PutOrders moet er nl. een bon van kunnen maken. De status/mode aldaar is dummy.
// En: De laatste parameter is voor RESMAI/alleen een deelreservering.
if (pemail == null) return false;
if (pmailfrom == "")
{ // Geen namens mail adres meegekregen. Dan mailadres van user invullen
// notify approver and requestor by message & mail as configured in fac_srtnotificatie with BESAPx
pmailfrom = user.prs_perslid_email();
}
var attachments = att_list.join("|"); // lijst met attachments als string naar putnotificationsrtprio.
Oracle.Execute("BEGIN fac.putnotificationsrtprio("
+ user_key
+ ", NULL " // pto
+ ", " + safe.quoted_sql(pcode)
+ ", " + pref
+ ", " + safe.quoted_sql(pmessage)
+ ", 2" // pstatus
+ ", " + safe.quoted_sql(pemail)
+ ", NULL" // pmobile
+ ", " + xkey
+ ", 2"
+ ", " + safe.quoted_sql(pmailfrom)
+ ", " + safe.quoted_sql(attachments)
+ "); END;");
putorders.sendnotifications(pref, pcode);
return true;
}
// emails splitten
var emailArr = ('' + emails).split(';');
for (i = 0; i < emailArr.length; i++)
{
queuemail (srttracking, key, subject, emailArr[i], mailfrom, xkey);
}
// srttracking hoort te zijn een van BESMAI, BES2MA, BEZMAI, MLDMAI, ORDMAI, RESMAI, RES2MA
if (typeof prs_perslid_key == 'undefined')
prs_perslid_key = user_key;
var mail_str = "";
// PF: ik vind specifieke tekst niet nodig. Dit is nu dus gewoon documentatie ;-)
switch (srttracking)
{
case "MLDMAI" :
case "ORDMAI" :
case "BESMAI" :
case "BES2MA" :
case "BEZMAI" :
case "CNTMAI" :
case "FINMAI" :
case "INSMAI" :
case "MESMAI" :
case "PRJMAI" :
case "PRSMAI" :
case "RAPMAI" :
case "RESMAI" : mail_str = L("lcl_hasbeenmailed_to") + emails;
break;
}
if (subject != orgsubject)
mail_str += "\n" + L("lcl_noti_sendsubject") + " " + subject;
// Voor RESMAI moet res_rsv_ruimte_key meegegeven worden van de deelreservering.
// Tracken van het mailen van een gehele reservering heeft geen zin.
if (srttracking != "RES2MA")
shared.trackaction(srttracking, (srttracking == "RESMAI"? xkey : key), mail_str);
}; //tracksentemail()
function bestandenlijst(pmodule, pniveau, pkey)
{
var bestandlijst = [];
if (pmodule && pniveau)
{
var vSubfolder = pmodule + "/" + subfolderKey(pniveau, pkey);
var vAttachPath = S("flexFilesPath")+ "/" + vSubfolder;
var fso = new ActiveXObject("Scripting.FileSystemObject");
if (fso.FolderExists(vAttachPath))
{
var f1 = fso.GetFolder(vAttachPath);
var vmap = new Enumerator(f1.subFolders);
for (; !vmap.atEnd(); vmap.moveNext())
{
var f2 = fso.GetFolder(vAttachPath + "/" + vmap.item().Name);
var vfile = new Enumerator(f2.files);
for (; !vfile.atEnd(); vfile.moveNext())
{
bestandlijst.push( { folder: vSubfolder,
file: { kenmerkkey: vmap.item().Name,
bestandnaam: vfile.item().Name
}
}
);
}
}
}
}
return bestandlijst;
}
// Bij MLD worden ook de bestanden van de 'parents' aangeboden
function bestandenlijstALL(pmodule, pniveau, pkey)
{
var bestandlijst = bestandenlijst(pmodule, pniveau, pkey);
if (pmodule == "MLD")
{
var sk = pkey;
var mk = pkey;
while (true)
{
var sql = "SELECT mld_melding_start_key"
+ " FROM mld_melding"
+ " WHERE mld_melding_key = " + mk;
var oRs = Oracle.Execute(sql);
var sk = oRs("mld_melding_start_key").Value;
if (!sk || sk == mk)
break; // klaar
bestandlijst = bestandlijst.concat(bestandenlijst(pmodule, pniveau, sk));
mk = sk;
}
}
return bestandlijst
}
// Welke bestanden zijn geselecteerd.
var checklist = bestandenlijstALL(pmodule, pniveau, pkey);
var file_list = [];
if (checklist.length > 0)
{
for (att = 0; att < checklist.length; att++)
{
if (getFParam("kmnr" + att, "off") == "on")
{
file_list.push( checklist[att].folder + "/" + checklist[att].file.kenmerkkey + "/" + checklist[att].file.bestandnaam );
}
}
}
// track het senden van de mail
tracksentemail(pkey, pcode, emails, mailfrom, subject, user_key, (xkey > 0? xkey : null), file_list);
var result = {success: true};
Response.Write(JSON.stringify(result));
Response.End;
%>