Files
Facilitor/APPL/BEZ/bez.inc
Maykel Geerdink f7c4127648 DJIN#35339: Een binnengemelde bezoeker kan verwijderd worden.
svn path=/Website/trunk/; revision=28167
2016-02-15 12:29:04 +00:00

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;
}
}
%>