<%@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: */ %> <% 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); %>
<% FCLTHeader.Generate(); %>
<% 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ë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ë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ë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(); } %>