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

    File:           ins_show_deel.asp
    Description:    show detailed information of an object
    Parameters:     urole, ins_key
    Context:        Ook eventueel vanuit ../mld_object.asp
    Note:

*/ %>

<!-- #include file="../Shared/common.inc" -->
<!-- #include file="../Shared/iface.inc" -->
<!-- #include file="./ins_flexkenmerk.inc" -->
<!-- #include file="../Shared/selector.inc" -->
<!-- #include file="../Shared/persoonselector.inc" -->
<!-- #include file="./ins.inc" -->

<%
FCLTHeader.Requires({ plugins: ["jQuery"],
                      js: ["../Shared/kenmerk_js.asp"] })

var urole = getQParamSafe("urole");
var ins_key = getQParamInt("ins_key");

var this_ins = ins.func_enabled_deel(ins_key);
if (this_ins.isSleCil)
  var autfunction = "WEB_SLEBOF";
else
  var autfunction = getQParam("pautfunction", (urole == "fo"? "WEB_INSFOF" : "WEB_INSMAN"));
  
var authparams = user.checkAutorisation(autfunction);
var sql, oRs;

sql = "SELECT d.ins_deel_omschrijving"      // identificatie
    + "     , s.ins_srtdeel_code"
    + "     , " + lcl.xsqla('s.ins_srtdeel_omschrijving', 's.ins_srtdeel_key')
    + "     , " + lcl.xsqla('g.ins_srtgroep_omschrijving', 'g.ins_srtgroep_key')
    + "     , " + lcl.xsqla('dis.ins_discipline_omschrijving', 'dis.ins_discipline_key')
    + "     , d.ins_deel_parent_key"
    + "     , d.ins_alg_ruimte_type"
    + "     , d.ins_alg_ruimte_key"
    + "     , d.ins_alg_locatie_key"
    + "     , d.ins_deel_aanmaak"
    + "     , d.ins_srtdeel_key"
    + "     , g.ins_srtgroep_key"
    + "     , dis.ins_discipline_key"
    + "     , d.ins_deel_x"
    + "     , ins_deel_y"
    + "     , ins_deel_dwgx" // future: +", ins_deel_z"
    + "     , d.ins_alg_ruimte_key_org"
    + "     , d.ins_alg_ruimte_type_org"
    + "     , d.ins_deel_vervaldatum"
    + "     , d.ins_deel_verwijder"
    + "     , d.ins_deel_state"
    + "     , d.ins_deel_t_uitvoertijd.tijdsduur uitvoertijd"
    + "     , d.ins_deel_t_uitvoertijd.eenheid uitvoertijd_eenheid"
    + "     , d.ins_deel_opmerking"         // omschrijving
    + "     , s.ins_srtdeel_image"
    + "     , d.prs_perslid_key_beh"
    + "  FROM ins_deel d"
    + "     , ins_srtdeel s"
    + "     , ins_srtgroep g"
    + "     , ins_tab_discipline dis"
    + " WHERE ins_deel_key = " + ins_key
    + "   AND d.ins_srtdeel_key = s.ins_srtdeel_key"
    + "   AND s.ins_srtgroep_key = g.ins_srtgroep_key"
    + "   AND g.ins_discipline_key = dis.ins_discipline_key";
oRs = Oracle.Execute(sql);

var ins_deleted         = oRs("ins_deel_verwijder").Value != null;
var desc                = oRs("ins_deel_omschrijving").Value;
var opmerk              = oRs("ins_deel_opmerking").Value;
var srtcode             = oRs("ins_srtdeel_code").Value;
var sort                = oRs("ins_srtdeel_omschrijving").Value;
var group               = oRs("ins_srtgroep_omschrijving").Value;
var disc                = oRs("ins_discipline_omschrijving").Value;
var parent_key          = oRs("ins_deel_parent_key").Value;
var bind                = oRs("ins_alg_ruimte_type").Value;
var bind_key            = oRs("ins_alg_ruimte_key").Value;
var o_loc               = parseInt(oRs("ins_alg_locatie_key").Value);
var aanmaak             = new Date(oRs("ins_deel_aanmaak").Value);
var vervaldatum         = oRs('ins_deel_vervaldatum').Value;
var srtdeel_key         = oRs("ins_srtdeel_key").Value;
var srtgroep_key        = oRs("ins_srtgroep_key").Value;
var disc_key            = oRs("ins_discipline_key").Value;
var getekend            = oRs('ins_deel_dwgx').Value != null;
var xcoord              = oRs('ins_deel_x').Value;
var ycoord              = oRs('ins_deel_y').Value;
var state               = oRs('ins_deel_state').Value;
var uitvoertijd         = oRs('uitvoertijd').Value;
var uitvoertijd_eenheid = oRs('uitvoertijd_eenheid').Value || 'D';
var srtdeel_image       = oRs('ins_srtdeel_image').Value;
var perslid_key_beh     = oRs('prs_perslid_key_beh').Value;

