Projekt

Allgemein

Profil

Herunterladen (21,7 KB) Statistiken
| Zweig: | Markierung: | Revision:
0935b012 Bernd Bleßmann
namespace('kivi.Order', function(ns) {
ns.check_cv = function() {
if ($('#type').val() == 'sales_order') {
7ede2933 Sven Schöling
if ($('#order_customer_id').val() === '') {
0935b012 Bernd Bleßmann
alert(kivi.t8('Please select a customer.'));
return false;
}
} else {
7ede2933 Sven Schöling
if ($('#order_vendor_id').val() === '') {
0935b012 Bernd Bleßmann
alert(kivi.t8('Please select a vendor.'));
return false;
}
}
return true;
};

e09f2da3 Bernd Bleßmann
ns.check_save_duplicate_parts = function() {
var id_arr = $('[name="order.orderitems[].parts_id"]').map(function() {return this.value;}).get();

var i, obj = {}, pos = [];

for (i = 0; i < id_arr.length; i++) {
var id = id_arr[i];
if (obj.hasOwnProperty(id)) {
pos.push(i + 1);
}
obj[id] = 0;
}

if (pos.length > 0) {
return confirm(kivi.t8("There are duplicate parts at positions") + "\n"
+ pos.join(', ') + "\n"
+ kivi.t8("Do you really want to save?"));
}
return true;
};

ns.save = function(warn_on_duplicates) {
0935b012 Bernd Bleßmann
if (!ns.check_cv()) return;
e09f2da3 Bernd Bleßmann
if (warn_on_duplicates && !ns.check_save_duplicate_parts()) return;
0935b012 Bernd Bleßmann
var data = $('#order_form').serializeArray();
data.push({ name: 'action', value: 'Order/save' });

$.post("controller.pl", data, kivi.eval_json_result);
};

e09f2da3 Bernd Bleßmann
ns.save_and_delivery_order = function(warn_on_duplicates) {
0935b012 Bernd Bleßmann
if (!ns.check_cv()) return;
e09f2da3 Bernd Bleßmann
if (warn_on_duplicates && !ns.check_save_duplicate_parts()) return;
0935b012 Bernd Bleßmann
var data = $('#order_form').serializeArray();
data.push({ name: 'action', value: 'Order/save_and_delivery_order' });

$.post("controller.pl", data, kivi.eval_json_result);
};

07dd84c0 Bernd Bleßmann
ns.save_and_invoice = function(warn_on_duplicates) {
if (!ns.check_cv()) return;
if (warn_on_duplicates && !ns.check_save_duplicate_parts()) return;

var data = $('#order_form').serializeArray();
data.push({ name: 'action', value: 'Order/save_and_invoice' });

$.post("controller.pl", data, kivi.eval_json_result);
};

0935b012 Bernd Bleßmann
ns.delete_order = function() {
var data = $('#order_form').serializeArray();
data.push({ name: 'action', value: 'Order/delete' });

$.post("controller.pl", data, kivi.eval_json_result);
};

ns.show_print_options = function() {
if (!ns.check_cv()) return;

kivi.popup_dialog({
id: 'print_options',
dialog: {
title: kivi.t8('Print options'),
width: 800,
height: 300
}
});
};

ns.print = function() {
$('#print_options').dialog('close');

var data = $('#order_form').serializeArray();
data = data.concat($('#print_options_form').serializeArray());
data.push({ name: 'action', value: 'Order/print' });

$.post("controller.pl", data, kivi.eval_json_result);
};

ns.download_pdf = function(pdf_filename, key) {
var data = [];
data.push({ name: 'action', value: 'Order/download_pdf' });
data.push({ name: 'type', value: $('#type').val() });
data.push({ name: 'pdf_filename', value: pdf_filename });
data.push({ name: 'key', value: key });
$.download("controller.pl", data);
};

ns.email = function() {
if (!ns.check_cv()) return;
var data = $('#order_form').serializeArray();
data.push({ name: 'action', value: 'Order/show_email_dialog' });

$.post("controller.pl", data, kivi.eval_json_result);
};

var email_dialog;

d83928f0 Bernd Bleßmann
ns.setup_send_email_dialog = function() {
kivi.SalesPurchase.show_all_print_options_elements();
kivi.SalesPurchase.show_print_options_elements([ 'sendmode', 'media', 'copies', 'remove_draft' ], false);

$('#print_options_form table').first().remove().appendTo('#email_form_print_options');

var to_focus = $('#email_form_to').val() === '' ? 'to' : 'subject';
$('#email_form_' + to_focus).focus();
};

ns.finish_send_email_dialog = function() {
kivi.SalesPurchase.show_all_print_options_elements();

$('#email_form_print_options table').first().remove().prependTo('#print_options_form');
return true;
};

0935b012 Bernd Bleßmann
ns.show_email_dialog = function(html) {
d83928f0 Bernd Bleßmann
var id = 'send_email_dialog';
0935b012 Bernd Bleßmann
var dialog_params = {
id: id,
width: 800,
d83928f0 Bernd Bleßmann
height: 600,
title: kivi.t8('Send email'),
0935b012 Bernd Bleßmann
modal: true,
d83928f0 Bernd Bleßmann
beforeClose: kivi.Order.finish_send_email_dialog,
0935b012 Bernd Bleßmann
close: function(event, ui) {
email_dialog.remove();
d83928f0 Bernd Bleßmann
}
0935b012 Bernd Bleßmann
};

$('#' + id).remove();

email_dialog = $('<div style="display:none" id="' + id + '"></div>').appendTo('body');
email_dialog.html(html);
email_dialog.dialog(dialog_params);

d83928f0 Bernd Bleßmann
kivi.Order.setup_send_email_dialog();

0935b012 Bernd Bleßmann
$('.cancel').click(ns.close_email_dialog);

return true;
};

ns.send_email = function() {
var data = $('#order_form').serializeArray();
d83928f0 Bernd Bleßmann
data = data.concat($('[name^="email_form."]').serializeArray());
data = data.concat($('[name^="print_options."]').serializeArray());
0935b012 Bernd Bleßmann
data.push({ name: 'action', value: 'Order/send_email' });
$.post("controller.pl", data, kivi.eval_json_result);
};

ns.close_email_dialog = function() {
email_dialog.dialog("close");
};

96caf7a5 Geoffrey Richardson
ns.reload_cv_dependant_selections = function() {
0935b012 Bernd Bleßmann
var data = $('#order_form').serializeArray();
data.push({ name: 'action', value: 'Order/customer_vendor_changed' });

$.post("controller.pl", data, kivi.eval_json_result);
};

ns.reformat_number = function(event) {
$(event.target).val(kivi.format_amount(kivi.parse_amount($(event.target).val()), -2));
};

ns.recalc_amounts_and_taxes = function() {
var data = $('#order_form').serializeArray();
data.push({ name: 'action', value: 'Order/recalc_amounts_and_taxes' });

$.post("controller.pl", data, kivi.eval_json_result);
};

ns.unit_change = function(event) {
var row = $(event.target).parents("tbody").first();
var item_id_dom = $(row).find('[name="orderitem_ids[+]"]');
var sellprice_dom = $(row).find('[name="order.orderitems[].sellprice_as_number"]');
var select_elt = $(row).find('[name="order.orderitems[].unit"]');

var oldval = $(select_elt).data('oldval');
$(select_elt).data('oldval', $(select_elt).val());

var data = $('#order_form').serializeArray();
data.push({ name: 'action', value: 'Order/unit_changed' });
data.push({ name: 'item_id', value: item_id_dom.val() });
data.push({ name: 'old_unit', value: oldval });
data.push({ name: 'sellprice_dom_id', value: sellprice_dom.attr('id') });

$.post("controller.pl", data, kivi.eval_json_result);
};

ns.update_sellprice = function(item_id, price_str) {
var row = $('#item_' + item_id).parents("tbody").first();
var price_elt = $(row).find('[name="order.orderitems[].sellprice_as_number"]');
var html_elt = $(row).find('[name="sellprice_text"]');
price_elt.val(price_str);
html_elt.html(price_str);
};

28a7a539 Bernd Bleßmann
ns.load_second_row = function(row) {
var item_id_dom = $(row).find('[name="orderitem_ids[+]"]');
var div_elt = $(row).find('[name="second_row"]');

if ($(div_elt).data('loaded') == 1) {
return;
}
var data = $('#order_form').serializeArray();
9eb765a5 Bernd Bleßmann
data.push({ name: 'action', value: 'Order/load_second_rows' });
data.push({ name: 'item_ids[]', value: item_id_dom.val() });
28a7a539 Bernd Bleßmann
$.post("controller.pl", data, kivi.eval_json_result);
};

9eb765a5 Bernd Bleßmann
ns.load_all_second_rows = function() {
var rows = $('.row_entry').filter(function(idx, elt) {
return $(elt).find('[name="second_row"]').data('loaded') != 1;
});

var item_ids = $.map(rows, function(elt) {
var item_id = $(elt).find('[name="orderitem_ids[+]"]').val();
return { name: 'item_ids[]', value: item_id };
});

if (item_ids.length == 0) {
return;
}

var data = $('#order_form').serializeArray();
data.push({ name: 'action', value: 'Order/load_second_rows' });
data = data.concat(item_ids);

$.post("controller.pl", data, kivi.eval_json_result);
};

ns.hide_second_row = function(row) {
$(row).children().not(':first').hide();
2659735b Bernd Bleßmann
$(row).data('expanded', 0);
9eb765a5 Bernd Bleßmann
var elt = $(row).find('.expand');
91d46243 Bernd Bleßmann
elt.attr('src', "image/expand.svg");
9eb765a5 Bernd Bleßmann
elt.attr('alt', kivi.t8('Show details'));
elt.attr('title', kivi.t8('Show details'));
};

ns.show_second_row = function(row) {
$(row).children().not(':first').show();
2659735b Bernd Bleßmann
$(row).data('expanded', 1);
9eb765a5 Bernd Bleßmann
var elt = $(row).find('.expand');
91d46243 Bernd Bleßmann
elt.attr('src', "image/collapse.svg");
9eb765a5 Bernd Bleßmann
elt.attr('alt', kivi.t8('Hide details'));
elt.attr('title', kivi.t8('Hide details'));
};

ns.toggle_second_row = function(row) {
2659735b Bernd Bleßmann
if ($(row).data('expanded') == 1) {
9eb765a5 Bernd Bleßmann
ns.hide_second_row(row);
} else {
ns.show_second_row(row);
}
};
28a7a539 Bernd Bleßmann
0935b012 Bernd Bleßmann
ns.init_row_handlers = function() {
kivi.run_once_for('.recalc', 'on_change_recalc', function(elt) {
$(elt).change(ns.recalc_amounts_and_taxes);
});

kivi.run_once_for('.reformat_number', 'on_change_reformat', function(elt) {
$(elt).change(ns.reformat_number);
});

kivi.run_once_for('.unitselect', 'on_change_unit_with_oldval', function(elt) {
$(elt).data('oldval', $(elt).val());
$(elt).change(ns.unit_change);
});

kivi.run_once_for('.row_entry', 'on_kbd_click_show_hide', function(elt) {
$(elt).keydown(function(event) {
7ede2933 Sven Schöling
if(event.keyCode == 40 && event.shiftKey === true) {
0935b012 Bernd Bleßmann
// shift arrow down
event.preventDefault();
28a7a539 Bernd Bleßmann
var row = $(event.target).parents(".row_entry").first();
ns.load_second_row(row);
9eb765a5 Bernd Bleßmann
ns.show_second_row(row);
0935b012 Bernd Bleßmann
return false;
}
7ede2933 Sven Schöling
if(event.keyCode == 38 && event.shiftKey === true) {
0935b012 Bernd Bleßmann
// shift arrow up
event.preventDefault();
28a7a539 Bernd Bleßmann
var row = $(event.target).parents(".row_entry").first();
9eb765a5 Bernd Bleßmann
ns.hide_second_row(row);
0935b012 Bernd Bleßmann
return false;
}
});
});
9eb765a5 Bernd Bleßmann
kivi.run_once_for('.expand', 'expand_second_row', function(elt) {
$(elt).click(function(event) {
event.preventDefault();
var row = $(event.target).parents(".row_entry").first();
ns.load_second_row(row);
ns.toggle_second_row(row);
return false;
})
});

0935b012 Bernd Bleßmann
};

5737ce39 Bernd Bleßmann
ns.redisplay_line_values = function(is_sales, data) {
$('.row_entry').each(function(idx, elt) {
$(elt).find('[name="linetotal"]').html(data[idx][0]);
if (is_sales && $(elt).find('[name="second_row"]').data('loaded') == 1) {
var mt = data[idx][1];
var mp = data[idx][2];
var h = '<span';
if (mt[0] === '-') h += ' class="plus0"';
h += '>' + mt + '&nbsp;&nbsp;' + mp + '%';
h += '</span>';
$(elt).find('[name="linemargin"]').html(h);
}
0935b012 Bernd Bleßmann
});
};

ns.renumber_positions = function() {
$('.row_entry [name="position"]').each(function(idx, elt) {
$(elt).html(idx+1);
});
};

ns.reorder_items = function(order_by) {
var dir = $('#' + order_by + '_header_id a img').attr("data-sort-dir");
$('#row_table_id thead a img').remove();

var src;
if (dir == "1") {
dir = "0";
src = "image/up.png";
} else {
dir = "1";
src = "image/down.png";
7ede2933 Sven Schöling
}
0935b012 Bernd Bleßmann
$('#' + order_by + '_header_id a').append('<img border=0 data-sort-dir=' + dir + ' src=' + src + ' alt="' + kivi.t8('sort items') + '">');

var data = $('#order_form').serializeArray();
data.push({ name: 'action', value: 'Order/reorder_items' });
data.push({ name: 'order_by', value: order_by });
data.push({ name: 'sort_dir', value: dir });

$.post("controller.pl", data, kivi.eval_json_result);
};

ns.redisplay_items = function(data) {
var old_rows = $('.row_entry').detach();
var new_rows = [];
$(data).each(function(idx, elt) {
new_rows.push(old_rows[elt.old_pos - 1]);
});
$(new_rows).appendTo($('#row_table_id'));
ns.renumber_positions();
};

ns.add_item = function() {
7ede2933 Sven Schöling
if ($('#add_item_parts_id').val() === '') return;
0935b012 Bernd Bleßmann
if (!ns.check_cv()) return;

$('#row_table_id thead a img').remove();

var data = $('#order_form').serializeArray();
data.push({ name: 'action', value: 'Order/add_item' });

$.post("controller.pl", data, kivi.eval_json_result);
};

ns.show_multi_items_dialog = function() {
if (!ns.check_cv()) return;

$('#row_table_id thead a img').remove();

kivi.popup_dialog({
url: 'controller.pl?action=Order/show_multi_items_dialog',
data: { type: $('#type').val(),
callback: 'Order/add_multi_items',
callback_data_id: 'order_form' },
id: 'jq_multi_items_dialog',
dialog: {
title: kivi.t8('Add multiple items'),
width: 800,
height: 500
}
});
return true;
};

ns.close_multi_items_dialog = function() {
$('#jq_multi_items_dialog').dialog('close');
};

ns.delete_order_item_row = function(clicked) {
var row = $(clicked).parents("tbody").first();
$(row).remove();

ns.renumber_positions();
ns.recalc_amounts_and_taxes();
};

ns.row_table_scroll_down = function() {
$('#row_table_scroll_id').scrollTop($('#row_table_scroll_id')[0].scrollHeight);
};

ns.show_longdescription_dialog = function(clicked) {
var row = $(clicked).parents("tbody").first();
var position = $(row).find('[name="position"]').html();
var partnumber = $(row).find('[name="partnumber"]').html();
var description_elt = $(row).find('[name="order.orderitems[].description"]');
var description = description_elt.val();
var longdescription_elt = $(row).find('[name="order.orderitems[].longdescription"]');
var longdescription;

if (!longdescription_elt.length) {
var data = [];
data.push({ name: 'action', value: 'Order/get_item_longdescription' });
data.push({ name: 'type', value: $('#type').val() });
data.push({ name: 'item_id', value: $(row).find('[name="order.orderitems[+].id"]').val() });
data.push({ name: 'parts_id', value: $(row).find('[name="order.orderitems[].parts_id"]').val() });
$.ajax({
url: 'controller.pl',
data: data,
method: "GET",
async: false,
dataType: 'text',
success: function(val){
longdescription = val;
}
});
} else {
longdescription = longdescription_elt.val();
}

var params = { runningnumber: position,
partnumber: partnumber,
description: description,
default_longdescription: longdescription,
set_function: function(val){
longdescription_elt.remove();
$('<input type="hidden" name="order.orderitems[].longdescription">').insertAfter(description_elt).val(val);
}
};

kivi.SalesPurchase.edit_longdescription_with_params(params);
};

ns.price_chooser_item_row = function(clicked) {
var row = $(clicked).parents("tbody").first();
var item_id_dom = $(row).find('[name="orderitem_ids[+]"]');

var data = $('#order_form').serializeArray();
data.push({ name: 'action', value: 'Order/price_popup' });
data.push({ name: 'item_id', value: item_id_dom.val() });

$.post("controller.pl", data, kivi.eval_json_result);
};

ns.update_price_source = function(item_id, source, descr, price_str, price_editable) {
var row = $('#item_' + item_id).parents("tbody").first();
var source_elt = $(row).find('[name="order.orderitems[].active_price_source"]');
var button_elt = $(row).find('[name="price_chooser_button"]');

button_elt.val(button_elt.val().replace(/.*\|/, descr + " |"));
source_elt.val(source);

var editable_div_elt = $(row).find('[name="editable_price"]');
var not_editable_div_elt = $(row).find('[name="not_editable_price"]');
7ede2933 Sven Schöling
if (price_editable == 1 && source === '') {
0935b012 Bernd Bleßmann
// editable
$(editable_div_elt).show();
$(not_editable_div_elt).hide();
$(editable_div_elt).find(':input').prop("disabled", false);
$(not_editable_div_elt).find(':input').prop("disabled", true);
} else {
// not editable
$(editable_div_elt).hide();
$(not_editable_div_elt).show();
$(editable_div_elt).find(':input').prop("disabled", true);
$(not_editable_div_elt).find(':input').prop("disabled", false);
}

if (price_str) {
var price_elt = $(row).find('[name="order.orderitems[].sellprice_as_number"]');
var html_elt = $(row).find('[name="sellprice_text"]');
price_elt.val(price_str);
html_elt.html(price_str);
ns.recalc_amounts_and_taxes();
}

kivi.io.close_dialog();
};

ns.update_discount_source = function(item_id, source, descr, discount_str, price_editable) {
var row = $('#item_' + item_id).parents("tbody").first();
var source_elt = $(row).find('[name="order.orderitems[].active_discount_source"]');
var button_elt = $(row).find('[name="price_chooser_button"]');

button_elt.val(button_elt.val().replace(/\|.*/, "| " + descr));
source_elt.val(source);

var editable_div_elt = $(row).find('[name="editable_discount"]');
var not_editable_div_elt = $(row).find('[name="not_editable_discount"]');
7ede2933 Sven Schöling
if (price_editable == 1 && source === '') {
0935b012 Bernd Bleßmann
// editable
$(editable_div_elt).show();
$(not_editable_div_elt).hide();
$(editable_div_elt).find(':input').prop("disabled", false);
$(not_editable_div_elt).find(':input').prop("disabled", true);
} else {
// not editable
$(editable_div_elt).hide();
$(not_editable_div_elt).show();
$(editable_div_elt).find(':input').prop("disabled", true);
$(not_editable_div_elt).find(':input').prop("disabled", false);
}

if (discount_str) {
var discount_elt = $(row).find('[name="order.orderitems[].discount_as_percent"]');
var html_elt = $(row).find('[name="discount_text"]');
discount_elt.val(discount_str);
html_elt.html(discount_str);
ns.recalc_amounts_and_taxes();
}

kivi.io.close_dialog();
};

5c859d64 Bernd Bleßmann
ns.show_periodic_invoices_config_dialog = function() {
if ($('#type').val() !== 'sales_order') return;

kivi.popup_dialog({
url: 'controller.pl?action=Order/show_periodic_invoices_config_dialog',
data: { type : $('#type').val(),
id : $('#id').val(),
config : $('#order_periodic_invoices_config').val(),
customer_id: $('#order_customer_id').val(),
transdate : $('#order_transdate').val(),
language_id: $('#language_id').val()
},
id: 'jq_periodic_invoices_config_dialog',
load: kivi.reinit_widgets,
dialog: {
title: kivi.t8('Edit the configuration for periodic invoices'),
width: 800,
height: 650
}
});
return true;
};

ns.close_periodic_invoices_config_dialog = function() {
$('#jq_periodic_invoices_config_dialog').dialog('close');
};

ns.assign_periodic_invoices_config = function() {
var data = $('[name="Form"]').serializeArray();
data.push({ name: 'type', value: $('#type').val() });
data.push({ name: 'action', value: 'Order/assign_periodic_invoices_config' });
$.post("controller.pl", data, kivi.eval_json_result);
};

ns.check_save_active_periodic_invoices = function() {
var type = $('#type').val();
if (type !== 'sales_order') return true;

var active = false;
$.ajax({
url: 'controller.pl',
data: { action: 'Order/get_has_active_periodic_invoices',
type : type,
id : $('#id').val(),
config: $('#order_periodic_invoices_config').val(),
},
method: "GET",
async: false,
dataType: 'text',
success: function(val){
active = val;
}
});

if (active == 1) {
return confirm(kivi.t8('This sales order has an active configuration for periodic invoices. If you save then all subsequently created invoices will contain those changes as well, but not those that have already been created. Do you want to continue?'));
}

return true;
};

0935b012 Bernd Bleßmann
});

