diff --git a/APPL/API/api_mldsoap.asp b/APPL/API/api_mldsoap.asp index da7779c402..cc80d03365 100644 --- a/APPL/API/api_mldsoap.asp +++ b/APPL/API/api_mldsoap.asp @@ -107,6 +107,8 @@ for (i = 0; i < meldingen.length; i++) var plaats_key = -1; // Bepaald op basis van meldgeb/meldver/meldrnr var meld_kpn = XMLval(meldingen[i], "kostenplaats"); var meld_oms = XMLval(meldingen[i], "omschrijving"); + var meld_opm = XMLval(meldingen[i], "opmerking"); + //var mldkenmerken = (meldingen[i].getElementsByTagName("kenmerk"))[0].childNodes[0].nodeValue; // Unsupported yet var mldkenmerken = meldingen[i].getElementsByTagName("kenmerk"); var mld_key = -1; // Bepaald na insert @@ -137,22 +139,15 @@ for (i = 0; i < meldingen.length; i++) resultcode = 1; resulttekst = "Undefined external ID (key)"; } - else if (meldaction == "update") - { - resultcode = 0; - // verder nog even kijken wat we willen doen. - // in ieder geval de omschrijving aanpassen - fields.push({ dbs: "mld_melding_omschrijving", typ: "varchar", val: meld_oms, track: L("lcl_mld_inf_Omschrijving"), len: 4000 }); - var mldUpd = buildTrackingUpdate("mld_melding", "mld_melding_key = " + mld_key, fields, { noValidateToken: true }); - Oracle.Execute(mldUpd.sql); - } - else if (meldaction != "insert") + else if (meldaction != "insert" && meldaction != "update") { resultcode = 2; resulttekst = "Undefined operation (type)"; } else { + // voor zowel insert als update: + var voor_key = -1; var perslid_key = -1; if (voor_login != null) @@ -196,9 +191,10 @@ for (i = 0; i < meldingen.length; i++) } } + tsql = "SELECT 1" + " FROM mld_stdmelding sm" - + " WHERE sm.mld_stdmelding_key = " + stdmld_key + + " WHERE sm.mld_stdmelding_key = " + (stdmld_key || -1) + " AND sm.mld_stdmelding_verwijder IS NULL"; var oRs = Oracle.Execute(tsql); if (oRs.eof) @@ -208,293 +204,224 @@ for (i = 0; i < meldingen.length; i++) } else { // Hier heb ik een geldige mld_stdmelding_key. - var stdm_info = mld.mld_stdmeldinginfo(stdmld_key); - - var stdmld_sla_tijdsduur = stdm_info.prioriteiten[3].uitvoertijd; - var stdmld_sla_eenheid = stdm_info.prioriteiten[3].eenheid; - var stdmld_niveau = stdm_info.alg_onrgoed_niveau; // required niveau - var alglevel_ok = !stdm_info.ins_srtdiscipline_alg || !stdmld_niveau; // Zonder niveau altijd goed - - fields.push({ dbs: "mld_stdmelding_key", typ: "key", val: stdmld_key }); - fields.push({ dbs: "mld_melding_t_uitvoertijd.tijdsduur", typ: "number", val: stdmld_sla_tijdsduur, obj: "MLD_T_UITVOERTIJD" }); - fields.push({ dbs: "mld_melding_t_uitvoertijd.eenheid", typ: "varchar", val: stdmld_sla_eenheid, obj: "MLD_T_UITVOERTIJD" }); - if (melddatum != null) + // einde gezamelijke data (insert && update) + if (meldaction == "update") { - try + if (mld_key == -1) { - var meldaanmaakdate = XMLtoJsDate(melddatum); - fields.push({ dbs: "mld_melding_datum", typ: "datetime", val: meldaanmaakdate }); + resultcode = 4; + resulttekst = "Undefined melding_key"; } - catch (e) - { // Verkeerde datum-formaat, volgens spec. dan now gebruiken! - __DoLog("Formaat ontvangen XML-datum incorrect: "+ melddatum, "#00FF00"); - meldaanmaakdate = now; - fields.push({ dbs: "mld_melding_datum", typ: "datetime", val: meldaanmaakdate }); - } - } - else - { - fields.push({ dbs: "mld_melding_datum", typ: "datetime", val: now }); - } - // De einddatum is de meegegeven einddatum, maar als die niet wordt meegegeven is het - // gewoon enddate_std en dat regelt de trigger wel, dus DAN MOET IK HEM NIET MEEGEVEN - if (einddatum != null) - { - try + else { - var meldeinddate = XMLtoJsDate(einddatum); - if (meldeinddate > meldaanmaakdate) + if (einddatum != null) { - fields.push({ dbs: "mld_melding_einddatum", typ: "datetime", val: meldeinddate }); + var mld_datum; + tsql = "SELECT mld_melding_datum" + + " FROM mld_melding" + + " WHERE mld_melding_key = " + mld_key; + oRs = Oracle.Execute(tsql); + if (!oRs.EOF) + mld_datum = oRs("mld_melding_datum").value; + oRs.Close(); + + try + { + var meldeinddate = XMLtoJsDate(einddatum); + if (meldeinddate > mld_datum) + { + fields.push({ dbs: "mld_melding_einddatum", typ: "datetime", val: meldeinddate, track: L("lcl_mld_enddate") }); + } + else + { + // Ontvangen XML-einddatum voor begindatum, dan later volgens SLA zetten! + __DoLog("Ontvangen XML-einddatum voor begindatum: "+ einddatum, "#00FF00"); + } + } + catch (e) + { + // Verkeerde datum-formaat, dan later volgens SLA zetten! + __DoLog("Formaat ontvangen XML-einddatum incorrect: "+ einddatum, "#00FF00"); + } } - else + + if (meld_kpn && meld_kpn != "") { - // Ontvangen XML-einddatum voor begindatum, dan later volgens SLA zetten! - __DoLog("Ontvangen XML-einddatum voor begindatum: "+ einddatum, "#00FF00"); + var kpn_key = getKpn(meld_kpn); + if (kpn_key != -1) + fields.push({ dbs: "prs_kostenplaats_key", typ: "key", val: kpn_key, track: L("lcl_mld_inf_Kostenplaats"), foreign: "prs_kostenplaats"}); + } + + fields.push({ dbs: "mld_melding_opmerking", typ: "varchar", val: meld_opm, track: L("lcl_mld_inf_Opmerking"), len: 4000 }); + fields.push({ dbs: "mld_melding_omschrijving", typ: "varchar", val: meld_oms, track: L("lcl_mld_inf_Omschrijving"), len: 4000 }); + + var mldUpd = buildTrackingUpdate("mld_melding", "mld_melding_key = " + mld_key, fields, { noValidateToken: true }); + Oracle.Execute(mldUpd.sql); + mld.trackmeldingupdate(mld_key, L("lcl_mld_is_updatedbysoap").format(mld_key) + "\n" + mldUpd.trackarray.join("\n")); + + // De kenmerken. + upsertKenmerk(mldkenmerken, stdmld_key, mld_key); + } + resultcode = 0; // Ik heb gedaan wat ik moest en mocht doen voor deze melding. + } // einde update + else if (meldaction == "insert") + { + var stdm_info = mld.mld_stdmeldinginfo(stdmld_key); + + var stdmld_sla_tijdsduur = stdm_info.prioriteiten[3].uitvoertijd; + var stdmld_sla_eenheid = stdm_info.prioriteiten[3].eenheid; + var stdmld_niveau = stdm_info.alg_onrgoed_niveau; // required niveau + var alglevel_ok = !stdm_info.ins_srtdiscipline_alg || !stdmld_niveau; // Zonder niveau altijd goed + + fields.push({ dbs: "mld_stdmelding_key", typ: "key", val: stdmld_key }); + fields.push({ dbs: "mld_melding_t_uitvoertijd.tijdsduur", typ: "number", val: stdmld_sla_tijdsduur, obj: "MLD_T_UITVOERTIJD" }); + fields.push({ dbs: "mld_melding_t_uitvoertijd.eenheid", typ: "varchar", val: stdmld_sla_eenheid, obj: "MLD_T_UITVOERTIJD" }); + if (melddatum != null) + { + try + { + var meldaanmaakdate = XMLtoJsDate(melddatum); + fields.push({ dbs: "mld_melding_datum", typ: "datetime", val: meldaanmaakdate }); + } + catch (e) + { // Verkeerde datum-formaat, volgens spec. dan now gebruiken! + __DoLog("Formaat ontvangen XML-datum incorrect: "+ melddatum, "#00FF00"); + meldaanmaakdate = now; + fields.push({ dbs: "mld_melding_datum", typ: "datetime", val: meldaanmaakdate }); } } - catch (e) + else { - // Verkeerde datum-formaat, dan later volgens SLA zetten! - __DoLog("Formaat ontvangen XML-einddatum incorrect: "+ einddatum, "#00FF00"); + fields.push({ dbs: "mld_melding_datum", typ: "datetime", val: now }); + } + // De einddatum is de meegegeven einddatum, maar als die niet wordt meegegeven is het + // gewoon enddate_std en dat regelt de trigger wel, dus DAN MOET IK HEM NIET MEEGEVEN + if (einddatum != null) + { + try + { + var meldeinddate = XMLtoJsDate(einddatum); + if (meldeinddate > meldaanmaakdate) + { + fields.push({ dbs: "mld_melding_einddatum", typ: "datetime", val: meldeinddate }); + } + else + { + // Ontvangen XML-einddatum voor begindatum, dan later volgens SLA zetten! + __DoLog("Ontvangen XML-einddatum voor begindatum: "+ einddatum, "#00FF00"); + } + } + catch (e) + { + // Verkeerde datum-formaat, dan later volgens SLA zetten! + __DoLog("Formaat ontvangen XML-einddatum incorrect: "+ einddatum, "#00FF00"); + } } - } - tsql = "SELECT alg_locatie_key " - + " FROM alg_v_aanweziglocatie" - + " WHERE alg_locatie_code="+ safe.quoted_sql(meldloc); - var oRs = Oracle.Execute(tsql); - if (!oRs.eof) - { - alglevel_ok = alglevel_ok || stdmld_niveau == "L"; - locatie_key = oRs("alg_locatie_key").value; - fields.push({ dbs: "mld_alg_locatie_key", typ: "key", val: locatie_key }); - - tsql = "SELECT alg_gebouw_key " - + " FROM alg_v_aanweziggebouw" - + " WHERE alg_locatie_key ="+ locatie_key - + " AND alg_gebouw_code="+ safe.quoted_sql(meldgeb); + tsql = "SELECT alg_locatie_key " + + " FROM alg_v_aanweziglocatie" + + " WHERE alg_locatie_code="+ safe.quoted_sql(meldloc); var oRs = Oracle.Execute(tsql); if (!oRs.eof) { - alglevel_ok = alglevel_ok || stdmld_niveau == "G"; - plaats_key = oRs("alg_gebouw_key").value; + alglevel_ok = alglevel_ok || stdmld_niveau == "L"; + locatie_key = oRs("alg_locatie_key").value; + fields.push({ dbs: "mld_alg_locatie_key", typ: "key", val: locatie_key }); - tsql = "SELECT alg_verdieping_key " - + " FROM alg_v_aanwezigverdieping" - + " WHERE alg_gebouw_key ="+ plaats_key - + " AND alg_verdieping_code="+ safe.quoted_sql(meldver); + tsql = "SELECT alg_gebouw_key " + + " FROM alg_v_aanweziggebouw" + + " WHERE alg_locatie_key ="+ locatie_key + + " AND alg_gebouw_code="+ safe.quoted_sql(meldgeb); var oRs = Oracle.Execute(tsql); if (!oRs.eof) { - alglevel_ok = alglevel_ok || stdmld_niveau == "V"; - plaats_key = oRs("alg_verdieping_key").value; + alglevel_ok = alglevel_ok || stdmld_niveau == "G"; + plaats_key = oRs("alg_gebouw_key").value; - tsql = "SELECT alg_ruimte_key " - + " FROM alg_v_aanwezigruimte" - + " WHERE alg_verdieping_key ="+ plaats_key - + " AND alg_ruimte_nr="+ safe.quoted_sql(meldrnr); + tsql = "SELECT alg_verdieping_key " + + " FROM alg_v_aanwezigverdieping" + + " WHERE alg_gebouw_key ="+ plaats_key + + " AND alg_verdieping_code="+ safe.quoted_sql(meldver); var oRs = Oracle.Execute(tsql); - if (!oRs.eof) { - alglevel_ok = alglevel_ok || stdmld_niveau == "R"; - plaats_key = oRs("alg_ruimte_key").value; - } - } - } - - if (plaats_key != -1) - { - fields.push({ dbs: "mld_alg_onroerendgoed_keys", typ: "key", val: plaats_key }); - } - } - if (!alglevel_ok) - { - resultcode = 4; - resulttekst = "Location not found"; - __DoLog(resulttekst, "#00FF00"); - } - - var kpn_key = user.afdeling().prs_kostenplaats_key(); - if (meld_kpn && meld_kpn != "") - { - tsql = "SELECT prs_kostenplaats_key" - + " FROM prs_kostenplaats" - + " WHERE prs_kostenplaats_verwijder IS NULL" - + " AND (prs_kostenplaats_begin IS NULL" - + " OR prs_kostenplaats_begin < SYSDATE)" - + " AND (prs_kostenplaats_eind IS NULL" - + " OR prs_kostenplaats_eind > SYSDATE)" - + " AND prs_kostenplaats_upper = " + safe.quoted_sql_upper(meld_kpn); // Unique - oRs = Oracle.Execute(tsql); - if (!oRs.EoF) - { - var meld_kpn_key = oRs("prs_kostenplaats_key").Value; - - tsql = "SELECT ''" - + " FROM prs_perslidkostenplaats" - + " WHERE prs_perslidkostenplaats_boeken = 1" - + " AND (prs_kostenplaats_key = " + meld_kpn_key - + " OR prs_kostenplaats_key IS NULL)" // Mandated for all - + " AND prs_perslid_key = " + perslid_key; - oRs = Oracle.Execute(tsql); - - if (!oRs.EoF) // persoon is gemandateerd voor gegeven kostenplaats - kpn_key = meld_kpn_key; - } - oRs.Close(); - } - - fields = fields.concat( - [ { dbs: "mld_melding_key", typ: "key", seq: "mld_s_mld_melding_key" }, - { dbs: "mld_melding_module", typ: "varchar", val: "MLD" }, - { dbs: "mld_meldbron_key", typ: "key", val: 6 }, // system - { dbs: "mld_melding_omschrijving", typ: "varchar", val: meld_oms, len: 4000 }, - { dbs: "prs_kostenplaats_key", typ: "key", val: kpn_key }, - { dbs: "prs_perslid_key", typ: "key", val: perslid_key }, - { dbs: "prs_perslid_key_voor", typ: "key", val: voor_key }, - { dbs: "mld_melding_spoed", typ: "key", val: 3 }, // default (frontend) = 3 - { dbs: "mld_melding_externnr", typ: "varchar", val: ext_id, len: 30 } - ]); - - // We weten wat te inserten, nu nog uitvoeren; rechten voldoende afgedekt via MLDUSE-check hierboven? - - if (resultcode == -1) - { // nog steeds geen fouten - var mldIns = buildInsert("mld_melding", fields, { noValidateToken: true }); - mld_key = mldIns.sequences["mld_melding_key"]; - - sql = mldIns.sql; - oRs = Oracle.Execute(sql); - - // Zetten van de status op ingevoerd en afhandelen van de tracking. - mld.setmeldingstatus(mld_key, 2); // Zorgt ook voor tracking & daarmee notificatie. - - // Eventuele (gewijzigde) objecten zijn nu ook opgeslagen. Nu kan de definitieve mld_melding.mld_melding_einddatum_std bepaald en gezet worden. - //mld.updatestdeinddatum(mld_key); // Unsupported yet. So update of mld_melding_einddatum_std not needed yet. - - // De kenmerken. - for (j=0; j < mldkenmerken.length; j++) - { - var kenmerk_naam = mldkenmerken[j].getAttribute("naam"); - if (mldkenmerken[j].childNodes.length > 0) - var kenmerk_waarde = mldkenmerken[j].childNodes[0].nodeValue; - else - var kenmerk_waarde = ""; - //Response.Write(kenmerk_naam); - //Response.Write(kenmerk_waarde); - // Zoek het kenmerk op naam terug - ksql = "SELECT k.mld_kenmerk_key, sk.mld_srtkenmerk_kenmerktype, sk.mld_srtkenmerk_lengte " - + " FROM mld_kenmerk k" - + " , mld_srtkenmerk sk" - + " , mld_stdmelding s" - + " , mld_discipline d" - + " WHERE s.mld_ins_discipline_key = d.ins_discipline_key" - + " AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key " - + " AND k.mld_kenmerk_verwijder IS NULL " - + " AND sk.mld_srtkenmerk_upper = " + safe.quoted_sql_upper(kenmerk_naam) - + " AND s.mld_ins_discipline_key = d.ins_discipline_key" - + " AND s.mld_stdmelding_key = " + stdmld_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'))"; - - var oRs = Oracle.Execute(ksql); - - if (!oRs.eof) - { - var kenmerk_key = oRs("mld_kenmerk_key").value; - var kenmerk_type = oRs("mld_srtkenmerk_kenmerktype").value; - var kenmerk_lengte = oRs("mld_srtkenmerk_lengte").value; - - ksql = "SELECT km.mld_kenmerkmelding_key " - + " FROM mld_kenmerkmelding km " - + " WHERE km.mld_melding_key = " + mld_key - + " AND km.mld_kenmerk_key = " + kenmerk_key; - var oRs = Oracle.Execute(ksql); - - switch (kenmerk_type) + if (!oRs.eof) { - case 'C': - { - // we ondersteunen alleen nog maar karakter velden. - if (!oRs.eof) - { - var kenmerkmelding_key = oRs("mld_kenmerkmelding_key").value; - ksql = "UPDATE mld_kenmerkmelding" - + " SET mld_kenmerkmelding_waarde = " + safe.quoted_sql(kenmerk_waarde) - + " WHERE mld_kenmerkmelding_key = " + kenmerkmelding_key; - } - else - { - ksql = "INSERT INTO mld_kenmerkmelding (mld_kenmerk_key, mld_melding_key, mld_kenmerkmelding_waarde) " - + "VALUES (" + kenmerk_key + ", " + mld_key + ", " + safe.quoted_sql(kenmerk_waarde) + ")"; - } - Oracle.Execute(ksql); - break; - } - case 'N': - { - // we ondersteunen alleen nog maar karakter velden. - if (!oRs.eof) - { - var kenmerkmelding_key = oRs("mld_kenmerkmelding_key").value; - ksql = "UPDATE mld_kenmerkmelding" - + " SET mld_kenmerkmelding_waarde = " + safe.quoted_sql(kenmerk_waarde) - + " WHERE mld_kenmerkmelding_key = " + kenmerkmelding_key; - } - else - { - ksql = "INSERT INTO mld_kenmerkmelding (mld_kenmerk_key, mld_melding_key, mld_kenmerkmelding_waarde) " - + "VALUES (" + kenmerk_key + ", " + mld_key + ", " + safe.quoted_sql(kenmerk_waarde) + ")"; - } - Oracle.Execute(ksql); - break; - } - case "M": // Folder met bijlagen - { - //Response.Write(kenmerk_naam); - var bijlagen = mldkenmerken[j].getElementsByTagName("bijlage"); - var bi; - for (bi = 0; bi < bijlagen.length; bi++) - { - var Attachment = XMLval(bijlagen[bi], "attachment"); - var Name = XMLval(bijlagen[bi], "name"); - var Size = XMLval(bijlagen[bi], "size"); - //Response.Write("Name: " + Name + " size: " + Size); - if (Attachment && Name && Size) - { - var SafeName = safe.filename(Name); - var params = flexProps("MLD", mld_key, String(kenmerk_key), "M"); - if (!params.isAllowedName(SafeName)) - { - __DoLog("Unsafe SOAP file '{0}' ignored.".format(SafeName), "#FFFF00"); - } - else - { - __Log("Start saving: " + params.AttachPath + SafeName); - CreateFullPath(params.AttachPath); - encodedString2File(params.AttachPath + SafeName, Attachment, "bin.hex"); - __Log("Done saving: " + params.AttachPath + SafeName); - } - } - } + alglevel_ok = alglevel_ok || stdmld_niveau == "V"; + plaats_key = oRs("alg_verdieping_key").value; + + tsql = "SELECT alg_ruimte_key " + + " FROM alg_v_aanwezigruimte" + + " WHERE alg_verdieping_key ="+ plaats_key + + " AND alg_ruimte_nr="+ safe.quoted_sql(meldrnr); + var oRs = Oracle.Execute(tsql); + if (!oRs.eof) { + alglevel_ok = alglevel_ok || stdmld_niveau == "R"; + plaats_key = oRs("alg_ruimte_key").value; } } - oRs.Close(); + } + + if (plaats_key != -1) + { + fields.push({ dbs: "mld_alg_onroerendgoed_keys", typ: "key", val: plaats_key }); } } - - resultcode = 0; // Ik heb gedaan wat ik moest en mocht doen voor deze melding. - // En nog maar even de aanname dat een extern systeem niet aan workflows/ktos doet? - - // Klantspecifieke check functie (hookfunction) voor de invoer - var pResult = new HookResult(); - if (!custfunc.mld_postsave(mld_key, pResult)) + if (!alglevel_ok) { - __DoLog(pResult.errmsg, "#00FF00"); + resultcode = 5; + resulttekst = "Location not found"; + __DoLog(resulttekst, "#00FF00"); } - } + var kpn_key = user.afdeling().prs_kostenplaats_key(); + if (meld_kpn && meld_kpn != "") + { + var tempKpn = getKpn(meld_kpn); + if (tempKpn != -1) + kpn_key = tempKpn; + } + + fields = fields.concat( + [ { dbs: "mld_melding_key", typ: "key", seq: "mld_s_mld_melding_key" }, + { dbs: "mld_melding_module", typ: "varchar", val: "MLD" }, + { dbs: "mld_meldbron_key", typ: "key", val: 6 }, // system + { dbs: "mld_melding_omschrijving", typ: "varchar", val: meld_oms, len: 4000 }, + { dbs: "prs_kostenplaats_key", typ: "key", val: kpn_key }, + { dbs: "prs_perslid_key", typ: "key", val: perslid_key }, + { dbs: "prs_perslid_key_voor", typ: "key", val: voor_key }, + { dbs: "mld_melding_spoed", typ: "key", val: 3 }, // default (frontend) = 3 + { dbs: "mld_melding_externnr", typ: "varchar", val: ext_id, len: 30 } + ]); + + // We weten wat te inserten, nu nog uitvoeren; rechten voldoende afgedekt via MLDUSE-check hierboven? + + if (resultcode == -1) + { // nog steeds geen fouten + var mldIns = buildInsert("mld_melding", fields, { noValidateToken: true }); + mld_key = mldIns.sequences["mld_melding_key"]; + + sql = mldIns.sql; + oRs = Oracle.Execute(sql); + + // Zetten van de status op ingevoerd en afhandelen van de tracking. + mld.setmeldingstatus(mld_key, 2); // Zorgt ook voor tracking & daarmee notificatie. + + // Eventuele (gewijzigde) objecten zijn nu ook opgeslagen. Nu kan de definitieve mld_melding.mld_melding_einddatum_std bepaald en gezet worden. + //mld.updatestdeinddatum(mld_key); // Unsupported yet. So update of mld_melding_einddatum_std not needed yet. + + // De kenmerken. + upsertKenmerk(mldkenmerken, stdmld_key, mld_key); + + resultcode = 0; // Ik heb gedaan wat ik moest en mocht doen voor deze melding. + // En nog maar even de aanname dat een extern systeem niet aan workflows/ktos doet? + + // Klantspecifieke check functie (hookfunction) voor de invoer + var pResult = new HookResult(); + if (!custfunc.mld_postsave(mld_key, pResult)) + { + __DoLog(pResult.errmsg, "#00FF00"); + } + } + } // end insert } // end geldige stdmld_key } // end geldige ext_id @@ -519,6 +446,150 @@ for (i = 0; i < meldingen.length; i++) } // end for // Alle melding-nodes zijn behandeld. +function getKpn(meld_kpn) +{ + if (!meld_kpn) + return -1; + + var temp_sql = "SELECT ''" + + " FROM prs_perslidkostenplaats pkp" + + " WHERE pkp.prs_perslidkostenplaats_boeken = 1" + + " AND (pkp.prs_kostenplaats_key = kp.prs_kostenplaats_key" + + " OR pkp.prs_kostenplaats_key IS NULL)" // Mandated for all + + " AND pkp.prs_perslid_key = " + perslid_key; + + temp_sql = "SELECT kp.prs_kostenplaats_key" + + " FROM prs_kostenplaats kp" + + " WHERE kp.prs_kostenplaats_verwijder IS NULL" + + " AND (kp.prs_kostenplaats_begin IS NULL" + + " OR kp.prs_kostenplaats_begin < SYSDATE)" + + " AND (kp.prs_kostenplaats_eind IS NULL" + + " OR kp.prs_kostenplaats_eind > SYSDATE)" + + " AND EXISTS (" + + temp_sql + + " )" + + " AND kp.prs_kostenplaats_upper = " + safe.quoted_sql_upper(meld_kpn); // Unique + + var oRs = Oracle.Execute(temp_sql); + if (!oRs.EoF) + return oRs("prs_kostenplaats_key").Value; + oRs.Close(); + return -1; +} + +function upsertKenmerk(kenmerken, stdmld_key, mld_key) +{ + for (j=0; j < kenmerken.length; j++) + { + var kenmerk_naam = kenmerken[j].getAttribute("naam"); + if (kenmerken[j].childNodes.length > 0) + var kenmerk_waarde = kenmerken[j].childNodes[0].nodeValue; + else + var kenmerk_waarde = ""; + + // Zoek het kenmerk op naam terug + ksql = "SELECT k.mld_kenmerk_key, sk.mld_srtkenmerk_kenmerktype, sk.mld_srtkenmerk_lengte " + + " FROM mld_kenmerk k" + + " , mld_srtkenmerk sk" + + " , mld_stdmelding s" + + " , mld_discipline d" + + " WHERE s.mld_ins_discipline_key = d.ins_discipline_key" + + " AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key " + + " AND k.mld_kenmerk_verwijder IS NULL " + + " AND sk.mld_srtkenmerk_upper = " + safe.quoted_sql_upper(kenmerk_naam) + + " AND s.mld_ins_discipline_key = d.ins_discipline_key" + + " AND s.mld_stdmelding_key = " + stdmld_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'))"; + + var oRs = Oracle.Execute(ksql); + + if (!oRs.eof) + { + var kenmerk_key = oRs("mld_kenmerk_key").value; + var kenmerk_type = oRs("mld_srtkenmerk_kenmerktype").value; + // var kenmerk_lengte = oRs("mld_srtkenmerk_lengte").value; // unsupported yet? + + var temp_sql = "SELECT km.mld_kenmerkmelding_key " + + " FROM mld_kenmerkmelding km " + + " WHERE km.mld_melding_key = " + mld_key + + " AND km.mld_kenmerk_key = " + kenmerk_key; + var oRs = Oracle.Execute(temp_sql); + + switch (kenmerk_type) + { + case 'C': + { + // we ondersteunen alleen nog maar karakter velden. + if (!oRs.eof) + { + var kenmerkmelding_key = oRs("mld_kenmerkmelding_key").value; + ksql = "UPDATE mld_kenmerkmelding" + + " SET mld_kenmerkmelding_waarde = " + safe.quoted_sql(kenmerk_waarde) + + " WHERE mld_kenmerkmelding_key = " + kenmerkmelding_key; + } + else + { + ksql = "INSERT INTO mld_kenmerkmelding (mld_kenmerk_key, mld_melding_key, mld_kenmerkmelding_waarde) " + + "VALUES (" + kenmerk_key + ", " + mld_key + ", " + safe.quoted_sql(kenmerk_waarde) + ")"; + } + Oracle.Execute(ksql); + break; + } + case 'N': + { + // we ondersteunen alleen nog maar karakter velden. + if (!oRs.eof) + { + var kenmerkmelding_key = oRs("mld_kenmerkmelding_key").value; + ksql = "UPDATE mld_kenmerkmelding" + + " SET mld_kenmerkmelding_waarde = " + safe.quoted_sql(kenmerk_waarde) + + " WHERE mld_kenmerkmelding_key = " + kenmerkmelding_key; + } + else + { + ksql = "INSERT INTO mld_kenmerkmelding (mld_kenmerk_key, mld_melding_key, mld_kenmerkmelding_waarde) " + + "VALUES (" + kenmerk_key + ", " + mld_key + ", " + safe.quoted_sql(kenmerk_waarde) + ")"; + } + Oracle.Execute(ksql); + break; + } + case "M": // Folder met bijlagen + { + //Response.Write(kenmerk_naam); + var bijlagen = kenmerken.getElementsByTagName("bijlage"); + var bi; + for (bi = 0; bi < bijlagen.length; bi++) + { + var Attachment = XMLval(bijlagen[bi], "attachment"); + var Name = XMLval(bijlagen[bi], "name"); + var Size = XMLval(bijlagen[bi], "size"); + //Response.Write("Name: " + Name + " size: " + Size); + if (Attachment && Name && Size) + { + var SafeName = safe.filename(Name); + var params = flexProps("MLD", mld_key, String(kenmerk_key), "M"); + if (!params.isAllowedName(SafeName)) + { + __DoLog("Unsafe SOAP file '{0}' ignored.".format(SafeName), "#FFFF00"); + } + else + { + __Log("Start saving: " + params.AttachPath + SafeName); + CreateFullPath(params.AttachPath); + encodedString2File(params.AttachPath + SafeName, Attachment, "bin.hex"); + __Log("Done saving: " + params.AttachPath + SafeName); + } + } + } + } + } + oRs.Close(); + } + } +} + xmlResp.appendChild(FCLTElement); if (API.apidata.stylesheet)