var bind_lo = null;
var bind_key_lo = null;
var lent_out = false;
if (oRs('ins_alg_ruimte_key_org').Value != null)
{
  // Object is currently lent out from:
  bind_lo     = oRs('ins_alg_ruimte_type_org').Value;
  bind_key_lo = oRs('ins_alg_ruimte_key_org').Value;
  lent_out    = true;
}
oRs.close();

// We geven aan waar het object bij hoort
// Niet voor de lol, maar als label voor het specifieke ding
var binding_text = 'unknown';
var moreinfo = "";
if (parent_key != null)
{
  binding_text = L("lcl_ins_parentobject");
  moreinfo = "appl/ins/ins_deel.asp?ins_key=" + parent_key + "&urole=" + urole;
  bind = "I";  // pseudotype
}
else
  __Log("bind = " + bind);

switch (bind)
{
  case 'R':
    binding_text = L("lcl_obj_bind_r");
    moreinfo = "appl/alg/alg_ruimte.asp?key=" + bind_key + "&urole=" + urole;
    break;
  case 'T':
    binding_text = L("lcl_obj_bind_t");
    moreinfo = "appl/alg/alg_terreinsector.asp?ter_key=" + bind_key + "&urole=" + urole;
    break;
  case 'W':
    binding_text = L("lcl_obj_bind_w");
    moreinfo = "appl/alg/alg_wp.asp?key=" + bind_key + "&urole=" + urole;
    break;
  case 'P':
    binding_text = L("lcl_obj_bind_p");
    moreinfo = "appl/fac/fac_user.asp?prs_key=" + bind_key;
    break;
  case 'A':
    binding_text = L("lcl_obj_bind_a");
    moreinfo = "appl/prs/prs_afdeling.asp?key=" + bind_key + "&urole=" + urole;
    break;
  case 'C':
    binding_text = L("lcl_obj_bind_c");
    moreinfo = "appl/prs/prs_contactpersoon.asp?key=" + bind_key + "&urole=" + urole;
    break;
}
// Dat was het type / label, nu de instance
var binding_item = ins.getBindingItemString(bind, bind_key, parent_key);

// Melding aanmaakbaar? Alleen meldingen die enigzins beperkt zijn tot onze object(soort/groep)
var sql = "SELECT COUNT(*) aantal"
        + "  FROM mld_stdmelding msm,"
        + "       ins_tab_discipline itd,"
        + "       ins_srtdiscipline isd"
        + " WHERE msm.mld_ins_discipline_key = itd.ins_discipline_key"
        + "   AND mld_stdmelding_verwijder IS NULL"
        + " AND ((msm.mld_stdmelding_vervaldatum IS NULL) "
        + "      OR (msm.mld_stdmelding_vervaldatum > SYSDATE))"
        + "   AND EXISTS"
        + "         (SELECT fw.ins_discipline_key"
        + "            FROM fac_v_webgebruiker fw, fac_functie ff"
        + "           WHERE     msm.mld_ins_discipline_key = fw.ins_discipline_key"
        + "                 AND fw.prs_perslid_key = " + user_key
        + "                 AND fw.fac_functie_key = ff.fac_functie_key"
        + "                 AND ff.fac_functie_code IN ('WEB_MLDFOF')"// Backo mag geen meldingen aanmaken
        + "                 AND fw.fac_gebruiker_alg_level_write < 9)"// In theorie zouden we ook nog kunnen ALG-scopen...
        + "   AND itd.ins_srtdiscipline_key = isd.ins_srtdiscipline_key"
        + "   AND isd.ins_srtdiscipline_ins = 1"
        + "   AND (   msm.ins_srtinst_niveau = 'S' AND ins_srtinst_key = " + srtdeel_key
        + "        OR msm.ins_srtinst_niveau = 'G' AND ins_srtinst_key = " + srtgroep_key
        + "        OR msm.ins_srtinst_niveau = 'D' AND ins_srtinst_key = " + disc_key
        // + "        OR msm.ins_srtinst_niveau IS NULL" // is wel héél algemeen
        + "       )";

if (bind == "A")
  sql += "AND alg_org_obj_niveau < 9"; // Dat is toch wel het minste

var oRs = Oracle.Execute(sql);
var canMelding = (oRs("aantal").Value > 0);
oRs.Close();

