Files
Facilitor/APPL/MLD/mld_continue_save.asp

358 lines
14 KiB
Plaintext
Raw Blame History

<%@language = "javascript" %>
<% /*
$Revision$
$Id$
File: MLD/mld_continue_save.asp
Description: Continue (vervolg) een melding.
Welbeschouwd is het gewoon een nieuwe melding met veel defaults uit de 'huidige'
In mld_continue.asp is wel een andere standaardmelding gekozen.
De melder van de nieuwe melding is gelijk aan die van de oorspronkelijke, tenzij
dat een systeemuser was, dan wordt het de maker van deze vervolgmelding.
Parameters:
Context: Save code van mld_continue.asp
Note:
*/ %>
<!-- #include file="../Shared/common.inc" -->
<!-- #include file="../Shared/save2db.inc" -->
<!-- #include file="../prs/prs.inc" -->
<!-- #include file="mld.inc" -->
<%
FCLTHeader.Requires({ plugins: ["jQuery"],
js: [] })
var urole = getQParamSafe("urole");
var mld_key = getQParamInt("mld_key");
var stdm_key = getFParamInt("stdm");
var opmerk = getFParam("opmerk", "");
var vervolg = getFParam("vervolg", "");
var person_key = getFParamInt("person", -1);
var disc_key = getFParamInt("disc", -1);
var stdm_info = mld.mld_stdmeldinginfo(stdm_key);
// De functie checkAutorisation(autfunction) geeft een Response.End indien er geen autorisatie voor autfunction wordt gevonden
var authparams = user.checkAutorisation("WEB_MLDFOF");
var mld_melding = mld.mld_melding_info(mld_key);
var locatiekey = mld_melding.loc_key;
if (locatiekey < 0 && mld_melding.deladdress)
{ // Als we geen locatiekey hebben maar wel een afleveradres, kunnen we mogelijk ook een locatiekey bepalen
oRs = Oracle.Execute('SELECT alg_locatie_key FROM mld_adres WHERE mld_adres_key = ' + mld_melding.deladdress);
if (!oRs.eof && oRs("alg_locatie_key").Value)
locatiekey = oRs("alg_locatie_key").Value;
}
var prs_bedrijf_key = mld.dienst_controle(stdm_key, locatiekey, mld_melding.bld_key, mld_melding.room_key, mld_melding.perslid_key_voor);
%>
<html>
<head>
<% FCLTHeader.Generate(); %>
</head>
<body id="info">
<%
function PropertieItem(key, waarde, defaultwaarde, verplicht, srtkey, groep)
{
this.key = key;
this.waarde = waarde;
this.defaultwaarde = defaultwaarde;
this.verplicht = verplicht;
this.srtkey = srtkey;
this.groep = groep;
}
var currentProperties = new Array();
var fields = [ { dbs: "mld_melding_opmerking", typ: "varchar", val: opmerk, track: L("lcl_mld_inf_Opmerking"), len: 4000 }
];
var mldUpd = buildTrackingUpdate("mld_melding", " mld_melding_key = " + mld_key, fields);
oRs = Oracle.Execute(mldUpd.sql);
if (mldUpd.trackarray.length)
mld.trackmeldingupdate(mld_key, L("lcl_mld_is_mldupd") + "\n" + mldUpd.trackarray.join("\n"));
// Copieer melding naar nieuwe melding met
// - nieuwe productgroep/vakgroep (mld_discipline)
// - nieuwe melding mld_stdmelding
// - zet start_key gelijk aan bestaande melding
// - sla tijd
var foundValue = false;
var waarde = null;
var melder_key = ((S("mld_continue_edit_issuer") && person_key != -1) ? person_key : mld_melding.melder_key);
var melder_info = new Perslid(melder_key); // Je maakt de melding voor jezelf of ander aan (prs_perslid_key_voor is user_key).
if ((S("mld_continue_edit_issuer") && person_key != -1))
{
var canAdd = authparams && authparams.PRSwritelevel < 9 && authparams.ALGwritelevel < 9;
user.auth_required_or_abort(canAdd);
}
var kp_key = mld_melding.kostenpl_key;
// Kostenplaats is verplicht maar geen kostenplaats bij de orginele melding?
if (stdm_info.kpnverplicht == 1 && kp_key < 0)
{
// Eerst de kostenplaats van de melder proberen
kp_key = melder_info.afdeling().prs_kostenplaats_key() || -1;
if (kp_key < 0) {
// Geen kostenplaats van de melder te bepalen. Dan maar de kostenplaats van de huidige user
kp_key = user.afdeling().prs_kostenplaats_key()||-1;
}
}
sql = "SELECT mld_s_mld_melding_key.nextval FROM DUAL";
oRs = Oracle.Execute(sql);
var new_mld_key = oRs(0).Value;
oRs.close();
// Ook niet copie<69>ren: mld_melding_opmerking, mld_melding_behandeling
// De status mld_melding_status wordt ingevoerd (2)
sql = "INSERT INTO mld_melding ("
+ " mld_melding_key"
+ ", mld_melding_module"
+ ", mld_ins_srtinst_keys"
+ ", mld_meldbron_key"
+ ", mld_meldbron_nr"
+ ", mld_oorzaak_key"
+ ", mld_alg_locatie_key"
+ ", mld_alg_onroerendgoed_keys"
+ ", mld_melding_datum"
+ ", mld_melding_omschrijving"
+ ", mld_stdmelding_key"
+ ", mld_melding_geprint"
+ ", mld_kosten_klant"
+ ", mld_melding_document"
+ ", mld_melding_ordernr"
+ ", prs_perslid_key"
+ ", mld_adres_key"
+ ", mld_melding_start_key"
+ ", mld_melding_spoed"
+ ", prs_kostenplaats_key"
+ ", fac_activiteit_key"
+ ")"
+ " SELECT "
+ new_mld_key
+ ", mld_melding_module"
+ ", mld_ins_srtinst_keys"
+ ", mld_meldbron_key"
+ ", mld_meldbron_nr"
+ ", mld_oorzaak_key"
+ ", mld_alg_locatie_key"
+ ", mld_alg_onroerendgoed_keys"
+ ", SYSDATE"
+ ", " + safe.quoted_sql(vervolg) // aangepaste omschrijving van oorspronkelijke melding wordt omschrijving vervolgmelding
+ ", " + stdm_key
+ ", mld_melding_geprint"
+ ", mld_kosten_klant"
+ ", mld_melding_document"
+ ", mld_melding_ordernr"
+ ", "+ (melder_info.isSystemUser() ? user_key : melder_key)
+ ", mld_adres_key"
+ ", " + mld_key
+ ", 3" // Altijd normaal. Vervolgmelding kent misschien onze prio niet
+ ", " + (kp_key && kp_key > 0? kp_key : "NULL")
+ ", fac_activiteit_key"
+ " FROM mld_melding"
+ " WHERE mld_melding_key = " + mld_key;
var err = Oracle.Execute(sql, true);
if (err.friendlyMsg)
abort_with_warning(err.friendlyMsg);
if (stdm_info.ins_srtinst_niveau)
{
// get_objecten_sql gebruiken klinkt leuk maar die query paste erg slecht
// We onderkennen een klein lekje: een eventuele alg/org scope wordt niet gecontroleerd
// Dat zou pas spelenals de nieuwe melding wel dezelfde objectsoort objecten mag hebben
// maar op een krappere scope.
var sql = "INSERT INTO mld_melding_object(mld_melding_key, ins_deel_key)"
+ " SELECT " + new_mld_key + ", mmo.ins_deel_key"
+ " FROM mld_melding_object mmo"
+ " , ins_v_aanwezigdeel d"
+ " , ins_srtdeel s"
+ " , ins_srtgroep g"
+ " WHERE mld_melding_key = " + mld_key
+ " AND mld_melding_object_verwijder IS NULL"
+ " AND (d.ins_deel_vervaldatum IS NULL OR d.ins_deel_vervaldatum > TRUNC(SYSDATE))"
+ " AND d.ins_deel_key = mmo.ins_deel_key"
+ " AND d.ins_srtdeel_key = s.ins_srtdeel_key"
+ " AND s.ins_srtgroep_key = g.ins_srtgroep_key";
if (stdm_info.inst_type == 'D')
sql += " AND g.ins_discipline_key = " + stdm_info.ins_srtinst_key;
else if (stdm_info.inst_type == 'G')
sql += " AND s.ins_srtgroep_key = " + stdm_info.ins_srtinst_key;
else if (stdm_info.inst_type == 'S')
sql += " AND d.ins_srtdeel_key = " + stdm_info.ins_srtinst_key;
Oracle.Execute(sql);
}
mld.setmeldingstatus(new_mld_key, 2); // Zorgt ook voor tracking & daarmee notificatie
mld.nextworkflowstep(new_mld_key, -1); // -1 = initial (the originating call)
// Kenmerken copie<69>ren
// Sql huidige kenmerken
sql_current = "SELECT k.mld_kenmerk_key"
+ ", (SELECT v.mld_kenmerkmelding_waarde"
+ " FROM mld_kenmerkmelding v"
+ ", mld_kenmerk vk"
+ " WHERE v.mld_melding_key = " + mld_key
+ " AND vk.mld_srtkenmerk_key = k.mld_srtkenmerk_key"
+ " AND vk.mld_kenmerk_groep = k.mld_kenmerk_groep"
+ " AND v.mld_kenmerk_key = vk.mld_kenmerk_key) currrval"
+ ", "+ lcl.xsqla('k.mld_kenmerk_default','k.mld_kenmerk_key')
+ ", k.mld_kenmerk_verplicht"
+ ", k.mld_srtkenmerk_key"
+ ", k.mld_kenmerk_groep"
+ " FROM mld_srtkenmerk t"
+ ", mld_kenmerk k"
+ ", mld_stdmelding s"
+ ", mld_discipline d"
+ " WHERE s.mld_stdmelding_key = ("
+ "SELECT mld_stdmelding_key" // de oorspronkelijke! stdm_key
+ " FROM mld_melding"
+ " WHERE mld_melding_key = " + mld_key + ")"
+ " AND s.mld_ins_discipline_key = d.ins_discipline_key"
+ " AND ((k.mld_stdmelding_key = s.mld_stdmelding_key"
+ " AND k.mld_kenmerk_niveau = 'S')"
+ " OR (k.mld_stdmelding_key = s.mld_ins_discipline_key"
+ " AND k.mld_kenmerk_niveau = 'D')"
+ " OR (k.mld_stdmelding_key = d.ins_srtdiscipline_key"
+ " AND k.mld_kenmerk_niveau = 'T'))"
+ " AND k.mld_kenmerk_verwijder IS null"
+ " AND k.mld_srtkenmerk_key = t.mld_srtkenmerk_key"
+ " AND t.mld_srtkenmerk_verwijder IS null"
+ " AND k.mld_kenmerk_volgnummer <= 900"
+ " ORDER BY k.mld_kenmerk_key, k.mld_kenmerk_groep";
oRs = Oracle.Execute(sql_current);
while (!oRs.eof) {
currentProperties[currentProperties.length] = new PropertieItem(oRs("mld_kenmerk_key").Value,
oRs("currrval").Value,
oRs("mld_kenmerk_default").Value,
oRs("mld_kenmerk_verplicht").Value,
oRs("mld_srtkenmerk_key").Value,
oRs("mld_kenmerk_groep").Value);
oRs.MoveNext();
}
// Sql nieuwe kenmerken bij nieuwe mld_stdmelding
sql_new = "SELECT k.mld_kenmerk_key"
+ ", "+ lcl.xsqla('k.mld_kenmerk_default','k.mld_kenmerk_key')
+ ", k.mld_kenmerk_verplicht"
+ ", k.mld_srtkenmerk_key"
+ ", k.mld_kenmerk_groep"
+ " FROM mld_srtkenmerk t"
+ ", mld_kenmerk k"
+ ", mld_stdmelding s"
+ ", mld_discipline d"
+ " WHERE s.mld_stdmelding_key = " + stdm_key
+ " AND s.mld_ins_discipline_key = d.ins_discipline_key"
+ " AND ((k.mld_stdmelding_key = s.mld_stdmelding_key"
+ " AND k.mld_kenmerk_niveau = 'S')"
+ " OR (k.mld_stdmelding_key = s.mld_ins_discipline_key"
+ " AND k.mld_kenmerk_niveau = 'D')"
+ " OR (k.mld_stdmelding_key = d.ins_srtdiscipline_key"
+ " AND k.mld_kenmerk_niveau = 'T'))"
+ " AND k.mld_kenmerk_verwijder IS null"
+ " AND k.mld_srtkenmerk_key = t.mld_srtkenmerk_key"
+ " AND t.mld_srtkenmerk_verwijder IS null"
+ " AND k.mld_kenmerk_volgnummer <= 900"
+ " ORDER BY k.mld_kenmerk_key, k.mld_kenmerk_groep";
oRs = Oracle.Execute(sql_new);
while (!oRs.eof)
{
foundValue = false;
waarde = null;
for (var i = 0; i < currentProperties.length; i++)
{
if (currentProperties[i].srtkey == oRs("mld_srtkenmerk_key").Value && currentProperties[i].groep == oRs("mld_kenmerk_groep").Value)
{ // De srt keys en de groep zijn hetzelfde. Dan de waarde overnemen.
if (currentProperties[i].waarde != null)
{
waarde = currentProperties[i].waarde;
foundValue = true;
}
break;
}
}
if (!foundValue)
{ // Als nieuwe waarde toch verplicht is dan neem de defaultwaarde.
// Als defaultwaarde ook niet gegeven is dan FcltMgr.alert(ERROR)???
if (oRs("mld_kenmerk_verplicht").Value == 1)
{ // if (verplicht)
if (oRs("mld_kenmerk_default").Value != null)
{ // defaultwaarde != null
waarde = oRs("mld_kenmerk_default").Value; // neem defaultwaarde
if (waarde.match('##SQL##') != null)
{
waarde = waarde.substr(waarde.indexOf('##SQL##') + 7);
var sql2 = waarde.replace("##PRS_PERSLID_KEY##", mld_melding.melder_key);
var oRsPerslid = Oracle.Execute(sql2);
if (!oRsPerslid.eof)
waarde = oRsPerslid(0).Value;
else
waarde = null;
oRsPerslid.Close();
}
}
if (!waarde)
__Log("ERROR, kenmerkwaarde is verplicht maar er is geen waarde!");
}
}
if (waarde != null)
{ // Copie<69>r kenmerk voor nieuwe melding
sql = "INSERT INTO mld_kenmerkmelding ("
+ "mld_melding_key"
+ ", mld_kenmerk_key"
+ ", mld_kenmerkmelding_waarde"
+ ") VALUES ("
+ new_mld_key
+ ", " + oRs("mld_kenmerk_key").Value
+ ", " + safe.quoted_sql(waarde)
+ ")";
var err = Oracle.Execute(sql, true);
if (err.friendlyMsg)
abort_with_warning(err.friendlyMsg);
}
oRs.MoveNext();
}
%>
<script type="text/javascript">
function afsluitenVervolg()
{
// Open de nieuwe melding direct maar
var url = "appl/mld/mld_melding.asp?urole=<%=urole%>&mld_key=<%=new_mld_key%>";
FcltMgr.openDetail(url, "<%=L("lcl_complain") + ' ' + new_mld_key%>");
// en sluit onszelf
// MGE: De message wordt niet gegeven. FcltMgr.closeDetail kent geen message parameter
// en de aanroeper (FcltMgr.openModalDetail) van mld_continue heeft geen callback functie die eventueel nog de message kan geven.
// Tot nu toe is de message niet gemist dus laat ik het zo.....
FcltMgr.closeDetail( window, { message: "<%=L("lcl_continu") + new_mld_key%>" } );
}
// Moet er voor de nieuwe stdmelding automatisch een opdracht aangemaakt worden?
if (<%=stdm_info.autoorder? 1 : 0%> == 1)
{
var data = { mld_key: <%=new_mld_key%>,
urole: "<%=urole%>",
autoorder: 1
};
<% protectRequest.dataToken("data"); %>
$.post("mld_edit_opdr_save.asp",
data,
FcltCallbackAndThenAlways(afsluitenVervolg),
"json");
}
else
afsluitenVervolg();
</script>
</body>
</html>