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

    File:           axxerion.asp

    Description:    Conversie van xml naar json voor Axxerion koppeling
    Parameters:
    Context:

    Notes:          Informatie m.b.t. Axxerion API :
*/
var JSON_Result = true;
ANONYMOUS_Allowed = 1;
%>
<!-- #include file="../Shared/common.inc" -->
<!-- #include file="../Shared/save2db.inc" -->
<!-- #include file="../Shared/xml_converter.inc" -->
<%

    var ll = getQParamInt("logging", 0);
    if (ll > 0)
        __Logging = ll; // Voor de rest van dit bestand

    var glob = new ActiveXObject("Chilkat_9_5_0.Global");
    var success = glob.UnlockBundle(S("puo_chilkat_secret"));

    function connectAxxerion(methode, actie, params)
    {
        var axxerion_aut = params.info.api_key;
        var axxerion_url = params.info.base_url;
        var missing_id = false;
        var contenttype = "application/json";

        var axxerion_conn= { aut:         params.info.api_key
                          , baseurl:      params.info.base_url
                          , url:          ""
                          , contenttype:  "application/json"
                          , methode:      methode
                          , actie:        actie
                          };

        switch (actie) // Gebruik hier de parameter uit de aanroep. Axxerion_conn.actie wordt gewijzigd in attachment-POST door incident-POST en change-POST als params.info.boundary bestaat.
        {
            case "ticket":        axxerion_url = "/rest/functions/createupdate/ImportItem/";
                                    switch (methode)
                                    {
                                        case "POST":    axxerion_conn.url = axxerion_url;
                                                        break;
                                        default:        axxerion_conn.methode = "";
                                    }
                                    break;
        }
        if (missing_id)
        {
            __Logging = 3;
            __Logging = 3;
            __Log({"missing_id": { "paramsinfo": params.info
                                 , "connection": axxerion_conn
                                 }
                  });
        }
        else
        {
            __Log({"connectiondata": axxerion_conn});
        }
       
        axxerion_url = axxerion_conn.baseurl + axxerion_conn.url;
        __Log("URL to Axxerion: " + axxerion_url);
        __Log({"body_data": params.data});
        var errmsg = "";
        var status = -1;
        var data = {};
        if (axxerion_conn.methode != "" && !missing_id)
        {
            try
            {
                var http_request = new ActiveXObject("Chilkat_9_5_0.Http");
                http_request.ProxyDomain = "fclt-proxy.ssn.aareon.com";
                http_request.ProxyPort = "92";
                http_request.setRequestHeader("Authorization", axxerion_aut);
                http_request.setRequestHeader("Accept", "application/json");
                http_request.setRequestHeader("Content-Type", axxerion_conn.contenttype);

                var body_data = params.data;
                var body_data_str = JSON.stringify(body_data);
                var oCrypto = new ActiveXObject("SLNKDWF.Crypto");
                var body_data_64 = oCrypto.base64(body_data_str);

                var json_msg = { "stringValue": "webserviceFacilitor"
                               , "datasource": "facilitor"
                               , "clobMBValue": body_data_64
                               };

                __Log(json_msg);
                var resp = http_request.PostJson2(axxerion_url,"application/json", JSON.stringify(json_msg));
                __Log("Na Post");
                if (http_request.LastMethodSuccess == 0)
                {
                   __Log (http_request.LastErrorText);
                   errmsg = "Axxerion error. " + http_request.LastErrorText;
                }
                else
                {
                   __Log ("Response status code = " + resp.StatusCode);
                   status = resp.StatusCode;
                   jsonResponseStr = resp.BodyStr;
                   __Log (jsonResponseStr);
                    if (resp.BodyStr)
                    {
                        data = JSON.parse( resp.BodyStr);
                    }
                    else
                    {
                        data = {};
                    }
                }
            }
            catch (e)
            {
                errmsg = "Axxerion connection error: " + e.description;
            }
        }
        else
        {
            errmsg = (missing_id ? "unknown id in " : "No method found for executing ") + axxerion_url;
        }
        var connect_result = { status: status
                             , message: errmsg
                             , data: data
                             };
        if (missing_id)
        {
            __Log({"connect_result": connect_result});
        }
        return connect_result;
    }   // connectAxxerion

    function getResponseStatus(result)
    {
        var response_ok = "200,201,202,204,206";
        var resp_ticket = (result.ticket && (response_ok.indexOf(result.ticket.status) == -1) ? false : true);
        return (resp_ticket) ? 200 : 400;
    }

    function load_headerdata()
    {
        // Lees de xml-data uit de html-header.
        var xmlReq = Server.CreateObject("MSXML2.DOMDocument.6.0");
        xmlReq.load(Request);
        // Converteer de xml naar json-dataobject.
        var objreq = xmlToJson(xmlReq);
        return objreq.facilitor;
    }

    function update_mld(methode, actie, melding, params)
    {
        mld_key = melding.mld_melding_key || -1;
        if (params.ticket)
        {
            var opm = (methode == "POST" ? "Creating " : "Updating ") + actie + " Axxerion. Status: " + params.ticket.status  + (params.ticket.message.length != 0?" Message: " + params.ticket.message:"");
            shared.trackaction("#MLDTRK", mld_key, opm);
        }
    }

    // *************************************************************************
    __Log("*> Axxerion.api");
    var facilitor = load_headerdata();

    if (facilitor && facilitor.axxerion)
    {
        var obj_axxerion = facilitor.axxerion || {};
        //
        // Toevoegen van ticket

        // Deze log staat als commentaar omdat in deze JSON ook de base64 coded bijlage zit. Dat levert te veel logging op.
        //__Log(obj_axxerion);
        // We gaan alleen een bericht versturen als we een geldige methode hebben. We gebruiken de methode NONE om
        // aan te geven dat dit bericht niet verstuurd hoeft te worden. Dit is de mogelijkheid om
        // in de stylesheet aan te geven dat je geen bericht wilt versturen op deze notificatie.
        if (obj_axxerion.info.methode != 'NONE')
        {
            var axxerion_result = connectAxxerion(obj_axxerion.info.methode, obj_axxerion.info.actie, obj_axxerion);
            __Log(axxerion_result);
            if (axxerion_result.status != -1)
            {    // Nu kunnen de bijlagen verstuurd worden.
                //var attach_result = addAttachments(obj_axxerion, axxerion_result);

                var result = { ticket: axxerion_result
                             , attach: ""
                             };

                if (facilitor.melding)
                {
                    update_mld(obj_axxerion.info.methode, obj_axxerion.info.actie, facilitor.melding, result)
                }
                else
                {
                    var result = { ticket: { status: 600, message: "Onbekende melding" } };
                    __DoLog(facilitor);
                }
            }
            else
            {
                var result = { ticket: { status: 400, message: axxerion_result.message } };
                __DoLog(safe.html(result.ticket.message), "ff0000");
            }
        }
        else
        {
           var result = { ticket: { status: 200, message: "er hoeft geen bericht verstuurd te worden" } };
        }
        //
    }
    else
    {
        var result = { ticket: { status: 600, message: "geen axxerion data aanwezig" } };
        __DoLog(safe.html(result.ticket.message), "ff0000");
    }

    result.response_status = getResponseStatus(result);
    __Log({"result": result});
    __Log("*< Axxerion.api: " + result.response_status);
    Response.Status = result.response_status;
    //Response.Write(JSON.stringify(result));

ASPPAGE_END(); %>
