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", "Tyhjennysosoite ja ilmoittaja", 200);
orderTabbar.addTab("a4", "Laskutus", 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, 2, 1, 5];
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']);
var check1 = forms['a1.5'].isItemChecked('wholeYear', true);
var check2 = forms['a1.5'].isItemChecked('wholeYear', false);
if (check1 === undefined && check2 === undefined) {
forms['a1.5'].hideItem("month-fieldset");
}
else {
var wholeYear = !!forms['a1.5'].getCheckedValue('wholeYear');
// month-fieldset
if (wholeYear) {
forms['a1.5'].hideItem("month-fieldset");
}
else {
forms['a1.5'].showItem("month-fieldset");
}
}
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'));
var check1 = forms['a1.5'].isItemChecked('wholeYear', true);
var check2 = forms['a1.5'].isItemChecked('wholeYear', false);
if (check1 === undefined && check2 === undefined) {
forms['a1.5'].hideItem("month-fieldset");
}
else {
var wholeYear = !!forms['a1.5'].getCheckedValue('wholeYear');
// month-fieldset
if (wholeYear) {
forms['a1.5'].hideItem("month-fieldset");
}
else {
forms['a1.5'].showItem("month-fieldset");
}
}
} 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('onBeforeValidate', function() {
var check1 = forms["a1.5"].isItemChecked('wholeYear', true);
var check2 = forms["a1.5"].isItemChecked('wholeYear', false);
if (check1 === undefined && check2 === undefined) {
$(".kayttoaika").addClass('validate_error');
return false;
}
$(".kayttoaika").removeClass('validate_error');
var wholeYear = !!forms["a1.5"].getCheckedValue('wholeYear');
// month-fieldset
if (!wholeYear) {
var valid = false;
var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
for (month of months) {
var checked = forms["a1.5"].getItemValue(month);
if (checked === 1) {
valid = true;
break;
}
}
if (!valid) {
$(".month-fieldset").addClass('validate_error');
} else {
$(".month-fieldset").removeClass('validate_error');
}
return valid;
}
$(".month-fieldset").removeClass('validate_error');
return true;
});
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', 'Huoneistolukumää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();
}
}
});
})();
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);
}
if(value === 5) {
forms["a1"].disableItem("next");
} else {
forms["a1"].enableItem("next");
}
}
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ö",
"Isännöitsijätoimiston tai isännöitsijän nimi",
"Yhteyshenkilö",
"Yhteyshenkilö"
];
var nameLabels = [
"Nimi",
"Nimi",
"Taloyhtiön 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["a4"].hideItem("contract_info.text");
}
else {
forms['a4'].showItem('contract_info.text');
}
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, 2, 3, 4];
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ätietoja";
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 = "_2";
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() + 4);
var aboveWeeks = 0;
var currentWeek = calendar.getWeekNumber(new Date());
var possibleSaturday = new Date();
var possibleSunday = new Date();
possibleSaturday.setDate(possibleSaturday.getDate() + 2);
possibleSunday.setDate(possibleSunday.getDate() + 1);
var calculatedWeek = calendar.getWeekNumber(earliestDate);
if(calculatedWeek > currentWeek){
aboveWeeks = calculatedWeek - currentWeek;
earliestDate.setDate(earliestDate.getDate() + aboveWeeks*2);
calculatedWeek = calendar.getWeekNumber(possibleSaturday);
if(calculatedWeek > currentWeek){
earliestDate.setDate(earliestDate.getDate() - aboveWeeks*1);
calculatedWeek = calendar.getWeekNumber(possibleSunday);
if(calculatedWeek > currentWeek){
earliestDate.setDate(earliestDate.getDate() - aboveWeeks*1);
}
}
}
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 = [0,1,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(id === 'a4') {
var kayttotarkoitus = getKayttotarkoitusAsSelected();
if(kayttotarkoitus != 0 && kayttotarkoitus != 1) {
forms['a4'].hideItem('henkilotunnus_1');
forms['a4'].clearValidation('henkilotunnus_1');
} else {
forms['a4'].showItem('henkilotunnus_1');
forms['a4'].setValidation('henkilotunnus_1', "NotEmpty,checkSocialSecurityNumber");
}
}
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.255) + ' €
';
for(var i = 0; i < tariff.relatedProducts.length; ++i) {
var product = tariff.relatedProducts[i];
message += product.name + ' ' + formatCurrency((product.price + product.wprice) * 1.255) + ' €
';
}
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.255;
var unitFormattedPrice = formatCurrency(unitPrice);
if([0, 1, 2, 3, 4].indexOf(kayttotarkoitus) != -1
&& [4648, 4638,4658].indexOf(product.key.id) == -1){
var totalFormattedPrice=formatCurrency((product.price + product.wprice) * 1.255 * huoneistomaara);
priceMessage += product.name + ' ' + huoneistomaara + ' × ' + unitFormattedPrice + '€ = '+ totalFormattedPrice + ' €';
}
else{
priceMessage += product.name + ' ' + formatCurrency((product.price + product.wprice) * 1.255) + ' €';
}
if (false &&
[].indexOf(product.productgroup) != -1 &&
product.unit && !!product.unit.trim()) {
priceMessage += "/" + product.unit;
}
return priceMessage + '
';
}
// Change these to what are needed
if([].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.255) + ' €
';
//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.255) + ' €
';
}
}
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 = ['B'];
var glassTypes = ['L'];
var cardboardTypes = ['K'];
var metalTypes = ['M'];
var communityTypes = ['S'];
var paperTypes = ['D'];
var plasticTypes = ['MUO'];
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 week ? week : '';
}
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);
}
});
})();
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);
});
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);
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(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);
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);
}
else if (name.indexOf('tyhjennystiheys') === 0) {
var lineNr = name.substr(22);
var fieldsetNr = name.substr(20, name.lastIndexOf("_") - 20);
checkAllRules(true);
}
});
} // 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);
}
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);
}
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(4);
var end = new Date();
end.setMonth(9);
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);
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 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.summerCoverageStartDate();
var end = CreateOrderFormUtils.summerCoverageEndDate();
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 = "39";
return weekOrMonthAndDayToWeek(summerEnd);
},
summerCoverageStartDate: function() {
var summerStart = "18";
return weekOrMonthAndDayToDate(summerStart);
},
summerCoverageEndDate: function() {
var summerEnd = "39";
return weekOrMonthAndDayToDate(summerEnd);
},
summerCoverageStartDateToWeek: function() {
var summerStart = "18";
return weekOrMonthAndDayToWeek(summerStart);
},
summerCoverageEndDateToWeek: function() {
var summerEnd = "39";
return weekOrMonthAndDayToWeek(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;
}