/* $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 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 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 (mld_ord_show_cost == 1) { var uitv_key = $("#uitvoerende").val(); $.getJSON("get_uurtarief_info.asp", { bedrijf_key: uitv_key }, showUurtarief) } } // Bereken het totaal bedrag van de opdracht. function calcTotal() { if (typeopdr_matchtype == 5) return; if (mld_ord_show_cost && typeopdr_matchtype != 3 && typeopdr_matchtype != 4) { 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 ($("#uurtarief").val() != '' && !isNaN(uurtarief)) $("#uurtarief").val(num2currEditable(uurtarief)); if ($("#mat_kosten").val() != '' && !isNaN(mat_kosten)) $("#mat_kosten").val(num2currEditable(mat_kosten)); if ($("#corr_kosten").val() != '' && !isNaN(corr_kosten)) $("#corr_kosten").val(num2currEditable(corr_kosten)); $("#tot_kosten").val(num2currEditable(tot_kosten)); } else { $("#tot_kosten").val(0); } } 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) { // Maak contactpersoon leeg sgCntPersUitv.setValue(-1, ""); // Update contract selectbox updateCnt(); changeUurtarief(); calcTotal(); recalcEinddatum(); } } // Einddatum calendar aanpassen function processEinddatum(data, textStatus) { data.einddatum = new Date(data.einddatum); // was nog millisec var params = { cal_id: "date_done", datum: data.einddatum.getTime(), minDate: (mld_enforce_orderdates? mld_startdatum.getTime() : (opdr_key < 0? new Date().getTime() : registratiedatum.getTime())), timeField: ((data.uitvoertijd && data.uitvoertijd.eenheid != null && data.uitvoertijd.eenheid == "U") || (data.uitvoertijd && data.uitvoertijd.eenheid && data.mld_uitvoertijd_eenheid == "U")? 1 : 0), timeStep : 15, // TODO: Is nog wel erg hard. Zie ook mld_edit_opdr.asp startTime: 8, endTime : 18, readonly: (opdr_key > 0 && !canDatesChange? 1 : 0), required: 1, volgnr: 2, onChange: "DateChanged()" //addClass: // Eventueel zetten van de "expired2" class gebeurt wel in de callback functie "DateChanged" }; if (mld_enforce_orderdates) params.maxDate = mld_einddatum.getTime(); $("#show_date_done").closest("span").load("../Shared/loadCalendar.asp", params, function() {DateChanged();} // Aantal werkdagen moet weer kloppen en eventueel "expired2" class zetten. ); } function recalcEinddatum() { var uitv_key = $("#uitvoerende").val(); var startdate = new Date(parseInt($("#orderdate").val(), 10)); // Huidige opgeslagen waarde (Is zonder tijd) var startdatum = startdate.getTime(); // daarmee kan ik de database de einddatum laten bepalen var params = { req_info: "calc_opdrachteinddatum", mld_key: mld_key, startdatum: startdatum, uitv_key: uitv_key } $.getJSON("./get_mld_info_ajax.asp", params, processEinddatum); } function onChangeContract() { // 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, true); // Maak contactpersoon leeg sgCntPersUitv.setValue(-1, ""); } 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); } // Check of er een offertelimiet voor deze opdracht geldt if (opdr_key < 0 && !copy && typeopdr_isofferte == 0 && parseInt($("#tot_kosten").val()) > 0 && typeopdr_offertelimiet > 0 && typeopdr_offertelimiet < parseInt($("#tot_kosten").val()) && !confirm(L("lcl_mld_opdr_offerte_vereist").format(typeopdr_offertelimiet))) return false; // Is het een nieuwe offerte waar éé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"); confirm(L("lcl_shared_validator_missing").format(typeopdr_offertelimiet)); return false; } return true; } 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, 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 if (!checkInput()) return false; // 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($("").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. nrOpenOpdr == 0 && // Er zijn geen andere nog open opdrachten. mld_opdr_einddatum.getTime() <= mld_einddatum && // Huidige opdracht einddatum is voor of gelijk aan de huidige melding einddatum. opdr_einddatum.getTime() != mld_opdr_einddatum.getTime() && // Datum van de opdracht is aangepast. opdr_einddatum.getTime()> mld_einddatum) // 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"); } return true; } function opdr_edit_finish() { var opdr_kosten = parseFloat(String($("#tot_kosten").val()).replace(',', '.')); if (kosten_verplicht_afr && opdr_kosten == 0) { alert(L("lcl_mld_opdr_kosten_verpl_afr")); return; } var data = { opdr_key: opdr_key, 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").val(json.dagen); } else 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() != "") $.getJSON("runtime_recalc_opdr.asp", { opdr_key: opdr_key, opdr_datum: $("#orderdate").val(), // Opdrachtdatum opdr_datum_eind: $("#date_done").val() }, // Enddatum exectimeChanged); else $("#period").val(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 makeMaterialStrings(data) { var matexiststr = ""; var matopdrkeystr = ""; var matkeystr = ""; var matamountstr = ""; var matpricestr = ""; var matdescriptarr = []; if (data.matExistArray) { for (var i = 0; i < data.matExistArray.length; i++) { if (data.matExistArray[i].amount > 0) { matexiststr += (matexiststr == ""? "" : ",") + "1"; matopdrkeystr += (matopdrkeystr == ""? "" : ",") + data.matExistArray[i].matopdrkey; matkeystr += (matkeystr == ""? "" : ",") + data.matExistArray[i].key; matamountstr += (matamountstr == ""? "" : ",") + String(data.matExistArray[i].amount).replace(",","."); matpricestr += (matpricestr == ""? "" : ",") + String(data.matExistArray[i].price).replace(",","."); 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) { matexiststr += (matexiststr == ""? "" : ",") + "0"; matopdrkeystr += (matopdrkeystr == ""? "" : ",") + data.matUserArray[i].matopdrkey; matkeystr += (matkeystr == ""? "" : ",") + "-1"; matamountstr += (matamountstr == ""? "" : ",") + String(data.matUserArray[i].amount).replace(",","."); matpricestr += (matpricestr == ""? "" : ",") + String(data.matUserArray[i].price).replace(",","."); matdescriptarr.push(data.matUserArray[i].descript); } } } var matstr = {matexiststr: matexiststr, matopdrkeystr: matopdrkeystr , matkeystr: matkeystr, matamountstr: matamountstr , matpricestr: matpricestr, matdescriptarr: matdescriptarr}; return matstr; } function mld_melding_materiaal_callback(data) { var matcnt = 0; // Totaalbedrag weergeven $("#tot_kosten").val(data.matTotal); // Materiaalbedrag is totaalbedrag (hidden veld). Moet ook opgeslagen worden 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); $("#matpricestr").val(matstr.matpricestr); window.matdescriptarr = matstr.matdescriptarr; FcltMgr.resized(); } function mld_melding_materiaal(ro) { // 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":""); FcltMgr.openModalDetail(url, L("lcl_mld_materialen"), { matexiststr: $("#matexiststr").val(), matopdrkeystr: $("#matopdrkeystr").val(), matkeystr: $("#matkeystr").val(), matamountstr: $("#matamountstr").val(), matpricestr: $("#matpricestr").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(","); $("#uitvkeystr").val(uitvkeystr); $("#uitvcpersstr").val(uitvcpersstr); $("#uitvcntstr").val(uitvcntstr); FcltMgr.resized(); } 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() + "&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(), callback: mld_melding_uitvoerenden_callback }); } function mld_opdracht_object_callback(data) { // TODO: Moet er niet ook