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

    File:           bes_bedrijfproduct_search_list.asp
    Description:    Vangt de parameters van bes_bedrijfproduct_search op en verwerkt die tot een lijst
    Parameters:
    Context:        Vanuit bes_bedrijfproduct_search.asp
    Note:           Vooralsnog KOPIE VAN bes_klantmon_search.asp
*/ %>

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

<%
FCLTHeader.Requires({ plugins: ["jQuery"],
                      js: ["num2curr.js"]});

var klant_key     = getQParamInt("klant_key"); // verplicht
//var searchtext    = getQParam("searchtext", null);

var outputmode = getQParamInt("outputmode", 0); //  0 = screen, 1 = print, 2 = excel etc
var showall = getQParamInt("showall", 0) == 1;

var authparams = user.checkAutorisation("WEB_BESMSU");

%>
<html>
  <head>
<%  FCLTHeader.Generate({outputmode: outputmode}); %>
    <script>
      function weeg_edit(row)
      {
        var srtprod_key = row.getAttribute("ROWKEY");

        var url = "../../appl/bes/bes_bedrijf_srtprod.asp?klant_key=<%=klant_key%>&srtprod_key=" + srtprod_key;
        FcltMgr.openModalDetail(url, "<%=L("lcl_bes_srtprod")%>", {callback: FcltMgr.reload});
      }

      function weeg_edit_multi(rowArray, isMulti)
      {
        var srtprod_keys = getKeyString(rowArray);
        var url = "../../appl/bes/bes_bedrijf_srtprod.asp?klant_key=<%=klant_key%>&srtprod_keys=" + srtprod_keys;
        FcltMgr.openModalDetail(url, "<%=L("lcl_bes_srtprod")%>", {callback: FcltMgr.reload});
      }

      function calcTotal(bes_srtprod_key)
      {
        var vweging = parseFloat($("#weging" + bes_srtprod_key).val().replace(',', '.'));
        var vprijs  = parseFloat($("#prijseenheid" + bes_srtprod_key).val().replace(',', '.'));
        var totaal = '';
        if ($("#weging" + bes_srtprod_key).val() != '' && !isNaN(vweging) && $("#prijs" + bes_srtprod_key).val() != '' && !isNaN(vprijs))
          totaal = num2currEditable(vweging * vprijs);
        $("#totaalprijs" + bes_srtprod_key).val(totaal);
      }

      function calcPrijs(bes_srtprod_key)
      {
      	var vweging = parseFloat($("#weging" + bes_srtprod_key).val().replace(',', '.'));
      	var vtotaal = parseFloat($("#totaalprijs" + bes_srtprod_key).val().replace(',', '.'));
      	var prijs = '';
        if ($("#weging" + bes_srtprod_key).val() != '' && !isNaN(vweging) && $("#totaalprijs" + bes_srtprod_key).val() != '' && !isNaN(vtotaal))
      	  if (vweging != 0)
      	    prijs = num2currEditable(vtotaal / vweging);
      	$("#prijseenheid" + bes_srtprod_key).val(prijs);
      	return prijs;
      }

      function isGoodCurrency(str, digits)
      {
        // TODO: Aantal cijfers voor en na de komma ook controleren. Aantallen zijn verschillend voor weging, prijseenheid en totaalprijs.
        // var anum = /^([-\+]?\d{1,6}[.,]?|[-\+]?\d{0,6}[.,]\d{1,2})$/
        var anum = /^([-\+]?\d+[.,]?|[-\+]?\d+[.,]\d+$)$/
        return anum.test(str);
      }

      function checkInput(str, field)
      {
        if (str != "" && !isGoodCurrency(str.replace(',', '.')))
        {
          alert(L("lcl_shared_invalid_format"));
          field.select();
          field.focus();
          return false;
        }
        return true;
      }

      // Op de OnBlur van inputveld wordt een weging direct opgeslagen
      function saveWeeg(bes_srtprod_key, prs_bedrijf_key, weegfactor)
      {
        if (!checkInput(weegfactor, $("#weging" + bes_srtprod_key))) return;

        calcTotal(bes_srtprod_key);
        if (weegfactor != "")
          $("#weging" + bes_srtprod_key).val(num2currEditable(parseFloat(weegfactor.replace(',', '.'))));

        var data = { bes_srtprod_key: bes_srtprod_key,
                     prs_bedrijf_key: prs_bedrijf_key,
                     weegfactor: weegfactor
                   };
        <% protectRequest.dataToken("data"); %>
        $.post("bes_bedrijfproduct_save.asp",
               data,
               FcltCallback,
               "json");
      }

      // Op de OnBlur van inputveld wordt een prijs direct opgeslagen
      function savePrijsEenheid(bes_srtprod_key, prs_bedrijf_key, prijs)
      {
        if (!checkInput(prijs, $("#prijseenheid" + bes_srtprod_key))) return;

        calcTotal(bes_srtprod_key);
        if (prijs != "")
          $("#prijseenheid" + bes_srtprod_key).val(num2currEditable(parseFloat(prijs.replace(',', '.'))));

        var data = { bes_srtprod_key: bes_srtprod_key,
                     prs_bedrijf_key: prs_bedrijf_key,
                     prijs: prijs
                   };
        <% protectRequest.dataToken("data"); %>
        $.post("bes_bedrijfproduct_save.asp",
               data,
               FcltCallback,
               "json");
      }

      // Op de OnBlur van inputveld wordt een prijs direct opgeslagen
      function saveTotaalprijs(bes_srtprod_key, prs_bedrijf_key)
      {
        if (!checkInput($("#totaalprijs" + bes_srtprod_key).val(), $("#totaalprijs" + bes_srtprod_key))) return;

        lprijs = calcPrijs(bes_srtprod_key);
        if ($("#totaalprijs" + bes_srtprod_key).val() != "")
          $("#totaalprijs" + bes_srtprod_key).val(num2currEditable(parseFloat($("#totaalprijs" + bes_srtprod_key).val().replace(',', '.'))));

        var data = { bes_srtprod_key: bes_srtprod_key,
                     prs_bedrijf_key: prs_bedrijf_key,
                     prijs: lprijs
                   };
        <% protectRequest.dataToken("data"); %>
        $.post("bes_bedrijfproduct_save.asp",
               data,
               FcltCallback,
               "json");
      }
    </script>
  </head>

  <body>
