884 lines
33 KiB
JavaScript
884 lines
33 KiB
JavaScript
/*
|
||
$Revision$
|
||
$Id$
|
||
|
||
File: mld_edit_opdr.js
|
||
*/
|
||
|
||
function mld_cancel()
|
||
{
|
||
FcltMgr.closeDetail(window, { cancel: true } );
|
||
}
|
||
|
||
function showUurtarief(json, textStatus)
|
||
{
|
||
if (textStatus == "success")
|
||
{
|
||
var uurtarief = parseFloat(json.uurtarief); // Uurtarief van bedrijf
|
||
if (isNaN(uurtarief))
|
||
{ // Bereken opdrachttarief
|
||
if (json.uurtarief == null)
|
||
$("#uurtarief").val("");
|
||
var uren = parseFloat( $("#uren").val());
|
||
var mat_kosten = parseFloat( $("#mat_kosten").val());
|
||
var corr_kosten = parseFloat( $("#corr_kosten").val());
|
||
var tot_kosten = parseFloat( $("#tot_kosten").val());
|
||
|
||
if (isNaN(mat_kosten)) mat_kosten = 0;
|
||
if (!isNaN(uren) && !isNaN(tot_kosten) && uren > 0)
|
||
{
|
||
uurtarief = (tot_kosten - mat_kosten - corr_kosten)/uren; // Uurtarief van opdracht
|
||
}
|
||
}
|
||
|
||
if (!isNaN(uurtarief))
|
||
{
|
||
$("#uurtarief").val(num2currEditable(uurtarief));
|
||
// Totaal nu ook aanpassen.
|
||
calcTotal();
|
||
}
|
||
}
|
||
else
|
||
FcltMgr.alert("showUurtarief: " + textStatus);
|
||
}
|
||
|
||
function changeUurtarief()
|
||
{
|
||
// Deze toont het uurtarief, hetzij van de opdracht, hetzij (als leeg) van het uitvoerende bedrijf
|
||
// Bedoeld wordt dat het uurtarief dat bij de opdracht is opgeslagen wordt gebruikt en dat kan afwijken van
|
||
// het tarief van het uitvoerende bedrijf. Als de gebruiker echter de uitvoerende verandert, dan wordt het
|
||
// tarief van dat nieuwe bedrijf gebruikt. Dat is dus op de onchange van uitvoerende
|
||
if (tonen_uren == 1)
|
||
{
|
||
var uitv_key = $("#uitvoerende").val();
|
||
var pbtype = $("#pbtype").val();
|
||
var pers_key = $("#contactpers").val();
|
||
var cnt_key = $("#contract").val();
|
||
|
||
$.getJSON("get_uurtarief_info.asp",
|
||
{ bedrijf_key: uitv_key,
|
||
pbtype: pbtype,
|
||
contactpersoon_key: pers_key,
|
||
contract_key: cnt_key },
|
||
showUurtarief)
|
||
}
|
||
}
|
||
|
||
// Bereken het totaal bedrag van de opdracht.
|
||
function calcTotal()
|
||
{
|
||
// <20><>n van de velden uren, tarief, materiaal bedrag, correctie en/of opdrachtnr is aangepast.
|
||
// Als het uren veld en/of het tarief veld en/of materiaal bedrag veld en/of het correctie veld aanwezig is/zijn dan kan het totaal m.b.v. die velden berekenend worden.
|
||
if (tonen_totaal)
|
||
{
|
||
var valid_mat_kosten = false;
|
||
var valid_corr_kosten = false;
|
||
var valid_uren = false;
|
||
var valid_uurtarief = false;
|
||
var tot_kosten;
|
||
|
||
var uren = $("#uren").val();
|
||
if (!(uren == null || uren == "" || typeof uren == "undefined"))
|
||
{
|
||
uren = tonen_uren? parseFloat($("#uren").val().replace(',', '.')) : 0;
|
||
valid_uren = !isNaN(uren);
|
||
}
|
||
|
||
var uurtarief = $("#uurtarief").val();
|
||
if (!(uurtarief == null || uurtarief == "" || typeof uurtarief == "undefined"))
|
||
{
|
||
uurtarief = tonen_uren? parseFloat($("#uurtarief").val().replace(',', '.')) : 0;
|
||
valid_uurtarief = !isNaN(uurtarief);
|
||
if (valid_uurtarief)
|
||
$("#uurtarief").val(num2currEditable(uurtarief));
|
||
}
|
||
|
||
var mat_kosten = $("#mat_kosten").val();
|
||
if (!(mat_kosten == null || mat_kosten == "" || typeof mat_kosten == "undefined"))
|
||
{
|
||
mat_kosten = tonen_materiaal_bedrag? parseFloat($("#mat_kosten").val().replace(',', '.')) : 0;
|
||
valid_mat_kosten = !isNaN(mat_kosten);
|
||
if (valid_mat_kosten)
|
||
$("#mat_kosten").val(num2currEditable(mat_kosten));
|
||
}
|
||
|
||
var corr_kosten = $("#corr_kosten").val();
|
||
if (!(corr_kosten == null || corr_kosten == "" || typeof corr_kosten == "undefined"))
|
||
{
|
||
corr_kosten = tonen_correctie? parseFloat($("#corr_kosten").val().replace(',', '.')) : 0;
|
||
valid_corr_kosten = !isNaN(corr_kosten);
|
||
if (valid_corr_kosten)
|
||
$("#corr_kosten").val(num2currEditable(corr_kosten));
|
||
}
|
||
|
||
if ((valid_uren && valid_uurtarief) || valid_mat_kosten || valid_corr_kosten)
|
||
{
|
||
tot_kosten = (valid_uren && valid_uurtarief? uren * uurtarief : 0)
|
||
+ (valid_mat_kosten? mat_kosten : 0)
|
||
+ (valid_corr_kosten? corr_kosten : 0);
|
||
$("#tot_kosten").val(num2currEditable(tot_kosten));
|
||
}
|
||
else
|
||
$("#tot_kosten").val(null);
|
||
}
|
||
//else return; // Geen van de kostenvelden zijn aanwezig.
|
||
}
|
||
|
||
// Bereken het totaal bedrag van de opdracht.
|
||
function calcTotalMobile()
|
||
{
|
||
// <20><>n van de velden uren, tarief, materiaal bedrag, correctie en/of opdrachtnr is aangepast.
|
||
// Als het uren veld en/of het tarief veld en/of materiaal bedrag veld en/of het correctie veld aanwezig is/zijn dan kan het totaal m.b.v. die velden berekenend worden.
|
||
if (tonen_totaal)
|
||
{
|
||
var valid_mat_kosten = false;
|
||
var valid_corr_kosten = false;
|
||
var valid_uren = false;
|
||
var valid_uurtarief = false;
|
||
|
||
var uren = parseFloat($("#uren").val().replace(',', '.'));
|
||
var uurtarief = parseFloat($("#uurtarief").val().replace(',', '.'));
|
||
var mat_kosten = parseFloat($("#mat_kosten").val().replace(',', '.'));
|
||
var corr_kosten = parseFloat($("#corr_kosten").val().replace(',', '.'));
|
||
var tot_kosten = (isNaN(uren)? 0 : uren) * (isNaN(uurtarief)? 0 : uurtarief)
|
||
+ (isNaN(mat_kosten)? 0 : mat_kosten) + (isNaN(corr_kosten)? 0 : corr_kosten);
|
||
|
||
if ($("#uren").val() != '' && !isNaN(uren))
|
||
{
|
||
valid_uren = true;
|
||
$("#uren").val(parseFloat($("#uren").val()).toFixed(2));
|
||
}
|
||
else
|
||
$("#uren").val(null)
|
||
|
||
if ($("#uurtarief").val() != '' && !isNaN(uurtarief))
|
||
{
|
||
valid_uurtarief = true;
|
||
$("#uurtarief").val(parseFloat($("#uurtarief").val()).toFixed(2));
|
||
}
|
||
else
|
||
$("#uurtarief").val(null)
|
||
|
||
if ($("#mat_kosten").val() != '' && !isNaN(mat_kosten))
|
||
{
|
||
valid_mat_kosten = true;
|
||
$("#mat_kosten").val(parseFloat($("#mat_kosten").val()).toFixed(2));
|
||
}
|
||
else
|
||
$("#mat_kosten").val(null)
|
||
|
||
if ($("#corr_kosten").val() != '' && !isNaN(corr_kosten))
|
||
{
|
||
valid_corr_kosten = true;
|
||
$("#corr_kosten").val(parseFloat($("#corr_kosten").val()).toFixed(2));
|
||
}
|
||
else
|
||
$("#corr_kosten").val(null)
|
||
|
||
|
||
if (!valid_mat_kosten && !valid_corr_kosten && (!valid_uren || !valid_uurtarief))
|
||
{
|
||
$("#tot_kosten").val(null);
|
||
}
|
||
else
|
||
{
|
||
$("#tot_kosten").val(num2currEditable(tot_kosten));
|
||
}
|
||
}
|
||
//else return; // Geen van de kostenvelden zijn aanwezig.
|
||
}
|
||
|
||
function showCnt()
|
||
{
|
||
if ($('#contract').val() > 0)
|
||
FcltMgr.openDetail("appl/CNT/cnt_contract.asp?cnt_key=" + $('#contract').val() + "&urole=" + urole, L("lcl_mld_cnt_contract") + " " + $('#contract').val());
|
||
}
|
||
|
||
function updateCnt()
|
||
{
|
||
var mld_key = $("#mld_key").val();
|
||
var cnt_key = $("#contract").val();
|
||
var uitv_key = $("#uitvoerende").val();
|
||
$("#contract").closest('td').load("../Shared/loadContract.asp?mld_key=" + mld_key
|
||
+ (uitv_key? "&bedrijf_key=" + uitv_key : "")
|
||
+ (cnt_key? "&cnt_key=" + cnt_key : "")
|
||
+ (frontend? "&moreinfo=1" : "")
|
||
+ "&typeopdr_contract=" + typeopdr_contract);
|
||
}
|
||
|
||
function changeBudgetholder()
|
||
{
|
||
if ($("#fiat").length)
|
||
{
|
||
if ($("#budgeth").val() == "")
|
||
{ // Er is geen budgethouder (kostenplaatsverantwoordelijke of kostenplaatsgroepverantwoordelijke)
|
||
// Opdracht kan dan ook niet gefiatteerd worden
|
||
$("#fiat")[0].checked = false;
|
||
$("#fiat")[0].disabled = true;
|
||
}
|
||
else
|
||
$("#fiat")[0].disabled = false;
|
||
}
|
||
}
|
||
|
||
function onChangeUitv(u_key, txt)
|
||
{
|
||
if (u_key > 0)
|
||
{
|
||
var pbtype = $("#pbtype").val();
|
||
if ($("#behandelaar").val() < 0)
|
||
{
|
||
if (pbtype != "BI")
|
||
// setValue(key, txt, doonChange, checkExist, extraParam, lastTry)
|
||
// De user hoef ik hier niet te checken of die bestaat (checkExist).
|
||
sgPerson.setValue(user_key, user_naam);
|
||
//else // Behandelaar is al leeg.
|
||
}
|
||
else // ($("#behandelaar").val() > 0)
|
||
{
|
||
// Nieuwe opdrachten behandelaarveld leegmaken als wordt gewijzigd naar Intern bedrijf.
|
||
if (opdr_key < 0 && pbtype == 'BI')
|
||
sgPerson.setValue(-1, "");
|
||
else
|
||
{ // Bij bestaande opdrachten kan deze zomaar bewust gekozen zijn dus dan laten we de behandelaar met rust.
|
||
// Wel checken of die hier nu mag. Het kan zijn dat bij een bestaande opdracht de behandelaar wel bestond maar nu niet meer.
|
||
// De user naam bestaat want anders kun je niet ingelogd zijn. Deze hoeft dus niet gecontroleerd te worden.
|
||
// De user _Facilitor kan zo ingevuld blijven. Anders wordt deze steeds verwijderd.
|
||
// 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)
|
||
if ($("#behandelaar_show").val() != user_naam)
|
||
sgPerson.setValue($("#behandelaar").val(), $("#behandelaar_show").val(), true, true, null, true);
|
||
}
|
||
}
|
||
|
||
// Maak contactpersoon leeg
|
||
sgCntPersUitv.setValue(-1, "");
|
||
|
||
// Verberg contactpersoon indien persoon ('P') of intern bedrijf ('BI'). Alleen tonen voor extern bedrijf ('BE').
|
||
if (pbtype == 'BE')
|
||
$("#contactpers").closest("tr").show();
|
||
else
|
||
$("#contactpers").closest("tr").hide();
|
||
|
||
// Update contract selectbox
|
||
updateCnt();
|
||
|
||
changeUurtarief();
|
||
calcTotal();
|
||
recalcEinddatum();
|
||
}
|
||
else
|
||
updateCnt();
|
||
}
|
||
|
||
function onChangePers(u_key, txt)
|
||
{
|
||
if (u_key > 0)
|
||
{
|
||
changeUurtarief();
|
||
calcTotal();
|
||
recalcEinddatum();
|
||
}
|
||
}
|
||
|
||
// Einddatum calendar aanpassen
|
||
function processEinddatum(data, textStatus)
|
||
{
|
||
if (data.einddatum)
|
||
data.einddatum = new Date(data.einddatum); // was nog millisec
|
||
|
||
var params =
|
||
{ cal_id: "date_done",
|
||
datum: data.einddatum? data.einddatum.getTime() : "",
|
||
initEmpty: !data.einddatum? 1 : 0, // Leeg als einddatum null is.
|
||
minDate: (mld_enforce_orderdates? mld_startdatum.getTime() : (opdr_key < 0? new Date().getTime() : registratiedatum.getTime())),
|
||
timeField: ((data.uitvoertijd != null && data.uitvoertijd.eenheid == "U") || (data.uitvoertijd == null && data.mld_uitvoertijd_eenheid == "U") ? 1 : 0), // sla_mode is hier altijd 1 (= Leverancier)
|
||
timeStep : 15, // TODO: Is nog wel erg hard. Zie ook mld_edit_opdr.asp
|
||
startTime: startOfWorkDay,
|
||
endTime : endOfWorkDay,
|
||
readonly: (opdr_key > 0 && !canDatesChange? 1 : 0),
|
||
required: 1,
|
||
volgnr: 2,
|
||
onChangeCode: 3 // DateChanged()
|
||
//addClass: // Eventueel zetten van de "expired2" class gebeurt wel in de callback functie "DateChanged"
|
||
};
|
||
|
||
if (mld_enforce_orderdates)
|
||
params.maxDate = mld_einddatum.getTime(); // Einddatum melding.
|
||
|
||
$("#span_date_done").load("../Shared/loadCalendar.asp?" + serializeObj(params),
|
||
function() { DateChanged(); } // Aantal werkdagen moet weer kloppen en eventueel "expired2" class zetten.
|
||
);
|
||
}
|
||
|
||
function recalcEinddatum(luitv_key)
|
||
{
|
||
if (sla_mode == 1) // einddatum alleen berekenen voor leverancier-SLA
|
||
{
|
||
var uitv_key = luitv_key? luitv_key : $("#uitvoerende").val();
|
||
var startdate = new Date(parseInt($("#orderdate").val(), 10)); // Huidige opgeslagen waarde (Is zonder tijd)
|
||
var startdatum = startdate.getTime();
|
||
var dienst_key = $("#dienstfilt").val() || -1;
|
||
|
||
// daarmee kan ik de database de einddatum laten bepalen
|
||
var params = { req_info: "calc_opdrachteinddatum",
|
||
mld_key: mld_key,
|
||
startdatum: startdatum,
|
||
dienst_key: dienst_key,
|
||
uitv_key: uitv_key,
|
||
sla_mode: sla_mode
|
||
}
|
||
$.getJSON("./get_mld_info_ajax.asp",
|
||
params,
|
||
processEinddatum);
|
||
}
|
||
}
|
||
|
||
function onChangeContract()
|
||
{
|
||
var cnt_key = $("#contract").val();
|
||
if (cnt_key > 0)
|
||
{
|
||
// Selecteer uitvoerende die bij het geselecteerde contract hoort.
|
||
var selectedIndex = $("#contract")[0].options.selectedIndex;
|
||
var bedrijf_key = $("#contract")[0].options[selectedIndex].getAttribute("bedrijf_key");
|
||
var bedrijf_naam = $("#contract")[0].options[selectedIndex].getAttribute("bedrijf_naam");
|
||
// Soms staat er voor de bedrijfsnaam een prefix plus ** of *. Echter bedrijfsnaam meegeven aan setValue is genoeg (wat je normaal ook intypt in suggest veld)
|
||
sgUitv.setValue(bedrijf_key, bedrijf_naam, false);
|
||
// Maak contactpersoon leeg.
|
||
sgCntPersUitv.setValue(-1, "");
|
||
}
|
||
// else //(cnt_key < 0)
|
||
// De extra parameters bij de contracht listbox zijn dan bedrijf_key == -1 en bedrijf_naam == "";
|
||
// Dan de Uitvoerende selectbox niet leegmaken. De contract selectbox is dan nog steeds juist gevuld.
|
||
|
||
changeUurtarief();
|
||
}
|
||
|
||
function onChangeAccount() {
|
||
// Omdat de budgetholder tegenwoordig als extra-param meekomt met de suggest kunnen we direct upload al aanroepen.
|
||
changeBudgetholder();
|
||
}
|
||
|
||
function checkInput()
|
||
{
|
||
var s = $("#opdr_omschr").val();
|
||
if (s.length > 4000)
|
||
{
|
||
s = s.substring(0, 4000);
|
||
$("#opdr_omschr").val(s);
|
||
}
|
||
|
||
s = $("#opdr_opm").val() || "";
|
||
if (s.length > 4000)
|
||
{
|
||
s = s.substring(0, 4000);
|
||
$("#opdr_opm").val(s);
|
||
}
|
||
}
|
||
|
||
function opdr_submit_callback(json)
|
||
{
|
||
if (json.success)
|
||
FcltMgr.closeDetail(window, json);
|
||
else
|
||
iface.button.enable("btn_mld_submit");
|
||
}
|
||
|
||
function askshiftdateCallback(json, textStatus)
|
||
{
|
||
if (!json.cancelsd)
|
||
{
|
||
var shiftdate = (json && json.shiftdate? "&shiftdate=1" : "");
|
||
$.post($("form[name=u2]")[0].action, $("[name=u2]").serialize() + shiftdate, FcltCallbackAndThenAlways(opdr_submit_callback), "json");
|
||
}
|
||
else
|
||
{ // Cancel.
|
||
iface.button.enable("btn_mld_submit");
|
||
}
|
||
}
|
||
|
||
function mld_submit(json)
|
||
{
|
||
if (document.activeElement.tagName != "BODY")
|
||
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
|
||
checkInput();
|
||
|
||
// Negeer de multi of de suggest, afhankelijk van welke ingevuld (zichtbaar) is
|
||
if ($(".r_objs.nowrap").is(":hidden"))
|
||
$(".r_objs.nowrap").find("input.r_objs").removeAttr("name");
|
||
else
|
||
$("select#r_objs").removeAttr("name");
|
||
|
||
// Er moet minimaal 0 voor een van de kostenvelden zin ingevuld.
|
||
if ( $("#tot_kosten").hasClass("required") )
|
||
if ( $("#mat_kosten").val() == "" && $("#corr_kosten").val() == "" && ($("#uren").val() == "" || $("#uurtarief").val() == "") )
|
||
return false;
|
||
|
||
var matkeystr = $("#matkeystr").val();
|
||
if (typeopdr_materiaal == 3 && matkeystr == "")
|
||
{
|
||
$("#materiallist_button").addClass("missing");
|
||
return false;
|
||
}
|
||
|
||
var autoConf = opdr_key < 0 &&
|
||
!copy &&
|
||
typeopdr_isofferte == 0 &&
|
||
parseInt($("#tot_kosten").val()) >= 0 &&
|
||
typeopdr_offertelimiet > 0 &&
|
||
typeopdr_offertelimiet < parseInt($("#tot_kosten").val());
|
||
|
||
FcltMgr.confirm(L("lcl_mld_opdr_offerte_vereist").format(typeopdr_offertelimiet), { autoconfirm: !autoConf,
|
||
fncancel: function() { iface.button.enable("btn_mld_submit"); } }, function() {
|
||
|
||
// Is het een nieuwe offerte waar <20><>n of meerdere bedrijven ingevuld moeten worden
|
||
$("#uitvoerendelist_button").removeClass("missing");
|
||
if (opdr_key < 0 &&
|
||
!copy &&
|
||
typeopdr_isofferte == 1 &&
|
||
$("#uitvkeystr").val() == "")
|
||
{
|
||
$("#uitvoerendelist_button").addClass("missing");
|
||
FcltMgr.alert(L("lcl_shared_validator_missing").format(typeopdr_offertelimiet));
|
||
iface.button.enable("btn_mld_submit");
|
||
}
|
||
else
|
||
{
|
||
// combinatievalidatie komt wel in mld_edit_opdr_save.asp
|
||
// fiat validatie komt wel in mld_edit_opdr_save.asp
|
||
|
||
if (window.matdescriptarr)
|
||
{
|
||
// elke omschrijving eigen veld zodat goed gaat met komma's
|
||
// getFParamArray kan daar ook tegen
|
||
$("form[name=u2] input[name='matdescriptstr']").remove();
|
||
var i;
|
||
for (i in window.matdescriptarr)
|
||
{
|
||
$("form[name=u2]").append($("<input type='hidden' name='matdescriptstr'>").val(window.matdescriptarr[i]));
|
||
}
|
||
}
|
||
|
||
var opdr_einddatum = new Date(parseInt($("#date_done").val()));
|
||
if (opdr_key > 0 && // Bestaande opdracht.
|
||
canDatesChange && // Opdracht datum was wijzigbaar.
|
||
canWriteDatumsMld && // Ik heb de rechten om de melding einddatum aan te passen.
|
||
mld_opdr_einddatum &&
|
||
mld_opdr_einddatum.getTime() <= mld_einddatum.getTime() && // Huidige opdracht einddatum is voor of gelijk aan de huidige melding einddatum.
|
||
mld_opdr_einddatum.getTime() > 0 && // Proberen we een ongeldige datum (1900) te herstellen?
|
||
opdr_einddatum.getTime() != mld_opdr_einddatum.getTime() && // Datum van de opdracht is aangepast.
|
||
opdr_einddatum.getTime()> mld_einddatum.getTime()) // Nieuwe opdracht einddatum is na de huidige melding einddatum.
|
||
{
|
||
var url = "../mld/mld_askshiftdate.asp?mld_einddatum=" + mld_opdr_einddatum.getTime(); // Vraag om einddatum melding met einddatum opdracht mee te verschuiven.
|
||
FcltMgr.openModalDetail(url, L("lcl_opdr_info") + " " + opdrachtid, {callback: askshiftdateCallback});
|
||
}
|
||
else
|
||
{
|
||
var finish = (json && json.finish? "&finish=1" : "");
|
||
$.post($("form[name=u2]")[0].action, $("[name=u2]").serialize() + finish, FcltCallbackAndThenAlways(opdr_submit_callback), "json");
|
||
}
|
||
}
|
||
});
|
||
}
|
||
|
||
function opdr_edit_finish()
|
||
{
|
||
var opdr_kosten = parseFloat(String($("#tot_kosten").val()).replace(',', '.'));
|
||
if (kosten_verplicht_afr && isNaN(opdr_kosten))
|
||
{
|
||
FcltMgr.alert(L("lcl_mld_opdr_kosten_verpl_afr"));
|
||
return;
|
||
}
|
||
var data = { opdr_key: opdr_key,
|
||
opdr_kosten: (isNaN(opdr_kosten) ? "" : opdr_kosten)
|
||
};
|
||
protectRequest.dataToken(data);
|
||
$.post( "opdr_finish.asp"
|
||
, data
|
||
, FcltCallbackAndThen(mld_submit)
|
||
, "json"
|
||
);
|
||
}
|
||
|
||
function exectimeChanged(json, textStatus) {
|
||
if (textStatus == "success")
|
||
{
|
||
if (json.dagen >= 0)
|
||
$("#period").text(json.dagen);
|
||
}
|
||
else
|
||
FcltMgr.alert("FcltCallback: " + textStatus);
|
||
}
|
||
|
||
// opdracht of opdracht-klaar datum is gewijzigd
|
||
// Afgeleid gegeven 'period' up to date brengen.
|
||
function DateChanged()
|
||
{
|
||
if (mld_einddatum.getTime() < $("#date_done").val())
|
||
$("#show_date_done").addClass("expired2");
|
||
else
|
||
$("#show_date_done").removeClass("expired2");
|
||
|
||
if ($("#show_orderdate").val() != "" && $("#show_date_done").val() != "" &&
|
||
$("#date_done").val()) // Als einddatum (date_done) readonly is, hoeft de doorlooptijd niet opnieuw herberekend te worden.
|
||
$.getJSON("runtime_recalc_opdr.asp",
|
||
{ opdr_key: opdr_key,
|
||
opdr_datum: $("#orderdate").val(), // Opdrachtdatum
|
||
opdr_datum_eind: $("#date_done").val() }, // Enddatum
|
||
exectimeChanged);
|
||
else
|
||
$("#period").text(0);
|
||
}
|
||
|
||
function setImage(id, src)
|
||
{
|
||
document.getElementById("id").src = "../Pictures/" + src;
|
||
}
|
||
|
||
function onChangedDienst()
|
||
{
|
||
//sgUitv.setValue($("#uitvoerende").val(), $("#uitvoerende_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 Uitvoerende leegmaken
|
||
if ($("#uitvoerende").length > 0)
|
||
{ // Suggestbox is aanwezig
|
||
sgUitv.setValue(-1, "", true, false, null, true);
|
||
sgUitv.CheckJustOne();
|
||
}
|
||
}
|
||
|
||
function onChangeFiat()
|
||
{
|
||
// Als kostenplaats sowieso verplicht dan komen we hier nooit
|
||
var kosten = $("#fiat")[0].checked;
|
||
$("#account_show").toggleClass('required', kosten);
|
||
|
||
}
|
||
|
||
function toggleObjectPicker(count)
|
||
{
|
||
if (count == 0)
|
||
$("#r_objs").html("");
|
||
|
||
if (typeof sgObject == "undefined")
|
||
return;
|
||
else if (count != 1)
|
||
sgObject.setValue(-1, "");
|
||
|
||
var isSuggest = $("select#r_objs").hasClass("hidden");
|
||
if (count == 0 || count == 1)
|
||
{ // Make suggest
|
||
if (isSuggest)
|
||
return;
|
||
$("select#r_objs").addClass("hidden");
|
||
$("div.r_objs.nowrap").removeClass("hidden");
|
||
}
|
||
else
|
||
{
|
||
if (!isSuggest)
|
||
return;
|
||
$("select#r_objs").removeClass("hidden");
|
||
$("div.r_objs.nowrap").addClass("hidden");
|
||
}
|
||
FcltMgr.resized(window);
|
||
}
|
||
|
||
function checkSequence(id)
|
||
{
|
||
var thisID = "date_plan"+(id==2?"2":"");
|
||
var thatID = "date_plan"+(id==2?"":"2");
|
||
|
||
// validate geplande einddatum >= geplande aanvang
|
||
// $("#date_plan2").length alleen indien S("mld_use_plandate2") & 2, dus dat is dan al gechecked
|
||
if ($("#show_"+thisID).length && $("#time_from_"+thisID).length && $("#"+thisID).length &&
|
||
$("#show_"+thatID).length && $("#time_from_"+thatID).length && $("#"+thatID).length)
|
||
{
|
||
var pld = $("#date_plan").val();
|
||
var pl2 = $("#date_plan2").val();
|
||
var pld_date = $("#show_date_plan").val();
|
||
var pl2_date = $("#show_date_plan2").val();
|
||
var pld_time = $("#time_from_date_plan").val();
|
||
var pl2_time = $("#time_from_date_plan2").val();
|
||
if (pld_date && pld_time && pld &&
|
||
pl2_date && pl2_time && pl2 &&
|
||
pld > pl2) // Not consecutive
|
||
{
|
||
$("#show_"+thatID).val($("#show_"+thisID).val());
|
||
$("#time_from_"+thatID).val($("#time_from_"+thisID).val());
|
||
$("#"+thatID).val($("#"+thisID).val());
|
||
}
|
||
else if (pld_date && pld && pl2_date && pl2 &&
|
||
(!pld_time || !pl2_time) && // minstens 1 timefield is niet ingevuld
|
||
pld > pl2) // Not consecutive
|
||
{
|
||
if (pld_date < pl2_date)
|
||
{
|
||
$("#show_"+thatID).val($("#show_"+thisID).val());
|
||
$("#time_from_"+thatID).val("00:00");
|
||
$("#"+thatID).val($("#"+thisID).val());
|
||
}
|
||
else // (pld_date == pl2_date) want pld > pl2
|
||
$("#"+thisID).val($("#"+thatID).val());
|
||
}
|
||
}
|
||
}
|
||
|
||
function makeMaterialStrings(data)
|
||
{
|
||
var matexiststr = "";
|
||
var matopdrkeystr = "";
|
||
var matkeystr = "";
|
||
var matamountstr = "";
|
||
var matunitstr = "";
|
||
var matpricestr = "";
|
||
var matbtwstr = "";
|
||
var matdescriptarr = [];
|
||
|
||
if (data.matExistArray)
|
||
{
|
||
for (var i = 0; i < data.matExistArray.length; i++)
|
||
{
|
||
if (data.matExistArray[i].amount > 0)
|
||
{
|
||
var first = (matexiststr == "");
|
||
matexiststr += (first? "" : ",") + "1";
|
||
matopdrkeystr += (first? "" : ",") + data.matExistArray[i].matopdrkey;
|
||
matkeystr += (first? "" : ",") + data.matExistArray[i].key;
|
||
matamountstr += (first? "" : ",") + String(data.matExistArray[i].amount).replace(",",".");
|
||
matunitstr += (first? "" : ",") + "";
|
||
matpricestr += (first? "" : ",") + String(data.matExistArray[i].price).replace(",",".");
|
||
matbtwstr += (first? "" : ",") + "";
|
||
matdescriptarr.push("Dummy"); // AKZA#33231 Gaf problemen als leeg
|
||
}
|
||
}
|
||
}
|
||
if (data.matUserArray)
|
||
{
|
||
for (i = 0; i < data.matUserArray.length; i++)
|
||
{
|
||
if (data.matUserArray[i].amount > 0)
|
||
{
|
||
var first = (matexiststr == "");
|
||
matexiststr += (first? "" : ",") + "0";
|
||
matopdrkeystr += (first? "" : ",") + data.matUserArray[i].matopdrkey;
|
||
matkeystr += (first? "" : ",") + "-1";
|
||
matamountstr += (first? "" : ",") + String(data.matUserArray[i].amount).replace(",",".");
|
||
matunitstr += (first? "" : ",") + data.matUserArray[i].unit;
|
||
matpricestr += (first? "" : ",") + String(data.matUserArray[i].price).replace(",",".");
|
||
matbtwstr += (first? "" : ",") + String(data.matUserArray[i].btw);
|
||
matdescriptarr.push(data.matUserArray[i].descript);
|
||
}
|
||
}
|
||
}
|
||
var matstr = {matexiststr: matexiststr, matopdrkeystr: matopdrkeystr
|
||
, matkeystr: matkeystr, matamountstr: matamountstr, matunitstr: matunitstr
|
||
, matpricestr: matpricestr, matbtwstr: matbtwstr, matdescriptarr: matdescriptarr};
|
||
return matstr;
|
||
}
|
||
|
||
function mld_melding_materiaal_callback(data)
|
||
{
|
||
var matcnt = 0;
|
||
|
||
// Materiaalbedrag weergeven en wordt opgeslagen bij het opslaan van de opdracht.
|
||
$("#mat_kosten").val(data.matTotal);
|
||
// Aantal materialen aangeven op de button.
|
||
matcnt = parseInt(data.matExistArray.length) + parseInt(data.matUserArray.length);
|
||
$("#materiallist_button").val( L("lcl_mld_materialen") + " (" + matcnt + ")");
|
||
|
||
// String met keys in hidden input opslaan.
|
||
var matstr = makeMaterialStrings(data);
|
||
$("#matexiststr").val(matstr.matexiststr);
|
||
$("#matopdrkeystr").val(matstr.matopdrkeystr);
|
||
$("#matkeystr").val(matstr.matkeystr);
|
||
$("#matamountstr").val(matstr.matamountstr);
|
||
$("#matunitstr").val(matstr.matunitstr);
|
||
$("#matpricestr").val(matstr.matpricestr);
|
||
$("#matbtwstr").val(matstr.matbtwstr);
|
||
// Totaalbedrag weergeven.
|
||
calcTotal();
|
||
|
||
window.matdescriptarr = matstr.matdescriptarr;
|
||
FcltMgr.resized();
|
||
}
|
||
|
||
function mld_melding_materiaal(ro)
|
||
{
|
||
if ($("#uitvoerende").val() < 0)
|
||
{
|
||
FcltMgr.alert(L("lcl_mld_select_first").format(srtdiscbes? L("lcl_bes_Supplier") : L("lcl_ord_company_uit")));
|
||
return;
|
||
}
|
||
// Maximum lengte van url is 2083 karakters (maximum path lengte is 2048 karakters).
|
||
// Daarom de strings niet via url (GET) meesturen maar via params van openModalDetail (Nadeel: nu wel clientside beschikbaar bij mld_opdr_materiaal.asp)
|
||
var url = "mld_opdr_materiaal.asp?opdr_key=" + opdr_key + (ro == 1? "&readonly=1" : "") + "&uitv_key=" + $("#uitvoerende").val();
|
||
|
||
FcltMgr.openModalDetail(url,
|
||
L("lcl_mld_materialen"),
|
||
{ matexiststr: $("#matexiststr").val(),
|
||
matopdrkeystr: $("#matopdrkeystr").val(),
|
||
matkeystr: $("#matkeystr").val(),
|
||
matamountstr: $("#matamountstr").val(),
|
||
matunitstr: $("#matunitstr").val(),
|
||
matpricestr: $("#matpricestr").val(),
|
||
matbtwstr: $("#matbtwstr").val(),
|
||
matdescriptarr: window.matdescriptarr,
|
||
callback: mld_melding_materiaal_callback
|
||
});
|
||
}
|
||
|
||
function mld_melding_uitvoerenden_callback(data)
|
||
{
|
||
// Aantal uitvoerenden aangeven op de button
|
||
if (data.uitvkeyArray.length == 1)
|
||
$("#uitvoerendelist_button").val("(" + data.uitvkeyArray.length + ") " + (srtdiscbes? L("lcl_bes_Supplier") : L("lcl_mld_opdr_bedrijf")));
|
||
else
|
||
$("#uitvoerendelist_button").val("(" + data.uitvkeyArray.length + ") " + (srtdiscbes? L("lcl_bes_Suppliers") : L("lcl_mld_opdr_bedrijven")));
|
||
|
||
// String met keys in hidden input opslaan
|
||
var uitvkeystr = data.uitvkeyArray.join(",");
|
||
var uitvcpersstr = data.uitvcpersArray.join(",");
|
||
var uitvcntstr = data.uitvcntArray.join(",");
|
||
var uitvbptstr = data.uitvbptArray.join(",");
|
||
var uitvslastr = data.uitvslaArray.join(",");
|
||
$("#uitvkeystr").val(uitvkeystr);
|
||
$("#uitvcpersstr").val(uitvcpersstr);
|
||
$("#uitvcntstr").val(uitvcntstr);
|
||
$("#uitvbptstr").val(uitvbptstr);
|
||
$("#uitvslastr").val(uitvslastr);
|
||
FcltMgr.resized();
|
||
|
||
var levsla = 0;
|
||
var uitvkey_levsla = -1;
|
||
for (var i = 0; i < data.uitvslaArray.length; i++)
|
||
{ // Bepaal de langste leveranciers SLA.
|
||
if (levsla < data.uitvslaArray[i])
|
||
uitvkey_levsla = data.uitvkeyArray[i];
|
||
}
|
||
|
||
// Onderscheid uitvoerders m.b.t. initi<74>le waarde beheerder:
|
||
// 1) Extern bedrijf: Beheerder is default de user (invoerder).
|
||
// 2) Interne persoon: Beheerder is default de user (invoerder).
|
||
// 3) Intern bedrijf: Beheerder is default leeg.
|
||
// Als alleen interne bedrijven zijn ingevuld, dan laten we de beheerder leeg, anders default de user (invoerder) invullen.
|
||
var allBI = true;
|
||
for (var i = 0; i < data.uitvbptArray.length; i++)
|
||
{ // Bepaal de langste leveranciers SLA.
|
||
if (data.uitvbptArray[i] != "BI")
|
||
allBI = false;
|
||
}
|
||
|
||
// Als er al een behandelaar is ingevuld, dan niets aanpassen.
|
||
if ($("#behandelaar").val() < 0)
|
||
if (!allBI)
|
||
// setValue(key, txt, doonChange, checkExist, extraParam, lastTry)
|
||
// De user hoef ik hier niet te checken of die bestaat (checkExist).
|
||
sgPerson.setValue(user_key, user_naam);
|
||
//else Behandelaar is al leeg.
|
||
|
||
recalcEinddatum(uitvkey_levsla);
|
||
}
|
||
|
||
function mld_melding_uitvoerenden()
|
||
{
|
||
// Maximum lengte van url is 2083 karakters (maximum path lengte is 2048 karakters).
|
||
// Daarom de strings niet via url (GET) meesturen maar via params van openModalDetail (Nadeel: nu wel clientside beschikbaar bij mld_opdr_uitvoerenden.asp)
|
||
var url = "mld_opdr_uitvoerenden.asp?opdr_key=" + opdr_key
|
||
+ "&mld_key=" + mld_key
|
||
+ "&cnt_key=" + cnt_key
|
||
+ "&dienst_key=" + ($("#dienstfilt").val() ? $("#dienstfilt").val() : "-1")
|
||
+ "&autlevel=" + autlevel
|
||
+ "&srtdiscbes=" + (srtdiscbes? 1 : 0)
|
||
+ "&loc_key=" + loc_key
|
||
+ "&onrgoed_key=" + onrgoed_key
|
||
+ "&bld_key=" + bld_key
|
||
+ "&disckey=" + disckey
|
||
+ "&opdrtype=" + opdr_type;
|
||
|
||
FcltMgr.openModalDetail(url,
|
||
srtdiscbes? L("lcl_bes_Supplier") : L("lcl_mld_opdr_bedrijf"),
|
||
{ uitvkeystr: $("#uitvkeystr").val(),
|
||
uitvcpersstr: $("#uitvcpersstr").val(),
|
||
uitvcntstr: $("#uitvcntstr").val(),
|
||
uitvbptstr: $("#uitvbptstr").val(),
|
||
uitvslastr: $("#uitvslastr").val(),
|
||
callback: mld_melding_uitvoerenden_callback
|
||
});
|
||
}
|
||
|
||
function mld_opdracht_object_callback(data)
|
||
{
|
||
$("#r_objs").html(data.obj_html);
|
||
var objSize = $("#r_objs").attr("size");
|
||
var objCount = $("#r_objs").get(0).options.length;
|
||
if (objSize != Math.max(objCount, 1))
|
||
{
|
||
$("#r_objs").attr("size", Math.max(objCount, 1));
|
||
FcltMgr.resized();
|
||
}
|
||
$("#r_objs > option").removeAttr("selected");
|
||
|
||
if (objCount == 1)
|
||
sgObject.setValue($("#r_objs > option").eq(0).val(), $("#r_objs > option").eq(0).text());
|
||
toggleObjectPicker(objCount);
|
||
}
|
||
|
||
function mld_opdracht_object()
|
||
{
|
||
var alg_key = -1;
|
||
// De 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
|
||
// 1) Met plaatsgegevens die ingevuld zijn en verplicht. Als een plaats niveau niet verplicht is gaan we hem zelfs negeren (zie ook functie getObjectInfo).
|
||
// 2) Met afdelinggegevens van de user.
|
||
if (alg_onrgoed_obj_niveau == "" && melder_key > 0)
|
||
{
|
||
alg_key = user_afd_key;
|
||
alg_niveau = "A";
|
||
}
|
||
else if (room_key > -1 && alg_onrgoed_niveau == "R")
|
||
{
|
||
alg_key = room_key;
|
||
alg_niveau = "R";
|
||
}
|
||
else if (flr_key > -1 && alg_onrgoed_niveau == "V")
|
||
{
|
||
alg_key = flr_key;
|
||
alg_niveau = "V";
|
||
}
|
||
else if (bld_key > -1 && alg_onrgoed_niveau == "G")
|
||
{
|
||
alg_key = bld_key;
|
||
alg_niveau = "G";
|
||
}
|
||
else // Locatie is altijd verplicht.
|
||
{
|
||
alg_key = loc_key;
|
||
alg_niveau = "L";
|
||
}
|
||
|
||
var url = "../mld/mld_object.asp?mld_key=" + mld_key;
|
||
url += "&stdm_key="+ stdm;
|
||
url += "&person=" + (perslid_key_voor > 0? perslid_key_voor : melder_key);
|
||
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_opdracht_object_callback});
|
||
} |