<%@ LANGUAGE = JavaScript %>
<% /*
    $Revision$
    $Id$

    File:           alg_delete.asp (formerly setAlgverwijder.asp)
    Description:    Verwijderen alg-object en deels PRS

    Parameters:     key (van het onroerend goed)
                    level: "D", "RE", "L", "G", "V", "R", "W" (werkplek) of "PW" (perslid_werkplek)
    Context:        Vanuit show-schermen en of vanuit overzichten
    Result:         JSON object
    Note:

*/
var JSON_Result = true;
%>
<!--#include file="../Shared/common.inc"-->
<!--#include file="alg.inc" -->
<%
protectRequest.validateToken();

var level = getFParam("level");
var dis_key_arr = getFParamIntArray("key");

var autfunction = {D : "WEB_ALGMAN",
                   RE: "WEB_ALGMAN",
                   L : "WEB_ALGMAN",
                   T : "WEB_TERMAN", // Met ALG* bepaal je wat je ziet (Read), met RUI* en TER* bepaal je wat je kunt wijzigen (Write).
                   G : "WEB_ALGMAN",
                   V : "WEB_ALGMAN",
                   R : "WEB_RUIMAN", // Met ALG* bepaal je wat je ziet (Read), met RUI* en TER* bepaal je wat je kunt wijzigen (Write).
                   W : "WEB_PRSBOF",
                   PW: "WEB_PRSBOF"}[level];

var authParams = user.checkAutorisation(autfunction);

if (level != "PW") // die kijkt uitsluitend naar PRSBOF
    var authparamsAlg = alg.checkAutorisation();

var tobedeleted = 0;
var ingesloten = [];
// Bepaal de opdrachten in de selectie die
// ook echt geaccepteerd kunnen of mogen worden.
for (var i = 0; i < dis_key_arr.length; i++)
{
  var canDelete = false;
  switch (level)
  {
    case "RE": canDelete = alg.canWriteRegio(dis_key_arr[i], authparamsAlg.mALGwritelevel);
               break;
    case "D":  canDelete = alg.canWriteDistrict(dis_key_arr[i], authparamsAlg.mALGwritelevel);
               break;
    case "L":  canDelete = alg.canWriteLocatie(dis_key_arr[i], authparamsAlg.mALGwritelevel);
               break;
    case "T":  var sql = "SELECT alg_locatie_key"
                       + "  FROM alg_v_aanwezigterreinsector"
                       + " WHERE alg_terreinsector_key = " + dis_key_arr[i];
               oRs = Oracle.Execute(sql);
               canDelete = alg.canWriteLocatie(oRs("alg_locatie_key").Value, authparamsAlg.mALGwritelevel);
               oRs.Close()
               break;
    case "G":  canDelete = alg.canWriteGebouw(dis_key_arr[i], authparamsAlg.mALGwritelevel);
               break;
    case "V":  canDelete = alg.canWriteVerdieping(dis_key_arr[i], authparamsAlg.mALGwritelevel);
               break;
    case "R":  canDelete = alg.canWriteRuimte(dis_key_arr[i], authparamsAlg.mALGwritelevel);
               break;
    case "W":  var sql = "SELECT alg_ruimte_key"
                       + "  FROM prs_v_werkplek_gegevens"
                       + " WHERE prs_werkplek_key = " + dis_key_arr[i];
               oRs = Oracle.Execute(sql);
               canDelete = alg.canWriteRuimte(oRs("alg_ruimte_key").Value, authparamsAlg.mALGwritelevel);
               oRs.Close()
               break;
    case "PW": var sql = "SELECT alg_ruimte_key"
                       + "  FROM prs_v_werkplek_gegevens w, prs_perslidwerkplek pw"
                       + " WHERE pw.prs_werkplek_key = w.prs_werkplek_key"
                       + "   AND prs_perslidwerkplek_key = " + dis_key_arr[i];
               oRs = Oracle.Execute(sql);
               canDelete = alg.func_enabled_ruimte(oRs("alg_ruimte_key").Value).canPRSBOFwrite;
               oRs.Close()
               break;
  }

  if (canDelete)
  {
    ingesloten.push(dis_key_arr[i]);
    tobedeleted++;
  }
}
user.auth_required_or_abort(tobedeleted > 0); // We klagen niet over enkele wel en enkele niet

var table = {D : "ALG_DISTRICT",
             RE: "ALG_REGIO",
             L : "ALG_LOCATIE",
             T : "ALG_TERREINSECTOR",
             G : "ALG_GEBOUW",
             V : "ALG_VERDIEPING",
             R : "ALG_RUIMTE",
             W : "PRS_WERKPLEK",
             PW: "PRS_PERSLIDWERKPLEK"}[level];

result = { success: true, deleted: true };
for (var i = 0; i < ingesloten.length; i++)
{
  // W en WP hebben geen verwijderveld (meer), die gaan echt weg.
  if (level == "W" || level == "PW")
  {
    // Een WP gooit via de cascade zijn bezetting mee weg.
    // Een bezetting verwijderen doet niets extra
    // Bij impliciet verwijderen van wp-bezetting dus ook de werkplek weggooien
    // die nu (per definitie) leeg wordt. Dit moet eerst, want straks weet
    // ik niet meer genoeg
    if (level == "PW" && S("prs_werkplek_implicit") == 1)
    {
      sql = "DELETE FROM prs_werkplek"
          + " WHERE prs_werkplek_key IN "
          + "     (SELECT prs_werkplek_key "
          + "        FROM prs_perslidwerkplek"
          + "        WHERE prs_perslidwerkplek_key IN (" + ingesloten[i] + "))"
      var err = Oracle.Execute(sql, true);
      if (err.friendlyMsg)
        abort_with_warning(err.friendlyMsg);
    }
    // En dit moet ongeacht impliciet of expliciet.
    // Alleen bij PW&implicit zal dit niets meer verwijderen vanwege de cascade hiervoor
    sql = "DELETE FROM " + table
        + " WHERE " + table + "_key IN (" + ingesloten[i] + ")";
  }
  else
  {
    sql = "UPDATE " + table
        + "   SET " + table + "_VERWIJDER = " + "SYSDATE"
        + " WHERE " + table + "_key IN (" + ingesloten[i] + ")";
  }
  var err = Oracle.Execute(sql, true);
  if (err.friendlyMsg)
    abort_with_warning(err.friendlyMsg);
}

Response.Write(JSON.stringify(result));
%><% ASPPAGE_END(); %>
