<%@ language = "JavaScript" %>
<% /*
     $Revision$
     $Id$

     File:        mld_search_list.asp
     Description: Vangt de parameters van mld_search op en verwerkt die in een aanroep van mld_list
     Parameters:  urole
                  Alle zoek-criteria van mld_search.asp
     Context:     Vanuit mld_search.asp
                  met justaccept=1 wordt MLDBO3 autorisatie verondersteld
                  met justclose=1 wordt MLDBO2 autorisatie verondersteld
     Note:

     TODO:
     decentraal / close_only verwerken (mld en ord)
*/ %>

<!--#include file="../Shared/common.inc" -->
<!--#include file="mld_list.inc" -->
<!--#include file="mld_groep_list.inc" -->
<!--#include file="opdr_list.inc" -->

<%
// ROLE and ACTION parameters
var urole = getQParamSafe("urole", "");   // Indien niet meegegeven, veronderstel dan frontend gebruik
var fronto = (urole == "fo");
var backo = (urole == "bo");
var minfo = (urole == "mi");
var frontend = (urole == "fe" || (!fronto & !backo & !minfo));

var cnt = getQParamInt("cnt", 0) == 1;  // Werd/wordt gebruikt vanuit cntmodule?

var justClose = getQParamInt("justclose", 0) == 1;
var justAccept = getQParamInt("justaccept", 0) == 1;
var perform = getQParamInt("perform", 0) == 1;

// FORM parameters: de waarde indien aanwezig, anders null
// Vaak is een lege selectie ook een -1, dus dan is-ie wel aanwezig, maar hoeft niet
// als filter te worden toegepast. Dan is null dus gelijk aan -1, qua betekenis,
// Vandaar dat een default van -1 ipv null ook mag
// In eerste instantie identificeren we elk veld gewoon 1-op-1.
var outputmode = getQParamInt("outputmode", 0); //  0 = screen, 1 = print, 2 = excel etc
var showall = getQParamInt("showall", 0) == 1;
var tiny = getQParamInt("tiny", 0) == 1;

// Voor velden die de user in kan typen valideren we zodanig dat we er tegen kunnen
var mldnum = getQParamInt("mldnum", -1, true); // Meldingnr
var opdrnum = getQParamInt("opdrnum", -1, true); // Opdrachtnr
var mld_or_opdr = getQParamInt("mld_or_opdr", 0) == 1;
var rsv_ruimte_key = getQParamInt("rsv_ruimte_key", -1);  // Komt niet uit mld_search.asp, maar ik maak er geen mld_list.asp voor
var ref_key = getQParamInt("ref_key", -1); // Referentie
var ref_type = getQParam("ref_type", ""); // Referentie type ('M', 'O', 'R', 'B', 'X', 'C' of 'F')

var params = { urole : urole,
               outputmode: outputmode,
               showall: showall,
               tiny: tiny,
               perform: perform
             }

var srtdisc_key = getQParamInt("srtdisc", -1); // Soort melding

if (srtdisc_key > 0)
lcl.set_dialect(srtdisc_key, "MLD_SRTDISCIPLINE_KEY");
// else mixed srtdisc, terugvallen op de default

