20-1-2011 12:42<%@ LANGUAGE = JavaScript %>
<% /*
     $Revision$
     $Id$

     File:        voorraadInfo.asp
     Note:        Het bestand is unauthenticed aan te roepen (vanuit DynArtikelInfo.asp).
                   Dat vind ik acceptabel voor de minimale informatie die het oplevert 
*/ %>

<%
DOCTYPE_Disable = 1;
var ANONYMOUS_Allowed = 1;
%>

<!-- #include file="../Shared/common.inc" -->
<!-- #include file="./bes.inc" -->
<!-- #include file="../INS/ins.inc" -->

<%
//__DoLog("voorraadInfo.asp");
// Lees de vraagstelling in die via XML binnenkomt
var request = getQParam("request");
if (request != "stock")
{
   Response.Write("Not a stock request");
   Response.End;
}


var objReq = new ActiveXObject("MSXML2.DOMDocument.6.0");
objReq.load(Request);

if (objReq.parseError.errorCode != 0)
{
   var myErr = objReq.parseError;
   Response.Write("Error parsing request XML: " + myErr.reason);
   Response.End;
}

// Zoek het partnummer
var strQuery = "stock_request/part/number";
objPart = objReq.selectSingleNode(strQuery);
if (!objPart)
{
   Response.Write(strQuery + " not found in XML");
   Response.End;
}

// Partnummer is artikelnr
var l_voorraad = bepaal_voorraad_van_artikel(objPart.text);
var xmlDoc = new ActiveXObject("MSXML2.DOMDocument.6.0");

xmlDoc.appendChild(xmlDoc.createProcessingInstruction("xml", "version=\"1.0\" encoding=\"UTF-8\""))

rootElement = xmlDoc.createElement("stock_response");
    elementPart = xmlDoc.createElement("part");
        elementNumber = xmlDoc.createElement("number");
            elementNumberText = xmlDoc.createTextNode(objPart.text);
            elementNumber.appendChild(elementNumberText);
        elementPart.appendChild(elementNumber);
        elementAmount = xmlDoc.createElement("amount");
            elementAmountText = xmlDoc.createTextNode(l_voorraad);
            elementAmount.appendChild(elementAmountText);
        elementPart.appendChild(elementAmount);
        elementInfo = xmlDoc.createElement("infotext"); // infohtml bestaat ook
            elementInfoText = xmlDoc.createTextNode("Voorraad opgevraagd op "+(new Date()) +
                                                    "\ndoor " + Request.ServerVariables("REMOTE_HOST") +
                                                    "\nvia: " + Request.ServerVariables("HTTP_HOST") + Request.ServerVariables("URL"));
            elementInfo.appendChild(elementInfoText);
        elementPart.appendChild(elementInfo);
        elementStockTime = xmlDoc.createElement("time");
            elementStockTimeText = xmlDoc.createTextNode(new Date());
            elementStockTime.appendChild(elementStockTimeText);
        elementPart.appendChild(elementStockTime);
    rootElement.appendChild(elementPart);
xmlDoc.appendChild(rootElement);

Response.ContentType = "text/xml";
Response.Write(xmlDoc.xml);

