<%@ 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_bord.inc" -->
<!--#include file="opdr_list.inc" -->
<!--#include file="mld_groep_list.inc" -->

<%
// ROLE and ACTION parameters
var urole = getFQParamSafe("urole", "");
if (!urole)
{
  var autfunctions = { fo: "WEB_MLDFOF", bo: ["WEB_MLDBOF", "WEB_MLDBO2", "WEB_MLDBO3"], mi: "WEB_MLDBAC", fe: "WEB_MLDUSE" }; // pas op voorkeursvolgorde!
  urole = user.autoUrole("fo", autfunctions, false); // false->verplicht, je moet 1 van de rechten hebben.
}

var fronto = (urole == "fo");
var backo = (urole == "bo");
var minfo = (urole == "mi");
var frontend = (urole == "fe" || (!fronto && !backo && !minfo));

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

var justClose = getFQParamInt("justclose", 0) == 1;
var justAccept = getFQParamInt("justaccept", 0) == 1;
var perform = getFQParamInt("perform", 0) == 1;
var treat = (getFQParamInt("treat", 0) == 1);
var onlyConcepts = getFQParamInt("onlyConcepts", 0) == 1; // Laat alleen concepten zien
var inclConcepts = (frontend?1:0); // Laat je zelden zien, alleen in fe-overzicht en instemmers-overzicht
var mldbordColumn = getFQParamInt("mldbord-columns", 0);
var mldbordColumnDescr = getFQParam("bord_descr", "");
var searchmode = getFQParamSafe("searchmode", "list");

// 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 = getFQParamInt("outputmode", 0); //  0 = screen, 1 = print, 2 = excel etc
var full    = getFQParamInt("full", 0) == 1; // alle meldingen tonen.
var showall = getFQParamInt("showall", 0) == 1;
var tiny    = getFQParamInt("tiny", 0) == 1;
var linked  = getFQParam("linked", (full ? "on" : "off")) == "on";
var respijt = getFQParam("respijt", (full ? "on" : "off")) == "on";
var indult  = getFQParam("indult", (full ? "on" : "off")) == "on";
var public  = getFQParamInt("public", 0);

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

var params = { urole : urole,
               outputmode: outputmode,
               showall: showall,
               tiny: tiny,
               linked: linked,
               respijt: respijt,
               indult: indult,
               onlyConcepts:onlyConcepts,
               inclConcepts: inclConcepts,
               mldbordColumn: mldbordColumn,
               mldbordColumnDescr: mldbordColumnDescr,
               withflex: !tiny,
               perform: perform,
               treat: treat,
               full: full,
               public: public
             }

var srtdisc_key_arr = getFQParamKeyArray("srtdiscmulti", []); // Soort melding

if (srtdisc_key_arr.length)
  lcl.set_dialect(srtdisc_key_arr[0], "MLD_SRTDISCIPLINE_KEY");
// else mixed srtdisc, terugvallen op de default

