Files
Facilitor/APPL/MLD/mld_edit_melding.js
Jos Groot Lipman 990431765d Merge 5.3.1 Gold C patches
svn path=/Website/trunk/; revision=18165
2013-06-13 10:21:34 +00:00

924 lines
37 KiB
JavaScript
Raw Blame History

/*
$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);
}