/* $Revision$ $Id$ File: fin_edit_factuur.js */ var dateInputs = new Object(); function checkFactuurExistCallback(json, textStatus) { if (json.aantal > 0) if (confirm(L("lcl_fin_invoice_number") + " " + json.fac_nr + L("lcl_fin_is_al") + json.aantal + L("lcl_fin_register_total") + json.totaal + ". " + L("lcl_fin_toch_doorgaan"))) document.forms.u2.submit(); else return false; else document.forms.u2.submit(); } function checkInput() { var filled_lines = 0; var blank_lines = 0; $("table#sel_items input[id^=sum]").each(function() { if (myParseFloat($(this).val()) != 0) filled_lines++; else blank_lines++; }); if (!filled_lines) { // Er zijn geen volledig ingevulde factuurregels. if (blank_lines == 0) AddItem(); alert(L("lcl_fin_no_complete_invoice_rows")); return false; } // Controle op het factuurnummer (van de leverancier) of dat dan van dezelfde leverancier(!) (debiteurnummer) al bestaat, // Eigen factuurnummer meegeven zodat deze niet meegnomen wordt in de check // Melding: "Factuurnr 1234 is al N keer geregistreerd met een totaalbedrag van 99999. Toch doorgaan?", bij Cancel keer je terug in het scherm $.getJSON("check_factuur_exist.asp", { fac_nr: $("#finnr").val(), deb_nr: $("#findebtor").val(), fin_key: $("#fin_key").val() }, checkFactuurExistCallback); } function fin_submit() { document.activeElement.blur(); // trigger laatste onChanges // Standaard checks op verplichte velden, datum formaat, numeriek en float formaat, currency formaat. if (!validateForm("u2")) return false; // Formulier specifieke checks, met eventuele submit checkInput(); } function fin_cancel() { FcltMgr.closeDetail(window, { cancel: true } ); } function devidePeriodChanged() { if (checkDP(false)) { var finboekm = $("#finboekm").val(); finboekm_jaar = finboekm.substr(0,4); // Text bij inputbox finboekm_jaar nog aanpassen $('label[for="gefactureerd_jaar"]').html(L("lcl_fin_invoiced_year") + " " + finboekm_jaar + ": "); referenceChanged(); } else { // Text bij inputbox finboekm_jaar nog aanpassen $('label[for="gefactureerd_jaar"]').html(L("lcl_fin_invoiced_year") + " " + L("lcl_fin_year") + ": "); $("#gefactureerd_jaar").val(L("lcl_fin_unknown")); } } function checkDP(show) { var valid = true; var value = $("#finboekm").val(); var err = L("lcl_fin_invalid_kenmerk_format"); if (value != '') { valid = checkDividePeriod(value); if (!valid) err = L("lcl_fin_kenmerk_out_range"); } if (show && !valid) { alert(err); $("#finboekm").focus(); } return valid; } function clearRefDetails() { $("#reflink").val(""); $('#reflink').unbind('click'); $("#lev_uit").val(""); $('#lev_uit').unbind('click'); $("#status").val(""); $("#kostenplaats_naam").val(""); $("#startdate").val(""); $("#enddate").val(""); $("#totbedrag").val(""); $("#termbedrag").val(""); $("#gefactureerd").val(""); $("#gefactureerd_jaar").val(""); $("#opdr_omschr").html(""); $("#tr_opdr_omschr").hide(); $("#loc_omschr").html(""); $("#tr_loc_omschr").css("display", "none"); $("#refopdrtype").val(""); $("#tr_refopdrtype").hide(); $("#fincnt").val(""); $("#finsom").val(""); FcltMgr.resized(window); } function clearExtInvDetails() { $("#fldfincnt").val(""); $("#fldfinsom").val(""); } function FcltGetRefInfoCallback(json) { if (json.message) { alert(json.message); $("#referentienr").val($("#referentienr_old").val()); referenceChanged(true); // Geef de juiste referentiegegevens weer goed weer. Oude waarde is zeker een goede waarde. } else if (fin_enable_kostensoort == 0 && fin_kostensoort_verplicht == 1 && !json.kostensoort_key) { // Kostensoort is hidden maar wel verplicht. Referentie heeft geen geldige kostensoort die dan verderop kan worden ingevuld alert(L("lcl_fin_invalid_ref_ks")); $("#referentienr").val($("#referentienr_old").val()); referenceChanged(true); // Geef de juiste referentiegegevens weer goed weer. Oude waarde is zeker een goede waarde. } else { if (json.ref_type) { // Hoeveel factuurregels zijn er? var count = $("table#sel_items input[id^=sum]").length; // Als er door de referenties verschillende btw tabellen wordt gebruikt terwijl er factuurregels zijn, dan wijziging niet accepteren en melding geven if (count > 0 && window.btwtabel_key != json.btwtabel_key) { alert(L("lcl_fin_ref_btw_diff")); $("#referentienr").val($("#referentienr_old").val()); } else { // T.b.v. de mogelijkheid om oude waarde weer terug te zetten bij ongeldige referentie $("#referentienr_old").val($("#referentienr").val().toUpperCase()); $("#fin_type").val(json.ref_type); $("#lev_uit").val(json.lev_uit); if (canReqRelDetails) { $('#lev_uit').click(function() { refurl = "appl/prs/prs_bedrijf.asp?bedrijf_key=" + json.lev_uit_key; FcltMgr.openDetail(refurl); } ); } $("#status").val(json.status); $("#kostenplaats_naam").val(json.kostenplaats_naam); $("#startdate").val(json.startdatum); $("#enddate").val(json.einddatum); if (fin_defaultboekmaand == 2 && json.refchanged) { // Boekmaand invullen adhv bestel/opdrachtdatum $("#finboekm").val(json.periode); // Tonen opdrachtdatum } if (json.totbedrag == "" && json.levkosten == "" && json.korting == "") $("#totbedrag").val(""); else { var totkosten = json.totbedrag; if (json.ref_type == "B") // levkosten en korting bestaan alleen voor type B. totkosten += json.levkosten - json.korting; $("#totbedrag").val(currency_pref + num2currEditable(parseFloat(totkosten)) + currency_suff); } if (!json.termbedrag || json.termbedrag == "") $("#termbedrag").val(""); else $("#termbedrag").val(currency_pref + num2currEditable(parseFloat(json.termbedrag)) + currency_suff); if (json.gefactureerd == "") $("#gefactureerd").val(""); else $("#gefactureerd").val(currency_pref + num2currEditable(parseFloat(json.gefactureerd)) + currency_suff); if (json.gefactureerd_jaar == "") $("#gefactureerd_jaar").val(""); else $("#gefactureerd_jaar").val(currency_pref + num2currEditable(parseFloat(json.gefactureerd_jaar)) + currency_suff); if (json.show_omschr) { $("#opdr_omschr").html(json.opdr_omschr); $("#tr_opdr_omschr").show(); } else { $("#opdr_omschr").val(""); $("#tr_opdr_omschr").hide(); } if (json.show_loc) { var loc_geg_string = ""; for (i = 0; i < json.loc_geg.length; i++) { loc_geg_string += (i > 0? ",
" : "") + json.loc_geg[i].loc_desc; } $("#loc_omschr").html(loc_geg_string); $("#tr_loc_omschr").show(); } else { $("#loc_omschr").html(""); $("#tr_loc_omschr").hide(); } if (json.refchanged) if (fin_enable_kostensoort == 0) $("#fincostsrt").val(json.kostensoort_key); // hidden veld zetten else // 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) sgCostCentre.setValue(json.kostensoort_key, json.kostensoort_oms, true, true, null, true); // Suggestbox zetten $('#reflink').val(json.referentie) if ($("#referentienr").val() != json.referentie) $("#referentienr").val(json.referentie); switch (json.ref_type) { case "O": // Opdracht (Melding) $('label[for="reflink"]').html(L("lcl_shared_order")); $("#refopdrtype").val(json.typeopdr_omschr); $("#tr_refopdrtype").show(); //$('label[for="enddate"]').html(L("lcl_fin_end_date_plan") + ":"); $("#loc_code").val(json.loc_code); // Als de default kostenplaats is geselecteerd of bij nieuwe facturen dan locatiecode invullen bij de factuurregels. if (json.refchanged) updateLocation(); if (canReqRefDetails) { $('#reflink').click(function() { refurl = "appl/mld/mld_opdr.asp?urole=fo&opdr_key=" + json.ref_key; FcltMgr.openDetail(refurl); } ); } break; case "B": // Bestelling opdracht $('label[for="reflink"]').html(L("lcl_fin_bestelopdracht")); $("#tr_refopdrtype").hide(); //$('label[for="enddate"]').html(L("lcl_fin_delivery_date") + ":"); $("#loc_code").val(json.loc_code); // Als de default kostenplaats is geselecteerd of bij nieuwe facturen dan locatiecode invullen bij de factuurregels. if (json.refchanged) updateLocation(); if (canReqRefDetails) { $('#reflink').click(function() { refurl = "appl/bes/bes_opdr.asp?urole=fo&ordernr=" + json.ref_key FcltMgr.openDetail(refurl); } ); } break; case "C": // Contract $('label[for="reflink"]').html(L("lcl_fin_contract")); $("#tr_refopdrtype").hide(); //$('label[for="enddate"]').html(L("lcl_fin_end_date") + ":"); $("#loc_code").val(""); if (canReqRefDetails) { $('#reflink').click(function() { refurl = "appl/cnt/cnt_contract.asp?urole=fo&cnt_key=" + json.ref_key; FcltMgr.openDetail(refurl); } ); } break; } $("#fincnt").val(json.aantalfacturen); $("#finsom").val(currency_pref + json.totaalbedrag + currency_suff); window.btwtabel_key = json.btwtabel_key; window.btwtabel = json.btwtabel; if (count == 0 && json.refchanged && fin_key == -1) { AddItem(true); $("#show_calendar").focus(); // Het eerstvolgende veld } FcltMgr.resized(window); } } } } function referenceChanged(refchanged) { if ($("#referentienr").val() != "") { var returndata = FcltSyncgetJSON("get_ref_info_ajax.asp", { ref_nr: $("#referentienr").val(), fin_boekm_jaar: $("#finboekm").val().substr(0, 4), refchanged: (refchanged && ($("#referentienr_old").val() == "" || default_costsrt_selected || fin_key == -1)? 1: 0), fin_factuur_nr: $("#finnr").val() }); FcltGetRefInfoCallback(returndata) } else // T.b.v. de mogelijkheid om oude waarde weer terug te zetten bij ongeldige referentie $("#referentienr_old").val(""); } function updateLocation() { $("table#sel_items input[id^=ref]").each(function() { $(this).val($("#loc_code").val()); }); } function checkDividePeriod(value) { if (value == "") return true; var valid = true; var arr = /^(\d{4})[-](\d{1,2})$/.exec(value); if (arr) { var dt = new Date( arr[1], arr[2] -1, 1 ); if ((arr[2] != dt.getMonth() + 1) || (arr[1] != dt.getYear() && arr[1] != dt.getFullYear()) ) { valid = false; } } else valid = false; return(valid); } function kenmerkDividePeriodKey(evt) { var e = evt || event; var kc = e.which || e.keyCode; if (kc >= 48 && kc <= 57) return; if (String.fromCharCode(kc) == '-') return; e.returnValue = false; } function kenmerkDividePeriodChange(evt) { var e = evt || event; if( e.propertyName != 'value' ) return; var el = e.srcElement || e.target; var newT = el.value; var nm = el.name; var oldT = dateInputs[nm]; if (oldT == null) oldT = ''; var valid = false; if (newT == '') valid = true; else if (/^\d{4}$/.test(newT)) { el.value += '-'; valid = true; } else if (/^\d{1,4}(|[-](|\d{1,2}))$/.test(newT)) { valid = true; } if (valid) dateInputs[nm] = el.value; else if (el.value != oldT) el.value = oldT; } function myParseFloat(txt) { txt = txt.replace(currency_pref, ""); txt = txt.replace(currency_suff, ""); return parseFloat(txt.replace(',', '.')); } // Array selectedItems is vervallen 5.3.3; we houden alles in de HTML bij // Werk het totaal van een regel en het totaal generaal bij // obj is mogelijk een van de velden in regel, welke doet er niet zo toe function setPrice(obj) { if (obj) { var $row = $(obj).closest("tr"); var btwkey = $row.find("[id^=BTW]").val(); var sum = myParseFloat($row.find("[id^=sum]").val()); for (var j = 0; j < window.btwtabel.length; j++) { if (btwkey == btwtabel[j].key) btwdata = btwtabel[j]; } var sumBTW = sum; if (!btwdata.verlegd) sumBTW = sumBTW * (1 + btwdata.perc / 100); $row.find("[id^=sumBTW]").val(currency_pref + num2curr(sumBTW) + currency_suff); } // Nu totaal bijwerken var totalBTW = 0; $("table#sel_items input[id^=sumBTW]").each(function() { totalBTW += myParseFloat($(this).val()); }); $("#totalBTW_txt").html(currency_pref + num2curr(totalBTW) + currency_suff); } // Voeg een ieuwe regel toe na het plus-knopje function AddItem(nofocus) // als je hieronder iets aanpast controleer dan ook fin.inc/CreateEditRow { var sum = 0; var descr = ""; var BTW = -1; /*DUMMY*/ var sumBTW = 0; var ref = $("#loc_code").val(); var ksrt_key = -1; var ksrt_oms = ""; var verlegd = 0; var rowIndex = parseInt($("#rowIndex").val()); rowIndex++; $("#rowIndex").val(rowIndex); var table = $("#sel_items")[0]; // Insert data rows var tr = table.insertRow(-1); // Create drop button cell = tr.insertCell(-1); cell.innerHTML = ""; // Create description field cell = tr.insertCell(-1); cell.innerHTML = ""; // Create reference field cell = tr.insertCell(-1); cell.innerHTML = ""; // TODO: escapen if (fin_enable_kostensoort != 0) { // Create charge type field cell = tr.insertCell(-1); cell.innerHTML = "" + ""; var x = new Suggest({ objectName: "sgCostCentre" + rowIndex, queryField: $("#fincostsrt" + rowIndex + "_show")[0], queryUrl: "../shared/suggest/SuggestKostensoort.asp?a=1", initKey: ksrt_key, keyField: $("#fincostsrt" + rowIndex)[0], highlightDescript: true }); window["sgCostCentre" + rowIndex] = x; } // Create sum field cell = tr.insertCell(-1); cell.innerHTML = ""; cell.align = 'right'; // Create BTW field cell = tr.insertCell(-1); var htmlText = ""; cell.innerHTML = htmlText; cell.align = 'right'; // Sum incl. tax cell = tr.insertCell(-1); cell.innerHTML = ""; cell.align = 'right'; if (!nofocus) $("#descript" + rowIndex).focus(); } function DeleteOrderLine(obj) { if (!confirm(L("lcl_fin_cancelfac"))) return; var tr = $(obj).closest("tr"); tr.remove(); // remove from totalBTW setPrice(null); } function SumChanged(obj) { var sum = myParseFloat(obj.value); var defaultamount = 0; if (obj.value == '') obj.value = sum = defaultamount; if (obj.value == '' || isNaN(sum) || !isGoodNumber(obj.value + "", false,false,8,2)) { alert(L("lcl_fin_invalidSum")); obj.focus(); return; } obj.value = num2curr(sum); setPrice(obj); }