<%@ language = "javascript" %> <% /* $Revision$ $Id$ File: pda/orders_list.asp Description: Toont een beknopte opdrachtenlijst voor op de pda Parameters: Context: - Status optie a nog testen Note: Twee varianten: - opdrachten die aan mij toegekend zijn (ik ben de uitvoerder) - intern (gegroepeerd op plaats) - als contactpersoon van een extern bedrijf - opdrachten die ik mag zien (gegroepeerd per uitvoerder) */ %> <% var qrc = getQParamInt("qrc", 0) != 0; var mld_key = getQParamInt("mld_key", -1); var grp_sel = getQParam("grp", ""); var locatie_key = getQParamInt("locatie_key", user.alg_locatie_key({withcurrent:true})); // Locatie var gebouw_key = getQParamInt("gebouw_key", user.alg_gebouw_key({withcurrent:true})); // Gebouw, kan -1 zijn, dan niet gebruiken var verdieping_key = getQParamInt("verdieping_key", user.alg_verdieping_key({withcurrent:true})); %>
<% FCLTMHeader.Generate({title: L("lcl_mobile_opdrachten")}); %>
<% // Filter var thisfilter = ""; var listmode = 0; var autfunction = []; var addAllowed = false; // Bepaal mijn hoedanigheid voor deze lijst; er is een logische hierarchy // 1. is er een mld_key bekend?, dan wil ik alleen de opdrachten bij die melding. if (mld_key > -1) { var sql = "SELECT sd.ins_srtdiscipline_prefix" + " , m. mld_melding_status" + " FROM mld_melding m" + " , mld_stdmelding s" + " , mld_discipline md" + " , ins_srtdiscipline sd" + " WHERE m.mld_melding_key = " + mld_key + " AND s.mld_stdmelding_key = m.mld_stdmelding_key" + " AND sd.ins_srtdiscipline_key = md.ins_srtdiscipline_key" + " AND md.ins_discipline_key = s.mld_ins_discipline_key"; var oRs = Oracle.Execute(sql); var meldingNr = oRs("ins_srtdiscipline_prefix").Value + mld_key; var status = oRs("mld_melding_status").Value; oRs.Close(); var this_mld = mld.func_enabled_melding(mld_key); addAllowed = this_mld.canAddOpdr; listmode = 4; } else { // a. ben ik een contactpersoon van een extern bedrijf? Dan mag ik opdrachten van mijn bedrijf zien. var exhandler = mld.iamContact(); if (exhandler) { listmode = 1; // Autorisatie (WEB_ORDBO2: Om alleen eigen opdrachten te kunnen afmelden) hierin toch meenemen. Mocht je alles willen zien dan kan je hier de autorisatie altijd op aanpassen. autfunction = ["WEB_ORDBO2"]; } else { // b. heb ik dan opdrachtrechten binnen een scope, dat is ORDBOF of ORDBO2? Dan mag ik opdrachten binnen de scope zien. // ORDBOF is aanmaken, wijzigen en afmelden, maar aanmaken doet er niet toe // ORDBO2 is alleen afmelden. Voor de lijst is er geen verschil; ik interpreteer BOF zwaarder dan BO2 (..) // Ik wil voor de scope wel weten welke autorisatie geldig is authparams = user.checkAutorisation(["WEB_ORDBOF", "WEB_ORDBO2"], true); if (authparams) { autfunction = ["WEB_ORDBOF", "WEB_ORDBO2"]; listmode = 2; } __Log ('autfunction bepaald op '+ autfunction.join(",")); // Zo nee if (autfunction.length == 0) { // c. ben ik een interne uitvoerder van opdrachten? Dan mag ik de aan mij toegekende opdrachten zien. // Dat kan ik passief controleren: zijn er actieve opdrachten op mijn naam? listmode = 3; // De actieve controle is of ik MLDORD rechten heb. Dubbelop? Met MLDORD rechten mag je eigen opdrachten afmelden. authparams = user.checkAutorisation("WEB_MLDORD"); // Als je ook geen WEB_MLDORD rechten hebt, mag je verder niets meer. autfunction = ["WEB_MLDORD"]; } } } // Wel, afhankelijk van mijn bepaalde rol kan ik mijn overzicht anders willen, // toegespitster op mijn behoefte (listmode): // 1. alle opdrachten, met de naam van de contactpersoon erbij (ik of mijn collega, leeg als ik) // 2. alle opdrachten per uitvoerder, kan ik makkelijk afmelden // 3. al mijn opdrachten, op locatie (verdieping of zo) of op vakgroep gegroepeerd, mijn todolijst // 4. alle opdracht van de meegegeven melding function grp_sel_listmode2(grp) { var x = " AND mu.naam = " + safe.quoted_sql(grp); return x; } function grp_sel_listmode3(grp) { var x = " AND ( (m.mld_alg_onroerendgoed_keys IS NOT NULL AND va.plaatsmelding = " + safe.quoted_sql(grp) + ")" + " OR (m.mld_alg_onroerendgoed_keys IS NULL AND l.alg_locatie_code = " + safe.quoted_sql(grp) + ")" + " )"; return x; } sql = "SELECT o.mld_opdr_key " + " , " + lcl.xsqla('d.ins_discipline_omschrijving', 'd.ins_discipline_key') + " , " + lcl.xsqla('std.mld_stdmelding_omschrijving','std.mld_stdmelding_key') + " , o.mld_melding_key || '/' || o.mld_opdr_bedrijfopdr_volgnr opdracht" + " , NVL(va.plaatsmelding, l.alg_locatie_code) plaatsmelding" + " , m.mld_melding_spoed " + " , o.mld_opdr_datumbegin " + " , o.mld_opdr_omschrijving " + " , o.mld_opdr_bedrijfopdr_volgnr " + " , mu.naam " + " FROM mld_opdr o " + " , mld_melding m " + " , mld_stdmelding std " + " , ins_tab_discipline d " + " , (SELECT v.alg_onroerendgoed_keys" + " , v.alg_gebouw_key" + " , v.alg_verdieping_key" + " , v.alg_ruimte_key" + " , v.alg_gebouw_code" + " || NVL2 (v.alg_verdieping_code, '-' || v.alg_verdieping_code, '')" + " || NVL2 (v.alg_ruimte_nr, '-' || v.alg_ruimte_nr, '')" + " || NVL2 (v.alg_terreinsector_code, '-' || v.alg_terreinsector_code, '')" + " plaatsmelding" + " FROM alg_v_allonrgoed_gegevens v" + ") va" + " , alg_locatie l " + " , alg_district di" + " , mld_v_uitvoerende mu " + " WHERE o.mld_melding_key = m.mld_melding_key " + " AND m.mld_stdmelding_key = std.mld_stdmelding_key " + " AND std.mld_ins_discipline_key = d.ins_discipline_key " + " AND o.mld_uitvoerende_keys = mu.mld_uitvoerende_key" // type b of p toch nog ergens doen@? + (grp_sel=="" ? "" : (listmode == 2 ? grp_sel_listmode2(grp_sel) // listmode=2 : grp_sel_listmode3(grp_sel) // listmode=3 ) ) + " AND o.mld_statusopdr_key IN (4, 5, 8) " + " AND m.mld_alg_onroerendgoed_keys = va.alg_onroerendgoed_keys(+) " // De opdracht heeft zelf ook een plaats of nie? + " AND m.mld_alg_locatie_key = l.alg_locatie_key(+)" + " AND l.alg_district_key = di.alg_district_key(+)"; if (listmode != 4 && listmode !=1) { // Verrassing: we tonen een niveau hoger dan dat we weten waar we zitten // zo heeft de uitvoerder meer overzicht. We weten dat de hogere keys goed gevuld zijn. if (verdieping_key > -1) sql += " AND (l.alg_locatie_key IS NULL OR va.alg_gebouw_key = " + gebouw_key + ")"; else if (gebouw_key > -1) sql += " AND (l.alg_locatie_key IS NULL OR l.alg_locatie_key = " + locatie_key + ")"; //else if (locatie_key > -1) } if (listmode == 1) { sql += " AND EXISTS (SELECT 'X' " // Ben ik contactpersoon van het uitvoerende externe bedrijf + " FROM prs_contactpersoon" + " WHERE prs_perslid_key = " + user_key + " AND prs_bedrijf_key = o.mld_uitvoerende_keys)"; } if (listmode == 3) { // Eerst controleren of ik misschien een plaatsvervanger ben. Ook als plaatsvervanger heb ik "WEB_MLDORD" rechten (listmode 3) var prsKeys = user.collegakeylist(); // Zijn er actieve opdrachten op mijn naam of als plaatsvervanger op mijn bordje? sql += " AND o.mld_uitvoerende_keys IN (" + prsKeys + ")"; // is scherper dan evt voorgaande } if (listmode == 4) sql += " AND m.mld_melding_key = " + mld_key; // Setting mld_typeopdr_afmelden_extern: Afmelder (ORDBO2) mag externe opdrachten (0=Niet zien, 1=Zien, 2=Afmelden) // Als ik een interne (decentraal/intern) uitvoerder ben mag ik de externe opdrachten niet zien als mld_typeopdr_afmelden_extern==0. // De voorwaarde geldt niet als // 1) de opdracht toegekend is aan een persoon. Eigen opdrachten mag ik altijd zien. // 2) ik de contactpersoon ben van het uitvoerende externe bedrijf. Opdrachten van eigen bedrijf mag ik altijd zien. // Indien punt 2 geldt dan is de listmode=1. Dan is de voorwaarde sql_extern niet meer van belang. Dus kan hier weggelaten worden. // Let op!!! Deze voorwaarde geldt dus alleen voor de WEB_ORDBO2 rechten. var sql_extern = " AND ((SELECT mto.mld_typeopdr_afmelden_extern" + " FROM mld_typeopdr mto" + " WHERE mto.mld_typeopdr_key = o.mld_typeopdr_key) IN (1, 2)" + " OR EXISTS (SELECT 'X' " // Toegekend aan een persoon + " FROM prs_perslid" + " WHERE prs_perslid_key = o.mld_uitvoerende_keys)" //+ " OR EXISTS (SELECT 'X' " // Ben ik contactpersoon van het uitvoerende externe bedrijf //+ " FROM prs_contactpersoon" //+ " WHERE prs_perslid_key = " + user_key //+ " AND prs_bedrijf_key = o.mld_uitvoerende_keys)" + " )"; var sqlA = ""; if (listmode == 4) sqlA = sql; else { // pautfunction is nu altijd een Array met webfuncties for (var ii = 0; ii < autfunction.length; ii++) { // Voorwaarde sql_extern t.b.v. setting mld_typeopdr_afmelden_extern alleen toevoegen voor WEB_ORDBO2 rechten. var sql3d = sql + (listmode == 2 && autfunction[ii] == "WEB_ORDBO2"? sql_extern : ""); sqlA = (ii > 0? sqlA + " UNION " : "") + discxalg3d(sql3d, "d.ins_discipline_key", "di.alg_regio_key", "l.alg_district_key", "l.alg_locatie_key", "va.alg_gebouw_key", "va.alg_verdieping_key", "va.alg_ruimte_key", autfunction[ii], '' ); } } sql = "SELECT * FROM (" + sqlA + ") ORDER BY " + (listmode == 2? "naam," : (listmode == 3? "mld_stdmelding_omschrijving," : "mld_opdr_bedrijfopdr_volgnr,")) + " mld_opdr_datumbegin"; function fncolLink(oRs) { var url = ""; if (grp_sel == "") { if (listmode == 1 || listmode == 4) { url = "../pda/order.asp?opdr_key=" + oRs("mld_opdr_key").Value; } else { var col = (listmode == 2 ? "naam" : (listmode == 3 ? "plaatsmelding" : "")); if (col != "") url = "../pda/orders_list.asp?grp=" + safe.url(oRs(col).Value); } } else url = "../pda/order.asp?opdr_key=" + oRs("mld_opdr_key").Value; return url; }; function fncolSubHeader(oRs) { return (oRs("plaatsmelding").Value? "
" + safe.html(oRs("plaatsmelding").Value) + "
" : "") + "
" + safe.html(shorttxt(oRs("mld_opdr_omschrijving").Value, S("rs_mobile_maxchar"))) + "
"; }; // Om wat explicieter te zijn in wat we zien specifieke titels per mode var listtitle = L("lcl_mobile_opdrachten"); switch (listmode) { case 1: listtitle = L("lcl_mobile_opdrachten1"); break; case 2: listtitle = L("lcl_mobile_opdrachten2") + " " + CurrentPositionMinus1; break; /* is niveau hoger */ case 3: listtitle = L("lcl_mobile_opdrachten3") + " " + CurrentPositionMinus1; break; /* is niveau hoger */ case 4: listtitle = L("lcl_mobile_opdrachten") + " " + L("lcl_mobile_objbijmelding") + " " + meldingNr; break; } // var addaction = (((listmode == 4) && (status!=0)&&(status!=2)&&(status!=3)) ? "../pda/order.asp?mld_key="+mld_key : ""); var addaction = (addAllowed? "../pda/order.asp?mld_key=" + mld_key : ""); PAGE_START(); HEADER({title: listtitle, back: !qrc, home: !qrc, addaction: addaction}); CONTENT_START(); var rst = new ResultsetTable({ keyColumn: "mld_opdr_key", sql: sql, ID: "orderstable", linkColumn: fncolLink, groupColumn: (listmode == 2 ? "naam" : (listmode == 3 ? "plaatsmelding" : "")), groupSelect: grp_sel, headerColumn: "opdracht", detailColumn: "mld_stdmelding_omschrijving", subheaderColumn: fncolSubHeader, showAll: true }); var cnt = rst.processResultset(); CONTENT_END(); FOOTER({}); PAGE_END(); %>