280 lines
12 KiB
Plaintext
280 lines
12 KiB
Plaintext
<%@language = "javascript" %>
|
||
<% /*
|
||
$Revision$
|
||
$Id$
|
||
|
||
File: ins_edit_deel_save.asp
|
||
Description: SUBMIT-form
|
||
*/ %>
|
||
|
||
<!-- #include file="../Shared/common.inc" -->
|
||
<!-- #include file="../shared/save2db.inc" -->
|
||
<!-- #include file="../Shared/kenmerk_common.inc" -->
|
||
<!-- #include file="./ins.inc" -->
|
||
|
||
|
||
<% FCLTHeader.Requires({ plugins:["jQuery"],
|
||
js: []
|
||
}) %>
|
||
<%
|
||
var obj_key = getQParamInt( "ins_key", -1 );
|
||
var urole = getQParamSafe("urole");
|
||
var parent_key = getQParamInt("parent_key", -1);
|
||
|
||
var bind = "";
|
||
var bind_key = -1;
|
||
var flextrackarray = [];
|
||
|
||
var free = getFParamInt("free", 0);
|
||
|
||
var loc = getFParamInt("locatiekey", -1);
|
||
var dept_key = getFParamInt ("sDept", -1 );
|
||
var prs_key = getFParamInt ("sPerson", -1 );
|
||
var bld_key = getFParamInt ("gebouwkey", -1 );
|
||
var floor_key = getFParamInt ("verdiepingkey", -1);
|
||
var room_key = getFParamInt ("ruimtekey", -1 );
|
||
var wp_key = getFParamInt ("werkplekkey", -1 );
|
||
var desc = getFParam("desc", "");
|
||
|
||
var lent_out_person = getFParamInt("lent_out_person", -1);
|
||
|
||
var srtdeel_key = getFParamInt("srtdeel");
|
||
if (ins.isSleCil(srtdeel_key, "S"))
|
||
var autfunction = "WEB_SLEBOF";
|
||
else
|
||
var autfunction = urole == "fo"? "WEB_INSFOF" : "WEB_INSMAN";
|
||
|
||
var authparams = user.checkAutorisation(autfunction);
|
||
|
||
if(dept_key > 0)
|
||
{
|
||
bind_key = dept_key;
|
||
bind = "A";
|
||
}
|
||
|
||
if(prs_key > 0)
|
||
{
|
||
bind_key = prs_key;
|
||
bind = "P";
|
||
}
|
||
|
||
if(bld_key > 0)
|
||
{
|
||
bind_key = bld_key;
|
||
bind = "T";
|
||
}
|
||
|
||
if(room_key > 0)
|
||
{
|
||
bind_key = room_key;
|
||
bind = "R";
|
||
}
|
||
|
||
if(wp_key > 0)
|
||
{
|
||
bind_key = wp_key;
|
||
bind = "W";
|
||
}
|
||
|
||
var warning = "";
|
||
var ins_explode_objects = S("ins_explode_objects");
|
||
if (obj_key > 0)
|
||
{ // Let op als je hier nieuwe velden toevoegt: nieuwe objecten hebben eigen fields-object (MGE: Dan ook maar binnen if statement declareren)
|
||
var fields = [ { dbs: "ins_deel_x", typ: "float", frm: "xcoord", track: L("lcl_obj_geoxcoord") },
|
||
{ dbs: "ins_deel_y", typ: "float", frm: "ycoord", track: L("lcl_obj_geoycoord") },
|
||
{ dbs: "ins_alg_locatie_key", typ: "key", frm: "locatiekey" /* tracking niet nodig */ },
|
||
{ dbs: "ins_deel_vervaldatum", typ: "date", frm: "vervaldatum", track: L("lcl_ins_vervaldatum") },
|
||
{ dbs: "ins_deel_aanmaak", typ: "date", frm: "aanmaakdatum", track: L("lcl_last_action") },
|
||
{ dbs: "prs_perslid_key_beh", typ: "key", frm: "ins_manager", track: L("lcl_ins_manager"), foreign: "prs_perslid" },
|
||
{ dbs: "ins_deel_opmerking", typ: "varchar", frm: "opmerk"},
|
||
{ dbs: "ins_deel_actief", typ: "check0", frm: "ins_actief", track: L("lcl_ins_active") } ];
|
||
|
||
if (ins_explode_objects == 0)
|
||
fields.push({ dbs: "ins_deel_aantal", typ: "float", frm: "count", track: L("lcl_amount") });
|
||
// Checken of het eenheden selectveld met dagen/uren bij "Uitvoertijd" niet readonly was en wel is meegegeven.
|
||
// Als dit eenheden selectieveld readonly was dan is er geen waarde voor uitvoertijd ingevuld en moeten beide waarden null worden.
|
||
fields = shared.add_time_field(fields, "ins_deel_t_uitvoertijd", "uitvoertijd", "dayshours", {tracktijdsduur: L("lcl_ins_uitvoertijd"), trackeenheid: L("lcl_ins_uitvoertijd_eenheid")});
|
||
|
||
if (bind_key > 0 && bind_key != "")
|
||
{
|
||
fields.push({ dbs: "ins_alg_ruimte_key", typ: "key", val: bind_key, track: true /* afzonderlijke tracking, wel oldjsval */ });
|
||
fields.push({ dbs: "ins_alg_ruimte_type", typ: "varchar", val: bind, track: true /* afzonderlijke tracking, wel oldjsval */ });
|
||
}
|
||
|
||
// Heb ik de juiste rechten
|
||
var this_ins = ins.func_enabled_deel(obj_key);
|
||
user.auth_required_or_abort(this_ins.canChange || this_ins.canChangeOwn); // dat is toch wel het minste
|
||
|
||
if (urole != "fo")
|
||
{
|
||
sql = "SELECT r.alg_verdieping_key"
|
||
+ " FROM alg_ruimte r, ins_deel d"
|
||
+ " WHERE R.alg_ruimte_key = d.ins_alg_ruimte_key"
|
||
+ " AND d.ins_alg_ruimte_type = 'R'"
|
||
+ " AND d.ins_deel_key = " + obj_key;
|
||
oRs = Oracle.Execute(sql);
|
||
if (!oRs.eof)
|
||
{
|
||
var verd_key = oRs("alg_verdieping_key").Value;
|
||
if (verd_key != floor_key)
|
||
{
|
||
fields.push({ dbs: "ins_deel_dwgx", typ: "float", val: "" });
|
||
fields.push({ dbs: "ins_deel_dwgy", typ: "float", val: "" });
|
||
}
|
||
}
|
||
|
||
fields.push({ dbs: "ins_deel_omschrijving", typ: "varchar", val: desc});
|
||
|
||
//sql = buildUpdate("ins_deel", fields) + " ins_deel_key = " + obj_key;
|
||
// insUpd heeft na afloop handige oldjsvals
|
||
var insUpd = buildTrackingUpdate("ins_deel", " ins_deel_key = " + obj_key, fields);
|
||
|
||
// Submit the changed data
|
||
var err = Oracle.Execute(insUpd.sql, true);
|
||
if (err.friendlyMsg)
|
||
warning = err.friendlyMsg;
|
||
|
||
// tracking plaats/eigenaar is ingewikkelder (key en type en slechts <20><>n track gewenst), die doen we handmatig
|
||
// ins_alg_ruimte_key (bind_key) en ins_alg_ruimte_type (bind) bevatten reeds de nieuwe waardes
|
||
var newtxt = ins.getBindingItemString(bind, bind_key, parent_key);
|
||
var oldtxt = ins.getBindingItemString(insUpd.oldjsvals["ins_alg_ruimte_type"], insUpd.oldjsvals["ins_alg_ruimte_key"], parent_key); // parent_key kan niet gewijzigd worden.
|
||
if (oldtxt != newtxt)
|
||
insUpd.trackarray.push(L("lcl_owner_info") + ": " + buildTrackText("varchar", oldtxt, newtxt, { nodiff: true }));
|
||
|
||
if (!warning)
|
||
{
|
||
// Kenmerken updaten.
|
||
flextrackarray = ins.updateKenmerkdeel(obj_key);
|
||
}
|
||
|
||
var update_string = L("lcl_ins_is_insupd") + "\n" + insUpd.trackarray.concat(flextrackarray).join("\n")
|
||
shared.trackaction("INSUPD", obj_key, update_string);
|
||
}
|
||
}
|
||
else
|
||
{ // Nieuw.
|
||
// Voor nieuwe objecten worden het aantal objecten per stuk aangemaakt.
|
||
var i_count = getFParamInt("count", -1);
|
||
var srtdeel_key = getFParamInt("srtdeel");
|
||
|
||
// Voor objecten die geen sleutels/cilinders zijn de schrijfrechten controleren i.v.m. scope. Voor nieuwe sleutels/cilinders is standaard autorisatie voldoende.
|
||
// Autorisatie kan scherper
|
||
if (ins.isSleCil(srtdeel_key, "S"))
|
||
{ // Het is een nieuwe sleutel/cilinder. Alleen alg scope
|
||
var iresult = user.func_enabled("SLE",
|
||
null, // ins_discipline doet niet ter zake
|
||
bind_key, // alg_key
|
||
null); // hier zou alleen een prs_key in mogen, we testen zo afzonderlijk
|
||
if (!iresult || !iresult.canWrite("WEB_SLEBOF"))
|
||
abort_with_warning(L("lcl_obj_notallowed")); // Schrijven niet toegestaan
|
||
}
|
||
else
|
||
{ // Objecten die geen sleutel/cilinder zijn. Discipline en alg scope
|
||
sql = "SELECT ins_discipline_key"
|
||
+ " FROM ins_srtdeel isd, ins_srtgroep isg"
|
||
+ " WHERE isd.ins_srtgroep_key = isg.ins_srtgroep_key"
|
||
+ " AND ins_srtdeel_key = " + srtdeel_key;
|
||
oRs = Oracle.Execute(sql);
|
||
var disc_key = oRs("ins_discipline_key");
|
||
|
||
// De schrijfrechten controleren i.v.m. discipline en alg scope
|
||
var iresult = ins.func_enabled_scope(disc_key, bind, bind_key);
|
||
if (!iresult || !iresult.canChange)
|
||
abort_with_warning(L("lcl_obj_notallowed")); // combinatie niet toegestaan
|
||
}
|
||
|
||
if (ins_explode_objects == 0 || isNaN(i_count) || i_count < 1)
|
||
i_count = 1;
|
||
|
||
for( c = 0; c < i_count; c++ )
|
||
{
|
||
var fields = [];
|
||
var fields = [ { dbs: "ins_deel_x", typ: "float", frm: "xcoord" },
|
||
{ dbs: "ins_deel_y", typ: "float", frm: "ycoord" },
|
||
{ dbs: "ins_alg_locatie_key", typ: "key", frm: "locatiekey" },
|
||
{ dbs: "ins_deel_vervaldatum", typ: "date", frm: "vervaldatum" },
|
||
{ dbs: "ins_deel_aanmaak", typ: "date", frm: "aanmaakdatum" },
|
||
{ dbs: "prs_perslid_key_beh", typ: "key", frm: "ins_manager", foreign: "prs_perslid" },
|
||
{ dbs: "ins_deel_opmerking", typ: "varchar", frm: "opmerk"},
|
||
{ dbs: "ins_alg_ruimte_key", typ: "key", val: bind_key },
|
||
{ dbs: "ins_alg_ruimte_type", typ: "varchar", val: bind } ];
|
||
|
||
if (ins_explode_objects == 0)
|
||
fields.push({ dbs: "ins_deel_aantal", typ: "number", frm: "count" });
|
||
|
||
// Checken of het eenheden selectveld met dagen/uren bij "Uitvoertijd" niet readonly was en wel is meegegeven.
|
||
// Als dit eenheden selectieveld readonly was dan wordt deze niet opgeslagen en dan moet de tijdsduur ook niet opgeslagen worden.
|
||
fields = shared.add_time_field(fields, "ins_deel_t_uitvoertijd", "uitvoertijd", "dayshours");
|
||
|
||
if (c == 0)
|
||
{
|
||
fields.push({ dbs: "ins_deel_omschrijving", typ: "varchar", val: desc})
|
||
}
|
||
else
|
||
{ // Get default description for object for sequence of inserts
|
||
// Als een nummer is gegeven als default code voor een onderdeel dan nummeren we stug door.
|
||
// Als voor de discipline is aangegeven dat niet automatische genummerd dient te worden zal dat voor multi objecten toch altijd moeten blijven.
|
||
if (parent_key > 0 && !isNaN(parseInt(desc, 10)))
|
||
{
|
||
__Log("Stug doornummeren van onderdelen. Na " + desc + " komt ...")
|
||
desc = '' + (1 + parseInt(desc,10))
|
||
|
||
fields.push({ dbs: "ins_deel_omschrijving", typ: "varchar", val: desc})
|
||
}
|
||
else
|
||
{
|
||
sql = "SELECT ins.get_description(" + safe.quoted_sql(parent_key < 0 ? "LPN_INS_DEEL" : "LPN_INS_ONDERDEEL")
|
||
+ " ," + (parent_key < 0 ? loc : parent_key) // scope for uniqueness could be location (unused) or parent
|
||
+ " , ins_srtdeel_code_upper)"
|
||
+ " FROM ins_srtdeel"
|
||
+ " WHERE ins_srtdeel_key = " + srtdeel_key;
|
||
oRs = Oracle.Execute(sql);
|
||
if (!oRs.eof)
|
||
{
|
||
desc = oRs(0).Value;
|
||
fields.push({ dbs: "ins_deel_omschrijving", typ: "varchar", val: desc})
|
||
}
|
||
oRs.Close();
|
||
}
|
||
}
|
||
fields.push({ dbs: "ins_deel_key", typ: "key", seq: "ins_s_ins_inst_keys" });
|
||
fields.push({ dbs: "ins_srtdeel_key", typ: "key", val: srtdeel_key });
|
||
|
||
if (parent_key > 0)
|
||
fields.push({ dbs: "ins_deel_parent_key", typ: "key", val: parent_key });
|
||
|
||
var regIns = buildInsert("ins_deel", fields);
|
||
var obj_key = regIns.sequences["ins_deel_key"];
|
||
sql = regIns.sql;
|
||
var err = Oracle.Execute(sql, true);
|
||
|
||
if (err.friendlyMsg)
|
||
warning = err.friendlyMsg;
|
||
|
||
if (!warning)
|
||
{
|
||
// Kenmerken opslaan.
|
||
flextrackarray = ins.updateKenmerkdeel (obj_key, {isnew: true});
|
||
// Flextrackarray wordt niet gebruikt voor tracking bij nieuw object. Alle velden zijn nieuw
|
||
shared.trackaction("INSNEW", obj_key);
|
||
}
|
||
} // for i_count
|
||
}
|
||
%>
|
||
<html>
|
||
<head>
|
||
<% FCLTHeader.Generate() %>
|
||
<script>
|
||
$(document).ready(function () {
|
||
FcltMgr.closeDetail(window, { ins_key: <%=obj_key%>,
|
||
warning: "<%=safe.jsstring(warning)%>",
|
||
keepForm: <%=warning?"true":"false"%>,
|
||
urole: "<%=urole%>",
|
||
refresh: true
|
||
}); } );
|
||
</script>
|
||
</head>
|
||
<body>
|
||
</body>
|
||
</html>
|