$(function(){
if ($('#type').val() == 'sales_order') {
96caf7a5 Geoffrey Richardson
$('#order_customer_id').change(kivi.Order.reload_cv_dependant_selections);
0935b012 Bernd Bleßmann
} else {
96caf7a5 Geoffrey Richardson
$('#order_vendor_id').change(kivi.Order.reload_cv_dependant_selections);
0935b012 Bernd Bleßmann
}

if ($('#type').val() == 'sales_order') {
$('#add_item_parts_id').on('set_item:PartPicker', function(e,o) { $('#add_item_sellprice_as_number').val(kivi.format_amount(o.sellprice, -2)) });
} else {
$('#add_item_parts_id').on('set_item:PartPicker', function(e,o) { $('#add_item_sellprice_as_number').val(kivi.format_amount(o.lastcost, -2)) });
}
$('#add_item_parts_id').on('set_item:PartPicker', function(e,o) { $('#add_item_description').val(o.description) });
$('#add_item_parts_id').on('set_item:PartPicker', function(e,o) { $('#add_item_unit').val(o.unit) });

$('.add_item_input').keydown(function(event) {
if(event.keyCode == 13) {
event.preventDefault();
kivi.Order.add_item();
return false;
}
});

kivi.Order.init_row_handlers();

$('#row_table_id').on('sortstop', function(event, ui) {
$('#row_table_id thead a img').remove();
kivi.Order.renumber_positions();
});
9eb765a5 Bernd Bleßmann
$('#expand_all').on('click', function(event) {
event.preventDefault();
2659735b Bernd Bleßmann
if ($('#expand_all').data('expanded') == 1) {
$('#expand_all').data('expanded', 0);
91d46243 Bernd Bleßmann
$('#expand_all').attr('src', 'image/expand.svg');
9eb765a5 Bernd Bleßmann
$('#expand_all').attr('alt', kivi.t8('Show all details'));
$('#expand_all').attr('title', kivi.t8('Show all details'));
$('.row_entry').each(function(idx, elt) {
kivi.Order.hide_second_row(elt);
});
} else {
2659735b Bernd Bleßmann
$('#expand_all').data('expanded', 1);
91d46243 Bernd Bleßmann
$('#expand_all').attr('src', "image/collapse.svg");
9eb765a5 Bernd Bleßmann
$('#expand_all').attr('alt', kivi.t8('Hide all details'));
$('#expand_all').attr('title', kivi.t8('Hide all details'));
kivi.Order.load_all_second_rows();
$('.row_entry').each(function(idx, elt) {
kivi.Order.show_second_row(elt);
});
}
return false;
});
2659735b Bernd Bleßmann
0935b012 Bernd Bleßmann
});