<% /*
    $Revision$
    $Id$

    File:        mobile.inc
    Description: Generieke functies die door elke mobile pagina gebruikt (kunnen) worden.
    Parameters:
    Context:     In ELK mobile asp bestand
    Note:        Dus gebruik met mate

*/ %>
<!--#include file="../Shared/status.inc"-->
<%
if (S("mobile_enabled") != 1)
  shared.simpel_page("Mobile module not enabled."); // Wel betalen he!

if (S("mobile_guest_user") > -1 && (typeof Session("user_key") == "undefined" || Session("user_key") == "-1"))
  tryLogin(S("mobile_guest_user"), null, { noPassword: true });

// Uses S("mobile_alg_level");  // L, G of V

// Het idee is dat ik heel gedetailleerd kan vastleggen waar ik ben (achter deze PC)
// maar soms ook wat globaler (in dit gebouw). Het is aan de betreffende functionaliteit
// om te bepalen tot welk niveau ik deze kennis gebruik. Dus:
// Als ik op een werkplek zit moeten toch niet de meldingen in mijn ovz worden beperkt tot 1
// Verdieping is een goed defaultniveau, maar er is te configureren dat dat hoger ligt.

if (S("mobile_alg_level") == 'V' && user.alg_verdieping_key({withcurrent:true}) > -1)
{
  var CurrentPosition = new Gebouw(user.alg_gebouw_key({withcurrent:true})).alg_gebouw_omschrijving()+"/"+new Verdieping(user.alg_verdieping_key({withcurrent:true})).naam();
  var CurrentPositionMinus1 = new Gebouw(user.alg_gebouw_key({withcurrent:true})).alg_gebouw_omschrijving();
}
else if (S("mobile_alg_level") == 'G' && user.alg_gebouw_key({withcurrent:true}) > -1)
{
  var CurrentPosition = new Gebouw(user.alg_gebouw_key({withcurrent:true})).alg_gebouw_omschrijving();
  var CurrentPositionMinus1 = new Locatie(user.alg_locatie_key({withcurrent:true})).locatie_string()||"";
}
else
{
  var CurrentPosition = new Locatie(user.alg_locatie_key({withcurrent:true})).locatie_string()||"";
  var CurrentPositionMinus1 = "";
}