// Deel toevoegen aan reserveerbare delen.
    var res_authparams = user.checkAutorisation("WEB_RESMSU", true);
    var res_deel_key = -1;
    if (res_authparams)
    {
      var binding = (bind_lo ? bind_lo : bind); // Gebonden aan uitlening gaat voor.
      if (binding == "R" || binding == "T")  // Alleen ruimtegebonden objecten mogen reserveerbaar zijn.
      {
        this_ins.hasRESMSU = true;
        // Is dit deel al reserveerbaar?
        var sql = "SELECT res_deel_key"
                + "  FROM res_deel"
                + " WHERE res_deel_verwijder IS NULL"
                + "   AND res_ins_deel_key = " + ins_key;
        var oRs = Oracle.Execute(sql);
        if (!oRs.eof)
          res_deel_key = oRs("res_deel_key").Value;
        oRs.Close();
      }
    }
%>

<html>
  <head>
<%  FCLTHeader.Generate(); %>
    <script type="text/javascript">
      function ins_print()
      {
         window.open('./ins_xml.asp?ins_key='+<%=ins_key%>);
      }
      function showHistory()
      {
        FcltMgr.openDetail("appl/ins/ins_history_search.asp?ins_key=<%=ins_key%>&urole=<%=urole%>", "<%=L("lcl_history")%>");
      }
      function ins_reserveerbaar()
      {
          FcltMgr.openDetail("appl/mgt/res_deel.asp?mode=edit&id=<%=res_deel_key%>&res_ins_deel_key=<%=ins_key%>", "<%=L("res_deel")%>");

      }
      function ins_change()
      {
        if (FcltMgr.startEdit(window))
          window.location.href = "ins_edit_deel.asp?ins_key=<%=ins_key%>&embedded=1&urole=<%=urole%>";
      }
      function ins_melding()
      {
        FcltMgr.openDetail("appl/mld/mld_melding.asp?urole=fo&ins_key=<%=ins_key%>", "<%=L("lcl_add")%>");
      }

      function ins_delete()
      {
        if (confirm(L("lcl_ins_del_txt_deel")))
        {
          var data = { key: <%=ins_key%>,
                       level: "D"
                     };
          <% protectRequest.dataToken("data"); %>
          $.post("ins_delete.asp",
                 data,
                 FcltCallbackClose,
                 "json");
        }
      }

      function ins_copy()
      {
        FcltMgr.openDetail("appl/ins/ins_deel.asp?urole=bo" + "&ins_key=<%=ins_key%>" + "&ins_copy=1",  L("lcl_ins_copy") + " " + L("lcl_shared_object").toLowerCase());
      }
    </script>
  </head>

  <body id="showbody">
<%  var buttons = [];
    this_ins.verbruiksmeter = false;
    this_ins.contracts = false;
    if (authparams.PRSwritelevel < 9 && urole == "bo") // Mag nog wel een keer naar ins.func_enabled_deel
    {                                                  // maar werd toch alleen hier gebruikt
      // Bepaal of het hier gaat om een verbruiksmeter. Dan alleen klokje button tonen
      sql = "SELECT MAX(ik.ins_kenmerk_meetwaarde) meetwaarde"
          + "  FROM ins_kenmerk ik"
          + "     , ins_kenmerkdeel ikd"
          + "     , ins_deel d"
          + " WHERE d.ins_deel_key = ikd.ins_deel_key"
          + "   AND ikd.ins_kenmerk_key = ik.ins_kenmerk_key"
          + "   AND ikd.ins_kenmerkdeel_verwijder IS NULL"
          + "   AND d.ins_deel_key = " + ins_key;
      oRs = Oracle.Execute(sql);
      this_ins.verbruiksmeter = oRs("meetwaarde").Value == 1;
    }
        
    var buttons =  [ ];
    if (this_ins.hasRESMSU)
      buttons.push({title: L("lcl_reserveerbaar"), action: "ins_reserveerbaar()", icon: "attach.png"});

    if (this_ins.canChange)
      buttons.push({title: L("lcl_change"), action: "ins_change()", icon: "wijzigen.png" });

    if (canMelding)
      buttons.push({title: L("lcl_do_amelding_hint"), action: "ins_melding()", icon: "doemelding.png" });

    // Alleen historie kunnen tonen als het een verbruiksmeter betreft.
    if (this_ins.verbruiksmeter)
      buttons.push({title: L("lcl_history"), action: "showHistory()", icon: "history.png" });

    if (this_ins.canCopy)
      buttons.push({ title: L("lcl_mld_copy"), icon: "copy.png", action: "ins_copy()" });

    if (this_ins.canDelete)
      buttons.push({title: L("lcl_delete"), action: "ins_delete()", icon: "delete.png"});
    
    buttons.push ({title: L("lcl_print"),  action: "ins_print()", icon: "print.png" });

    var headertitle = L("lcl_ins_frame_algemeen");
    if (this_ins.isSleCil)
    {
      var sletype = (srtgroep_key == S("sle_ins_srt_groep_key")? "S" : "C");
      if (sletype == "S")
        headertitle = L("lcl_sle_sleutel");
      else
        headertitle = L("lcl_sle_cilinder");
    }

    IFRAMER_HEADER(headertitle, ins_deleted?[]:buttons);
