FSN#39638 Bulk bewerken via scaffolding

svn path=/Website/trunk/; revision=32930
This commit is contained in:
Jos Groot Lipman
2017-02-23 19:57:07 +00:00
parent ab6cc6d377
commit 2801cf6dfa
4 changed files with 44 additions and 16 deletions

View File

@@ -305,7 +305,7 @@ function validateForm(fName, params)
if (params.checkOnly) // slechts enkele velden controleren
jqcheckonly = "#" + params.checkOnly.join(",#");
var jqchecknot="";
if (params.checkNot) // Deze velden niet meer controleren
if (params.checkNot && params.checkNot.length) // Deze velden niet meer controleren
jqchecknot = "#" + params.checkNot.join(",#");
if (params.relaxed)

View File

@@ -146,7 +146,7 @@ function scaffolding_edit(model, scf_params)
if ("hook_pre_edit" in model && !multi)
model.hook_pre_edit(xxx_data, model.fields);
var modal = model.edit.modal || scf_params.edit && scf_params.edit.modal; // dan doen we een detailrecord altijd modal
var modal = multi || model.edit.modal || scf_params.edit && scf_params.edit.modal; // dan doen we een detailrecord altijd modal
if (key < 0 && scf_params.edit && scf_params.edit.addmodal)
modal = true;
%>
@@ -165,7 +165,18 @@ function scaffolding_edit(model, scf_params)
function scf_submit()
{
if (!validateForm("u2"))
var params = { };
<% if (multi) { %>
// Alleen de velden controleren waar het vinkje voor aan staat
params.checkNot = [];
$("input[type=text],input[type=checkbox],input[type=number],select").not("[name^=scf_multi]").each(function() {
var thisname = $(this).attr("name");
var cb_name = "scf_multi_" + thisname;
if (!$("input[name=" + cb_name + "]").is(":checked"))
params.checkNot.push(thisname);
});
<% } %>
if (!validateForm("u2", params))
return false;
if (typeof pre_submit != "undefined")
@@ -257,7 +268,7 @@ function scaffolding_edit(model, scf_params)
{
$('textarea').resize(function () { FcltMgr.resized(window) });
$('textarea').autogrow();
<% if (multi) {
<% if (multi) {
// Overal een vinkje voorzetten
%>
$("input[type=text],input[type=checkbox],select").each(function() {
@@ -333,10 +344,13 @@ function scaffolding_edit(model, scf_params)
{
var field = model.fields[fld];
if (field.sql)
continue; // weinig aan te beweken
continue; // weinig aan te bewerken
if (multi)
field.required = false;
if (multi && !field.multiedit)
{
delete model.fields[fld]; // Die is niet multi-edit enabled
continue;
}
if (field.hidden_fld || (field.readonly && !(key > 0)))
{ // Eerst de hidden velden.

View File

@@ -57,12 +57,14 @@ function scaffolding_list(model, scf_params)
}
var default_url = model.list.default_url;
var modal_url = scf_params.this_fullpath + "?mode=edit" + transit + "&id={0}"
if (!default_url &&
"id" in model.fields &&
("show" in model || "show" in scf_params || model["REST_PUT"] || model["REST_DELETE"]))
{
if (modal)
default_url = scf_params.this_fullpath + "?mode=edit" + transit + "&id=";
default_url = modal_url;
else
default_url = scf_params.this_path + "?mode=wrap" + transit + "&id=";
}
@@ -123,7 +125,7 @@ function scaffolding_list(model, scf_params)
function scf_multiedit(rowArray, isMulti)
{
var scfKeyString = getKeyString(rowArray);
var url = "<%= default_url %>".format(scfKeyString) + "&scf_multi=1";
var url = "<%= modal_url %>".format(scfKeyString) + "&scf_multi=1";
FcltMgr.openModalDetail(url, scfKeyString.split(",").length + " " + "<%=safe.jsstring(model.records_title)%>", { callback: scf_reload });
}
@@ -238,10 +240,13 @@ function scaffolding_list(model, scf_params)
}
// Uniques misbruiken we om een intelligentere tabelkop te kunnen maken
// Ook kijken of we multiedit moeten aanbieden
var multiedit = false;
var title = model.records_title;
for (var fld in model.fields)
{
var field = model.fields[fld];
multiedit = multiedit || field.multiedit;
if (field.uniquewith && fld in filter) // Dan de andere waarde tonen als tabel
{
// Eigenlijk willen we de records_title van de andere tabel.
@@ -466,7 +471,7 @@ function scaffolding_list(model, scf_params)
if (model.REST_DELETE)
rst.addAction({ action: "scf_delete", caption: L("lcl_delete"), multi: true, onlyMulti: true, multiOnce: true } );
if (model.REST_PUT && model.edit && model.edit.modal)
if (model.REST_PUT && multiedit)
rst.addAction({ action: "scf_multiedit", caption: L("lcl_change"), multi: true, onlyMulti: true, multiOnce: true } );
var cnt = rst.processResultset();

View File

@@ -44,17 +44,26 @@ function scaffolding_save(model, scf_params)
if (multi)
{
var anyleft = false;
for (var fld in jsondata) // Alle velden waar ons vinkje niet voor stond slaan we niet op
{
var cb_name = "scf_multi_" + fld;
if (getFParam(cb_name, "off") != "on")
delete jsondata[fld];
else
anyleft = true;
}
var keys = getFParamIntArray("scf_multi_id");
for (var i = 0; i < keys.length; i++)
var key = getFParamIntArray("scf_multi_id"); // voor resultaat
if (anyleft)
{
var restresult = model.REST_PUT(params, jsondata, keys [i]);
var keys = getFParamIntArray("scf_multi_id");
for (var i = 0; i < keys.length; i++)
{
var restresult = model.REST_PUT(params, jsondata, keys [i]);
}
}
else
var restresult = { toaster: L("lcl_scf_no_changes") };
}
else if (key > 0)
{
@@ -89,11 +98,11 @@ function scaffolding_save(model, scf_params)
key = restresult.key;
}
}
var warning = restresult.warning;
var result = { key: key,
warning: warning,
keepForm: !!warning,
warning: restresult.warning,
toaster: restresult.toaster,
keepForm: !!restresult.warning,
success: true };
Response.ContentType = "application/json";
Response.Write(JSON.stringify(result));