if (mldnum > 0 || opdrnum > 0 || ref_key > 0)
{
  params.mld_key = (mldnum != -1 ? mldnum : null);
  params.opdr_key = (opdrnum != -1 ? opdrnum : null);
  if (!params.mld_key && !params.opdr_key)
  {
    params.ref_key = (ref_key != -1 ? ref_key : null);
    params.ref_type       = (ref_type != "" ? ref_type : null);
  }

  var groepering_key = getQParamInt("groupby", -1); // Groepering

  params.groepering_key = (groepering_key != -1 ? groepering_key : null);

  if (justClose)
  {
    // Alleen maar afmelden, slecht mldnum is relevant, maar de status is impliciet bepaald:
    status4 = true;
    status7 = true;
  }
}
else if (rsv_ruimte_key > 0)
{
  cache.whenNoRecords("SELECT 1 FROM mld_melding WHERE res_rsv_ruimte_key = " + rsv_ruimte_key);
  params.rsv_ruimte_key = (rsv_ruimte_key != -1 ? rsv_ruimte_key : null);
}
else
{  // Alleen als mldnum en opdrnum niet opgegeven is, zijn de resterende parameters van belang!
  var mldstatus_arr = getQParamIntArray("mldstatusmulti", [-1]); // Meldingstatus
  var opdrstatus_arr = getQParamIntArray("opdrstatusmulti", [-1]); // Opdrachtstatus
  var sName_key = getQParamInt("sName_key", -1); // Melder
  var sComp_key = getQParamInt("sComp_key", -1); // Bedrijf
  var sDept_key = getQParamInt("sDept_key", -1); // Organisatie
  if (sDept_key == -1) // Indien geen organisatie (afdeling) is meegegeven dan wellicht wel cluster (alleen hoofdafdelingen)
    sDept_key = getQParamInt("sDeptH_key", -1); // Bussiness Unit (Cluster/Hoofdafdeling)
  var regiokey = getQParamInt("regiokey", -1); // Regio
  var districtkey = getQParamInt("districtkey", -1); // District
  var locatiekey = getQParamInt("locatiekey", -1); // Locatie
  var gebouwkey = getQParamInt("gebouwkey", -1); // Gebouw
  var verdiepingkey = getQParamInt("verdiepingkey", -1); // Verdieping
  var ruimtekey = getQParamInt("ruimtekey", -1); // Ruimte
  var sBehandel_key = getQParamInt("sBehandel_key", -1); // Behandelaar
  var disc_key_arr = getQParamIntArray("discmulti", [-1]); // Productgroep
  var meldinggrp_key = getQParamInt("meldinggrp_key", -1); // Meldinggroep
  var behandelgrp_key = getQParamInt("behandelgrp_key", -1); // Behandelgroep
  var stdm_key_arr = getQParamIntArray("sm", [-1]); // Melding (Stdmelding)
  var kp = getQParam("kp", null); // Kostenplaats
  var handler = getQParamInt("handler", -1); // Uitvoerende
  var contact_key = getQParamInt("sContact_key", -1); // Contactpersoon
  var opdrtype_key = getQParamInt("opdrtype", -1); // Opdrachttype
  var searchtekst = getQParam("searchtekst", ""); // Zoektekst
  var omschr = getQParam("omschr", ""); // Omschrijving
  var disc_key = getQParamInt("insdisc", -1); // Objectdiscipline
  var insgroup_key = getQParamInt("inssrtgroup", -1); // Objectgroep
  var objsrt_key_str = getQParamIntArray("inssrtdeelmulti", [-1]); // Objectsoort
  var objectoms = getQParam("objectoms", null); // Object omschrijving
  var groepering_key = getQParamInt("groupby", -1); // Groepering
  var meldbron_key = getQParamInt("meldbronkey", -1); // Meldbron
  var ingevoerd = getQParam("ingevoerd", -1); // ingevoerd door: "fe", "fo" of -1 voor beide
  var verantw_key = getQParamInt("verantw", -1); // Gebouw verantwoordelijke
  var bosort = getQParamInt("bosort", S('mld_bo_sort_descending'));

  var chkAcceptEx = getQParamInt("chkAcceptEx", 0) == 1; // Overschrijding acceptatietijd
  var chkRunEx = getQParamInt("chkRunEx", 0) == 1; // Overschrijding doorlooptijd
  var chkSpoed = getQParamInt("chkSpoed", 0) == 1; // Spoed
  var chkAfgerond = getQParamInt("chkAfgerond", 0) == 1; // Afgerond

  var datefrom = getQParamDate("date_from", null); // Periode van
  var dateto = getQParamDate("date_to", null); // Perdiode tot

  var deel_key = getQParamInt("ins_key", -1);  // Komt niet uit mld_search.asp, maar als dit de enige is maak ik er geen mld_list.asp voor

  var offertes = getQParamInt("offertes", 0) == 1; // Beperk de meldingen tot die die nog ergens in het offerte traject hangen, waar dan ook. Er is bij die meldingen nog geen (uitvoerings-)opdracht.

  params.mldstatus_arr  = (mldstatus_arr.length > 0 && mldstatus_arr.join(",").indexOf("-1") == -1? mldstatus_arr : null);
  params.opdrstatus_arr = (opdrstatus_arr.length > 0 && opdrstatus_arr.join(",").indexOf("-1") == -1? opdrstatus_arr : null);
  params.caller_key     = (sName_key != -1 ? sName_key : null);
  params.comp_key       = (sComp_key != -1 ? sComp_key : null);
  params.org_key        = (sDept_key != -1 ? sDept_key : null);
  params.reg_key        = (regiokey != -1 ? regiokey : null);
  params.dist_key       = (districtkey != -1 ? districtkey : null);
  params.loc_key        = (locatiekey != -1 ? locatiekey : null);
  params.bld_key        = (gebouwkey != -1 ? gebouwkey : null);
  params.flr_key        = (verdiepingkey != -1 ? verdiepingkey : null);
  params.room_key       = (ruimtekey != -1 ? ruimtekey : null);
  params.behandel_key   = (sBehandel_key != -1 ? sBehandel_key : null);
  params.srtdisc_key    = (srtdisc_key != -1 ? srtdisc_key : null);
  params.disc_key_arr   = (disc_key_arr.length > 0 && disc_key_arr.join(",").indexOf("-1") == -1? disc_key_arr : null);
  params.meldinggrp_key = (meldinggrp_key != -1 ? meldinggrp_key : null);
  params.behandelgrp_key= (behandelgrp_key != -1 ? behandelgrp_key : null);
  params.stdm_key_arr   = (stdm_key_arr.length > 0 && stdm_key_arr.join(",").indexOf("-1") == -1? stdm_key_arr : null);
  params.kp             = (kp != ""? kp : null);
  params.handler_key    = (handler != -1 ? handler : null);
  params.contact_key    = (contact_key != -1 ? contact_key : null);
  params.opdrtype_key   = (opdrtype_key != -1 ? opdrtype_key : null);
  params.searchtekst    = (searchtekst != "" ? searchtekst : null);
  params.omschr         = (omschr != "" ? omschr : null);
  params.disc_key       = (disc_key != -1 ? disc_key : null);
  params.insgroup_key   = (insgroup_key != -1 ? insgroup_key : null);
  params.objsrt_key_str = (objsrt_key_str.length > 0 && objsrt_key_str.join(",").indexOf("-1") == -1? objsrt_key_str : null);
  params.objectoms      = (objectoms != ""? objectoms : null);
  params.groepering_key = (groepering_key != -1 ? groepering_key : null);
  params.chkAcceptEx    = chkAcceptEx;
  params.chkRunEx       = chkRunEx;
  params.chkSpoed       = chkSpoed;
  params.chkAfgerond    = chkAfgerond;
  params.datefrom       = datefrom;
  params.dateto         = dateto;
  params.srt_tracking   = getQParam("srt_tracking", null);
  params.prs_tracking   = getQParamInt("prs_tracking", null);
  params.actiondatefrom = getQParamDate("actiondate_from", null);
  params.actiondateto   = getQParamDate("actiondate_to", null);
  params.deel_key       = (deel_key != -1 ? deel_key : null);
  params.offertes       = offertes;
  params.meldbron_key   = (meldbron_key != -1 ? meldbron_key : null);
  params.ingevoerd      = (ingevoerd != -1 ? ingevoerd : null);
  params.verantw_key    = (verantw_key != -1 ? verantw_key : null);
  params.bosort         = (bosort != -1 ? bosort : null);

  // Flags
  params.flags = [];
  for (flagkey=0; flagkey < S('mld_melding_flags'); flagkey++)
  {
    if (getQParam("flag" + flagkey, "off") == "on")
        params.flags.push(flagkey);
  }

  // FORM status checkboxes
  var st_mldNew  = getQParamInt("mldNew", 0) == 1; // Te behandelen
  var st_mldSelf = getQParamInt("mldSelf", 0) == 1; // In behandeling
  var st_mldBusy = getQParamInt("mldBusy", 0) == 1; // Bij Frontoffice
  var st_mldRej  = getQParamInt("mldRej", 0) == 1; // Afgewezen
  var st_mldAfm  = getQParamInt("mldAfm", 0) == 1; // Afgemeld
  var st_mldVer  = getQParamInt("mldVer", 0) == 1; // Archief
  var st_mldDone = getQParamInt("mldDone", 0) == 1; // Gereed

  // ** de velden van de form zijn nu allemaal bekend **
  // ** nu volgt de verwerking

  // Statusfilters:
  // FE: nog niks mee gedaan (2), mee bezig (0, 3, 4, 7), afgewezen (1), klaar (5, 6)
  // FO: zelf mee bezig (0), bij BO (2, 3, 4, 7), afgewezen (1), afgemeld (5), archief (6)
  // BO: te behandelen (2, 3) zelf mee bezig (4,7), bij FO (0), afgewezen (1), afgemeld (5), archief (6)
  // Merk op: de ids kunnen afhankelijk van de urole andere betekenis hebben, dus.
  // Interpreteer: status0 wordt true betekent meldingen van status 0 tonen.
  // status99 is "niet opgelost" (we doen hier maar aan mee..)
  var status0 = (frontend && st_mldBusy) || (fronto && st_mldSelf) || (backo && st_mldBusy);
  var status1 = st_mldRej;
  var status2 = (frontend && st_mldNew)  || (fronto && st_mldBusy) || (backo && st_mldNew);
  var status3 = (frontend && st_mldBusy) || (fronto && st_mldBusy) || (backo && st_mldNew);
  var status4 = (frontend && st_mldBusy) || (fronto && st_mldBusy) || (backo && st_mldSelf);
  var status5 = (frontend && st_mldDone) || (fronto && st_mldAfm) || (backo && st_mldAfm);
  var status6 = (frontend && st_mldDone) || (fronto && st_mldVer) || (backo && st_mldVer);
  var status7 = status4;
  var status99 = (frontend && st_mldBusy) || (fronto && st_mldBusy) || (backo && st_mldNew);   // denk ik
}

