From 2b82d94101a4cd97ec968ffa0dff6b66d3d956e6 Mon Sep 17 00:00:00 2001 From: Maykel Geerdink Date: Thu, 7 Nov 2024 09:04:07 +0000 Subject: [PATCH] VNOG#85909: Verbeteren werking van onderdelen in objectbeheer. svn path=/Website/trunk/; revision=66937 --- APPL/INS/ins_change_parent.asp | 178 ++++++++++++++ APPL/INS/ins_change_plaatseigenaar.asp | 307 +++++++++++++++++++++++++ APPL/INS/ins_deel_free.asp | 4 +- APPL/INS/ins_deelkoppeling.asp | 49 ++-- APPL/INS/ins_edit_deel.asp | 41 +++- APPL/INS/ins_list.inc | 23 +- APPL/INS/ins_onderdelen.asp | 226 ++++++++++++++++++ APPL/INS/ins_onderdelen.js | 158 +++++++++++++ APPL/INS/ins_show_deel.asp | 38 ++- APPL/INS/ins_srtdeel_search.asp | 34 ++- APPL/Shared/Suggest/SuggestObject.asp | 8 +- APPL/Shared/Suggest/objectFilter.inc | 7 +- APPL/Shared/objectselector.inc | 4 +- 13 files changed, 1024 insertions(+), 53 deletions(-) create mode 100644 APPL/INS/ins_change_parent.asp create mode 100644 APPL/INS/ins_change_plaatseigenaar.asp create mode 100644 APPL/INS/ins_onderdelen.asp create mode 100644 APPL/INS/ins_onderdelen.js diff --git a/APPL/INS/ins_change_parent.asp b/APPL/INS/ins_change_parent.asp new file mode 100644 index 0000000000..89078cce7f --- /dev/null +++ b/APPL/INS/ins_change_parent.asp @@ -0,0 +1,178 @@ +<%@language = "javascript" %> +<% +/* $Revision$ + $Id$ + + File: ins_change_parent.asp + Description: Verander het objectsoort + Impliciet: ins_deel.ins_deel_parent_key wordt aangepast + Expliciet: + Parameters: + ins_key deel key + submitting Mode {0=invoer / 1=opslaan} + + Context: ins_edit_deel.asp wijzigen object + Note: + +*/ %> + + + + + + + + + + +<% +FCLTHeader.Requires({ plugins:["jQuery"] + , js: ["../ins/ins_onderdelen.js"] + }); + +var autfunction = "WEB_INSMAN"; +var authparams = user.checkAutorisation(autfunction); + +var ins_key = getQParamInt("ins_key"); // Het te wijzigen object. +// Bepaal of het object ook echt gewijzigd kan of mag worden. +this_ins = ins.func_enabled_deel(ins_key); +user.anything_todo_or_abort(this_ins.canChange); + +%> + + + +<% FCLTHeader.Generate(); + var submitting = getQParamInt("submit", 0) == 1; + if (submitting) + { + protectRequest.validateToken(); + var success = false; + var parent_key = getFParamInt("deel_key"); // Nieuw parent object. + var sql = "UPDATE ins_deel" + + " SET ins_deel_parent_key = " + (parent_key > 0? parent_key : "NULL") + + " WHERE ins_deel_key = " + ins_key; + Oracle.Execute(sql); +%> + +<% Response.End; + } +%> + + + + + + <% MODAL_START(); %> +
" + method="post" + onSubmit="ins_submit();"> +<% + // Bepaal de discipline, soortgroep en soortdeel van het object. + var sql = "SELECT d.ins_deel_parent_key" + + " , g.ins_discipline_key" + + " , g.ins_srtgroep_key" + + " , s.ins_srtdeel_key" + + " FROM ins_deel d" + + " , ins_deel parent" + + " , ins_srtdeel s" + + " , ins_srtgroep g" + + " WHERE d.ins_deel_parent_key = parent.ins_deel_key" + + " AND parent.ins_srtdeel_key = s.ins_srtdeel_key" + + " AND s.ins_srtgroep_key = g.ins_srtgroep_key" + + " AND d.ins_deel_key = " + ins_key; + var oRs = Oracle.Execute(sql); + var parent_deel_key = oRs("ins_deel_parent_key").Value; + var parent_disc_key = oRs("ins_discipline_key").Value; + var parent_srtgroep_key = oRs("ins_srtgroep_key").Value; + var parent_srtdeel_key = oRs("ins_srtdeel_key").Value; + oRs.Close(); + + lcl.set_dialect(parent_disc_key, "INS_DISCIPLINE_KEY"); + + MODAL_BLOCK_START("srtdeelInfo", L("lcl_select_object"), { icon: "fa-file-signature" }); + FCLTdisciplineselector("disc", + "sgDisc", + { label: L("lcl_discipline"), + disc_key: parent_disc_key, + module: "INS", + perslidKey: user_key, + autfunctionKey: authparams.autfunctionkey, + autRW: "W", + onChange: "onChangeDiscipline" + }); + + FCLTsrtgroepselector("srtgroep", + "sgSrtgroep", + { label: L("lcl_obj_group"), + srtgroep_key: parent_srtgroep_key, + autfunction: autfunction, + onChange: "onChangeSrtgroep", + urlAdd: [{urlParam: "disc_key", field: "disc"}] + }); + + FCLTsrtdeelselector("srtdeel", + "sgSrtdeel", + { label: L("lcl_obj_sort"), + srtdeel_key: parent_srtdeel_key, + autfunction: autfunction, + module: "INS", + autfunction: autfunction, + onChange: "onChangeSrtdeel", + urlAdd: [{urlParam: "srtgroep_key", field: "srtgroep"}, + {urlParam: "disc_key", field: "disc"}] + }); + + // Identificatie/Object + // LET OP: Onderdelen worden niet getoond in de objectselector (ins_v_aanwezigdeel sluit onderdelen uit). + // Dat is ook precies wat we willen. Onderdelen kunnen geen onderdeel zijn/worden van twee objecten. + FCLTobjectselector("deel_key", + "sgDeel", + { label: L("lcl_obj_identification"), + objectKey: parent_deel_key, + onChange: "onChangeDeel", + urlAdd: [{urlParam: "disc_key", field: "disc"}, + {urlParam: "srtgroep_key", field: "srtgroep"}, + {urlParam: "srtdeel_key", field: "srtdeel"}], + autfunction: autfunction + }); + + MODAL_BLOCK_END(); + SIMPLE_BLOCK_START(); + CreateButtons([{ title: L("lcl_submit"), action: "ins_submit()", icon: "fa-fclt-save", importance: 1}, + { title: L("lcl_delete"), action: "ins_delete()", icon: "fa-trash-alt", importance: 3}, + { title: L("lcl_cancel"), action: "ins_cancel()", icon: "fa-fclt-cancel", importance: 3}]); + SIMPLE_BLOCK_END(); +IFACE.FORM_END(); +%> +
+ <% MODAL_END(); %> + + +<% ASPPAGE_END(); %> diff --git a/APPL/INS/ins_change_plaatseigenaar.asp b/APPL/INS/ins_change_plaatseigenaar.asp new file mode 100644 index 0000000000..f81c0204ee --- /dev/null +++ b/APPL/INS/ins_change_plaatseigenaar.asp @@ -0,0 +1,307 @@ +<%@language = "javascript" %> +<% +/* $Revision$ + $Id$ + + File: ins_change_plaatseigenaar.asp + Description: Verander de plaats of eigenaar + Impliciet: ins_deel.ins_srtdeel_key wordt aangepast + Expliciet: + Parameters: + ins_key deel key + submitting Mode {0=invoer / 1=opslaan} + + Context: ins_edit_deel.asp wijzigen object + Note: + +*/ %> + + + + + + + + + + +<% +FCLTHeader.Requires({ plugins:["jQuery"] + , js: ["../ins/ins_edit_deel.js", "../ins/bind.js"] + }); + +var autfunction = "WEB_INSMAN"; +var authparams = user.checkAutorisation(autfunction); + +var ins_key = getQParamInt("ins_key"); // Het te wijzigen object. + +var sql = "SELECT d.ins_deel_parent_key" + + " , s.ins_srtdeel_binding" + + " , g.ins_discipline_key" + + " , d.ins_alg_ruimte_type" + + " , d.ins_alg_ruimte_key" + + " , d.ins_alg_ruimte_type_org" + + " , d.ins_alg_ruimte_key_org" + + " FROM ins_deel d" + + " , ins_srtdeel s" + + " , ins_srtgroep g" + + " , ins_tab_discipline dis" + + " , ins_deel pd" + + " , ins_disc_params idp" + + " WHERE d.ins_srtdeel_key = s.ins_srtdeel_key" + + " AND d.ins_deel_parent_key = pd.ins_deel_key(+)" + + " AND s.ins_srtgroep_key = g.ins_srtgroep_key" + + " AND g.ins_discipline_key = dis.ins_discipline_key" + + " AND dis.ins_discipline_key = idp.ins_discipline_key" + + " AND d.ins_deel_key = " + ins_key; +var oRs = Oracle.Execute(sql); +var srtdeel_binding = oRs("ins_srtdeel_binding").Value; +var disc_key = oRs("ins_discipline_key").Value; +var bind = oRs("ins_alg_ruimte_type").Value; +var bind_key = oRs("ins_alg_ruimte_key").Value; +var org_bind = oRs("ins_alg_ruimte_type_org").Value; +var org_bind_key = oRs("ins_alg_ruimte_key_org").Value; +var isLendOut = (oRs("ins_alg_ruimte_key_org").Value != null); +oRs.Close(); + +// Bepaal of het object ook echt gewijzigd kan of mag worden. +// De velden mogen niet wijzigen +// 1) zonder canChangeAlg rechten (Zonder canChangeAlg rechten zijn de velden in de edit mode readonly) of +// 2) als het object is uitgeleend. +this_ins = ins.func_enabled_deel(ins_key); +user.anything_todo_or_abort(this_ins.canChange && this_ins.canChangeAlg && !isLendOut); + +// Bepaal de plaats of eigenaar van het object. +var o_loc_key = -1; +var o_bld_key = -1; +var o_floor_key = -1; +var o_room_key = -1; +var o_workpl_key = -1; +var o_dep_key = -1; +var o_perslid_key = -1; +var o_cntpers_key = -1; + +if (bind == 'R' || bind == 'W' || bind == 'T') +{ + sql = "SELECT alg_locatie_key" + + " , COALESCE(alg_gebouw_key, alg_terreinsector_key) alg_gebouw_key" + + " , alg_verdieping_key" + + " , alg_ruimte_key" + + " , prs_werkplek_key" + + " FROM ins_v_xdeel_gegevens_keys" + + " WHERE ins_deel_key=" + ins_key; + + oRs = Oracle.Execute(sql); + if (!oRs.eof) + { + o_loc_key = oRs("alg_locatie_key").Value; + o_bld_key = oRs("alg_gebouw_key").Value; + o_floor_key = oRs("alg_verdieping_key").Value; + o_room_key = oRs("alg_ruimte_key").Value; + o_workpl_key = oRs("prs_werkplek_key").Value; + + // gracefull terugvallen nav. DHLN#18851 + // In theorie kan dit ook een probleem zijn voor andere bindings + // maar daar kan ik geen logische terugvaloptie bedenken. + if (!(srtdeel_binding & BIND_WERKPL) && bind == 'W') + { + bind = "R"; + } + oRs.close(); + } +} +else // Persoon/afdeling gebonden +{ + if (bind == 'A') + o_dep_key = bind_key; + if (bind == 'P') + o_perslid_key = bind_key; + if (bind == 'C') + o_cntpers_key = bind_key; +} + +// Bij de bepaling van invalid_binding weet ik dat het object niet uitgeleend is (isLendOut = false). +var invalid_binding = ((!(srtdeel_binding & (BIND_AFDELI)) && o_dep_key > 0) || + (!(srtdeel_binding & (BIND_PERSOO)) && o_perslid_key > 0) || + (!(srtdeel_binding & (BIND_TERREI)) && o_bld_key > 0 && !(srtdeel_binding & (BIND_RUIMTE)) && !(srtdeel_binding & (BIND_WERKPL))) || + (!(srtdeel_binding & (BIND_RUIMTE)) && o_room_key > 0 && !(srtdeel_binding & (BIND_WERKPL))) || + (!(srtdeel_binding & (BIND_WERKPL)) && o_workpl_key > 0)); + +lcl.set_dialect(disc_key, "INS_DISCIPLINE_KEY"); +%> + + + +<% FCLTHeader.Generate(); + var submitting = getQParamInt("submit", 0) == 1; + if (submitting) + { + protectRequest.validateToken(); + var success = false; + var dept_key = getFParamInt("sDept", -1); // Afdeling. + var prs_key = getFParamInt("SPerson", -1); // Persoon. + var bld_key = getFParamInt("gebouwkey", -1); // Gebouw/Terrein. + var room_key = getFParamInt("ruimtekey", -1); // Ruimte. + var workpl_key = getFParamInt("werkplekkey", -1); // Werkplek. + + var ins_alg_ruimte_key; + var ins_alg_ruimte_type; + if (dept_key > 0) + { + ins_alg_ruimte_key = dept_key; + ins_alg_ruimte_type = "A"; + } + else if (prs_key > 0) + { + ins_alg_ruimte_key = prs_key; + ins_alg_ruimte_type = "P"; + } + else if (workpl_key > 0) + { + ins_alg_ruimte_key = workpl_key; + ins_alg_ruimte_type = "W"; + } + else if (room_key > 0) + { + ins_alg_ruimte_key = room_key; + ins_alg_ruimte_type = "R"; + } + else if (bld_key > 0) + { + ins_alg_ruimte_key = bld_key; + ins_alg_ruimte_type = "T"; + } + + var sql = "UPDATE ins_deel" + + " SET ins_alg_ruimte_key = " + ins_alg_ruimte_key + + " , ins_alg_ruimte_type = '" + ins_alg_ruimte_type + "'" + + " WHERE ins_deel_key = " + ins_key; + Oracle.Execute(sql); +%> + +<% Response.End; + } +%> + + + + + + <% MODAL_START(); %> +
" + method="post" + onSubmit="ins_submit();"> +<% + + + MODAL_BLOCK_START("srtdeelInfo", L("lcl_owner_info"), { icon: "fa-file-signature" }); + if ((srtdeel_binding & (BIND_AFDELI)) && !invalid_binding) + { + FCLTafdelingselector("sDept", + "sDept", + { departmentKey: o_dep_key, + label: L("lcl_prs_organisatie"), + autlevel: authparams.PRSwritelevel, + onChange: "onChangeDept" + }); + } + + if ((srtdeel_binding & (BIND_PERSOO)) && !invalid_binding) + { + FCLTpersoonselector("sPerson", // requestor + "sgPerson", + { perslidKey: o_perslid_key, + label: L("lcl_name"), + autlevel: authparams.PRSwritelevel, + onChange: "onChangePerson" + }); + } + + // Als het Object is uitgeleend dan behoort het object aan een contactpersoon. Voor het uitlenen behoorde het object tot een persoon, afdeling of plek. + // Aangezien we de velden niet mogen wijzigen als het object is uitgeleed, hoeven we het contactpersoon hier niet te tonen. + + if (!invalid_binding) + { + var maxlevel = -1; + var change = ""; +%> + +<% + if (srtdeel_binding & (BIND_TERREI | BIND_RUIMTE | BIND_WERKPL)) + { + change = "change1()"; + maxlevel = 3; + } + + if (srtdeel_binding & (BIND_RUIMTE | BIND_WERKPL)) + { + change = "change2()"; + maxlevel = 5; + } + + if (srtdeel_binding & (BIND_WERKPL)) + { + change = "change3()"; + maxlevel = 6; + } + + if (maxlevel >= 2) + FCLTplaatsselector(authparams.ALGwritelevel, { locatiekey: o_loc_key, + verdiepingkey: o_floor_key, + gebouwkey: o_bld_key, + ruimtekey: o_room_key, + werkplekkey: o_workpl_key, + startlevel: 2, // locatie + eindlevel: maxlevel, + terrein: true, + autoselect: true, + filtercode: "INCVR", + onLocChange: change, + cadSelect: true, + cadShowdiscfn: true, + escalateOnChUp: true // ook onLocChange als je gebouw wijzigt + }); + } + MODAL_BLOCK_END(); + SIMPLE_BLOCK_START(); + CreateButtons([{ title: L("lcl_submit"), action: "ins_submit()", icon: "fa-fclt-save", importance: 1}, + { title: L("lcl_cancel"), action: "ins_cancel()", icon: "fa-fclt-cancel", importance: 3}]); + SIMPLE_BLOCK_END(); +IFACE.FORM_END(); +%> +
+ <% MODAL_END(); %> + + +<% ASPPAGE_END(); %> diff --git a/APPL/INS/ins_deel_free.asp b/APPL/INS/ins_deel_free.asp index 0da0ed0f43..07805d923f 100644 --- a/APPL/INS/ins_deel_free.asp +++ b/APPL/INS/ins_deel_free.asp @@ -572,9 +572,9 @@ else FCLTobjectselector("ins_keys", "sgObject", { label: L("lcl_ins_object"), - ins_key: -1, + objectKey: -1, urlAdd: [{urlParam: "disc_key", field: "disc"}, - {urlParam: "srtgroup_key", field: "srtgroup"}, + {urlParam: "srtgroep_key", field: "srtgroup"}, {urlParam: "srtdeel_key", field: "srtdeel"}], onChange: "loadKenmerk", required: true, diff --git a/APPL/INS/ins_deelkoppeling.asp b/APPL/INS/ins_deelkoppeling.asp index 3ca86be72c..152a0fae7e 100644 --- a/APPL/INS/ins_deelkoppeling.asp +++ b/APPL/INS/ins_deelkoppeling.asp @@ -45,6 +45,7 @@ var ins_srtname = oRs("ins_srtdeel_omschrijving").value; var disc_key = oRs("ins_discipline_key").value; // mooie default var srtgroup = -1; var srtdeel = -1; +oRs.Close(); var submitting = getQParamInt("submit", 0) == 1; @@ -109,6 +110,7 @@ if (submitting) if (err.friendlyMsg) warning = err.friendlyMsg; } + oRs.Close(); } } %> @@ -124,14 +126,14 @@ else <% FCLTHeader.Generate(); %> - + <% MODAL_START(); %>
"> <% if (ins_van_key_arr.length == 1) - MODAL_BLOCK_START("ins_ruimteafdeling", ins_srtname + " " + ins_name, { icon: "fa-circle" }); + MODAL_BLOCK_START("ins_deelkoppeling", ins_srtname + " " + ins_name, { icon: "fa-circle" }); else - MODAL_BLOCK_START("ins_ruimteafdeling", L("lcl_alg_geselecteerde_ruimten") + ": " + ins_van_key_arr.length, { icon: "fa-circle" }); + MODAL_BLOCK_START("ins_deelkoppeling", L("lcl_alg_geselecteerde_ruimten") + ": " + ins_van_key_arr.length, { icon: "fa-circle" }); %> <% @@ -180,7 +182,7 @@ else { label: L("lcl_obj_identification"), onChange: "onChangeDeel", urlAdd: [{urlParam: "disc_key", field: "disc"}, - {urlParam: "srtgroup_key", field: "srtgroup"}, + {urlParam: "srtgroep_key", field: "srtgroup"}, {urlParam: "srtdeel_key", field: "srtdeel"}], autfunction: autfunction }); @@ -201,29 +203,30 @@ else - + } + oRs.Close(); %> + diff --git a/APPL/INS/ins_edit_deel.asp b/APPL/INS/ins_edit_deel.asp index 74b221959a..96cb27c605 100644 --- a/APPL/INS/ins_edit_deel.asp +++ b/APPL/INS/ins_edit_deel.asp @@ -25,6 +25,7 @@ + @@ -278,6 +279,7 @@ var ins_deel_aantal = 1; else { // Het gaat om een Nieuw hoofdobject, defaults bepalen sql = "SELECT '' ins_deel_omschrijving" + + " , NULL ins_deel_parent_key" + " , 'P' ins_alg_ruimte_type" + " , 1 ins_deel_aantal" + " , -1 ins_alg_ruimte_key" @@ -346,7 +348,7 @@ var ins_deel_aantal = 1; vervaldatum = (oRs("ins_deel_vervaldatum").Value != null && !copy)? new Date(oRs("ins_deel_vervaldatum").Value) : null; externnr = oRs("ins_deel_externnr").Value; - if (!parent_key) + if (parent_key < 0) parent_key = oRs("ins_deel_parent_key").Value; srtdeel_binding = oRs("ins_srtdeel_binding").Value; tekenbaar = oRs("ins_srtdeel_acadsymbol").Value != null; @@ -675,6 +677,24 @@ var ins_deel_aantal = 1; (explode_prop.required ? $("#count").addClass("required") : $("#count").removeClass("required")); (explode_prop.datatype=="number" ? $("#count").removeClass("float").addClass("number") : $("#count").removeClass("number").addClass("float")); } + + function ins_edit_owner() + { + var url = "../ins/ins_change_plaatseigenaar.asp?ins_key=<%=ins_key%>"; + FcltMgr.openModalDetail( url + , (L("lcl_owner_info") + " {0}").format("<%=safe.jsstring(parentdesc)%>") + , { callback: function(data) { if (data.refresh) FcltMgr.reload() } } + ); + } + + function ins_edit_parentdeel() + { + var url = "../ins/ins_change_parent.asp?ins_key=<%=ins_key%>"; + FcltMgr.openModalDetail( url + , (L("lcl_ins_parentobject") + " {0}").format("<%=safe.jsstring(parentdesc)%>") + , { callback: function(data) { if (data.refresh) FcltMgr.reload() } } + ); + } @@ -899,14 +919,21 @@ var ins_deel_aantal = 1; BLOCK_END(); } - if (ins_score_enabled) - { - } + var btns = []; + if (parent_key > 0 && this_ins.writeman && this_ins.canChangeAlg) + // Voor onderdelen het bovenliggende object tonen en wijzigbaar maken met een button. + btns.push({icon: "fa-fclt-edit", title: L("lcl_ins_parentobject"), action: "ins_edit_parentdeel()", importance: 2}); + if (parent_key > 0 && ins_key > 0 && this_ins.writeman) + // De bindingen terrein, ruimte, werkplek, persoon of afdeling wijzigbaar maken met een button. + btns.push({icon: "fa-fclt-edit", title: L("lcl_owner_info"), action: "ins_edit_owner()", importance: 2}); - - BLOCK_START("insIns", L("lcl_owner_info"), {icon: "fa-map-marker"}); + BLOCK_START("insIns", L("lcl_owner_info"), {icon: "fa-map-marker", buttons: btns}); // Voor onderdelen ook het hoofdobject weergeven - ROFIELDTR("fld", L("lcl_ins_parentobject"), parentdesc, {suppressEmpty: true}); + if (parent_key > 0 && this_ins.writeman && this_ins.canChangeAlg) + ROFIELDTR("fld", L("lcl_ins_parentobject"), parentdesc, {}); + else + ROFIELDTR("fld", L("lcl_ins_parentobject"), parentdesc, {suppressEmpty: true}); + if ((srtdeel_binding & (BIND_AFDELI)) && (!isLendOut || (isLendOut && o_dep_key > 0)) && !invalid_binding) { FCLTafdelingselector("sDept", diff --git a/APPL/INS/ins_list.inc b/APPL/INS/ins_list.inc index 459ee24240..588f3cfdb8 100644 --- a/APPL/INS/ins_list.inc +++ b/APPL/INS/ins_list.inc @@ -119,9 +119,6 @@ function ins_list (pautfunction, params) var fgraph = params.fgraph; var parent_key = params.parent_key; var koppel_key = params.koppel_key; - if (koppel_key) { // Dan is deze straks ook nodig - var this_ins = ins.func_enabled_deel(koppel_key); - } var embedded = params.embedded; var tiny = params.tiny || parent_key || koppel_key; var groepering = params.groepering || -1; @@ -169,10 +166,18 @@ function ins_list (pautfunction, params) L("lcl_ins_koppelobjects"), { callback: FcltMgr.reload }); } + function ins_deelkoppeling_diagram() { FcltMgr.openDetail("appl/ins/ins_deelkoppelingen.asp?urole=<%=urole%>&ins_key=<%=koppel_key%>", L("lcl_ins_koppelobjects")); } + + function ins_onderdelen() + { + FcltMgr.openModalDetail("../ins/ins_onderdelen.asp?urole=<%=urole%>&ins_key=<%=parent_key%>", + L("lcl_ins_koppelobjects"), + { callback: FcltMgr.reload }); + } @@ -1056,7 +1061,9 @@ function ins_list (pautfunction, params) if (!deleted_room) { - if (koppel_key) { + if (koppel_key) + { + var this_ins = ins.func_enabled_deel(koppel_key); if (this_ins.canChange) { buttons.push({ icon: "fa-fclt-edit", title: L("lcl_change"), action: "ins_deelkoppeling()" }); } @@ -1082,6 +1089,14 @@ function ins_list (pautfunction, params) buttons.push({ icon: "fa-plus", title: L("lcl_add"), action: "FcltMgr.openDetail('" + addurl + "', '" + safe.jsstring(L("lcl_add")) + "')" }); } + if (parent_key) + { + var this_ins = ins.func_enabled_deel(parent_key); + if (this_ins.canChange) { + buttons.push({ icon: "fa-fclt-edit", title: L("lcl_change"), action: "ins_onderdelen()" }); + } + } + if (embedded && authparams.PRSwritelevel < 9 && fronto && (cpersoon_key > 0 || persoon_key > 0)) { if (cpersoon_key > 0) diff --git a/APPL/INS/ins_onderdelen.asp b/APPL/INS/ins_onderdelen.asp new file mode 100644 index 0000000000..13752f97ad --- /dev/null +++ b/APPL/INS/ins_onderdelen.asp @@ -0,0 +1,226 @@ +<%@language = "javascript" %> +<% /* + $Revision$ + $Id$ + File: INS/ins_onderdelen.asp + Description: Voegt een objectkoppeling toe bij een object + Parameters: ins_key + Context: + Note: De ins_keys zijn de parent_key's. + +*/ %> + + + + + + + + + +<% +FCLTHeader.Requires({ plugins:["jQuery"], + js: ["./ins_onderdelen.js"] + }); + +var autfunction = "WEB_INSUSE"; +var ins_parent_key = getQParamInt("ins_key"); + +// MGE: ins_keys bestaat volgens mij altijd uit 1 key. +// Autorisatie van het object pakken. +var this_ins = ins.func_enabled_deel(ins_parent_key); +user.auth_required_or_abort(this_ins.writeuse); // dat is toch wel het minste +authparams = this_ins.authparams(autfunction); + +sql = "SELECT ins_deel_omschrijving" + + " , ins_discipline_key" + + " , " + lcl.xsqla('sd.ins_srtdeel_omschrijving', 'sd.ins_srtdeel_key') + + " FROM ins_deel d" + + " , ins_srtdeel sd " + + " WHERE sd.ins_srtdeel_key = d.ins_srtdeel_key" + + " AND ins_deel_key = " + ins_parent_key; +var oRs = Oracle.Execute(sql); +var ins_name = oRs("ins_deel_omschrijving").value; +var ins_srtname = oRs("ins_srtdeel_omschrijving").value; + +var disc_key = oRs("ins_discipline_key").value; // mooie default +var srtgroup = -1; +var srtdeel = -1; +oRs.Close(); + +var submitting = getQParamInt("submit", 0) == 1; + +if (submitting) +{ + protectRequest.validateToken(); + FCLTHeader.Generate(); + + var nrRows = getFParamInt("nrRows", 0); + + var deel_key = -1; + var deel_keys = []; + var warning = ""; + for (var i = 0; i < nrRows; i++) + { + deel_key = getFParamInt("deel" + i, 0); + + if (deel_key > 0) + { + deel_keys.push(deel_key); + } + } + + // Verwijderde objecten verwijderen. + var sql = "UPDATE ins_deel" + + " SET ins_deel_parent_key = NULL" + + " WHERE ins_deel_parent_key = " + ins_parent_key + if (deel_keys.length) // 'nieuwe' laten staan, er komt straks wel een update + sql += " AND ins_deel_key NOT IN (" + deel_keys.join(",") + ")"; + Oracle.Execute(sql); + + // Nieuwe objecten toevoegen. + if (deel_keys.length) + { + var sql = "UPDATE ins_deel" + + " SET ins_deel_parent_key = " + ins_parent_key + + " WHERE ins_deel_key IN (" + deel_keys.join(",") + ")" + + " AND (ins_deel_parent_key <> " + ins_parent_key + " OR ins_deel_parent_key IS NULL)" + + " AND ins_deel_verwijder IS NULL"; + Oracle.Execute(sql); + } +%> + +<% +} +else +{ %> + + +<% FCLTHeader.Generate(); %> + + + + <% MODAL_START(); %> + +<% + MODAL_BLOCK_START("ins_onderdelen", ins_srtname + " " + ins_name, { icon: "fa-circle" }); + +%> +<% + // + // Discipline + FCLTdisciplineselector("disc", + "sgDisc", + { label: L("lcl_discipline"), + disc_key: disc_key, + module: "INS", + perslidKey: user_key, + autfunctionKey: authparams.autfunctionkey, + autRW: "W", + onChange: "onChangeDiscipline", // disgroepChanged + required: true + }); + + // Groep + FCLTsrtgroepselector("srtgroep", + "sgSrtgroep", + { label: L("lcl_obj_group"), + srtgroep_key: srtgroup, + autfunction: autfunction, + onChange: "onChangeSrtgroep", + urlAdd: [{urlParam: "disc_key", field: "disc"}], + required: true + }); + + // Objectsoort + FCLTsrtdeelselector("srtdeel", + "sgSrtdeel", + { label: L("lcl_obj_sort"), + srtdeel_key: srtdeel, + autfunction: autfunction, + onChange: "onChangeSrtdeel", + urlAdd: [{urlParam: "srtgroep_key", field: "srtgroep"}, + {urlParam: "disc_key", field: "disc"}], + extraParamField: "binding", + extracode: "B", + required: true + }); + + // Identificatie/Object + // LET OP: Onderdelen worden niet getoond in de objectselector (ins_v_aanwezigdeel sluit onderdelen uit). + // Dat is ook precies wat we willen. Onderdelen kunnen geen onderdeel zijn/worden van twee objecten. + FCLTobjectselector("deel_key", + "sgDeel", + { label: L("lcl_obj_identification"), + onChange: "onChangeDeel", + urlAdd: [{urlParam: "disc_key", field: "disc"}, + {urlParam: "srtgroep_key", field: "srtgroep"}, + {urlParam: "srtdeel_key", field: "srtdeel"}], + autfunction: autfunction, + excludekey: ins_parent_key // Huidige parent uitsluiten. + }); + MODAL_BLOCK_END(); + SIMPLE_BLOCK_START(); + var buttons = [ {title: L("lcl_add"), icon: "fa-plus", action: "ins_add()", id: "ins_add_object_connect", importance: 1 }]; + CreateButtons(buttons, { showIcons: true }); + SIMPLE_BLOCK_END(); + MODAL_BLOCK_START("ins_rel", L("lcl_ins_koppelobjects"), { icon: "fa-link" }); %> +
+ + + + + + + + + + + + + +
<%=L("lcl_obj_identification")%><%=L("lcl_discipline")%><%=L("lcl_obj_group")%><%=L("lcl_obj_sort")%>
+ +<% MODAL_BLOCK_END(); + var buttons1 = [{title: L("lcl_submit"), icon: "fa-fclt-save", action: "ins_submit()", importance: 1}, + {title: L("lcl_cancel"), icon: "fa-fclt-cancel", action: "ins_cancel()", importance: 3 } ]; + SIMPLE_BLOCK_START(); + CreateButtons(buttons1); + SIMPLE_BLOCK_END(); + IFACE.FORM_END(); +%> + + <% MODAL_END(); %> + + +<% +} +%><% ASPPAGE_END(); %> diff --git a/APPL/INS/ins_onderdelen.js b/APPL/INS/ins_onderdelen.js new file mode 100644 index 0000000000..d16adab85d --- /dev/null +++ b/APPL/INS/ins_onderdelen.js @@ -0,0 +1,158 @@ +/* + $Revision$ + $Id$ + + File: ins_onderdelen.js +*/ + +var rowIndex = -1; + +function CreateRow(deel_key, deel_name, srtdeel_name, srtgroep_name, disc_name) +{ + rowIndex++; + var table = $("#deel_desctable>tbody")[0]; + + // Insert data rows + tr = table.insertRow(-1); + tr.setAttribute("deel_key", deel_key); + tr.value = rowIndex; + + // Create drop button + cell = tr.insertCell(-1); + cell.className = "result"; + cell.align = "center"; + cell.innerHTML = "" + I("fa-trash") + ""; + + // innerHTML opent een htmlparser die overbodige spaties en line breaks verwijderd in IE, daarom met innerText oplossen + // Input velden moeten wel met innerHTML of outerHTML anders wordt het text + + // Deel omschrijving veld + cell = tr.insertCell(-1); + cell.className = "result"; + cell.innerHTML = deel_name + ""; + cell.align = "left"; + cell.style.whiteSpace = "nowrap"; + + // disc omschrijving veld + cell = tr.insertCell(-1); + cell.className = "result"; + cell.innerHTML = disc_name; + cell.align = "left"; + cell.style.whiteSpace = "nowrap"; + + // srtgroep_name omschrijving veld + cell = tr.insertCell(-1); + cell.className = "result"; + cell.innerHTML = srtgroep_name; + cell.align = 'left'; + cell.style.whiteSpace = "nowrap"; + + // srtdeel omschrijving veld + cell = tr.insertCell(-1); + cell.className = "result"; + cell.innerHTML = srtdeel_name; + cell.align = "left"; + cell.style.whiteSpace = "nowrap"; + + document.getElementById("nrRows").value = parseInt(rowIndex) + 1; +} + +function delRow(img) +{ + // Verwijder het aangeklikte object uit de lijst (de regel) + var tr = $(img).closest("tr")[0]; + if (tr.getAttribute("deel_key") != null) + { + document.getElementById("deel_desctable").deleteRow(tr.rowIndex); + } +} + +function ins_submit() +{ + document.forms.u2.submit(); +} +function ins_cancel() +{ + FcltMgr.closeDetail(window, { cancel: true }); +} + +function ins_add() +{ + if ($("#deel_key").val() > 0) + { // Check of het object al in de lijst staat + var exist = false; + $("tr[deel_key]").each(function(i) + { + if ($("#deel_key").val() == $(this).attr("deel_key")) + exist = true; + }); + if (!exist) + { // Object staat nog niet in de lijst. + CreateRow($("#deel_key").val(), + $("#deel_key_show").val(), + $("#srtdeel_show").val(), + $("#srtgroep_show").val(), + $("#disc_show").val()); + FcltMgr.resized(window); + } + //else => Het object staat al in de lijst. + } +} + +function onChangeDiscipline() +{ + //sgSrtgroep.setValue($("#stdm").val(), $("#stdm_show").val(), true, true, null, true); + // Regel hierboven werkt niet goed omdat CheckExist een get call veroorzaakt om te kijken of waarde bestaat. + // In de tussentijd verstoort CheckJustOne dit process met een $.getJSON() + // Dus gewoon Groep leegmaken + sgSrtgroep.setValue(-1, "", true, false, null, true); + sgSrtgroep.CheckJustOne(); + $("#srtdeelmulti").empty(); +} + +function callback_ins_info(data, textStatus, jqXHR) +{ // Zet de discipline indien niet ingevuld + // setValue(key, txt, doonChange, checkExist, extraParam, lastTry) + if ($("#disc").val() == -1) + sgDisc.setValue(data.disc_key, data.disc_omschr, false /*doonChange*/, true /*checkExist*/); + if ($("#srtgroep").val() == -1) + sgSrtgroep.setValue(data.srtgroep_key, data.srtgroep_omschr, false /*doonChange*/, true /*checkExist*/); + if ($("#srtdeel").val() == -1) + sgSrtdeel.setValue(data.srtdeel_key, data.srtdeel_omschr, false /*doonChange*/, true /*checkExist*/); +} + +function onChangeSrtgroep(srtgroep_key) +{ // Zet de discipline indien niet ingevuld. + if (srtgroep_key > 0 && $("#disc").val() <= 0 && typeof sgDisc != "undefined") + { + $.getJSON("../Shared/get_ins_info.asp", + { srtgroep_key: srtgroep_key }, + callback_ins_info); + } + sgSrtdeel.setValue(-1, "", true, false, null, true); + sgSrtdeel.CheckJustOne(); + sgDeel.setValue(-1, "", true, false, null, true); + sgDeel.CheckJustOne(); +} + +function onChangeSrtdeel(srtdeel_key) +{ + if (srtdeel_key > 0 && ($("#srtgroep").val() <= 0 && typeof sgSrtgroep != "undefined")) + { + $.getJSON("../Shared/get_ins_info.asp", + { srtdeel_key: srtdeel_key }, + callback_ins_info); + } + sgDeel.setValue(-1, "", true, false, null, true); + sgDeel.CheckJustOne(); +} + +function onChangeDeel(deel_key) +{ + if (deel_key > 0 && ($("#srtdeel").val() <= 0 && typeof sgSrtdeel != "undefined")) + { + $.getJSON("../Shared/get_ins_info.asp", + { deel_key: deel_key }, + callback_ins_info); + } +} diff --git a/APPL/INS/ins_show_deel.asp b/APPL/INS/ins_show_deel.asp index d060c1e5e9..e0d169fa21 100644 --- a/APPL/INS/ins_show_deel.asp +++ b/APPL/INS/ins_show_deel.asp @@ -44,6 +44,12 @@ sql = "SELECT d.ins_deel_omschrijving" // identificatie + " , " + lcl.xsqla("g.ins_srtgroep_omschrijving", "g.ins_srtgroep_key") + " , " + lcl.xsqla("dis.ins_discipline_omschrijving", "dis.ins_discipline_key") + " , d.ins_deel_parent_key" + + " , (SELECT dp.ins_alg_ruimte_type" + + " FROM ins_deel dp" + + " WHERE ins_deel_key = d.ins_deel_parent_key) ins_alg_ruimte_parent_type" + + " , (SELECT dp.ins_alg_ruimte_key" + + " FROM ins_deel dp" + + " WHERE ins_deel_key = d.ins_deel_parent_key) ins_alg_ruimte_parent_key" + " , d.ins_alg_ruimte_type" + " , d.ins_alg_ruimte_key" + " , d.ins_alg_locatie_key" @@ -103,6 +109,8 @@ var sort = oRs("ins_srtdeel_omschrijving").Value; var group = oRs("ins_srtgroep_omschrijving").Value; var disc = oRs("ins_discipline_omschrijving").Value; var parent_key = oRs("ins_deel_parent_key").Value; +var parent_bind = oRs("ins_alg_ruimte_parent_type").Value; +var parent_bind_key = oRs("ins_alg_ruimte_parent_key").Value; var bind = oRs("ins_alg_ruimte_type").Value; var bind_key = oRs("ins_alg_ruimte_key").Value; var verdieping_key = oRs("alg_verdieping_key").Value; @@ -179,15 +187,6 @@ oRs.close(); // Niet voor de lol, maar als label voor het specifieke ding var binding_text = 'unknown'; var moreinfo = ""; -if (parent_key != null) -{ - binding_text = L("lcl_ins_parentobject"); - moreinfo = "appl/ins/ins_deel.asp?ins_key=" + parent_key + "&urole=" + urole; - bind = "I"; // pseudotype -} -else - __Log("bind = " + bind); - switch (bind) { case 'R': @@ -218,6 +217,12 @@ switch (bind) // Dat was het type / label, nu de instance var binding_item = ins.getBindingItemString(bind, bind_key, parent_key); +var bind_onderdeel = bind; +if (parent_key != null) +{ + bind = "I"; // pseudotype +} + // Mag ik een melding aanmaken bij dit object? Alleen meldingen die enigzins beperkt zijn tot ons/onze object(soort/groep) // Dan moet er wel een srtdiscipline getoond kunnen worden. var mySRTsql = mld.srtdisc_sql({ ins_key: ins_key }); @@ -544,7 +549,20 @@ oRs.Close(); params = { infoPointer: { Url: "/appl/ins/ins_srtdeel.asp?srtdeel_key=" + srtdeel_key } } } ROFIELDTR("fld", L("lcl_obj_sort"), sort + " (" + srtcode + ")", params); - ROFIELDTR("fld", binding_text, binding_item, {infoPointer:{Url : moreinfo, Title: ""}}); + if (parent_key != null) + { + var binding_oms = ins.getBindingItemString(bind, bind_key, parent_key); + var url = "appl/ins/ins_deel.asp?ins_key=" + parent_key + "&urole=" + urole; + ROFIELDTR("fld", L("lcl_ins_parentobject"), binding_oms, {infoPointer:{Url : url, Title: ""}}); + + if (parent_bind_key != bind_key || parent_bind != bind_onderdeel) + { + binding_text += " (" + L("lcl_updated").toLowerCase() + ")"; + ROFIELDTR("fld", binding_text, binding_item, {infoPointer:{Url : moreinfo, Title: ""}}); + } + } + else + ROFIELDTR("fld", binding_text, binding_item, {infoPointer:{Url : moreinfo, Title: ""}}); if ((S("ins_explode_objects") & 1) == 0) ROFIELDTR("fld", L("lcl_amount"), aantal + (srtdeel_eenheid ? " " + srtdeel_eenheid : "")); ROFIELDTR("fld", L("lcl_ins_opmerking"), opmerk, {suppressEmpty: true}); diff --git a/APPL/INS/ins_srtdeel_search.asp b/APPL/INS/ins_srtdeel_search.asp index c73fb6eb34..fb1cac130c 100644 --- a/APPL/INS/ins_srtdeel_search.asp +++ b/APPL/INS/ins_srtdeel_search.asp @@ -25,16 +25,47 @@ var srtdeel_key = getQParamInt("srtdeel_key", -1); <% FCLTHeader.Generate(); %>