Files
Facilitor/APPL/API2/model_res_deel.inc
Erik Groener 93571b2bba LPNL#69097 Het filterveld ruimte werkt niet als je zoekt op reserveerbare objecten
svn path=/Website/branches/v2021.1/; revision=53983
2021-12-02 11:40:14 +00:00

289 lines
10 KiB
PHP

<% /*
$Revision$
$Id$
File: model_res_deel.inc
Description: model voor res_deel
Context: Om reserveerbare objecten te *beheren*
Het zoeken naar een vrij reserveerbaar object
doe je via model_reservableequipment
Notes:
*/
%>
<%
function model_res_deel(ins_min_level_arr, insMultiReserve)
{
this.ins_min_level_arr = ins_min_level_arr || [1, 5];
var insres = insMultiReserve || 0;
this.records_name = "bookingitems";
this.record_name = "bookingitem";
this.table = "res_deel";
this.primary = "res_deel_key";
this.soft_delete = "res_deel_verwijder";
this.soft_expire = "res_deel_vervaldatum";
this.autfunction = "WEB_RESMSU";
this.record_title = L("res_deel");
this.records_title = L("res_deel_m");
this.fields = {
"id": {
"dbs": "res_deel_key",
"label": L("lcl_key"),
"typ": "key",
"required": true,
"seq": "res_s_res_deel_key"
},
"res_ins_deel_key": {
"dbs": "res_ins_deel_key",
"label": L("res_ins_deel_key"),
"typ": "key",
"insertonly": true,
"nosearch": true, // kan een extreem grote listbox geven anders
"foreign": {
"tbl": "ins_deel",
"key": "ins_deel_key",
"desc": "ins_deel_omschrijving"
},
infoPointer: { Url: "appl/ins/ins_deel.asp?urole=bo&ins_key=" }
},
"res_prs_perslid_key": {
"dbs": "res_prs_perslid_key",
"label": L("res_prs_perslid_key"),
"typ": "key",
"insertonly": true,
"nosearch": true, // kan een extreem grote listbox geven anders
"foreign": "prs_perslid",
infoPointer: { Url: "appl/prs/prs_perslid.asp?prs_key=" }
},
"name": {
"dbs": "res_deel_omschrijving",
"label": L("res_deel_omschrijving"),
"typ": "varchar",
"translate": true,
"required": true,
"filter": "like"
},
"ruimtekey": {
"dbs": "res_v_ins_deelgegevens.alg_ruimte_key",
"label": L("lcl_location"),
"typ": "key",
"hidden_fld": true,
"foreign": {
"tbl": get_tbl({desc: true}),
"key": "alg_ruimte_key",
"desc": "alg_plaatsaanduiding",
"selectorforeign": "ALG_RUIMTE",
"selectorparams": {"startlevel": 2, "eindlevel": 5, "readonlylevel": 1}
},
"foreignfiltercode": null, // Ook facilitor irrelevant
"showtransit": true
},
"bookingdiscipline": {
"dbs": "res_discipline_key",
"label": L("res_discipline_key"),
"typ": "key",
"required": true,
"foreign": {
"tbl": "(SELECT ins_discipline_key"
+ " , ins_discipline_omschrijving"
+ " FROM ins_tab_discipline"
+ " WHERE ins_discipline_module = 'RES'"
+ " AND ins_discipline_min_level IN (" + this.ins_min_level_arr.join(",") + ")"
+ " AND ins_discipline_verwijder IS NULL"
+ " ORDER BY ins_discipline_omschrijving ASC)",
"key": "ins_discipline_key",
"desc": "ins_discipline_omschrijving"
},
"LOVinit": "",
"multiedit": true
},
"unit": {
"dbs": "res_deel_eenheid",
"label": L("res_deel_eenheid"),
"typ": "varchar",
"translate": true,
"multiedit": true
},
"price": {
"dbs": "res_deel_prijs",
"label": L("res_deel_prijs"),
"iscurrency": true,
"typ": "float",
"multiedit": true
},
"fixedprice": {
"dbs": "res_deel_prijs_vast",
"label": L("res_deel_prijs_vast"),
"typ": "check",
"multiedit": true
},
"scope": {
"dbs": "res_deel_alg_level",
"label": L("res_deel_alg_level"),
"typ": "number",
"LOV": L("res_deel_alg_levelLOV"),
"emptyoption": null,
"multiedit": true
},
"availabilitybits": {
"dbs": "res_deel_beschikbaar_bits",
"label": L("res_deel_beschikbaar_bits"),
"typ": "number",
"hidden_fld": true,
"required": true
},
"_available": {
"dbs": "",
"label": L("res_deel_beschikbaarheid"),
"typ": "button",
"defaultvalue": L("lcl_select")
},
"remark": {
"dbs": "res_deel_opmerking",
"label": L("res_deel_opmerking"),
"typ": "memo",
"translate": true
},
"image": {
"dbs": "res_deel_image",
"label": L("res_deel_image"),
"typ": "varchar",
"flexmodule": "RESPHD"
},
"expirationdate": {
"dbs": "res_deel_vervaldatum",
"label": L("res_deel_vervaldatum"),
"typ": "date",
"multiedit": true
},
"externnr": {
"dbs": "res_deel_externnr",
"typ": "varchar",
"label": L("extern_nr"),
"readonly": !user.has("WEB_FACTAB")
},
"externsyncdate": {
"dbs": "res_deel_externsyncdate",
"typ": "datetime",
"label": L("extern_syncdate"),
"readonly": !user.has("WEB_FACTAB")
}
};
this.hook_pre_multi_edit = function(xxx_data, fld, scf_params)
{
if (scf_params.insMultiReserve)
{ // Multi-edit vanuit ins_list willen we alleen discipline en scope van de res_delen aanpassen
// die bij het ins_deel hoort.
this.fields.unit.multiedit = false;
this.fields.price.multiedit = false;
this.fields.fixedprice.multiedit = false;
this.fields.expirationdate.multiedit = false;
}
%>
<script>
var s_vis_parking_key = <%=S("vis_parking_key")%>;
var insMultiReserve = "<%=scf_params.insMultiReserve%>";
</script>
<%
};
function get_tbl(params)
{
var params = params || {};
var sql = "(SELECT DISTINCT"
+ " a.alg_ruimte_key"
+ " , a.alg_onroerendgoed_keys"
+ " , a.alg_onroerendgoed_type"
+ " , a.alg_plaatsaanduiding"
+ " , a.alg_locatie_key"
+ " , a.alg_terreinsector_key"
+ " , a.alg_gebouw_key"
+ " , a.alg_verdieping_key"
+ ( params.desc
? ""
: " , d.ins_deel_key"
+ " , r.res_deel_key tbl_res_deel_key"
)
+ " FROM res_deel r"
+ " , ins_deel d"
+ " , ins_v_alg_overzicht a"
+ " WHERE d.ins_deel_key = r.res_ins_deel_key"
+ " AND d.ins_alg_ruimte_key = a.alg_onroerendgoed_keys"
+ " AND d.ins_alg_ruimte_type = a.alg_onroerendgoed_type"
+ ")";
if (params.alias)
sql += " " + params.alias;
return sql;
}
if (inArray(1, this.ins_min_level_arr) || inArray(5, this.ins_min_level_arr)) // gekoppeld aan ins_deel
{
var gparams = { GET: { tables: [get_tbl({alias: "res_v_ins_deelgegevens"})]
, wheres: ["res_deel.res_deel_key = res_v_ins_deelgegevens.tbl_res_deel_key(+)"]
}
};
delete this.fields.res_prs_perslid_key;
}
else //gekoppeld aan prs_perslid
{
var gparams = { GET: {
wheres: ["res_deel.res_prs_perslid_key IS NOT NULL"]
}
};
delete this.fields.res_ins_deel_key;
delete this.fields.ruimtekey;
}
this.REST_GET = generic_REST_GET(this, gparams);
this.REST_POST = generic_REST_POST(this);
this.REST_PUT = function (params, jsondata, the_key)
{
if (insres)
{
// Voor elke multiselect gekozen ins_deel wordt deze REST_PUT aangeroepen.
// Ins_deel kan op meerdere res_delen van toepassing zijn ivm vervaldatum.
var sql = "SELECT res_deel_key"
+ " FROM res_deel"
+ " WHERE res_deel_verwijder IS NULL"
+ " AND res_ins_deel_key = " + the_key;
var oRs = Oracle.Execute(sql);
if (!oRs.eof)
{ // Dit ins_deel heeft al een res_deel, dus update.
while (!oRs.eof)
{
var res_key = oRs("res_deel_key").Value;
generic_REST_PUT(this)(params, jsondata, res_key);
oRs.MoveNext();
}
}
else
{ // Toevoegen van dit ins_deel als res_deel.
var sql_i = "INSERT INTO res_deel"
+ " (res_deel_omschrijving, res_ins_deel_key, res_discipline_key, res_deel_alg_level)"
+ " SELECT ins_deel_omschrijving"
+ " , " + the_key
+ " , " + jsondata.bookingdiscipline
+ " , " + jsondata.scope
+ " FROM ins_deel WHERE ins_deel_key = " + the_key;
Oracle.Execute(sql_i);
}
oRs.Close();
}
else
{
generic_REST_PUT(this)(params, jsondata, the_key);
}
return { key: the_key };
}
this.REST_DELETE = generic_REST_DELETE(this);
}
%>