NYBU#55434: Flexkenmerken per artikelregel.

svn path=/Website/trunk/; revision=41575
This commit is contained in:
Maykel Geerdink
2019-03-14 15:18:52 +00:00
parent 60f954c32f
commit 40a48e2bb1
8 changed files with 319 additions and 187 deletions

View File

@@ -40,9 +40,11 @@ i.plancad {
}
.tab_cat_sched.compressed tr.catline.notexisting { display: none; }
.tab_cat_sched.compressed tr.catflexline.notexisting { display: none; }
.planbord.compressed tr.res_nofit { display: none; }
.tab_cat_sched tr.catline.existing { background-color: #ddd; }
.tab_cat_sched tr.catflexline.existing { background-color: #ddd; }
table.planbord tr label { font-weight: normal;overflow: hidden; white-space: nowrap; }
table.planbord td { vertical-align: inherit; } /* Herstel de generieke 'top' uit default.csx */

View File

@@ -99,12 +99,24 @@ res = {
function (artikel_key, actie, params)
{
sql = "SELECT ra.res_artikel_omschrijving"
+ " , ra.res_discipline_key"
+ " FROM res_artikel ra"
+ " WHERE ra.res_artikel_key = " + artikel_key;
var oRs = Oracle.Execute(sql);
var art_oms = oRs("res_artikel_omschrijving").Value;
var discipline_key = oRs("res_discipline_key").Value;
oRs.Close();
var track = "";
var sql = "SELECT COALESCE(ks.prs_kostensoort_btw, 0) inclBTW"
+ " FROM prs_kostensoort ks"
+ " , res_discipline rd"
+ " WHERE ks.prs_kostensoort_key = rd.prs_kostensoort_key"
+ " AND rd.ins_discipline_key = " + discipline_key;
var oRs = Oracle.Execute(sql);
var inclBTW = (!oRs.eof? oRs("inclBTW").Value : 0);
oRs.Close();
switch (actie)
{
case "delete": track = L("lcl_res_artdelete") + ": " + art_oms;
@@ -113,13 +125,16 @@ res = {
break;
case "update": track = L("lcl_res_artupdate") + ": " + art_oms
+ (params.old_number != params.new_number
? "\n" + buildTrackText("number", params.old_number, params.new_number, { nodiff: true })
? "\n" + L("lcl_count") + ": "
+ buildTrackText("number", params.old_number, params.new_number, { nodiff: true })
: "")
+ (params.old_price != params.new_price
? "\n" + buildTrackText("float", params.old_price, params.new_price, { nodiff: true })
? "\n" + L("lcl_r_price5") + " " + (inclBTW? L("lcl_shared_inclBTW") : L("lcl_shared_exclBTW")) + ": "
+ buildTrackText("float", safe.curr(params.old_price), safe.curr(params.new_price), { nodiff: true })
: "")
+ (params.old_date.getTime() != params.new_date.getTime()
? "\n" + buildTrackText("datetime", params.old_date, params.new_date, { nodiff: true })
? "\n" + L("lcl_time") + ": "
+ buildTrackText("datetime", params.old_date, params.new_date, { nodiff: true })
: "");
break;
}

View File

@@ -215,7 +215,7 @@ function make_cat(discipline_key, rsv_ruimte_key, existing_only, res_artikel_key
var begintijd = oRs("res_artikel_begintijd").Value;
var eindtijd = oRs("res_artikel_eindtijd").Value;
var art_key = oRs("res_artikel_key").Value;
var rsv_art_key = oRs("res_rsv_artikel_key").Value || 0;
var rsv_art_key = oRs("res_rsv_artikel_key").Value || -1;
var volgnr = oRs("volgnr").Value;
var art_str = art_key + "_" + rsv_art_key;
@@ -284,7 +284,8 @@ function make_cat(discipline_key, rsv_ruimte_key, existing_only, res_artikel_key
minimum="<%=minimum%>"
size="4"
<%=(cstatus_reado? "readonly style='background-color: #dddddd;' " : "")%>
onblur='showTotPriceArt_ex(this);'>
onblur='showTotPriceArt_ex(this);'
onChange="checkRequiredGroup('10S<%=art_key%>', { emptyvalue: 0 });">
<% if (existing && aantal == 0)
{ /* Cursor in het aantal veld van meegegeven artikel (res_artikel_key) */
%> <script type="text/javascript">
@@ -339,28 +340,31 @@ function make_cat(discipline_key, rsv_ruimte_key, existing_only, res_artikel_key
</td>
<%
}
//var ptmpfolder;
//if (S("res_max_flex_on_line") > 0)
//{
// ptmpfolder = generateFlexKenmerkCodeArt ({ rsv_artikel_key: oRs("res_rsv_artikel_key").Value, // bez_key : oRs("bez_bezoekers_key").Value,
// artikel_key: art_key,
// rsv_ruimte_key: rsv_ruimte_key, //afspraak_key: afspraak_key,
// reado: false,
// flexcolumns: S("res_flexcolumns"),
// resnum: art_key, //next_vis,
// requiredbyfield: "res" + art_key, //next_vis,
// notr: true,
// flexend: parseInt(S("res_max_flex_on_line"), 10),
// nolabel: true,
// getTmpfolder: true, // Geef de tijdelijke folder terug waar bestanden zijn opgeslagen.
// //filter: flexfilter_afhandel_default,
// hidedefault: true
// });
//}
%>
</tr>
<% //next_vis++;
<tr id="row<%=art_key%>flex"
class="catflexline <%=(ingang == 0 || verval == 0 || dirty? " res_fatal " : "")%> <%=(existing? " existing" : " notexisting")%>"
>
<td colspan="4">
<div class="resflex">
<table id="resFlexList<%=art_key%>">
<tbody>
<%
generateFlexKenmerkCodeArt ({ rsv_artikel_key: oRs("res_rsv_artikel_key").Value,
artikel_key: art_key,
rsv_ruimte_key: rsv_ruimte_key,
reado: false,
flexcolumns: S("res_flexcolumns"),
requiredbyfield: "inpb_c_" + art_str
});
%>
</tbody>
</table>
<div id="resvFlexList%=art_key%>" style="display:none"></div>
</div>
</td>
</tr>
<%
oRs.MoveNext();
}

View File

@@ -158,6 +158,8 @@ var authparams = user.checkAutorisation(autfunction)
function res_submit()
{
if (!validateForm("u2"))
return false;
if (checkArtikelen(<%=safe.jsfloat(starttime_room)%>, <%=safe.jsfloat(endtime_room)%>))
{
$.post($("form[name=u2]")[0].action, $("[name=u2]").serialize(), FcltCallbackAndThenAlways(res_submit_callback), "json");
@@ -172,25 +174,56 @@ var authparams = user.checkAutorisation(autfunction)
FcltMgr.closeDetail(window, { cancel: true } );
}
var new_item_key = 0; // Globaal
var new_item_key = -1; // Globaal
function res_addcat(elm)
{
new_item_key = new_item_key -1;
var $tr = $(elm).closest("tr");
var $clone = $tr.clone();
var artkey = $tr.attr("id").substring(3);
var res_rsv = artkey +"_"+ new_item_key;
var $tr = $(elm).closest("tr");
var $clone = $tr.clone();
var artkey = $tr.attr("id").substring(3);
var res_rsv = artkey + "_" + new_item_key;
// De clone bijwerken..
$clone.find(':button').parent().remove(); // De toevoeg knop eraf halen.
$("[id^='inpbh1_c_']",$clone).val(""); // Urenveld leeg maken.
$("[id^='inpbh1_c_']", $clone).val(""); // Urenveld leeg maken.
var id_num = $("[id^='inpbh1_c_']", $clone).attr('id').substring(9);
// Nieuwe unieke id's aan de velden toekennen.
$("[id^='inpb_c_']", $clone).attr({id: "inpb_c_" +res_rsv, name: "inpb_c_" +res_rsv});
$("[id^='inpbp_c_']", $clone).attr({id: "inpbp_c_" +res_rsv, name: "inpbp_c_" +res_rsv});
$("[id^='inpbtp_c_']",$clone).attr({id: "inpbtp_c_"+res_rsv, name: "inpbtp_c_"+res_rsv});
$("[id^='inpbh1_c_']",$clone).attr({id: "inpbh1_c_"+res_rsv, name: "inpbh1_c_"+res_rsv});
$("[id^='inpbm1_c_']",$clone).attr({id: "inpbm1_c_"+res_rsv, name: "inpbm1_c_"+res_rsv});
// Voeg clone onder de huidige regel toe.
$tr.after($clone);
$("[id^='inpb_c_']", $clone).attr({id: "inpb_c_" + res_rsv, name: "inpb_c_" + res_rsv}); // Aantal.
$("[id^='inpbp_c_']", $clone).attr({id: "inpbp_c_" + res_rsv, name: "inpbp_c_" + res_rsv}); // Prijs.
$("[id^='inpbtp_c_']", $clone).attr({id: "inpbtp_c_" + res_rsv, name: "inpbtp_c_" + res_rsv}); // Totaalprijs.
$("[id^='inpbh1_c_']", $clone).attr({id: "inpbh1_c_" + res_rsv, name: "inpbh1_c_" + res_rsv}); // Tijd uren.
$("[id^='inpbm1_c_']", $clone).attr({id: "inpbm1_c_" + res_rsv, name: "inpbm1_c_" + res_rsv}); // Tijd minuten.
// Zijn er flexkenmerken.
var $trflex = $tr;
var $cloneflex;
var $trnext = $tr.next('tr');
var trflex_all = $trnext.find("#k_all");
if (trflex_all)
{ // Er zijn flexkenmerken. Deze staan in <20><>n tr.
// Alle flexkenmerk regels clonen.
var $cloneflex = $trnext.clone(true);
//var res_rsv_ = artkey + "_-1" + new_item_key;
// Nieuwe unieke id's aan de velden toekennen.
for (var flex_num = 1; flex_num <= trflex_all.val(); flex_num++)
{
$("[id^='art" + id_num + "_" + flex_num + "val']", $cloneflex).attr({id: "art" + res_rsv + "_" + flex_num + "val", name: "art" + res_rsv + "_" + flex_num + "val"}); // val.
$("[id^='art" + id_num + "_" + flex_num + "key']", $cloneflex).attr({id: "art" + res_rsv + "_" + flex_num + "key", name: "art" + res_rsv + "_" + flex_num + "key"}); // key.
$("[id^='art" + id_num + "_" + flex_num + "t']", $cloneflex).attr({id: "art" + res_rsv + "_" + flex_num + "t", name: "art" + res_rsv + "_" + flex_num + "t"}); // t.
$("[id^='art" + id_num + "_" + flex_num + "p']", $cloneflex).attr({id: "art" + res_rsv + "_" + flex_num + "p", name: "art" + res_rsv + "_" + flex_num + "p"}); // p.
$("[id^='art" + id_num + "_" + flex_num + "d']", $cloneflex).attr({id: "art" + res_rsv + "_" + flex_num + "d", name: "art" + res_rsv + "_" + flex_num + "d"}); // d.
$("[id^='art" + id_num + "_" + flex_num + "e']", $cloneflex).attr({id: "art" + res_rsv + "_" + flex_num + "e", name: "art" + res_rsv + "_" + flex_num + "e"}); // e.
// Aan het hidden checkbox veld has_xxx ook een nieuwe unieke id aan toekennen.
$("[id^='has_art" + id_num + "_" + flex_num + "val']", $cloneflex).attr({id: "has_art" + res_rsv + "_" + flex_num + "val", name: "has_art" + res_rsv + "_" + flex_num + "val"}); // Hidden checkbox veld has_xxx.
// Op kalender klikken moet kalender openen in eigen veld. TODO: waarde wordt nu nog ingevuld in veld van orgineel.
$("i[onclick^=\"$(\'#art" + id_num + "_" + flex_num + "val'\"]", $cloneflex).attr({onclick: "$('#art" + res_rsv + "_" + flex_num + "val').datepicker('show')"}); // datum uitklappen.
}
}
// Voeg beide clones onder de huidige regel toe.
$trnext.after($clone, $cloneflex);
$("[id^='inpbh1_c_']",$clone).focus(); // Zet cursor in urenveld.
FcltMgr.resized();

View File

@@ -19,6 +19,7 @@ var JSON_Result = true;
<!-- #include file="../Shared/common.inc" -->
<!-- #include file="../Shared/save2db.inc" -->
<!-- #include file="../shared/kenmerk_common.inc" -->
<!-- #include file="../Shared/json2.js" -->
<!-- #include file="res.inc"-->
@@ -93,6 +94,46 @@ function resObj(res_deel, res_rsv_deel, van_h, van_m, tot_h, tot_m, i_cnt, i_pri
this.price = i_price;
}
function saveFlexKenmerkenArt(rsv_artikel_key, params)
{
var currentKenmerkenSQL = "SELECT ka.res_kenmerk_key"
+ " , ka.res_kenmerkartikel_waarde"
+ " FROM res_kenmerkartikel ka"
+ " , res_kenmerk k"
+ " , res_rsv_artikel ra"
+ " WHERE k.res_kenmerk_key = ka.res_kenmerk_key"
+ " AND ra.res_rsv_artikel_key = ka.res_rsv_artikel_key"
+ " AND res_kenmerkartikel_verwijder IS NULL"
+ " AND ra.res_rsv_artikel_key = " + rsv_artikel_key;
var allKenmerkenSQL = "SELECT " + lcl.xsql('t.res_srtkenmerk_omschrijving', 't.res_srtkenmerk_key') + " kenmerk_omschrijving"
+ ", t.res_srtkenmerk_kenmerktype kenmerk_kenmerktype"
+ ", t.res_srtkenmerk_systeem kenmerk_systeem"
+ ", k.res_kenmerk_toonbaar kenmerk_readonly"
+ ", k.res_kenmerk_uniek kenmerk_uniek"
+ ", fac_kenmerkdomein_key"
+ " FROM res_kenmerk k"
+ " , res_srtkenmerk t"
+ " WHERE k.res_srtkenmerk_key = t.res_srtkenmerk_key"
+ " AND k.res_kenmerk_key = "; /* wordt in saveFlexkenmerken uitgebreid */
var flextrack = saveFlexKenmerken(rsv_artikel_key,
{ kenmerkTable: "res_kenmerkartikel",
kenmerkParentKey : "res_rsv_artikel_key",
kenmerkWaarde: "res_kenmerkartikel_waarde",
kenmerkKey: "res_kenmerk_key",
currentKenmerkenSQL: currentKenmerkenSQL,
allKenmerkenSQL: allKenmerkenSQL,
requestQF: Request.Form,
nameprefix: params.nameprefix,
isNew: params.isNew,
flexPath: "RESA/R",
tracking: true,
module: "RES"
});
return flextrack;
}
// consumable objects
// artikelen in de database
@@ -254,6 +295,7 @@ for (i = 1; i <= Request.Form.Count; i++)
}
var trackarray = [];
var flextrack = [];
//=================================================
// DEEL TWEE: DE OBJECTEN BIJWERKEN
// Onze checkboxen hebben een hidden veld 'has_xxx' waaraan je kunt zien dat het object gereservereerd was
@@ -492,6 +534,10 @@ for (i = 0; i < r_a_key.length; i++)
trackarray.push(updatetrack);
}
flextrack = saveFlexKenmerkenArt(r_a_key[i].rsv_key,
{ nameprefix: "art" + r_a_key[i].key + "_" + r_a_key[i].rsv_key + "_",
isNew: false }); // The array r_a_key[i] is a list of previously reserved objects.
reserved++;
continue;
}
@@ -529,40 +575,46 @@ for (i = 0; i < a_arIns.length; i++)
must_warn = must_warn || is_expired(disc_key, jsDate);
// Niets aan de hand, toevoegen
sql = "BEGIN "
+ " INSERT INTO res_rsv_artikel"
+ " ( res_artikel_key"
+ " , res_rsv_artikel_aantal"
+ " , res_rsv_ruimte_key"
+ " , res_rsv_artikel_prijs"
+ " , res_rsv_artikel_levering)"
+ " VALUES (" + a_arIns[i].res_deel
+ " ," + a_arIns[i].cnt
+ " ," + rsv_ruimte_key
var fields = [ { dbs: "res_artikel_key", typ: "key", val: a_arIns[i].res_deel },
{ dbs: "res_rsv_artikel_aantal", typ: "key", val: a_arIns[i].cnt },
{ dbs: "res_rsv_ruimte_key", typ: "key", val: rsv_ruimte_key },
{ dbs: "res_rsv_artikel_levering", typ: "datetime", val: jsDate }
];
// Backo had mogelijk flexprijs in beeld. Sla die dan op
// Prijs alleen aan te passen als geen vaste prijs (flexprijs)
if (backo && !isNaN(a_arIns[i].price) && !prijs_vast) // De prijs was in beeld en wijzigbaar
{
sql += " ," + parseFloat((a_arIns[i].cnt * a_arIns[i].price).toFixed(2))
fields.push({ dbs: "res_rsv_artikel_prijs", typ: "float", val: parseFloat((a_arIns[i].cnt * a_arIns[i].price).toFixed(2))});
}
else // Fronto: of geen prijs in beeld (vaste prijs artikel)
{
sql += " , NULL";
}
sql += " ," + jsDate.toSQL(true) + ");";
//else // Fronto: of geen prijs in beeld (vaste prijs artikel)
fields.push({ dbs: "res_rsv_artikel_key", typ: "key", seq: "res_s_res_rsv_artikel_key" });
var resArtIns = buildInsert("res_rsv_artikel", fields);
var rsv_artikel_key = resArtIns.sequences["res_rsv_artikel_key"];
sql = resArtIns.sql;
var err = Oracle.Execute(sql, true);
if (err.friendlyMsg)
warning = err.friendlyMsg;
if (bonotify && (curr_discipline != last_discipline))
{
sql += " RES.notifybackoffice(" + rsv_ruimte_key + ", 'RESNEW', 'C', " + a_arIns[i].res_deel + ");";
sql = "BEGIN "
+ " RES.notifybackoffice(" + rsv_ruimte_key + ", 'RESNEW', 'C', " + a_arIns[i].res_deel + ");"
+ " END;";
last_discipline = curr_discipline;
Oracle.Execute(sql);
}
sql += " END;"
Oracle.Execute(sql);
// Tracking toevoegen.
var inserttrack = res.trackartikel(a_arIns[i].res_deel, "insert");
trackarray.push(inserttrack);
flextrack = saveFlexKenmerkenArt(rsv_artikel_key,
{ nameprefix: "art" + a_arIns[i].res_deel + "_" + -1 + "_",
isNew: true }); // rsv_artikel_key is a currently reserved article.
reserved++;
}
}
@@ -589,8 +641,8 @@ var hasAnyCV = !oRs.Eof;
if (restype == "R")
{
if (trackarray.length > 0)
res.trackreserveringupdate(rsv_ruimte_key, trackarray.length? L("lcl_res_is_resupdtrack").format(res_key + "/" + res_volgnr) + "\n" + trackarray.join("\n") : null);
if (trackarray.length > 0 || flextrack.length > 0)
res.trackreserveringupdate(rsv_ruimte_key, trackarray.length || flextrack.length > 0? L("lcl_res_is_resupdtrack").format(res_key + "/" + res_volgnr) + "\n" + trackarray.concat(flextrack).join("\n") : null);
}
else
{ // CV
@@ -603,7 +655,7 @@ else
if (verynew == 1 && !this_res.min_bo) // misbruik this_res.min_bo: er was niets
shared.trackaction("RESNEW", rsv_ruimte_key);
else
res.trackreserveringupdate(rsv_ruimte_key, trackarray.length? L("lcl_res_is_resupdtrack").format(res_key + "/" + res_volgnr) + "\n" + trackarray.join("\n") : null);
res.trackreserveringupdate(rsv_ruimte_key, trackarray.length || flextrack.length > 0? L("lcl_res_is_resupdtrack").format(res_key + "/" + res_volgnr) + "\n" + trackarray.concat(flextrack).join("\n") : null);
}
}

View File

@@ -15,84 +15,113 @@
*/ %>
<!-- #include file="../Shared/kenmerk_common.inc" -->
<%
function getSqlResFlexArt(rsv_artikel_key, artikel_key, filter)
{
var filter = filter || [];
return sql = "SELECT k.res_kenmerk_key kenmerk_key"
+ " , " + lcl.xsql("sk.res_srtkenmerk_omschrijving", "sk.res_srtkenmerk_key") + " kenmerk_omschrijving"
+ " , sk.res_srtkenmerk_kenmerktype kenmerk_kenmerktype"
+ " , sk.fac_kenmerkdomein_key kenmerkdomein_key"
+ " , sk.res_srtkenmerk_lengte kenmerk_lengte"
+ " , sk.res_srtkenmerk_dec kenmerk_dec"
+ " , sk.res_srtkenmerk_nmin kenmerk_nmin"
+ " , sk.res_srtkenmerk_nmax kenmerk_nmax"
+ " , sk.res_srtkenmerk_systeem kenmerk_systeem"
+ (rsv_artikel_key > 0
? " , (SELECT v.res_kenmerkartikel_waarde "
+ " FROM res_kenmerkartikel v "
+ " WHERE v.res_rsv_artikel_key = " + rsv_artikel_key
+ " AND v.res_kenmerk_key = k.res_kenmerk_key"
+ " AND v.res_kenmerkartikel_verwijder IS NULL)"
: " , " + lcl.xsql("k.res_kenmerk_default", "k.res_kenmerk_key")) + " kenmerk_waarde"
+ " , k.res_kenmerk_volgnummer kenmerk_volgnr"
+ " , " + lcl.xsql("sk.res_srtkenmerk_dimensie", "k.res_kenmerk_key") + " kenmerk_dimensie"
+ " , " + lcl.xsql("k.res_kenmerk_hint", "k.res_kenmerk_key") + " kenmerk_hint"
+ " , " + lcl.xsql("k.res_kenmerk_default", "k.res_kenmerk_key") + " kenmerk_default"
+ " , k.res_kenmerk_verplicht kenmerk_verplicht"
+ " , k.res_kenmerk_groep kenmerk_groep"
+ " , NULL otherpath"
+ " , k.res_kenmerk_toonbaar kenmerk_toonbaar"
+ " , k.res_kenmerk_uniek kenmerk_uniek"
+ " , k.res_kenmerk_regexp kenmerk_regexp"
+ " FROM res_kenmerk k "
+ " , res_srtkenmerk sk"
+ " WHERE k.res_srtkenmerk_key = sk.res_srtkenmerk_key"
+ " AND k.res_kenmerk_verwijder IS NULL"
+ " AND k.res_artikel_key = " + artikel_key
+ (filter.length > 0 ? " AND " + filter.join(" AND ") : "")
+ " ORDER BY k.res_kenmerk_volgnummer"
+ " , " + lcl.xsql("sk.res_srtkenmerk_omschrijving", "k.res_kenmerk_key");
}
function generateFlexKenmerkCodeArt(params)
{
var rsv_artikel_key = params.rsv_artikel_key? params.rsv_artikel_key : -1; // res_rsv_artikel_key
var artikel_key = params.artikel_key? params.artikel_key : -1; // artikel_key
var reado = params.reado; // Readonly
var flexcolumns = params.flexcolumns;
var advanced = params.advanced; // Geavanceerd
var flexcolumns= params.flexcolumns;
var prs_key = (params.prs_key? params.prs_key : -1); // Perslid key
var cont_key = (params.cont_key? params.cont_key : -1); // Contactpersoon key
var resnum = params.resnum; // Bezoeker nummer
var rownum = params.rownum; // Regel nummer (Artikel)
var requiredbyfield = params.requiredbyfield; // required flexkenmerken is alleen required als veld met name=requiredbyfield is ingevuld
var flexstart = params.flexstart;
var flexend = params.flexend;
var notr = params.notr;
var ispopup = params.ispopup;
var nolabel = params.nolabel;
var tmpfolder = params.tmpfolder;
var filter = params.filter;
var hidedefault = params.hidedefault; // Afhandelingskenmerken >= 900 met een default waarde hidden maken.
disc_key_arr = [];
var discs = "SELECT DISTINCT ra.res_discipline_key"
+ " FROM res_rsv_artikel rra"
+ " , res_artikel ra"
+ " WHERE rra.res_artikel_key = ra.res_artikel_key"
+ " AND rra.res_rsv_artikel_key = " + rsv_artikel_key;
var oRs = Oracle.Execute(discs);
while (!oRs.eof)
{
// Dicipline toevoegen
disc_key_arr.push(oRs("res_discipline_key").Value);
oRs.MoveNext();
}
oRs.Close();
var my_resrechten = user.func_enabled2("RES", {ins_discipline_key: disc_key_arr.join(",")}); // res.func_enabled(rsv_ruimte_key) is overkill?
function isReadonly (volgnummer)
{ // Backo mag kenmerken < 900 wel zien maar niet wijzigen. Kenmerken > 900 mag hij wel wijzigen.
// Zie ook load_kenmerk.asp en bez_edit_bezoekers.inc
if (reado)
return true
else
{ // Mag ik de kenmerken wijzigen?
if (reado) return true; // Als meegegeven dan altijd readonly
if (volgnummer < 100) // FO && BO altijd, FE alleen buiten de expire-tijden
{
var backo = !user.has("WEB_BEZFOF");
return (ispopup && backo && volgnummer < 900)
if (my_resrechten.canWrite("WEB_RESFOF") || my_resrechten.canWrite("WEB_RESBOF"))
return false; // die mogen altijd
return readofe; // als ik via de FE-uitzondering binnen ben wordt <100 readonly
}
else if (volgnummer >= 100 && volgnummer <= 800) // FE && FO && BO
{
return false; // Zonder FE||FO||BO was je hier echt nooit gekomen
}
else if (volgnummer > 800 && volgnummer < 900) // FO
return !my_resrechten.canWrite("WEB_RESFOF");
else if (volgnummer == 900) // FO && BO
return !my_resrechten.canWrite("WEB_RESFOF") && !my_resrechten.canWrite("WEB_RESBOF");
else if (volgnummer > 900) // BO
return !my_resrechten.canWrite("WEB_RESBOF");
}
var sql = "SELECT k.res_kenmerk_key kenmerk_key"
+ " , " + lcl.xsql("sk.res_srtkenmerk_omschrijving", "sk.res_srtkenmerk_key") + " kenmerk_omschrijving"
+ " , sk.res_srtkenmerk_kenmerktype kenmerk_kenmerktype"
+ " , sk.fac_kenmerkdomein_key kenmerkdomein_key"
+ " , sk.res_srtkenmerk_lengte kenmerk_lengte"
+ " , sk.res_srtkenmerk_dec kenmerk_dec"
+ " , sk.res_srtkenmerk_nmin kenmerk_nmin"
+ " , sk.res_srtkenmerk_nmax kenmerk_nmax"
+ " , sk.res_srtkenmerk_systeem kenmerk_systeem"
+ (rsv_artikel_key > 0
? " , (SELECT v.res_kenmerkartikel_waarde "
+ " FROM res_kenmerkartikel v "
+ " WHERE v.res_rsv_artikel_key = " + rsv_artikel_key
+ " AND v.res_kenmerk_key = k.res_kenmerk_key"
+ " AND v.res_kenmerkartikel_verwijder IS NULL)"
: " , " + lcl.xsql("k.res_kenmerk_default", "k.res_kenmerk_key")) + " kenmerk_waarde"
+ " , k.res_kenmerk_volgnummer kenmerk_volgnr"
+ " , " + lcl.xsql("sk.res_srtkenmerk_dimensie", "k.res_kenmerk_key") + " kenmerk_dimensie"
+ " , " + lcl.xsql("k.res_kenmerk_hint", "k.res_kenmerk_key") + " kenmerk_hint"
+ " , " + lcl.xsql("k.res_kenmerk_default", "k.res_kenmerk_key") + " kenmerk_default"
+ " , k.res_kenmerk_verplicht kenmerk_verplicht"
+ " , k.res_kenmerk_groep kenmerk_groep"
+ " , NULL otherpath"
+ " , k.res_kenmerk_toonbaar kenmerk_toonbaar"
+ " , k.res_kenmerk_uniek kenmerk_uniek"
+ " , k.res_kenmerk_regexp kenmerk_regexp"
+ " FROM res_kenmerk k "
+ " , res_srtkenmerk sk"
+ " WHERE k.res_srtkenmerk_key = sk.res_srtkenmerk_key"
+ " AND k.res_kenmerk_verwijder IS NULL"
+ " AND k.res_artikel_key = " + artikel_key;
// Voor *nieuwe* reserveringen negeren we RESBAC en RESBOF nog even.
// Omdat we (meestal) nog geen catalogus/discipline hebben op dit moment zie je anders
// als je maar *ergens* RESBAC of RESBOF al te veel kenmerken
if (!my_resrechten.canRead("WEB_RESBAC") || rsv_artikel_key < 0)
{ // Ik heb geen RESBAC rechten
// Dan mag ik alleen nog met RESBOF rechten reservering flexkenmerken boven de 900 zien.
if (!my_resrechten.canRead("WEB_RESBOF") || rsv_artikel_key < 0)
{ // Ik heb geen RESBOF rechten
// Dan mag ik alleen nog met RESFOF rechten reservering flexkenmerken tussen de 800 en de 900 zien.
if (!my_resrechten.canRead("WEB_RESFOF"))
{ // Ik heb geen RESFOF rechten.
// Dan mag ik alleen nog met RESUSE rechten reservering flexkenmerken onder de 800 zien.
if (!my_resrechten.canRead("WEB_RESUSE"))
// Ik mag geen enkel kenmerk zien.
sql += " AND 1 = 0"; // Ik mag geen enkel kenmerk zien.
else
// Met WEB_RESUSErechten mag ik kenmerken <=800 zien.
sql += " AND (k.res_kenmerk_volgnummer <= 800)";
}
else
// Ik heb RESFOF rechten
sql += " AND k.res_kenmerk_volgnummer <= 900";
}
}
function isHidden (volgnummer, defaultval)
{ // Afhandelingskenmerken met een default waarde hidden weergeven zodat ze wel opgeslagen worden (kenmerken >= 900 en default is niet null).
return (volgnummer >= 900 && defaultval != null);
}
var sql = getSqlResFlexArt(rsv_artikel_key, artikel_key, filter);
sql += " ORDER BY k.res_kenmerk_volgnummer"
+ " , " + lcl.xsql("sk.res_srtkenmerk_omschrijving", "k.res_kenmerk_key");
var trn = 0;
@@ -100,24 +129,15 @@ function generateFlexKenmerkCodeArt(params)
"RES", // Module
rsv_artikel_key,
{ flexcolumns: flexcolumns,
label_colspan: ((notr || ispopup) ? null : (params.mobile? 1 : (S("bez_sel_contactpersoon") > 0 || S("bez_sel_internpersoon")? 3 : 2)) ),
kenmerk_search: advanced,
kenmerk_search: false,
defaults: params.defaults,
fnIsReadonly: isReadonly,
fnIsHidden: (hidedefault? isHidden : null),
prs_key: prs_key, // Wordt alleen gebruikt als geldt (!kenmerk_search && !multiMode)
cont_key: cont_key, // Wordt alleen gebruikt als geldt (!kenmerk_search && !multiMode)
parentKey: rsv_artikel_key,
hideVervallen: rsv_artikel_key < 0,
nameprefix: "flex" + resnum + "_",
mobile: params.mobile,
requiredbyfield: requiredbyfield,
serie: resnum, // Het serie nummer (onderscheid tussen bezoekers) voor dezelfde serie flexkenmerken
flexstart: flexstart,
flexend: flexend,
notr: notr,
nolabel: nolabel,
tmpfolder: tmpfolder
parentKey: rsv_artikel_key,
nameprefix: "art" + artikel_key + "_" + rsv_artikel_key + "_",
requiredbyfield: requiredbyfield, // Aan dit veld de onChange="checkRequiredGroup('10S< %=artikel_key% >');"> toevoegen.
requiredbyemptyval: 0,
serie: artikel_key // Het serie nummer (onderscheid tussen artikelen). Nodig voor requiredbyfield verplichte kenmerken.
}
);
} %>

View File

@@ -241,7 +241,7 @@ function BijlagenButton(pModule, pNiveau, pKey, tmpfolder, pKenmerk_key,
+ ", true" // multi
+ ", this)";
res += " onClick='" + safe.htmlattr(blg) + "'"
+ (!pReadonly ? " onChange='checkKenmerk(this, false,\"M\",0,0,0,0)'" : "");
+ (!pReadonly ? " onChange='checkKenmerk(this, false,\"M\",0,0,0,0)'" : ""); // Bij bijlage button heb je geen requiredbyemptyval nodig.
res += ">";
res += "<i class='fa fa-folder-open fa-fw hasIcon bijlage' onClick='this.previousSibling.click()'></i>";
// }
@@ -494,30 +494,31 @@ function kenmerk_regel(kv_params)
// ================================================================================================
function listKenmerk(sql, module, key, props)
{
var flexcolumns = props.flexcolumns;
var kenmerk_search = props.kenmerk_search;
var kenmerk_colspan = props.kenmerk_colspan;
var kenmerk_extraTD = props.kenmerk_extraTD;
var multiMode = props.multiMode; // TODO: support this!
var hideVervallen = props.hideVervallen;
var prs_key = props.prs_key || props.reqId; // Oude obsolete reqId nog even ondersteunen
var cont_key = props.cont_key;
var nameprefix = props.nameprefix || "k";
var extraserie = props.extraserie || false;
var niveau = props.niveau || "";
var srtdeel_key = props.srtdeelKey;
var requiredbyfield = props.requiredbyfield;
var serie = props.serie || 0;
var parent_list = props.parent_list; // Maak voor deze keys ook bijlagen knop
var formobile = props.mobile;
var notr = props.notr; // Geen tr's toevoegen.
var nolabel = props.nolabel; // Geen labels toevoegen.
var flexstart = props.flexstart || 1; // De kenmerken vanaf de flexstart-ste element tonen {flexstart >= 1 indien meegegeven).
var flexend = props.flexend || -1; // De kenmerken tot het flexend-ste element tonen {flexend >= 1 indien meegegeven}.
var hasfilter = props.hasfilter || false; // De kenmerken kunnen op naam gefilterd worden.
var tmpfolder = props.tmpfolder || "";
var showConfidential= props.showConfidential;
var forceRequired = props.forceRequired; // In case only status dependent characteristics are shown (close confirm/...etc)
var flexcolumns = props.flexcolumns;
var kenmerk_search = props.kenmerk_search;
var kenmerk_colspan = props.kenmerk_colspan;
var kenmerk_extraTD = props.kenmerk_extraTD;
var multiMode = props.multiMode; // TODO: support this!
var hideVervallen = props.hideVervallen;
var prs_key = props.prs_key || props.reqId; // Oude obsolete reqId nog even ondersteunen
var cont_key = props.cont_key;
var nameprefix = props.nameprefix || "k";
var extraserie = props.extraserie || false;
var niveau = props.niveau || "";
var srtdeel_key = props.srtdeelKey;
var requiredbyfield = props.requiredbyfield;
var requiredbyemptyval = props.requiredbyemptyval;
var serie = props.serie || 0;
var parent_list = props.parent_list; // Maak voor deze keys ook bijlagen knop
var formobile = props.mobile;
var notr = props.notr; // Geen tr's toevoegen.
var nolabel = props.nolabel; // Geen labels toevoegen.
var flexstart = props.flexstart || 1; // De kenmerken vanaf de flexstart-ste element tonen {flexstart >= 1 indien meegegeven).
var flexend = props.flexend || -1; // De kenmerken tot het flexend-ste element tonen {flexend >= 1 indien meegegeven}.
var hasfilter = props.hasfilter || false; // De kenmerken kunnen op naam gefilterd worden.
var tmpfolder = props.tmpfolder || "";
var showConfidential = props.showConfidential;
var forceRequired = props.forceRequired; // In case only status dependent characteristics are shown (close confirm/...etc)
var force_default_when_null = props.force_default_when_null || false;
if (formobile) // Ik moet de API2 name weten. TODO Hier nog iets beters voor verzinnen....
{
@@ -761,7 +762,7 @@ function listKenmerk(sql, module, key, props)
%>
$("#<%=requiredbyfield%>").addClass("<%=required_class%>");
<% } %>
checkRequiredGroup("<%=required_group%>");
checkRequiredGroup("<%=required_group%>", <%=(requiredbyemptyval != null? "{emptyvalue: " + requiredbyemptyval + "}" : "null")%>);
$("#requiredgeg_<%=nameprefix + idCounter%>").remove(); // Na het uitvoeren kan de ready functie weer weg zodat deze niet
});
</script>
@@ -895,10 +896,10 @@ function listKenmerk(sql, module, key, props)
anyTextarea = true; // straks autogrow code
kv = "<textarea "
+ (kregexp ? " regexp='" + kregexp + "' " : "")
+ " onChange='fvalid=checkKenmerk(this, false,\"" + ktype + "\"," + klen + "," + kdec + "," + kmin + "," + kmax + ")"
+ " onChange='fvalid=checkKenmerk(this, false,\"" + ktype + "\"," + klen + "," + kdec + "," + kmin + "," + kmax + ", " + (requiredbyemptyval != null? "{emptyvalue: " + requiredbyemptyval + "}" : "null") + ")"
+ onchangeExp
+ "'"
+ " onBlur='checkKenmerk(this, true,\"" + ktype + "\"," + klen + "," + kdec + "," + kmin + "," + kmax + ")'"
+ " onBlur='checkKenmerk(this, true,\"" + ktype + "\"," + klen + "," + kdec + "," + kmin + "," + kmax + ", " + (requiredbyemptyval != null? "{emptyvalue: " + requiredbyemptyval + "}" : "null") + ")'"
+ " class='fldflexC50 "
+ (initTriggerChange ? " initTriggerChange " : "")
+ (required ? required_class : "")
@@ -933,10 +934,10 @@ function listKenmerk(sql, module, key, props)
{
kv = "<input type='text'"
+ (kregexp ? " regexp='" + kregexp + "' " : "")
+ " onChange='fvalid=checkKenmerk(this, false,\"" + ktype + "\"," + klen + "," + kdec + "," + kmin + "," + kmax + ")"
+ " onChange='fvalid=checkKenmerk(this, false,\"" + ktype + "\"," + klen + "," + kdec + "," + kmin + "," + kmax + ", " + (requiredbyemptyval != null? "{emptyvalue: " + requiredbyemptyval + "}" : "null") + ")"
+ onchangeExp
+ "'"
+ " onBlur='checkKenmerk(this, true,\"" + ktype + "\"," + klen + "," + kdec + "," + kmin + "," + kmax + ")'"
+ " onBlur='checkKenmerk(this, true,\"" + ktype + "\"," + klen + "," + kdec + "," + kmin + "," + kmax + ", " + (requiredbyemptyval != null? "{emptyvalue: " + requiredbyemptyval + "}" : "null") + ")'"
+ " id='" + nameprefix + idCounter + "val' name='" + nameprefix + idCounter + "val'"
+ " class='"
+ (initTriggerChange ? " initTriggerChange " : "")
@@ -1203,7 +1204,7 @@ function listKenmerk(sql, module, key, props)
+ (kenmerk_search ? " advmulti=1 " : "")
+ (required ? " required='required' " : "")
+ (required > 1
? " onChange='checkRequiredGroup(\"" + required_group + "\");" + onchangeExp + "'"
? " onChange='checkRequiredGroup(\"" + required_group + "\", " + (requiredbyemptyval != null? "{emptyvalue: " + requiredbyemptyval + "}" : "null") + ");" + onchangeExp + "'"
: (flexExprIncluded && (!isExpression || forceFlexExprInclusion)? " onChange='" + onchangeExp + "'" : ""))
+ ">"
+ "<option value='-1' " + (required? " class='" + required_class + "'" : "") + "><!--lege waarde--></option>"
@@ -1220,7 +1221,7 @@ function listKenmerk(sql, module, key, props)
if (className.match(/required\d/g) && className.match(/required\d/g).length > 0)
{ // Select hoort binnen een required groep.
var group = $("#<%=parentkenmerkid%>val")[0].className.match(/required\d*S\d*/g)[0].substr(8);
checkRequiredGroup(group);
checkRequiredGroup(group, <%=(requiredbyemptyval != null? "{emptyvalue: " + requiredbyemptyval + "}" : "null")%>);
}
$("#<%=nameprefix + idCounter%>val").
@@ -1396,7 +1397,7 @@ function listKenmerk(sql, module, key, props)
+ "'"
+ (required ? " required='required' " : "")
+ (required > 1
? " onChange='checkRequiredGroup(\"" + required_group + "\")'"
? " onChange='checkRequiredGroup(\"" + required_group + "\", " + (requiredbyemptyval != null? "{emptyvalue: " + requiredbyemptyval + "}" : "null") + ");" + onchangeExp + "'"
: "")
//+ " placeholder='"+flexkenmerklabel+"'"
+ " value='" + safe.htmlattr(flexkenmerkwaarde) + "' "
@@ -1548,11 +1549,11 @@ function listKenmerk(sql, module, key, props)
kv = "<input type='text'"
+ (!readonlyfield && kregexp ? " regexp='" + kregexp + "' " : "")
+ (!readonlyfield
? " onChange='fvalid=checkKenmerk(this, false,\"" + ktype + "\"," + klen + "," + kdec + ",\"" + kmin + "\",\"" + kmax + "\")"
? " onChange='fvalid=checkKenmerk(this, false,\"" + ktype + "\"," + klen + "," + kdec + ",\"" + kmin + "\",\"" + kmax + "\", " + (requiredbyemptyval != null? "{emptyvalue: " + requiredbyemptyval + "}" : "null") + ")"
+ onchangeExp
+ "' "
: "")
+ (!readonlyfield ? " onBlur='checkKenmerk(this, true,\"" + ktype + "\"," + klen + "," + kdec + ",\"" + kmin + "\",\"" + kmax + "\")' " : "")
+ (!readonlyfield ? " onBlur='checkKenmerk(this, true,\"" + ktype + "\"," + klen + "," + kdec + ",\"" + kmin + "\",\"" + kmax + "\", " + (requiredbyemptyval != null? "{emptyvalue: " + requiredbyemptyval + "}" : "null") + ")'" : "")
+ (readonlyfield || maskeren
? " readonly tabindex=-1 "
: " id='" + nameprefix + idCounter + "val' name='" + nameprefix + idCounter + "val' ")
@@ -1596,11 +1597,11 @@ function listKenmerk(sql, module, key, props)
kv = "<input type='text'"
+ (!readonlyfield && kregexp ? " regexp='" + kregexp + "' " : "")
+ (!readonlyfield
? " onChange='fvalid=checkKenmerk(this, false,\"" + ktype + "\"," + klen + "," + kdec + "," + kmin + "," + kmax + ")"
? " onChange='fvalid=checkKenmerk(this, false,\"" + ktype + "\"," + klen + "," + kdec + "," + kmin + "," + kmax + ", " + (requiredbyemptyval != null? "{emptyvalue: " + requiredbyemptyval + "}" : "null") + ")"
+ onchangeExp
+ "' "
: "")
+ (!readonlyfield ? " onBlur='checkKenmerk(this, true,\"" + ktype + "\"," + klen + "," + kdec + "," + kmin + "," + kmax + ")' " : "")
+ (!readonlyfield ? " onBlur='checkKenmerk(this, true,\"" + ktype + "\"," + klen + "," + kdec + "," + kmin + "," + kmax + ", " + (requiredbyemptyval != null? "{emptyvalue: " + requiredbyemptyval + "}" : "null") + ")' " : "")
+ (readonlyfield || maskeren
? " readonly tabindex=-1 "
: " id='" + nameprefix + idCounter + "val' name='" + nameprefix + idCounter + "val' ");
@@ -1653,10 +1654,10 @@ function listKenmerk(sql, module, key, props)
+ (required ? required_class : "")
+ (isExpression? " expression " + expressionClass : "")
+ "'"
+ " onChange='fvalid=checkKenmerk(this, false,\"" + ktype + "\"," + klen + "," + kdec + "," + kmin + "," + kmax + ")"
+ " onChange='fvalid=checkKenmerk(this, false,\"" + ktype + "\"," + klen + "," + kdec + "," + kmin + "," + kmax + ", " + (requiredbyemptyval != null? "{emptyvalue: " + requiredbyemptyval + "}" : "null") + ")"
+ onchangeExp
+ "' "
+ " onBlur='checkKenmerk(this, true,\"" + ktype + "\"," + klen + "," + kdec + "," + kmin + "," + kmax + ")' "
+ " onBlur='checkKenmerk(this, true,\"" + ktype + "\"," + klen + "," + kdec + "," + kmin + "," + kmax + ", " + (requiredbyemptyval != null? "{emptyvalue: " + requiredbyemptyval + "}" : "null") + ")' "
+ (flexkenmerkwaarde == 1
? " checked"
: "")
@@ -1758,7 +1759,7 @@ function listKenmerk(sql, module, key, props)
+ "'"
+ (required ? " required='required' " : "")
+ (required > 1
? " onChange='checkRequiredGroup(\"" + required_group + "\")'"
? " onChange='checkRequiredGroup(\"" + required_group + "\", " + (requiredbyemptyval != null? "{emptyvalue: " + requiredbyemptyval + "}" : "null") + ");" + onchangeExp + "'"
: "")
+ " type='text' "
+ "name='" + nameprefix + idCounter + "val' "
@@ -1855,7 +1856,7 @@ function listKenmerk(sql, module, key, props)
if (className.match(/required\d/g) && className.match(/required\d/g).length > 0)
{ // Suggest hoort binnen een required groep.
var group = $("#Suggest<%=parentkenmerkid%>_show")[0].className.match(/required\d*S\d*/g)[0].substr(8);
checkRequiredGroup(group);
checkRequiredGroup(group, <%=(requiredbyemptyval != null? "{emptyvalue: " + requiredbyemptyval + "}" : "null")%>);
}
}
<% } %>
@@ -1864,7 +1865,7 @@ function listKenmerk(sql, module, key, props)
{ %>
function onChangeSKenmerk<%=nameprefix + idCounter%>(parentkey, txt)
{
checkRequiredGroup("<%=required_group%>");
checkRequiredGroup("<%=required_group%>", <%=(requiredbyemptyval != null? "{emptyvalue: " + requiredbyemptyval + "}" : "null")%>);
}
<% } %>

View File

@@ -23,8 +23,10 @@ klen lengte
kdec decimalen
kmin kmax
*/
function checkRequiredGroup(group)
function checkRequiredGroup(group, params)
{
params = params || {};
var has_emptyvalue = typeof(params.emptyvalue) != "undefined"; // Er kan een empty waarde meegegeven zijn die als lege waarde opgevat moet worden, bijvoorbeeld als aantal 0 is.
var requiredgroup = "required" + group;
var groupisrequired = false;
var rgroup = $("." + requiredgroup);
@@ -45,7 +47,9 @@ function checkRequiredGroup(group)
if (tagType == "checkbox")
hasCheckbox = (tagName == "INPUT" && tagType == "checkbox" && ischecked);
else
hasInput = (((tagName == "INPUT" || tagName == "TEXTAREA") && rgvalue != "") && !isbijlage);
hasInput = (((tagName == "INPUT" || tagName == "TEXTAREA") &&
((!has_emptyvalue && rgvalue != "") || (has_emptyvalue && rgvalue != 0))) &&
!isbijlage);
if (hasInput || hasSelect || hasBijlage || hasCheckbox)
{
@@ -72,8 +76,9 @@ function checkRequiredGroup(group)
}
var in_use = false; // Semaphore(Seinvlag) om nested loop van de alerts van twee velden met te lange invoer te vermijden.
function checkKenmerk(field, show, ktype, klen, kdec, kmin, kmax)
function checkKenmerk(field, show, ktype, klen, kdec, kmin, kmax, params)
{
params = params || {};
var valid = true;
if (!in_use)
{
@@ -211,7 +216,7 @@ function checkKenmerk(field, show, ktype, klen, kdec, kmin, kmax)
{ // Er is een required groep aanwezig.
var requiredgroup = field.className.match(/required\d*S\d*/g)[0];
var group = requiredgroup.substr(8);
checkRequiredGroup(group);
checkRequiredGroup(group, params);
}
in_use = false;