Files
Facilitor/APPL/MLD/mld_edit_opdr.js
Erik Groener 3f4ddee814 KFNS#34792 Uitvoertijden / SLA meldingen vs. afspraken leveranciers
svn path=/Website/trunk/; revision=30848
2016-09-26 11:10:31 +00:00

603 lines
22 KiB
JavaScript
Raw Blame History

/*
$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();
var pers_key = $("#contactpers").val();
$.getJSON("get_uurtarief_info.asp",
{ bedrijf_key: uitv_key, contactpersoon_key: pers_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();
}
}
function onChangePers(u_key, txt)
{
if (u_key > 0)
{
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()
{
if (sla_mode == 1) // einddatum alleen berekenen voor leverancier-SLA
{
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,
sla_mode: sla_mode
}
$.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 <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");
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($("<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.
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 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;
// 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);
$("#matunitstr").val(matstr.matunitstr);
$("#matpricestr").val(matstr.matpricestr);
$("#matbtwstr").val(matstr.matbtwstr);
window.matdescriptarr = matstr.matdescriptarr;
FcltMgr.resized();
}
function mld_melding_materiaal(ro)
{
if ($("#uitvoerende").val() < 0)
{
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(",");
$("#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 <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);
}
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 == 'A' && melder_key > 0)
{
alg_key = user_afd_key;
alg_niveau = "A";
}
else if (room_key > -1 && alg_onrgoed_obj_niveau == "R")
{
alg_key = room_key;
alg_niveau = "R";
}
else if (flr_key > -1 && alg_onrgoed_obj_niveau == "V")
{
alg_key = flr_key;
alg_niveau = "V";
}
else if (bld_key > -1 && alg_onrgoed_obj_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 += "&srtdisc=" + disckey;
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});
}