Files
Facilitor/APPL/SCF/scaffolding.inc
Erik Groener b93cdc0e4e FSN#33766 Nieuwe facmgt-->codecharge schermen
svn path=/Website/trunk/; revision=26453
2015-09-23 13:17:40 +00:00

429 lines
16 KiB
PHP

<% /*
$Revision$
$Id$
File: scaffolding.inc
Description:
Parameters:
Context:
*/
var mode = getQParamSafe("mode", getQParam("id","")!=""?"wrap":"search");
if (mode == "save" || mode == "delete")
var JSON_Result = true;
%>
<!-- #include file="../Shared/common.inc" -->
<!-- #include file="./scaffolding_common.inc" -->
<% if (mode != "save" && mode != "delete" && mode != "wrap") { %>
<% if (mode != "list" && mode != "print") { %>
<!-- #include file="../Shared/iface.inc" -->
<!-- #include file="../Shared/calendar.inc" -->
<!-- #include file="../Shared/selector.inc" -->
<!-- #include file="../Shared/afdelingselector.inc" -->
<!-- #include file="../Shared/persoonselector.inc" -->
<!-- #include file="../Shared/kostenplaatsselector.inc" -->
<!-- #include file="../Shared/stdmeldingselector.inc" -->
<!-- #include file="../Shared/disciplineselector.inc" -->
<!-- #include file="../Shared/flexfileselector.inc" -->
<!-- #include file="../Shared/plaatsselector.inc" -->
<% } %>
<!-- #include file="../Shared/data_recordset.inc" -->
<!-- #include file="../Shared/resultset_table_v2.inc" -->
<% } %>
<!-- #include file="../Shared/json2.js" -->
<!-- #include file="../api2/api2.inc" -->
<!-- #include file="./scaffolding_search.inc" -->
<!-- #include file="./scaffolding_list.inc" -->
<!-- #include file="./scaffolding_wrap.inc" -->
<!-- #include file="./scaffolding_show.inc" -->
<!-- #include file="./scaffolding_edit.inc" -->
<!-- #include file="./scaffolding_save.inc" -->
<!-- #include file="./scaffolding_delete.inc" -->
<!-- #include file="./scaffolding_print.inc" -->
<%
function scaffolding(model, scf_params)
{
if (typeof model == "function") // Nieuwe stijl is het een function. Even compatible.
model = new model();
scf_params = scf_params || {};
var imodel = getQParam("model", ""); // include model
if (model.includes && imodel in model.includes)
{
scf_params = {}; // settings gelden alleen op het hoofdmodel?
scf_params.orgmodel = model;
scf_params.incsetting = model.includes[imodel];
// scf_params.incsetting.joinfield zal nu ook altijd in de url voorkomen
// var parent_key = getQParamInt(scf_params.incsetting.joinfield);
model = model.includes[imodel].model;
if (typeof model == "function") // Nieuwe stijl is het een function. Even compatible.
model = new model();
scf_params.transit = { name: "model", val: imodel };
}
// Originele URL voor IIRF rewrite
var orgurl = Request.ServerVariables("HTTP_X_REWRITE_URL");
if (orgurl.Count)
scf_params.this_fullpath = String(orgurl).split("?")[0];
else
{
var orgurl = Request.ServerVariables("HTTP_X_ORIGINAL_URL"); // Origineel van IIS Rewriter
if (orgurl.Count)
scf_params.this_fullpath = String(orgurl).split("?")[0];
else
scf_params.this_fullpath = String(Request.ServerVariables("SCRIPT_NAME"));
}
scf_params.this_path = scf_params.this_fullpath.substring(rooturl.length + 1);
// Algemene normalizing
def(model, "record_title", model.record_name);
def(model, "records_title", model.records_name);
for (var fld in model.fields)
def(model.fields[fld], "label", fld)
if ("includes" in model)
{
for (var inc in model.includes)
def(model.includes[inc], "joinfield", model.fields.id.dbs);
}
def(model, mode, {});
def(model, "list", {});
def(model, "edit", {});
def(model, "print", {});
if ("id" in model.fields && "name" in model.fields)
def(model.list, "columns", ["id", "name"]);
else
if ("id" in model.fields)
def(model.list, "columns", ["id"]);
else
def(model.list, "columns", []);
switch (mode)
{
case "search":
scaffolding_search(model, scf_params);
break;
case "list":
scaffolding_list(model, scf_params);
break;
case "wrap":
scaffolding_wrap(model, scf_params);
break;
case "show":
scaffolding_show(model, scf_params);
break;
case "edit":
scaffolding_edit(model, scf_params);
break;
case "save":
scaffolding_save(model, scf_params);
break;
case "delete":
scaffolding_delete(model, scf_params);
break;
case "print":
scaffolding_print(model, scf_params);
break;
}
}
function scf_ROFIELDTR(model, fld, val, key, params)
{
var field = model.fields[fld];
if (!field)
{ // Vanuit scaffolding_search
field = model.fields[fld.replace(/^(start_|end_)/,"")];
}
var txt = val;
if (txt === null || typeof txt === "undefined")
{
if (field.typ == "check")
txt = 0;
else
return; // Altijd suppressEmpty
}
var title = "";
var infoPointer = null;
if (typeof txt == "object")
{
if ("name" in txt) // Foreigns
{
title = "Key: " + txt["id"];
if ("content_url" in txt) // Plaatjes en zo
infoPointer = { Url: txt["content_url"], NewWindow: true };
txt = txt["name"];
}
else
if (field.typ == "datetime")
txt = toDateTimeString(txt);
else if (field.typ == "time")
txt = toTimeString(txt);
else if (typeof txt == "date" || txt instanceof Date)
txt = toDateString(txt);
}
var params = { title: title, infoPointer: infoPointer };
if (field.translate && key)
params.translate = { fld: field.dbs, key: key }
if (field.typ == "check" || field.typ == "check0")
ROCHECKBOXTR("fldtxt", field.label, txt, params);
else
if (!field.hidden_fld)
ROFIELDTR("fldtxt", field.label, txt, params);
}
function scf_RWFIELDTR(model, fld, val, key, params)
{
var params = params || {};
var field = model.fields[fld];
if (!params.search)
params.required = field.required;
if (!field)
{ // Vanuit scaffolding_search
field = model.fields[fld.replace(/^(start_|end_)/,"")];
}
if (field.foreign)
{
if (typeof field.foreign == 'function')
{
scf_ROFIELDTR(model, fld, val, key, params); // Te ingewikkeld?
}
else
{
var predefined = ""; // Een voorgedefinieerde foreign
var foreign = field.foreign;
if (typeof foreign == 'string')
{
var predefined = field.foreign.toUpperCase();
foreign = foreignKeyTable(foreign);
if (!foreign)
MISSING_FOREIGN;
}
else if (foreign)
predefined = foreign.selectorforeign || "";
if (predefined == "PRS_KOSTENPLAATS")
{
FCLTkostenplaatsselector(fld,
"sg" + fld,
user_key,
{ label: field.label,
kostenplaatsKey: val?val.id:null,
filtercode: "AA",
required: params.required
});
}
else if (predefined == "PRS_PERSLID")
{
FCLTpersoonselector(fld,
"sg" + fld,
{ label: field.label,
perslidKey: val?val.id:null,
required: params.required
});
}
else if (predefined == "PRS_AFDELING")
{
FCLTafdelingselector(fld,
"sg" + fld,
{ label: field.label,
departmentKey: val?val.id:null,
required: params.required
});
}
else if (predefined == "MLD_STDMELDING")
{
FCLTstdmeldingselector(fld,
"sg" + fld,
{ label: field.label,
stdmelding_key: val?val.id:null,
autfunctionKey: -1,
show_expired: true,
required: params.required
});
}
else if (predefined == "MLD_DISCIPLINE")
{
FCLTdisciplineselector(fld,
"sg" + fld,
{ label: field.label,
disc_key: val?val.id:null,
perslidKey: user_key,
module: "MLDA",
autfunctionKey: -1,
required: params.required
});
}
else if (predefined == "ALG_RUIMTE")
{
FCLTplaatsselector(null,
{ ruimtekey: val?val.id:null,
startlevel: 2,
eindlevel: 5,
required: params.required,
requiredlevel: field.requiredlevel,
filtercode: "FAC",
whenEmpty: L("lcl_search_generic") // want filter
});
}
else if (predefined == "ALG_LOCATIE")
{
FCLTplaatsselector(null,
{ ruimtekey: val?val.id:null,
startlevel: 2,
eindlevel: 2,
required: params.required,
filtercode: "FAC",
whenEmpty: L("lcl_search_generic") // want filter
});
}
else if (predefined.match(/ALG_VERDIEPING|RES_RSV_RUIMTE|MLD_UITVOERENDE|MLD_OPDR|MLD_MELDING|CNT_CONTRACT/) || !foreign)
{
ROFIELDTR("fldtxt", field.label, "TODO: suggest met " + field.foreign);
}
else // dan maar gewone select
{
var sql = "SELECT " + foreign.key
+ " , " + foreign.desc
+ " FROM " + foreign.tbl + " " + (foreign.alias||"")
+ (foreign.where?" WHERE " + foreign.where:"")
+ " ORDER BY 2";
var emptyOption = "";
if (!params.search)
{
if ("emptyoption" in field)
emptyOption = field.emptyoption;
else
if (val && val.id && params.required)
emptyOption = null;
}
FCLTselector(fld, sql, { label: field.label,
initKey: params.search?null:(val?val.id:null),
emptyOption: emptyOption,
required: params.required
});
}
}
}
else if (field.LOV)
{
if (field.required && field.LOV.split(";").length == 2 && val && val.id == field.LOV.split(";")[0])
{ // Dit zou FCLTselector ook wel mogen doen....
scf_ROFIELDTR(model, fld, val);
return;
}
var sql = api2.splitLOV2sql(field.LOV);
var emptyOption = "";
if (!params.search)
{
if ("emptyoption" in field)
emptyOption = field.emptyoption;
else
if (val && ("id" in val) && params.required)
emptyOption = null;
}
FCLTselector(fld, sql, { label: field.label,
initKey: params.search?"":(val?val.id:null),
emptyOption: emptyOption,
emptyKey: (field.typ=="varchar"?"":-1),
required: params.required
});
}
else if (field.typ == "check" || field.typ == "check0")
RWCHECKBOXTR(fld, "fldcheck", field.label, val);
else if (fld.match(/^(start_|end_)fclt_d_/))
FCLTcalendar (fld, { initEmpty: 1,
label: field.label,
volgnr: fld.match(/^start_/)?1:2,
required: true,
autosize: field.autosize
});
else if (field.typ == "date")
FCLTcalendar(fld, { label : field.label,
datum : val,
timeField: false,
initEmpty: !val,
initTimeEmpty: !val,
volgnr : 1,
required : params.required,
autosize : field.autosize
});
else if (field.typ == "datetime")
FCLTcalendar(fld, { label : field.label,
datum : val,
timeField: true,
initEmpty: !val,
initTimeEmpty: !val,
timeStep : S("res_h")*60,
startTime: S("res_t1"),
endTime : S("res_t2"),
volgnr : 1,
required : params.required,
autosize : field.autosize
});
else if (field.typ == "label")
{
scf_LABELTR(fld, field, params);
}
else if (field.typ == "button")
{
scf_BUTTONTR(fld, field, params);
}
else if (field.flexmodule)
{
FCLTflexfileselector(fld,
"sg" + fld,
{
filename: val?val.name:"",
label: field.label,
flexmodule: field.flexmodule,
required: params.required
});
}
else
{
if (field.translate && key)
params.translate = { fld: fld.dbs, key: key };
if (field.typ == "memo")
RWTEXTAREATR(fld, "fld", field.label, val, params)
else
{
switch (field.typ)
{
case "varchar": params.datatype = "text"; break;
case "number":
case "float": params.datatype = field.typ; break;
default: params.datatype = "";
}
RWFIELDTR(fld, "fld", field.label, val, params);
}
}
}
function scf_RWHIDDENTR(pname, pvalue)
{
if (pvalue && typeof pvalue == "object" && "id" in pvalue)
pvalue = pvalue.id;
Response.Write('<input type="hidden" id="'+ pname + '" name="' + pname + '" value="' + safe.htmlattr(pvalue) + '">');
}
function scf_LABELTR(fld, field, params)
{
Response.Write('<div id="'+fld+'"><tr><td><b>'+field.label+'</b></td><td><b>'+field.defaultvalue+'</b></td></tr></div>');
}
function scf_BUTTONTR(fld, field, params)
{
Response.Write('<div id="tr_'+fld+'"><tr><td class="label">'
+'<label for="'+fld+'">'+(field.label?field.label+':':'')+'</label>'
+'</td><td><button id="'+fld+'">'+field.defaultvalue+'</button></td></tr></div>');
}
%>