function showOrderWindow($root, options) { options = $.extend({ show_huoneistolkm: true, moveTabListAfter: null, }, options); var validationResult = true; var otherFirstTabValitation = true; var waterFirstTabValitation = true; var orderTabbar; var forms = {}; function getKayttotarkoitus() { var kayttotarkoitus = forms['a1'].getItemValue('kayttotarkoitus'); var subKayttotarkoitus = forms['a1'].getItemValue('kayttotarkoitus[' + kayttotarkoitus + ']'); return getKayttotarkoitusCategory(subKayttotarkoitus, kayttotarkoitus); } function getKayttotarkoitusAsSelected() { var kayttotarkoitus = forms['a1'].getItemValue('kayttotarkoitus'); return kayttotarkoitus; } function getTarkkaKayttotarkoitus() { var kayttotarkoitus = forms['a1'].getItemValue('kayttotarkoitus'); var subKayttotarkoitus = forms['a1'].getItemValue('kayttotarkoitus[' + kayttotarkoitus + ']'); return subKayttotarkoitus; } function getVapaakaytossa() { var kayttotarkoitus = forms['a1'].getItemValue('kayttotarkoitus'); var vapaakaytossa = forms['a1'].isItemChecked('vapaakaytossa[' + kayttotarkoitus + ']'); return vapaakaytossa !== null ? vapaakaytossa : undefined; } function getKaytto() { var kayttotarkoitus = forms['a1'].getItemValue('kayttotarkoitus'); var formdata = forms["a1"].getFormData(); var kaytto = formdata['kaytto[' + kayttotarkoitus + ']']; // var kaytto = forms['a1'].getItemValue('kaytto[' + kayttotarkoitus + ']'); return kaytto !== null ? kaytto : undefined; } function forEachValue(form, colWithLbl, callback) { var i = 1; while (true) { var j = 0; var rowFound = false; while (true) { var itemName = colWithLbl + i + "_" + j; if (!form.isItem(itemName)) { break; } else { var value = form.getItemValue(itemName); callback(value, i, j, itemName); ++j; rowFound = true; } } if (rowFound) ++i; else break; } } // End nested function function getState() { return { tarkkaKayttotarkoitus: getTarkkaKayttotarkoitus(), kayttotarkoitus: getKayttotarkoitus(), kayttotarkoitusAsGiven: forms['a1'].getItemValue('kayttotarkoitus'), vapaakaytossa: getVapaakaytossa(), kaytto: getKaytto(), kunta: forms['a1'].getItemValue('kunta'), liittymatyyppi: forms['a1'].getItemValue('liittymatyyppi') != null ? forms['a1'].getItemValue('liittymatyyppi') : null, huoneistomaara: forms['a1'].getItemValue('huoneistomaara') }; } function affectsState(field) { var usedFields = ['kayttotarkoitus', 'kayttotarkoitus[0]', 'kayttotarkoitus[1]', 'kayttotarkoitus[2]', 'kayttotarkoitus[3]', 'kayttotarkoitus[4]', 'kunta', 'vapaakaytossa[0]', 'vapaakaytossa[1]', 'vapaakaytossa[2]', 'vapaakaytossa[3]', 'vapaakaytossa[4]', 'huoneistomaara', 'liittymatyyppi']; return $.inArray(field, usedFields) >= 0; } var shoppingPage; var a1Dirty = true; var result = new $.Deferred(); $root.find('.loading-icon').show(); orderTabbar = new Tabbar.Tabbar($root.find(".tabbar"), { moveTabListAfter: options.moveTabListAfter, displayTabNames: true, displayTabNumbers: true }); orderTabbar.addTab("a1", "Aloita", 100); orderTabbar.addTab("a1.5", "Kompostointi", 150); orderTabbar.addTab("a2", "Astiat", 150); orderTabbar.addTab("a2.5", "Tilaa astia", 100); orderTabbar.addTab("a3", "Tyhjennystiedot", 200); orderTabbar.addTab("a4", "Laskutustiedot", 100); orderTabbar.addTab("a5", "Kiitos", 100); orderTabbar.tabs("a1.5").hide(); orderTabbar.tabs("a2").hide(); orderTabbar.tabs("a2.5").hide(); orderTabbar.tabs("a2.5").disable(); orderTabbar.tabs("a5").hide(); orderTabbar.tabs("a1.5").disable(); orderTabbar.tabs("a2").disable(); orderTabbar.tabs("a3").disable(); orderTabbar.tabs("a4").disable(); orderTabbar.tabs("a1").setActive(); function nextVisibleTab() { function getNextTab(current) { var tabs = orderTabbar.getTabs(); for(var i = 0; i < tabs.length; ++i) { if(tabs[i] === current) { var nextIndex = i + 1; if(nextIndex < tabs.length) return tabs[nextIndex]; else return null; } } throw new Error(); } var activeTab = orderTabbar.getActiveTab(); var nextTab = getNextTab(activeTab); while(nextTab !== null && !orderTabbar.tabs(nextTab).isVisible()) { nextTab = getNextTab(nextTab); } if(nextTab === null) return; orderTabbar.tabs(nextTab).enable(); orderTabbar.tabs(nextTab).setActive(); } function previousVisibleTab() { function getPreviousTab(current) { var tabs = orderTabbar.getTabs(); for(var i = tabs.length - 1; i >= 0; --i) { if(tabs[i] === current) { var nextIndex = i - 1; if(nextIndex >= 0) return tabs[nextIndex]; else return null; } } throw new Error(); } var activeTab = orderTabbar.getActiveTab(); var nextTab = getPreviousTab(activeTab); while(nextTab !== null && !orderTabbar.tabs(nextTab).isVisible()) { nextTab = getPreviousTab(nextTab); } if(nextTab === null) return; orderTabbar.tabs(nextTab).setActive(); } // handler(null); $.ajax(baseurl + "/formwindow.do?key=allinone_init", { type: "GET", contentType: "application/json; charset=utf-8" }) .done(loadOrderWindow) .fail(function(e) { }); function initializeTabs(formData) { (function reorderLiittymatyyppi(formJson) { function findObject(obj, name) { for(var key in obj) { if(key === 'name' && obj[key] === name) { return obj; } else if(obj[key] instanceof Array || typeof obj[key] === 'object') { var result = findObject(obj[key], name); if(result !== null) { return result; } } } return null; } var fieldset = findObject(formJson, 'liittymatyyppifieldset'); var order = [3, 5, 1, 2, 4]; fieldset.list.sort(function(a, b) { var a_i = order.indexOf(a.value); var b_i = order.indexOf(b.value); if(a_i < b_i) { return -1; } else if(a_i > b_i) { return 1; } else { return 0; } }); })(formData.one); forms["a1"] = orderTabbar.tabs("a1").attachForm(formData.one); application.applyGlobalDhtmlxEventHandlers(forms["a1"]); forms['a1'].setItemValue('liittymatyyppi', 3); // Huom! a2 ei ole dhtmlx-form! forms["a2"].form on. var a2Buttons = formData.twoButtons; forms["a2"] = createOrderForm(orderTabbar.tabs("a2"), formData.two.concat(a2Buttons), {}, { company: options.company }); // Tilausvälilehti shoppingPage = createShoppingPage($root.find("div.a2_5"), forms["a1"].getItemValue("kunta"), false); shoppingCart.removeOrderButton(); $('
').appendTo($root.find('div.a2_5')); forms["a2.5"] = new dhtmlXForm("order_window_buttons", formData.twopointfive); application.applyGlobalDhtmlxEventHandlers(forms["a2.5"]); forms["a2.5"].attachEvent("onButtonClick", function(name, command) { if (command === "next") { orderTabbar.tabs("a3").enable(); orderTabbar.tabs("a3").setActive(); } else if (command === "previous") { orderTabbar.tabs("a2").setActive(); } }); forms["a3"] = orderTabbar.tabs("a3").attachForm(formData.three); application.applyGlobalDhtmlxEventHandlers(forms["a3"]); forms["a4"] = orderTabbar.tabs("a4").attachForm(formData.four); application.applyGlobalDhtmlxEventHandlers(forms["a4"]); forms["a5"] = orderTabbar.tabs("a5").attachForm(formData.reply); application.applyGlobalDhtmlxEventHandlers(forms["a5"]); // Kompostointi $.get(baseurl + "/formwindow.do?key=compost_notice&order_window=1", function(data) { forms["a1.5"] = orderTabbar.tabs("a1.5").attachForm(data.compost); application.applyGlobalDhtmlxEventHandlers(forms['a1.5']); forms['a1.5'].attachEvent('onChange', function(name, value) { if(name.indexOf('structure[') === 0 || name.indexOf('recycled[') === 0) { var recycledOptions = 0, recycled = 0, structure = {}; forms['a1.5'].forEachItem(function(name) { if(name.indexOf('recycled[') === 0 && name.indexOf('recycled[other]') !== 0) { ++recycledOptions; if(forms['a1.5'].isItemChecked(name)) { ++recycled; } } else if(name.indexOf('structure[') === 0) { var value = forms['a1.5'].getCheckedValue(name); if(typeof value !== 'undefined') { structure[value] = true; } } }); forms['a2'].setCompostAllRecycled(recycledOptions === recycled); forms['a2'].setCompostStructure(structure); } else if(name === 'wholeYear') { forms['a2'].setCompostWholeYear(!!forms['a1.5'].getCheckedValue('wholeYear')); } else if(name.indexOf('compostedMaterial') === 0) { var compostedMaterials = []; for(var i = 0; i < 4; ++i) { var checkboxName = 'compostedMaterial[' + i + ']'; if(forms['a1.5'].isItem(checkboxName)) { if(forms['a1.5'].isItemChecked(checkboxName)) { compostedMaterials.push(i); } } } forms['a2'].setCompostCompostedMaterial(compostedMaterials); } else if (name === 'wasteFood') { forms['a2'].setCompostWasteFood(forms['a1.5'].getCheckedValue('wasteFood') == "true"); } }); forms["a1.5"].attachEvent("onButtonClick", function(name, command) { if (name === "next") { evType = 'button'; forms["a1.5"].validate(); } else if (name === "previous") { previousVisibleTab(); } }); forms["a1.5"].attachEvent("onAfterValidate", function(status) { validationResult = status; if (status) { if (evType === 'button') { nextVisibleTab(); } } focusOnFirstError(forms["a1.5"]); showGlobalValidationError(status); }); }); } function attachEventsA1(formData) { (function lkmEvents() { function checkLkm() { var rules = application.getLkmRules(); var state = getState(); var matches = Common.checkRules(state, rules); if(matches.length === 0) { forms["a1"].setItemValue("lkm", 1); forms["a1"].hideItem("lkm"); } else { forms["a1"].showItem("lkm"); } } checkLkm(); forms['a1'].attachEvent('onChange', function(name) { if(affectsState(name)) { checkLkm(); } }) })(); (function initializeLiittymatyyppi() { var kayttotarkoitus = getKayttotarkoitus(); var kayttotarkoitusAsGiven = forms['a1'].getItemValue('kayttotarkoitus'); var vapaakaytossa = getVapaakaytossa(); var kunta = forms['a1'].getItemValue('kunta'); var huoneistomaara = forms['a1'].getItemValue('huoneistomaara'); var kaytto = getKaytto(); OrderWindowLogic.liittymatyyppiEvents(forms['a1'], kayttotarkoitus, kayttotarkoitusAsGiven, vapaakaytossa, kunta, huoneistomaara, kaytto, 'join-waste-collection'); var element = $root.find('.tabbar>.a3'); OrderWindowLogic.akpPriceEvents(forms['a1'], $('
').prependTo(element)); OrderWindowLogic.basicPriceEvents(forms['a1'], $('
').prependTo($root.find('.tabbar>.a3'))); })(); (function kayttotarkoitusEvents() { function checkKayttotarkoitus() { var rules = application.getKayttotarkoitusRules(); var state = getState(); var result = Common.checkRules(state, rules); if(result.length > 0 ) { var value = forms["a1"].getItemValue("kayttotarkoitus"); var options = forms["a1"].getOptions('kayttotarkoitus'); var resetValue = false; // Checking starts from 1 because 0 is "Choose" selection var i = 1; for(i = 1; i < options.length; i++ ) { var enabled = false; var j = 0; for(j = 0; j < result.length; j++) { if (options[i].value == result[j].value) { $(options[i]).show(); enabled = true; break; } } if (!enabled) { $(options[i]).hide(); if (!resetValue && value == options[i].value) { resetValue = true; } } } // If previous selection was hidden change selection to "Choose" selection if (resetValue) { forms["a1"].setItemValue("kayttotarkoitus", ""); forms["a1"].callEvent('onChange', ['kayttotarkoitus', '']); } } else { // Hide all (except "Choose" selection) var i = 1; for (i = 1; i < i < options.length; i++) { $(options[i]).hide(); } forms["a1"].callEvent('onChange', ['kayttotarkoitus', '']); } } checkKayttotarkoitus(); forms['a1'].attachEvent('onChange', function(name, value) { if(name.indexOf('kunta') === 0) { checkKayttotarkoitus(); } }); })(); (function huoneistomaaraEvents() { function checkHuoneistomaara() { var rules = application.getHuoneistomaaraRules(); var state = getState(); var result = Common.checkRules(state, rules); var $input = $(forms["a1"].getInput("huoneistomaara")); var $inputParent = $input.closest('.dhxform_item_label_left'); if(result.length > 0 && result[0].value && options.show_huoneistolkm !== false) { if(result[0].value !== 'optional') { forms["a1"].setValidation("huoneistomaara", "NotEmpty,ValidInteger"); $inputParent.addClass('required'); } else { forms["a1"].setValidation("huoneistomaara", "ValidInteger"); $inputParent.removeClass('required'); } forms["a1"].showItem("huoneistomaara"); if(typeof result[0].default !== 'undefined') { forms['a1'].setItemValue('huoneistomaara', result[0].default); forms["a1"].callEvent('onChange', ["huoneistomaara", result[0].default]); } if(typeof result[0].max !== 'undefined') { $input.attr('max', result[0].max); } else { $input.attr('max', 999); } } else { forms["a1"].setValidation("huoneistomaara", "ValidInteger"); $inputParent.removeClass('required'); forms["a1"].hideItem("huoneistomaara"); var apartmentCount = ""; if(result.length > 0 && typeof result[0].default !== 'undefined') { apartmentCount = result[0].default; } forms["a1"].setItemValue("huoneistomaara", apartmentCount); forms["a1"].callEvent('onChange', ["huoneistomaara", apartmentCount]); } if(state.kayttotarkoitus == '1') { forms['a1'].setItemLabel('huoneistomaara', 'Huoneistolukumäärä'); } else { forms['a1'].setItemLabel('huoneistomaara', 'Asuinhuoneistojen lukumäärä'); } } checkHuoneistomaara(); forms['a1'].attachEvent('onChange', function(name, value) { if(name.indexOf('kayttotarkoitus') === 0) { checkHuoneistomaara(); } else if (name.indexOf('vapaakaytossa') === 0) { checkHuoneistomaara(); } }); })(); (function usageTimeEvents() { function checkUsageTime() { var rules = application.getUsageTimeRules(); var state = getState(); var result = Common.checkRules(state, rules); if (state.kayttotarkoitusAsGiven == null || state.kayttotarkoitusAsGiven === "") { return; } // ASRAP-5141: Turha yrittää käsitellä radiobuttoneita dhtmlx-kirjaston ohjeistamalla tavalla. var blockname = "kayttoblock[" + state.kayttotarkoitusAsGiven + "]"; var itemname = "kaytto[" + state.kayttotarkoitusAsGiven + "]"; if (result.length > 0 && result[0].value ) { forms["a1"].showItem(blockname); var formdata = forms["a1"].getFormData(); var radioValue = formdata[itemname]; if (radioValue == null || radioValue === "") { formdata[itemname] = 1; forms["a1"].callEvent('onChange', [itemname, 1]); } } else { var formdata = forms["a1"].getFormData(); // Hide all var i = 0; for (i = 0; i < 5; i++) { var blockname = "kayttoblock[" + i + "]"; var itemname = "kaytto[" + i + "]"; forms["a1"].hideItem("kayttoblock[" + i + "]"); formdata[itemname] = ""; } forms["a1"].callEvent('onChange', ['kaytto[' + state.kayttotarkoitusAsGiven + ']', '']); } } checkUsageTime(); forms['a1'].attachEvent('onChange', function(name, value) { if(name.indexOf('kaytto[') !== 0 || name == "liittymatyyppi") { checkUsageTime(); } }); })(); (function asukasmaaraEvents() { function checkAsukasmaara() { var rules = application.getAsukasmaaraRules(); var kayttotarkoitus = getKayttotarkoitus(); var subkayttotarkoitus = getTarkkaKayttotarkoitus(); var liittymatyyppi = forms["a1"].getItemValue("liittymatyyppi") || null; var state = { kayttotarkoitus: kayttotarkoitus, subkayttotarkoitus: subkayttotarkoitus, liittymatyyppi: liittymatyyppi, kunta: forms['a1'].getItemValue('kunta'), huoneistomaara: forms['a1'].getItemValue('huoneistomaara') }; var result = Common.checkRules(state, rules); if(result.length > 0 && $.inArray(result[0].value, ['required', 'visible']) !== -1) { forms["a1"].showItem("asukasmaara"); } else { forms["a1"].hideItem("asukasmaara"); forms["a1"].setItemValue("asukasmaara", ""); forms["a1"].callEvent('onChange', ['asukasmaara', '']); } if(result.length > 0 && typeof result[0].default !== 'undefined') { forms['a1'].setItemValue('asukasmaara', result[0].default); } if(forms["a1"].getItemType('asukasmaara') === 'select') { var $asukasmaara = $(forms['a1'].getSelect('asukasmaara')); } else { var $asukasmaara = $(forms['a1'].getInput('asukasmaara')); } if(result.length > 0 && $.inArray(result[0].value, ['required']) !== -1) { forms["a1"].setValidation("asukasmaara", "ValidInteger,NotEmpty"); $asukasmaara.closest('.dhxform_item_label_top, .dhxform_item_label_left').addClass('required'); } else { forms["a1"].setValidation("asukasmaara", "ValidInteger"); $asukasmaara.closest('.dhxform_item_label_top, .dhxform_item_label_left').removeClass('required'); } } forms['a1'].attachEvent('onChange', function(name, value) { if(name.indexOf("kayttotarkoitus") === 0) { checkAsukasmaara(); } else if(name === 'liittymatyyppi') { checkAsukasmaara(); } else if(name === 'kunta') { checkAsukasmaara(); } else if(name === "asukasmaara") { forms["a2"].setAsukasmaara(value); } else if(name === 'huoneistomaara') { checkAsukasmaara(); } }); checkAsukasmaara(); })(); (function biojatteetEvents() { function checkBiojatteet() { var value = forms['a1'].getItemValue('biojatteet'); forms["a2"].setBiojatteet(value); if(value == 1) { orderTabbar.tabs("a1.5").show(); } else { orderTabbar.tabs("a1.5").hide(); } } forms['a1'].attachEvent('onChange', function(name, value) { if(name === "biojatteet") { checkBiojatteet(); } }); checkBiojatteet(); })(); (function pysyvarakennustunnusEvents() { function checkpysyvarakennustunnus() { var rules = application.getPysyvaRakennustunnusRules(); var state = getState(); var result = Common.checkRules(state, rules); if(result.length > 0 && result[0].value ) { forms["a1"].showItem("pysyvarakennustunnus"); } else { forms["a1"].hideItem("pysyvarakennustunnus"); forms["a1"].setItemValue("pysyvarakennustunnus", ""); forms["a1"].callEvent('onChange', ['pysyvarakennustunnus', '']); } } forms['a1'].attachEvent('onChange', function(name, value) { if(name.indexOf("kayttotarkoitus") === 0) { checkpysyvarakennustunnus(); } }); checkpysyvarakennustunnus(); })(); (function wasteWaterEvents() { forms['a1'].attachEvent('onChange', function(name, value, checked) { if(name === 'property_has_wells') { if(value == 1 && checked) { orderTabbar.tabs('waste-water').show(); } // Value two might need configuration else if (value == 2 && checked) { orderTabbar.tabs('waste-water').show(); } else { orderTabbar.tabs('waste-water').hide(); } } }); })(); // Updates wheter to show two intervals or not (function displayTwoIntervalEvents() { forms['a1'].attachEvent('onChange', function(name, value) { if(name.indexOf("kayttotarkoitus") === 0) { var note = null; var state = getState(); var rules = application.getDisplayTwoIntervalsRules(); var result = Common.checkRules(state, rules); var showTwoIntervals = result[0].value; note = note || result[0].note; var form = forms['a2'].form; forEachValue(form, 'vali11_lbl', function(v, i, j, name) { if (showTwoIntervals) { form.showItem('vali11_lbl' + i + '_' + j); form.showItem('vali12_lbl' + i + '_' + j); form.showItem('vali21_lbl' + i + '_' + j); form.showItem('vali22_lbl' + i + '_' + j); form.showItem('two_intervals_lbl' + i + '_' + j); form.showItem('vali22_lbl' + i + '_' + j); form.showItem('tyhjennystiheys2_lbl' + i + '_' + j); $(form.getSelect('tyhjennystiheys1_lbl' + i + '_' + j)).closest('.week-selection') .addClass('col-xs-6') .removeClass('col-xs-12') .removeClass('no-week-selections') } else { form.hideItem('vali11_lbl' + i + '_' + j); form.hideItem('vali12_lbl' + i + '_' + j); form.hideItem('vali21_lbl' + i + '_' + j); form.hideItem('vali22_lbl' + i + '_' + j); form.hideItem('two_intervals_lbl' + i + '_' + j); form.hideItem('vali22_lbl' + i + '_' + j); form.hideItem('tyhjennystiheys2_lbl' + i + '_' + j); $(form.getSelect('tyhjennystiheys1_lbl' + i + '_' + j)).closest('.week-selection') .removeClass('col-xs-6') .addClass('col-xs-12') .addClass('no-week-selections') } }); form.setItemLabel('emptying_info_lbl1_0', note ? note : ''); } }); })(); defaultWindowCloseBehaviour($root, forms['a1'], result); forms["a1"].attachEvent("onButtonClick", function(name, command) { if(name !== 'cancel') { target = "a2"; var needUpdate = true; forms["a2"].updateLaji(needUpdate); evType = "button"; forms["a1"].validate(); } }); forms["a1"].attachEvent("onBeforeValidate", function() { var result = true; var $liittymatyyppiLabel = $('.liittymatyyppifieldset .dhxform_item_label_right, .liittymatyyppifieldset .dhxform_item_label_left'); if(!forms["a1"].getCheckedValue('liittymatyyppi')) { $liittymatyyppiLabel.addClass('validate_error'); result = false; } else { $liittymatyyppiLabel.removeClass('validate_error'); } if(!forms['a1'].isItemHidden('biojatteet_fieldset')) { if(!forms['a1'].getCheckedValue('biojatteet') && !forms['a1'].isItemChecked('biojatteet', 0)) { $('.biojatteet .dhxform_item_label_right').addClass('validate_error'); result = false; } else { $('.biojatteet .dhxform_item_label_right').removeClass('validate_error'); } } otherFirstTabValitation = result; focusOnFirstError(forms["a1"]); showGlobalValidationError(otherFirstTabValitation && waterFirstTabValitation); return result; }); forms["a1"].attachEvent("onAfterValidate", function(status) { validationResult = status; if (status) { if (evType === "button") nextVisibleTab(); } focusOnFirstError(forms["a1"]); showGlobalValidationError(status); }); (function liittymatyyppiEvents() { function liittymatyyppiChanged(update) { var value = forms["a1"].getItemValue("liittymatyyppi"); forms["a2"].setLiittymatyyppi(value, update); if (value === 1) { orderTabbar.tabs("a2").hide(); hideBiojatteetOption(2); } else if(value === 5) { orderTabbar.tabs('a2').hide(); } else { orderTabbar.tabs("a2").show(); forms["a1"].showItem("biojatteet", 2); } } forms['a1'].attachEvent('onChange', function(name, value, checked) { if (name === "liittymatyyppi") { liittymatyyppiChanged(); } }); liittymatyyppiChanged(); })(); (function updateOnlyLeisureUseForServiceRows() { forms['a1'].attachEvent('onChange', function(name, value, checked) { if(name === 'kayttotarkoitus') { var vapaakaytossaName = 'vapaakaytossa[' + value + ']'; if(forms['a1'].isItem(vapaakaytossaName)) { var isChecked = forms['a1'].isItemChecked(vapaakaytossaName); forms['a2'].setOnlyLeisureUse(isChecked); } else { forms['a2'].setOnlyLeisureUse(false); } } else if(name.indexOf('vapaakaytossa[') === 0) { forms['a2'].setOnlyLeisureUse(checked); } }); })(); (function updateLabelsBasedOnPropertyUsage() { var contactLabels = [ "Yhteyshenkilö", "Yhteyshenkilö", "Yhteyshenkilö", "Yhteyshenkilö", "Yhteyshenkilö" ]; var nameLabels = [ "Nimi", "Nimi", "Nimi", "Nimi", "Nimi", ]; forms['a1'].attachEvent('onChange', function(name, value) { if(name === 'kayttotarkoitus') { forms['a3'].setItemLabel('contact_1', contactLabels[+value]); forms['a4'].setItemLabel('contact_1', contactLabels[+value]); forms['a3'].setItemLabel('nimi_1', nameLabels[+value]); forms['a4'].setItemLabel('nimi_1', nameLabels[+value]); } }); })(); forms["a1"].attachEvent('onChange', function onKayttoChange(name, value) { if(name.indexOf('kaytto[') === 0) { forms['a2'].setKaytto(value); } else if (name.indexOf('kayttotarkoitus') === 0) { var formdata = forms["a1"].getFormData(); var radioValue = formdata['kaytto[' + value + ']']; // var radioValue = forms['a1'].getItemValue('kaytto[' + value + ']'); forms['a2'].setKaytto(radioValue); } }); forms["a1"].attachEvent("onChange", function(name, value, checked) { a1Dirty = true; if (name == "lkm") { forms["a2"].setRowCount(parseInt(value)); attachEventsA2(); } else if (name === "kunta") { forms["a2"].setKunta(value); } else if(name.indexOf("kayttotarkoitus") === 0) { if(name === 'kayttotarkoitus') { forms['a2'].setKayttotarkoitusAsGiven(value, false); } var kayttotarkoitus = getKayttotarkoitus(); forms["a2"].setKayttotarkoitus(kayttotarkoitus, false); var subKayttotarkoitus = getTarkkaKayttotarkoitus(); forms["a2"].setSubkayttotarkoitus(subKayttotarkoitus, true, kayttotarkoitus); if(kayttotarkoitus == '0' || kayttotarkoitus == '1') { forms['a3'].hideItem('fieldset2'); } else { forms['a3'].showItem('fieldset2'); } (function splitNameIfNeeded() { var kayttotarkoitus = getKayttotarkoitusAsSelected(); function singleName(forms) { for(var i = 0; i < forms.length; ++i) { var form = forms[i]; for(var j = 1; j <= 2; ++j) { if(form.isItem('nimi_' + j)) { form.showItem("nimi_" + j); form.setValidation("nimi_" + j, "NotEmpty"); form.hideItem("etunimi_" + j); form.setValidation("etunimi_" + j, ""); form.hideItem("sukunimi_" + j); form.setValidation("sukunimi_" + j, ""); } } } } function separateNames(forms) { for(var i = 0; i < forms.length; ++i) { var form = forms[i]; for(var j = 1; j <= 2; ++j) { if(form.isItem('nimi_' + j)) { form.hideItem("nimi_" + j); form.setValidation("nimi_" + j, ""); form.showItem("etunimi_" + j); form.setValidation("etunimi_" + j, "NotEmpty"); form.showItem("sukunimi_" + j); form.setValidation("sukunimi_" + j, "NotEmpty"); } } } } if($.inArray(parseInt(kayttotarkoitus), [0, 1]) != -1 ) { separateNames([forms["a3"], forms["a4"]]); } else { singleName([forms["a3"], forms["a4"]]); } })(); if(kayttotarkoitus == "0" && subKayttotarkoitus === "041") { orderTabbar.tabs("a1.5").hide(); hideBiojatteetOption(1); } else { forms["a1"].showItem("biojatteet", 1); } forms["a2"].updateLaji(); } else if(name === "huoneistomaara") { forms["a2"].setHuoneistomaara(value); } return true; }); (function bioVisibilityLogic() { var originalTexts = []; for(var i = 0; i <= 2; ++i) { originalTexts.push(forms['a1'].getItemLabel('biojatteet', i)); } function getOptionLabel(optionValue, option) { if(!option.texts) return originalTexts[optionValue]; var optionTextsIndex = option.value.indexOf(optionValue); if(option.texts[optionTextsIndex] == null) return originalTexts[optionValue]; else return option.texts[optionTextsIndex]; } function checkDisplayBio() { var kayttotarkoitus = getKayttotarkoitus(); var displayBioFor = [0, 1]; var rules = application.getBioOptionsRules(); var state = getState(); var options = Common.checkRules(state, rules); var displayFieldset = $.inArray(+kayttotarkoitus, displayBioFor) !== -1 && options.length > 0 && options[0].value.length > 0; if(!displayFieldset) { var value = 0; while(forms['a1'].isItem('biojatteet', value)) { if(forms['a1'].isItemChecked('biojatteet', value)) { forms["a1"].uncheckItem('biojatteet', value); forms['a1'].callEvent('onChange', ['biojatteet', value, false]); } ++value; } forms["a1"].hideItem("biojatteet_fieldset"); orderTabbar.tabs('a1.5').hide(); } else { forms["a1"].showItem("biojatteet_fieldset"); var option = options[0]; for(var i = 0; i <= 2; ++i) { var isVisible = option.value.indexOf(i) >= 0; if(isVisible) { forms['a1'].showItem('biojatteet', i); forms['a1'].setItemLabel('biojatteet', i, getOptionLabel(i, option)); } else { if(forms['a1'].isItemChecked('biojatteet', i)) { forms['a1'].uncheckItem('biojatteet', i); forms['a1'].callEvent('onChange', ['biojatteet', value, false]); } forms['a1'].hideItem('biojatteet', i); } } } } checkDisplayBio(); forms['a1'].addItem(null, { type: 'hidden', name: 'biojatteet_selected_label' }); // Initialize value for biojatteet_selected_label var label = forms['a1'].getItemLabel('biojatteet', forms['a1'].getItemValue('biojatteet')); forms['a1'].setItemValue('biojatteet_selected_label', label); forms['a1'].attachEvent('onChange', function(name, value, checked) { if(affectsState(name)) { checkDisplayBio(); } else if(name === 'biojatteet') { if(checked) { var label = forms['a1'].getItemLabel(name, value); forms['a1'].setItemValue('biojatteet_selected_label', label); } else { forms['a1'].setItemValue('biojatteet_selected_label', null); } } }); })(); forms["a1"].attachEvent("onOptionsLoaded", function(name) { if(name === "kunta") { var value = forms["a1"].getItemValue(name); forms["a2"].setKunta(value); } }); } // End of attachEventsA1() function attachEventsA2() { forms["a2"].form.attachEvent("onAfterValidate", function(status) { validationResult = status; if (status) { orderTabbar.tabs("a3").enable(); if (evType == "button") orderTabbar.tabs("a3").setActive(); } focusOnFirstError(forms["a2"].form); showGlobalValidationError(status); }); forms["a2"].form.attachEvent("onButtonClick", function(name, command) { if(name === 'next') { evType = 'button'; forms["a2"].form.validate(); } else if(name === 'previous') { previousVisibleTab(); } }); } function attachEventsA3(form) { function samatKuinYlla() { form.forEachItem(function(name) { if(name.indexOf("_1") !== -1) { var nameFront = name.substr(0, name.length - 2); var value = form.getItemValue(name); form.setItemValue(nameFront + "_2", value); } }); } form.attachEvent("onChange", function(name, value) { if(name === 'samat_kuin_ylla' && form.isItemChecked('samat_kuin_ylla')) { samatKuinYlla(); } else if(name.indexOf("_2") !== -1 || name.indexOf("_1") !== -1) { form.uncheckItem('samat_kuin_ylla'); } }); form.attachEvent('onBeforeValidate', function() { if(form.isItemHidden('fieldset2')) { samatKuinYlla(); } }); (function addInfoRules() { function check() { var rules = showOrderWindow._addinfoRules; var state = getState(); var result = Common.checkRules(state, rules); var visible = !result[0] || result[0].visible; var required = !!result[0] && result[0].required; var label = (!!result[0] && result[0].label) || "Lisätietoa, esim astian sijainnista"; forms['a3'].setItemLabel('addinfo_3', label); if(visible) { forms['a3'].showItem('addinfo_3'); } else { forms['a3'].hideItem('addinfo_3'); forms['a3'].setItemValue('addinfo_3', ''); } if(required) { forms['a3'].setValidation('addinfo_3', 'NotEmpty'); } else { forms['a3'].clearValidation('addinfo_3'); forms['a3'].resetValidateCss('addinfo_3'); } $(forms['a3'].getInput('addinfo_3')).parent().parent().toggleClass('required', !!required); } check(); forms['a1'].attachEvent('onChange', function(name) { if(affectsState(name)) { check(); } }); })(); } function attachEventsA4(form, formA3) { form.attachEvent("onChange", function(name, value) { if(name === 'samat_kuin_ilmoittajan' && form.isItemChecked('samat_kuin_ilmoittajan')) { formA3.forEachItem(function(name) { var postfix = "_1"; if(name.indexOf(postfix) !== -1) { var nameFront = name.substr(0, name.length -2); var value = formA3.getItemValue(name); form.setItemValue(nameFront + "_1", value); } }); } else if(name.indexOf("_1") !== -1) { form.uncheckItem('samat_kuin_ilmoittajan'); } }); formA3.attachEvent("onChange", function(name, value) { if(name.indexOf("_2") !== -1) { form.uncheckItem('samat_kuin_ilmoittajan'); } }); form.attachEvent('onChange', function(name, value, checked) { if(name === 'confirm_correctness') { if(checked) { form.enableItem('next'); } else { form.disableItem('next'); } } }); } function loadOrderWindow(json) { var formData; if (typeof json === 'string') formData = JSON.parse(json); else formData = json; initializeTabs(formData); attachEventsA1(formData); attachEventsA2(); attachEventsA3(forms["a3"]); attachEventsA4(forms["a4"], forms["a3"]); (function setupStartDate() { if(!forms['a1'].isItem('start_date')) return; var calendar = forms["a1"].getCalendar("start_date"); var earliestDate = new Date(); earliestDate.setDate(earliestDate.getDate() + 3); var earliestAbsoluteDate = new Date('2000-01-01'); earliestDate = new Date(Math.max(earliestDate, earliestAbsoluteDate)); calendar.setSensitiveRange(earliestDate, null); calendar.showMonth(earliestDate); var disabledWeekDays = [6, 7]; calendar.disableDays('week', disabledWeekDays); })(); if(!options.show_huoneistolkm) { forms["a1"].hideItem("huoneistomaara"); } forms["a3"].attachEvent("onButtonClick", function(name, command) { if (name === "next") { evType = "button"; target = "a4"; forms["a3"].validate(); } else if (name === "previous") { previousVisibleTab(); } }); forms["a3"].attachEvent("onAfterValidate", function(status) { validationResult = status; if (status) { orderTabbar.tabs("a4").enable(); if (evType === 'button') orderTabbar.tabs("a4").setActive(); } focusOnFirstError(forms["a3"]); showGlobalValidationError(status); }) var firstValidate; forms["a4"].attachEvent("onButtonClick", function(name, command) { if (name === "next") { firstValidate = true; forms["a4"].validate(); } else { orderTabbar.tabs("a3").setActive(); } }); function sendA15() { function next() { if(forms['a1'].getItemValue('liittymatyyppi') === 5) { sendA3A4(); } else { sendA2(); } } if(forms["a1"].isItemChecked("biojatteet", 1)) { var data = collectFormData([forms["a1.5"]]); $.ajax(baseurl + "/savedata.do?dtype=newcustomer", { data: data, type: "POST" }) .done(next); } else { next(); } } function sendA2() { if (forms["a1"].getItemValue("liittymatyyppi") !== 1) { forms["a2"].form.send(baseurl + "/savedata.do?dtype=newcustomer", function(loader, response) { if (forms["a2"].wantsToBuyBin()) { $.post(baseurl + "/savedata.do?dtype=newcustomer", shoppingCart.getOrderRequestData(), function() { sendA3A4(); }, "text"); } else { sendA3A4(); } }); } else { sendA3A4(); } } // End function function sendA3A4() { forms["a3"].send(baseurl + "/savedata.do?dtype=newcustomer", function(loader, response) { forms["a4"].send(baseurl + "/savedata.do?dtype=newcustomer", function(loader, response) { orderTabbar.tabs("a5").clear(); forms["a5"] = orderTabbar.tabs("a5").attachForm(JSON.parse(response)); forms["a5"].attachEvent("onButtonClick", function() { result.resolve(); }); orderTabbar.tabs("a1").disable(); orderTabbar.tabs("a1.5").disable(); orderTabbar.tabs("a2").disable(); orderTabbar.tabs("a2.5").disable(); orderTabbar.tabs("a3").disable(); orderTabbar.tabs("a4").disable(); orderTabbar.tabs("a5").show(); orderTabbar.tabs("a5").setActive(); }); }); } // End function forms["a4"].attachEvent("onAfterValidate", function(status) { if (status && firstValidate && forms["a2"]) { $(".send-button div.dhxform_btn_txt").css('background', 'url(images/ajax-loader.gif) center center no-repeat'); forms["a4"].lock(); firstValidate = false; forms["a1"].send(baseurl + "/savedata.do?dtype=newcustomer", function(loader, response) { { sendA15(); } }); } focusOnFirstError(forms["a4"]); var specialErrorMessage = checkIfSpecialValidationError(forms["a4"]); if (specialErrorMessage != null && specialErrorMessage != "") { showGlobalValidationError(status, specialErrorMessage); } else { showGlobalValidationError(status); } }); forms["a5"].attachEvent("onButtonClick", function(name, command) { formwin.close(); }); orderTabbar.attachEvent("onSelect", function(id, last_id) { $(window).scrollTop(0); evType = "select"; target = id; var index = parseInt(id.substr(1)); var last_index = parseInt(last_id.substr(1)); if (index === 2 && last_index < index) { if(a1Dirty) { forms["a2"].updateOrderRows(); a1Dirty = false; } } else if(id === "a2.5") { shoppingPage.resizeParent("force-resize"); } if(last_id === 'a2') { forms["a1"].setItemValue("lkm", forms["a2"].getRowCount()); } if(id === "a4") { var kayttotarkoitus = getKayttotarkoitus(); var displayElectronicBillFor = [2,3,4]; var index = displayElectronicBillFor.indexOf(kayttotarkoitus); if (index == -1) { forms["a4"].hideItem("verkkolaskutiedot"); forms["a4"].setItemValue("verkkolaskuosoite_1", ""); forms["a4"].setItemValue("ovt_1", ""); forms["a4"].setItemValue("operaattori_1", ""); forms["a4"].setItemValue("ytunnus_1", ""); forms["a4"].setItemValue("viite_1", ""); forms["a4"].clearValidation("ytunnus_1"); $('[name="ytunnus_1"]').closest('.dhxform_item_label_left').removeClass('required'); } else { forms["a4"].showItem("verkkolaskutiedot"); if (true) { var displayYtunnusFor = [2,3,4]; var index2 = displayYtunnusFor.indexOf(kayttotarkoitus); if (index2 == -1) { forms["a4"].hideItem("ytunnus_1"); forms["a4"].setValidation("ytunnus_1", "checkBusinessId"); $('[name="ytunnus_1"]').closest('.dhxform_item_label_left').removeClass('required'); } else { forms["a4"].showItem("ytunnus_1"); // pakotettu y-tunnus vaatimus pois päältä (, koska todennäköisesti yksityishenkilöillä ei ole y-tunnuksia) // (*-merkkin poistaminen vaatii required-luokan poistamista ) if (kayttotarkoitus == 0 || kayttotarkoitus == 1 ) { forms["a4"].setValidation("ytunnus_1", "checkBusinessId"); $('[name="ytunnus_1"]').closest('.dhxform_item_label_left').removeClass('required'); } else { forms["a4"].setValidation("ytunnus_1", "NotEmpty,checkBusinessId"); $('[name="ytunnus_1"]').closest('.dhxform_item_label_left').addClass('required'); } } } } } if (index > last_index) { if(typeof forms[last_id].form !== 'undefined') forms[last_id].form.validate(); else forms[last_id].validate(); return validationResult; } else { return true; } }); $root.find('.loading-icon').hide(); if(showOrderWindow._onPostCreation) { showOrderWindow._onPostCreation(forms); } } function hideBiojatteetOption(value) { if(forms["a1"].isItemChecked("biojatteet", value)) forms["a1"].checkItem("biojatteet", 0); forms["a1"].hideItem("biojatteet", value); } return result; } var OrderWindowLogic = (function() { function getKayttotarkoitus(form) { var kayttotarkoitus = form.getItemValue('kayttotarkoitus'); var subKayttotarkoitus = form.getItemValue('kayttotarkoitus[' + kayttotarkoitus + ']'); return getKayttotarkoitusCategory(subKayttotarkoitus, kayttotarkoitus); } function getVapaakaytossa(form) { var kayttotarkoitus = form.getItemValue('kayttotarkoitus'); var vapaakaytossa = form.isItemChecked('vapaakaytossa[' + kayttotarkoitus + ']'); return vapaakaytossa; } function getKaytto(form) { var kayttotarkoitus = form.getItemValue('kayttotarkoitus'); var formdata = form.getFormData(); var kaytto = formdata['kaytto[' + kayttotarkoitus + ']']; // var kaytto = form.getItemValue('kaytto[' + kayttotarkoitus + ']'); return kaytto; } function getTarkkaKayttotarkoitus(form) { var kayttotarkoitus = form.getItemValue('kayttotarkoitus'); var subKayttotarkoitus = form.getItemValue('kayttotarkoitus[' + kayttotarkoitus + ']'); return subKayttotarkoitus; } return { liittymatyyppiEvents: function(form, initialKayttotarkoitus, initialKayttotarkoitusAsGiven, initialVapaakaytossa, initialKunta, initialHuoneistomaara, initialKaytto, windowType, customerData, services) { function checkLiittymatyyppi(kayttotarkoitus, kayttotarkoitusAsGiven, vapaakaytossa, kunta, huoneistomaara, kaytto) { var rules = application.getLiittymatyyppiRules(); var state = { kayttotarkoitus: kayttotarkoitus, kayttotarkoitusAsGiven: kayttotarkoitusAsGiven, vapaakaytossa: vapaakaytossa, kunta: kunta, huoneistomaara: huoneistomaara, windowType: windowType, customerData: customerData, services: services, kaytto: kaytto }; var visible = Common.checkRules(state, rules); for(var i = 1; i <= 5; ++i) { if(form.isItem('liittymatyyppi', i)) { var itemVisible = false; var extraText = undefined; for(var j = 0; j < visible.length; ++j) { if(visible[j].value == i) { itemVisible = true; extraText = visible[j].extraText; break; } } if(itemVisible) { form.showItem('liittymatyyppi', i); } else { form.hideItem('liittymatyyppi', i); if(form.isItemChecked('liittymatyyppi', i)) { form.uncheckItem('liittymatyyppi', i); } } if(typeof extraText !== 'undefined') { var extraTextName = 'liittymatyyppi[' + i + '].label'; if(extraText) { form.showItem(extraTextName); form.setItemLabel(extraTextName, extraText); } else { form.hideItem(extraTextName); } } } } } checkLiittymatyyppi(initialKayttotarkoitus, initialKayttotarkoitusAsGiven, initialVapaakaytossa, initialKunta, initialHuoneistomaara, initialKaytto); form.attachEvent('onChange', function(name, value) { function doCheck() { var kayttotarkoitus = getKayttotarkoitus(form); var kayttotarkoitusAsGiven = form.getItemValue('kayttotarkoitus'); var vapaakaytossa = getVapaakaytossa(form); var kunta = form.getItemValue('kunta'); var huoneistomaara = form.getItemValue('huoneistomaara'); var kaytto = getKaytto(form); checkLiittymatyyppi(kayttotarkoitus, kayttotarkoitusAsGiven, vapaakaytossa, kunta, huoneistomaara, kaytto); } if(name.indexOf('kayttotarkoitus') === 0) { doCheck(); } else if(name.indexOf('vapaakaytossa') === 0) { doCheck(); } else if(name === 'kunta') { doCheck(); } else if(name === 'huoneistomaara') { doCheck(); } else if(name.indexOf('kaytto') === 0) { doCheck(); } }); }, akpPriceEvents: function akpPriceEvents(form, $priceElement) { function checkAkpPrice() { var kayttotarkoitus = getKayttotarkoitus(form); var asukasmaara = form.getItemValue('asukasmaara'); var huoneistomaara = form.getItemValue('huoneistomaara'); var kunta = form.getItemValue('kunta'); var liittymatyyppi = form.getItemValue('liittymatyyppi'); if(liittymatyyppi == 1) { $.get(baseurl + '/get_akp_product.do', { kayttotarkoitusKategoria: kayttotarkoitus, kunta: kunta, huoneistomaara: huoneistomaara, asukasmaara: asukasmaara }) .done(function(tariff) { if(tariff) { var message = tariff.name + ' ' + formatCurrency((tariff.price + tariff.wprice) * 1.24) + ' €
'; for(var i = 0; i < tariff.relatedProducts.length; ++i) { var product = tariff.relatedProducts[i]; message += product.name + ' ' + formatCurrency((product.price + product.wprice) * 1.24) + ' €
'; } message += '

'; $priceElement.html(message).show(); } else { $priceElement.hide(); } }); } else { $priceElement.hide(); } } checkAkpPrice(); form.attachEvent('onChange', function(name) { if(name === 'kayttotarkoitus' || name === 'asukasmaara' || name === 'huoneistomaara' || name === 'kunta' || name === 'liittymatyyppi') { checkAkpPrice(); } }); }, basicPriceEvents: function basicPriceEvents(form, $priceElement) { function checkBasicPrice() { var kayttotarkoitus = getKayttotarkoitus(form); var asukasmaara = form.getItemValue('asukasmaara'); var huoneistomaara = form.getItemValue('huoneistomaara'); var kunta = form.getItemValue('kunta'); var liittymatyyppi = form.getItemValue('liittymatyyppi'); var kayttotarkoitusExact = getTarkkaKayttotarkoitus(form) function printPriceLine(product, huoneistomaara, kayttotarkoitus) { var priceMessage = ""; var unitPrice = (product.price + product.wprice) * 1.24; var unitFormattedPrice = formatCurrency(unitPrice); if([].indexOf(kayttotarkoitus) != -1 && [].indexOf(product.key.id) == -1){ var totalFormattedPrice=formatCurrency((product.price + product.wprice) * 1.24 * huoneistomaara); priceMessage += product.name + ' ' + huoneistomaara + ' × ' + unitFormattedPrice + '€ = '+ totalFormattedPrice + ' €'; } else{ priceMessage += product.name + ' ' + formatCurrency((product.price + product.wprice) * 1.24) + ' €'; } if (false && [].indexOf(product.productgroup) != -1 && product.unit && !!product.unit.trim()) { priceMessage += "/" + product.unit; } return priceMessage + '
'; } // Change these to what are needed if([1,2,3,4,5].indexOf(liittymatyyppi) != -1 ) { $.get(baseurl + '/get_basic_payments_products.do', { kayttotarkoitusKategoria: kayttotarkoitus, kunta: kunta, huoneistomaara: huoneistomaara, asukasmaara: asukasmaara, kayttotarkoitusExact: kayttotarkoitusExact }) .done(function(tariffArray) { if (tariffArray.length > 0){ var message = "Lisäksi hintaan lisätään:" + "
" ; for (var i = 0; i < tariffArray.length; i++) { var tariff = tariffArray[i]; // message += tariff.name + ' ' + formatCurrency((tariff.price + tariff.wprice) * 1.24) + ' €
'; //printPriceLine(tariff, huoneistomaara, message) message +=printPriceLine(tariff, huoneistomaara, kayttotarkoitus); for(var j = 0; j < tariff.relatedProducts.length; ++j) { var product = tariff.relatedProducts[j]; message +=printPriceLine(product, huoneistomaara, kayttotarkoitus); // message += product.name + ' ' + formatCurrency((product.price + product.wprice) * 1.24) + ' €
'; } } message += '

'; $priceElement.html(message).show(); } else { $priceElement.hide(); } }); } else { $priceElement.hide(); } } checkBasicPrice(); form.attachEvent('onChange', function(name) { if(name === 'kayttotarkoitus' || name === 'asukasmaara' || name === 'huoneistomaara' || name === 'kunta' || name === 'liittymatyyppi') { checkBasicPrice(); } }); } }; })(); showOrderWindow.setOnPostCreation = function(callback) { showOrderWindow._onPostCreation = callback; } showOrderWindow._addinfoRules = [{ visible: true, required: false }]; showOrderWindow.setAddinfoRules = function(rules) { showOrderWindow._addinfoRules = rules; } function createOrderForm(target, rowsJson, extraJson, options) { function getStateWithoutDeferred(i, j) { var row = {}; row.laji = row.productgroup = form.getItemValue("laji_lbl" + i + "_" + j); row.product = form.getItemValue('koko_lbl' + i + '_' + j); row.bio = biojatteet != null && biojatteet != 0; row.bioErilliskerays = biojatteet == 2; row.komposti = biojatteet == 1; row.huoneistolkm = row.huoneistomaara = huoneistomaara; row.taajama = liittymatyyppi == '3' || liittymatyyppi === undefined; // new service for logged in doesn't know what is right so asume it's taajama row.kaytto = kaytto; var kokoOptions = form.getOptions("koko_lbl" + i + "_" + j); if(kokoOptions && kokoOptions.selectedIndex >= 0) { row.koko = kokoOptions[kokoOptions.selectedIndex].text; row.koko = row.koko.replace(/\D/g, ""); } else { row.koko = null; } row.kayttotarkoitus = kayttotarkoitus; row.compostWholeYear = compostInfo.wholeYear; row.compostStructure = compostInfo.structure; row.compostAllRecycled = compostInfo.allRecycled; row.compostCompostedMaterial = compostInfo.compostedMaterial; row.compostWasteFood = compostInfo.wasteFood; row.kunta = kunta; row.omistus = form.getItemValue("omistus_lbl" + i + "_" + j); row.tyhjennystiheys = form.getItemValue('tyhjennystiheys1_lbl' + i + '_' + j); row.vapaakaytossa = onlyLeisureUse; row.date = new Date(); if(!isNaN(asukasmaara)) row.asukasmaara = asukasmaara; row.changeJoinType = options != null ? ( options.loggedInCustomerChangeJoinType != null ? options.loggedInCustomerChangeJoinType : false ) : false; row.newServiceOrder = options != null ? ( options.loggedInCustomerOrderNewService != null ? options.loggedInCustomerOrderNewService : false ) : false; row.change = row.changeJoinType || row.newServiceOrder; // If logged in customer change join type or orders new service -> true row.services = options != null ? (options.services != null ? options.services : []): []; row.kimppa = null; if (Array.isArray(row.services)) { for (var i = 0; i < row.services.length; i++){ var service = row.services[i]; if (service.kimppa !== null) { row.kimppa = service.kimppa; break; } } } return row; } function getState(i, j) { var result = new $.Deferred(); var row = getStateWithoutDeferred(i, j); var relatedProductsDeferred = getLineData(i, j, 'relatedProducts'); if(relatedProductsDeferred) { relatedProductsDeferred.done(function(relatedProducts) { row.relatedProducts = relatedProducts; result.resolve(row); }); } else { result.resolve(row); } return result; } options = $.extend({ asiakasnro: null, company: false, checkRequiredServices: true }, options); if(typeof target.attachForm !== 'undefined') var form = target.attachForm(rowsJson.concat(extraJson)); else var form = new dhtmlXForm($('
').appendTo(target.find('.form')).get(0), rowsJson.concat(extraJson)); application.applyGlobalDhtmlxEventHandlers(form); form.hideItem("buying_notice"); form.hideItem("owned_notice"); form.hideItem("renting_notice"); var kunta, liittymatyyppi, huoneistomaara = 1, kayttotarkoitus = "0", kayttotarkoitusAsGiven = '0', subkayttotarkoitus = "001", asukasmaara, pricelist, kaytto = "1", biojatteet = false, onlyLeisureUse = false, compostInfo = { structure: {}, wholeYear: true, allRecycled: false, compostedMaterial: [], wasteFood: false }; var empty = [{ text: "-- Valitse --", value: "" }]; var targetFieldset = $.extend(true, {}, rowsJson[2]); var lineIndex; for(lineIndex = 0; lineIndex < targetFieldset.list.length; ++lineIndex) { var fieldsetMember = targetFieldset.list[lineIndex]; if(fieldsetMember.name === 'lbl1_0' || fieldsetMember.type === 'block') { var line = $.extend(true, {}, targetFieldset.list[lineIndex]); break; } } for (var i = 0; i < line.list.length; ++i) { line.list[i].className += ' added-order-line'; } var omistusChangedEvent = []; var rowCount = 1; var bioTypes = ['BI']; var glassTypes = ['LA']; var cardboardTypes = ['KA']; var metalTypes = ['ME']; var communityTypes = ['SE']; var paperTypes = ['PA']; var plasticTypes = ['MU']; var lineData = {}; function setLineData(i, j, key, value) { if(lineData[i] == null) lineData[i] = {}; var ext = {}; ext[key] = value; lineData[i][j] = $.extend(lineData[i][j], ext); } function getLineData(i, j, key) { if(lineData[i] == null || lineData[i][j] == null || !(key in lineData[i][j])) return undefined; else return lineData[i][j][key]; } formReloadOptions(form, "tyhjennystiheys1_lbl1_0", empty); formReloadOptions(form, "koko_lbl1_0", empty); restrictCalendar(1, 0); function displayTwoIntervals(i_current, j_current) { var note = null; var value = null; forEachValue('vali11_lbl', function(v, i, j, name) { getState(i, j) .then(function(object) { var rules = application.getDisplayTwoIntervalsRules(); var result = Common.checkRules(object, rules); note = note || result[0].note; if(i == i_current && j == j_current) { value = result[0].value; } }); }); form.setItemLabel('emptying_info_lbl1_0', note ? note : ''); return value; } var divideEmptyingFrequencyIntoTimePeriodsForOneRow = null; var divideEmptyingFrequencyIntoTimePeriods = (function divideTyhjennysvaliIntoValis() { function check(i, j) { // Do not divide to time periods if single interval is showing week selections if(displayTwoIntervals(i, j)) { return; } function getWeekValue(week) { return Common.getDateForSearchedWeek(week, new Date().getFullYear()); } var value = form.getItemValue('tyhjennystiheys1_lbl' + i + '_' + j); var vali11_name = 'vali11_lbl' + i + '_' + j; var vali12_name = 'vali12_lbl' + i + '_' + j; var vali21_name = 'vali21_lbl' + i + '_' + j; var vali22_name = 'vali22_lbl' + i + '_' + j; var tyhjennystiheys2_name = 'tyhjennystiheys2_lbl' + i + '_' + j; var twoIntervals_name = 'two_intervals_lbl' + i + '_' + j; var tiheysParts = value.split('_'); if(tiheysParts.length === 1) { var isSummerOnly = kayttotarkoitus == '1' && kaytto == '1'; var startWeek = isSummerOnly ? CreateOrderFormUtils.summerStartWeek() : 1; var endWeek = isSummerOnly ? CreateOrderFormUtils.summerEndWeek() : 53; form.setItemValue(vali11_name, getWeekValue(startWeek)); form.setItemValue(vali12_name, getWeekValue(endWeek)); form.setItemValue(vali21_name, getWeekValue(null)); form.setItemValue(vali22_name, getWeekValue(null)); form.uncheckItem(twoIntervals_name); } else if(tiheysParts.length === 2) { var summerWinterOffset = 1; var summerStartingWeek = CreateOrderFormUtils.summerStartWeek(); var winterStartingWeek = CreateOrderFormUtils.summerEndWeek() + summerWinterOffset; form.setItemValue(vali11_name, getWeekValue(winterStartingWeek)); form.setItemValue(vali12_name, getWeekValue(summerStartingWeek - summerWinterOffset)); form.setItemValue(vali21_name, getWeekValue(summerStartingWeek)); form.setItemValue(vali22_name, getWeekValue(winterStartingWeek - summerWinterOffset)); form.setItemValue(tyhjennystiheys2_name, tiheysParts[1]); form.checkItem(twoIntervals_name); } else { throw new Error(); } } // Ei pitäisi tehdä näin, mutta nyt on vaan helpointa divideEmptyingFrequencyIntoTimePeriodsForOneRow = check; form.attachEvent('onChange', function(name, value) { if(name.indexOf('tyhjennystiheys1') === 0) { var i = name.substr(-3, 1); var j = name.substr(-1, 1); check(i, j); } }); return function() { forEachValue('tyhjennystiheys1_lbl', function(value, i, j) { check(i, j); }); }; })(); (function updateOmistusLabelValue() { form.attachEvent('onChange', function(name) { var omistusPrefix = 'omistus_lbl'; if(name.indexOf(omistusPrefix) === 0) { var lineNr = name.substr(name.lastIndexOf('_') + 1); var fieldsetNr = name.substr(omistusPrefix.length, name.lastIndexOf("_") - omistusPrefix.length); var value = form.getItemValue(name); var $select = $(form.getSelect(name)); var $option = $select.find('option[value="' + value + '"]'); var text = $option.text(); form.setItemValue('omistus_label_lbl' + fieldsetNr + '_' + lineNr, text); } }); })(); function twoIntervalsRestrictCalendars() { forEachValue('vali11_lbl', function(v, i, j, name) { if(false || kayttotarkoitus != '1' || kaytto != '1') { // not summer house CreateOrderFormUtils.restrictToCurrentYear(form, name); } else { // summer house CreateOrderFormUtils.restrictToStartOfSummer(form, name); } }); forEachValue('vali12_lbl', function(v, i, j, name) { CreateOrderFormUtils.restrictToCurrentYear(form, name) }); forEachValue('vali21_lbl', function(v, i, j, name) { CreateOrderFormUtils.restrictToCurrentYear(form, name) }); forEachValue('vali22_lbl', function(v, i, j, name) { CreateOrderFormUtils.restrictToCurrentYear(form, name) }); } twoIntervalsRestrictCalendars(); CreateOrderFormUtils.createCalendarRelationshipsForTwoIntervals(form, 'vali', function(interval, startEnd, changedName) { var end = changedName.substr(6); return 'vali' + interval + startEnd + end; }, function() { return kayttotarkoitus; }, function() { return kaytto; }, function() { return onlyLeisureUse; }); function requiresCoverWholeYear(i, j) { var coverWholeYear = (kayttotarkoitus != '1' || kaytto != '1') ; return coverWholeYear; } function setDefaultInterval(ii, jj) { var start, end; var coverWholeYear = requiresCoverWholeYear(ii, jj); function showOrHideItem(form, name, index_i, index_j) { if (displayTwoIntervals(index_i, index_j)) { form.showItem(name); } else { form.hideItem(name); } } if(coverWholeYear) { // not summer house start = Common.getMondayOfFirstWeekOfYear(); end = Common.getSundayOfLastWeekOfYear(); // Show everything only if needed forEachValue('vali21_lbl', function(v, i, j, name) { showOrHideItem(form, name, i, j) }); forEachValue('vali22_lbl', function(v, i, j, name) { showOrHideItem(form, name, i, j) }); forEachValue('tyhjennystiheys2_lbl', function(v, i, j, name) { showOrHideItem(form, name, i, j) }); // Show vali1 only if two intervals is wanted forEachValue('vali11_lbl', function(v, i, j, name) { showOrHideItem(form, name, i, j) }); // Show vali1 only if two intervals is wanted forEachValue('vali12_lbl', function(v, i, j, name) { showOrHideItem(form, name, i, j) }); // Show two interval checkbox only if two intervals is wanted forEachValue('two_intervals_lbl', function(v, i, j, name) { showOrHideItem(form, name, i, j) }); // Show two interval checkbox only if two intervals is wanted forEachValue('tyhjennystiheys1_lbl', function(v, i, j, name) { if (displayTwoIntervals(i, j)) { $(form.getSelect('tyhjennystiheys1_lbl' + i + '_' + j)).closest('.week-selection') .addClass('col-xs-6') .removeClass('col-xs-12') .removeClass('no-week-selections') } else { $(form.getSelect('tyhjennystiheys1_lbl' + i + '_' + j)).closest('.week-selection') .removeClass('col-xs-6') .addClass('col-xs-12') .addClass('no-week-selections') } }); forEachValue('vali11_lbl', function(v, i, j, name) { form.doWithItem(name, 'setOutOfRangeMessage', "Tyhjennysvälit eivät saa olla päällekkäisiä"); }); } else { // summer house start = CreateOrderFormUtils.summerStartDate(); end = CreateOrderFormUtils.summerEndDate(); forEachValue('vali21_lbl', function(v, i, j, name) { form.hideItem(name) }); forEachValue('vali22_lbl', function(v, i, j, name) { form.hideItem(name) }); forEachValue('tyhjennystiheys2_lbl', function(v, i, j, name) { form.hideItem(name) }); forEachValue('two_intervals_lbl', function(v, i, j, name) { form.hideItem(name); form.uncheckItem(name); form.callEvent('onChange', [name, undefined]); }); forEachValue('vali11_lbl', function(v, i, j, name) { form.doWithItem(name, 'setOutOfRangeMessage', "Aloitusviikon tulee olla väliltä 14-26"); }); } forEachValue('vali11_lbl', function(v, i, j, name) { if(!ii || !jj || (ii == i && jj == j)) { form.setItemValue(name, start); form.callEvent('onChange', [name, start]); } }); forEachValue('vali12_lbl', function(v, i, j, name) { if(!ii || !jj || (ii == i && jj == j)) { form.setItemValue(name, end); form.callEvent('onChange', [name, end]); } }); } setDefaultInterval(); function initializeDisplayTwoIntervals(fieldsetNri, line_countj) { if(displayTwoIntervals(fieldsetNri, line_countj)) { form.showItem('vali11_lbl' + fieldsetNri + '_' + line_countj); form.showItem('vali12_lbl' + fieldsetNri + '_' + line_countj); form.showItem('vali21_lbl' + fieldsetNri + '_' + line_countj); form.showItem('vali22_lbl' + fieldsetNri + '_' + line_countj); form.showItem('two_intervals_lbl' + fieldsetNri + '_' + line_countj); form.showItem('vali22_lbl' + fieldsetNri + '_' + line_countj); form.showItem('tyhjennystiheys2_lbl' + fieldsetNri + '_' + line_countj); $(form.getSelect('tyhjennystiheys1_lbl' + fieldsetNri + '_' + line_countj)).closest('.week-selection') .addClass('col-xs-6') .removeClass('col-xs-12') .removeClass('no-week-selections') } else { form.hideItem('vali11_lbl' + fieldsetNri + '_' + line_countj); form.hideItem('vali12_lbl' + fieldsetNri + '_' + line_countj); form.hideItem('vali21_lbl' + fieldsetNri + '_' + line_countj); form.hideItem('vali22_lbl' + fieldsetNri + '_' + line_countj); form.hideItem('two_intervals_lbl' + fieldsetNri + '_' + line_countj); form.hideItem('vali22_lbl' + fieldsetNri + '_' + line_countj); form.hideItem('tyhjennystiheys2_lbl' + fieldsetNri + '_' + line_countj); $(form.getSelect('tyhjennystiheys1_lbl' + fieldsetNri + '_' + line_countj)).closest('.week-selection') .removeClass('col-xs-6') .addClass('col-xs-12') .addClass('no-week-selections') } } // initialize preloaded fields initializeDisplayTwoIntervals(1,0); (function twoIntervalsHandler() { form.attachEvent('onChange', function(name, value) { if(name.indexOf('two_intervals') === 0) { var i = name.substr(-3, 1); var j = name.substr(-1, 1); var checked = form.isItemChecked(name); var vali11_name = 'vali11_lbl' + i + '_' + j; var vali12_name = 'vali12_lbl' + i + '_' + j; var vali21_name = 'vali21_lbl' + i + '_' + j; if(checked) { form.enableItem(vali21_name); } else { form.disableItem(vali21_name); form.setItemValue(vali21_name, ''); } var vali22_name = 'vali22_lbl' + i + '_' + j; if(checked) { form.enableItem(vali22_name); } else { form.disableItem(vali22_name); form.setItemValue(vali22_name, ''); } var tyhjennystiheys_name = 'tyhjennystiheys2_lbl' + i + '_' + j; if(checked) { form.enableItem(tyhjennystiheys_name); } else { form.disableItem(tyhjennystiheys_name); form.setItemValue(tyhjennystiheys_name, ''); } // Add css class to change behavior when single or two intervals var emptyingIntervalArea = $(form.getSelect(tyhjennystiheys_name)).closest('.emptying-interval'); if (checked) { emptyingIntervalArea.addClass('two-intervals-selected'); } else { emptyingIntervalArea.removeClass('two-intervals-selected'); } if(checked && kayttotarkoitus == '1' && kaytto != '1') { // leisure, not summer form.setItemValue(vali11_name, CreateOrderFormUtils.summerStartDate()); form.callEvent('onChange', [vali11_name, CreateOrderFormUtils.summerStartDate()]); form.setItemValue(vali12_name, CreateOrderFormUtils.summerEndDate()); form.callEvent('onChange', [vali12_name, CreateOrderFormUtils.summerEndDate()]); } } }); })(); (function dontShowForAll() { form.attachEvent('onChange', function(name, value) { if(name.indexOf('koko_lbl') === 0 || name.indexOf('laji_lbl1') === 0 ) { var i = name.substr(8, 1); var j = name.substr(10, 1); if(displayTwoIntervals(i, j)) { form.showItem('vali11_lbl' + i + '_' + j); form.showItem('vali12_lbl' + i + '_' + j); form.showItem('vali21_lbl' + i + '_' + j); form.showItem('vali22_lbl' + i + '_' + j); form.showItem('two_intervals_lbl' + i + '_' + j); form.showItem('vali22_lbl' + i + '_' + j); form.showItem('tyhjennystiheys2_lbl' + i + '_' + j); $(form.getSelect('tyhjennystiheys1_lbl' + i + '_' + j)).closest('.week-selection') .addClass('col-xs-6') .removeClass('col-xs-12') .removeClass('no-week-selections') } else { form.hideItem('vali11_lbl' + i + '_' + j); form.hideItem('vali12_lbl' + i + '_' + j); form.hideItem('vali21_lbl' + i + '_' + j); form.hideItem('vali22_lbl' + i + '_' + j); form.hideItem('two_intervals_lbl' + i + '_' + j); form.hideItem('vali22_lbl' + i + '_' + j); form.hideItem('tyhjennystiheys2_lbl' + i + '_' + j); $(form.getSelect('tyhjennystiheys1_lbl' + i + '_' + j)).closest('.week-selection') .removeClass('col-xs-6') .addClass('col-xs-12') .addClass('no-week-selections') } } }); })(); function requireCoverWholeYear(kayttotarkoitusCategory) { var valid = true; if(kayttotarkoitus == kayttotarkoitusCategory) { forEachValue('vali11_lbl', function(v, i, j, name) { //var tyhjennysvali = form.getItemValue('tyhjennystiheys1_lbl' + i + '_' + j); var vali11 = form.getItemValue('vali11_lbl' + i + '_' + j, true); var vali12 = form.getItemValue('vali12_lbl' + i + '_' + j, true); var vali21 = form.getItemValue('vali21_lbl' + i + '_' + j, true); var vali22 = form.getItemValue('vali22_lbl' + i + '_' + j, true); var hasTwoIntervals = form.isItemChecked('two_intervals_lbl' + i + '_' + j); // Voi olla, etta taytyy lisata && tyhjennysvali.indexOf('-') == -1 if(!hasTwoIntervals) { vali21 = -1; vali22 = -1; } if(!CreateOrderFormUtils.isYearCovered(vali11, vali12, vali21, vali22)) { valid = false; } }); } return valid; } function requireCoverSummer() { var valid = false; forEachValue('vali11_lbl', function(v, i, j, name) { var vali11 = form.getItemValue('vali11_lbl' + i + '_' + j, true); var vali12 = form.getItemValue('vali12_lbl' + i + '_' + j, true); var vali21 = form.getItemValue('vali21_lbl' + i + '_' + j, true); var vali22 = form.getItemValue('vali22_lbl' + i + '_' + j, true); var requiredCoverageSetting = "18"; var requiredCoverage; if(requiredCoverageSetting === 'whole') { requiredCoverage = CreateOrderFormUtils.summerEndWeek() - CreateOrderFormUtils.summerStartWeek() + 1; } else { requiredCoverage = +requiredCoverageSetting; } var summerWeeks = 0; for(var week = CreateOrderFormUtils.summerStartWeek(); week <= CreateOrderFormUtils.summerEndWeek(); ++week) { if(CreateOrderFormUtils.isWeekBetween(week, vali11, vali12) || CreateOrderFormUtils.isWeekBetween(week, vali21, vali22)) { summerWeeks++; } } if(summerWeeks >= requiredCoverage) { valid = true; } }); return valid; } form.attachEvent('onBeforeValidate', function() { var valid = true; var message = ''; { var fullYearCoverageRequiredFor = [0, 2, 4]; for(var i = 0; i < fullYearCoverageRequiredFor.length; ++i) { if(!requireCoverWholeYear(fullYearCoverageRequiredFor[i])) { valid = false; message += 'Tyhjennysvälien täytyy kattaa koko vuosi
'; } } if(kayttotarkoitus == '1' && kaytto == '2') { if(!requireCoverSummer()) { valid = false; message += 'Tyhjennysvälien täytyy kattaa vähintään 4 kuukautta viikkojen 14 ja 43 välillä
'; } } } showGlobalValidationError(valid, message); return valid; }); var fullLockingOptions = (function() { var lukitus = Common.findInFormJson(rowsJson, function(json) { return json.name && json.name.indexOf('lukitus_') === 0; }); var options = JSON.parse(JSON.stringify(lukitus.options)); (function reorderOptions() { var order = [0, 1, 4, 5, 6, 7, 2, 8, 3]; order = order.map(function(value) { return +value; }); options.sort(function(a, b) { return order.indexOf(+a.value) - order.indexOf(+b.value); }); })(); return options; })(); function checkLockingVisibility() { function forEachLocking(action) { forEachValue('laji_lbl', function(_, i, j) { var fieldsetLukitusName = 'lukitus_' + i; if(form.isItem(fieldsetLukitusName)) { action(fieldsetLukitusName); } var rowLukitusName = 'lukitus_lbl' + i + '_' + j; if(form.isItem(rowLukitusName)) { action(rowLukitusName); } }); }; function hideLocking() { forEachLocking(function(name) { form.hideItem(name); form.setItemValue(name, 0); }); } function showLocking() { forEachLocking(function(name) { form.showItem(name); }); } function fullOptions() { var options = []; for(var i = 0; i < fullLockingOptions.length; ++i) { var option = fullLockingOptions[i]; options.push(option); } return options; } getState(null, null) .then(function(state) { var rules = application.getLockingOptionsRules(); var options = Common.checkRules(state, rules); if(options.length === 0) { hideLocking(); return; } var option = options[0]; if(Array.isArray(option.value) && option.value.length === 0) { hideLocking(); return; } showLocking(); if(option.value === 'all') { forEachLocking(function(name) { var currentValue = form.getItemValue(name); form.reloadOptions(name, fullOptions()); form.setItemValue(name, currentValue); }); return; } else { forEachLocking(function(name) { var currentValue = form.getItemValue(name); form.reloadOptions(name, fullOptions().filter(function(o) { return $.inArray(+o.value, option.value) >= 0; })); form.setItemValue(name, currentValue); }); } }); } function checkWashingRingVisibility(fieldsetNr, lineNr) { function checkOneRow(i, j) { var product = form.getItemValue('koko_lbl' + i + '_' + j); function hideAll() { form.hideItem('washing_ring_fieldset_lbl' + i + '_' + j); form.disableItem('washing_ring_fieldset_lbl' + i + '_' + j); form.setItemValue('washing_ring_lbl' + i + '_' + j, ''); } function showAll() { form.showItem('washing_ring_fieldset_lbl' + i + '_' + j); form.enableItem('washing_ring_fieldset_lbl' + i + '_' + j); } function disable() { form.hideItem('washing_ring_lbl' + i + '_' + j); form.disableItem('washing_ring_lbl' + i + '_' + j); form.setItemValue('washing_ring_lbl' + i + '_' + j, ''); } function enable() { form.showItem('washing_ring_lbl' + i + '_' + j); form.enableItem('washing_ring_lbl' + i + '_' + j); } function setValue(value) { var value; if(value === 'order') { value = '1'; } else if(value === 'do-myself') { value = '0'; } else if(value === 'not-selected') { value = ''; } form.setItemValue('washing_ring_lbl' + i + '_' + j, value); } getState(i, j) .then(function(state) { var rules = application.getJoinWashingRingRules(); var options = Common.checkRules(state, rules); if(options.length === 0) { hideAll(); return; } showAll(); var option = options[0]; form.setItemLabel('washing_ring_info_lbl' + i + '_' + j, option.text || ''); (function tooltips() { var itemName = 'washing_ring_lbl' + i + '_' + j; form.setTooltip(itemName, option.info ? option.info : ''); var $select = $(form.getSelect(itemName)); var $label = $select.parent().parent().find('.dhxform_label'); var $info = $label.find('.dhxform_info'); if($info.length === 0) return; var title = $label.attr('title') || ''; if(title.length > 0) { title = title.replace(/\n/g, '
'); $label.attr('title', ''); $info.attr('title', title) .attr('data-toggle', 'tooltip'); $info.tooltip({ html: true }).tooltip('fixTitle'); } else { $info.tooltip('destroy'); $info.attr('data-original-title', ''); } })(); if(option.value === 'disabled') { disable(); return; } enable(); if(option.valueHidden) { // Hide and force value form.hideItem('washing_ring_lbl' + i + '_' + j); setValue(option.value); } else /* if(form.getItemValue('washing_ring_lbl' + i + '_' + j) === '') */ { setValue(option.value); } }); } if(typeof fieldsetNr === 'undefined' || typeof lineNr === 'undefined') { forEachValue('laji_lbl', function(_, i, j) { checkOneRow(i, j); }); } else { checkOneRow(fieldsetNr, lineNr); } } attachEventsA2(form); function getPricelist() { if(!!pricelist) return pricelist; else return kunta; } function checkAllRules(skipInteval) { checkLockingVisibility(); checkWashingRingVisibility(); updateLaji(); forEachValue('laji_lbl', function(_, i, j) { reloadTyhjennystiheys(i, j); }); forEachValue('laji_lbl', function(notUsed, i, j) { restrictCalendar(i, j); }); twoIntervalsRestrictCalendars(); if (skipInteval == null || !skipInteval) { setDefaultInterval(); } divideEmptyingFrequencyIntoTimePeriods(); forEachValue('laji_lbl', function(_, i, j) { getState(i, j) .then(function(state) { var rules = createOrderForm._fieldRules; var results = Common.checkRules(state, rules); var correctedResults = Common.checkFieldNames(results, j); Common.applyRules(form, correctedResults); if (results.length != 0) { } }); }); } function checkRowRules(fieldsetNr, lineNr, skipInterval) { checkWashingRingVisibility(fieldsetNr, lineNr); reloadTyhjennystiheys(fieldsetNr, lineNr) restrictCalendar(fieldsetNr, lineNr); twoIntervalsRestrictCalendars(); if (skipInterval == null || !skipInterval) { setDefaultInterval(fieldsetNr, lineNr); } divideEmptyingFrequencyIntoTimePeriodsForOneRow(fieldsetNr, lineNr); getState(fieldsetNr, lineNr) .then(function(state) { var rules = createOrderForm._fieldRules; var results = Common.checkRules(state, rules); var correctedResults = Common.checkFieldNames(results, lineNr); Common.applyRules(form, correctedResults); }); } if(options.checkRequiredServices) { (function checkRequiredBinsRules() { form.attachEvent('onBeforeValidate', function() { var rules = application.getRequiredBinsRules(); var state = getStateWithoutDeferred(null, null); var result = Common.checkRules(state, rules); var errorMessages = []; for(var i = 0; i < result.length; ++i) { var rule = result[i]; var requiredProductgroup = rule.requiredProductGroup; if(typeof requiredProductgroup !== 'undefined') { var hasRequiredProductgroup = false; forEachValue('laji_lbl', function(value) { if(value == requiredProductgroup) { hasRequiredProductgroup = true; } }); if(!hasRequiredProductgroup) { errorMessages.push(rule.errorMessage); } } } if(errorMessages.length > 0) { dhtmlx.message({ type: "alert", text: errorMessages.join('
') }); } return errorMessages.length === 0; }); })(); } return { form: form, setKunta: function(k, update) { kunta = k; if(typeof update === 'undefined' || update) { checkAllRules(); } }, setPricelist: function(p, update) { pricelist = p; if(typeof update === 'undefined' || update) { checkAllRules(); } }, setBiojatteet: function(k) { if(typeof k === 'undefined') k = 0; biojatteet = k; checkAllRules(); }, setLiittymatyyppi: function(l, update) { liittymatyyppi = l; if(typeof update === 'undefined' || update) { checkAllRules(); } }, setHuoneistomaara: function(h, update) { huoneistomaara = parseInt(h); huoneistomaara = isNaN(huoneistomaara) ? "" : huoneistomaara if(typeof update === 'undefined' || update) { checkAllRules(); } }, setKayttotarkoitus: function(k, update) { kayttotarkoitus = k; if(typeof update === 'undefined' || update) { checkAllRules(); } }, setKayttotarkoitusAsGiven: function(k, update) { kayttotarkoitusAsGiven = k; if(typeof update === 'undefined' || update) { checkAllRules(); } }, setSubkayttotarkoitus: function(k, update, selectedKayttotarkoitusCategory) { subkayttotarkoitus = k; if(k !== null) { this.setKayttotarkoitus(getKayttotarkoitusCategory(k, selectedKayttotarkoitusCategory), false); } if(typeof update === 'undefined' || update) { checkAllRules(); } }, setCompostWholeYear: function(b) { compostInfo.wholeYear = b; checkAllRules(); }, setCompostStructure: function(s) { compostInfo.structure = s; checkAllRules(); }, setCompostWasteFood: function(s) { compostInfo.wasteFood = s; checkAllRules(); }, setCompostAllRecycled: function(b) { compostInfo.allRecycled = b; checkAllRules(); }, setCompostCompostedMaterial: function(m) { compostInfo.compostedMaterial = m; checkAllRules(); }, setAsukasmaara: function(a, update) { asukasmaara = parseInt(a); asukasmaara = isNaN(asukasmaara) ? "" : asukasmaara; if(typeof update === 'undefined' || update) { checkAllRules(); } }, setKaytto: function(k, update) { kaytto = k; if(typeof update === 'undefined' || update) { checkAllRules(); } }, setOnlyLeisureUse: function(a) { onlyLeisureUse = a; checkAllRules(); }, setRowCount: function(targetCount) { if (form) { form.unload(); form = null; } form = target.attachForm(rowsJson.concat(extraJson)); formReloadOptions(form, "tyhjennystiheys1_lbl1_0", empty); formReloadOptions(form, "koko_lbl1_0", empty); restrictCalendar(1, 0); for (var formIdx = 1; formIdx < targetCount; formIdx++) { var newFieldset = $.extend(true, {}, targetFieldset); newFieldset.name = "fieldset" + (formIdx + 1); newFieldset.label = (formIdx + 1) + ". tyhjennyskohde"; rename(newFieldset.list, formIdx + 1); form.addItem(null, newFieldset, 2 + formIdx); formReloadOptions(form, "tyhjennystiheys1_lbl" + (formIdx + 1) + "_0", empty); formReloadOptions(form, "koko_lbl" + (formIdx + 1) + "_0", empty); restrictCalendar(formIdx + 1, 0); if(formIdx == targetCount -1) { form.addItem(newFieldset.name, { type: "button", name: "poista", command: formIdx + 1, value: "Poista tyhjennyskohde" }, 100); } } attachEventsA2(form); updateLaji(); this.form = form; rowCount = targetCount; }, getRowCount: function() { return rowCount; }, // handler = function(wantsToBuyBin: boolean) attachOmistusChangedHandler: function(handler) { omistusChangedEvent.push(handler); }, updateOrderRows: function() { forEachValue("laji_lbl", updateOrderLineByType); forEachValue("koko_lbl", function(value, fieldsetNr, lineNr) { reloadTyhjennystiheys(fieldsetNr, lineNr); reloadAstia(fieldsetNr, lineNr); }); }, wantsToBuyBin: wantsToBuyBin, updateLaji: updateLaji }; function rename(list, i) { for (var j = 0; j < list.length; ++j) { if ("name" in list[j]) { var ind = list[j].name.indexOf("lbl1"); if (ind >= 0) { list[j].name = list[j].name.replace("lbl1", "lbl" + i); } else { list[j].name = list[j].name.replace("_1", "_" + i); } } else if ("command" in list[j]) { list[j].command = list[j].command.replace("_1", "_" + i); } if ("list" in list[j]) rename(list[j].list, i); if ("options" in list[j]) rename(list[j].options, i); } } // End function function attachEventsA2(form) { form.attachEvent("onButtonClick", function(name) { var command = form.getUserData(name, 'command'); if (name.indexOf("insertRow_") === 0) { var fieldsetNr = name.substr(10); var newLine = $.extend(true, {}, line); var line_count = parseInt(form.getItemValue("line_count_" + fieldsetNr)); addNewLine(newLine, form, fieldsetNr, empty); } else if(name === "poista") { form.removeItem("fieldset" + command); var ind = parseInt(command); if(ind > 2) { form.addItem("fieldset" + (ind-1), { type: "button", name: "poista", command: ind - 1, value: "Poista tyhjennyskohde" }, 100); } --rowCount; } else if(name.indexOf("deleteRow_") === 0) { var rowsLeft = deleteLine(form, command.fieldsetNr, command.lineName); if(rowsLeft > 1) { var lineName = "lbl" + command.fieldsetNr + "_" + (rowsLeft - 1); addDeleteRowButton(form, command.fieldsetNr, lineName); } } }); form.attachEvent("onBeforeValidate", function checkHaveRequiredServices(status) { if(!options.checkRequiredServices) return true; function pricelistHasProductGroup(productGroups) { var result; var p1 = getPricelist(); pl = Common.kayttotarkoitusToCustomerSegment(kayttotarkoitus, huoneistomaara); $.ajax(baseurl + "/user_has_product_groups.do", { data: { asiakasNro: options.asiakasnro, pricelist: pl, kunta: kunta, kayttotarkoitus: subkayttotarkoitus, productGroups: productGroups, kategoria: kayttotarkoitus, huoneistomaara: huoneistomaara}, async: false }) .done(function(reply) { result = reply; }); return result; } if(huoneistomaara >= 5) { if(!hasServiceWith("laji_lbl", bioTypes) && pricelistHasProductGroup(bioTypes)) { dhtmlx.message({ type: "alert", text: "Valitse vähintään yksi bioastia" }); return false; } } if(huoneistomaara >= 40) { if(!hasServiceWith("laji_lbl", glassTypes) && pricelistHasProductGroup(glassTypes)) { dhtmlx.message({ type: "alert", text: "Valitse vähintään yksi lasiastia" }); return false; } } if(huoneistomaara >= 20) { if(!hasServiceWith("laji_lbl", cardboardTypes) && pricelistHasProductGroup(cardboardTypes)) { dhtmlx.message({ type: "alert", text: "Valitse vähintään yksi kartonkiastia" }); return false; } } if(huoneistomaara >= 40) { if(!hasServiceWith("laji_lbl", metalTypes) && pricelistHasProductGroup(metalTypes)) { dhtmlx.message({ type: "alert", text: "Valitse vähintään yksi metalliastia" }); return false; } } if(biojatteet == 2) { var hasBio = false; forEachValue("laji_lbl", function(value, i, j, name) { if($.inArray(value, bioTypes) !== -1) { hasBio = true; } }); if(!hasBio) { dhtmlx.message({ type: "alert", text: 'Valitse vähintään yksi bioastia' }); } return hasBio; } return true; }); form.attachEvent("onChange", function(name, value, state) { if (name.indexOf('laji') === 0) { var lineNr = name.substr(10); var fieldsetNr = name.substr(8, name.lastIndexOf("_") - 8); updateOrderLineByType(value, fieldsetNr, lineNr); displayOmistusInfo(fieldsetNr, lineNr); checkRowRules(fieldsetNr, lineNr); } else if (name.indexOf('koko') === 0) { var lineNr = name.substr(10); var fieldsetNr = name.substr(8, name.lastIndexOf("_") - 8); showBinInfo(fieldsetNr, lineNr); reloadTyhjennystiheys(fieldsetNr, lineNr); reloadAstia(fieldsetNr, lineNr); checkWashingRingVisibility(fieldsetNr, lineNr); } else if (name.indexOf('omistus') === 0) { var lineNr = name.substr(13); var fieldsetNr = name.substr(11, name.lastIndexOf("_") - 11); var a = wantsToBuyBin(); $.each(omistusChangedEvent, function(i, e) { e(a); }); checkRowRules(fieldsetNr, lineNr, true); displayOmistusInfo(fieldsetNr, lineNr); showBinInfo(fieldsetNr, lineNr); } else if (name.indexOf('tyhjennystiheys') === 0) { var lineNr = name.substr(22); var fieldsetNr = name.substr(20, name.lastIndexOf("_") - 20); checkAllRules(true); } else if(name.indexOf('maara') === 0) { var lineNr = name.substr(11); var fieldsetNr = name.substr(9, name.lastIndexOf("_") - 9); showBinInfo(fieldsetNr, lineNr); } }); } // End of attachEventsA2 var updateLajiPreviousParameters = null; function updateLaji(needUpdate) { // Constants for all rows var pl = getPricelist(); pl = Common.kayttotarkoitusToCustomerSegment(kayttotarkoitus, huoneistomaara); var parameters = { pricelist: pl, kunta: kunta, kayttotarkoitus: subkayttotarkoitus }; if(options.asiakasnro != null) { parameters.asiakasNro = options.asiakasnro; } else { parameters.kategoria = kayttotarkoitus; parameters.huoneistomaara = huoneistomaara; } var parametersAsQueryString = Object.keys(parameters) .map(function(key) { return key + '=' + parameters[key]; }) .join('&'); function updateRowLaji(name, i, j) { function filterProductTypes() { var rules = application.getProductTypeFilteringRules(); getState(i, j) .then(function(state) { var options = form.getOptions(name); var k = 0; while(k < options.length) { var $option = $(options[k]); state.id = $option.val(); var matches = Common.checkRules(state, rules); if(matches.length > 0) { $option.remove(); } else { ++k; } } // Fixes a strange case with Puhas, where "Select" option is not shown and there's only one // option in the list, that can't be actually changed and become selected, so sizes are always // empty list. So do it in the code. options = form.getOptions(name); if (options && options.length > 0) { var option = options[0]; var val = option.value; if (val) { form.setItemValue(name, val); form.callEvent('onChange', [name, val]); } } }); } function makeRandom(length) { var result = ''; var characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; var charactersLength = characters.length; for ( var i = 0; i < length; i++ ) { result += characters.charAt(Math.floor(Math.random() * charactersLength)); } return result; } function ensureOptions(parametersAsQueryString) { var result = new $.Deferred(); var $select = $(form.getSelect(name)); if(needUpdate !== '' && needUpdate === true){ var fromButtonClick = "&click="+makeRandom(8); parametersAsQueryString = parametersAsQueryString+fromButtonClick; } var hasBeenLoadedBefore = !!$select.data('original-options-html'); var reloadOptions = parametersAsQueryString !== updateLajiPreviousParameters || !hasBeenLoadedBefore; if(reloadOptions) { formReloadOptions(form, name, baseurl + "/get_product_groups.do?" + parametersAsQueryString) .then(function($options) { var optionsHtml = Common.$optionsToHtml($options); $select.data('original-options-html', optionsHtml); result.resolve(); }); } else if(!$select.data('on-going-reload')) { $select.html($select.data('original-options-html')); result.resolve(); } else { result.resolve(); } return result; } var validParameters = (!!parameters.kunta && !!parameters.pricelist && !!parameters.kayttotarkoitus) || (!!parameters.asiakasNro && !!parameters.pricelist); if(validParameters) { var currentValue = form.getItemValue(name); ensureOptions(parametersAsQueryString) .then(filterProductTypes); form.setItemValue(name, currentValue); } displayOmistusInfo(i, j); } var i = 1; while(true) { var j = 0; while(true) { var name = "laji_lbl" + i + "_" + j; if(form.getItemType(name) !== "select") break; updateRowLaji(name, i, j); j++; } if(j === 0) break; i++; } updateLajiPreviousParameters = parametersAsQueryString; } function forEachValue(colWithLbl, callback) { var i = 1; while (true) { var j = 0; var rowFound = false; while (true) { var itemName = colWithLbl + i + "_" + j; if (!form.isItem(itemName)) { break; } else { var value = form.getItemValue(itemName); callback(value, i, j, itemName); ++j; rowFound = true; } } if (rowFound) ++i; else break; } } // End nested function function reloadTyhjennystiheys(i, j, notUsed) { var name = "tyhjennystiheys1_lbl" + i + "_" + j; var rules = application.getTyhjennystiheysRules(); // ASRAP-4361 - If the first options text has been changed to something else, // which happens in, somewhat surprisingly, change-window.jsp, replace it with the original one. // Aptly named file, it does exactly what the name says. var firstrule = rules[0]; var select = '-- Valitse --'; if (firstrule.value === "" && firstrule.text.indexOf(select) === -1) { firstrule.text = select; } reloadOptions(name, rules, i, j); reloadOptions(name.replace('tyhjennystiheys1', 'tyhjennystiheys2'), rules, i, j); } function reloadOptions(name, rules, i, j) { var originalValue = form.getItemValue(name); getState(i, j) .then(function(row) { var options = Common.checkRules(row, rules); formReloadOptions(form, name, options); var currentValue = form.getItemValue(name); form.setItemValue(name, originalValue); if(currentValue !== originalValue) { // setItemValue left outside this if just in case. form.callEvent('onChange', [name, originalValue]); } }); } function reloadAstia(i, j, notUsed) { var rules = application.getBinOwnershipRules(); var name = "omistus_lbl" + i + "_" + j; reloadOptions(name, rules, i, j); displayOmistusInfo(i, j); showBinInfo(i, j); } function updateOrderLineByType(value, fieldsetNr, lineNr) { if (value === -1) { // Don't bother, nothing is going to be found. return; } var pl = getPricelist(); pl = Common.kayttotarkoitusToCustomerSegment(kayttotarkoitus, huoneistomaara); var binSizeUrl; if(options.asiakasnro == null) { binSizeUrl = baseurl + "/get_bin_sizes.do?pricelist=" + pl + "&kunta=" + kunta + "&productgroup=" + value + "&kayttotarkoitus=" + subkayttotarkoitus + "&kategoria=" + kayttotarkoitus + "&huoneistomaara=" + huoneistomaara; } else { binSizeUrl = baseurl + '/secure/get_bin_sizes.do?pricelist=' + pl + '&kunta=' + kunta + '&productgroup=' + value + '&asiakasnro=' + options.asiakasnro; } if (value === '') { formReloadOptions(form, "koko_lbl" + fieldsetNr + "_" + lineNr, empty); reloadTyhjennystiheys(fieldsetNr, lineNr, empty); reloadAstia(fieldsetNr, lineNr, empty); } else { formReloadOptions(form, "koko_lbl" + fieldsetNr + "_" + lineNr, binSizeUrl) .done(function() { getState(fieldsetNr, lineNr) .then(function(state) { var rules = application.getProductFilteringRules(); var options = form.getOptions('koko_lbl' + fieldsetNr + '_' + lineNr); var i = 0; while(i < options.length) { var $option = $(options[i]); state.id = $option.val(); var matches = Common.checkRules(state, rules); if(matches.length > 0) { $option.remove(); } else { ++i; } } setTimeout(function() { reloadTyhjennystiheys(fieldsetNr, lineNr, null); reloadAstia(fieldsetNr, lineNr, null); }, 0); }); }); } var hide_bin_for = []; if($.inArray(value, hide_bin_for) !== -1) { $("select[name='omistus_lbl" + fieldsetNr + "_" + lineNr +"']").css('visibility', 'hidden'); form.setItemValue("omistus_lbl" + fieldsetNr + "_" + lineNr, "2"); } else { $("select[name='omistus_lbl" + fieldsetNr + "_" + lineNr +"']").css('visibility', 'visible'); form.setItemValue("omistus_lbl" + fieldsetNr + "_" + lineNr, ""); } } // End nested function function restrictCalendar(fieldsetNr, lineNr) { var calendarName = "tyhjennys_lbl" + fieldsetNr + "_" + lineNr; if(!form.isItem(calendarName) || form.getItemType(calendarName) !== 'calendar') { return; } var earliestDate = new Date(); earliestDate.setDate(earliestDate.getDate() + 4); var earliestDateAbsolute = new Date("2000-01-01"); earliestDate = new Date(Math.max(earliestDate, earliestDateAbsolute)); var tyhjennysCalendar = form.getCalendar(calendarName); if(!tyhjennysCalendar._rangeWeek) { // Check if week days are disabled already tyhjennysCalendar.disableDays('week', [6, 7]); } if(kayttotarkoitus == 1 && kaytto == 1) { var start = new Date(); start.setDate(1); start.setMonth(3); var end = new Date(); end.setMonth(10); end.setDate(end.getDate() - 1); var earliestDate = new Date(); earliestDate.setDate(earliestDate.getDate() + 4); if(end < new Date()) { start.setFullYear(start.getFullYear() + 1); end.setFullYear(end.getFullYear() + 1); } else if(start < earliestDate) { start = earliestDate; } setTimeout(function delayedSetSensitiveRange() { tyhjennysCalendar.setSensitiveRange(start, end); tyhjennysCalendar.showMonth(start); }); } else { setTimeout(function delayedSetSensitiveRange() { tyhjennysCalendar.setSensitiveRange(earliestDate, null); tyhjennysCalendar.showMonth(earliestDate); }); } } function addNewLine(newLine, form, fieldsetNr, empty) { function rename(object) { if ("name" in object) { object.name = object.name.replace("_0", "_" + line_count); object.name = object.name.replace("lbl1", "lbl" + fieldsetNr); } if(object.list) { for (var i = 0; i < object.list.length; ++i) { rename(object.list[i]); } } if(object.options) { for(var i = 0; i < object.options.length; ++i) { rename(object.options[i]); } } } var line_count = parseInt(form.getItemValue("line_count_" + fieldsetNr)); rename(newLine); form.addItem("fieldset" + fieldsetNr, newLine, lineIndex + line_count); addDeleteRowButton(form, fieldsetNr, newLine.name); formReloadOptions(form, "tyhjennystiheys1_lbl" + fieldsetNr + "_" + line_count, empty); formReloadOptions(form, "koko_lbl" + fieldsetNr + "_" + line_count, empty); restrictCalendar(fieldsetNr, line_count); reloadAstia(fieldsetNr, line_count); checkLockingVisibility(); checkWashingRingVisibility(fieldsetNr, line_count); form.setItemValue("line_count_" + fieldsetNr, line_count + 1); setDefaultInterval(fieldsetNr, line_count); initializeDisplayTwoIntervals(fieldsetNr, line_count); application.triggerGlobalDhtmlxEventHandler(form, 'addItem'); updateLaji(); } function addDeleteRowButton(form, fieldsetNr, lineName) { var deleteButtonName = "deleteRow_" + fieldsetNr; if(form.isItem(deleteButtonName)) form.removeItem(deleteButtonName); form.addItem(lineName, { type: "block", blockOffset: 0, className: 'row delete-button-block', list: [{ type: "button", value: "Poista", className: "delete-button btn btn-default pull-right", name: deleteButtonName, userdata: { command: { fieldsetNr: fieldsetNr, lineName: lineName } } }] }); } function deleteLine(form, fieldsetNr, lineName) { form.removeItem(lineName); var line_count = parseInt(form.getItemValue("line_count_" + fieldsetNr)); form.setItemValue("line_count_" + fieldsetNr, line_count - 1); var a = wantsToBuyBin(); $.each(omistusChangedEvent, function(i, e) { e(a); }); displayOmistusInfo(fieldsetNr, line_count - 1); return line_count - 1; } function displayOmistusInfo(fieldsetNr, lineNr) { if(wantsToBuyBin()) { form.showItem("buying_notice"); } else { form.hideItem("buying_notice"); } var showRentingNotice = wantsToRentBin() ; if(showRentingNotice) { form.showItem("renting_notice"); } else { form.hideItem("renting_notice"); } } function showBinInfo(fieldsetNr, lineNr) { var omistus = form.getItemValue('omistus_lbl' + fieldsetNr + '_' + lineNr); var id = form.getItemValue('koko_lbl' + fieldsetNr + '_' + lineNr); if(id && id >= 0) { var pl = Common.kayttotarkoitusToCustomerSegment(kayttotarkoitus, huoneistomaara); var result = new $.Deferred(); setLineData(fieldsetNr, lineNr, 'relatedProducts', result); $.get(baseurl + '/get_customer_pricelist.do', { id: id, kunta: kunta, pricelist: pl, asiakasnro: options.asiakasnro ? options.asiakasnro : undefined }) .done(function(tariff) { function formatPrice(tariff, price, wprice) { var result; price *= 1.24; if(wprice == null || wprice == 0) { result = '{0} €/{1}'; } else { wprice *= 1.24; result = '{0} €/{1}
Käsittelymaksu {2} €/{3}'; var unit = tariff.weightBased == '0' ? tariff.unit : tariff.weightunit; unit = unit ? unit : ''; result = result.replace('{2}', formatCurrency(wprice)).replace('{3}', unit); } var tariffUnit = tariff.unit ? tariff.unit : ''; result = result.replace('{0}', formatCurrency(price)).replace('{1}', tariffUnit ); return result; } (function binInfoLabel() { var maara = form.getItemValue('maara_lbl' + fieldsetNr + '_' + lineNr); var binInfo = tariff.name + ': '; if(maara == 1 || tariff.aprice == null || tariff.aprice == 0 || tariff.aprice == tariff.price) { binInfo += formatPrice(tariff, tariff.price, tariff.wprice); } else { binInfo += 'Ensimmäinen: ' + formatPrice(tariff, tariff.price, tariff.wprice) + ', Seuraavat: ' + formatPrice(tariff, tariff.aprice, tariff.wprice); } if(tariff.description != null) { binInfo += '
' + tariff.description; } form.setItemLabel('bin_info_lbl' + fieldsetNr + '_' + lineNr, binInfo); })(); result.resolve(tariff.relatedProducts); var omistusInfo = ''; for(var i = 0; i < tariff.relatedProducts.length; ++i) { var relatedProduct = tariff.relatedProducts[i]; var isSameAsOrdered = tariff.key.id === relatedProduct.added.id; var isRelatedToNewCustomer = relatedProduct.orderType === null || relatedProduct.orderType === 1; if(isSameAsOrdered || !isRelatedToNewCustomer) { continue; } if(omistus == tariff.relatedProducts[i].ownership || tariff.relatedProducts[i].ownership === null) { var added = tariff.relatedProducts[i].added; omistusInfo += added.name + ': ' + formatPrice(added, added.price, added.wprice) + '
'; if(added.description != null) { omistusInfo += added.description + '
'; } } } form.setItemLabel('omistus_info_lbl' + fieldsetNr + '_' + lineNr, omistusInfo); }); } else { form.setItemLabel('bin_info_lbl' + fieldsetNr + '_' + lineNr, ''); form.setItemLabel('omistus_info_lbl' + fieldsetNr + '_' + lineNr, ''); } } function wantsToBuyBin() { var buyBin = false; forEachValue("omistus_lbl", function(value) { if (value === "1") buyBin = true; }); return buyBin; } function hasOwnBin() { var hasBin = false; forEachValue("omistus_lbl", function(value) { if (value === "2") hasBin = true; }); return hasBin; } function wantsToRentBin() { var buyBin = false; forEachValue("omistus_lbl", function(value) { if (value === "3") buyBin = true; }); return buyBin; } function hasServiceWith(name, value) { if(!$.isArray(value)) { value = [value]; } var result = false; forEachValue(name, function(v, i, j, name) { if($.inArray(v, value) !== -1) { result = true; } }); return result; } } var CreateOrderFormUtils = (function() { function weekOrMonthAndDayToWeek(value) { if(value.indexOf('-') < 0) { return +value; } else { var year = new Date().getFullYear(); return +moment(year + '-' + value).format('w'); } } function weekOrMonthAndDayToDate(value) { var year = new Date().getFullYear(); if(value.indexOf('-') < 0) { return Common.getDateForSearchedWeek(value, year); } else { return new Date(year + '-' + value); } } return { createCalendarRelationshipsForTwoIntervals: function(form, commonPrefix, calendarNameFunc, kayttotarkoitusFunc, kayttoFunc, onlyLeisureUseFunc) { function getDaysBetweenWeeks(start, end) { start = Common.getDateOnly(Common.getStartOfWeek(start)); end = Common.getDateOnly(Common.getEndOfWeek(end)); var result = []; while(start <= end) { result.push(new Date(start)); start.setDate(start.getDate() + 1); } return result; } function getDaysForAYear(start) { start = Common.getStartOfWeek(start); var end = new Date(start); end.setFullYear(end.getFullYear() + 1); return getDaysBetweenWeeks(start, end); } form.attachEvent('onChange', function(name, value) { // 0 = start week of one interval can overlap with the end of the other (e.g. 5-35 and 35-5) // 1 = start week of one interval cannot overlap with the end of the other (e.g. 5-35 and 36-4) var weekOffsetForOverlapping = 1; if(name.indexOf(commonPrefix) === 0) { var interval = name.substr(commonPrefix.length, 1); var startEnd = name.substr(commonPrefix.length + 1, 1); // if cannot find whether it's start or end, interval probably wasn't defined // assume it's the first interval if(!startEnd) { startEnd = interval; interval = '1'; } if(startEnd === '1') { // start changed var itemName = calendarNameFunc(interval, '2', name); var calendar = form.getCalendar(itemName); var start = new Date(value); start = Common.getStartOfNextWeek(start); if(kayttotarkoitusFunc() == '1' && kayttoFunc() == '1') { // summer house start.setMonth(start.getMonth() + 4); start = Common.getStartOfWeek(start); } var end = new Date(value); end.setFullYear(end.getFullYear() + 1); end = Common.getEndOfPrevWeekOrWeek53End(end); if (calendar != null) { calendar.setSensitiveRange(start, end); } // clear the end if it's now before start if(form.getItemValue(itemName) < start) { form.setItemValue(itemName, ''); } } // Change the other interval so that intervals do not overlap var otherInterval = interval === '1' ? '2' : '1'; // If need to cover the whole year, just set the other interval // to cover it var fullYearCoverageRequiredFor = [0, 2, 4]; var coverFullYear = fullYearCoverageRequiredFor.indexOf(+kayttotarkoitusFunc()) !== -1 ; if(coverFullYear) { var start = form.getItemValue(calendarNameFunc(interval, '1', name), true); var end = form.getItemValue(calendarNameFunc(interval, '2', name), true); // If year is already covered, clear the other if(CreateOrderFormUtils.isYearCovered(start, end, -1, -1)) { form.setItemValue(calendarNameFunc(otherInterval, '1', name), ''); form.setItemValue(calendarNameFunc(otherInterval, '2', name), ''); } else { var otherStart = end + weekOffsetForOverlapping; if(otherStart > 53) otherStart = 1; var otherEnd = start - weekOffsetForOverlapping; if(otherEnd < 1) otherEnd = 53; form.setItemValue(calendarNameFunc(otherInterval, '1', name), Common.getDateForSearchedWeek(otherStart)); form.setItemValue(calendarNameFunc(otherInterval, '2', name), Common.getDateForSearchedWeek(otherEnd)); } } else { // If no need to cover the whole year, just make the other interval // shorter to make them not overlap. If the whole other interval // is covered, remove it. var start = form.getItemValue(calendarNameFunc(interval, '1', name), true); var end = form.getItemValue(calendarNameFunc(interval, '2', name), true); var otherStart = form.getItemValue(calendarNameFunc(otherInterval, '1', name), true); var otherEnd = form.getItemValue(calendarNameFunc(otherInterval, '2', name), true); function cover(start, end, otherStart, otherEnd) { if(end < start) end += 53; if(otherEnd < otherStart) otherEnd += 53; return start <= otherStart && otherEnd <= end; } if(cover(start, end, otherStart, otherEnd)) { form.setItemValue(calendarNameFunc(otherInterval, '1', name), ''); form.setItemValue(calendarNameFunc(otherInterval, '2', name), ''); } else if(end >= otherStart && CreateOrderFormUtils.isWeekBetween(end, otherStart, otherEnd)) { var newStart = end + weekOffsetForOverlapping; if(newStart > 53) newStart = 1; form.setItemValue(calendarNameFunc(otherInterval, '1', name), Common.getDateForSearchedWeek(newStart)); } else if(start <= otherEnd && CreateOrderFormUtils.isWeekBetween(start, otherStart, otherEnd)) { var newEnd = start - weekOffsetForOverlapping; if(newEnd < 1) newEnd = 53; form.setItemValue(calendarNameFunc(otherInterval, '2', name), Common.getDateForSearchedWeek(newEnd)); } } } }); }, restrictToCurrentYear: function(form, name) { /*var start = new Date(); start.setMonth(0); start.setDate(1); start = Common.getStartOfWeek(start); var end = new Date(); end.setMonth(11); end.setDate(31); end = Common.getEndOfWeek(end);*/ var calendar = form.getCalendar(name); var start = Common.getMondayOfFirstWeekOfYear(); var end = Common.getSundayOfLastWeekOfYear(); if (calendar != null) { calendar.setSensitiveRange(start, end); } }, restrictToStartOfSummer: function(form, name) { var start = CreateOrderFormUtils.summerStartDate(); var end = CreateOrderFormUtils.summerEndDate(); end = Common.getEndOfWeek(end); var calendar = form.getCalendar(name); if (calendar != null) { calendar.setSensitiveRange(start, end); } }, isWeekBetween: function(x, a, b) { if(a <= b) return a <= x && x <= b; else return x <= b || x >= a; }, isYearCovered: function(vali11, vali12, vali21, vali22) { for(var i = 1; i <= 53; ++i) { if(!CreateOrderFormUtils.isWeekBetween(i, vali11, vali12) && !CreateOrderFormUtils.isWeekBetween(i, vali21, vali22)) { return false; } } return true; }, summerStartWeek: function() { var summerStart = "18"; return weekOrMonthAndDayToWeek(summerStart); }, summerEndWeek: function() { var summerEnd = "40"; return weekOrMonthAndDayToWeek(summerEnd); }, summerStartDate: function() { var summerStart = "18"; return weekOrMonthAndDayToDate(summerStart); }, summerEndDate: function() { var summerEnd = "40"; return weekOrMonthAndDayToDate(summerEnd); } }; })(); createOrderForm._fieldRules = [{}]; createOrderForm.setFieldRules = function(rules) { createOrderForm._fieldRules = rules; } createOrderForm._omistusInfoRules = [{}]; // This needs special profile to work (currently only jatekukko, needs to be change to actual property setting) createOrderForm.setOmistusInfoRules = function(rules) { createOrderForm._omistusInfoRules = rules; }