<% /*
     $Revision$
     $Id$

     File:               details.inc
     Description:        Bepaalt een clientside array details_Items met bestelregels
                         Daar wordt clientside in sel_items_tab.js dan weer HTML van gemaakt
     Parameters:         veelal globalen
     Context:            Include van bes_edit_bestelling.asp
     Note:               Wordt gebruikt voor bestaande bestellingen en voor (net terug van) punch-out
*/ %>

<%
// aanroeper moet hebben: var details_Items = new Array(); // voor details.inc


// Gebruikt voor bestaande bestellingen (bes_key >0 en this_bes gezet)
// of voor binnenkomst punchout (bes_key==-1 en psrt_keys, pamounts arrays met keys en aantallen)
function generateDetails(bes_key, edit, psrt_keys, pamounts)
{
  if (bes_key > 0)
  {
    // retrieve info about the objects
    sql = "SELECT ins_discipline_key"
        + "     , i.bes_srtdeel_key"
        + "     , s.bes_srtdeel_nr"
        + ", " + lcl.xsqla('s.bes_srtdeel_omschrijving', 's.bes_srtdeel_key')
        + "    , bes_srtdeel_details_loc"
        + "     , i.bes_bestelling_item_aantal"
        + ", " + lcl.xsqla('g.bes_srtgroep_omschrijving', 'g.bes_srtgroep_key')
        + (edit
          ? "   , COALESCE(bes.getsrtdeelprijs(i.bes_srtdeel_key, null) , 0)"
          : "   , i.bes_bestelling_item_prijs") + " prijs" // pak bestelling prijs inclusief kortingen
        + "     , s.bes_srtdeel_btw"
        + "     , s.bes_srtdeel_veelvoud"
        + "     , bes_bestelling_item_aantalontv"
        + "     , i.bes_bestelling_item_key"
        + ", " + lcl.xsqla('s.bes_srtdeel_eenheid', 's.bes_srtdeel_key')
        + "     , (SELECT COALESCE(ABS(SUM(bi.bes_bestelling_item_aantal)), 0)"
          + "        FROM bes_bestelling b"
          + "           , bes_bestelling_item bi"
          + "       WHERE b.bes_bestelling_key = bi.bes_bestelling_key"
          + "         AND b.bes_bestelling_retourvan_key = i.bes_bestelling_key) retour"
        + "     , CASE WHEN bst.bes_staffeltabel_groep = 0"
          + "          THEN 0" // artikelkorting
          + "          WHEN bst.bes_staffeltabel_groep = 1"
          + "          THEN bst.bes_staffeltabel_key" // groepskorting
          + "          ELSE -1" // geen staffelkorting
          + "          END staffelgroep"
        + "    , s.bes_srtdeel_minimum"
        + ", " + lcl.xsqla('s.bes_srtdeel_opmerking', 's.bes_srtdeel_key')
        + " FROM bes_bestelling_item i"
        + "    , bes_srtdeel s"
        + "    , bes_srtgroep g"
        + "    , bes_bestelling b"
        + "    , bes_staffeltabel bst"
        + " WHERE i.bes_bestelling_key = " + bes_key
        + "   AND i.bes_srtdeel_key = s.bes_srtdeel_key"
        + "   AND b.bes_bestelling_key = i.bes_bestelling_key"
        + "   AND s.bes_srtgroep_key = g.bes_srtgroep_key"
        + "   AND bst.bes_staffeltabel_key(+) = s.bes_staffeltabel_key"
        + " ORDER BY bes_srtdeel_nr, UPPER(bes_srtdeel_omschrijving)";   // XLAT??
  }
  else // punchout data heeft niets met staffels o.i.d.
  {
    sql = "SELECT ins_discipline_key"
        + "     , s.bes_srtdeel_key"
        + "     , s.bes_srtdeel_nr"
        + ", " + lcl.xsqla('s.bes_srtdeel_omschrijving', 's.bes_srtdeel_key')
//        + "     , 0 bes_bestelling_item_aantal" // komt straks uit pamounts
        + "    , bes_srtdeel_details_loc"
        + ", " + lcl.xsqla('g.bes_srtgroep_omschrijving', 'g.bes_srtgroep_key')
        + "    , bes.getsrtdeelprijs (s.bes_srtdeel_key, NULL) prijs"
        + "    , s.bes_srtdeel_btw"
        + "    , s.bes_srtdeel_veelvoud"
        + "    , -1 bes_bestelling_item_aantalontv"
        + "    , -ROWNUM-1 bes_bestelling_item_key" // uniek maar niet bestaand
        + ", " + lcl.xsqla('s.bes_srtdeel_eenheid', 's.bes_srtdeel_key')
        + "    , 0 retour"
        + "    , -1 staffelgroep"
        + "    , s.bes_srtdeel_minimum"
        + ", " + lcl.xsqla('s.bes_srtdeel_opmerking', 's.bes_srtdeel_key')
        + " FROM bes_srtdeel s"
        + "    , bes_srtgroep g"
        + "    , bes_staffeltabel bst"
        + " WHERE s.bes_srtdeel_key IN (" + psrt_keys.join(",") + ")"
        + "   AND s.bes_srtgroep_key = g.bes_srtgroep_key"
        + "   AND bst.bes_staffeltabel_key(+) = s.bes_staffeltabel_key"
        + " ORDER BY bes_srtdeel_nr, UPPER(bes_srtdeel_omschrijving)";  // XLAT??
  }
  oRs = Oracle.Execute(sql);
%>
  <script type="text/javascript" >
    var i = 0;
<%
     var isCorrectie = false; // We hebben geen apart
     while (!oRs.eof)
     {
       sql = " SELECT k.bes_kenmerk_key"
           + "," + lcl.xsqla('sk.bes_srtkenmerk_omschrijving', 'sk.bes_srtkenmerk_key')
           + ",       sk.bes_srtkenmerk_kenmerktype"
           + ",       r.fac_kenmerkdomein_objectnaam"
           + ",       r.fac_kenmerkdomein_kolomnaam"
           + ",       r.fac_kenmerkdomein_kolomtxt"
           + ",       r.fac_usrtab_key"
           + ",       sk.bes_srtkenmerk_lengte"
           + ",       sk.bes_srtkenmerk_dec"
           + ",       sk.bes_srtkenmerk_nmin"
           + ",       sk.bes_srtkenmerk_nmax"
           + ",       (SELECT v.bes_kenmerkbesteli_waarde"
           + "           FROM bes_kenmerkbesteli v"
           + "          WHERE v.bes_bestelling_item_key = " + oRs("bes_bestelling_item_key").value // 83 84
           + "            AND v.bes_kenmerk_key = k.bes_kenmerk_key"
           + "            AND v.bes_kenmerkbesteli_verwijder IS NULL) waarde" // 11
           + ",       k.bes_kenmerk_verplicht"
           + ",       k.bes_kenmerk_groep"
           + ", " + lcl.xsqla('k.bes_kenmerk_default', 'k.bes_kenmerk_key')
           + ",           k.bes_srtinstallatie_key"
           + "   FROM bes_srtkenmerk sk"
           + ",       bes_kenmerk k"
           + ",       fac_kenmerkdomein r"
           + ",       bes_kenmerkbesteli kbi"
           + "  WHERE k.bes_kenmerk_verwijder IS NULL"
           + "    AND kbi.bes_kenmerk_key = k.bes_kenmerk_key"
           + "    AND kbi.bes_bestelling_item_key IN (" + oRs("bes_bestelling_item_key").value + ")"
           + "    AND k.bes_srtkenmerk_key = sk.bes_srtkenmerk_key"
           + "    AND sk.bes_srtkenmerk_verwijder IS NULL"
           + "    AND sk.fac_kenmerkdomein_key  = r.fac_kenmerkdomein_key(+)"
           + "    AND k.bes_kenmerk_type = 'I'"
           + " ORDER BY k.bes_kenmerk_volgnummer, UPPER("+lcl.xsql('sk.bes_srtkenmerk_omschrijving', 'sk.bes_srtkenmerk_key') +")";
       oRs1 = Oracle.Execute(sql);
%>
       var objFlex = new Array;
       objFlex[0] = new Array(); // bes_kenmerk_key
       objFlex[1] = new Array(); // bes_kenmerkbestell_waarde
       objFlex[2] = new Array(); // flexkenmerk omschrijving
       objFlex[3] = new Array(); // flexkenmerkwaarde omschrijving
       i = 0;
<%
       while (!oRs1.eof)
       {
         var ktype = oRs1("bes_srtkenmerk_kenmerktype").value;
         if (ktype == 'R' || ktype == 'S')
         {
           val = oRs1("waarde").value;
           var FAC_USRTAB_KEY = oRs1("fac_usrtab_key").value;
           if (oRs1("fac_kenmerkdomein_objectnaam").value == "FAC_USRDATA" && FAC_USRTAB_KEY)
             where = "FAC_USRTAB_KEY = " + FAC_USRTAB_KEY;
           sql = "SELECT " + oRs1("fac_kenmerkdomein_kolomnaam").value + "," + oRs1("fac_kenmerkdomein_kolomtxt").value + " waarde"
               + " FROM " + oRs1("fac_kenmerkdomein_objectnaam").value
               + " WHERE " + oRs1("fac_kenmerkdomein_kolomnaam").value + " = " + val;
           oRs2 = Oracle.Execute(sql);

           if (!oRs2.eof)
           { %>
             objFlex[0][i] = <%=oRs1("bes_kenmerk_key").value%>;
             objFlex[1][i] = "<%=safe.jsstring(oRs1("waarde").value)%>";
             objFlex[2][i] = "<%=safe.jsstring(oRs1("bes_srtkenmerk_omschrijving").value)%>";
             objFlex[3][i] = "<%=safe.jsstring(oRs2("waarde").value)%>";
             i++;
<%         }
         }
         else
         { %>
           objFlex[0][i] = <%=oRs1("bes_kenmerk_key").value%>;
           objFlex[1][i] = "<%=safe.jsstring(oRs1("waarde").value)%>";
           objFlex[2][i] = "<%=safe.jsstring(oRs1("bes_srtkenmerk_omschrijving").value)%>";
           objFlex[3][i] = "<%=safe.jsstring(oRs1("waarde").value)%>";
           i++;
<%       }
         oRs1.moveNext();
       }
       oRs1.Close();
       var amount = 0;
       if (bes_key > 0)
       {
         amount = oRs("bes_bestelling_item_aantal").value;
         isCorrectie = isCorrectie || amount < 0; // Heuristisch
       }
       else // punch_out
       {
         for (var i=0; i < psrt_keys.length; i++)
         {
           if (psrt_keys[i] == oRs("bes_srtdeel_key").value)
           {
             amount = pamounts[i];
           }
         }
       }

       // hieronder niet te veel spaties toevoegen: die gaan allemaal over het lijntje!
%>
       details_Items[<%=oRs("bes_bestelling_item_key").value%>] =
            { srtdeel_key: <%=oRs("bes_srtdeel_key").value%>,
              srtdeel_nr: "<%=safe.jsstring(oRs("bes_srtdeel_nr").value)%>",
              srtdeel_omschrijving: "<%=safe.jsstring(oRs("bes_srtdeel_omschrijving").value)%>",
              srtdeel_details_loc: "<%=safe.jsstring(oRs("bes_srtdeel_details_loc").value)%>",
              srtgroup_text: "<%=safe.jsstring(oRs("bes_srtgroep_omschrijving").value)%>",
              amount: <%=amount%>,
              price: <%=safe.jsfloat(oRs("prijs").value || 0)%>,
              btw: <%=safe.jsfloat(oRs("bes_srtdeel_btw").value || 0)%>,
              eenheid: "<%=safe.jsstring(oRs("bes_srtdeel_eenheid").value)%>",
              veelvoud: <%=oRs("bes_srtdeel_veelvoud").value || 1%>,
              received: <%=oRs("bes_bestelling_item_aantalontv").value || 0%>,
              retour: <%=oRs("retour").value%>,
              item_key: <%=oRs("bes_bestelling_item_key").value%>,
              objFlex: objFlex,
              // staffelgroep (-1=geen staffelgroep, 0=artikelkorting, >0=groepskorting met key van staffelgroep)
              staffelgroep: <%=oRs("staffelgroep").value%>,
              bestelminimum: <%=oRs("bes_srtdeel_minimum").value || 0%>,
              opmerking: "<%=safe.jsstring(oRs("bes_srtdeel_opmerking").value || "")%>"
            };

<%
       oRs.moveNext();
     }
     oRs.close();
%>
  </script> <%
  return isCorrectie;
}
%>
