Files
Facilitor/APPL/PDA/orders_list.asp
Peter Feij 32d45b79f5 FSN#37797 opdrachten accepteren en wat meer info in de lijst
svn path=/Website/trunk/; revision=30833
2016-09-22 17:43:26 +00:00

312 lines
15 KiB
Plaintext

<%@ 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)
*/ %>
<!-- #include file="../Shared/common.inc" -->
<!-- #include file="../Shared/discxalg3d.inc" -->
<!-- #include file="../Shared/status.inc" -->
<!-- #include file="../MLD/mld.inc" -->
<!-- #include file="./resultset_table.inc" -->
<!-- #include file="./mobile.inc" -->
<!-- #include file="./iface.inc" -->
<%
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}));
%>
<html><head>
<% FCLTMHeader.Generate({title: L("lcl_mobile_opdrachten")}); %>
</head>
<body>
<%
// 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_einddatum "
+ " , o.mld_opdr_omschrijving "
+ " , o.mld_opdr_bedrijfopdr_volgnr "
+ " , o.mld_statusopdr_key "
+ " , 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 fncolaside(oRs)
{
return status.getopdrstatustext(oRs("mld_statusopdr_key").value);
}
function fncolSubHeader(oRs)
{
return (oRs("plaatsmelding").Value? "<div class='listbodykop'>" + safe.html(oRs("plaatsmelding").Value) + "<br>" : "")
+ L("lcl_mld_enddate") + ": " + toDateTimeString(oRs("mld_opdr_einddatum").Value, false, false, true) + "</div>"
+ "<div class='listbodytext'>" + safe.html(shorttxt(oRs("mld_opdr_omschrijving").Value, S("rs_mobile_maxchar"))) + "</div>";
};
// 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,
asideColumn: fncolaside,
showAll: true
});
var cnt = rst.processResultset();
CONTENT_END();
FOOTER({});
PAGE_END();
%>
</body>
</html>