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

     File:               PRJ/rap_prj6_save.asp
     Description:
     Parameters:
     Note:
*/ %>

<%
var JSON_Result = true;
%>

<!--#include file="../Shared/common.inc"-->
<!--#include file="../Shared/WPFunctions.inc"-->
<!--#include file="../Shared/json2.js" -->

<%
protectRequest.validateToken();
/***** Get webform parameters *****/
var actie = getFParam("actie");
var scenario_key = getFParamInt("scenario_key");
/***** End get webform parameters *****/


function emptyBuffer()
{
// ==========================
// Actie: emptybuffer
// ==========================
  sql = "DELETE FROM prj_selectie "
      + " WHERE prj_scenario_key = " + scenario_key
      + "   AND prs_perslid_key = " + user_key;
  Oracle.Execute(sql);
}

function doMove()
{
// ==========================
// Actie Verplaatsen persoon of werkplek
// ==========================

  var selKey     = getFParamInt("selkey");         // PRJ_SELECTIE_KEY
  var tablekey   = getFParamInt("tablekey");       // PRJ_SELECTIE_TABLE_KEY
  var tablename  = getFParam("tablename");         // PRJ_SELECTIE_TABELNAAM of hard
                                                   // 'PRJ_WERKPLEK' als werkplek gedragged wordt
  var room_key   = getFParamInt("room_key");       // PRJ_RUIMTE_KEY
  var wpKey      = getFParamInt("wpKey", "NULL");  // evt exact gedropt op voorkeur werkplek
  var droppwpKey = getFParamInt("pwpKey", "NULL"); // evt exact gedropt op voorkeur perslidwerkplek
                                                   // Daar zoeken we dan (als voorkeur) de werkplek bij

  if (droppwpKey != "NULL") // Gedropt op een persoon. Zoek de werkplek van die persoon
  {
    sql = "SELECT prj_werkplek_key prj_w"
        + "  FROM prj_perslidwerkplek"
        + " WHERE prj_perslidwerkplek_key = " + droppwpKey
    oRs = Oracle.Execute(sql);
    if (!oRs.eof)
      wpKey = oRs("prj_werkplek_key");
  }
  if (tablename == "PRS_PERSLID") // Losse persoon
  {
    sql = "BEGIN prj.prj_move_perslid ("+tablekey+","+(room_key>0?room_key:"NULL")+","+wpKey+"); END;";
  }
  else if (tablename == "PRS_AFDELING") // Losse afdeling
    NOT_SUPPORTED_YET;
  else if (tablename == "PRJ_PERSLIDWERKPLEK")
  {
    sql = "BEGIN prj.prj_move_perslidwerkplek ("+tablekey+","+(room_key>0?room_key:"NULL")+","+wpKey+"); END;";
  }
  else if (tablename == "PRJ_WERKPLEK") // Hele werkplek met alles
  {
    var dwgX = getFParam("dwgX");
    var dwgY = getFParam("dwgY");
    sql = "UPDATE PRJ_WERKPLEK "
        + "   SET PRJ_WERKPLEK_DWGX = " + dwgX + ","
        + "       PRJ_WERKPLEK_DWGY = " + dwgY
        + " WHERE PRJ_WERKPLEK_KEY = " + tablekey
    Oracle.Execute(sql);
    sql = "BEGIN prj.prj_move_werkplek (" + tablekey + "," + room_key + "); END;";
  }
  try
  {
    Oracle.Execute(sql);
    sql = "DELETE FROM prj_selectie"
       + " WHERE prj_selectie_key = " + selKey
    if (tablename == 'PRJ_PERSLIDWERKPLEK') // Als gebruiker WERKPLEK had aangewezen dan
                                            // deze nu in buffer laten staan met --vrij--
        sql += " AND prj_selectie_tabelnaam = " + safe.quoted_sql(tablename);
    Oracle.Execute(sql);
  }
  catch(e1)
  {
    message = L("lcl_prj_move_failed")+" "+e1.description;
  }
}

function removeWP()
{
// ==========================
// Actie: verwijderen lege werkplek==>DELETE PRJ_WERKPLEK en DELETE PRJ_SELECTIE
// ==========================

  selKey = getFParamInt("selkey"); // PRS_SELECTIE_KEY
  wpKey  = getFParamInt("wpkey");  // PRJ_WERKPLEK_KEY
  try
  {
    sql = "DELETE FROM PRJ_WERKPLEK "
        + " WHERE PRJ_WERKPLEK_KEY = " + wpKey
        + "   AND PRS_WERKPLEK_KEY IS NULL"; // Dan mag hij wel echt helemaal weg
    Oracle.Execute(sql);
    sql = "UPDATE prj_werkplek SET prj_werkplek_verwijder = SYSDATE"
        + " WHERE prj_werkplek_key = " + wpKey;
    Oracle.Execute(sql);
    sql = "DELETE FROM prj_selectie WHERE prj_selectie_key = " + selKey;
    Oracle.Execute(sql);
  }
  catch(e1)
  {
    message = L("lcl_prj_delete_failed")+" "+e1.description;
  }
}

