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

    File:               mld_opdr.asp
    Description:        Muteerscherm voor opdrachten
                        dit is de grote 'wrapper' voor de diverse andere schermen
    Parameters:         urole
                        opdr_key bij bewerken
                           mld_key bij toevoegen OF
                           cnt_key bij toevoegen
    Context:
    Note:
    TODO: In verband met afmelden van de opdracht de verwerking met parameter close=1 of opdr_copy=1 vanaf hier goed afwerken
*/ %>

<!-- #include file="../Shared/common.inc" -->
<!-- #include file="../Shared/iface.inc" -->
<!-- #include file="./mld.inc" -->
<!-- #include file="../fin/fin_verkoopfactuur.inc" -->
<%
FCLTHeader.Requires({ plugins:["suggest","jQuery"],
                      js: ["jquery-ui.js"]
                    })

// AUTORISATIEPARAMETERS
var opdr_key = getQParamInt("opdr_key", -1);
if (opdr_key > 0 )
{
    var authparamsORDBOF = user.checkAutorisation("WEB_ORDBOF", true);
    var p_urole = getQParamSafe("urole", (authparamsORDBOF&&(authparamsORDBOF.PRSwritelevel < 9 || authparamsORDBOF.ALGwritelevel < 9))? "bo" : "fe");
}
else
    var p_urole = getQParamSafe("urole");
var finish = (getQParamInt("finish", 0) == 1);

// de melding waar het over gaat, kan leeg zijn voor nieuwe, maar dat mag niet met bo of mi
// MGE: Er is altijd een melding key of opdracht key meegegeven voor het aanmaken/wijzigen van een opdracht. De cnt_key is voor future use.
//      Koppelen van contract gebeurt in details van een opdracht en een contract key wordt volgens mij nooit meegegeven.
//      Mogelijke aanroepen:
//      1) Huidige opdracht details tonen: opdracht key wordt meegegeven.
//      2) Nieuwe opdracht bij melding aanmaken: melding key wordt meegegeven.
//      3) Kopiëren opdracht: opdracht key wordt meegegeven en copy=1.
var copy = (getQParamInt("opdr_copy", 0) == 1)
if (opdr_key == -1)
{ // 2) Nieuwe opdracht bij melding aanmaken: melding key wordt meegegeven.
  var mld_key = getQParamInt("mld_key", -1);
  var cnt_key = getQParamInt("cnt_key", -1);
  if (mld_key == -1 && opdr_key == -1 && cnt_key == -1) Response.End;
}
else if (copy)
{ // 3) Kopiëren opdracht: opdracht key wordt meegegeven en copy = 1. Melding key bepalen.
  var sql = "SELECT o.mld_melding_key"
          + " FROM mld_opdr o"
          + " WHERE o.mld_opdr_key = " + opdr_key;
  var oRs = Oracle.Execute(sql);
  var mld_key = oRs("mld_melding_key").value;
  var cnt_key = -1;
}
// else 1) Huidige opdracht details tonen: opdracht key wordt meegegeven.

var statusafgemeld = false;
if (mld_key > 0) // Ofwel (opdr_key == -1 || copy)
{ // Nieuwe melding (2) of kopiëren opdracht (3)
  // De mld_key is nu bekend. Dan weet ik ook de discipline en kan ik kijken of ik hiervoor opdrachten mag aanmaken.
  var mld_info = mld.mld_melding_info(mld_key);
  var this_opdr = mld.func_enabled_mld(mld_info.disc, "D"); // wat mag ik zoal op de melding

  // Nieuwe opdracht aanmaken. Dan heb ik ORDBOF write rechten nodig.
  user.auth_required_or_abort(this_opdr.canORDBOFwrite);

  sql = "SELECT mld_melding_status "
      + "  FROM mld_melding "
      + " WHERE mld_melding_key=" + mld_key;
  oRs = Oracle.Execute(sql);
  if (!oRs.eof)
  {
    statusafgemeld = (oRs("mld_melding_status").value == 5);
  }
}

var act_key = getQParamInt("act_key", -1);
// Is er een opdrachttype meegegeven
var opdr_type = getQParamInt("opdr_type", -1);

