924 lines
37 KiB
JavaScript
924 lines
37 KiB
JavaScript
/*
|
||
$Revision$
|
||
$Id$
|
||
|
||
File: mld_edit_melding.js
|
||
*/
|
||
|
||
function checkInput()
|
||
{
|
||
if ($("#mldOmschrijving")[0] && $("#mldOmschrijving").css("display") == "block" && $("#melding_omschrijving").val() != "")
|
||
{
|
||
s = $("#melding_omschrijving").val();
|
||
if (s.length > 4000)
|
||
{
|
||
s = s.substring(0, 4000);
|
||
}
|
||
$("#melding_omschrijving").val(s);
|
||
}
|
||
|
||
if ($("#remark")[0] && $("#remark").val() != "")
|
||
{
|
||
s = $("#remark").val();
|
||
if (s.length > 4000)
|
||
{
|
||
s = s.substring(0, 4000);
|
||
}
|
||
$("#remark").val(s);
|
||
}
|
||
return true
|
||
}
|
||
|
||
function askdoubleCallback(data, text)
|
||
{
|
||
if (data.child) // 'Koppelen' gekozen
|
||
{
|
||
$("#parent_key").val(data.parent_key);
|
||
$("#forcesave").val(1);
|
||
$.post($("form[name=u2]")[0].action, $("[name=u2]").serialize(), mld_submit_callback, "json"); // Nu definitief
|
||
}
|
||
else
|
||
{ // Geen melding aanmaken
|
||
FcltMgr.closeDetail(window, {cancel: true});
|
||
}
|
||
}
|
||
|
||
// Drie modes
|
||
// 1) Dubbele melding van een moedermelding aanmaken (opnieuw laden van save asp met parent_key, maar niet meer controleren op double) [1]
|
||
// 2) Nieuwe melding aanmaken (opnieuw laden van save asp, maar niet meer controleren op double) [2]
|
||
// 3) Geen melding aanmaken, gewoon terug. [cancel]
|
||
function mldDoubleCallback(data, text)
|
||
{
|
||
if (data.mode == 2) // Eigen melding gewenst
|
||
{
|
||
$("#forcesave").val(1);
|
||
$.post($("form[name=u2]")[0].action, $("[name=u2]").serialize(), mld_submit_callback, "json"); // Nu definitief
|
||
}
|
||
|
||
if (data.mode == 1) // Geklikt op een gelijksoortige melding
|
||
{
|
||
var url = "../mld/mld_askdouble.asp?parent_key=" + data.parent_key; // Vraag om te koppelen
|
||
FcltMgr.openModalDetail(url, L("lcl_mld_similarcalls"), {callback: askdoubleCallback});
|
||
}
|
||
}
|
||
|
||
function mld_submit_callback(json)
|
||
{
|
||
if (json.doublecheck)
|
||
{
|
||
var url = "../mld/mld_double.asp?urole=" + json.urole
|
||
+ "&stdmelding_key=" + json.stdm_key
|
||
+ "&ruimtekey=" + json.ruimtekey
|
||
+ "&verdiepingkey=" + json.verdiepingkey
|
||
+ "&gebouwkey=" + json.gebouwkey
|
||
+ "&locatiekey=" + json.locatiekey
|
||
+ "&ins_str=" + json.obj_arr
|
||
+ "&save=1";
|
||
FcltMgr.openModalDetail(url, L("lcl_mld_save_new_call"), {callback: mldDoubleCallback});
|
||
}
|
||
if (json.success)
|
||
{
|
||
if (json.autoprint)
|
||
{
|
||
var wnd = window.open('./mld_opdr_xml.asp?mld_key=' + json.mld_key,'pr_rep','resizable=1,scrollbars=1,menubar=1,toolbar=1');
|
||
wnd.focus();
|
||
}
|
||
FcltMgr.closeDetail(window, json);
|
||
}
|
||
else
|
||
{
|
||
iface.button.enable("btn_mld_submit");
|
||
}
|
||
}
|
||
|
||
function mld_submit()
|
||
{
|
||
document.activeElement.blur(); // trigger laatste onChanges
|
||
|
||
$('#r_objs>option').prop("selected", "true"); // Zet selected zodat verplicht ze ziet en zodat waarden worden gesubmit
|
||
|
||
// Standaard checks op verplichte velden, datum formaat, numeriek en float formaat, currency formaat.
|
||
if (!validateForm("u2"))
|
||
return false;
|
||
|
||
// Formulier specifieke checks
|
||
if (!checkInput())
|
||
return false;
|
||
|
||
$.post($("form[name=u2]")[0].action, $("[name=u2]").serialize(), FcltCallbackAndThenAlways(mld_submit_callback), "json");
|
||
return true; // disabled button ook
|
||
}
|
||
|
||
function mld_cancel()
|
||
{
|
||
FcltMgr.closeDetail(window, { cancel: true } );
|
||
}
|
||
|
||
function loadKenmerk()
|
||
{
|
||
var prs_key = (def_kenmerk_link_key > 0? def_kenmerk_link_key : $('#person').val());
|
||
var s = "load_kenmerk.asp?stdm_str=" + $("#stdm").val()
|
||
+ "&mld_key=" + mld_key
|
||
+ (mld_key > 0 && !canFlexChange? "&reado=1" : "")
|
||
+ "&prs_key=" + prs_key;
|
||
$("#mldFlexList").load(s, function () { FcltMgr.resized () });
|
||
}
|
||
|
||
function setReferentie(kanverwijzen)
|
||
{
|
||
$("#kanverwijzen").val(kanverwijzen);
|
||
var clearReference = true;
|
||
var labeltext = "";
|
||
switch(kanverwijzen)
|
||
{
|
||
case 1: // Meldingen
|
||
clearReference = $("#ref_type").val() != "M";
|
||
labeltext = L("lcl_complain");
|
||
break;
|
||
case 2: // Meldingsopdrachten
|
||
clearReference = $("#ref_type").val() != "O";
|
||
labeltext = L("lcl_shared_order");
|
||
break;
|
||
case 4: // Reserveringen
|
||
clearReference = $("#ref_type").val() != "R";
|
||
labeltext = L("lcl_reservation");
|
||
break;
|
||
case 8: // Bestellingen
|
||
clearReference = $("#ref_type").val() != "B";
|
||
labeltext = L("lcl_bes_bestelling");
|
||
break;
|
||
case 16: // Bestelopdrachten
|
||
clearReference = $("#ref_type").val() != "X";
|
||
labeltext = L("lcl_bes_orders");
|
||
break;
|
||
case 32: // Contracten
|
||
clearReference = $("#ref_type").val() != "C";
|
||
labeltext = L("lcl_contract");
|
||
break;
|
||
case 64: // Facturen
|
||
clearReference = $("#ref_type").val() != "F";
|
||
labeltext = L("lcl_fin_invoice");
|
||
break;
|
||
default: // Combinatie
|
||
clearReference = false;
|
||
labeltext = L("lcl_reference");
|
||
break;
|
||
}
|
||
|
||
if (kanverwijzen == 0)
|
||
{
|
||
//document.getElementById("ref_key").style.visibility = "visible";
|
||
$("#mldRef").css("display", "none");
|
||
sgRef.setValue(-1, "");
|
||
}
|
||
else
|
||
{
|
||
if (clearReference)
|
||
sgRef.setValue(-1, "");
|
||
$('label[for="ref_key"]').text(labeltext);
|
||
$("#mldRef").css("display", "block");
|
||
}
|
||
}
|
||
|
||
function process_gebouw_info(data, textStatus)
|
||
{
|
||
if (textStatus == "success")
|
||
{ // Vervang de kostenplaats indien het gebouw er <20><>n heeft anders kostenplaats leegmaken.
|
||
// setValue(key, txt, doonChange, checkExist, extraParam, lastTry);
|
||
if (data && data.alg_kostenplaats_key > 0)
|
||
// lastTry is true zodat suggestbox wordt leeggemaakt indien waarde niet voorkomt (en niet de laatst waarde wordt getoond)
|
||
sgAccount.setValue(data.alg_kostenplaats_key, data.kostenplaats_omschrijving, true, true, data.kostenplaats_module, true);
|
||
else
|
||
{ // Suggestbox leeg maken. checkExist moet dan false zijn en lastTry true.
|
||
sgAccount.setValue(-1, "", true, false, null, true);
|
||
// Mocht er maar <20><>n waarde voorkomen in de suggesbox dan deze niet selecteren. Kostenplaats is niet verplicht.
|
||
//sgAccount.CheckJustOne();
|
||
}
|
||
}
|
||
else
|
||
alert("process_gebouw_info: " + textStatus);
|
||
}
|
||
|
||
function onChangeKostenklant()
|
||
{
|
||
var acc_key = -1;
|
||
var acc_oms = "";
|
||
var acc_extra = "";
|
||
// Kies juiste prs_key/user_key voor de kostenplaats query
|
||
// Stop deze in het urlAdd veld
|
||
// Kostenklant UIT => AAN: Eigen kostenplaats selecteren of leeg maken als onvoldoende autorisatie
|
||
// Kostenklant AAN => UIT: Kostenplaats laten staan of leeg maken als onvoldoende autorisatie
|
||
if ($("#kostenklant").prop("checked"))
|
||
{ // Kostenklant UIT => AAN: Zet eigen (default) kostenplaats. Indien niet aanwezig dan wordt suggestbox automatisch leeg gemaakt.
|
||
// urlAdd field op person suggestbox (reloadUrlAdd gebeurt automatisch door FCLTkostenplaatsselector)
|
||
// Eigen kostenplaats gegevens ophalen
|
||
acc_key = user_kpkey;
|
||
acc_oms = user_kpnaam;
|
||
acc_extra = user_kpmodule;
|
||
|
||
// setValue(key, txt, doonChange, checkExist, extraParam, lastTry);
|
||
// lastTry is true zodat suggestbox wordt leeggemaakt indien waarde niet voorkomt (en niet de laatst waarde wordt getoond)
|
||
sgAccount.setValue(acc_key, acc_oms, true, true, acc_extra, true);
|
||
}
|
||
else
|
||
{ // Kostenklant AAN => UIT: Zet eventueel 'ALG kostenplaats'. Indien niet aanwezig dan wordt suggestbox automatisch leeg gemaakt.
|
||
// urlAdd field op hiddem account_userkey suggestbox (reloadUrlAdd gebeurt automatisch door FCLTkostenplaatsselector)
|
||
// Zet eventueel 'ALG kostenplaats'
|
||
if (show_alg)
|
||
{
|
||
if ($("#gebouwkey").val() > 0)
|
||
{
|
||
var isGebouw = $("#bttype").val() == "B";
|
||
$.getJSON("../alg/get_alg_info_ajax.asp",
|
||
{ req_info: (isGebouw? "alg_gebouw" : "alg_terrein"),
|
||
alg_gebouw_key: $("#gebouwkey").val()
|
||
},
|
||
process_gebouw_info);
|
||
}
|
||
else
|
||
// Huidige waarde niet zomaar laten staan. Wel checken of het een geldige waarde is.
|
||
sgAccount.setValue($("#account").val(), $("#account_show").val(), false, true, $("#module").val(), true);
|
||
}
|
||
else
|
||
// Huidige waarde niet zomaar laten staan. Wel checken of het een geldige waarde is.
|
||
sgAccount.setValue($("#account").val(), $("#account_show").val(), false, true, $("#module").val(), true);
|
||
|
||
// Mocht er maar <20><>n waarde voorkomen in de suggesbox dan deze niet selecteren. Kostenplaats is niet verplicht.
|
||
//sgAccount.CheckJustOne();
|
||
}
|
||
}
|
||
|
||
function process_object_info(data, textStatus)
|
||
{
|
||
if (textStatus == "success")
|
||
{
|
||
if (data && data.length >= 0)
|
||
{
|
||
$("#r_objs_button").val(L("lcl_mld_objects") + "(" + data.length + ")");
|
||
|
||
// Selectie niet meer leeg maken. Objecten wegen nu zwaarder dan de plaats.
|
||
if (data.length == 0)
|
||
{ // Alsnog readonly maken omdat er geen resultaten zijn.
|
||
// Als er al objecten zijn geselecteerd dan button niet grijs/readonly maken.
|
||
if ($('#r_objs option').length == 0)
|
||
$("#r_objs_button").attr('disabled', true);
|
||
}
|
||
|
||
if (data.length == 1 && $("#req_r_objs,#r_objs,#r_objs option").hasClass("required") && $("#r_objs").html() == "")
|
||
{
|
||
$("#r_objs").append($(document.createElement("option")).attr("value", data[0].key).text(data[0].omschrijving));
|
||
// Vul nu ook de plaatsgegevens behorend bij dit object in, voor zover dit mogelijk is.
|
||
if (data[0].alg_ruimte_type == "R" && data[0].changelevel != "R")
|
||
// setValue(key, txt, doonChange, checkExist, extraParam, lastTry);
|
||
// lastTry is true zodat suggestbox wordt leeggemaakt indien waarde niet voorkomt (en niet de laatst waarde wordt getoond)
|
||
sgRoom.setValue(data[0].alg_ruimte_key, data[0].alg_ruimte_nr, true, true, null, true);
|
||
// else: Een object die aan een plaats is gebonden, is in dit geval altijd aan een ruimte gebonden.
|
||
}
|
||
}
|
||
}
|
||
else
|
||
alert("process_object_info: " + textStatus);
|
||
}
|
||
|
||
function getObjectInfo(changed_niveau)
|
||
{
|
||
if (show_ins)
|
||
{ // Alleen als er objecten gekozen worden
|
||
var alg_onrgoed_obj_niveau = $("#alg_onrgoed_obj_niveau").val();
|
||
if (alg_onrgoed_obj_niveau == "") return;
|
||
|
||
var alg_key = -1;
|
||
if (changed_niveau == "L")
|
||
alg_key = $('#locatiekey').val();
|
||
else if (changed_niveau == "G")
|
||
alg_key = $('#gebouwkey').val();
|
||
else if (changed_niveau == "V")
|
||
alg_key = $('#verdiepingkey').val();
|
||
else if (changed_niveau == "R")
|
||
alg_key = $('#ruimtekey').val();
|
||
|
||
// De object button grijs weergeven als de plaats niet is ingevuld tot en met het alg_onrgoed_obj_niveau niveau.
|
||
var disableobjects = true;
|
||
switch(changed_niveau)
|
||
{
|
||
case "L": disableobjects = (alg_onrgoed_obj_niveau != "L" || alg_key < 0);
|
||
break;
|
||
case "G": disableobjects = (alg_onrgoed_obj_niveau == "V" || alg_onrgoed_obj_niveau == "R" || (alg_onrgoed_obj_niveau == "G" && alg_key < 0));
|
||
break;
|
||
case "V": disableobjects = (alg_onrgoed_obj_niveau == "R" || (alg_onrgoed_obj_niveau == "V" && alg_key < 0));
|
||
break;
|
||
case "R": disableobjects = (alg_onrgoed_obj_niveau == "R" && alg_key < 0);
|
||
break;
|
||
}
|
||
$("#r_objs_button").attr('disabled', disableobjects);
|
||
|
||
// Als een niveau niet verplicht is gaan we hem zelfs negeren.
|
||
// Als waarde leeg is dan niveau hoger pakken.
|
||
if ((changed_niveau == "R" && !$("#ruimte").hasClass("required")) || alg_key < 0)
|
||
{
|
||
alg_key = $('#verdiepingkey').val();
|
||
changed_niveau = "V";
|
||
}
|
||
if ((changed_niveau == "V" && !$("#verdieping").hasClass("required")) || alg_key < 0)
|
||
{
|
||
alg_key = $('#gebouwkey').val();
|
||
changed_niveau = "G";
|
||
}
|
||
if ((changed_niveau == "G" && !$("#gebouw").hasClass("required")) || alg_key < 0)
|
||
{
|
||
alg_key = $('#locatiekey').val();
|
||
changed_niveau = "L";
|
||
}
|
||
|
||
var prs_key = ($("#personFor").length > 0? $("#personFor").val() : $("#person").val());
|
||
var stdmld_key = $('#stdm').val();
|
||
if (!disableobjects && alg_key > 0)
|
||
{
|
||
$.getJSON("../mld/get_mld_info_ajax.asp",
|
||
{ req_info: "alg_key",
|
||
alg_key: alg_key,
|
||
alg_niveau: changed_niveau,
|
||
prs_key: prs_key,
|
||
stdmld_key: stdmld_key
|
||
},
|
||
process_object_info);
|
||
}
|
||
else // Locatie is ook leeg
|
||
process_object_info([], "success");
|
||
}
|
||
}
|
||
|
||
function onChangeLocatie(locbld_changed)
|
||
{
|
||
onChangeGebouw(locbld_changed);
|
||
}
|
||
|
||
// Op de onchange van een gebouw controleren of er misschien een kostenplaats
|
||
// automatisch gekozen moet worden
|
||
// De functie onChangeGebouw() wordt ook aangeroepen bij wijzigen van melder
|
||
function onChangeGebouw(locbld_changed, do_not_change_kp) // sl is de gebouw selectbox
|
||
{
|
||
if (window.stdm_info.regime == 2) // openingstijden
|
||
{
|
||
recalcEinddatum(); // kan veranderd zijn
|
||
}
|
||
|
||
if ($("#kostenklant").length)
|
||
{
|
||
// Terug en niets doen als:
|
||
// 1) kostenklant vinkje aan is of
|
||
// 2) locatie of gebouw veranderd is en kostenklant vinkje uit is en de kostenplaats niet een ALG kostenplaats is
|
||
if ($("#kostenklant").prop("checked") || (locbld_changed && (!$("#kostenklant").prop("checked") && $("#module").val() != "ALG")))
|
||
{
|
||
return; // Niets doen bij kostenklant en als PRS-kostenplaats
|
||
}
|
||
|
||
// Zet eventueel 'ALG kostenplaats'
|
||
if (!do_not_change_kp && $("#gebouwkey").length)
|
||
{
|
||
var isGebouw = $("#bttype").val() == "B";
|
||
$.getJSON("../alg/get_alg_info_ajax.asp",
|
||
{ req_info: (isGebouw? "alg_gebouw" : "alg_terrein"),
|
||
alg_gebouw_key: $("#gebouwkey").val()
|
||
},
|
||
process_gebouw_info);
|
||
}
|
||
}
|
||
}
|
||
|
||
// Process de data die van de melder via Ajax terugkomt.
|
||
function process_melder_info(data)
|
||
{
|
||
// setValue(key, txt, doonChange, checkExist, extraParam, lastTry);
|
||
// lastTry is true zodat suggestbox wordt leeggemaakt indien waarde niet voorkomt (en niet de laatst waarde wordt getoond)
|
||
// nameParam.module
|
||
if ($("#kostenklant").prop("checked"))
|
||
// Zet eigen (default) kostenplaats alleen als kostenklant AAN. Indien niet aanwezig dan wordt suggestbox automatisch leeg gemaakt.
|
||
sgAccount.setValue(data.kostenplaats_key, data.kpn_string, true, true, data.module, true);
|
||
|
||
if (show_bes)
|
||
{
|
||
$("#del_address").val(""); // Maak afleveradres selectbox leeg
|
||
if (data.mld_adres_key > 0)
|
||
{
|
||
$("#del_address").val(data.mld_adres_key); // Selecteer het afleveradres dat bij de ingevulde melder hoort
|
||
}
|
||
};
|
||
|
||
if (show_alg && ins_key < 0)
|
||
{
|
||
plaatsselector.preferWerkplekken(data.werkplekken); // Selecteert automatisch
|
||
}
|
||
};
|
||
|
||
function onChangeMelder(perslid_key, txt)
|
||
{
|
||
if (perslid_key > 0)
|
||
{
|
||
if (mld_allow_for_others == 1) sgPersonFor.setValue(perslid_key, txt);
|
||
GetSetCallInfo(perslid_key);
|
||
}
|
||
}
|
||
|
||
function GetSetCallInfo(perslid_key)
|
||
{
|
||
if ($("#k_flexsql").val() == 1)
|
||
{
|
||
//changeDisciplineList(); // Mogelijk zijn niet alle disciplines toegestaan
|
||
// Persoon is aangepast. Aangezien stdmelding afhankelijk is voor de persoon, kijken of de huidige waarde nog mag
|
||
// setValue(key, txt, doonChange, checkExist, extraParam, lastTry);
|
||
sgStdm.setValue(sgStdm.getValue(), $("#stdm_show").val(), true, true, null, true);
|
||
}
|
||
|
||
if (perslid_key > 0)
|
||
{
|
||
$.getJSON("../prs/get_prs_info_ajax.asp",
|
||
{ req_info: "prs_perslid",
|
||
prs_werkplek: 1,
|
||
prs_aflever: 1,
|
||
prs_perslid_key: perslid_key
|
||
},
|
||
process_melder_info);
|
||
}
|
||
|
||
if (show_alg) { onChangeGebouw(false, true); } // Kostenplaats mag niet aangepast worden.
|
||
}
|
||
|
||
function onChangePrioriteit()
|
||
{
|
||
// TODO: in plaats rest van deze functie?
|
||
recalcEinddatum();
|
||
|
||
}
|
||
|
||
function callback_stdm_info(data, textStatus, jqXHR)
|
||
{
|
||
process_stdm_info(data, true); // Tweede parameter stdmChanged is true.
|
||
}
|
||
|
||
function mld_faq_list_callback(data)
|
||
{
|
||
// data.accept zal in praktijk altijd true zijn. Zelf nu dicht.
|
||
FcltMgr.closeDetail(window, { cancel: true } );
|
||
}
|
||
|
||
var stdm_info = {}; // globaal onthouden
|
||
function process_stdm_info(data, stdmChanged) // stdmChanged is optioneel.
|
||
{
|
||
window.stdm_info = data;
|
||
if ((window.stdm_info.mld_stdmelding_key||-1) < 0) // Als er geen melding (stdmelding) is geselecteerd dan return.
|
||
return;
|
||
|
||
if (stdmChanged)
|
||
{
|
||
$("#kanverwijzen").val(stdm_info.kanverwijzen);
|
||
if (typeof sgRef != "undefined") setReferentie(stdm_info.kanverwijzen);
|
||
|
||
if (((stdm_info.aantal_fefaq > 0 && stdm_info.canFAQUSEread && faq_kennisbank_popup & 1)
|
||
|| (stdm_info.aantal_fofaq > 0 && stdm_info.canFAQFOFread && faq_kennisbank_popup & 2))
|
||
&& !fromkb)
|
||
{
|
||
var url = "../mld/mld_faq.asp?stdm_key="+ $("#stdm").val();
|
||
FcltMgr.openModalDetail(url, L("lcl_mld_faq_stdmanswers"), { height: 200, width: 700, callback: mld_faq_list_callback } );
|
||
}
|
||
}
|
||
|
||
// UWVA#15523: indien frontend, dan is het aan kunnen geven van de prio afhankelijk van de vakgroep
|
||
// (door mld.stdmeldinginfo bepaald uit stdm_info.frontendprio)
|
||
// Bij 1 mag FE kiezen (indien er meer prios zijn), anders is het 2 en readonly (niet onzichtbaar om rust te houden?)
|
||
// Dat is dus alleen bij frontend, anders niet. Als we dat willen mag de waarde naar 2 gereset worden, dan.
|
||
|
||
// startdatum is aanwezig, zichtbaar of hidden
|
||
$("#show_startdate").closest("tr").toggle(stdm_info.startdatum);
|
||
if ($("#show_startdate").attr("readOnly") != 'readonly')
|
||
{
|
||
$("#show_startdate").toggleClass("required", stdm_info.startdatum);
|
||
}
|
||
|
||
var prio_is_hidden = $("#prio").is(":hidden");
|
||
if (!(frontend && prio_is_hidden) && stdmChanged)
|
||
{ // Vervang de prioriteit selector lijst. Initieel gebeurt nu serverside (stdmChanged toegevoegd).
|
||
// canPrioChange is mede afhankelijk van planbaarheid van gekozen Vakgroep. Hier dus opnieuw bepalen.
|
||
// FO en BO mogen als ze mogen wijzigen ook altijd datums aanpassen
|
||
// FE mag datums aanpassen bij 1) nieuwe melding, 2) status 1 en 2.
|
||
// Als melding planbaar is mag prioriteit nooit aangepast worden.
|
||
var canPrioChange = (!stdm_info.planbaar && (canFOwrite || (canFEwrite && stdm_info.frontendprio && (mld_key < 0 || mld_status == 1 || mld_status == 2)))? 1 : 0);
|
||
$("#prio,#prio_ro").closest("td").load("loadPrioriteit.asp",
|
||
{
|
||
stdm_key: stdm_info.mld_stdmelding_key,
|
||
mprio: $("#prio :selected").val() || mprio,
|
||
readonly: canPrioChange?0:1
|
||
});
|
||
}
|
||
|
||
if ($("#account_show").length && !$("#account_show")[0].readOnly)
|
||
{
|
||
// Is de kostenplaats nu verplicht?
|
||
if (stdm_info.kpnverplicht)
|
||
{ // class required zetten
|
||
$("input#account_show").addClass("required");
|
||
// Indien kostenplaats niet gevuld is dan deze default vullen.
|
||
// Key en string moeten wel een (geldige) waarde hebben. (Dit is bijvoorbeeld niet het geval als process_stdm_info() wordt
|
||
// aangeroepen door de ready functie in mld_edit_melding.asp
|
||
// Als stdm_info.caller_kpn_key == -1 dan mag de (lege) waarde blijven staan
|
||
if ($("#account").val() == -1 && stdm_info.caller_kpn_key && stdm_info.caller_kpn_string)
|
||
// setValue(key, txt, doonChange, checkExist, extraParam, lastTry);
|
||
sgAccount.setValue(stdm_info.caller_kpn_key, stdm_info.caller_kpn_string, true, true, stdm_info.caller_kpn_module, true);
|
||
}
|
||
else
|
||
{ // class required verwijderen
|
||
$("input#account_show").removeClass("required");
|
||
}
|
||
}
|
||
|
||
// Is er een object verplicht
|
||
$("#req_r_objs,#r_objs,#r_objs option").toggleClass("required", stdm_info.srtinst_verplicht);
|
||
// Alle waarden deselecteren
|
||
$("#r_objs > option").removeAttr("selected");
|
||
|
||
if ($("#gebouw").length && !$("#gebouw")[0].readOnly)
|
||
{
|
||
// Locatie is altijd verplicht (required)
|
||
switch(stdm_info.alg_onrgoed_niveau)
|
||
{
|
||
case "L": $("#gebouw").removeClass("required");
|
||
$("#verdieping").removeClass("required");
|
||
$("#ruimte").removeClass("required");
|
||
break;
|
||
case "G": $("#gebouw").addClass("required");
|
||
$("#verdieping").removeClass("required");
|
||
$("#ruimte").removeClass("required");
|
||
break;
|
||
case "V": $("#gebouw").addClass("required");
|
||
$("#verdieping").addClass("required");
|
||
$("#ruimte").removeClass("required");
|
||
break;
|
||
case "R": $("#gebouw").addClass("required");
|
||
$("#verdieping").addClass("required");
|
||
$("#ruimte").addClass("required");
|
||
break;
|
||
}
|
||
}
|
||
|
||
// Zet de discipline indien niet ingevuld. Voor frontend is id afhankelijk van de setting mld_selector_mode.
|
||
if ($("#disc").val() <= 0 || (frontend && (mld_selector_mode == 1 || mld_selector_mode == 2)))
|
||
{
|
||
if (typeof sgDisc != "undefined")
|
||
{
|
||
sgDisc.setValue(stdm_info.ins_discipline_key, (stdm_info.ins_srtdiscipline_prefix != null ? stdm_info.ins_srtdiscipline_prefix + "-" : "") + stdm_info.discipline_omschrijving, false /*doonChange*/, true /*checkExist*/);
|
||
}
|
||
else
|
||
{
|
||
// PF: is het niet een beetje illegaal om zo direct de show-waarde te zetten?
|
||
$("#disc_show").val((stdm_info.ins_srtdiscipline_prefix != null ? stdm_info.ins_srtdiscipline_prefix + "-" : "") + stdm_info.discipline_omschrijving);
|
||
$("#disc").val(stdm_info.ins_discipline_key);
|
||
}
|
||
}
|
||
|
||
$("label[for=show_enddate]").html((stdm_info.planbaar? L("lcl_mld_desirable_enddate"): L("lcl_mld_enddate")) + ":");
|
||
|
||
if (stdmChanged) // Alleen bij nieuwe meldingen met een gekozen melding (stdmelding) en bij wijzigen van de melding (stdmelding)
|
||
{
|
||
if (stdm_info.prioriteiten[mprio].uitvoertijd == null)
|
||
{
|
||
$("#show_startdate").val("");
|
||
$("#startdate").val("");
|
||
}
|
||
else
|
||
{ // Is startdate ingevuld?. Indien niet ingevuld dan sysdate nemen
|
||
if (!$("#show_startdate").datepicker("getDate"))
|
||
{ // Zet startdatum op vandaag
|
||
$("#show_startdate").datepicker("setDate", new Date());
|
||
}
|
||
}
|
||
|
||
// Vervang de kalender gereed indien
|
||
// 1) niet planbaar
|
||
// 2) planbaar zowel voor FE als nu voor FO/BO (RWSN#23829)
|
||
// 3) mld_melding.uitvoertijd < 1.0 en geen tijd aanwezig (Toevoegen tijdsveld).
|
||
// 4) Tijd moet niet zichtbaar zijn, maar is wel aanwezig (Verwijderen tijdsveld).
|
||
// Einddatum nu ook alstijd opnieuw bepalen en dan tonen (recalcEinddatum() waarna processEinddatum() volgt)
|
||
recalcEinddatum();
|
||
}
|
||
|
||
// Moet de omschrijving nu getoond worden en is de omschrijving dan verplicht?
|
||
$("#mldOmschrijving").toggle(stdm_info.freetext != 0);
|
||
|
||
if (stdm_info.freetext == 2 && !$("#melding_omschrijving")[0].readOnly)
|
||
{ // class required zetten
|
||
$("#melding_omschrijving").addClass("required");
|
||
}
|
||
else
|
||
{ // class required verwijderen
|
||
$("#melding_omschrijving").removeClass("required");
|
||
}
|
||
|
||
// Het niveau van onroerendgoed die geselecteerd moet zijn vanaf waar objecten gekozen kunnen worden.
|
||
$("#alg_onrgoed_obj_niveau").val(stdm_info.alg_onrgoed_obj_niveau);
|
||
|
||
var disableobjects = false;
|
||
switch(stdm_info.alg_onrgoed_obj_niveau)
|
||
{
|
||
case "L": if ($("#locatiekey").val() < 0)
|
||
disableobjects = true;
|
||
break;
|
||
case "G": if ($("#gebouwkey").val() < 0)
|
||
disableobjects = true;
|
||
break;
|
||
case "V": if ($("#verdiepingkey").val() < 0)
|
||
disableobjects = true;
|
||
break;
|
||
case "R": if ($("#ruimtekey").val() < 0)
|
||
disableobjects = true;
|
||
break;
|
||
case "": // Voor deze stdmelding mogen geen objecten worden gekozen.
|
||
disableobjects = true;
|
||
$("#r_objs_button").val(L("lcl_mld_objects") + "(0)");
|
||
break;
|
||
}
|
||
$("#r_objs_button").attr('disabled', disableobjects);
|
||
|
||
if (!disableobjects)
|
||
{
|
||
if ($("#ruimtekey").val() > 0)
|
||
getObjectInfo("R");
|
||
else if ($("#verdiepingkey").val() > 0)
|
||
getObjectInfo("V");
|
||
else if ($("#gebouwkey").val() > 0)
|
||
getObjectInfo("G");
|
||
else if ($("#locatiekey").val() > 0)
|
||
getObjectInfo("L");
|
||
else
|
||
$("#r_objs_button").val(L("lcl_mld_objects") + "(0)");
|
||
}
|
||
}
|
||
|
||
function onChangeVakgroep(vakgroep_key)
|
||
{
|
||
$("#gebouw").removeClass("required");
|
||
$("#verdieping").removeClass("required");
|
||
$("#ruimte").removeClass("required");
|
||
|
||
$("#req_r_objs,#r_objs,#r_objs option").removeClass("required");
|
||
|
||
//sgStdm.setValue($("#stdm").val(), $("#stdm_show").val(), true, true, null, true);
|
||
// Regel hierboven werkt niet goed omdat CheckExist een get call veroorzaakt om te kijken of waarde bestaat.
|
||
// In de tussentijd verstoort CheckJustOne dit process met een $.getJSON()
|
||
// Dus gewoon Melding leegmaken
|
||
sgStdm.setValue(-1, "", true, false, null, true);
|
||
sgStdm.CheckJustOne();
|
||
}
|
||
|
||
function onChangeStdMelding(stdmelding_key, txt, params)
|
||
{
|
||
if (stdmelding_key > 0)
|
||
{
|
||
$.getJSON("./get_mld_info_ajax.asp",
|
||
{ req_info: "mld_stdmelding",
|
||
mld_stdmelding_key: stdmelding_key,
|
||
mld_key: mld_key,
|
||
caller_key: $("#person").val() },
|
||
callback_stdm_info);
|
||
}
|
||
else
|
||
if (typeof sgRef != "undefined") setReferentie(0);
|
||
if (!params.init) loadKenmerk(); // Bij initialisatie (initOnChange) niet de kenmerken herladen anders worden de waarden gewist.
|
||
}
|
||
|
||
function onChangeStartdatum()
|
||
{
|
||
// Startdatum kalender is zichtbaar, want anders geen aanroep van deze functie
|
||
if (frontend) // zorgen dat einddatum minstens uitvoertijd verder ligt
|
||
recalcEinddatum(); // die zoekt het verder wel uit?
|
||
}
|
||
|
||
function process_GGD_info(data)
|
||
{
|
||
if (!data)
|
||
{
|
||
sgLoc.undoReadOnly();
|
||
sgBld.undoReadOnly();
|
||
sgFlr.undoReadOnly();
|
||
sgRoom.undoReadOnly();
|
||
return;
|
||
}
|
||
|
||
// Nu de plaatsselector readonly maken tot het GGD niveau.
|
||
sgLoc.makeReadOnly();
|
||
if (data.alg_type != "L")
|
||
sgBld.makeReadOnly();
|
||
else
|
||
sgBld.undoReadOnly();
|
||
if (data.alg_type == "V" || data.alg_type == "R")
|
||
sgFlr.makeReadOnly();
|
||
else
|
||
sgFlr.undoReadOnly();
|
||
if (data.alg_type == "R")
|
||
sgRoom.makeReadOnly();
|
||
else
|
||
sgRoom.undoReadOnly();
|
||
|
||
// De plaatsselector nu met de juiste waarden vullen.
|
||
// Parameter doonChange = false: Eigen werkplek moet niet automatisch ingevuld worden. (Bij ruimte kan dit wel)
|
||
switch(data.alg_type)
|
||
{
|
||
case "L": // setValue(key, txt, doonChange, checkExist, extraParam, lastTry);
|
||
// lastTry is true zodat suggestbox wordt leeggemaakt indien waarde niet voorkomt (en niet de laatst waarde wordt getoond)
|
||
sgLoc.setValue(data.alg_key, data.alg_oms, false, true, null, true);
|
||
break;
|
||
case "G":
|
||
case "T": sgBld.setValue(data.alg_key, data.alg_oms, false, true, null, true);
|
||
sgLoc.setValue(data.loc_key, data.loc_oms, false, true, null, true);
|
||
break;
|
||
case "V": sgFlr.setValue(data.alg_key, data.alg_oms, false, true, null, true);
|
||
sgBld.setValue(data.geb_key, data.geb_oms, false, true, null, true);
|
||
sgLoc.setValue(data.loc_key, data.loc_oms, false, true, null, true);
|
||
break;
|
||
case "R": if ($("#ruimtekey").val() != data.alg_key)
|
||
{ // De alg_oms bevat "geb_oms - ver_oms - rui_oms". Daarom verdieping en gebouw legen, anders wordt de ruimte niet ingevuld.
|
||
// Afhankelijk van ingevulde waarden van gebouw en verdieping is de omschrijving van de ruimte namelijk anders
|
||
sgFlr.setValue(-1, "");
|
||
sgBld.setValue(-1, "");
|
||
sgRoom.setValue(data.alg_key, data.alg_oms, true, true, null, true);
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
|
||
function mld_melding_object_callback(data)
|
||
{
|
||
// TODO: Moet er niet ook <SELECT> omheen? WERKT DIT
|
||
$("#r_objs").html(data.obj_html);
|
||
$("#r_objs").attr("size", ($("#r_objs")[0].options.length == 0? 1 : $("#r_objs")[0].options.length));
|
||
$("#r_objs > option").removeAttr("selected");
|
||
FcltMgr.resized(window);
|
||
var obj_keys = $.map($("#r_objs option") , function(option) { return $(option).val(); }); // Levert array met objecten op.
|
||
if (obj_keys.length > 0)
|
||
$.getJSON("../mld/get_mld_info_ajax.asp",
|
||
{ req_info: "ggd",
|
||
obj_keys: obj_keys.join(",")
|
||
},
|
||
process_GGD_info);
|
||
else
|
||
{ // Alle plaatsselectoren moeten nu weer wijzigbaar zijn.
|
||
sgLoc.undoReadOnly();
|
||
sgBld.undoReadOnly();
|
||
sgFlr.undoReadOnly();
|
||
sgRoom.undoReadOnly();
|
||
|
||
// Misschien zijn er 0 objecten en was de button niet readonly dan button nu wel grijs maken.
|
||
if ($("#ruimtekey").val() > 0)
|
||
getObjectInfo("R");
|
||
else if ($("#verdiepingkey").val() > 0)
|
||
getObjectInfo("V");
|
||
else if ($("#gebouwkey").val() > 0)
|
||
getObjectInfo("G");
|
||
else
|
||
getObjectInfo("L");
|
||
}
|
||
}
|
||
|
||
function mld_melding_object()
|
||
{
|
||
// Melding en locatie zijn altijd verplicht voordat objecten gekozen kunnen worden. (Locatie gaat eigenlijk al automatisch goed)
|
||
if (!validateForm("u2", { checkOnly: ["stdm_show", "locatie"] }))
|
||
return false;
|
||
|
||
var alg_key = -1;
|
||
// stdmelding is ingevuld. alg_onrgoed_niveau is het verplichte ingevulde niveau en alg_onrgoed_niveau heeft dan een geldige waarde
|
||
// wellicht is het niveau eronder ook ingevuld!
|
||
|
||
var alg_key = -1;
|
||
var alg_niveau = "";
|
||
// Objecten opvragen met plaatsgegevens die ingevuld zijn en verplicht.
|
||
// Als een niveau niet verplicht is gaan we hem zelfs negeren (zie ook functie getObjectInfo).
|
||
if ($("#ruimtekey").val() > -1 && $("#ruimte").hasClass("required"))
|
||
{
|
||
alg_key = $('#ruimtekey').val();
|
||
alg_niveau = "R";
|
||
}
|
||
else if ($("#verdiepingkey").val() > -1 && $("#verdieping").hasClass("required"))
|
||
{
|
||
alg_key = $('#verdiepingkey').val();
|
||
alg_niveau = "V";
|
||
}
|
||
else if ($("#gebouwkey").val() > -1 && $("#gebouw").hasClass("required"))
|
||
{
|
||
alg_key = $('#gebouwkey').val();
|
||
alg_niveau = "G";
|
||
}
|
||
else // Locatie is altijd verplicht.
|
||
{
|
||
alg_key = $('#locatiekey').val();
|
||
alg_niveau = "L";
|
||
}
|
||
|
||
url = "../mld/mld_object.asp?mld_key=" + mld_key;
|
||
url += "&stdm_key="+ $("#stdm").val();
|
||
url += "&srtdisc=" + srtdisc;
|
||
url += "&person=" + ($("#personFor").length > 0? $("#personFor").val() : $("#person").val());
|
||
url += "&alg_key=" + alg_key;
|
||
url += "&alg_niveau=" + alg_niveau;
|
||
if ($("#r_objs")[0].options.length > 0 && $("#r_objs")[0].options[0].value > 0)
|
||
var obj_html = $("#r_objs").html(); // huidige objecten
|
||
else
|
||
var obj_html = "";
|
||
|
||
FcltMgr.openModalDetail(url, L("lcl_mld_objects"), {obj_html:obj_html, callback: mld_melding_object_callback});
|
||
}
|
||
|
||
// einddatum/ calendar aanpassen
|
||
function processEinddatum(data, textStatus)
|
||
{
|
||
data.einddatum = new Date(data.einddatum); // was nog millisec
|
||
|
||
// Bijna goed alternatief alleen kan 'readonly' ook gewijzigd zijn vanwege planbaar?
|
||
// $("#show_enddate").datepicker("setDate", new Date(data.einddatum))
|
||
// .datepicker("option", "minDate", new Date(data.einddatum));
|
||
|
||
// Bij de frontend zorgen we dat de Einddatum altijd ver genoeg (uitvoertijd) in de toekomst blijven liggen.
|
||
// (bij FO/BO zorgen de calendertjes alleen zelf dat de een voor de ander blijft)
|
||
|
||
// canWriteDatums is mede afhankelijk van planbaarheid van gekozen Melding. Hier dus opnieuw bepalen.
|
||
// FO en BO mogen als ze mogen wijzigen ook altijd datums aanpassen.
|
||
// FE mag datums aanpassen bij 1) een nieuwe melding en 2) in status 2. Daarbij moet deze melding planbaar zijn.
|
||
var canWriteDatums = (stdm_info.planbaar && canFEwrite && (mld_key < 0 || mld_status == 2)) || canFOwrite || canBOwrite;
|
||
// Ook al kan de FE bij nieuwe invoer de einddatum niet aanpassen (readonly), dan moet deze datum wel opgeslagen worden.
|
||
var saveValue = !canWriteDatums && mld_key < 0;
|
||
var prio = $("#prio :selected").val() || 3;
|
||
$("#show_enddate").closest("td").load("../Shared/loadCalendar.asp",
|
||
{ cal_id: "enddate",
|
||
datum: data.einddatum.getTime(),
|
||
timeField: (stdm_info.prioriteiten[prio].uitvoertijd < 1.0 || (mld_show_endtime == 1 && !stdm_info.planbaar)? 1 : 0),
|
||
timeStep: 15, // TODO: Is nog wel erg hard. Zie ook mld_edit_melding.asp
|
||
startTime: 8,
|
||
endTime: 18,
|
||
minDate: (frontend? data.einddatum.getTime() : -1),
|
||
readonly: (canWriteDatums? 0 : 1), // Met FO/BO rechten mag de datum altijd aangepast worden.
|
||
saveValue: (saveValue? 1 : 0), // Ondanks readonly moet de waarde toch opgeslagen worden.
|
||
required: 1,
|
||
volgnr: 2
|
||
});
|
||
}
|
||
|
||
function recalcEinddatum()
|
||
{
|
||
// Er zijn twee situaties te onderscheiden:
|
||
// 1) Startdatum is zichtbaar/wijzigbaar,
|
||
// De tijd van de startdatum is altijd de begintijd van de dag (setting "fac_t_startofworkday" bijvoorbeeld 8:00 uur)
|
||
// => Startdatum = TRUNC(startdatum) + 8:00 uur
|
||
// => Einddatum = TRUNC(startdatum) + 8:00 uur + SLA
|
||
// LET OP!!!: Als je deze setting zet dan wordt eigenlijk verondersteld dat de SLA in dagen is en niet in uren.
|
||
// Echter als de startdatum vandaag is moet wel voor de begintijd de huidige sysdate tijd genomen worden tijdens het opslaan.
|
||
// Anders geldt de acceptatietijd (in uren) onterecht al vanaf het begin van de dag.
|
||
// Voor het bepalen/berekenen van de einddatum laten de startdatum gewoon aan het begin van de dag beginnen.
|
||
// 2) Startdatum is niet zichtbaar/wijzigbaar
|
||
// De tijd van de startdatum is de tijd van de huidige waarde of van de sysdate, COALESCE(huidige waarde, sysdate).
|
||
// => Startdatum = COALESCE(huidige waarde, sysdate)
|
||
// => Einddatum = COALESCE(huidige waarde, sysdate) + SLA
|
||
// Of de startdatum wel of niet zichtbaar/wijzigbaar is, is in te stellen bij vakgroep door de setting "Startdatum te bepalen" (mld_disc_params_startdatum)
|
||
|
||
// Indien nieuwe reservering behorend bij een toekomstige reservering dan bij planbare meldingen de einddatum niet aanpassen.
|
||
if (stdm_info.planbaar && withFutureRes)
|
||
return;
|
||
|
||
// var startdate = $("#show_startdate").datepicker("getDate"); // bij nieuwe melding is er nog geen datepicker van gemaakt
|
||
var startdate = new Date(parseInt($("#startdate").val(),10));
|
||
var sysdate = new Date();
|
||
|
||
var startwerkdag_uur = Math.floor(startwerkdag);
|
||
var startwerkdag_min = (startwerkdag - Math.floor(startwerkdag)) * 60;
|
||
var startdatebegin = new Date(startdate.getFullYear(), startdate.getMonth(), startdate.getDate(), startwerkdag_uur, startwerkdag_min);
|
||
var sysdate = new Date();
|
||
|
||
if (stdm_info.startdatum == 1)
|
||
{ // Situatie 1: Einddatum = TRUNC(startdatum) + 8:00 uur + SLA
|
||
// LET OP!!!: Als setting "mld_disc_params_startdatum" is gezet dan wordt eigenlijk verondersteld dat de SLA in dagen is en niet in uren.
|
||
// Echter als de startdatum vandaag is moet wel voor de begintijd de huidige sysdate tijd genomen worden tijdens het opslaan.
|
||
// Anders geldt de acceptatietijd (in uren) onterecht al vanaf het begin van de dag.
|
||
// Voor het bepalen/berekenen van de einddatum laten de startdatum gewoon aan het begin van de dag beginnen.
|
||
var startdate_is_today = (startdate.midnight().getTime() == sysdate.midnight().getTime());
|
||
startdatum = (startdate_is_today? sysdate.getTime() : startdatebegin.getTime());
|
||
}
|
||
else
|
||
{ // Situatie 2: Einddatum = COALESCE(huidige waarde, sysdate) + SLA
|
||
if (mld_key < 0)
|
||
var startdatum = sysdate.getTime(); // Nieuwe melding, nu/sysdate
|
||
else
|
||
var startdatum = startdate.getTime(); // Wijziging melding, huidige opgeslagen waarde
|
||
}
|
||
|
||
var stdm_key = $("#stdm").val();
|
||
var prio = $("#prio :selected").val() || 3;
|
||
var geb_key = $('#gebouwkey').val();
|
||
// daarmee kan ik de database de einddatum laten bepalen
|
||
var params = { req_info: "calc_einddatum",
|
||
startdatum: startdatum,
|
||
stdm_key: stdm_key,
|
||
prio: prio,
|
||
geb_key: geb_key
|
||
}
|
||
$.getJSON("./get_mld_info_ajax.asp",
|
||
params,
|
||
processEinddatum);
|
||
} |