<% /*
    $Revision$
    $Id$

    File:           model_persons.inc

    Description:    Perslid model.
    Parameters:
    Context:

    - Notes:        - We ondersteunen nog alleen opvragen van je eigen gegevens
                    - Standaard voegen we de gegevens van de hoofdwerkplek toe
                    - Ooit doen we er nog een include bij van alle werkplekken.
*/

%>
<!-- #include file="../Shared/discxalg3d.inc"-->
<!-- #include file="model_tracking.inc"-->
<!-- #include file="model_fac_gebruikersgroep.inc" -->
<%

function fnApiToken(oRs, field, model)
{
    var hmac = protectHMAC.create(oRs("prs_perslid_oslogin").Value, { sleutel: oRs("prs_perslid_apikey").Value });
    return hmac;
}
model_persons =
{
    table: "prs_perslid",
    primary: "prs_perslid_key",
    records_name: "persons",
    record_name: "person",
    fields: {"id"        : { dbs: "prs_perslid_key",       typ: "key",           filter: "exact"},
             "lastname"  : { dbs: "prs_perslid_naam",      label: L("lcl_prs_person_name"),     typ: "varchar",       filter: "like"},
             "firstname" : { dbs: "prs_perslid_voornaam",  label: L("lcl_prs_person_voornaam"), typ: "varchar",       filter: "like"},
             "mail"      : { dbs: "prs_perslid_email",     label: L("lcl_prs_person_email"),    typ: "varchar",       filter: "exact"},
             "login"     : { dbs: "prs_perslid_oslogin",   label: L("lcl_prs_person_login"),    typ: "varchar",       filter: "exact"},
             "department": { dbs: "prs_afdeling_key",      label: L("lcl_prs_organisatie"),            typ: "key",           foreign: "prs_afdeling"},
             "location"  : { dbs: "prs_v_werkplek_gegevens.alg_locatie_key",    typ: "key", foreign: "alg_locatie", filter: "exact"},
             "building"  : { dbs: "prs_v_werkplek_gegevens.alg_gebouw_key",     typ: "key", foreign: "alg_gebouw" },
             "floor"     : { dbs: "prs_v_werkplek_gegevens.alg_verdieping_key", typ: "key", foreign: "alg_verdieping" },
             "room"      : { dbs: "prs_v_werkplek_gegevens.alg_ruimte_key",     typ: "key", foreign: "alg_ruimte" }
            },

    includes: { "tracking": {
                      model: new model_tracking(['perslid']),
                      joinfield: "fac_tracking_refkey"
                },
                "authorization": {
                    "model": new model_fac_gebruikersgroep(),
                    "joinfield": "user"
                }
              },

    REST_GET: function _GET(params)
        {
            //var urole = "fe"; // TODO: Moet echt niet ter zake doen
            //var autfunction = urole == "fe"? "WEB_ALGUSE" : "WEB_ALGMAN";
            //params.authparams = user.checkAutorisation(autfunction, null, null, true); // pessimistisch
            if (app_user_key > 0) // Alleen App's mogen dit opvragen. TODO: Ook echt authorisatie controleren?
            {
                if (user.prs_perslid_apikey() && user.oslogin())
                {
                    this.fields["authtoken"] = { dbs: "prs_perslid_apikey", typ: "varchar", val: fnApiToken };
                }
            }

            var query = api2.sqlfields(params, model_persons );
            query.tables.push("prs_v_werkplek_gegevens");
            query.tables.push("prs_v_hoofdperslidwerkplek");
            query.wheres.push("prs_v_hoofdperslidwerkplek.prs_perslid_key(+) = prs_perslid.prs_perslid_key");
            query.wheres.push("prs_v_hoofdperslidwerkplek.prs_werkplek_key = prs_v_werkplek_gegevens.prs_werkplek_key(+)");

            if (!user.checkAutorisation("WEB_PRSSYS", true)) // PAS OP: Dit verwacht AAFM-API niet!!!
                query.wheres.push("prs_perslid.prs_perslid_key = " + user_key); // Altijd fe vooralnog, TODO: Add authorization
            else
                query.wheres.push("prs_perslid.prs_perslid_verwijder IS NULL");

            var wheres = api2.sqlfilter(params, model_persons);
            query.wheres = query.wheres.concat(wheres);

            var sql = "SELECT " + query.selects.join(", ")
                    + "  FROM " + query.tables.join(", ")
                    + " WHERE " + query.wheres.join(" AND " )
                    + " ORDER BY prs_perslid.prs_perslid_naam, prs_perslid.prs_perslid_voornaam, prs_perslid_key";
            if (query.orderbys.length)
                sql += ", " + query.orderbys.join(", ");

            var json = api2.sql2json (params, sql, model_persons );

            return json;
        },
    PUT: function (params) /* update building */
    {
            // Nog niet ondersteund
    },
    POST: function (params) /* new building */
    {
            // Nog niet ondersteund
    },
    DELETE: function (params) /* delete building */
    {
            // Nog niet ondersteund
    }
}
%>