<%  var sql = "SELECT DISTINCT bes_srtprod_key" // vertikaal
            + "     , bes_bedrijf_srtprod_key"
            + "     , bes_bedrijf_srtprod_weging"
            + "     , bes_bedrijf_srtprod_prijs"
            + "     , bes_srtgroep_omschrijving"
            + "     , bes_srtprod_omschrijving"
            + "     , bes.getsrtprodprijs (bes_srtprod_key, SYSDATE) pprijs";

    sql += " FROM (SELECT bsp.bes_srtprod_key"
         + "            , bes_bedrijf_srtprod_key"
         + "            , bes_bedrijf_srtprod_weging"
         + "            , bes_bedrijf_srtprod_prijs"
         + "            , bsp.bes_srtprod_omschrijving"
         + "            , bsg.bes_srtgroep_omschrijving"
         + "            , bsd.bes_srtdeel_omschrijving"
         + "            , bes.getsrtdeelprijs (bsd.bes_srtdeel_key, SYSDATE) prijs"

    sql += "            , bsd.bes_srtdeel_key"
         + "            , bsd.prs_bedrijf_key"
         + "         FROM bes_bedrijf_srtprod bbsp"
         + "            , bes_srtprod bsp"
         + "            , bes_srtdeel bsd"
         + "            , bes_srtgroep bsg"
         + "        WHERE bbsp.bes_srtprod_key(+) = bsp.bes_srtprod_key"
         + "          AND bsp.bes_srtprod_key = bsd.bes_srtprod_key"
         + "          AND bbsp.prs_bedrijf_key(+) = " + klant_key
         //+ (searchtext
         //  ? "        AND (UPPER(bsp.bes_srtprod_nr) LIKE " + safe.quoted_sql_wild(searchtext + "%") + " OR "
         //    + "           UPPER(bsp.bes_srtprod_omschrijving) LIKE " + safe.quoted_sql_wild("%" + searchtext + "%") + ")"
         //  : "")
         + "          AND bsg.bes_srtgroep_key = bsp.bes_srtgroep_key"
         + "          )"
         + " ORDER BY bes_srtgroep_omschrijving"
         + "        , bes_srtprod_omschrijving"
         + "        , bes_srtprod_key";

    function displaypercent(val1, val2)
    {
      if ( val1 && val2 && val1 != val2 )
      {
        var diff = 100*(val2 - val1) / val1;
        var stl = diff<0?"besprijsdown":"besprijsup";
        return "<span class='"+stl+"'>"+(diff>0?"+":"")+safe.displayfloat(diff)+"</span>";
      }
      else
        return "-";
    }
    function fnWeging(oRs)
    {
      var bes_srtprod_key = oRs("bes_srtprod_key").value;
      var weging = (oRs("bes_bedrijf_srtprod_weging").value
                   ? safe.curreditable(oRs("bes_bedrijf_srtprod_weging").value)
                   : "")
      var html = '<input name="weging' + bes_srtprod_key + '" id="weging' + bes_srtprod_key + '" class="fldbessrtweging currency" type="text" size="20" maxlength="14"'
               + ' value="' + weging
               + '" OnClick="FcltMgr.stopPropagation(event)" onFocus="this.select()"'
               + ' OnBlur="if (this.value != \'...\') saveWeeg(' + oRs("bes_srtprod_key").value + ', ' + klant_key + ', this.value)">';
      return html;
    }

    function fnPrijseenheid(oRs)
    {
      var bes_srtprod_key = oRs("bes_srtprod_key").value;
      var prijseenheid = (oRs("bes_bedrijf_srtprod_prijs").value
                         ? safe.curreditable(oRs("bes_bedrijf_srtprod_prijs").value)
                         : "")
      var html = '<input name="prijseenheid' + bes_srtprod_key + '" id="prijseenheid' + bes_srtprod_key + '" class="fldbessrtprijs currency" type=text size="20" maxlength="10"'
               + ' value="' + prijseenheid
               + '" OnClick="FcltMgr.stopPropagation(event)" onFocus="this.select()"'
               + ' OnBlur="if (this.value != \'...\') savePrijsEenheid(' + oRs("bes_srtprod_key").value + ', ' + klant_key + ', this.value)">';
      return html;
    }

    function fnTotaalprijs(oRs)
    {
      var bes_srtprod_key = oRs("bes_srtprod_key").value;
      var totaalprijs = (oRs("bes_bedrijf_srtprod_prijs").value && oRs("bes_bedrijf_srtprod_weging").value
                        ? safe.curreditable(oRs("bes_bedrijf_srtprod_prijs").value * oRs("bes_bedrijf_srtprod_weging").value)
                        : "")
      var html = '<input name="totaalprijs' + bes_srtprod_key + '" id="totaalprijs' + bes_srtprod_key + '" class="fldbestsrttotaal currency" type=text size="20" maxlength="20"'
               + ' value="' + totaalprijs
               + '" OnClick="FcltMgr.stopPropagation(event)" onFocus="this.select()"'
               + ' OnBlur="if (this.value != \'...\') saveTotaalprijs(' + oRs("bes_srtprod_key").value + ', ' + klant_key + ')">';
      return html;
    }

    var rst = new ResultsetTable({ sql: sql,
                                   keyColumn: "bes_srtprod_key",
                                   ID: "assortimenttable",
                                   showAll: showall,
                                   outputmode: outputmode,
                                   //totalShow: fntotalShow,
                                   //totalCalc: fntotalCalc,
                                   title: L("lcl_bes_assortiment_list")
                                 });

    rst.addColumn(new Column({caption: L("lcl_bes_srtgroup"), content: "bes_srtgroep_omschrijving"}));
    rst.addColumn(new Column({caption: L("lcl_bes_srtprod"), content: "bes_srtprod_omschrijving"}));
    rst.addColumn(new Column({caption: L("lcl_bes_weging"), content: fnWeging, datatype: "float"}));
    rst.addColumn(new Column({caption: L("lcl_bes_price_per_unity"), content: fnPrijseenheid, datatype: "currency"}));
    rst.addColumn(new Column({caption: L("lcl_r_price7"), content: fnTotaalprijs, datatype: "currency"}));

    rst.addAction({ action: "weeg_edit", caption: L("lcl_edit"), isDefault: true});
    rst.addAction({ action: "weeg_edit_multi", caption: L("lcl_bes_weging"), multi: true, multiOnce: true, single: false });

    var cnt = rst.processResultset();
%>
  </body>
</html>
