FSN#32924 CodeCharge naar SCF

svn path=/Website/trunk/; revision=25990
This commit is contained in:
Jos Groot Lipman
2015-08-18 09:39:18 +00:00
parent fd23985999
commit 78364a7bd3
7 changed files with 373 additions and 216 deletions

View File

@@ -574,7 +574,7 @@ api2 = {
if (incname in jsondata) // i=="visitors"
{
var inc = model.includes[incname];
if (inc.model && inc.model.enable_update) // andere includes zijn nog niet bij te werken
if (inc.model && inc.enable_update) // andere includes zijn nog niet bij te werken
{
// Als je bij een PUT/POST een include in de BODY zet geven we hem automagisch terug
params.include = params.include || [];
@@ -594,7 +594,6 @@ api2 = {
oRs.MoveNext();
}
oRs.Close();
var incdata = jsondata[incname]; // Array zoals via API aangeleverd
for (var j=0; j<incdata.length; j++)
{
@@ -724,6 +723,16 @@ api2 = {
}
return LOVarr.join(";");
},
getTimetable: function()
{
var timetable = [];
for (var t = 0; t < 24*4-1; t++)
{ // "0;0:00;0.25;0:15;0.5;0:30;0.75;0:45;" enzovoorts
timetable.push(t / 4);
timetable.push(String(Math.floor(t / 4)) + ":" + padout(15*(t % 4)));
}
return timetable.join(";");
},
// Geef alle velden van een record terug
sql2jsonfields: function (oRs, model)
{
@@ -789,7 +798,7 @@ api2 = {
var key = oRs(model.primary).Value;
if (key != lastkey)
{
if (key < lastkey && params.include && params.include.length)
if (key < lastkey && params.include && params.include.length && !params.include[0] == 'disc_params') // disc_params is toch one-on-one
{
abort_with_warning("Include '{0}' only allowed when main record is ordered by '{1}'".format(params.include[0], model.primary));
}
@@ -1064,7 +1073,7 @@ function generic_REST_POST(model, gparams)
{
gparams = gparams || {};
if (!model.fields.id.seq) // We willen per se een sequence
if (!model.fields["id"].seq) // We willen per se een sequence
return false;
return function _generic_REST_POST(params, jsondata, the_key)
@@ -1072,10 +1081,10 @@ function generic_REST_POST(model, gparams)
var autparams = user.checkAutorisation(model.autfunction);
user.auth_required_or_abort(autparams.PRSwritelevel < 9 && autparams.ALGwritelevel < 9);
var fields = api2.update_fields(params, model, jsondata);
var dbfields = api2.update_fields(params, model, jsondata);
fields["id"] = model.fields["id"]; // Die zal een seq hebben
var xxxIns = buildInsert(model.table, fields, { noValidateToken: true });
dbfields["id"] = model.fields["id"]; // Die zal een seq hebben
var xxxIns = buildInsert(model.table, dbfields, { noValidateToken: true });
var the_key = xxxIns.sequences[model.fields.id.dbs];
// TODO: Generieke tracking?
// TODO: de includes?
@@ -1097,10 +1106,9 @@ function generic_REST_PUT(model, gparams)
var autparams = user.checkAutorisation(model.autfunction);
user.auth_required_or_abort(autparams.PRSwritelevel < 9 && autparams.ALGwritelevel < 9);
var result = {};
var fields = api2.update_fields(params, model, jsondata);
var wheres = [model.fields.id.dbs + " = " + the_key];
var xxxUpd = buildTrackingUpdate(model.table, wheres.join(" AND " ), fields, { noValidateToken: true });
var dbfields = api2.update_fields(params, model, jsondata);
var wheres = [model.fields["id"].dbs + " = " + the_key];
var xxxUpd = buildTrackingUpdate(model.table, wheres.join(" AND " ), dbfields, { noValidateToken: true });
// TODO: Generieke tracking?
// TODO: de includes?

View File

@@ -0,0 +1,25 @@
<%@ language = "JavaScript" %>
<% /*
$Revision$
$Id$
File: api_reservationcatalog.asp
Description: MLD_DISCIPLINE API
Parameters:
Context:
Notes:
*/
DOCTYPE_Disable = true;
ANONYMOUS_Allowed = 1; // Eigenlijk niet waar. We regelen echter alles zelf
THIS_FILE = "appl/api/api_reservationcatalog.asp";
%>
<!-- #include file="../Shared/common.inc" -->
<!-- #include file="./api2_rest.inc" -->
<!-- #include file="../Shared/json2.js" -->
<!-- #include file="./model_res_discipline.inc" -->
<%
api2_rest.process(model_res_discipline);
%>

View File

@@ -1,175 +0,0 @@
<% /*
$Revision$
$Id$
File: model_res_catalogus.inc
Description: Vanuit CodeCharge gegenereerd model voor res_catalogus
Context:
Notes:
*/
%>
<%
model_res_catalogus =
{
"table": "ins_tab_discipline",
"primary": "ins_discipline_key",
"records_name": "res_cataloguss",
"record_name": "res_catalogus",
"fields": {
"id": {
"dbs": "ins_discipline_key",
"label": "Key",
"typ": "key",
"required": true,
"filter": "exact",
"seq": "ins_s_ins_discipline_key"
},
"ins_discipline_module": {
"dbs": "ins_discipline_module",
"label": L("ins_discipline_module"),
"typ": "varchar",
"hidden_fld": true
},
"ins_discipline_min_level": {
"dbs": "ins_discipline_min_level",
"label": L("ins_discipline_min_level"),
"typ": "key",
"required": true,
"LOV": L("ins_discipline_min_levelLOV"),
"LOVinit": ""
},
"name": {
"dbs": "ins_discipline_omschrijving",
"label": L("ins_discipline_omschrijving"),
"typ": "varchar",
"translate": true,
"required": true
},
"sequence": {
"dbs": "ins_discipline_volgnr",
"label": L("ins_discipline_volgnr"),
"typ": "number"
},
"prs_kostensoort_key": {
"dbs": "prs_kostensoort_key",
"label": L("prs_kostensoort_key"),
"typ": "key",
"foreign": {
"tbl": "PRS_KOSTENSOORT",
"key": "PRS_KOSTENSOORT_KEY",
"desc": "PRS_KOSTENSOORT_OMS"
},
"LOVinit": ""
},
"ins_discipline_kpnverplicht": {
"dbs": "ins_discipline_kpnverplicht",
"label": L("ins_discipline_kpnverplicht"),
"typ": "check"
},
"ins_discipline_email": {
"dbs": "ins_discipline_email",
"label": L("ins_discipline_email"),
"typ": "varchar"
},
"ins_discipline_ktopercentage": {
"dbs": "ins_discipline_ktopercentage",
"label": L("ins_discipline_ktopercentage"),
"typ": "number"
},
"ins_discipline_ktodrempel": {
"dbs": "ins_discipline_ktodrempel",
"label": L("ins_discipline_ktodrempel"),
"typ": "number"
},
/* Velden van RES_DISC_PARAMS */
"res_disc_params_key": {
"dbs": "res_disc_params.res_disc_params_key",
"label": "Key",
"typ": "key"
},
"res_ins_discipline_key": {
"dbs": "res_disc_params.res_ins_discipline_key",
"label": "Foreign key",
"typ": "key",
"hidden_fld": true
},
"res_disc_params_preposttime": {
"dbs": "res_disc_params.res_disc_params_preposttime",
"label": L("res_catalogus_preposttime"),
"typ": "float"
},
"res_disc_params_notify": {
"dbs": "res_disc_params.res_disc_params_notify",
"label": L("res_catalogus_notify"),
"typ": "check"
},
"res_disc_params_kosten": {
"dbs": "res_disc_params.res_disc_params_kosten",
"label": L("res_catalogus_kosten",
"typ": "number"
},
"res_disc_params_noti_dagen": {
"dbs": "res_disc_params.res_disc_params_noti_dagen",
"label": L("res_catalogus_noti_dagen"),
"typ": "number"
},
"res_disc_params_expire_dagen": {
"dbs": "res_disc_params.res_disc_params_expire_dagen",
"label": L("res_catalogus_expire_dagen"),
"typ": "number",
"required": true
},
"res_disc_params_expire_tijd": {
"dbs": "res_disc_params.res_disc_params_expire_tijd",
"label": L("res_catalogus_expire_tijd"),
"typ": "float",
"LOV": scf.getTimetable(),
"LOVinit": ""
},
"res_disc_params_cancel_dagen": {
"dbs": "res_disc_params.res_disc_params_cancel_dagen",
"label": L("res_catalogus_cancel_dagen"),
"typ": "number"
},
"res_disc_params_remoteurl": {
"dbs": "res_disc_params.res_disc_params_remoteurl",
"label": L("res_catalogus_remoteurl"),
"typ": "varchar"
},
"res_disc_params_maxduur": {
"dbs": "res_disc_params.res_disc_params_maxduur",
"label": L("res_catalogus_maxduur"),
"typ": "number",
"required": true
}
},
"list": {
"columns": [
"ins_discipline_min_level",
"name",
"prs_kostensoort_key",
"sequence"
]
},
"search": {
"autosearch": true,
"filters": ["prs_kostensoort_key"]
},
"autfunction": "WEB_PRSSYS",
"record_title": L("res_v_res_catalogus"),
"records_title": L("res_v_res_catalogus_m"),
"show": {}
}
api2.generic_REST(model_res_catalogus, { GET: { tables: [ "res_disc_params" ],
wheres: [ "ins_tab_discipline.ins_discipline_key = res_disc_params.res_ins_discipline_key",
"ins_tab_discipline.ins_discipline_module = 'RES'",
"ins_tab_discipline.ins_discipline_min_level IN (1,2,3)"
]
}
});
%>

View File

@@ -0,0 +1,95 @@
<% /*
$Revision$
$Id$
File: model_res_disc_params.inc
Description: Vanuit CodeCharge gegenereerd model voor res_catalogus
Context:
Notes: *uitsluitend* gebruikt als include van model_res_discipline
*/
%>
<%
model_res_disc_params =
{
"table": "res_disc_params",
"primary": "res_disc_params_key",
"records_name": "res_disc_params",
"record_name": "res_disc_params",
"fields": {
"id": {
"dbs": "res_disc_params_key",
"label": "Key",
"typ": "key",
"seq": "res_s_res_disc_params_key"
},
"res_ins_discipline_key": {
"dbs": "res_ins_discipline_key",
"label": "Foreign key",
"typ": "key",
"hidden_fld": true
},
"res_disc_params_preposttime": {
"dbs": "res_disc_params_preposttime",
"label": L("res_catalogus_preposttime"),
"typ": "float",
"defaultvalue": 0,
required: true
},
"res_disc_params_notify": {
"dbs": "res_disc_params_notify",
"label": L("res_catalogus_notify"),
"typ": "check"
},
"res_disc_params_kosten": {
"dbs": "res_disc_params_kosten",
"label": L("res_catalogus_kosten"),
"defaultvalue": 100,
"typ": "number"
},
"res_disc_params_noti_dagen": {
"dbs": "res_disc_params_noti_dagen",
"label": L("res_catalogus_noti_dagen"),
"typ": "number"
},
"res_disc_params_expire_dagen": {
"dbs": "res_disc_params_expire_dagen",
"label": L("res_catalogus_expire_dagen"),
"typ": "number",
"defaultvalue": 1,
"required": true
},
"res_disc_params_expire_tijd": {
"dbs": "res_disc_params_expire_tijd",
"label": L("res_catalogus_expire_tijd"),
"typ": "float",
"LOV": api2.getTimetable(), // TODO timepicker?
"LOVinit": ""
},
"res_disc_params_cancel_dagen": {
"dbs": "res_disc_params_cancel_dagen",
"label": L("res_catalogus_cancel_dagen"),
"typ": "number"
},
"res_disc_params_remoteurl": {
"dbs": "res_disc_params_remoteurl",
"label": L("res_catalogus_remoteurl"),
"typ": "varchar"
},
"res_disc_params_maxduur": {
"dbs": "res_disc_params_maxduur",
"label": L("res_catalogus_maxduur"),
"typ": "number",
"defaultvalue": 0,
"required": true
}
},
"autfunction": "WEB_PRSSYS"
}
api2.generic_REST(model_res_disc_params);
%>

View File

@@ -0,0 +1,232 @@
<% /*
$Revision$
$Id$
File: model_res_discipline.inc
Description: Vanuit CodeCharge gegenereerd model voor res_catalogus
Context:
Notes: intern hebben we een apart model voor _res_disc_params
Naar de buitenwereld presenteren we het als <20><>n model
*/
%>
<!-- #include file="model_res_disc_params.inc" -->
<%
function model_res_discipline(disc_key, params)
{
// E<>n model voor de buitenwereld
for (var x in _model_res_discipline)
this[x] = _model_res_discipline[x];
this.fields = []; // Die krijgt een deepclone
for (var fld in _model_res_discipline.fields)
this.fields[fld] = _model_res_discipline.fields[fld];
for (var fld in this.disc_params.model.fields)
{
if (fld != "id")
this.fields[fld] = this.disc_params.model.fields[fld];
}
this.REST_GET = function _REST_GET(params)
{
// We zouden net als bij de PUT etc. een rechtstreekse call op de eigen REST_GET kunnen doen
// maar dat werkt niet (zo soepeltjes) voor meerere records
_model_res_discipline.includes = { "disc_params" : _model_res_discipline.disc_params };
params.include = ["disc_params"]; // Altijd
var cat_data = generic_REST_GET(_model_res_discipline, // Let op: de originele _model_res_discipline
{ "GET": {
wheres: [ "ins_tab_discipline.ins_discipline_module = 'RES'",
"ins_tab_discipline.ins_discipline_min_level IN (1,2,3)"
]
}
}
)(params);
// include van disc_params data niveau 'hoger' zetten
for (var i = 0; i < cat_data.length; i ++)
{
for (var fld in cat_data[i].disc_params[0])
{
if (fld != "id")
cat_data[i][fld] = cat_data[i].disc_params[0][fld];
}
delete cat_data[i].disc_params;
}
return cat_data;
};
this.REST_POST = function _REST_POST(params, jsondata)
{
var autparams = user.checkAutorisation(this.autfunction);
user.auth_required_or_abort(autparams.PRSwritelevel < 9 && autparams.ALGwritelevel < 9);
// disc_params velden er uit trekken naar eigen json object
var jsondata_dp = { };
for (var fld in jsondata)
{
if (fld in this.disc_params.model.fields && !(fld in _model_res_discipline.fields))
{
jsondata_dp[fld] = jsondata[fld];
delete jsondata[fld];
}
}
jsondata["ins_discipline_module"] = "RES";
var dbfields = api2.update_fields(params, this, jsondata);
dbfields["id"] = this.fields["id"]; // Die zal een seq hebben
var xxxIns = buildInsert(this.table, dbfields, { noValidateToken: true });
var the_key = xxxIns.sequences[this.fields.id.dbs];
var err = Oracle.Execute(xxxIns.sql, true);
if (err.friendlyMsg)
abort_with_warning(err.friendlyMsg);
// Nu de one-on-one tabel. De eigen sequence daarvan interesseert ons niet
jsondata_dp[this.disc_params.joinfield] = the_key;
var dbfields = api2.update_fields(params, this.disc_params.model, jsondata_dp);
var xxxIns = buildInsert(this.disc_params.model.table, dbfields, { noValidateToken: true });
var err = Oracle.Execute(xxxIns.sql, true);
if (err.friendlyMsg)
{
var sql = "DELETE FROM " + this.table + " WHERE " + this.fields.id.dbs + " = " + the_key;
Oracle.Execute(sql);
abort_with_warning(err.friendlyMsg);
}
return { key: the_key, warning: "" };
}
this.REST_PUT = function _REST_PUT(params, jsondata, the_key)
{
var autparams = user.checkAutorisation(this.autfunction);
user.auth_required_or_abort(autparams.PRSwritelevel < 9 && autparams.ALGwritelevel < 9);
// disc_params velden er uit trekken naar eigen json object
var jsondata_dp = { };
for (var fld in jsondata)
{
if (fld in this.disc_params.model.fields && !(fld in _model_res_discipline.fields))
{
jsondata_dp[fld] = jsondata[fld];
delete jsondata[fld];
}
}
jsondata_dp[this.disc_params.joinfield] = the_key;
var dbfields = api2.update_fields(params, this, jsondata);
var wheres = [this.fields.id.dbs + " = " + the_key];
var xxxUpd = buildTrackingUpdate(this.table, wheres.join(" AND " ), dbfields, { noValidateToken: true });
var err = Oracle.Execute(xxxUpd.sql, true);
if (err.friendlyMsg)
abort_with_warning(err.friendlyMsg);
// Nu de one-on-one tabel
var dbfields = api2.update_fields(params, this.disc_params.model, jsondata_dp);
var wheres = [this.disc_params.model.fields[this.disc_params.joinfield].dbs + " = " + the_key];
var xxxUpd = buildTrackingUpdate(this.disc_params.model.table, wheres.join(" AND " ), dbfields, { noValidateToken: true });
var err = Oracle.Execute(xxxUpd.sql, true);
if (err.friendlyMsg)
abort_with_warning(err.friendlyMsg);
return { key: the_key, warning: "" };
};
this.REST_DELETE = generic_REST_DELETE(this, {});
}
_model_res_discipline = // Internal only
{
"table": "ins_tab_discipline",
"primary": "ins_discipline_key",
"records_name": "reservationcatalogs",
"record_name": "reservationcatalog",
"fields": {
"id": {
"dbs": "ins_discipline_key",
"label": "Key",
"typ": "key",
"required": true,
"filter": "exact",
"seq": "ins_s_ins_discipline_key"
},
"ins_discipline_module": {
"dbs": "ins_discipline_module",
"label": L("ins_discipline_module"),
"typ": "varchar",
"hidden_fld": true
},
"ins_discipline_min_level": {
"dbs": "ins_discipline_min_level",
"label": L("ins_discipline_min_level"),
"typ": "key",
"required": true,
"LOV": L("ins_discipline_min_levelLOV"),
"LOVinit": ""
},
"name": {
"dbs": "ins_discipline_omschrijving",
"label": L("ins_discipline_omschrijving"),
"typ": "varchar",
"translate": true,
"required": true
},
"sequence": {
"dbs": "ins_discipline_volgnr",
"label": L("ins_discipline_volgnr"),
"typ": "number"
},
"costtype": {
"dbs": "prs_kostensoort_key",
"label": L("prs_kostensoort_key"),
"typ": "key",
"foreign": "prs_kostensoort",
"LOVinit": ""
},
"ins_discipline_kpnverplicht": {
"dbs": "ins_discipline_kpnverplicht",
"label": L("ins_discipline_kpnverplicht"),
"typ": "check"
},
"ins_discipline_email": {
"dbs": "ins_discipline_email",
"label": L("ins_discipline_email"),
"typ": "varchar"
},
"ins_discipline_ktopercentage": {
"dbs": "ins_discipline_ktopercentage",
"label": L("ins_discipline_ktopercentage"),
"typ": "number"
},
"ins_discipline_ktodrempel": {
"dbs": "ins_discipline_ktodrempel",
"label": L("ins_discipline_ktodrempel"),
"typ": "number"
}
/* Velden van RES_DISC_PARAMS komen er dynamisch bij */
},
"disc_params": { model: model_res_disc_params,
joinfield: "res_ins_discipline_key"
},
"soft_delete": "ins_discipline_verwijder",
"list": {
"columns": [
"ins_discipline_min_level",
"name",
"prs_kostensoort_key",
"sequence"
]
},
"search": {
"autosearch": true,
"filters": ["prs_kostensoort_key"]
},
"autfunction": "WEB_PRSSYS",
"record_title": L("res_v_res_catalogus"),
"records_title": L("res_v_res_catalogus_m"),
"show": {}
}
%>

View File

@@ -134,35 +134,6 @@ var scf =
break;
}
return result;
},
getTimetable: function()
{
var timetable = "0;0:00;0.25;0:15;0.5;0:30;0.75;0:45;"
+ "1;1:00;1.25;1:15;1.5;1:30;1.75;1:45;"
+ "2;2:00;2.25;2:15;2.5;2:30;2.75;2:45;"
+ "3;3:00;3.25;3:15;3.5;3:30;3.75;3:45;"
+ "4;4:00;4.25;4:15;4.5;4:30;4.75;4:45;"
+ "5;5:00;5.25;5:15;5.5;5:30;5.75;5:45;"
+ "6;6:00;6.25;6:15;6.5;6:30;6.75;6:45;"
+ "7;7:00;7.25;7:15;7.5;7:30;7.75;7:45;"
+ "8;8:00;8.25;8:15;8.5;8:30;8.75;8:45;"
+ "9;9:00;9.25;9:15;9.5;9:30;9.75;9:45;"
+ "10;10:00;10.25;10:15;10.5;10:30;10.75;10:45;"
+ "11;11:00;11.25;11:15;11.5;11:30;11.75;11:45;"
+ "12;12:00;12.25;12:15;12.5;12:30;12.75;12:45;"
+ "13;13:00;13.25;13:15;13.5;13:30;13.75;13:45;"
+ "14;14:00;14.25;14:15;14.5;14:30;14.75;14:45;"
+ "15;15:00;15.25;15:15;15.5;15:30;15.75;15:45;"
+ "16;16:00;16.25;16:15;16.5;16:30;16.75;16:45;"
+ "17;17:00;17.25;17:15;17.5;17:30;17.75;17:45;"
+ "18;18:00;18.25;18:15;18.5;18:30;18.75;18:45;"
+ "19;19:00;19.25;19:15;19.5;19:30;19.75;19:45;"
+ "20;20:00;20.25;20:15;20.5;20:30;20.75;20:45;"
+ "21;21:00;21.25;21:15;21.5;21:30;21.75;21:45;"
+ "22;22:00;22.25;22:15;22.5;22:30;22.75;22:45;"
+ "23;23:00;23.25;23:15;23.5;23:30;23.75;23:45";
return timetable;
}
}
%>

View File

@@ -59,7 +59,6 @@ function scaffolding_edit(model, scf_params)
var field = model.fields[fld];
if (fld in filter)
{
var field = model.fields[fld];
xxx_data[fld] = filter[fld];
if (field.foreign)
{
@@ -67,6 +66,8 @@ function scaffolding_edit(model, scf_params)
}
field.readonly = true;
}
else
xxx_data[fld] = field.defaultvalue;
}
}
if ("hook_pre_edit" in model)