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


     File:               cnt_edit_scope_save.asp
     Description:        SUBMIT-form
                         cnt_srtcontract_type                Scope
                         [1] Onderhoud/Maintenance           Objecten
                         [2] Huur/Rental                     Onroerend goed (ruimten/terreinen)
                         [3] Ondersteuning/Support           Plaats (locatie, gebouw, verdieping, ruimte, terrein) en/of objecten
                         [4] Algemeen/Generic                Geen
                         [5] Leverancier/Supplier            Plaats (locatie, gebouw, verdieping, ruimte, terrein)
                         [6] Mantel/Master                   Geen
     Parameters:


     Context:
     Note:
*/ %>

<!-- #include file="../Shared/common.inc" -->
<!-- #include file="../shared/save2db.inc" -->

<%
protectRequest.validateToken();
FCLTHeader.Requires({ plugins:["jQuery"] })

var autfunction = "WEB_CNTMAN";
var authparams = user.checkAutorisation(autfunction);

var cnt_key = getFParamInt("cnt_key");
var contract_object_key_str = ""
var contract_plaats_key_str = "";
var object_key;
var plaats_key;
var comma = '';

// Hier zelf uitzoeken welke scope selectoren opgeslagen moeten worden afhankelijk van contracttype
sql = "SELECT cdp.cnt_srtcontract_type"
    + "  FROM cnt_contract c"
    + "     , cnt_disc_params cdp"
    + " WHERE c.ins_discipline_key = cdp.cnt_ins_discipline_key"
    + "   AND c.cnt_contract_key = " + cnt_key;
oRs = Oracle.Execute(sql);
var cnt_srtcontract_type = oRs("cnt_srtcontract_type").value;

// Bijwerken object scope (INS)
if (cnt_srtcontract_type == 1)
{
  var cnt_obj = getFParamInt('objcnt');

  // Verwijderen van de items die niet geselecteerd waren
  // Geselecteerde items hoeven niet verwijderd te worden (NOT IN(...))
  for (i = 1; i <= cnt_obj; i++)
  {
    object_key = getFParamInt('k' + i, -2);
    // object_key is -2 voor verwijderde items, -1 voor nieuwe items en een key voor alle andere gevallen
    if (object_key > 0)
    {
      contract_object_key_str  += comma + object_key;
      comma = ',';
    }
  }

  sql = "DELETE FROM cnt_contract_object"
      + " WHERE cnt_contract_key = " + cnt_key
      + "   AND cnt_contract_object_key NOT IN (" + (comma == ""? "-2" : contract_object_key_str) + ")";
  Oracle.Execute(sql);  // Eerst de DELETE

  // Toevoegen van de items die toegevoegd moeten worden
  for (i = 1; i <= cnt_obj; i++)
  {
    object_key = getFParamInt('k' + i, -2);
    // object_key is -2 voor verwijderde items, -1 voor nieuwe items en een key voor alle andere gevallen
    if (object_key == -1)
    {
      sql = "INSERT INTO cnt_contract_object (cnt_contract_key, cnt_ins_deel_key, cnt_ins_srtdeel_key) "
          + " SELECT " + cnt_key
          + "," + getFParamInt('kd' + i)
          + ", ins_srtdeel_key"
          + " FROM ins_deel"
          + " WHERE ins_deel_key = " + getFParamInt('kd' + i);
      Oracle.Execute(sql); // Dan de INSERT
    }
  }
}

// Bijwerken objectsoort scope (INS)
if (cnt_srtcontract_type == 3)
{
  comma = '';
  var cnt_os = getFParamInt('oscnt');

  // Verwijderen van de items die niet geselecteerd waren
  // Geselecteerde items hoeven niet verwijderd te worden (NOT IN(...))
  contract_object_key_str = "";
  for (i = 1; i <= cnt_os; i++)
  {
    object_key = getFParamInt('sk' + i, -2);
    // object_key is -2 voor verwijderde items, -1 voor nieuwe items en een key voor alle andere gevallen
    if (object_key > 0)
    {
      contract_object_key_str  += comma + object_key;
      comma = ',';
    }
  }

  sql = "DELETE FROM cnt_contract_object"
      + " WHERE cnt_contract_key = " + cnt_key
      + "   AND cnt_contract_object_key NOT IN (" + (comma == ""? "-2" : contract_object_key_str) + ")";
  Oracle.Execute(sql);  // Eerst de DELETE

  // Toevoegen van de items die toegevoegd moeten worden
  for (i = 1; i <= cnt_os; i++)
  {
    object_key = getFParamInt('sk' + i, -2);
    // object_key is -2 voor verwijderde items, -1 voor nieuwe items en een key voor alle andere gevallen
    if (object_key == -1)
    {
     sql1 = "INSERT INTO cnt_contract_object (cnt_contract_key, cnt_ins_deel_key, cnt_ins_srtdeel_key)"
           + " VALUES (" + cnt_key
           + ", NULL ," + getFParamInt('skd' + i) + ")";
      Oracle.Execute(sql1); // Dan de INSERT
    }
  }
}

