Files
Facilitor/APPL/SCF/scaffolding_save.inc
Erik Groener 3b2562dacd TWYN#52774 tlv/tgv reserve automatische correctie
svn path=/Website/branches/v2017.3/; revision=37527
2018-03-30 09:24:04 +00:00

187 lines
6.3 KiB
PHP

<% /*
$Revision$
$Id$
File: scaffolding_save.asp
Description: save information from scaffolding_edit.asp
Parameters:
Context:
Note:
*/
function scaffolding_save(model, scf_params)
{
protectRequest.validateToken();
var key = getQParamInt( "id" );
var multi = getFParamInt( "scf_multi", 0 ) == 1;
var cloning = getQParamInt( "scf_clone", 0 ) == 1;
if (cloning)
{
var clone_key = key;
key = -1;
}
var formfields = [];
for (var fld in model.fields)
{
var field = model.fields[fld];
if (fld == "id")
continue;
if (fld.readonly)
continue;
if (field.insertonly && key > 0)
continue;
formfields.push({ name: fld, frm: fld });
}
var params = { filter: { "id": key } };
if (!(key > 0))
params.multiadd = scf_params.incsetting && scf_params.incsetting.multiadd;
var jsondata = api2.form2JSONdata(model, params, formfields);
if (cloning)
{
// Bepaal de mee te nemen includes van de oude data
var incs = [];
for (var inc in model.includes)
{
var include = model.includes[inc];
if (include.enable_update)
incs.push(inc)
}
var olddata = api2.GET(model, clone_key, { include: incs, internal: true } );
for (var fld in model.fields)
{
var field = model.fields[fld];
if (field.insertonly)
jsondata[fld] = olddata[fld];
else if (field.required && !(fld in jsondata)) // Bijvoorbeeld kenmerktypeLOV's die je niet mag togglen
jsondata[fld] = olddata[fld];
}
for (var inc in model.includes)
{
var include = model.includes[inc];
if (include.enable_update)
jsondata[inc] = olddata[inc];
}
__Log("Cloning data:");
__Log(jsondata);
}
params.properties = { extraserie: false,
nameprefix: "k"
};
if (model.includes && "custom_fields" in model.includes)
jsondata.custom_fields = flexkenmerken2jsondata(params.properties);
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 key = getFParamIntArray("scf_multi_id"); // voor resultaat
if (anyleft)
{
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)
{
if ("hook_pre_put" in model)
model.hook_pre_put(params, jsondata, key);
var restresult = model.REST_PUT(params, jsondata, key);
if ("hook_post_put" in model)
model.hook_post_put(params, jsondata, key);
}
else
{
if ("hook_pre_post" in model)
model.hook_pre_post(params, jsondata);
if (params.multiadd)
{
key = [];
var arr = jsondata[params.multiadd]; // Dit zal dan een Array zijn
if (arr)
for (var i = 0; i < arr.length; i++)
{
if (arr[i] > 0)
{
jsondata[params.multiadd] = arr[i];
var restresult = model.REST_POST(params, jsondata);
key.push(restresult.key);
}
}
else
restresult = {};
}
else
{
params.cloning = cloning;
var restresult = model.REST_POST(params, jsondata);
key = restresult.key;
if ("hook_post_post" in model)
model.hook_post_post(params, jsondata, key);
if (cloning)
{
// Vertalingen ook nog
// Vooralsnog alleen van het hoofd-record ('eigen tabel omschrijving')
// Ook van alle children ('eigen tabel waarde omschrijving') is veel ingewikkelder
var transcols = [];
for (var fld in model.fields)
{
var field = model.fields[fld];
if (field.translate)
transcols.push(field.dbs);
}
if (transcols.length)
{
var sql = "INSERT INTO fac_locale"
+ " (fac_locale_tekst,"
+ " fac_locale_lang,"
+ " fac_locale_kolomnaam,"
+ " fac_localeitems_key,"
+ " fac_locale_dialect_key,"
+ " fac_locale_kolomkeyval)"
+ " SELECT fac_locale_tekst,"
+ " fac_locale_lang,"
+ " fac_locale_kolomnaam,"
+ " fac_localeitems_key,"
+ " fac_locale_dialect_key, "
+ key
+ " FROM fac_locale"
+ " WHERE fac_locale_kolomkeyval = " + clone_key
+ " AND fac_locale_kolomnaam IN ({0})".format(safe.quoted_sql_join(transcols, true));
Oracle.Execute(sql);
}
}
}
}
var result = { key: key,
warning: restresult.warning,
toaster: restresult.toaster,
keepForm: !!restresult.warning,
success: true };
Response.ContentType = "application/json";
Response.Write(JSON.stringify(result));
}
%>