/* $Revision$ $Id$ File: fin_edit_factuur.js */ var dateInputs = new Object(); function checkFactuurExistCallback(json, textStatus) { var label = L("lcl_fin_invoice_number") + " " + json.fac_nr + L("lcl_fin_is_al") + json.aantal + L("lcl_fin_register_total") + currency_pref + num2currEditable(parseFloat(json.totaalbedrag)) + ". " + L("lcl_fin_toch_doorgaan"); FcltMgr.confirm(label, { autoconfirm: json.aantal <= 0, fncancel: function() { iface.button.enable("btn_fin_submit"); } }, function() { document.forms.u2.submit(); }); } function checkInput() { var filled_lines = 0; var blank_lines = 0; $("table#sel_items input[id^=sum]").not(":hidden").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(); FcltMgr.alert(L("lcl_fin_no_complete_invoice_rows")); return false; } return true; } function checkVerlegd() { valid = true; if (verlegdmode > 0) { var is_required = false; // voor verlegdmode = 2 var mixed_mode = 0; // voor verlegdmode = 4 $("table#sel_items select[id^=BTW]").each(function() { // De verwijderde factuurregels overslaan. if ($("#" + this.id).closest("tr").css("display") != "none") { var tarief_key = $(this).val(); for (var j = 0; j < window.btwtabel.length; j++) { if (tarief_key == btwtabel[j].key) { if (btwtabel[j].perc > 0) mixed_mode = mixed_mode | (btwtabel[j].verlegd?2:1); continue; } } is_required = is_required || ((mixed_mode & 2) == 2); // Als er één factuurregel verlegd is, dan required. } }); if ((verlegdmode & 1) == 1) { // Hiervoor valt niets te controleren, alleen het veld G-bedrag moet zichtbaar zijn gemaakt. } if ((verlegdmode & 2) == 2) { // Is er een factuurregel die een verlegd btw-tarief heeft? // Zet dan het veld g-bedrag op verplicht. $("#fingbedrag").toggleClass("required", is_required); } if ((verlegdmode & 4) == 4) { // Alle factuurregels moeten dezelfde BTW-verlegd-tarief hebben, of alleen niet-verlegde BTW-tarieven. // Dus een verlegd- en normaal-tarief mag niet. if (mixed_mode == 3) { FcltMgr.alert(L("lcl_fin_gbedrag_validate")); valid = false; } } } return valid; } function fin_submit() { document.activeElement.blur(); // trigger laatste onChanges if (!checkVerlegd()) return false; // Formulier specifieke checks, met eventuele submit if (!checkInput()) return false; // Standaard checks op verplichte velden, datum formaat, numeriek en float formaat, currency formaat. if (!validateForm("u2")) 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(), lev_uit_key: $("#lev_uit_key").val(), // Via de referentie bepaald en opgeslagen. Afdeling, Persoon of Bedrijf. fin_key: $("#fin_key").val() }, checkFactuurExistCallback); return true; } function fin_cancel() { FcltMgr.closeDetail(window, { cancel: true } ); } function devidePeriodChanged() { if (checkDP()) { 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() { var valid = true; var value = $("#finboekm").val(); if (value != '') valid = checkDividePeriod(value); validateField($("#finboekm"), valid, L("lcl_fin_invalid_kenmerk_format")) return valid; } function clearRefDetails() { $("#reflink").val(""); $('#reflink').unbind('click'); $("#lev_uit").val(""); $('#lev_uit').unbind('click'); $("#lev_opm").val(""); $("#lev_typ").val(""); $("#status").val(""); $("#kostenplaats_naam").val(""); $("#startdate").val(""); $("#enddate").val(""); $("#totbedrag").val(""); $("#termbedrag").val(""); $("#gefactureerd").val(""); $("#gefactureerd_jaar").val(""); $("#opdr_id").html(""); $("#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(""); $("#finsominc").val(""); FcltMgr.resized(window); } function clearExtInvDetails() { $("#fldfincnt").val(""); $("#fldfinsom").val(""); } function FcltGetRefInfoCallback(json) { if (json.message) { FcltMgr.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 if (json.multi_kostensoort) // Referentie (Bestelling) heeft voor verschillende artikelen, verschillende kostensoorten. // Hierdoor is een goede keuze niet mogelijk en kan het kostensoort veld leeg blijven. // Echter in dit geval is het kostensoort veld hidden en kan dus niet gevuld worden. FcltMgr.alert(L("lcl_fin_invalid_multi_ks")); else FcltMgr.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) { FcltMgr.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); $("#lev_typ").val(json.reltype_oms); if (json.lev_uit_type == "P") $("label[for='lev_uit']").text(L("lcl_cnt_name")); else if (json.lev_uit_type == "A") $("label[for='lev_uit']").text(L("lcl_cnt_afdeling")); else // (json.lev_uit_type == "B") if (json.srtcontract_type == cnt_srttype_rental) $("label[for='lev_uit']").text(L("lcl_cnt_mutatie_huurder")); else $("label[for='lev_uit']").text(L("lcl_cnt_contractant")); $("#lev_uit_key").val(json.lev_uit_key); if (canReqRelDetails) { $('#lev_uit').click(function() { if (json.lev_uit_type == "B") // Bedrijf refurl = "appl/prs/prs_bedrijf.asp?bedrijf_key=" + json.lev_uit_key; else if (json.lev_uit_type == "P") // Persoon refurl = "appl/prs/prs_perslid.asp?prs_key=" + json.lev_uit_key; else // (json.lev_uit_type == "A") // Afdeling refurl = "appl/prs/prs_afdeling.asp?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.lev_opm) { $("#lev_opm").val(json.lev_opm); $("#tr_lev_opm").show(); } else { $("#lev_opm").val(""); $("#tr_lev_opm").hide(); } if (json.opdr_id) { $("#opdr_id").html(json.opdr_id); $("#tr_opdr_id").show(); } else { $("#opdr_id").val(""); $("#tr_opdr_id").hide(); } 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(); $('#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(); $('#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(""); $('#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 + num2currEditable(parseFloat(json.totaalbedrag)) + currency_suff); $("#finsominc").val(currency_pref + num2currEditable(parseFloat(json.totaalbedrag + json.totaalbtwbedrag)) + currency_suff); window.btwtabel_key = json.btwtabel_key; window.btwtabel = json.btwtabel; fin_materiaal = json.opdr_materiaal; if (fin_materiaal && fin_materiaal.list.length && !fin_materiaal.readonly) { $("#imp_materiaal").show(); } 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 && ($("#fin_status_key").val() == 3 || default_costsrt_selected || fin_key == -1)? 1: 0), fin_factuur_nr: $("#finnr").val(), ascontactpers: asContactpersoon? 1 : 0 }); 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; var totalEXC = 0; $("table#sel_items input[id^=sum]").each(function() { if (this.id.substr(0,6) == "sumBTW") totalBTW += myParseFloat($(this).val()); else totalEXC += myParseFloat($(this).val()); }); $("#totalEXC_txt").html(currency_pref + num2curr(totalEXC) + currency_suff); $("#totalBTW_txt").html(currency_pref + num2curr(totalBTW) + currency_suff); } // Voeg een nieuwe 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 sumBTW = 0; var ref = $("#loc_code").val(); var ksrt_key = -1; var ksrt_oms = ""; var rowIndex = parseInt($("#rowIndex").val()); rowIndex++; $("#rowIndex").val(rowIndex); var table = $("#sel_items")[0]; // Insert data rows var tr = table.insertRow(-1); tr.id = "trfin" + rowIndex; tr.className = (rowIndex & 1? "O " : "E "); tr.setAttribute("ROWKEY", -1); // Create drop button cell = tr.insertCell(-1); cell.innerHTML = ""; cell.id = "tdfin" + rowIndex; // 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 + hidden regel_key input veld. cell = tr.insertCell(-1); cell.innerHTML = "" + '' + ''; cell.align = 'right'; if (!nofocus) $("#descript" + rowIndex).focus(); showInlineDetails($("#tdfin" + rowIndex)[0], "inlinePropertiesUrl", 2); } // Merk op dat regel_key multifunctioneel is // >0: we zijn een bestaande factuurregel aan het bewerken // -1: het is een nieuwe regel die nog niet in de database is // 0: het is een nieuwe regel die met het kruisje is weggehaald (hidden gemaakt) // < -1: een bestaande factuurregel die met het kruisje is weggehaald (hidden gemaakt) function DeleteOrderLine(row) { FcltMgr.confirm(L("lcl_fin_cancelfac"), function() { var regel_key = $("#regel_key" + row); if (regel_key.val() == -1) regel_key.val(0); // signal delete for new visitor else regel_key.val(-regel_key.val()); // signal delete var tr = $("#trfin" + row); tr.hide(); // Haal de required class overal af als deze erop zit. $("#trfin" + row).find("*").removeClass("required"); // Required zit nu nog niet op deze regel. tr = $("#trfin" + row + "inline"); tr.hide(); // Haal de required class overal af als deze erop zit. $("#trfin" + row + "inline").find("*").removeClass("required"); // Required kan op flexkenmerken zitten. // Verwijder van de totalBTW $("#sum" + row).val(0); $("#sumBTW" + row).val(0); setPrice(null); }); } function SumChanged(obj) { var sum = myParseFloat(obj.value); var defaultamount = 0; if (obj.value == '') obj.value = sum = defaultamount; var valid = obj.value != '' && !isNaN(sum) && isGoodNumber(obj.value + "", false,false,8,2); validateField(obj, valid, L("lcl_fin_invalidSum")) if (!valid) return; obj.value = num2curr(sum); setPrice(obj); } function AddOpdrMaterial() { var rowIndex = parseInt($("#rowIndex").val()); if ($("#descript"+rowIndex).val() || $("#sum"+rowIndex).val()!=0) { AddItem(true); } for (var i=0; i 60) mat_oms = mat_oms.substr(0,58)+".."; $("#descript"+rowIndex).val(mat_oms); $("#sum"+rowIndex).val(mat.aantal * mat.prijs); $("#BTW"+rowIndex).val(mat.btw_key); SumChanged($("#sum"+rowIndex)[0]); AddItem(true); } }