function bepaal_voorraad_van_artikel(p_bes_srtdeel_nr)
{
  // Bepaal de gegevens van het artikel (indien aanwezig)
  var sql_from_intern = " SELECT sd.bes_srtdeel_nr"
                      + ", "+ lcl.xsqla('sd.bes_srtdeel_omschrijving','sd.bes_srtdeel_key')
                      + ", dp.bes_ins_discipline_key_inkoop inkoop_disc"
                      + ", (SELECT "+ lcl.xsql('bd2.ins_discipline_omschrijving','bd2.ins_discipline_key')
                        + " FROM bes_discipline bd2"
                        + " WHERE bd2.ins_discipline_key = dp.bes_ins_discipline_key_inkoop) disc_oms"
                      + ", bes.getsrtdeelprijs(sd.bes_srtdeel_key, NULL) bes_srtdeel_prijs"
                      + ", (SELECT isd2.bes_srtdeel_voorraadmax"
                        + " FROM bes_srtdeel isd2"
                        + ", bes_srtgroep isg2"
                        + ", bes_discipline bd2"
                        + " WHERE isd2.bes_srtgroep_key = isg2.bes_srtgroep_key"
                        + " AND bd2.ins_discipline_key = isg2.ins_discipline_key"
                        + " AND isd2.bes_srtdeel_nr LIKE sd.bes_srtdeel_nr"
                        + " AND bd2.ins_discipline_key = dp.bes_ins_discipline_key_inkoop) voorraadmax" // Voorraadmax van gekoppelde discipline
                      + ", (SELECT isd2.bes_srtdeel_voorraadmin"
                        + " FROM bes_srtdeel isd2"
                        + ", bes_srtgroep isg2"
                        + ", bes_discipline bd2"
                        + " WHERE isd2.bes_srtgroep_key = isg2.bes_srtgroep_key"
                        + " AND bd2.ins_discipline_key = isg2.ins_discipline_key"
                        + " AND isd2.bes_srtdeel_nr LIKE sd.bes_srtdeel_nr"
                        + " AND bd2.ins_discipline_key = dp.bes_ins_discipline_key_inkoop) voorraadmin" // Voorraadmin van gekoppelde discipline
                      + ", SUM (bi.bes_bestelling_item_aantal) aantal_intern"
                      + ", TO_NUMBER (NULL) aantal_extern_besteld"
                      + ", TO_NUMBER (NULL) aantal_extern_geleverd"
                      + " FROM bes_discipline bd"
                      + ", bes_srtgroep g"
                      + ", bes_srtdeel sd"
                      + ", bes_bestelling b"
                      + ", bes_bestelling_item bi"
                      + ", bes_disc_params dp"
                      + " WHERE sd.bes_srtgroep_key = g.bes_srtgroep_key"
                      + " AND bi.bes_srtdeel_key = sd.bes_srtdeel_key"
                      + " AND b.bes_bestelling_key = bi.bes_bestelling_key"
                      + " AND g.ins_discipline_key = bd.ins_discipline_key"
                      + " AND bd.ins_discipline_key = dp.bes_ins_discipline_key"
                      + " AND sd.bes_srtdeel_verwijder IS NULL"
                      + " AND dp.bes_ins_discipline_key_inkoop IS NOT NULL"
                      + " AND sd.bes_srtdeel_omschrijving LIKE"
                          + " (SELECT "+ lcl.xsql('sd2.bes_srtdeel_omschrijving','sd2.bes_srtdeel_key')
                            + " FROM bes_srtdeel sd2"
                            + ", bes_srtgroep g"
                            + ", bes_disc_params dp"
                            + " WHERE sd2.bes_srtgroep_key = g.bes_srtgroep_key"
                            + " AND g.ins_discipline_key = dp.bes_ins_discipline_key_inkoop"
                            + " AND UPPER(sd2.bes_srtdeel_nr) LIKE " + safe.quoted_sql_wild(p_bes_srtdeel_nr) + ")"
                      + " GROUP BY sd.bes_srtdeel_nr"
                      + ", "+ lcl.xsql('sd.bes_srtdeel_omschrijving','sd.bes_srtdeel_key')
                      + ", dp.bes_ins_discipline_key_inkoop"
                      + ", disc_oms"
                      + ", bes.getsrtdeelprijs(sd.bes_srtdeel_key, NULL)"
                      + ", bes_srtdeel_voorraadmax"
                      + ", bes_srtdeel_voorraadmin";

  // Bestelde artikelen bij de leverancier (extern)
  // Besteld (status = 5) en Geleverd (status = 6,7)
  var sql_from_extern = " SELECT sd.bes_srtdeel_nr"
                      + ", "+ lcl.xsqla('sd.bes_srtdeel_omschrijving','sd.bes_srtdeel_key')
                      + ", bd.ins_discipline_key inkoop_disc"
                      + ", "+ lcl.xsql('bd.ins_discipline_omschrijving','bd.ins_discipline_key') +" disc_oms"
                      + ", bes.getsrtdeelprijs(sd.bes_srtdeel_key, NULL) bes_srtdeel_prijs"
                      + ", bes_srtdeel_voorraadmax voorraadmax"
                      + ", bes_srtdeel_voorraadmin voorraadmin"
                      + ", TO_NUMBER (NULL) aantal_intern"
                      + ", SUM (bi.bes_bestelling_item_aantal) aantal_extern_besteld"
                      + ", TO_NUMBER (NULL) aantal_extern_geleverd"
                      + " FROM bes_discipline bd"
                      + ", bes_srtgroep g"
                      + ", bes_srtdeel sd"
                      + ", bes_bestelling b"
                      + ", bes_bestelling_item bi"
                      + ", bes_disc_params dp"
                      + " WHERE sd.bes_srtgroep_key = g.bes_srtgroep_key"
                      + " AND bi.bes_srtdeel_key = sd.bes_srtdeel_key"
                      + " AND b.bes_bestelling_key = bi.bes_bestelling_key"
                      + " AND g.ins_discipline_key = bd.ins_discipline_key"
                      + " AND bd.ins_discipline_key = dp.bes_ins_discipline_key"
                      + " AND sd.bes_srtdeel_verwijder IS NULL"
                      + " AND b.bes_bestelling_status IN (2, 3, 4, 5)"
                      + " AND dp.bes_ins_discipline_key_inkoop IS NULL"
                      // Het moet een gekoppelde discipline zijn
                      + " AND dp.bes_ins_discipline_key IN"
                        + " (SELECT dp1.bes_ins_discipline_key_inkoop"
                        + " FROM bes_disc_params dp1"
                        + " WHERE dp1.bes_ins_discipline_key_inkoop IS NOT NULL)"
                      + " AND UPPER(sd.bes_srtdeel_nr) LIKE " + safe.quoted_sql_wild(p_bes_srtdeel_nr)
                      + " GROUP BY bes_srtdeel_nr"
                      + ", "+ lcl.xsql('sd.bes_srtdeel_omschrijving','sd.bes_srtdeel_key')
                      + ", bd.ins_discipline_key"
                      + ", "+ lcl.xsql('bd.ins_discipline_omschrijving','bd.ins_discipline_key')
                      + ", bes.getsrtdeelprijs(sd.bes_srtdeel_key, NULL)"
                      + ", bes_srtdeel_voorraadmax"
                      + ", bes_srtdeel_voorraadmin"
                      + " UNION ALL"
                      + " SELECT sd.bes_srtdeel_nr"
                      + ", "+ lcl.xsql('sd.bes_srtdeel_omschrijving','sd.bes_srtdeel_key')
                      + ", bd.ins_discipline_key inkoop_disc"
                      + ", "+ lcl.xsql('bd.ins_discipline_omschrijving','bd.ins_discipline_key') +" disc_oms"
                      //+ ", TO_CHAR (b.bes_bestelling_datum, 'YYYYMM') maand"
                      + ", bes.getsrtdeelprijs(sd.bes_srtdeel_key, NULL) bes_srtdeel_prijs"
                      + ", bes_srtdeel_voorraadmax voorraadmax"
                      + ", bes_srtdeel_voorraadmin voorraadmin"
                      + ", TO_NUMBER (NULL) aantal_intern"
                      + ", TO_NUMBER (NULL) aantal_extern_besteld"
                      + ", SUM (bi.bes_bestelling_item_aantal) aantal_extern_geleverd"
                      + " FROM bes_discipline bd"
                      + ", bes_srtgroep g"
                      + ", bes_srtdeel sd"
                      + ", bes_bestelling b"
                      + ", bes_bestelling_item bi"
                      + ", bes_disc_params dp"
                      + " WHERE sd.bes_srtgroep_key = g.bes_srtgroep_key"
                      + " AND bi.bes_srtdeel_key = sd.bes_srtdeel_key"
                      + " AND b.bes_bestelling_key = bi.bes_bestelling_key"
                      + " AND g.ins_discipline_key = bd.ins_discipline_key"
                      + " AND bd.ins_discipline_key = dp.bes_ins_discipline_key"
                      + " AND sd.bes_srtdeel_verwijder IS NULL"
                      + " AND b.bes_bestelling_status > 5"
                      + " AND dp.bes_ins_discipline_key_inkoop IS NULL"
                      // Het moet een gekoppelde discipline zijn
                      + " AND dp.bes_ins_discipline_key IN"
                        + " (SELECT dp1.bes_ins_discipline_key_inkoop"
                        + " FROM bes_disc_params dp1"
                        + " WHERE dp1.bes_ins_discipline_key_inkoop IS NOT NULL)"
                      + " AND UPPER(sd.bes_srtdeel_nr) LIKE " + safe.quoted_sql_wild(p_bes_srtdeel_nr)
                      + " GROUP BY bes_srtdeel_nr"
                      + ", "+ lcl.xsql('sd.bes_srtdeel_omschrijving','sd.bes_srtdeel_key')
                      + ", bd.ins_discipline_key"
                      + ", "+ lcl.xsql('bd.ins_discipline_omschrijving','bd.ins_discipline_key')
                      + ", bes.getsrtdeelprijs(sd.bes_srtdeel_key, NULL)"
                      + ", bes_srtdeel_voorraadmax"
                      + ", bes_srtdeel_voorraadmin";

  var sql_from = sql_from_intern
               + " UNION ALL"
               + sql_from_extern;

  var sql = "SELECT bes_srtdeel_nr"
          + ", bes_srtdeel_omschrijving"
          + ", inkoop_disc"
          + ", disc_oms"
          + ", bes_srtdeel_prijs"
          + ", voorraadmax"
          + ", voorraadmin"
          + ", CASE"
            + " WHEN (COALESCE(SUM(aantal_extern_besteld), 0) + COALESCE(SUM(aantal_extern_geleverd), 0) - COALESCE(SUM(aantal_intern), 0)) < voorraadmin"
            + " THEN voorraadmax - (COALESCE(SUM(aantal_extern_besteld), 0) + COALESCE(SUM(aantal_extern_geleverd), 0)) - COALESCE(SUM(aantal_intern), 0)"
            + " ELSE NULL"
            + " END tebestellen"
          + ", SUM(aantal_intern) aantal_uit"
          + ", SUM(aantal_extern_geleverd) aantal_in"
          + ", SUM(aantal_extern_besteld) aantal_besteld"
          + ", SUM(aantal_extern_geleverd) - COALESCE(SUM(aantal_intern), 0) voorraad"
          + " FROM(" + sql_from + ")"
          + " GROUP BY bes_srtdeel_nr"
          + ", bes_srtdeel_omschrijving"
          + ", inkoop_disc"
          + ", disc_oms"
          + ", bes_srtdeel_prijs"
          + ", voorraadmax"
          + ", voorraadmin";
          //+ " ORDER BY bes_srtdeel_nr";

  oRs = Oracle.Execute(sql);

  if (!oRs.eof)
  {
    // Item is aanwezig
    return oRs("voorraad").value;
    //TODO: Andere gegevens zouden ook meegeven kunnen worden
  }
  else
  {
    // Item is niet aanwezig
    return 0;
  }
}
%>
<% ASPPAGE_END(); %> 
