<% /* $Revision$ $Id$ File: scaffolding_edit.asp Description: show detailed information of a usrrapx Parameters: usrxxx_key (usrrapx id) Context: Note: */ %> <% function scaffolding_edit(model, scf_params) { scf_params.edit = scf_params.edit || {}; FCLTHeader.Requires({ plugins: ["jQuery"], js: ["jquery-ui.js", "jquery.timepicker-table.js", "multi.js"], css: ["timePicker-table.css"]}) if (scf_params.edit && "requires" in scf_params.edit) FCLTHeader.Requires(scf_params.edit.requires); if (model.edit && "requires" in model.edit) // Voor het included model. FCLTHeader.Requires(model.edit.requires); var transit = scf_transit2url(scf_params); if (scf_params.incsetting) transit += "&" + scf_params.incsetting.joinfield + "=" + getQParamInt(scf_params.incsetting.joinfield); var cloning = getQParamInt( "scf_clone", 0 ) == 1; if (cloning) transit += "&scf_clone=1"; if (scf_params.transit_qlist) { // Toevoegen van niet-model gerelateerde Q-parameters. for (var i=0; i 0) { user.auth_required_or_abort(model.REST_PUT || model.REST_DELETE); var xxx_params = { filter: { id: key }, cloning: cloning }; xxx_params.for_edit = true; // dan wordt niet vertaald var xxx_array = model.REST_GET(xxx_params); if (!xxx_array.length) shared.record_not_found(); var xxx_data = xxx_array[0]; // Defaults vanuit url maken we readonly // Vooral bij includes wordt hier ook de parent_key verwijzing gezet var filter = shared.qs2json(model) for (var fld in model.fields) { var field = model.fields[fld]; if (!model.REST_PUT) // Bij geen REST_PUT wordt *alles* readonly. Waarschijnlijk alleen delete dan. model.fields[fld].readonly = true; } // Uniques verwerken, // Die misbruiken we om een intelligentere 'Wilt U verwijderen' titel te kunnen maken // Koppeltabellen hebben namelijk geen 'name' veld en we gokken dan één van de uniques // interessant is for (var fld in model.fields) { var field = model.fields[fld]; if (cloning && (field.clone === false || fld == "id")) xxx_data[fld] = field.defaultvalue; if (typeof field.clone == "function") xxx_data[fld] = field.clone(xxx_data); if (field.required && xxx_data[fld] == null) xxx_data[fld] = field.defaultvalue; if (field.uniquewith) { if (!xxx_data.name && !(fld in filter)) { xxx_data.name = xxx_data[fld].name; } } // Met friendlyname kun je het ook expliciet sturen (factuurschema bijvoorbeeld) if (field.friendlyname && !xxx_data.name) { xxx_data.name = field.foreign?xxx_data[fld].name:xxx_data[fld]; if (typeof xxx_data.name == "date" || xxx_data.name instanceof Date) xxx_data.name = toDateString(xxx_data.name); } } } else { user.auth_required_or_abort(model.REST_POST); xxx_data = {}; // Defaults vanuit url invullen // Bij includes wordt hier ook de parent_key verwijzing gezet var filter = scf_params.filter || shared.qs2json(model) for (var fld in model.fields) { var field = model.fields[fld]; if (fld in filter) { xxx_data[fld] = filter[fld]; if (field.typ == "date" || field.typ == "datetime") xxx_data[fld] = new Date(parseInt(filter[fld],10)); if (field.foreign) { // name ook achterhalen. Voor includes is die waarschijnlijk ook wel te vinden // in scf_params.orgmodel o.i.d. maar dit is doorgaans toch een heel goedkope query var foreign = field.foreign; if (typeof foreign == 'string') foreign = foreignKeyTable(foreign); var sqlf = "SELECT " + foreign.desc + " FROM " + foreign.tbl + " " + (foreign.alias||"") if (foreign.where) sqlf += " WHERE " + foreign.where + " AND "; else sqlf += " WHERE "; sqlf += foreign.key + " = " + filter[fld]; var oRs = Oracle.Execute(sqlf); xxx_data[fld] = { id: filter[fld], name: oRs(0).Value }; oRs.Close() } field.readonly = true; } else if ("defaultvalue" in field) { xxx_data[fld] = field.defaultvalue; if ("LOV" in field) { var spl = api2.splitLOV(field.LOV); xxx_data[fld] = { id: field.defaultvalue, name: spl[field.defaultvalue] }; } } } // Uniques verwerken, bijvoorbeeld model_fac_gebruikersgroep for (var fld in model.fields) { var field = model.fields[fld]; if (field.uniquewith) { var where = "{0} NOT IN (SELECT {1} FROM {2} WHERE {3} = {4} {5} {6})".format(field.foreign.key, field.dbs, model.table, filter[field.uniquewith], model.fields[field.uniquewith].dbs, model.soft_delete?" AND " + model.soft_delete + " IS NULL":"", model.soft_expire?" AND(" + model.soft_expire + " IS NULL OR " + model.soft_expire + " > SYSDATE)":"" ) field.foreign.where = (field.foreign.where?field.foreign.where + " AND ":"") + where; } } } api2.setfieldlengths(model); // max lengtes bepalen if ("hook_pre_edit" in model && !multi) model.hook_pre_edit(xxx_data, model.fields, scf_params); else if ("hook_pre_multi_edit" in model && multi) model.hook_pre_multi_edit(xxx_data, model.fields, scf_params); 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; %> <% FCLTHeader.Generate(); %> " class='<%=modal?"modal scaffolding":"editmode"%>'> <% var buttons = [ ]; if (key > 0 && modal) { var sql = "SELECT COUNT(*)" + " FROM fac_audit" + " WHERE fac_audit_tabelnaam = " + safe.quoted_sql(model.table) + " AND fac_audit_tabelkey = " + key; var oRs = Oracle.Execute(sql); var cnt = oRs(0).Value; oRs.Close(); if (cnt > 0) buttons.push({title: L("lcl_history") + " ({0})".format(cnt), action:"scf_history()", icon: "fa-history", id: "btn_scf_history", importance: 3 }); } if (model.REST_PUT || key < 0) buttons.push({title: L("lcl_submit"), action:"scf_submit()", icon: "fa-fclt-save", singlepress: true, id: "btn_scf_submit", importance: 1 }); if (scf_params.edit.buttons) { for (var i = 0; i < scf_params.edit.buttons.length; i++) { // Als je een action opgeeft *zonder* haakjes voegen we automagisch de key en model toe if (scf_params.edit.buttons[i].action.indexOf("(") < 0) scf_params.edit.buttons[i].action += "(" + key + ", '" + model.table + "')" buttons.push(scf_params.edit.buttons[i]); } } if (modal && model.REST_DELETE && key > 0 && !multi) buttons.push({title: L("lcl_delete"), action:"scf_delete()", icon: "fa-trash-alt", singlepress: true, id: "btn_scf_delete", importance: 3 }); buttons.push({title: L("lcl_cancel"), action:"scf_cancel()", icon: "fa-fclt-cancel", id: "btn_scf_cancel", importance: 3 }); // if (!modal && model.hashints) // buttons.push({title: L("lcl_hint"), action:"scf_enablehint()", icon: "fa-question-circle", id: "btn_scf_enablehint", importance: 3 }); if (!modal) { SUBFRAME_START(); var ttl = safe.html(model.record_title); IFRAMER_HEADER(ttl, buttons, { ishtmlsafe: true, hints: model.hashints || __Logging > 0}); } else MODAL_START(); %>
<% if (scf_params.transit_flist) { // Toevoegen van niet-model gerelateerde F-parameters. for (var i=0; i"); } } if (multi) { Response.Write(""); Response.Write(""); } // Maak een lijst met alle velden die getoond moeten worden. // Hidden velden en velden die niet multi-editable zijn (meerdere records tegelijk wijzigen) // worden eruit gefilterd. var fld_arr_all = []; for (var fld in model.fields) { var field = model.fields[fld]; if (field.sql) { if (field.sqlshow) // toch tonen, ook al is hij readonly fld_arr_all.push(fld); continue; // weinig aan te bewerken } 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. scf_RWHIDDENTR(model, fld, xxx_data[fld]); if (field.showtransit) // toch tonen, ook al is hij readonly fld_arr_all.push(fld); } else { fld_arr_all.push(fld); } } var has_layout = (scf_params.layout ? true : false); var scf_layout = scf_create_layout_list(model, scf_params, fld_arr_all); // // Sorteer de velden volgens gegeven layout. for (var blk in scf_layout) { var blk_obj = scf_layout[blk]; var blk_params = { icon: blk_obj.icon, extraclass: (blk_obj.extraclass ? blk_obj.extraclass : ""), ishtmlsafe: blk_obj.ishtmlsafe, hidden: blk_obj.hidden, buttons: blk_obj.buttons }; // Hoeveel velden zitten er in dit blok var aantal = 0; for (var fld_nr in blk_obj.fields) { var fld = blk_obj.fields[fld_nr]; if (inArray(fld, fld_arr_all)) aantal += 1; } if (aantal > 0) { if (!modal) BLOCK_START(blk_obj.blockid, blk_obj.label, blk_params); else MODAL_BLOCK_START(blk_obj.blockid, blk_obj.label, blk_params); if (multi && !has_layout) Response.Write("" + L("lcl_change") + ""); var multiadd = scf_params.incsetting && scf_params.incsetting.multiadd; // Dan kunnen we meerdere toevoegen for (var fld_nr in blk_obj.fields) { var fld = blk_obj.fields[fld_nr]; if (inArray(fld, fld_arr_all)) { var field = model.fields[fld]; var multiselect = (field.foreign ? field.foreign.multiselect : false) || (field.LOV ? field.multiselect : false); if (field.readonly || fld == "id" || (field.hidden_fld && field.showtransit)) scf_ROFIELDTR(model, fld, xxx_data[fld]); else if (field.insertonly && key > 0 && !cloning) scf_ROFIELDTR(model, fld, xxx_data[fld]); else if (!field.hidden_fld) scf_RWFIELDTR(model, fld, xxx_data[fld], key, { multiadd: multiadd, multiselect: multiselect, multiedit: multi }); } } if (!modal) BLOCK_END(); else MODAL_BLOCK_END(); } } if (modal) { SIMPLE_BLOCK_START(); CreateButtons(buttons); SIMPLE_BLOCK_END(); } IFACE.FORM_END(); %> <% if (multi) { // Overal een vinkje voorzetten %> <% } %> <% if (!modal) SUBFRAME_END(); else MODAL_END(); %> <% } %>