function detachWP()
{
// ==========================
// Actie: vrijgeven werkplek (PRJ_PERSLIDWERKPLEK verwijderen)
//
// A) In PRJ_SELECTIE zat een PRJ_WERPLEK record of
// B) In PRJ_SELECTIE zat een PRJ_PERSLIDWERPLEK record
//
// Het maakt niet uit of na ontkoppelen de werkplek leeg is
// omdat er toch een PRJ_SELECTIE(PRJ_WERKPLEK) record blijft/komt
//
// In alle gevallen: DELETE PRJ_PERSLIDWERKPLEK (of zet verwijderdatum)
// Als er een afdeling op zat doe niets (we doen niet aan losse afdelingen)
// Als er een persoon op zat voeg een PRJ_SELECTIE(PRS_PERSLID) toe voor losse PRS_PERSLID
// A==>Doe verder niets
// B==>voeg een PRJ_SELECTIE(PRJ_WERKPLEK) toe voor de losse werkplek
// ==========================

  selKey    = getFParamInt("selkey");         // PRS_SELECTIE_KEY
  prjWPkey  = getFParamInt("prjWPkey");       // PRJ_PERSLIDWERKPLEK_KEY
  tablename = getFParam("tablename");         // PRJ_WERKPLEK of PRJ_PERSLIDWERKPLEK
  prskey    = getFParamInt("prskey", "null"); // PRS_PERSLID_KEY
  wpKey     = getFParamInt("wpkey");          // PRJ_WERKPLEK_KEY
  try
  {
    // Als hij geen corresponderende PRS_PERSLIDWERKPLEK had  mag hij wel echt helemaal weg
    sql = "DELETE FROM PRJ_PERSLIDWERKPLEK "
        + " WHERE PRJ_PERSLIDWERKPLEK_KEY = " + prjWPkey
        + "   AND PRS_PERSLIDWERKPLEK_KEY IS NULL";
    Oracle.Execute(sql);

    // Bovenstaande is mogelijk gelukt. Volgende gewoon altijd uitvoeren
    sql = "UPDATE prj_perslidwerkplek "
        + "   SET prj_perslidwerkplek_verwijder = SYSDATE"
        + " WHERE prj_perslidwerkplek_key = " + prjWPkey;
    Oracle.Execute(sql);

    if (S("prs_werkplek_implicit") == 0)
    {
      if (prskey != "null")
          AddToSelectionBuffer("PRS_PERSLID", prskey); // Losse persoon toevoegen
      if (tablename == 'PRJ_PERSLIDWERKPLEK')
      {
        sql = "DELETE FROM prj_selectie "
            + " WHERE prj_selectie_key = " + selKey; // Die is niet meer geldig laten we staan
        Oracle.Execute(sql);
        AddToSelectionBuffer("PRJ_WERKPLEK", wpKey); // Losse werkplek toevoegen
      }
    }
    else // implicit: gewoon alles opruimen
    {
      sql = "DELETE FROM prj_selectie "
          + " WHERE prj_selectie_key = " + selKey; // Die is niet meer geldig
      Oracle.Execute(sql);
      sql = "UPDATE prj_werkplek "
          + "   SET prj_werkplek_verwijder=SYSDATE"
          + " WHERE prj_werkplek_key = " + wpKey;
      Oracle.Execute(sql);
    }
  }
  catch(e1)
  {
    message = L("lcl_prj_release_failed")+" "+e1.description;
  }
}

// Voeg iets toe aan PRJ_SELECTIE of (als het er was) update de tijd
function AddToSelectionBuffer(prj_selectie_tabelnaam, prj_selectie_tabelkey)
{
  if (String(prj_selectie_tabelkey).match(/^W:/))
  {
    prj_selectie_tabelnaam = "PRJ_WERKPLEK";
    prj_selectie_tabelkey=prj_selectie_tabelkey.substring(2);
  }
  var sql = "SELECT * FROM prj_selectie "
          + " WHERE prj_scenario_key = " + scenario_key
          + "   AND prs_perslid_key = " + user_key
          + "   AND prj_selectie_tabelnaam = " + safe.quoted_sql(prj_selectie_tabelnaam)
          + "   AND prj_selectie_tabelkey = " + prj_selectie_tabelkey;
  if (Oracle.Execute(sql).eof)
    sql = "INSERT INTO prj_selectie"
        + " (prj_scenario_key, prs_perslid_key, prj_selectie_tabelnaam, prj_selectie_tabelkey)"
        + " VALUES (" + scenario_key + "," + user_key + ", " + safe.quoted_sql(prj_selectie_tabelnaam) + ", " + prj_selectie_tabelkey + ")"
  else // wel buffertime aanpassen: komtie in ieder geval bovenaan
    sql = "UPDATE prj_selectie"
        + "   SET prj_selectie_aanmaak = SYSDATE"
        + " WHERE prj_scenario_key = " + scenario_key
        + "   AND prs_perslid_key = " + user_key
        + "   AND prj_selectie_tabelnaam = " + safe.quoted_sql(prj_selectie_tabelnaam)
        + "   AND prj_selectie_tabelkey = " + prj_selectie_tabelkey;
  Oracle.Execute(sql)
}

function fillBuffer()
{
    var highlight = getFParamIntArray("highlight", []); // Comma-separated room_key_list

    if (highlight.length > 0)
    {
      var sql = "SELECT PRJ_WERKPLEK_KEY"
              + "  FROM PRJ_WERKPLEK prj_w,"
              + "       prj_ruimte prj_r"
              + " WHERE prj_werkplek_verwijder IS NULL"
              + "   AND prj_w.prj_ruimte_key = prj_r.prj_ruimte_key"
              + "   AND prj_r.prj_scenario_key = " + scenario_key
              + "   AND prj_w.prj_ruimte_key IN (" + highlight + ")";
      var oRs = Oracle.Execute(sql);
      while (!oRs.Eof)
      {
        AddToSelectionBuffer("PRJ_WERKPLEK", oRs("PRJ_WERKPLEK_KEY").value);
        oRs.MoveNext();
      }
    }
}

var message = "";
switch (actie)
{
  case 'emptybuffer': emptyBuffer();
       break;
  case 'domove': doMove();
       break;
  case 'detachwp': detachWP();
       break;
  case 'removewp': removeWP();
       break;
  case 'fillbuffer': fillBuffer();
       break;
}
var result = {message: message, success: true};
Response.Write(JSON.stringify(result));

%>
