430 lines
21 KiB
PHP
430 lines
21 KiB
PHP
<% /*
|
|
$Revision$
|
|
$Id$
|
|
*/ %>
|
|
|
|
<%
|
|
bez =
|
|
{
|
|
getgebouwterrein_sql:
|
|
function (bez_afspraak_begin, bez_afspraak_eind, locatie_key)
|
|
{
|
|
// Wat zijn voor mij geldige terreinen?
|
|
// JGL: Onderstaande joint alg_v_aanwezigterreinsector terwijl die ook
|
|
// al in alg_v_allonrgoed_gegevens zit. Die heeft helaas
|
|
// t.prs_afdeling_key (nog) niet
|
|
|
|
var sql_terr = "SELECT alg_terreinsector_key"
|
|
+ " FROM alg_v_aanwezigterreinsector t WHERE 1=1";
|
|
var pafparams = user.checkAutorisation("WEB_BEZPAF", true);
|
|
var autlevel = 9;
|
|
if (pafparams)
|
|
{
|
|
autlevel = pafparams.PRSwritelevel;
|
|
}
|
|
if (autlevel == 9)
|
|
{
|
|
sql_terr += " AND t.prs_afdeling_key is null"; // efficient
|
|
}
|
|
else if (autlevel > 0)
|
|
{
|
|
sql_terr += " AND (t.prs_afdeling_key is null or t.prs_afdeling_key IN "
|
|
+ " (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 = " + autlevel + ")))";
|
|
}
|
|
else if (autlevel == 0)
|
|
{
|
|
sql_terr += " AND (t.prs_afdeling_key is null or t.prs_afdeling_key IN (SELECT a.prs_afdeling_key"
|
|
+ " FROM prs_v_afdeling a"
|
|
+ " WHERE a.prs_bedrijf_key = " + user.afdeling().prs_bedrijf_key() + " ))";
|
|
}
|
|
|
|
var preposttime = "(SELECT COALESCE(rdp.res_disc_params_preposttime, 0) / 24"
|
|
+ " FROM res_disc_params rdp"
|
|
+ " WHERE rdp.res_ins_discipline_key = " + S("vis_parking_key") + ")";
|
|
|
|
return " SELECT park.alg_type"
|
|
+ ", park.alg_gebouw_key"
|
|
+ ", park.gebouw_naam"
|
|
+ ", park.alg_terreinsector_key"
|
|
+ ", park.terreinsector_naam"
|
|
+ ", park.alg_onroerendgoed_omschrijving"
|
|
+ ", COUNT (park.alg_gebouw_key) aantalr"
|
|
+ ", COUNT (park.alg_terreinsector_key) aantalt"
|
|
+ ", COUNT (park.reserved) bezet"
|
|
+ ", CASE park.alg_type"
|
|
+ " WHEN 'R'"
|
|
+ " THEN COUNT (park.alg_gebouw_key) - COUNT (park.reserved)"
|
|
+ " ELSE COUNT (park.alg_terreinsector_key) - COUNT (park.reserved)"
|
|
+ " END vrij"
|
|
+ " FROM"
|
|
+ " (SELECT org.alg_type"
|
|
+ ", org.alg_gebouw_key"
|
|
+ ", org.alg_gebouw_code || ' ' || org.alg_gebouw_naam gebouw_naam"
|
|
+ ", org.alg_terreinsector_key"
|
|
+ ", org.alg_terreinsector_code || ' ' || org.alg_terreinsector_naam terreinsector_naam"
|
|
+ ", org.alg_onroerendgoed_omschrijving"
|
|
+ ", (SELECT MIN (rd.res_deel_key)"
|
|
+ " FROM res_v_aanwezigrsv_deel rd"
|
|
+ " WHERE d.res_deel_key = rd.res_deel_key"
|
|
+ " AND rd.res_rsv_deel_van BETWEEN TRUNC(" + bez_afspraak_begin.toSQL(true) + ")"
|
|
+ " AND " + bez_afspraak_eind.toSQL(true) + " - 1 / 1440 + " + preposttime
|
|
+ " AND rd.res_rsv_deel_tot BETWEEN"
|
|
+ " " + bez_afspraak_begin.toSQL(true) + " + 1 / 1440 - " + preposttime
|
|
+ " AND TRUNC(" + bez_afspraak_begin.toSQL(true) + ")" + " + 1"
|
|
+ " AND rd.res_rsv_deel_van < " + bez_afspraak_eind.toSQL(true) + " - 1 / 1440 + " + preposttime
|
|
+ " AND rd.res_rsv_deel_tot > " + bez_afspraak_begin.toSQL(true) + " + 1 / 1440 - " + preposttime
|
|
+ " AND d.res_discipline_key = " + S("vis_parking_key") + ") reserved"
|
|
+ " FROM res_v_aanwezigdeel d"
|
|
+ ", ins_deel id"
|
|
+ ", alg_v_allonrgoed_gegevens org"
|
|
+ " WHERE d.res_ins_deel_key = id.ins_deel_key"
|
|
+ " AND id.ins_alg_ruimte_key = org.alg_onroerendgoed_keys"
|
|
+ (locatie_key > -1
|
|
? " AND id.ins_alg_locatie_key = " + locatie_key
|
|
: "")
|
|
+ " AND (org.alg_type = 'R'"
|
|
+ " OR (org.alg_type = 'T' AND org.alg_terreinsector_key IN (" + sql_terr + ")))"
|
|
// Is de parkeerplaats reserveerbaar op de begindag. Meerdaagse parkeerplaatsen worden niet ondersteund.
|
|
// (bits & (2^(dow-1))) = (2^(dow-1))
|
|
+ " AND BITAND(d.res_deel_beschikbaar_bits,"
|
|
+ " POWER(2,"
|
|
+ " (fac.getweekdaynum(TRUNC(" + bez_afspraak_begin.toSQL(true) + ")) - 1))) ="
|
|
+ " POWER(2, (fac.getweekdaynum(TRUNC (" + bez_afspraak_begin.toSQL(true) + ")) - 1))"
|
|
+ " AND d.res_discipline_key = " + S("vis_parking_key") + ") park"
|
|
+ " GROUP BY park.alg_type"
|
|
+ ", park.alg_gebouw_key"
|
|
+ ", park.gebouw_naam"
|
|
+ ", park.alg_terreinsector_key"
|
|
+ ", park.terreinsector_naam"
|
|
+ ", park.alg_onroerendgoed_omschrijving"
|
|
+ " ORDER BY terreinsector_naam, gebouw_naam";
|
|
},
|
|
|
|
bez_prkinfo:
|
|
function(loc_key, bez_afspraak_begin, bez_afspraak_eind)
|
|
{
|
|
var gebtersql = bez.getgebouwterrein_sql(bez_afspraak_begin, bez_afspraak_eind, loc_key);
|
|
var oRs = Oracle.Execute(gebtersql);
|
|
|
|
var prk_bezet = 0;
|
|
var prk_vrij = 0;
|
|
var prk_array = [];
|
|
while (!oRs.eof)
|
|
{
|
|
prk_bezet += parseInt(oRs("bezet").Value, 10);
|
|
prk_vrij += parseInt(oRs("vrij").Value, 10);
|
|
var alg_type = oRs("alg_type").Value;
|
|
prk_array.push({key: (alg_type == "R"? oRs("alg_gebouw_key").Value : oRs("alg_terreinsector_key").Value),
|
|
naam: (alg_type == "R"? oRs("gebouw_naam").Value : oRs("terreinsector_naam").Value) + " [" + (parseInt(oRs("vrij").Value, 10) > 0? parseInt(oRs("vrij").Value, 10) + " - " + L("lcl_bez_vrij") : L("lcl_bez_vol")) + "]",
|
|
bezet: parseInt(oRs("bezet").Value, 10),
|
|
vrij: parseInt(oRs("vrij").Value, 10)
|
|
});
|
|
oRs.MoveNext();
|
|
}
|
|
result = {prk_aantal: prk_bezet + prk_vrij,
|
|
prk_bezet: prk_bezet,
|
|
prk_vrij: prk_vrij,
|
|
prk_array: prk_array};
|
|
|
|
return result;
|
|
},
|
|
|
|
deleteAfspraak:
|
|
function _deleteAfspraak(pAfspr_key)
|
|
{
|
|
var sql = "DELETE FROM bez_afspraak"
|
|
+ " WHERE bez_afspraak_key = " + pAfspr_key;
|
|
Oracle.Execute(sql);
|
|
},
|
|
|
|
// Verwijder afspraak als geen enkele bezoeker over.
|
|
cleanAfspraak:
|
|
function _cleanAfspraak(pAfspr_key)
|
|
{
|
|
var sql = "SELECT count(*)"
|
|
+ " FROM bez_bezoekers b"
|
|
+ " WHERE b.bez_afspraak_key = " + pAfspr_key;
|
|
var oRs = Oracle.Execute(sql);
|
|
|
|
var count_bez = oRs(0).Value;
|
|
|
|
var deleted = false;
|
|
if (count_bez == 0)
|
|
{
|
|
bez.deleteAfspraak(pAfspr_key);
|
|
deleted = true;
|
|
}
|
|
oRs.Close();
|
|
return deleted
|
|
},
|
|
|
|
deleteBezoekers:
|
|
function _deleteBezoekers(pBez_key, clean)
|
|
{
|
|
var lmessage;
|
|
// Gooi een bezoeker weg. Als het de enige is, dan wordt de
|
|
// afspraak ook verwijderd, anders niet
|
|
sql = "SELECT b.bez_afspraak_key"
|
|
+ " FROM bez_bezoekers b"
|
|
+ " WHERE b.bez_bezoekers_key = " + pBez_key;
|
|
oRs = Oracle.Execute(sql);
|
|
// Extra controle tbv nogmaals deleten van een zojuist gedelete
|
|
if (!oRs.eof)
|
|
{
|
|
var afspr_key = oRs(0).Value;
|
|
// delete parking place is done by database cascade constraint
|
|
sql = "DELETE FROM bez_bezoekers"
|
|
+ " WHERE bez_bezoekers_key = " + pBez_key;
|
|
Oracle.Execute(sql);
|
|
|
|
if (clean)
|
|
var afspr_deleted = bez.cleanAfspraak(afspr_key);
|
|
} else {
|
|
lmessage = L("lcl_bez_already_deleted");
|
|
}
|
|
return lmessage;
|
|
},
|
|
|
|
trackafspraakupdate:
|
|
// Let op: dit moet wellicht niet altijd (aangeroepen na save)
|
|
function (bez_key, ptxt)
|
|
{
|
|
shared.trackaction("BEZUPD", bez_key, ptxt);
|
|
},
|
|
|
|
func_enabled_parkeerplaats: // Wat mag ik op parkeerplaatsen?
|
|
function _func_enabled_parkeerplaats()
|
|
{
|
|
var authparams = user.checkAutorisation("WEB_BEZPRK", true);
|
|
return { canWritePrk: authparams && authparams.PRSwritelevel < 9 && authparams.ALGwritelevel < 9 }
|
|
},
|
|
|
|
bez_afspraak_info:
|
|
function _bez_afspraakinfo(afspr_key)
|
|
{
|
|
var sql = "SELECT ba.prs_perslid_key invoerder_key"
|
|
+ " , ba.bez_afspraak_gastheer gastheer"
|
|
+ " , ba.bez_afspraak_telefoonnr"
|
|
+ " , ba.bez_afspraak_datum"
|
|
+ " , ba.bez_afspraak_eind"
|
|
+ " , ba.bez_actie_key actie_key"
|
|
+ " , ba.bez_afspraak_ruimte"
|
|
+ " , ba.bez_afspraak_opmerking"
|
|
+ " , " + lcl.xsqla('x.bez_actie_omschrijving', 'x.bez_actie_key')
|
|
+ " , ba.alg_locatie_key locatie_key"
|
|
+ " , ba.alg_onrgoed_keys alg_onrg_key"
|
|
+ " , ba.bez_afspraak_host_key gastheer_key"
|
|
+ " , ba.bez_afspraak_contact_key contact_key"
|
|
+ " , ba.res_rsv_ruimte_key"
|
|
+ " , " + S("prs_pers_string") + " aanvrager"
|
|
+ " , rrr.res_reservering_key"
|
|
+ " , rrr.res_rsv_ruimte_volgnr"
|
|
+ " , rrr.res_rsv_ruimte_omschrijving"
|
|
+ " , rr.res_ruimte_extern_id"
|
|
+ " FROM bez_afspraak ba"
|
|
+ " , prs_perslid p"
|
|
+ " , bez_actie x"
|
|
+ " , res_rsv_ruimte rrr"
|
|
+ " , res_ruimte_opstelling ro"
|
|
+ " , res_ruimte rr"
|
|
+ " WHERE ba.bez_afspraak_contact_key = p.prs_perslid_key"
|
|
+ " AND ba.bez_actie_key = x.bez_actie_key(+)"
|
|
+ " AND ba.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key(+)"
|
|
+ " AND rrr.res_ruimte_opstel_key = ro.res_ruimte_opstel_key(+)"
|
|
+ " AND ro.res_ruimte_key = rr.res_ruimte_key(+)"
|
|
+ " AND ba.bez_afspraak_key = " + afspr_key;
|
|
var oRs = Oracle.Execute(sql);
|
|
if (oRs.Eof)
|
|
shared.record_not_found("<!--" + afspr_key + "-->");
|
|
|
|
var result = { invoerder_key: oRs("invoerder_key").Value,
|
|
gastheer: oRs("gastheer").Value,
|
|
contact_key: oRs("contact_key").Value,
|
|
aanvrager: oRs("aanvrager").Value,
|
|
telf_nr: oRs("bez_afspraak_telefoonnr").Value,
|
|
bez_afspraak_datum: new Date(oRs("bez_afspraak_datum").Value),
|
|
bez_afspraak_eind: new Date(oRs("bez_afspraak_eind").Value),
|
|
actie_key: oRs("actie_key").Value,
|
|
ruimte: oRs("bez_afspraak_ruimte").Value,
|
|
opm: oRs("bez_afspraak_opmerking").Value,
|
|
actie_omschrijving: oRs("bez_actie_omschrijving").Value,
|
|
locatie_key: oRs("locatie_key").Value,
|
|
alg_onrg_key: oRs("alg_onrg_key").Value,
|
|
res_rsv_ruimte_key: oRs("res_rsv_ruimte_key").Value,
|
|
gastheer_key: oRs("gastheer_key").Value,
|
|
res_reservering_key: oRs("res_reservering_key").Value,
|
|
res_rsv_ruimte_volgnr: oRs("res_rsv_ruimte_volgnr").Value,
|
|
res_rsv_ruimte_omschrijving: oRs("res_rsv_ruimte_omschrijving").Value,
|
|
res_ruimte_extern: oRs("res_ruimte_extern_id").Value != null
|
|
};
|
|
oRs.Close();
|
|
|
|
if (S("vis_afspraak_onrgoed_uses_keys") == 1)
|
|
{
|
|
var sql = "SELECT aor.alg_gebouw_key"
|
|
+ " , aor.alg_verdieping_key"
|
|
+ " , aor.alg_ruimte_key"
|
|
+ " , aor.alg_type"
|
|
+ " , alg_gebouw_beginuur"
|
|
+ " , alg_gebouw_einduur"
|
|
+ " FROM alg_v_allonroerendgoed aor"
|
|
+ " , alg_gebouw g"
|
|
+ " WHERE aor.alg_gebouw_key = g.alg_gebouw_key"
|
|
+ " AND aor.alg_onroerendgoed_keys = " + result.alg_onrg_key
|
|
+ " AND aor.alg_locatie_key = " + result.locatie_key;
|
|
|
|
var oRs = Oracle.Execute(sql);
|
|
|
|
if (!oRs.eof)
|
|
{
|
|
result.gebouw_key = oRs("alg_gebouw_key").Value;
|
|
result.verdieping_key = oRs("alg_verdieping_key").Value;
|
|
result.ruimte_key = oRs("alg_ruimte_key").Value;
|
|
result.onrg_type = oRs("alg_type").Value;
|
|
result.gebouw_beginuur = oRs("alg_gebouw_beginuur").Value || -1;
|
|
result.gebouw_einduur = oRs("alg_gebouw_einduur").Value || -1;
|
|
}
|
|
else
|
|
{
|
|
result.gebouw_key = -1;
|
|
result.verdieping_key = -1;
|
|
result.ruimte_key = -1;
|
|
result.onrg_type = "L";
|
|
result.gebouw_beginuur = -1;
|
|
result.gebouw_einduur = -1;
|
|
}
|
|
oRs.Close();
|
|
}
|
|
return result;
|
|
},
|
|
|
|
func_enabled_afspraak: // Wat mag ik zoal op deze specifieke afspraak?
|
|
function _func_enabled_afspraak(afspr_key)
|
|
{ // initialisatie voor als afspr_key = -1
|
|
var host_key = user_key;
|
|
var contact_key = user_key;
|
|
var alg_key = -1;
|
|
var rsv_ruimte_key = -1;
|
|
var aantaldone = 0;
|
|
var aantalout = 0;
|
|
|
|
if (afspr_key > 0)
|
|
{
|
|
var sql = "SELECT a.bez_afspraak_host_key"
|
|
+ " , a.bez_afspraak_contact_key"
|
|
+ " , a.alg_onrgoed_keys"
|
|
+ " , a.prs_perslid_key"
|
|
+ " , a.res_rsv_ruimte_key"
|
|
+ " , SUM (CASE WHEN b.bez_bezoekers_done IS NOT NULL THEN 1 ELSE 0 END) aantaldone"
|
|
+ " , SUM (CASE WHEN b.bez_bezoekers_out IS NULL THEN 1 ELSE 0 END) aantalnotout"
|
|
+ " FROM bez_afspraak a"
|
|
+ " , bez_bezoekers b"
|
|
+ " WHERE a.bez_afspraak_key = b.bez_afspraak_key"
|
|
+ " AND a.bez_afspraak_key = " + afspr_key
|
|
+ " GROUP BY a.bez_afspraak_host_key"
|
|
+ " , a.bez_afspraak_contact_key"
|
|
+ " , a.alg_onrgoed_keys"
|
|
+ " , a.prs_perslid_key"
|
|
+ " , a.res_rsv_ruimte_key";
|
|
var oRs = Oracle.Execute(sql);
|
|
if (oRs.eof)
|
|
shared.record_not_found("<!--" + afspr_key + "-->");
|
|
|
|
host_key = oRs("bez_afspraak_host_key").Value;
|
|
contact_key = oRs("bez_afspraak_contact_key").Value;
|
|
alg_key = oRs("alg_onrgoed_keys").Value;
|
|
rsv_ruimte_key = oRs("res_rsv_ruimte_key").Value;
|
|
aantaldone = oRs("aantaldone").Value;
|
|
aantalnotout = oRs("aantalnotout").Value;
|
|
oRs.Close();
|
|
}
|
|
var bresult = user.func_enabled("BEZ",
|
|
-1, // discipline key
|
|
alg_key,
|
|
contact_key,
|
|
false, // pessimist
|
|
false); // isOptional
|
|
|
|
// Kan ik afspraken zien en maken
|
|
bresult.canWritePrk = bresult.canWrite("WEB_BEZPRK");
|
|
bresult.canWritePaf = bresult.canWrite("WEB_BEZPAF");
|
|
// Als alle bezoekers zijn uitgecheckt, dan mag de afspraak niet meer gewijzigd worden.
|
|
bresult.canChange = (bresult.canWrite("WEB_BEZFOF") || bresult.canWrite("WEB_BEZBOF") || bresult.canWrite("WEB_BEZUSE")) && aantalnotout > 0;
|
|
// Als er bezoekers zijn binnen geboekt, dan mag de afspraak niet meer verwijderd worden.
|
|
bresult.canDelete = (bresult.canWrite("WEB_BEZFOF") || bresult.canWrite("WEB_BEZBOF") || bresult.canWrite("WEB_BEZUSE")) && aantaldone == 0;
|
|
|
|
// Als er parkeerplaatsen aanzitten die PAF nodig hebben gelden soms andere regels
|
|
sql = "SELECT count(*) aantal"
|
|
+ " FROM bez_bezoekers b"
|
|
+ " , res_rsv_deel rrd"
|
|
+ " , res_deel rd"
|
|
+ " , ins_deel id"
|
|
+ " , alg_v_aanwezigterreinsector t"
|
|
+ " WHERE b.bez_bezoekers_key = rrd.bez_bezoekers_key"
|
|
+ " AND rrd.res_deel_key = rd.res_deel_key"
|
|
+ " AND rd.res_ins_deel_key = id.ins_deel_key"
|
|
+ " AND id.ins_alg_ruimte_key = t.alg_terreinsector_key"
|
|
+ " AND id.ins_alg_ruimte_type = 'T'"
|
|
+ " AND t.prs_afdeling_key IS NOT NULL"
|
|
+ " AND bez_afspraak_key = " + afspr_key
|
|
var oRs = Oracle.Execute(sql);
|
|
bresult.nrPAF = oRs("aantal").Value;
|
|
oRs.Close();
|
|
// Beetje grof: als de FO voor jou PAF parkeerplaatsen heeft geregeld terwijl
|
|
// je zelf geen PAF rechten hebt laten we je meer niet wijzigen.
|
|
// Ander zou je indirect de parkeerplaats langer kunnen claimen.
|
|
if (!bresult.canWritePaf && bresult.nrPAF > 0)
|
|
bresult.canChange = false;
|
|
|
|
if (rsv_ruimte_key > 0)
|
|
bresult.canChange = false;
|
|
|
|
bresult.canReadAny = bresult.canRead("WEB_BEZFOF") || bresult.canRead("WEB_BEZBOF") || bresult.canRead("WEB_BEZUSE");
|
|
bresult.canReadFOF = bresult.canRead("WEB_BEZFOF");
|
|
bresult.canReadBOF = bresult.canRead("WEB_BEZBOF");
|
|
|
|
bresult.canBadge = bresult.canRead("WEB_BEZBOF");
|
|
bresult.canCheckInOut = bresult.canWrite("WEB_BEZBOF");
|
|
bresult.canContact = bresult.canWrite("WEB_BEZBOF") || bresult.canWrite("WEB_BEZUSE");
|
|
|
|
bresult.canReadFEOnly = false;
|
|
if ( bresult.canReadAny
|
|
&& !bresult.canRead("WEB_BEZFOF")
|
|
&& !bresult.canRead("WEB_BEZBOF")
|
|
)
|
|
{
|
|
bresult.canReadFEOnly = true;
|
|
if ( contact_key != user_key
|
|
&& host_key != user_key
|
|
&& !user.isCollega(contact_key)
|
|
&& !user.isCollega(host_key)
|
|
)
|
|
{
|
|
bresult.canReadAny = false;
|
|
}
|
|
}
|
|
|
|
return bresult;
|
|
},
|
|
default_actie: function ()
|
|
{
|
|
var actie_key = -1;
|
|
// Is er een default actie.
|
|
var sql = "SELECT bez_actie_key"
|
|
+ " FROM bez_actie"
|
|
+ " WHERE bez_actie_verwijder IS NULL"
|
|
+ " AND bez_actie_default = 1";
|
|
var oRs = Oracle.Execute(sql);
|
|
if (!oRs.eof)
|
|
actie_key = oRs("bez_actie_key").Value;
|
|
oRs.Close()
|
|
return actie_key;
|
|
}
|
|
|
|
}
|
|
%> |