// Als fo ook bo rechten heeft kan hij hier binnenkomen.
// Als ik de melder ben of de vervanger van de melder en het type opdracht is zichtbaar voor de fe (mld_typeopdr_zichtbaarfe == 1),
// dan mag ik de opdracht ook zien/wijzigen met WEB_MLDUSE lees/schrijf rechten.
var autfunctions = { bo: "WEB_ORDBOF", fo: "WEB_ORDBOF", b2: "WEB_ORDBO2", mi: "WEB_ORDBOF",  fe: ["WEB_MLDORD", "WEB_MLDUSE"]};// pas op voorkeursvolgorde!
var urole = user.autoUrole(p_urole, autfunctions, true); // eerst optional
if (!urole)
{ // laatste kans: ben ik mogelijk kostenplaats(groep)verantwoordelijke
  var this_opdr = mld.func_enabled_opdracht(opdr_key); // faalt eventueel
  urole = p_urole;
}

var copyconfirm = getQParamInt("copyconfirm", 0) == 1;

%>

<html>
  <head>
<%
    FCLTHeader.Generate();
%>
    <script  type="text/javascript">
<%    if (opdr_key == -1 || copy) { %>FcltMgr.startEdit(window);<% } %>
      function opdrMailCallback(data)
      {
<%      if (opdr_key == -1 || copy)
        { %>
          // Complete reload, we hebben nu een opdr_key namelijk
          window.location.href = "../MLD/mld_opdr.asp?verynew=1&urole=<%=urole%>&opdr_key=" + data.key;
<%      }
        else
        { // Bestaande melding bewerkt, switch naar show-mode
%>
          $("#opdrFrame")[0].src = "mld_show_opdr.asp?urole=<%=urole%>&opdr_key=<%=opdr_key%>&embedded=1";
<%      } %>
      }

      // JGL: Sinds met 5.2.2 de mld_edit_opdr_save.asp een JSON oplevert
      //      Kan/moet een groot deel van deze info naar mld_edit_opdr.js in de opdr_submit_callback
      function opdrClose(params)
      {
        if (params.keepForm) // er is iets fout bij het opslaan
            return;
        // Bij bestaande opdrachten worden de parameters autoprint, asksend ook teruggegeven.
<%      if (opdr_key == -1 || copy)
        { %>
          if (params.cancel)
          {
            FcltMgr.closeDetail(window, { cancel: true });
            return true;
          }
<%      } %>
        // nieuwe melding, ga verder in 'verynew' modus
        if (params.autoprint && !params.asksend /* JGL: && !params.queuemail lijkt mij niet onlogisch? */)
        {
          var wnd = window.open('./mld_opdr_xml.asp?opdr_key=' + params.opdr_key, 'pr_rep', 'resizable=1,scrollbars=1,menubar=1,toolbar=1');
          wnd.focus();
        }
        if (params.asksend) // blijkbaar niet volautomatisch
        {
          if (confirm(L("lcl_mld_ord_bymail")))
          {
            var data = { opdr_key: params.opdr_key
                       };
            <% protectRequest.dataToken("data"); %>
            $.post("order_mail.asp",
                   data,
                   opdrMailCallback,
                   "json");
          }
          else
            opdrMailCallback({key: params.opdr_key})
        }
        else if (params.queuemail)
        {
          // De else tak moet nu door callback uitgevoerd worden. Ook in het geval van annuleer (cancel)
          FcltMgr.openModalDetail(params.queuemail, L("lcl_mld_noti_opdr_email"),
                        { callback: opdrMailCallback, alwaysCallback: true, alwaysCallbackParams: {key: params.opdr_key} });
        }
        else
        {
<%        if (opdr_key == -1 || copy)
          { %>
            // Bij het openen van meerdere tabjes gaat setTitle fout in de niet actieve tabjes, omdat setTitle de titel set van het actieve tabje.
            // Daarom bij meerdere opdracht keys huidige tab ook sluiten.
            // Bij één opdracht key huidige tab wel reloaden
            opdrkeyArray = String(params.opdr_key).split(",");
            if (opdrkeyArray.length == 1)
              window.location.href = "mld_opdr.asp?verynew=1&urole=<%=urole%>&opdr_key=" + opdrkeyArray[0];
            else
              FcltMgr.closeDetail(window, { cancel: true });
<%        }
          else
          { // Bestaande melding bewerkt, switch naar show-mode
%>
            $("#opdrFrame")[0].src = "mld_show_opdr.asp?urole=<%=urole%>&opdr_key=<%=opdr_key%>&embedded=1";
<%        } %>
        }
      }
    </script>
  </head>

  <body>