params.mldstpen = status0;
params.mldstrej = status1;
params.mldstnew = status2;
params.mldsting = status3;
params.mldstacc = status4;
params.mldstafm = status5;
params.mldstver = status6;
params.mldstuit = status7;
params.mldnieto = status99;

// TODO: deze autorisaties zijn voor MLD, maar voor Opdr irrelevant. Daar dus op ORD* controleren
//  En ook (belangrijk!) de juiste ROLE hanteren (fo=behandelaar, bo=opperhoofd)

var autfunction = "";

// ** ik spreek af dat ik alleen relevante parameters doorgeef
if (groepering_key == 2 || groepering_key == 16) // 'opdrachten' en 'opdrachten + kosten'
    mld_or_opdr = 1;

if (mld_or_opdr != 1)
{
    if (justAccept)
      autfunction = "WEB_MLDBO3";
    else if (justClose)
      autfunction = "WEB_MLDBO2";
    else if (backo)
      autfunction = "WEB_MLDBOF"
    else if (fronto)
      autfunction = "WEB_MLDFOF";
    else if (cnt)
      autfunction = "WEB_CNTUSE";  // nagaan of gebruikt
    else if (minfo)
      autfunction = "WEB_MLDBAC"
    else
      autfunction = "WEB_MLDUSE";

    if (!params.groepering_key || params.groepering_key == 1)
      mld_list(autfunction, params);
    else
      mld_groep_list(autfunction, params);
}
else
{
    // Men zoekt opdrachten. Relevante autorisaties zijn daarbij:
    //- ORDBOF (alles van opdrachten/binnen scope)
    //- MLDORD (eigen opdrachten afmelden)
    //- ORDBO2 (opdrachten afmelden/binnen scope)
    //- ORDFIN (opdrachtgegevens aanpassen/binnen scope)
    //- ORDSUP (hoge flexkenmerken aanpassen/binnen scope)
    //
    // Alleen: hoe weet ik welke? reguliere handling van opdrachten gaat via ord_search, niet hierlangs
  opdr_list ( params );
}
%>