params.srtdisc_key_arr = srtdisc_key_arr;
if (mld_key_arr.length || mldnum > 0 || opdrnum > 0 || ref_key > 0)
{
  params.mld_key = (mldnum != -1 ? mldnum : null);
  params.mld_key_arr = mld_key_arr;
  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 = getFQParamInt("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 if (cnt_key > 0)
{
  cache.whenNoRecords("SELECT 1 FROM mld_melding WHERE cnt_contract_key = " + cnt_key);
  params.cnt_key = (cnt_key != -1 ? cnt_key : null);
}
else if (full)
{
  var sName_key                  = getFQParamInt("sName_key", -1); // Melder
  params.caller_key              = (sName_key != -1 ? sName_key : null);
}
else
{  // Alleen als mldnum en opdrnum niet opgegeven is, zijn de resterende parameters van belang!
  var mldstatus_arr              = getFQParamIntArray("mldstatusmulti", [-1]); // Meldingstatus
  var opdrstatus_arr             = getFQParamIntArray("opdrstatusmulti", [-1]); // Opdrachtstatus
  var sName_key                  = getFQParamInt("sName_key", -1); // Melder
  var sComp_key                  = getFQParamInt("sComp_key", -1); // Bedrijf
  var sDept_key                  = getFQParamInt("sDept_key", -1); // Organisatie
  if (sDept_key == -1) // Indien geen organisatie (afdeling) is meegegeven dan wellicht wel cluster (alleen hoofdafdelingen)
    sDept_key                    = getFQParamInt("sDeptH_key", -1); // Bussiness Unit (Cluster/Hoofdafdeling)
  var reg_key_arr                = getFQParamKeyArray("regiokey", []); // Regio
  var dist_key_arr               = getFQParamKeyArray("districtkey", []); // District
  var loc_key_arr                = getFQParamKeyArray("locatiekey", []); // Locatie
  var bld_key_arr                = getFQParamKeyArray("gebouwkey", []); // Gebouw
  var flr_key_arr                = getFQParamKeyArray("verdiepingkey", []); // Verdieping
  var room_key_arr               = getFQParamKeyArray("ruimtekey",    []); // ruimtes
  var mld_ins_discipline_key_arr = getFQParamKeyArray("mld_ins_discipline", []); // MLD Behandelteam
  var behandel_key_arr           = getFQParamKeyArray("sBehandel_key", []); // Behandelaar
  var behandel2_key_arr          = getFQParamKeyArray("sBehandel2_key", []); // Behandelaar2
  var disc_key_arr               = getFQParamKeyArray("discmulti", []); // Productgroep
  var meldinggrp_key             = getFQParamInt("meldinggrp_key", -1); // Meldinggroep
  var behandelgrp_key            = getFQParamInt("behandelgrp_key", -1); // MLD Disc Params Behandelgroep
  var stdm_key_arr               = getFQParamKeyArray("sm", []); // Melding (Stdmelding)
  var kpgrp_key_arr              = getFQParamKeyArray("kpgrp_key", []); // Kostenplaatsgroep.
  var kp_key_arr                 = getFQParamKeyArray("kp", []); // Kostenplaats
  var referencetype              = getFQParam("referencetype", null); // Referentie type ('B', 'X', 'C', 'F', 'M', 'O' of 'R')
  var tag_key_arr                = getFQParamKeyArray("tag_key", []);  // Mijlpalen

  var handler                    = getFQParamInt("handler", -1); // Uitvoerende
  var uitvopdr_key               = getFQParamInt("uitvopdr_key", -1); // Uitvoerende opdracht
  var contact_key                = getFQParamInt("sContact_key", -1); // Contactpersoon
  var opdrtype_key               = getFQParamInt("opdrtype", -1); // Opdrachttype
  var chkSearchOR                = getFQParamInt("chkSearchOR", 0) == 1; // boolean zoeken in tekst met OR
  var searchtekst                = getFQParam("searchtekst", ""); // Zoektekst
  var omschr                     = getFQParam("omschr", ""); // Omschrijving
  var disc_key                   = getFQParamInt("insdisc", -1); // Objectdiscipline
  var insgroup_key               = getFQParamInt("inssrtgroup", -1); // Objectgroep
  var objsrt_key_arr             = getFQParamKeyArray("inssrtdeelmulti", []); // Objectsoort
  var objectoms                  = getFQParam("objectoms", null); // Object omschrijving
  var groepering_key             = getFQParamInt("groupby", -1); // Groepering
  var meldbron_key               = getFQParamInt("meldbronkey", -1); // Meldbron
  var ingevoerd                  = getFQParam("ingevoerd", -1); // ingevoerd door: "fe", "fo" of -1 voor beide
  var verantw_key                = getFQParamInt("verantw", -1); // Gebouw verantwoordelijke
  var bosort                     = getFQParamInt("bosort", (fronto ? 1 : S("mld_bo_sort_descending")));
  var vervolgmld                 = getFQParamInt("vervolgmld", -1);
  var completed                  = getFQParamInt("completed", -1);
  var priority_arr               = getFQParamKeyArray("priority", [-1]);

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

  var datefrom                   = getFQParamDate("date_from", null); // Periode van
  var dateto                     = getFQParamDate("date_to", null); // Perdiode tot
  var enddatefrom                = getFQParamDate("enddate_from", null); // Periode van
  var enddateto                  = getFQParamDate("enddate_to", null); // Perdiode tot

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

  var offertes                   = getFQParamInt("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_arr                = reg_key_arr;
  params.dist_key_arr               = dist_key_arr;
  params.loc_key_arr                = loc_key_arr;
  params.bld_key_arr                = bld_key_arr;
  params.flr_key_arr                = flr_key_arr;
  params.room_key_arr               = room_key_arr;
  params.mld_ins_discipline_key_arr = mld_ins_discipline_key_arr;
  params.behandel_key_arr           = behandel_key_arr;
  params.behandel2_key_arr          = behandel2_key_arr;
  params.disc_key_arr               = disc_key_arr;
  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;
  params.kpgrp_key_arr              = kpgrp_key_arr;
  params.kp_key_arr                 = kp_key_arr;
  params.tag_key_arr                = tag_key_arr;
  params.referencetype              = (referencetype != "-1" ? referencetype : null);
  params.handler_key                = (handler != -1 ? handler : null);
  params.uitvopdr_key               = (uitvopdr_key != -1 ? uitvopdr_key : null);
  params.contact_key                = (contact_key != -1 ? contact_key : null);
  params.opdrtype_key               = (opdrtype_key != -1 ? opdrtype_key : null);
  params.chkSearchOR                = chkSearchOR;
  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_arr             = objsrt_key_arr;
  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;
  // BO/FE-vinkje (=on of niks): standaard wil je alles zien, dus standaard aangevinkt en bij niet-existent ook.
  params.actiecodeBO                = getFQParam("actiecodeBO", (getFQParamInt("has_actiecodeBO", 0) == 1 ? "off" :"on")) == "on";
  params.actiecodeFE                = getFQParam("actiecodeFE", (getFQParamInt("has_actiecodeFE", 0) == 1 ? "off" :"on")) == "on";
  // Attentie-vinkje: indien gezet dan wordt het resultaat BEPERKT tot alles met attentie
  // Dus bij uitgevinkt of niet-existent dan wordt de parameter false en gaat er dus niet beperkt worden
  params.actiecodeATT               = (getFQParamInt("has_actiecodeATT", 0) == 1) && (getFQParam("actiecodeATT", "off") == "on");
  params.datefrom                   = datefrom;
  params.dateto                     = dateto;
  params.enddatefrom                = enddatefrom;
  params.enddateto                  = enddateto;
  params.srt_tracking               = getFQParamArray("srt_tracking", null);
  params.prs_tracking               = getFQParamInt("prs_tracking", null);
  params.actiondatefrom             = getFQParamDate("actiondate_from", null);
  params.actiondateto               = getFQParamDate("actiondate_to", null);
  params.deel_key                   = (deel_key != -1 ? deel_key : null);
  params.deelsrtcont_key            = (deelsrtcont_key != -1 ? deelsrtcont_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);
  params.vervolgmld                 = (vervolgmld != -1 ? vervolgmld : null);
  params.completed                  = (completed != -1 ? completed : null);
  params.priority_arr               = priority_arr;

  params.mldgroup_key               = getFQParamInt("mldgroup_key", -1);

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

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

  // ** de velden van de form zijn nu allemaal bekend **
  // ** nu volgt de verwerking
  // Fast check to see if we have anything to do with FO-BO handling (doorzetten)
  sql= "SELECT 1 FROM "
     + "(SELECT 1 FROM mld_disc_params dp, mld_discipline d "
     + "WHERE d.ins_discipline_key = dp.mld_ins_discipline_key AND mld_disc_params_directklaar>0 and d.ins_discipline_verwijder IS NULL "
     + "UNION ALL "
     + "SELECT 1 FROM mld_stdmelding "
     + "WHERE mld_stdmelding_directklaar>0 AND mld_stdmelding_verwijder IS NULL) "
     + "WHERE ROWNUM = 1";
  oRs = Oracle.Execute(sql);
  var anyfobodiscs = !oRs.eof;
  oRs.close();
  // 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..)
  // 0=Pending (@frontoffice), 1=Afgewezen, 2=Ingevoerd, 4=Geaccepteerd (@backoffice), 5=Afgemeld, 6=Verwerkt, 7=Uitgegeven.
  var status0 = (frontend && st_mldBusy) || (fronto && st_mldSelf) || (backo && st_mldBusy);
  var status1 = st_mldRej;
  var status2 = (frontend && st_mldNew)  || (fronto && st_mldBusy && anyfobodiscs) || (fronto && st_mldSelf && !anyfobodiscs) || (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 = (frontend && st_mldBusy) || (fronto && st_mldUitg) || (backo && st_mldUitg);
  var status99 = (frontend && st_mldBusy) || (fronto && st_mldBusy) || (backo && st_mldNew);   // denk ik
}

params.mldstpen = status0;
params.mldstrej = status1;
params.mldstnew = status2;
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 (searchmode == "bord" || 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 (searchmode == "bord") {
      params.kaarten = true;
      mld_bord(autfunction, params);
    } else 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)
  //- EXTORD (opdrachten van externe bedrijven, waar ik contactpersoon ben, afmelden/binnen scope)
  //- 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

  // Er zijn geen intern/extern vinkjes aanwezig. Dan zowel interne als ezterne tonen.
  params.internuit = true;
  params.externuit = true;
  params.flags = {}; // DJIN#37690 temporarily until opdr flag-filters are implemented in mld screens

  // Sinds VLKC#71073
  params.startdatefrom = params.datefrom;
  params.startdateto = params.dateto;



  opdr_list ( params );
}
%>
<% ASPPAGE_END(); %>
