<% /* $Revision$ $Id$ File: mld_list.inc Description: Definieert de serverside functie mld_list() die een lijst van meldingen toont die voldoen aan de gegeven parameters/criteria, binnen de readautorisaties van de user. Parameters: - Context: - Note: */ %> <% FCLTHeader.Requires({ plugins: ["suggest", "jQuery"], js: ["./mld_list.js", "jquery-ui.js"]}); function mld_list (pautfunction, params) { // VALIDATE AND PREPARE // Als een parameter niet gedefinieerd of null is, dan doet-ie niks // anders wordt die verondersteld een zinvolle waarde te hebben // NB: -1 is vaak geen zinvolle waarde; null had het dan moeten zijn! // Valid and supported parameters are: // params.urole : the usuals two-letter lowercase string // params.outputmode : print to 0 = screen, 1 = printer, 2 = excel, etc. // params.perform : boolean // Wordt hier niet gebruikt. Alleen in mld_groep_list.inc. // params.showall : boolean // params.mld_key : key // params.opdr_key : key // params.mldstatus_arr : Array met keys (e.g. [3, 4, 5]) // params.opdrstatus_arr: Array met keys (e.g. [3, 4, 5]) // params.caller_key : key // params.comp_key : key // params.org_key : key // params.ref_key : key // params.ref_type : String with module character (module type) ('M', 'O', 'R', 'B', 'X', 'C' or 'F') // params.reg_key : key // params.dist_key : key // params.loc_key : key // params.bld_key : key // params.flr_key : key // params.room_key : key // params.behandel_key : key // params.srtdisc_key : key // params.disc_key_arr : Array met keys (e.g. [3, 4, 5]) // params.meldinggrp : String met een meldinggroep // params.stdm_key_arr : Array met keys (e.g. [3, 4, 5]) // params.kp : wildcard string // params.handler_key : key // params.contact_key : key // params.opdrtype_key : key // params.searchtekst : wildcard string // params.omschr : wildcard string // params.disc_key : key // params.insgroup_key : key // params.objsrt_key_str: Array met keys (e.g. [3, 4, 5]) // params.objectoms : wildcard string // params.groepering_key: key // params.chkAcceptEx : boolean // params.chkRunEx : boolean // params.chkSpoed : boolean // params.chkAfgerond : boolean // params.datefrom : date // params.dateto : date // params.offertes : boolean // params.meldbron_key : key // params.ingevoerd : String ingevoerd door: "fe", "fo" of -1 voor beide // params.verantw_key : key // params.dienst_key : key // cnt_key: contract, // params.deel_key : ins_deel_key // params.rsv_ruimte_key: res_rsv_ruimte_key // Statuses: // params.mldstpen = 1 (0): true | false // params.mldstrej = 1 (1): true | false // params.mldstnew = 1 (2): true | false // params.mldsting = 1 (3): true | false // params.mldstacc = 1 (4): true | false // params.mldstuit = 1 (7): true | false // params.mldstafm = 1 (5): true | false // params.mldstver = 1 (6): true | false // params.mldnieto = 1 (99): true | false (substatus van 4) // afdel = // kp = kostenplaats (wildcard) // // if a parameters has a value of -1, then it is assumed not to be set and to be ignored. // De functie checkAutorisation(autfunction) geeft een Response.End indien er geen autorisatie voor autfunction wordt gevonden var authparams = user.checkAutorisation(pautfunction); var urole = params.urole; var fronto = (urole == "fo"); var backo = (urole == "bo"); var minfo = (urole == "mi"); // NOT APPLICABLE? var frontend = (urole == "fe" || (!fronto & !backo & !minfo)); params.minfo = minfo; var tiny = (params.tiny==1); // AUTORISATIES if (urole == "bo") { var locauthparams = user.checkAutorisation("WEB_MLDFOF", true); var canAdd = locauthparams && locauthparams.PRSwritelevel < 9 && locauthparams.ALGwritelevel<9; } else if (urole == "fo") canAdd = authparams.PRSwritelevel < 9 && authparams.ALGwritelevel<9 else // mi, fe canAdd = false; // Voor resulttable de globalen zetten; zou ng anders moeten. var outputmode = params.outputmode; // print to 0 = screen, 1 = printer, 2 = excel, etc. var print = (outputmode == 1 || outputmode == 5); var excel = (outputmode == 2 || outputmode == 6); var showall = params.showall; var mld_key = params.mld_key; var behandel_key = params.behandel_key; var disc_key_arr = params.disc_key_arr; var offertes = params.offertes; // Fast check to see if we have anything to do with geographics // If not, we can suppress a few filters. sql= "SELECT 1 FROM ins_srtdiscipline WHERE (ins_srtdiscipline_alg=1 OR ins_srtdiscipline_ins=1 OR ins_srtdiscipline_bes=1) AND ROWNUM = 1"; oRs = Oracle.Execute(sql); var anygeo = !oRs.eof; oRs.close(); %> <% FCLTHeader.Generate({ outputmode: outputmode }); %> <% sqln = "SELECT " + " m.mld_melding_key" + ", mld_melding_datum" + ", m.mld_melding_onderwerp" + ", m.mld_melding_omschrijving" + ", m.prs_kostenplaats_key" + ", m.mld_melding_opmerking" + ", m.mld_melding_einddatum" + ", m.mld_melding_t_uitvoertijd.tijdsduur uitvoertijd_tijdsduur" + ", m.mld_melding_t_uitvoertijd.eenheid uitvoertijd_eenheid" + ", m.mld_melding_parentkey" + ", m.mld_adres_key" + ", std.mld_stdmelding_volgnr" + ", std.mld_stdmelding_doublecheck" + ", std.mld_stdmelding_planbaar" + ", std.mld_stdmelding_slabewaken" + ", mld_melding_status mld_status" + ", DECODE(mld_melding_status, 2, 1, 3, 1, 0, 2, 4, 2, 7, 2, 1, 3, 5, 3, 6, 3, 4) sortinggroup" + ", CASE WHEN (m.mld_melding_start_key IS NOT NULL AND m.mld_workflowstep_key IS NULL)" + " THEN 1 ELSE 0 END isVervolg" + ", CASE WHEN (m.mld_melding_start_key IS NOT NULL AND m.mld_workflowstep_key IS NOT NULL)" + " THEN 1 ELSE 0 END isWorkflow"; // Is alleen relevant indien de melding nog niet geaccepteerd is (ook al querien we nu altijd) // en wordt gemeten vanaf INVOERDATUM tegen de huidige bibliotheek (stdmelding) waarde van _accepttijd. // Gelukkig is deze al bevroren in mld_melding_acceptdatum_std sqln += ", mld_melding_acceptdatum_std eindacceptatie"; // Is alleen operationeel relevant indien de melding nog niet afgemeld of afgewezen is, // Maar ook daarna wel, maar moet dan worden gemeten naar de afmeld/afwijsdatum, en niet naar // de (geplande) einddatum. // Is die kleuring dan nog interessant? Operationeel niet echt, maar voor de MI juist wel. // PF: not quite right!! Eerder stond hier no de juiste suggestie: // // JGL: Misschien deze berekening alleen doen voor maninfo, voor de rest altijd mld_melding_einddatum? // sqln += ", CASE WHEN gau.actualuitvoertijd.tijdsduur / CASE" // + " WHEN gau.actualuitvoertijd.eenheid = 'U'" // + " THEN 24" // + " ELSE 1" // + " END" // + " <= " // + " (CASE" // + " WHEN m.mld_melding_t_uitvoertijd.eenheid = 'U'" // + " THEN m.mld_melding_t_uitvoertijd.tijdsduur / 24" // + " ELSE m.mld_melding_t_uitvoertijd.tijdsduur" // + " END + CASE" // + " WHEN m.mld_melding_t_respijt.tijdsduur IS NULL" // + " THEN 0" // + " WHEN m.mld_melding_t_respijt.eenheid = 'U'" // + " THEN m.mld_melding_t_respijt.tijdsduur / 24" // + " ELSE m.mld_melding_t_respijt.tijdsduur" // + " END)" // + " THEN 1" // + " ELSE 0" // + " END opslatijd"; // We willen juist WEL een kleurindicatie; dit is de ruwe data: melding had al klaar moeten zijn // bij de presentatie voegen we daar de status EN LOPEND aan toe sqln += ", CASE WHEN mld_melding_einddatum > SYSDATE" + " THEN 1" + " ELSE 0" + " END optijd"; sqln += ", " + S("prs_pers_string") + " melder" + ", v.alg_gebouw_naam" + ", DECODE(l.alg_locatie_code, '','', l.alg_locatie_code||DECODE(v.alg_plaatsaanduiding, '', ' ('||l.alg_locatie_omschrijving||')', '-'||v.alg_plaatsaanduiding || DECODE(v.alg_plaatsomschrijving, '','' ,' (' || v.alg_plaatsomschrijving || ')')))" + " plaatsmelding" + ", l.alg_locatie_adres" + (minfo ? ", di.alg_district_omschrijving" : ""); sqln += ", sd.ins_srtdiscipline_prefix" + ", sd.ins_srtdiscipline_alg" + ", sd.ins_srtdiscipline_ins" + ", sd.ins_srtdiscipline_bes" + ", md.ins_discipline_key" + ", md.ins_discipline_kpnverplicht" + ", std.ins_srtinst_verplicht" + ", std.mld_stdmelding_freetext" + ", std.alg_onrgoed_niveau" + ", COALESCE(m.mld_alg_locatie_key, -1) alg_locatie_key" + ", COALESCE(v.alg_gebouw_key, v.alg_terreinsector_key, -1) alg_gebouw_key" + ", COALESCE(v.alg_verdieping_key, -1) alg_verdieping_key" + ", COALESCE(v.alg_ruimte_key, -1) alg_ruimte_key" + ", CASE" + " WHEN sd.ins_srtdiscipline_prefix IS NULL" + " THEN ''" + " ELSE sd.ins_srtdiscipline_prefix || '-'" + " END" + " || "+lcl.xsqla('md.ins_discipline_omschrijving', 'md.ins_discipline_key') + ", std.mld_stdmelding_key" + ", "+lcl.xsqla('std.mld_stdmelding_omschrijving','std.mld_stdmelding_key') sqln += ", (SELECT COUNT(mld_opdr_key) FROM mld_opdr WHERE mld_melding_key = m.mld_melding_key) nrOrders" sqln += ", m.mld_melding_spoed"; // Aantal actieve opdrachten sqln += ", (SELECT COUNT(o.mld_statusopdr_key)" + " FROM mld_opdr o" + " WHERE mld_melding_key = m.mld_melding_key" + " AND o.mld_statusopdr_key NOT IN (1, 2, 6, 7, 9)) nrActief"; sqln += ", (SELECT pf.prs_perslid_naam_full FROM prs_v_perslid_fullnames_all pf" + " WHERE pf.prs_perslid_key = m.mld_melding_behandelaar_key) behandelaar" + ", m.mld_workflowstep_key workflow"; if (minfo) { sqln += ", (SELECT " + S("prs_dep_string") + " FROM prs_v_afdeling d" + " WHERE p.prs_afdeling_key = d.prs_afdeling_key) organisatie"; sqln += ", (SELECT " + S("prs_kpn_string") + " FROM prs_kostenplaats k" + " WHERE k.prs_kostenplaats_key = m.prs_kostenplaats_key) kostenplaats"; sqln += ", COALESCE((SELECT SUM(topdr.mld_opdr_kosten)" + " FROM mld_opdr topdr" + ", mld_typeopdr ty" + " WHERE topdr.mld_melding_key = m.mld_melding_key" + " AND topdr.mld_typeopdr_key = ty.mld_typeopdr_key" + " AND ty.mld_typeopdr_kosten = 1" + " GROUP BY m.mld_melding_key), 0) kosten"; } // minfo only // Voeg laatste tracking datum toe sqln += (minfo ? ", TO_DATE('01-01-1970', 'DD-MM-YYYY')" : ", (SELECT MAX(t.fac_tracking_datum)" + " FROM fac_tracking t" + " , fac_srtnotificatie sn" + " WHERE t.fac_srtnotificatie_key = sn.fac_srtnotificatie_key" + " AND t.fac_tracking_refkey = m.mld_melding_key" + " AND sn.fac_srtnotificatie_xmlnode = 'melding')") + " recentdatum"; // Voeg de flag toe sqln += ", m.mld_melding_flag" + ", m.mld_melding_satisfaction oordeel" + ", m.mld_melding_satisfaction_op oordeel_opm" sqln += (offertes ? ", offerte.aantal_offertes" + ", COALESCE(offready.aantal_offready, 0) aantal_offready" + ", opdracht.aantal_opdrachten" : ""); sqln += ", (SELECT mn.mld_melding_note_omschrijving" + " FROM mld_melding_note mn" + " WHERE mn.mld_melding_key = m.mld_melding_key" + " AND mn.mld_melding_note_key = (SELECT MAX (mn.mld_melding_note_key)" + " FROM mld_melding_note mn" + " WHERE mn.mld_melding_key = m.mld_melding_key)) notitie" + ", (SELECT MAX(mn.mld_melding_note_aanmaak)" + " FROM mld_melding_note mn" + " WHERE mn.mld_melding_key = m.mld_melding_key) notitiedatum" // Voeg aan de sql het FROM en WHERE gedeelte toe sqln += mld.getfromwherelist_sql(pautfunction, params); if (minfo) { sqln += (params.ingevoerd == "fe" ? " AND m.prs_perslid_key = invoerder.prs_perslid_key" : ""); sqln += (params.ingevoerd == "fo" ? " AND m.prs_perslid_key <> invoerder.prs_perslid_key" : ""); } // minfo only // apply 3D authorization to the locations and to the organisations (both ALG and PRS) sqln = discx3d (sqln, "md.ins_discipline_key", "di.alg_regio_key", "l.alg_district_key", "l.alg_locatie_key", "v.alg_gebouw_key", "v.alg_verdieping_key", "v.alg_ruimte_key", "b.prs_bedrijf_key", "b.prs_afdeling_key", pautfunction, (!mld_key && disc_key_arr ? disc_key_arr.join(",") : ""), 2); sqln = "SELECT * FROM (" + sqln + ") rec2 ORDER BY" + (excel ? " UPPER("+lcl.xsql('ins_discipline_omschrijving', 'ins_discipline_key')+"), mld_stdmelding_volgnr, mld_stdmelding_omschrijving," : "") + ((backo && (bosort == 0)) ? " sortinggroup, mld_melding_einddatum" + (params.mldstafm||params.mldstver||params.mldstrej ? " DESC" : "") : " mld_melding_key DESC"); //ORDER BY mld_melding_key /********************************** * Callback functies ResultsetTable *********************************/ var recent = new Date(); recent.setMinutes(recent.getMinutes() - S("mld_melding_recent")); function fnrowClass(oRs) { if (oRs("mld_melding_parentkey").Value > 0) return " child"; var mldStatus = oRs("mld_status").Value; var class1 = ""; if (!frontend) { var lnow = new Date(); // Alles wat al geaccepteerd had moeten zijn wordt expired1 // in deze statussen zijn geen opdrachten aanwezig dus kan nooit status unsolved optreden if ((mldStatus == 2 || mldStatus == 3) && oRs("eindacceptatie").Value < lnow) class1 += ' expired1'; // Alles wat al klaar had moeten zijn wordt expired2 if (((mldStatus == 4 || mldStatus == 7) && oRs("optijd").Value == 0)) class1 += ' expired2'; // Meldingen met uitgegeven(7) worden unsolved als er 0 lopende opdrachten zijn // en meer dan 0 opdrachten so wie so (er zijn dus opdrachten geweest) if (backo && (mldStatus == 4 || mldStatus == 7) && oRs("nrOrders").Value > 0 && oRs("nrActief").Value == 0) class1 += ' unsolved'; // Als de melding klaar is, maar nog niet alle opdrachten, of nog loopt // met niet alle opdrachten klaar, dan ook extra attentie (UWVA#20684) if (((mldStatus == 5 || mldStatus == 6) && oRs("nrActief").Value > 0) ||(mldStatus == 7 && oRs("nrActief").Value > 0 && oRs("nrActief").Value < oRs("nrOrders").Value)) class1 += ' unready'; // Meldingen waaraan je nog niet hoeft te beginnen tonen we sleepy. if (oRs("mld_melding_datum").Value > lnow) class1 += ' sleepy'; } // Als alle offertes de status Technisch Voltooid (6) en/of Afgekeurd (2) en/of Afgewezen (1) hebben, dan extra class orderready toevoegen. // Voor deze meldingen kan er een uitvoeringsopdracht aangemaakt worden, moet er een nieuwe offerte aangemaakt worden of de melding worden afgemeld. if (offertes && (oRs("aantal_offertes").Value == oRs("aantal_offready").Value) && mldStatus == 4) { class1 += " orderready"; } var mld_recent = new Date(oRs("recentdatum").Value); if (mld_recent > recent) { class1 += " updated"; } // Voor een vervolgmelding. if (oRs("isVervolg").Value) class1 += " vervolg"; // Voor een workflowstep. if (oRs("isWorkflow").Value) class1 += " wfstep"; return class1; } // Extra data voor de client om daar dynamisch buttons te kunnen activeren. function fnrowData(oRs) { var mldStatus = parseInt(oRs("mld_status").Value); var mldPrefix = oRs("ins_srtdiscipline_prefix").Value || ""; var data = {mldStatus: mldStatus, mldPrefix: mldPrefix}; var mldChild = oRs("mld_melding_parentkey").Value? true : false; if (mldChild) data.mldChild = true; // mld_stdmelding_doublecheck: 00 (0) Geen controle uitvoeren // 01 (1) Controle dubbel bij invoer nieuwe melding (door FE, FO (of BO)) // 10 (2) Controle dubbel bij accepteren melding (door BO) // 11 (3) Controle zowel bij invoer als bij accepteren // Niet controleren als het al een childmelding is. Dan mag je eigenlijk al niet accepteren/afwijzen var doublecheck = oRs("mld_stdmelding_doublecheck").Value; var parent_key = oRs("mld_melding_parentkey").Value; var mldDoublecheck = (!parent_key && (doublecheck == 2 || doublecheck == 3)); if (mldDoublecheck) data.mldDoublecheck = true; return JSON.stringify(data); } function fnrowActionEnabler(oRs) { // We weten al dat we mogen lezen. Geef dat mee aan func_enabled_melding, die wordt daar efficienter van var mldkey = oRs("mld_melding_key").Value; var nractief = oRs("nrActief").Value; // open Opdrachten var this_mld = mld.func_enabled_melding(mldkey, { dontcarelink: true, knownread: true }); var eEdit = this_mld.canChange; // Wijzigen var eReject = this_mld.canReject; // Afwijzen var eClose = (this_mld.canClose && (S("mld_melding_close") == 0 || nractief == 0)); // Afmelden var eAccept = this_mld.canAccept; // Accepteren var eContinue = this_mld.canContinue; // Vervolg ('kopie') var eForward = this_mld.canForward; // Doorsturen // Zijn er velden verplicht die niet zijn ingevuld? // Startdatum, Einddatum, Melding voor (persoon), Vakgroep en Melding (stdmelding) worden door enkele constraint op de mld_melding tabel al afgedwongen. // Om een melding te forwarden/doorsturen moeten namelijk alle verplichte gegevens zijn ingevuld. Dat kan het geval zijn bij extern aangemaakte meldingen. var emptyRequiredFields = false; // Alleen als ik de melding door kan sturen de verplichte velden checken. Niet bij het corrigeren van de vakgroep/melding (canFixMelding) vanuit de status "Afgemeld(5)". if (this_mld.canForward) { var alg_level = 0; switch (oRs("ins_srtdiscipline_alg").Value) { case 1: alg_level = 5; break; // Ruimte case 3: alg_level = 4; break; // Verdieping case 5: alg_level = 3; break; // Gebouw case 7: alg_level = 2; break; // Locatie default: alg_level = 0; // niet tonen } // Hier niet de functie mld.mld_melding_info(mldkey) gebruiken om mld_melding informatie op te halen. // Een groot gedeelte van de mld_melding informatie heb ik trouwens al. var mld_melding = {mld_key: mldkey, mld_onderwerp: oRs("mld_melding_onderwerp").Value, mld_omschr: oRs("mld_melding_omschrijving").Value, kostenpl_key: oRs("prs_kostenplaats_key").Value || -1, alg_onrgoed_niveau: oRs("alg_onrgoed_niveau").Value, alg_level: alg_level, show_alg: alg_level > 0, show_ins: oRs("ins_srtdiscipline_ins").Value == 1, show_bes: oRs("ins_srtdiscipline_bes").Value == 1, kpnverplicht: (oRs("ins_discipline_kpnverplicht").Value == 1), loc_key: oRs("alg_locatie_key").Value, bld_key: oRs("alg_gebouw_key").Value, flr_key: oRs("alg_verdieping_key").Value, room_key: oRs("alg_ruimte_key").Value, deladdress: oRs("mld_adres_key").Value, srtinst_verplicht: (oRs("ins_srtinst_verplicht").Value == 1), freetext: oRs("mld_stdmelding_freetext").Value }; emptyRequiredFields = mld.getEmptyRequiredFields(mld_melding); var eEmptyRequiredFields = emptyRequiredFields; // Zijn er verplichte velden niet ingevuld voor het doorsturen? eForward = eForward && !eEmptyRequiredFields; // Als er verplichte velden niet zijn ingevuld dan niet doorsturen maar eerste de lege velden in laten vullen. } var eTerugzet = this_mld.canTerugzet; // Terugzetten naar frontoffice var eDoorzet = this_mld.canDoorzet; // Doorzetten naar backoffice var data = { eEdit: eEdit, eReject: eReject, eClose: eClose, eAccept: eAccept, eContinue: eContinue, eForward: eForward, eEmptyRequiredFields: eEmptyRequiredFields, eTerugzet: eTerugzet, eDoorzet: eDoorzet }; return data; } function fncolSpoed(oRs) { var displ = mld.getpriotext(oRs("mld_melding_spoed").Value); var hprio = "
"+oRs("mld_melding_spoed").Value+"
"; if (!excel) { // maak er dan nog leuke plaatjes van switch (oRs("mld_melding_spoed").Value) { case 1: displ = "" + L("lcl_mld_urg_kritiek1") +hprio+ ""; break; case 2: displ = "" + L("lcl_mld_urg_hoog1") +hprio+ ""; break; case 3: displ = "" + L("lcl_mld_urg_normaal1") +hprio+ ""; break; case 4: displ = "" + L("lcl_mld_urg_laag1") +hprio+ ""; break; case 5: displ = "" + L("lcl_mld_urg_hold1") +hprio+ ""; break; } } return displ; } function fnHasOrders(oRs) { if (oRs("nrOrders").Value > 0) return oRs("nrOrders").Value == 1 ? "1 " + L("lcl_shared_order") : oRs("nrOrders").Value + " " + L("lcl_orders"); else return null; } function fncolKey(oRs) { var tekst = oRs("ins_srtdiscipline_prefix").Value + oRs("mld_melding_key").Value + (oRs("mld_melding_parentkey").Value ? L("lcl_mld_references")+oRs("mld_melding_parentkey").Value : ""); return tekst; } function fncolStatus(oRs) { if (oRs("mld_melding_parentkey").Value > 0) return L("lcl_mld_parent_status").format(oRs("mld_melding_parentkey").Value); // default leeg var mldStatus = parseInt(oRs("mld_status").Value); var nrOrders = oRs("nrOrders").Value; var nrActief = oRs("nrActief").Value; // Een melding is nog niet opgelost als er opdrachten/offertes zijn bij de melding en waarvan er geen enkele meer actief is. // De status voor deze meldingen is geaccepteerd(4). var not_solved = nrOrders > 0 && oRs("nrActief").Value == 0 && backo && mldStatus == 4; if (not_solved) { // Checkt bij status 4 of dat nieuw(4) of oud(99) is var mldkey = oRs("mld_melding_key").Value; mldStatus = mld.getextendedmldstatus(mldStatus, mldkey) } var mld_status = mld.getmldstatustext(mldStatus); return ''+mld_status+''; } function fncolNote(oRs) { if (oRs("notitie").Value != null) return (outputmode == 0? "" : oRs("notitie").Value); else return ""; } function fncolNoteTooltip(oRs) { if (oRs("notitie").Value != null) { var notitietext = (oRs("notitie").Value.length > 30? oRs("notitie").Value.substr(0, 30) + "..." : oRs("notitie").Value) return (outputmode == 0? L("lcl_fin_note") + ": " + toDateString(oRs("notitiedatum").Value) + "\n" + notitietext : ""); } else return ""; } function fncolFlags(oRs) { var mldkey = oRs("mld_melding_key").Value; var flagkey = oRs("mld_melding_flag").Value || 0; var displ = flagkey||""; if (!excel) // maak er dan nog leuke plaatjes van { var flagimg = ""; // Met hidden flagkey voor sortering. 999 zorgt dat bij 1 keer sorteren de gevlagde direct bovenaan staan var ttl = L("lcl_mld_flag" + flagkey); displ = "
" +flagimg +""+(flagkey||999)+"
"; } return displ; } function fncolEindDatum(oRs) { if (oRs("mld_melding_parentkey").Value > 0) return L("lcl_mld_parent_status").format(oRs("mld_melding_parentkey").Value); // default leeg return toDateString(oRs("mld_melding_einddatum").Value, excel); // excel noDay } function fncolEindTijd(oRs) { if (oRs("mld_melding_parentkey").Value > 0) return ""; var result = ""; if (oRs("uitvoertijd_eenheid").Value == 'U' || (S("mld_show_endtime")==1 && !oRs("mld_stdmelding_planbaar").Value)) { if (toTimeString(oRs("mld_melding_einddatum").Value) != "00:00") result = toTimeString(oRs("mld_melding_einddatum").Value); } return result; } function fncolBehandelaar(oRs) { if (oRs("mld_melding_parentkey").Value > 0) return L("lcl_mld_parent_status").format(oRs("mld_melding_parentkey").Value); // default leeg return safe.html(oRs("behandelaar").Value); } function fncolSoortMelding(oRs) { var mldSoortMelding = safe.html(oRs("ins_discipline_omschrijving").Value + "/" + oRs("mld_stdmelding_omschrijving").Value); return mldSoortMelding; } var summaryParams = { status_oms: new Array(), status_cnt : new Array() }; function fnsummaryCalc(oRs) { with (summaryParams) { var mldStatus = parseInt(oRs("mld_status").Value); var not_solved = oRs("nrOrders").Value > 0 && oRs("nrActief").Value == 0 && backo && mldStatus == 4; var mld_status = (not_solved? L("lcl_mld_not_solved") : mld.getmldstatustext(mldStatus)); var order = (not_solved? 8 : mldStatus); if (status_oms[order]) { status_cnt[order] = status_cnt[order] + 1; } else { status_oms[order] = mld_status; status_cnt[order] = 1; } } return; } function fnsummaryShow() { with (summaryParams) { status_row = ""; status_row += (status_oms[0] != undefined? ", " + status_oms[0] + " " + status_cnt[0] + "":""); status_row += (status_oms[2] != undefined? ", " + status_oms[2] + " " + status_cnt[2] + "":""); status_row += (status_oms[3] != undefined? ", " + status_oms[3] + " " + status_cnt[3] + "":""); status_row += (status_oms[4] != undefined? ", " + status_oms[4] + " " + status_cnt[4] + "":""); status_row += (status_oms[8] != undefined? ", " + status_oms[8] + " " + status_cnt[8] + "":""); status_row += (status_oms[7] != undefined? ", " + status_oms[7] + " " + status_cnt[7] + "":""); status_row += (status_oms[5] != undefined? ", " + status_oms[5] + " " + status_cnt[5] + "":""); status_row += (status_oms[6] != undefined? ", " + status_oms[6] + " " + status_cnt[6] + "":""); status_row += (status_oms[1] != undefined? ", " + status_oms[1] + " " + status_cnt[1] + "":""); status_row = status_row.substr(2); } return status_row; } function fncolOpdrStatus(oRs) { return status.getopdrstatustext(oRs("mld_statusopdr_key").Value); } function fnendText() { var endText = ""; if (no_old_closed_calls && !params.mld_key) endText = L("lcl_newrows1") + S("mld_max_history") + L("lcl_newrows2"); return endText; } var sum_satisfaction = 0; var aantal_oordeel = 0; function fntotalCalc(oRs) { // Totaal oordeel is alle cijfers opgeteld gedeeld door het aantal beoordelingen. if (oRs("oordeel").Value) { sum_satisfaction += oRs("oordeel").Value; aantal_oordeel++; } } function fntotalShow(column, nrlines) { function doOordeel(cnt_satisfaction, sum_satisfaction) { var result = cnt_satisfaction > 0? sum_satisfaction/cnt_satisfaction : 0; if (excel || print) result = (result!=0? safe.displayfloat(sum_satisfaction/cnt_satisfaction, 1) : ""); else result = rater(result, {readonly: true}); return result; } var result = ""; switch (column.caption) { case L("lcl_bes_oordeel") : result = doOordeel(aantal_oordeel, sum_satisfaction); break; } return result; } function fnOordeel(oRs) { var result = null; var displ_val = oRs("oordeel").Value; var displ_txt = oRs("oordeel_opm").Value; if (displ_val && displ_val != 0) { if (excel || print) result = "" + displ_val + ""; else result = rating.stars(displ_val, {rating: {id: "oordeel", note: displ_txt}}); } return result; } function fnrowFlexParams(oRs) { var disc_key = oRs("ins_discipline_key").Value; var this_mld = mld.func_enabled_mld(disc_key, "D"); var flexParams = {readman: this_mld.canMIread, readuse: this_mld.canFEread}; return flexParams; } var buttons = []; if (params.rsv_ruimte_key) buttons.push({ icon: "page_refresh.png", title: L("lcl_refresh"), action: "FcltMgr.reload()" }); // Als we een subframe onder ins_show_deel zijn dan vooralsnog hier geen toevoeg knop. // Misschien mag je dat namelijk helemaal niet voor dat object en daar staat wel een // toverstafje die veel nauwkeuriger werkt. if (canAdd && !params.deel_key) { var addurl = "appl/mld/mld_melding.asp?urole=" + (backo ? "fo" : urole); // backo mag niet toevoegen addurl += buildTransitParam(["loc_key", "bld_key", "flr_key", "room_key", "srtdisc", "ins_key", "rsv_ruimte_key"], params); buttons.push({ icon: "plus.png", title: L("lcl_add"), action: "FcltMgr.openDetail('" + addurl + "', '" + L("lcl_add") + "')" }); } if (!frontend) buttons.push({ icon: "legenda.png", title: L("lcl_mld_legenda"), action: 'openLegenda()' }); if (behandel_key) { // als ik filter op ik als behandelaar var calendarurl = 'appl/shared/fullcalendar.asp?worker=mldlist&bk='+behandel_key; buttons.push({ icon: "calendar_1.png", title: L("lcl_calendar"), action: "FcltMgr.openDetail('" + calendarurl + "', '" + L("lcl_mld_melding_lopende") + "')" }); } // Heb toegang tot de inline opdrachten details? var authparamsORDBOF = user.checkAutorisation("WEB_ORDBOF", true); var authparamsORDBO2 = user.checkAutorisation("WEB_ORDBO2", true); var accessOpdr = (authparamsORDBOF || authparamsORDBO2); var rst = new ResultsetTable({ keyColumn: "mld_melding_key", sql: sqln, ID: "complainstable", rowClass: fnrowClass, rowData: fnrowData, rowActionEnabler: (urole=="fo" || urole =="bo")?fnrowActionEnabler:null, flexModule: "MLD", flexId: "mld_melding_key", flexGroupId: "mld_stdmelding_key", // Kenmerken zijn ook op stdmelding niveau gedefinieerd flexParentGroupId: "ins_discipline_key", // Kenmerken zijn ook op stdmelding niveau gedefinieerd flexChangeNiveau: "S", // Niveau voor extra headers (met kenmerken) in excel flexParams: (urole=="fe" && (print || excel)) ? fnrowFlexParams : null, filterParams: params, outputmode: outputmode, title: L("lcl_complains"), inlineDetails: (accessOpdr)? "inlineOrdersUrl" : null, hasInlineDetails: fnHasOrders, summaryCalc: fnsummaryCalc, summaryShow: fnsummaryShow, endText: fnendText, showAll: showall, buttons: buttons, totalCalc: fntotalCalc, totalShow: fntotalShow }); if (S('mld_melding_flags') > 0 && !frontend) rst.addColumn(new Column({caption: "o", content: fncolFlags, align: "center"})); rst.addColumn(new Column({caption: "!", content: fncolSpoed, hasActions: true})); rst.addColumn(new Column({caption: L("lcl_mld_number"), datatype: "number", content: fncolKey })); if (!minfo) { rst.addColumn(new Column({caption: L("lcl_vakgroup"), content: "ins_discipline_omschrijving", combine: false})); rst.addColumn(new Column({caption: L("lcl_mld_complain"), content: "mld_stdmelding_omschrijving", combine: true })); } rst.addColumn(new Column({caption: L("lcl_mld_date"), content: "mld_melding_datum", datatype: "date", nowrap: true})); rst.addColumn(new Column({caption: L("lcl_time"), combine: true, content: "mld_melding_datum", datatype: "time", nowrap: true, nomidnight: true})); if (minfo) rst.addColumn(new Column({caption: L("lcl_district"), content: "alg_district_omschrijving", purpose: PRINTING_ONLY})); if (anygeo) { rst.addColumn(new Column({caption: L("lcl_place"), content: "plaatsmelding"})); } rst.addColumn(new Column({caption: L("lcl_mld_subject"), content: "mld_melding_onderwerp"})); if (S("mld_print_loc_address") == 1) rst.addColumn(new Column({caption: L("lcl_location_address"), content: "alg_locatie_adres", purpose: PRINTING_ONLY})); if (minfo) rst.addColumn(new Column({caption: L("lcl_complain"), content: fncolSoortMelding, combine: true, purpose: PRINTING_ONLY})); rst.addColumn(new Column({caption: L("lcl_txt"), content: "mld_melding_omschrijving", combine: true})); if (S("mld_print_loc_address") == 2) { rst.addColumn(new Column({caption: L("lcl_location_address"), content: "alg_locatie_adres", combine: false})); rst.addColumn(new Column({caption: L("lcl_estate_gebouw_man_name"), content: "alg_gebouw_naam", combine: true})); } if (minfo) { rst.addColumn(new Column({caption: L("lcl_behandelgegevens"), content: "mld_melding_opmerking"})); rst.addColumn(new Column({caption: L("lcl_mld_behandelaar"), content: fncolBehandelaar, combine: true})); } // Meldernaam werd niet getoond bij FE, nieuw, en handig met collegas rst.addColumn(new Column({caption: L("lcl_caller"), content: "melder"})); // Behandelaar hoeft niet met de tooltip van de status getoond te worden. De behandelaar wordt wel in een kolom getoond indien het nodig is. rst.addColumn(new Column({caption: L("lcl_mld_status"), content: fncolStatus, tooltip: (outputmode == 0 && !frontend? fncolNoteTooltip : null)})); if (!frontend) rst.addColumn(new Column({caption: L("lcl_fin_note"), content: fncolNote, combine: outputmode == 0})); if (!minfo) { // als je er op filtert weet je het wel, maar op de print vind ik wel leuk // als de frontend bij de statusinfo niet mag zien Wie het doet, mag die hier ook niet de behandelaar zien if ((!behandel_key || print) && !(frontend && S("mld_fe_show_statusnames") == 0)) rst.addColumn(new Column({caption: L("lcl_mld_behandelaar"), content: fncolBehandelaar })); rst.addColumn(new Column({caption: L("lcl_end_date_plan"), content: fncolEindDatum, nowrap: true})); rst.addColumn(new Column({caption: L("lcl_time"), content: fncolEindTijd, nowrap: true, combine: true })); } else { rst.addColumn(new Column({caption: L("lcl_prs_organisatie"), content: "organisatie"})); rst.addColumn(new Column({caption: L("lcl_account"), content: "kostenplaats" })); //rst.addColumn(new Column({caption: L("lcl_mld_laatste_actie"), content: "laatste_actie"})); rst.addColumn(new Column({caption: L("lcl_mld_oordeel"), content: fnOordeel, datatype: "float", decimals: 1, total: true})); if (excel || print) rst.addColumn(new Column({caption: L("lcl_fac_like_remark"), content: "oordeel_opm"})); } /* de mogelijke acties */ rst.addAction({ action: "mld_edit", caption: L("lcl_edit"), isDefault: true } ); if (urole=="fo" || urole =="bo") // dan hebben we fnrowActionEnabler aangezet { rst.addAction({ action: "mld_reject", caption: L("lcl_reject"), enabler:"eReject", multi: !tiny, multiOnce: true } ); // Bulk afmelden mag alleen als mld_melding_close = 0. rst.addAction({ action: "mld_close", caption: L("lcl_close"), enabler:"eClose", multi: (!tiny && S("mld_melding_close") == 0) , multiOnce: (S("mld_melding_close") == 0)} ); rst.addAction({ action: "mld_accept", caption: L("lcl_mld_accept"), enabler:"eAccept", multi: !tiny, multiOnce: true } ); rst.addAction({ action: "mld_continue", caption: L("lcl_mld_continuation"), enabler: "eContinue" } ); // Eén van beiden, eEmptyRequiredFields of eForward, is true. rst.addAction({ action: "mld_forward", caption: L("lcl_forward"), enabler: "eForward" } ); rst.addAction({ action: "mld_forward_empty", caption: L("lcl_forward"), enabler: "eEmptyRequiredFields" } ); rst.addAction({ action: "mld_terugzet", caption: L("lcl_terugzet"), enabler: "eTerugzet", multi: !tiny, multiOnce: true } ); rst.addAction({ action: "mld_doorzet", caption: L("lcl_doorzet"), enabler: "eDoorzet", multi: !tiny, multiOnce: true } ); } var cnt = rst.processResultset(); if (!excel && !print) {%> <% } %> <% } %>