%>
    <div id="show">
<%    if (ins_deleted)
      {
%>      <div class="ins_deleted"><%=L("lcl_record_is_deleted")%></div><%
      }
%>
      <form name="u2">
<%      BLOCK_START("insIns", L("lcl_general_properties")); %>
        <tr>
          <td>
            <table>
<%            var params = { infoPointer: { Url: "appl/shared/status_info.asp?ins_key=" + ins_key + "&urole=" + urole,
                                            Title: L("lcl_status_details") + " " + desc
                                          }
                           }
              ROFIELDTR("flddeel", L("lcl_obj_identification"), desc, params);
              ROFIELDTR("fld", L("lcl_discipline"), disc);
              ROFIELDTR("fld", L("lcl_obj_group"), group);
              ROFIELDTR("fld", L("lcl_obj_sort"), sort + " (" + srtcode + ")");
              ROFIELDTR("fld", binding_text, binding_item, {infoPointer:{Url : moreinfo, Title: ""}});
              ROFIELDTR("fld", L("lcl_ins_opmerking"), opmerk, {suppressEmpty: true});
              if (false) {  // later
                // als het object technisch getekend zou kunnen zijn, geven we hier de status aan.
                // Een vriendelijke optie zou zijn om in geval van niet-geplaatst-zijn hier de optie toe te voegen
                // omdat direct alsnog te doen; wellicht zelfs ook voor VERplaatsen.
                  ROFIELDTR("fld", "", "TODO meer leuke info: reserveerbaar e.d.");
              } %>
            </table>
          </td>
          <td align="center">
<%          if (srtdeel_image)
            {
              var imageFile = S("ins_image_path") + srtdeel_image;
              var fso = new ActiveXObject("Scripting.FileSystemObject");
              if (fso.FileExists(Server.MapPath(imageFile)))
              { %>
                <img id="insphoto" src="<%=safe.htmlattr(imageFile)%>">
<%            }
            } %>
          </td>
        </tr>
<%      BLOCK_END();

        BLOCK_START("insGeo", L("lcl_ins_meta_data"));
        ROFIELDTR("flddatetime", L("lcl_last_action"), toDateTimeString(aanmaak));

        // Link naar de state_history
        var params = { infoPointer: { Url: "appl/ins/ins_state_history.asp?ins_key=" + ins_key,
                                      Title: L("lcl_status_details") + " " + desc
                                    },
                       suppressEmpty: true
                     }
        ROFIELDTR("fld", L("lcl_deel_state"), state, params);

        ROFIELDTR("fld", L("lcl_ins_vervaldatum"), toDateString(vervaldatum), {suppressEmpty: true});
        FCLTpersoonselector("personH", "sgins_manager",
                            {label: L("lcl_ins_manager"),
                             perslidKey: perslid_key_beh,
                             moreinfo: urole != 'fe',
                             suppressEmpty: true,
                             readonly: true});
      if (lent_out)
          ROFIELDTR("fld", "", L("lcl_obj_is_lent_out"));
        if (getekend)
        {
          var params = { infoPointer: { Url: "../cad/showroom.asp?rKey=" + bind_key + "&ins_key=" + ins_key,
                                        Title: L("lcl_fg_gotofgheader") + " " + desc,
                                        Modal: true
                                      }
                       }
          ROFIELDTR("fld", "", L("lcl_obj_isgetekend"), params);
        }
        else
          ROFIELDTR("fld", "", L("lcl_obj_nietgetekend"));
        if (!(bind == 'A'||bind == 'P') && xcoord && ycoord)
        {
          // alleen plaatsgebonden objecten met ingevulde x/y krijgen een geo-blokje
          ROFIELDTR("fldshort", L("lcl_obj_geoxcoord"), safe.jsfloat(xcoord)); // tonen met punt?
          ROFIELDTR("fldshort", L("lcl_obj_geoycoord"), safe.jsfloat(ycoord));
        }
        BLOCK_END();

        BLOCK_START("insRunTime", L("lcl_ins_additional_details"));
        if (uitvoertijd)
          uitvoertijd = uitvoertijd + " " + (uitvoertijd_eenheid == 'D'? L("lcl_mld_days") : L("lcl_mld_hours"))
        ROFIELDTR("fldshort", L("lcl_ins_uitvoertijd"), uitvoertijd, {suppressEmpty: true});
        BLOCK_END();

        // Note: levert op deze manier (soms?) ongeldige html op (tr zonder table)
        generateFlexKenmerkBlock({ urole: urole,
                                   ins_key: ins_key,
                                   srtdeelkey_array: srtdeel_key > 0? [srtdeel_key] : [],
                                   reado: true,
                                   flexcolumns: S("ins_flexcolumns")
                                 });
%>
      </form>
    </div>
  </body>
</html>
