<%
 /*
    $Revision$
    $Id$

    File:               prs.inc
    Description:        Ophalen van prs om client-side allerlei interactie te bieden
    Parameters:         prs_perslid_key

    Context:            get_prs_info_ajax.asp
                        diverse andere bestanden die ook dynamisch info ophalen via get_prs_info_ajax.asp
    Note:

*/ %>

<%
prs =
{ // params.withWP: voeg werkplek info to.
  prs_perslid: function _prs_perslid(prs_perslid_key, params)
  {
    params = params || {};
    var prs = new Perslid(prs_perslid_key);

    var result = { prs_perslid_key          : prs_perslid_key,
                   prs_afdeling_key         : prs.prs_afdeling_key(),
                   prs_afdeling_naam        : prs.afdeling().naam(),
                   naam                     : prs.naam(),
                   prs_perslid_geslacht     : prs.prs_perslid_geslacht(),
                   prs_perslid_telefoonnr   : prs.prs_perslid_telefoonnr(),
                   fac_profiel_key          : prs.fac_profiel_key(),
                   prs_perslid_email        : prs.prs_perslid_email(),
                   kostenplaats_key         : prs.afdeling().prs_kostenplaats_key()||-1,
                   kpn_string               : prs.kpn_string(),
                   kpn_module               : prs.afdeling().kpn_module(),
                   prs_perslid_mobiel       : prs.prs_perslid_mobiel(),
                   prs_perslid_achternaam   : prs.prs_perslid_achternaam(),
                   prs_perslid_tussenvoegsel: prs.prs_perslid_tussenvoegsel(),
                   prs_perslid_voorletters  : prs.prs_perslid_voorletters(),
                   prs_perslid_voornaam     : prs.prs_perslid_voornaam(),
                   prs_perslid_titel        : prs.prs_perslid_titel(),
                   prs_srtperslid           : prs.prs_srtperslid(),
                   alg_onroerendgoed_keys   : prs.alg_onroerendgoed_keys(),
                   alg_onroerendgoed_type   : prs.alg_onroerendgoed_type(),
                   prs_perslid_bezetdatum   : prs.prs_perslid_bezetdatum()
                 };
    if (params.withWP)
    {
      result.werkplekken = [];
      var i;
      for (i = 0; i < prs.werkplekken().length; i++)
      {
        var wp = prs.werkplekken()[i];
        if (!params.onlyBezoekbaar || (params.onlyBezoekbaar && wp.alg_gebouw_bezoekbaar()))
          //result.prs_perslidwerkplek_bezetting = { prs_perslidwerkplek_bezetting: prs.prs_perslidwerkplek_bezetting()};
          result.werkplekken.push({ prs_werkplek_key: wp.prs_werkplek_key(),
                                    alg_locatie_key: wp.alg_locatie_key(),
                                    alg_locatie_naam: wp.alg_locatie_naam(),
                                    alg_locatie_string: wp.alg_locatie_string(),
                                    alg_gebouw_key: wp.alg_gebouw_key(),
                                    alg_gebouw_naam: wp.alg_gebouw_naam(),
                                    alg_gebouw_code: wp.alg_gebouw_code(),
                                    prs_kostenplaats_key: wp.prs_kostenplaats_key() || -1, // van het gebouw
                                    kpn_naam: wp.kpn_naam(), // van het gebouw
                                    alg_verdieping_key: wp.alg_verdieping_key(),
                                    alg_verdieping_naam: wp.alg_verdieping_naam(),
                                    alg_verdieping_code: wp.alg_verdieping_code(),
                                    alg_ruimte_key: wp.alg_ruimte_key(),
                                    alg_ruimte_naam: wp.alg_ruimte_naam(),
                                    naam: wp.naam(),
                                    isVirtueel: wp.isVirtueel(),
                                    prs_werkplek_volgnr: wp.prs_werkplek_volgnr(),
                                    prs_werkplek_aanduiding: wp.prs_werkplek_aanduiding(),
                                    prs_perslidwerkplek_bezetting: wp.bezetting(),
                                    prs_perslidwerkplek_key: wp.prs_perslidwerkplek_key(),
                                    alg_gebouw_bezoekbaar: wp.alg_gebouw_bezoekbaar()
                                  }
                                 )
      }
    }
    var wplocatie_key = -1;
    if (params.withAflever)
    {
      var wp = prs.werkplekken();
      for (i in wp)
      {
        var wp0 = prs.werkplekken()[i];
        if (!wp0.isVirtueel())
        {
            result.afleverruimte = wp0.deliveryPlace();
            wplocatie_key = wp0.alg_locatie_key();
            break; // stop bij de eerste
        }
      }
      // Nu Afleveradres bepalen
      // 1) Afleveradres van de persoon.
      // 2) Afleveradres van de persoon zijn/haar afdeling.
      // 3) Afleveradres van het gebouw van de persoon zijn/haar werkplek.
      // 4) Afleveradres van het bedrijf van de persoon zijn/haar afdeling.
      // 5) Afleveradres behorend bij de locatie van de persoon zijn/haar werkplek (via mld_adres tabel)
      if (prs.mld_adres_key())
          result.mld_adres_key = prs.mld_adres_key();
      else if (prs.afdeling().mld_adres_key())
          result.mld_adres_key = prs.afdeling().mld_adres_key();
      else if (wp.length > 0 && prs.gebouw().mld_adres_key())
           result.mld_adres_key = prs.gebouw().mld_adres_key();
      else
      {
        var sql = "SELECT mld_adres_key_lev FROM prs_bedrijf"
                + " WHERE prs_bedrijf_key = " + prs.afdeling().prs_bedrijf_key();
        var oRs = Oracle.Execute(sql);
        result.mld_adres_key = oRs("mld_adres_key_lev").Value;

        if (!result.mld_adres_key && wplocatie_key > 0)
        {
          var sql = "SELECT COUNT(*) aantal_adressen"
                  + "     , MIN(ma.mld_adres_key) mld_adres_key"
                  + "  FROM mld_adres ma"
                  + " WHERE ma.alg_locatie_key = " + wplocatie_key
                  + "   AND ma.mld_adres_afleveradres = 1"
                  + "   AND ma.mld_adres_verwijder IS NULL";
          var oRs = Oracle.Execute(sql);
          // Alleen als er 1 afleveradres op de betreffende locatie is kan ik een goede keuze maken.
          // Zijn er meerdere, dan zijn er waarschijnlijk meerdere gebouwen. Dan weet ik niet welke ik moet kiezen.
          if (oRs("aantal_adressen").Value == 1)
            result.mld_adres_key = oRs("mld_adres_key").Value;
          oRs.Close();
        }
      }
      if (result.mld_adres_key)
      {
        var oRs = Oracle.Execute("SELECT mld_adres_naam FROM mld_adres WHERE mld_adres_key = " + result.mld_adres_key);
        result.mld_adres_naam = oRs("mld_adres_naam").Value;
        oRs.Close();
      }
    };
    if (params.withWL)
    { // werklocatie
      // LET OP: prs.gebouw({withcurrent: true}) wordt misschien niet meer uitgevoerd omdat hierboven prs.gebouw() misschien al is uitgevoerd.
      // Daarom prsWL hier gedefinieerd voor werklocaties.
      var prsWL = new Perslid(prs_perslid_key);
      result.werklocatie = {};
      var wl_key = prsWL.alg_locatie_key({withcurrent: true})
      if (wl_key > 0)
      {
        var wl = prsWL.locatie({withcurrent: true});
        result.werklocatie = {alg_locatie_key: wl.alg_locatie_key(),
                              alg_locatie_naam: wl.naam(),
                              alg_locatie_string: wl.locatie_string(),
                              alg_locatie_code: wl.alg_locatie_code()
                             };
      }
      var wg_key = prsWL.alg_gebouw_key({withcurrent: true})
      if (wg_key > 0)
      {
        var wg = prsWL.gebouw({withcurrent: true});
        result.werklocatie.alg_gebouw_key = wg.alg_gebouw_key();
        result.werklocatie.alg_gebouw_naam = wg.naam();
        result.werklocatie.alg_gebouw_code = wg.alg_gebouw_code();
        result.werklocatie.alg_gebouw_omschrijving = wg.alg_gebouw_omschrijving();
        result.werklocatie.alg_gebouw_kpn_naam = wg.kpn_naam(); // van het gebouw
        result.werklocatie.alg_gebouw_kp_key = wg.prs_kostenplaats_key(); // van het gebouw
        result.werklocatie.alg_gebouw_mld_adres_key = wg.mld_adres_key(); // van het gebouw
      }
      var wv_key = prsWL.alg_verdieping_key({withcurrent: true})
      if (wv_key > 0)
      {
        var wv = prsWL.verdieping({withcurrent: true});
        result.werklocatie.alg_verdieping_key = wv.alg_verdieping_key();
        result.werklocatie.alg_verdieping_naam = wv.naam();
        result.werklocatie.alg_verdieping_code = wv.alg_verdieping_code();
      }
      var wr_key = prsWL.alg_ruimte_key({withcurrent: true})
      if (wr_key > 0)
      {
        var wr = prsWL.ruimte({withcurrent: true});
        result.werklocatie.alg_ruimte_key = wr.alg_ruimte_key();
        result.werklocatie.alg_ruimte_naam = wr.naam();
        result.werklocatie.alg_ruimte_nr = wr.alg_ruimte_nr();
      }
      var ww_key = prsWL.prs_werkplek_key({withcurrent: true})
      if (ww_key > 0)
      {
        var ww = prsWL.werkplek({withcurrent: true});
        result.werklocatie.prs_werkplek_key = ww.prs_werkplek_key();
        result.werklocatie.prs_werkplek_naam = ww.naam();
        result.werklocatie.prs_werkplek_volgnr = ww.prs_werkplek_volgnr();
        result.werklocatie.prs_werkplek_aanduiding = ww.prs_werkplek_aanduiding();
        result.werklocatie.prs_werkplek_bezetting = ww.bezetting();
      }
      result.werklocatie.aanduiding = (!result.werklocatie.alg_gebouw_key? result.werklocatie.alg_locatie_code : "")
                                    + (result.werklocatie.alg_gebouw_key? result.werklocatie.alg_gebouw_code : "")
                                    + (result.werklocatie.alg_verdieping_key? "-" + result.werklocatie.alg_verdieping_code : "")
                                    + (result.werklocatie.alg_ruimte_key? "-" + result.werklocatie.alg_ruimte_nr: "")
                                    + (result.werklocatie.prs_werkplek_key? "/" + result.werklocatie.prs_werkplek_volgnr: "");
    }
    if (params.withPhoto)
    {
        result.photomap = prs.photoinfo().photomap;
        result.photopath = prs.photoinfo().photopath;
        result.photopaththumb = prs.photoinfo().photopaththumb;
    }

    if (params.withProfiel_fordisc>0) // withProfiel_fordisc is een disc_key
    {
        var sql = "SELECT prs.getprofiellimiet(" + prs_perslid_key + ", " + params.withProfiel_fordisc +") limiet FROM DUAL";
        var oRs = Oracle.Execute(sql);

        result.profiel_limiet = oRs("limiet").Value || "";  // zou alsnog leeg kunnen zijn
        oRs.Close();
    }

    return result;
  },

  // Levert de prs_perslid_key op van de budgethouder van een kostenplaats.
  // Kijkt dus niet naar limiet oid, gewoon de budgethouder zoeken volgens de door ons gedefinieerde regels.
  // Indien geen verantwoordelijke wordt gevonden levert de functie -1 op.
  getKpVerantwoordelijke: function(kp_key, totaalbedrag, prs_key)
  {
    // Kan prs_key (aanmaker) zelf fiatteren?: true:  totaalbedrag <= can_selfapprove
    //                                         false  totaalbedrag > can_selfapprove => prs_key als exclude key meegeven.
    var sql = "SELECT prs.getkpverantwoordelijke (" + kp_key + ", " + S("prs_approvemethod") + ", " + (prs_key && prs_key > 0 && totaalbedrag > S("can_selfapprove")? prs_key : -1) + ") FROM DUAL";
    return Oracle.Execute(sql)(0).Value;
  },

  // zelfde, maar nu als ik expliciet iemand uit wil sluiten, bijvoorbeeld een budgethouder met te laag profiel
  // en moet dan de kpngroepverantwoordelijke opleveren
  getKpVerantwoordelijkeExcept: function(kp_key, p_key)
  {
    var sql = "SELECT prs.getkpverantwoordelijke (" + kp_key + ", " + S("prs_approvemethod") + ", " + p_key + ") FROM DUAL";
    return Oracle.Execute(sql)(0).Value;
  },

  getLocationSql: function(loc_key, alias)
  {
    var sql = " (prs_bedrijfdienstlocatie.alg_locatie_key IN (" + loc_key + ")"
            + "     OR prs_bedrijfdienstlocatie.alg_locatie_key IS NULL"
            + "     OR prs_bedrijfdienstlocatie.alg_gebouw_key IN (SELECT alg_gebouw_key"
            + "                                                      FROM alg_gebouw"
            + "                                                     WHERE alg_locatie_key IN (" + loc_key + ")))";
    return sql;
  },

  exceeds_budgetkps: function(kpg_key, bedrag)
  {
    sql = "SELECT SUM(k.prs_kostenplaats_limiet) totaal_kp_budget"
        + "  FROM prs_kostenplaatsgrp kpg"
        + "     , prs_kostenplaats k"
        + " WHERE kpg.prs_kostenplaatsgrp_key = k.prs_kostenplaatsgrp_key"
        + "   AND kpg.prs_kostenplaatsgrp_key = " + kpg_key;
    oRs = Oracle.Execute(sql);
    var totaal_kp_budget = oRs("totaal_kp_budget").Value || 0;
    oRs.Close();

    return bedrag < totaal_kp_budget;
  },

  exceeds_budgetkpg: function(kpg_key, kp_key, bedrag)
  {
    var sql = "SELECT kpg.prs_kostenplaatsgrp_limiet kpg_limiet"
            + "  FROM prs_kostenplaats k"
            + "     , prs_kostenplaatsgrp kpg"
            + " WHERE kpg.prs_kostenplaatsgrp_key(+) = k.prs_kostenplaatsgrp_key"
            + " AND k.prs_kostenplaatsgrp_key = " + kpg_key;
    oRs = Oracle.Execute(sql);
    var kpg_limiet;
    if (!oRs.eof)
      kpg_limiet = oRs("kpg_limiet").Value;
    if (kpg_limiet == null)  return false; // Geen kostenplaatsgroep limiet. Dus altijd goed.

    sql = "SELECT SUM(k.prs_kostenplaats_limiet) totaal_kp_budget"
        + "  FROM prs_kostenplaatsgrp kpg"
        + "     , prs_kostenplaats k"
        + " WHERE kpg.prs_kostenplaatsgrp_key(+) = k.prs_kostenplaatsgrp_key"
        + (kp_key > 0
          ? "   AND k.prs_kostenplaats_key <> " + kp_key
          : "")
        + "   AND kpg.prs_kostenplaatsgrp_key = " + kpg_key;
    oRs = Oracle.Execute(sql);
    var totaal_kp_budget = oRs("totaal_kp_budget").Value || 0;
    oRs.Close();

    return kpg_limiet < (totaal_kp_budget + bedrag);
  },

  prs_bedrijfinfo: function _prs_bedrijfinfo(prs_bedrijf_key)
  {
    var sql = "SELECT b.prs_bedrijf_key"
            + "     , b.prs_bedrijf_naam"
            + "     , b.prs_bedrijf_naam_upper"
            + "     , b.prs_bedrijf_post_adres"
            + "     , b.prs_bedrijf_post_postcode"
            + "     , b.prs_bedrijf_post_plaats"
            + "     , b.prs_bedrijf_post_land"
            + "     , b.prs_bedrijf_bezoek_adres"
            + "     , b.prs_bedrijf_bezoek_postcode"
            + "     , b.prs_bedrijf_bezoek_plaats"
            + "     , b.prs_bedrijf_bezoek_land"
            + "     , b.prs_bedrijf_telefoon"
            + "     , b.prs_bedrijf_fax"
            + "     , b.prs_bedrijf_telefoon2"
            + "     , b.prs_bedrijf_contact_persoon"
            + "     , b.prs_bedrijf_contact_telefoon"
            + "     , b.prs_bedrijf_contact_fax"
            + "     , b.prs_bedrijf_opmerking"
            + "     , b.prs_bedrijf_opmerking2"
            + "     , b.prs_bedrijf_uurloon"
            + "     , b.prs_leverancier_nr"
            + "     , b.prs_overeenkomst_nr"
            + "     , b.prs_overeenkomst_datum"
            + "     , b.prs_bedrijf_aanmaak"
            + "     , b.prs_bedrijf_verwijder"
            + "     , b.prs_bedrijf_leverancier"
            + "     , b.prs_bedrijf_uitvoerende"
            + "     , b.prs_bedrijf_contract"
            + "     , b.prs_bedrijf_intern"
            + "     , b.prs_bedrijf_huurder"
            + "     , b.prs_bedrijf_email"
            + "     , b.prs_bedrijf_image_loc"
            + "     , b.prs_bedrijf_details_loc"
            + "     , b.mld_adres_key_lev"
            + "     , b.mld_adres_key_fac"
            + "     , b.prs_bedrijf_ingids"
            + "     , b.prs_bedrijf_xmlcatalogus_loc"
            + "     , b.prs_bedrijf_bes_limiet"
            + "     , b.prs_bedrijf_bes_kosten"
            + "     , b.fin_btwtabel_key"
            + "     , b.prs_bedrijf_bes_factor"
            + "     , b.prs_bedrijf_order_confirm"
            + "     , b.prs_bedrijf_bezoeker"
            + "     , b.prs_bedrijf_t_uitvoertijd.tijdsduur"
            + "     , b.prs_bedrijf_t_uitvoertijd.eenheid"
            + "     , b.prs_relatietype_key"
            + "  FROM prs_bedrijf b"
            + " WHERE b.prs_bedrijf_key = " + prs_bedrijf_key
    var oRs = Oracle.Execute(sql);

    var result = { key: oRs("prs_bedrijf_key").Value,
                   naam: oRs("prs_bedrijf_naam").Value,
                   naam_upper: oRs("prs_bedrijf_naam_upper").Value,
                   post_adres: oRs("prs_bedrijf_post_adres").Value,
                   post_postcode: oRs("prs_bedrijf_post_postcode").Value,
                   post_plaats: oRs("prs_bedrijf_post_plaats").Value,
                   post_land: oRs("prs_bedrijf_post_land").Value,
                   bezoek_adres: oRs("prs_bedrijf_bezoek_adres").Value,
                   bezoek_postcode: oRs("prs_bedrijf_bezoek_postcode").Value,
                   bezoek_plaats: oRs("prs_bedrijf_bezoek_plaats").Value,
                   bezoek_land: oRs("prs_bedrijf_bezoek_land").Value,
                   telefoon: oRs("prs_bedrijf_telefoon").Value,
                   fax: oRs("prs_bedrijf_fax").Value,
                   telefoon2: oRs("prs_bedrijf_telefoon2").Value,
                   contact_persoon: oRs("prs_bedrijf_contact_persoon").Value,
                   contact_telefoon: oRs("prs_bedrijf_contact_telefoon").Value,
                   contact_fax: oRs("prs_bedrijf_contact_fax").Value,
                   opmerking: oRs("prs_bedrijf_opmerking").Value,
                   opmerking2: oRs("prs_bedrijf_opmerking2").Value,
                   uurloon: oRs("prs_bedrijf_uurloon").Value,
                   prs_leverancier_nr: oRs("prs_leverancier_nr").Value,
                   prs_overeenkomst_nr: oRs("prs_overeenkomst_nr").Value,
                   prs_overeenkomst_datum: oRs("prs_overeenkomst_datum").Value!=null?new Date(oRs("prs_overeenkomst_datum").Value):null,
                   aanmaak: oRs("prs_bedrijf_aanmaak").Value!=null?new Date(oRs("prs_bedrijf_aanmaak").Value):null,
                   verwijderd: oRs("prs_bedrijf_verwijder").Value != null,
                   leverancier: oRs("prs_bedrijf_leverancier").Value,
                   uitvoerende: oRs("prs_bedrijf_uitvoerende").Value,
                   contract: oRs("prs_bedrijf_contract").Value,
                   intern: oRs("prs_bedrijf_intern").Value,
                   huurder: oRs("prs_bedrijf_huurder").Value,
                   email: oRs("prs_bedrijf_email").Value,
                   image_loc: oRs("prs_bedrijf_image_loc").Value,
                   details_loc: oRs("prs_bedrijf_details_loc").Value,
                   mld_adres_key_lev: oRs("mld_adres_key_lev").Value,
                   mld_adres_key_fac: oRs("mld_adres_key_fac").Value,
                   ingids: oRs("prs_bedrijf_ingids").Value,
                   xmlcatalogus_loc: oRs("prs_bedrijf_xmlcatalogus_loc").Value,
                   bes_limiet: oRs("prs_bedrijf_bes_limiet").Value,
                   bes_kosten: oRs("prs_bedrijf_bes_kosten").Value,
                   fin_btwtabel_key: oRs("fin_btwtabel_key").Value,
                   bes_factor: oRs("prs_bedrijf_bes_factor").Value,
                   order_confirm: oRs("prs_bedrijf_order_confirm").Value,
                   bezoeker: oRs("prs_bedrijf_bezoeker").Value,
                   uitvoertijd: oRs("prs_bedrijf_t_uitvoertijd.tijdsduur").Value? oRs("prs_bedrijf_t_uitvoertijd.tijdsduur").Value : "",
                   uitvoertijd_eenheid: oRs("prs_bedrijf_t_uitvoertijd.eenheid").Value || 'D',
                   prs_relatietype_key: oRs("prs_relatietype_key").Value
                 };
    oRs.Close();

    return result;
  },

  canWriteAfdeling: function(pafdeling_key, autfunction)
  {
    var authparams = user.checkAutorisation(autfunction);

    if (authparams.PRSwritelevel <= -1)
    {
    return true;
    }
    else if (authparams.PRSwritelevel == 0)
    {
      var sql = "SELECT a.prs_afdeling_key"
              + "  FROM prs_v_afdeling a "
        	    + " WHERE a.prs_bedrijf_key = " + user.afdeling().prs_bedrijf_key()
              + "   AND prs_afdeling_key = " + pafdeling_key;
      var oRs = Oracle.Execute(sql);
      var canWriteAfd = (!oRs.eof);
      oRs.Close();
      return canWriteAfd;
    }
    else
    {
      var sql = "SELECT prs_afdeling_key FROM prs_v_afdeling_familie a"
              + " WHERE a.prs_afdeling_elder_key IN"
              + "      (SELECT aa.prs_afdeling_elder_key"
              + "         FROM prs_v_afdeling_familie aa"
              + "        WHERE aa.prs_afdeling_key = " + user.prs_afdeling_key()
              + "          AND aa.niveau = " + authparams.PRSwritelevel + ")";

      var oRs = Oracle.Execute(sql);
      var canWriteAfd = (!oRs.eof);
      oRs.Close();
      return canWriteAfd;
    }
  },
  // oude shared/prsautlevel.inc
  checkAutorisation: function(prs_key)
  {
      // FSN#18265: user.func_enabled maakt geen uitzondering voor prs_key==-1
      //            maar wel voor prs_key==null. Daarom de vertaling
      //            (intrigeren: alg_key==-1 wordt er wel apart behandeld)
      var xfunc = user.func_enabled("PRS", null, null, prs_key>0?prs_key:null);
      if (xfunc.canWrite("WEB_PRSMAN"))
      {
        var result = xfunc.authparams("WEB_PRSMAN"); // Man telt zwaarder
      }
      else
      {
        if (xfunc.canWrite("WEB_PRSUSE"))
            var result = xfunc.authparams("WEB_PRSUSE");
        else
            var result = xfunc.authparams("WEB_PROFIL") || {};
      }

      result.readman  = xfunc.canRead("WEB_PRSMAN");
      result.writeman = xfunc.canWrite("WEB_PRSMAN");
      result.readuse  = xfunc.canRead("WEB_PRSUSE");
      result.writeuse = xfunc.canWrite("WEB_PRSUSE");
      result.readself = prs_key==user_key && xfunc.canRead("WEB_PROFIL");
      result.writeself= prs_key==user_key && xfunc.canWrite("WEB_PROFIL");

      result.writesys = user.checkAutorisation("WEB_PRSSYS", true)!=null;
      if (result.writesys)
          result.writetab = user.checkAutorisation("WEB_FACTAB", true)!=null;

      return result;
  },

  set_flag: function(prs_key, flagbit)
  {
    var sql = "UPDATE prs_perslid"
            + "   SET prs_perslid_flags = prs_perslid_flags + " + flagbit // Kan omdat we verderop afdwingen dat flag 0 was
            + " WHERE prs_perslid_key = " + prs_key
            + "   AND BITAND(prs_perslid_flags, " + flagbit + ") = 0";
    Oracle.Execute(sql);
  },
  clear_flag: function(prs_key, flagbit)
  {
    var sql = "UPDATE prs_perslid"
            + "   SET prs_perslid_flags = BITAND(prs_perslid_flags, 255-" + flagbit + ")"
            + " WHERE prs_perslid_key = " + prs_key
            + "   AND BITAND(prs_perslid_flags, " + flagbit + ") = " + flagbit;
    Oracle.Execute(sql);
  },

  // Bepaal of er notificaties aan staan die de gebruiker mag overrulen
  check4notis: function()
  {
    var sql = "SELECT SUM(BITAND(fac_srtnotificatie_mode, 1)) any1" // portal
            + "     , SUM(BITAND(fac_srtnotificatie_mode, 2)) any2" // email
            + "     , SUM(BITAND(fac_srtnotificatie_mode, 4)) any4" // sms
            + "     , SUM(BITAND(fac_srtnotificatie_mode, 8)) any8" // popup
            + "  FROM fac_srtnotificatie"
            + " WHERE fac_srtnotificatie_mode > 0"
            + "   AND fac_srtnotificatie_usermode > 0"; // Gebruiker kan overrulen
    var oRs = Oracle.Execute(sql);
    var result =
        {
            can1: (S("prs_personal_noti_options")&1) && oRs("any1").Value > 0,
            can2: (S("prs_personal_noti_options")&2) && oRs("any2").Value > 0,
            can4: (S("prs_personal_noti_options")&4) && oRs("any4").Value > 0 && S("puo_uid") && S("puo_pwd"),
            can8: (S("prs_personal_noti_options")&8) && oRs("any8").Value > 0
        }
    oRs.Close();
    result.canany = (result.can1 || result.can2 || result.can4 || result.can8);

    return result;
  }
}

 %>