// Bijwerken locatie/gebouw scope (ALG)
if (cnt_srtcontract_type == 3 || cnt_srtcontract_type == 5)
{
  comma = '';
  var cnt_lb = getFParamInt('loccnt'); // Aantal scope's voor locatie/gebouw

  // Verwijderen van de items die niet geselecteerd waren
  // Geselecteerde items hoeven niet verwijderd te worden (NOT IN(...))
  for (i = 1; i <= cnt_lb; i++)
  {
    plaats_key = getFParamInt('ak' + i, -2);
    // plaats_key is -2 voor verwijderde items, -1 voor nieuwe items en een key voor alle andere gevallen
    if (plaats_key > 0)
    {
      // so a non-removed previously existing row
      contract_plaats_key_str  += comma + plaats_key;
      comma = ',';
    }
  }

  sql = "DELETE FROM cnt_contract_plaats"
      + " WHERE cnt_contract_key = " + cnt_key
      + "   AND cnt_contract_plaats_key NOT IN (" + (comma == ""? "-2" : contract_plaats_key_str) + ")";
  Oracle.Execute(sql);  // Eerst de DELETE

  // Toevoegen van de items die toegevoegd moeten worden
  for (i = 1; i <= cnt_lb; i++)
  {
    plaats_key = getFParamInt('ak' + i, -2);
    // plaats_key is -2 voor verwijderde items, -1 voor nieuwe items en een key voor alle andere gevallen
    if (plaats_key > -2)
    { // cnt_contract_plaats_gewicht is van datatype NUMBER(11,2), dus twee decimalen.
      gewicht = Math.round(getFParamFloat('akn' + i) * 100) / 100; // 100 = Math.pow(10, 2) waarin 2 het aantal decimalen
      if (plaats_key == -1)
      {
        sql1 = "INSERT INTO cnt_contract_plaats (cnt_contract_key, cnt_alg_plaats_code, cnt_alg_plaats_key, cnt_contract_plaats_gewicht)"
             + " VALUES ( " + cnt_key
             + ", " + safe.quoted_sql(getFParam('akt' + i))
             + ", " + getFParamInt('akd' + i);
        if (!isNaN(gewicht))
          sql1 += ", " + gewicht + ")";
        else
          sql1 += ", null)";
        Oracle.Execute(sql1); // Dan de INSERT
      }
      else if (!isNaN(plaats_key))
      {
        sql1 = "UPDATE cnt_contract_plaats "
             + "   SET cnt_contract_plaats_gewicht = " + (!isNaN(gewicht)? gewicht : "NULL")
             + " WHERE cnt_contract_plaats_key = " + plaats_key;

        Oracle.Execute(sql1);   // Dan de UPDATE
      }
    }
  }
  if (S("cnt_scopeverdeling")==1) // Ze vullen bij gewicht de bedragen in. Optellen voor het totaal
  {
    var sql = "SELECT SUM(cnt_contract_plaats_gewicht) newsum"
            + "   FROM cnt_contract_plaats ccp"
            + "  WHERE ccp.cnt_contract_key = " + cnt_key;
    var oRs = Oracle.Execute(sql);
    var newsum = oRs("newsum").Value || 0;
    oRs.Close();
    var fields =  [{ dbs: "cnt_contract_kosten", typ: "float", val: newsum, track: L("lcl_cnt_contract_sum") }];
    var cntUpd = buildTrackingUpdate("cnt_contract", "cnt_contract_key = " + cnt_key, fields);
    Oracle.Execute(cntUpd.sql);
    if (cntUpd.trackarray.length)
        shared.trackaction("CNTUPD", cnt_key, L("lcl_cnt_is_cntupd") + "\n" + cntUpd.trackarray.join("\n"));
  }
}
%>

<html>
  <head>
    <%  FCLTHeader.Generate() %>
    <script>
        $(document).ready(function ()
                          {
                            FcltMgr.closeDetail(window, { cnt_key: <%=cnt_key%> });
                          } );
    </script>
  </head>
  <body>
  </body>
</html>
