363 lines
14 KiB
Plaintext
363 lines
14 KiB
Plaintext
<%@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 this_melder = melder_info.func_enabled2("MLD", { ins_discipline_key: disc_key,
|
||
loc_key: mld_melding.loc_key,
|
||
prs_key: melder_key
|
||
});
|
||
var melder_auth = this_melder.authparams(authparams);
|
||
var canAdd = melder_auth && melder_auth.PRSwritelevel < 9 && melder_auth.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 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>
|