<%
    var page = "?urole=" + urole
             + "&opdr_key=" + opdr_key
             + "&mld_key=" + mld_key
             + "&embedded=1"
             + (copy? "&opdr_copy=1" : "")
             + (finish? "&finish=1" : "")
             + (cnt_key > 0? "&cnt_key=" + cnt_key : "")
             + (act_key > 0? "&act_key=" + act_key : "");
    if (opdr_key == -1 || copy) // Ofwel (mld_key > 0)
    {
      var page = "mld_edit_opdr.asp" + page; // Maak een nieuw

      if (!copyconfirm && statusafgemeld)
      { %>
        <script type="text/javascript">
          $(document).ready(function () {
                                          if (confirm(L("lcl_mld_already_closed")))
                                            window.location.href = "mld_opdr.asp?copyconfirm=1<%=transitQS()%>";
                                          else
                                            FcltMgr.closeDetail(window, { cancel: true });
                                        });
        </script>
        </body>
        </html>
<%      Response.End();
      }
      else
      {
        // opdrachttype moeten we weten om toe te kunnen voegen aan page, anders vragen.
        if (opdr_type > 0)
        {
          page += "&opdr_type=" + opdr_type;
        }
        else
        { // Dan maar vragen
          var buttons = [];
          // Give the user a list and let him select a order type.
          // Bepaal eerst disckey en srtdisckey
          sql = "SELECT s.mld_ins_discipline_key"
              + "     , md.ins_srtdiscipline_key"
              + "     , s.mld_typeopdr_key"
              + "     , s.mld_stdmelding_opdrtypevast"
              + "," + lcl.xsqla("t.mld_typeopdr_omschrijving", "t.mld_typeopdr_key")
              + "  FROM mld_melding m"
              + "     , mld_discipline md"
              + "     , mld_stdmelding s"
              + "     , mld_typeopdr t"
              + " WHERE s.mld_ins_discipline_key = md.ins_discipline_key"
              + "   AND s.mld_typeopdr_key = t.mld_typeopdr_key (+)"
              + "   AND m.mld_melding_key = " + mld_key
              + "   AND m.mld_stdmelding_key = s.mld_stdmelding_key";

          oRs = Oracle.Execute(sql);
          var disckey = oRs("mld_ins_discipline_key").value;
          var srtdisckey = oRs("ins_srtdiscipline_key").value;
          var opdr_type_def = oRs("mld_typeopdr_key").value||-1; // eventuele default
          var stdmld_vast = oRs("mld_stdmelding_opdrtypevast").value;

          if (stdmld_vast == 1)
          {
            opdr_type = oRs("mld_typeopdr_key").value || -1;
            if (opdr_type > -1)
            {
              var btn =  { title: oRs("mld_typeopdr_omschrijving").value,
                           action: "opdr_type=" + opdr_type + ";$('div#dmodal').dialog('close').remove();"
                         };
              buttons.push(btn);
            }
          }
          else
          {
            myTOsql = "SELECT t.mld_typeopdr_key"   /* markeer de specifiekste met een * */
                    + ", CASE WHEN ins_discipline_key IS NULL THEN '' ELSE '*' END || " + lcl.xsqla("t.mld_typeopdr_omschrijving", "t.mld_typeopdr_key")
                    + ", t.mld_typeopdr_matchtype matchtype"
                    + ", t.mld_typeopdr_kosten kosten"
                    + " FROM mld_typeopdr t"
                    + ", mld_typeopdr_srtdiscipline ts"
                    + " WHERE t.mld_typeopdr_key = ts.mld_typeopdr_key"
                    + " AND (ins_discipline_key = " + disckey /* en dan doet de srtdiscipline er echt niet meer toe */
                    + "      OR (ts.ins_srtdiscipline_key = " + srtdisckey + " AND ins_discipline_key IS NULL))"
                    + " ORDER BY 2";
            oRs = Oracle.Execute(myTOsql);
            while (!oRs.eof)
            {
              opdr_type = oRs("mld_typeopdr_key").value;
              var btn =  { title: oRs("mld_typeopdr_omschrijving").value,
                           action: "opdr_type=" + opdr_type + ";$('div#dmodal').dialog('close').remove();"
                         };
              if (opdr_type==opdr_type_def)
              {
                  //btn.title = "<span class='default'>" + btn.title + "</span>";
                  btn.xclass = "default";
                  buttons.unshift(btn); // vooraan
              }
              else
                  buttons.push(btn);
              oRs.MoveNext();
            }
          }

          if (buttons.length == 0)
          {
            shared.simpel_page(L("lcl_no_auth"));  // Response.End;
          }
          else if (buttons.length == 1)
          { // Er is maar één opdrachttype die direct geselecteerd dient te worden.
            page += "&opdr_type=" + opdr_type;
          }
          else
          {
            var tpage = page;
            page="../shared/empty.html?urole=" + urole;  // Achtergrondpagina tijdens popup keuze
%>          <script>
              opdr_type = -1;
              function dialogClose()
              {
                if (opdr_type == -1)
                {
                  setTimeout('FcltMgr.closeDetail(window, { cancel: true })', 100);
                }
                else
                  $("#opdrFrame")[0].src = "<%=tpage%>&urole=<%=urole%>&opdr_type=" + opdr_type;
              }
              $(document).ready(function()
                                {
                                  var params = { title: "<%=L("lcl_mld_choose_typeodr")%>",
                                                 modal: true,
                                                 width : 400,
                                                 resizable : false,
                                                 close : dialogClose
                                               };
                                  FcltMgr.fixActiveelementError();
                                  $('div#dmodal').dialog(params).dialog('open');
                               });
            </script>
            <div id="dmodal" style="display:none">
<%            if (buttons.length)
                CreateButtons(buttons, { vertical: 1, isDialog: true } )
              else
                Response.write(L("lcl_mld_choose_na")); %>
            </div>
<%        }
        }
      }
    }
    else if (finish)
      var page = "mld_edit_opdr.asp" + page; // Direct naar de edit mode.
    else
      var page = "mld_show_opdr.asp" + page;


    IFRAMER("opdrFrame", page, { initHeight: "450px",
                                 FcltClose: "opdrClose"
                               });

    if (opdr_key > -1 && !copy)
    {
      sql = "SELECT mld_typeopdr_matchtype"
          + "  FROM mld_opdr o"
          + "    , mld_typeopdr mto"
          + " WHERE o.mld_typeopdr_key = mto.mld_typeopdr_key"
          + "   AND mld_opdr_key = " + opdr_key;
      oRs = Oracle.Execute(sql);
      matchtype = oRs("mld_typeopdr_matchtype").value;

      if (S("use_capacity_planning") == 1 && matchtype == 3) // Geregistreerde uren
      {
        // Werkplan/verzorgingsplan
        page = "mld_uitvoeren_list.asp?embedded=1&opdr_key=" + opdr_key;
        IFRAMER("mlduitvoeren", page, { refreshOnClose: true, initHide: true });
      }

      var sql = "SELECT fin_factuur_key FROM fin_factuur WHERE mld_opdr_key = " + opdr_key;
      oRs = Oracle.Execute(sql);
      if (!oRs.eof)
      {
        page = "../fin/fin_list.asp?opdr_key=" + opdr_key + "&embedded=1";
        IFRAMER("finFrame", page, { title: L("lcl_fin_invoices_frame") , initHide: true, refreshOnClose: true });
      }

      this_opdr = mld.func_enabled_opdracht(opdr_key); // wat mag ik zoal op deze opdracht
      if (this_opdr.canShowOpdrNote)
      {
        // Let op: dit kan vertrouwelijke info zijn. Controle op canWriteFO/BO kan niet lazy (evt wel specifiek)
        page = "opdr_show_note.asp?embedded=1&urole=" + urole + "&opdr_key=" + opdr_key;
        IFRAMER("noteFrame", page, {refreshOnClose: true, initHide: S("note_collapsed") } );
      }

      verkoopfactuur_IFRAMER('opdracht', opdr_key);
    }
%>
  </body>
</html>