var mobile = {
    iamhere:
      function (plevel, pkey)
      {  // level is L,G,V,R
        var sql = "UPDATE prs_perslid "
                + "   SET alg_onroerendgoed_keys = " + pkey
                + "       , alg_onroerendgoed_type = "+safe.quoted_sql(plevel)
                + "       , prs_perslid_bezetdatum = SYSDATE"
                + " WHERE prs_perslid_key = " + user_key;

        Oracle.Execute(sql);
      },

    // Toon het nieuws specifiek voor deze locatie
    locationnews:
      function ()
      {
        // Nieuwsberichten die plaats gebonden zijn
        if (user.alg_locatie_key({withcurrent: true}) > -1)
        {  // Alleen als ik weet waar we zijn
          var sqln = "SELECT DISTINCT " + lcl.xsqla('fac_nieuws_titel', 'fac_nieuws_key')
                   + "     ," + lcl.xsqla('fac_nieuws_omschrijving', 'fac_nieuws_key')
                   + "     , fac_nieuws_key"
                   + "  FROM fac_nieuws n"
                   + " WHERE n.fac_nieuws_onrgoed_niveau = 'L'"
                   + "   AND n.fac_nieuws_onrgoed_key = " + user.alg_locatie_key({withcurrent: true})
                   + "   AND (n.fac_nieuws_van IS NULL OR SYSDATE >= n.fac_nieuws_van)"
                   + "   AND (n.fac_nieuws_tot IS NULL OR SYSDATE < n.fac_nieuws_tot)";

          if (user.alg_gebouw_key({withcurrent: true}) > -1) {  // Als ik het gebouw weet, doe ik het gebouwnieuws er ook bij
              sqln += " UNION "
                    + "SELECT DISTINCT " + lcl.xsqla('fac_nieuws_titel', 'fac_nieuws_key')
                    + "     , " + lcl.xsqla('fac_nieuws_omschrijving', 'fac_nieuws_key')
                    + "     , fac_nieuws_key"
                    + "  FROM fac_nieuws n "
                    + " WHERE n.fac_nieuws_onrgoed_niveau = 'G'"
                    + "   AND n.fac_nieuws_onrgoed_key = " + user.alg_gebouw_key({withcurrent: true})
                    + "   AND (n.fac_nieuws_van IS NULL OR SYSDATE >= n.fac_nieuws_van)"
                    + "   AND (n.fac_nieuws_tot IS NULL OR SYSDATE < n.fac_nieuws_tot)";
          }
          sqln += " ORDER BY fac_nieuws_key DESC";
          var oRs = Oracle.Execute(sqln);

          var i = 0;
          if (!oRs.eof)
          {
            %><ul data-role='listview' data-inset='true' data-theme='b' data-dividertheme='b'><%
          }
          while (!oRs.eof && i < S("portalmsgmax"))
          { // bewust geen safe.html gebruik hier, sta html toe??
            %><li><span class="n1"><%=oRs("fac_nieuws_titel").Value%></span><span class="n2"><br><%=oRs("fac_nieuws_omschrijving").Value%></span></li><%
            i++;
            oRs.moveNext();
          }
          if (i > 0)
          {
            %></ul><%
          }
          oRs.close();
        }
      },

    hasflexkenmerken:
      function (pnode, pkey)
      {
        return true;  // TODO placeholder function, to be defined
      },

    hastrackingpage:
      function (pnode, pkey)
      {
        // goedkopere versie van de trackingpage query, alleen maar om te checken
        // of er wel geen tracking is. Levert het aantal trackingregels op
        var res;
        var sql = "SELECT COUNT(*)"
                + "  FROM fac_tracking tr, fac_srtnotificatie str"
                + " WHERE tr.fac_srtnotificatie_key = str.fac_srtnotificatie_key"
                + "   AND tr.fac_tracking_refkey = " + pkey
                + "   AND str.fac_srtnotificatie_xmlnode = "+safe.quoted_sql(pnode)
                + "   AND tr.fac_tracking_datum > (SYSDATE - 365)";
        var oRs = Oracle.Execute(sql);
        res = oRs(0).Value;
        oRs.close();
        return res;
      },

    // Deze vereist wel de resultset: moet de aanroeper nu geinclude hebben, wat niet zo goed is
    trackingpage:
      function (pnode, pkey, psubject)
      {
        HEADER({title: L("lcl_history")+" "+psubject, back: false, nohome: true}) ;
        CONTENT_START();

        function fnTrackText (oRs)
        {
          var tekst = safe.html(oRs("fac_tracking_oms").Value);
          if (!tekst)
            tekst = status.getsrtnotificatietext(oRs("fac_srtnotificatie_code").Value);
          return "<div class='listbodytext'>" + tekst + "</div>";
        }

        var sql = "SELECT tr.fac_tracking_datum"
                + "     , tr.fac_tracking_key"
                + "     , str.fac_srtnotificatie_code"
                + "     , COALESCE(pf.prs_perslid_naam_friendly, '-') prs_perslid_naam_friendly"
                + "     , tr.fac_tracking_oms"
                + "  FROM fac_tracking tr, fac_srtnotificatie str, prs_v_perslid_fullnames_all pf"
                + " WHERE tr.fac_srtnotificatie_key = str.fac_srtnotificatie_key"
                + "   AND tr.prs_perslid_key = pf.prs_perslid_key (+)"
                + "   AND tr.fac_tracking_refkey = " + pkey
                + "   AND str.fac_srtnotificatie_xmlnode = "+safe.quoted_sql(pnode)
                + "   AND tr.fac_tracking_datum > (SYSDATE - 365)"
                + " ORDER BY tr.fac_tracking_datum DESC, tr.fac_tracking_key DESC ";


        var rst = new ResultsetTable({ sql: sql,
                                       keyColumn: "fac_tracking_key",
                                       ID: "trackingtable",
                                       headerColumn: "fac_tracking_datum",
                                       detailColumn: "prs_perslid_naam_friendly",
                                       subheaderColumn: fnTrackText,
                                       noPrint: true,
                                       noSearch: true,
                                       mobile: true,
                                       showAll: true,
                                       mfilter: false   //not yet supported
                                     });

        var cnt = rst.processResultset();

        CONTENT_END();
      },

    hasnotespage:
      function (pnode, pkey)
      {
        return true;  // TODO placeholder function, to be defined
      },

    notespage:
      function (pnode, pkey, psubject)
      {

        HEADER({title: L("lcl_mobile_notes")+" " + psubject, nohome: true});
        CONTENT_START();

        function fnNoteText (oRs)
        {
          return "<div class='listbodytext'>" + safe.html(oRs("note_omschrijving").Value) + "</div>";
        }

        switch (pnode)
        {
          case 'melding': sql = "SELECT n.mld_melding_note_aanmaak note_aanmaak"
                              + "     , n.mld_melding_note_key note_key"
                              + "     , pf.prs_perslid_key"
                              + "     , pf.prs_perslid_naam_friendly"
                              + "     , n.mld_melding_note_omschrijving note_omschrijving"
                              + "  FROM mld_melding_note n, prs_v_perslid_fullnames_all pf"
                              + " WHERE n.prs_perslid_key = pf.prs_perslid_key (+)"
                              + "   AND n.mld_melding_key = " + pkey
        //                      + (mfe.haveOnlyFErights? " AND mld_melding_note_flag = 1" : "")
                              + " ORDER BY n.mld_melding_note_aanmaak DESC";
                              break;
        }


        var rst = new ResultsetTable({ sql: sql,
                                       keyColumn: "note_key",
                                       ID: "notetable",
                                       headerColumn: "note_aanmaak",
                                       detailColumn: "prs_perslid_naam_friendly",
                                       subheaderColumn: fnNoteText,
                                       noPrint: true,
                                       noSearch: true,
                                       mobile: true,
                                       showAll: true
                                     });

          var cnt = rst.processResultset();

          CONTENT_END();
      },

    simpel_page:
      function(bodyhtml)
      {
        var showbuttons = (getQParamInt("qrc", 0) != 1 && getQParamInt("modal", 0) != 1)
        Response.Clear();
        Response.Write("<html><head>");
        FCLTMHeader.Generate({title:  "simpelpage" });
        Response.Write("</head>");
        Response.Write("<body class='simpelpage'>");
        PAGE_START({id: "simpelpage"});
        CONTENT_START();
        HEADER({title: "", back: showbuttons, home: showbuttons });
        Response.Write(bodyhtml);
        CONTENT_END();

        Response.Write("</body></html>");
        Response.End;
      }
};

%>
