Revision 0935b012
Von Bernd Bleßmann vor etwa 8 Jahren hinzugefügt
templates/webpages/order/tabs/basic_data.html | ||
---|---|---|
145 | 145 |
|
146 | 146 |
[%- PROCESS order/tabs/_item_input.html %] |
147 | 147 |
|
148 |
[% L.button_tag('show_multi_items_dialog()', LxERP.t8('Add multiple parts')) %]</td>
|
|
148 |
[% L.button_tag('kivi.Order.show_multi_items_dialog()', LxERP.t8('Add multiple items')) %]</td>
|
|
149 | 149 |
|
150 | 150 |
<table width="100%"> |
151 | 151 |
<tr> |
... | ... | |
159 | 159 |
<th class="listheading" nowrap width="3" >[%- 'position' | $T8 %] </th> |
160 | 160 |
<th class="listheading" style='text-align:center' nowrap width="1"><img src="image/updown.png" alt="[%- LxERP.t8('reorder item') %]"></th> |
161 | 161 |
<th class="listheading" style='text-align:center' nowrap width="1"><img src="image/close.png" alt="[%- LxERP.t8('delete item') %]"></th> |
162 |
<th id="partnumber_header_id" class="listheading" nowrap width="15"><a href='#' onClick='javascript:reorder_items("partnumber")'> [%- 'Partnumber' | $T8 %]</a></th> |
|
163 |
<th id="description_header_id" class="listheading" nowrap ><a href='#' onClick='javascript:reorder_items("description")'>[%- 'Description' | $T8 %]</a></th> |
|
164 |
<th id="qty_header_id" class="listheading" nowrap width="5" ><a href='#' onClick='javascript:reorder_items("qty")'> [%- 'Qty' | $T8 %]</a></th> |
|
162 |
<th id="partnumber_header_id" class="listheading" nowrap width="15"><a href='#' onClick='javascript:kivi.Order.reorder_items("partnumber")'> [%- 'Partnumber' | $T8 %]</a></th>
|
|
163 |
<th id="description_header_id" class="listheading" nowrap ><a href='#' onClick='javascript:kivi.Order.reorder_items("description")'>[%- 'Description' | $T8 %]</a></th>
|
|
164 |
<th id="qty_header_id" class="listheading" nowrap width="5" ><a href='#' onClick='javascript:kivi.Order.reorder_items("qty")'> [%- 'Qty' | $T8 %]</a></th>
|
|
165 | 165 |
<th class="listheading" nowrap width="5" >[%- 'Price Factor' | $T8 %] </th> |
166 | 166 |
<th class="listheading" nowrap width="5" >[%- 'Unit' | $T8 %] </th> |
167 | 167 |
<th class="listheading" nowrap width="5" >[%- 'Price Source' | $T8 %] </th> |
168 |
<th id="sellprice_header_id" class="listheading" nowrap width="15" ><a href='#' onClick='javascript:reorder_items("sellprice")'> [%- 'Price' | $T8 %]</a></th> |
|
169 |
<th id="discount_header_id" class="listheading" nowrap width="15" ><a href='#' onClick='javascript:reorder_items("discount")'> [%- 'Discount' | $T8 %]</a></th> |
|
168 |
<th id="sellprice_header_id" class="listheading" nowrap width="15" ><a href='#' onClick='javascript:kivi.Order.reorder_items("sellprice")'> [%- 'Price' | $T8 %]</a></th>
|
|
169 |
<th id="discount_header_id" class="listheading" nowrap width="15" ><a href='#' onClick='javascript:kivi.Order.reorder_items("discount")'> [%- 'Discount' | $T8 %]</a></th>
|
|
170 | 170 |
<th class="listheading" nowrap width="10">[%- 'Extended' | $T8 %] </th> |
171 | 171 |
</tr> |
172 | 172 |
</thead> |
... | ... | |
264 | 264 |
|
265 | 265 |
</div> |
266 | 266 |
|
267 |
|
|
268 | 267 |
[% L.sortable_element('#row_table_id') %] |
269 |
|
|
270 |
<script type='text/javascript'> |
|
271 |
function reload_cv_dependend_selections() { |
|
272 |
var data = $('#order_form').serializeArray(); |
|
273 |
data.push({ name: 'action', value: 'Order/customer_vendor_changed' }); |
|
274 |
|
|
275 |
$.post("controller.pl", data, kivi.eval_json_result); |
|
276 |
} |
|
277 |
|
|
278 |
function unit_change(event) { |
|
279 |
var row = $(event.target).parents("tbody").first(); |
|
280 |
var item_id_dom = $(row).find('[name="orderitem_ids[+]"]'); |
|
281 |
var sellprice_dom = $(row).find('[name="order.orderitems[].sellprice_as_number"]'); |
|
282 |
var select_elt = $(row).find('[name="order.orderitems[].unit"]'); |
|
283 |
|
|
284 |
var oldval = $(select_elt).data('oldval'); |
|
285 |
$(select_elt).data('oldval', $(select_elt).val()); |
|
286 |
|
|
287 |
var data = $('#order_form').serializeArray(); |
|
288 |
data.push({ name: 'action', value: 'Order/unit_changed' }); |
|
289 |
data.push({ name: 'item_id', value: item_id_dom.val() }); |
|
290 |
data.push({ name: 'old_unit', value: oldval }); |
|
291 |
data.push({ name: 'sellprice_dom_id', value: sellprice_dom.attr('id') }); |
|
292 |
|
|
293 |
$.post("controller.pl", data, kivi.eval_json_result); |
|
294 |
} |
|
295 |
|
|
296 |
function update_sellprice(item_id, price_str) { |
|
297 |
var row = $('#item_' + item_id).parents("tbody").first(); |
|
298 |
var price_elt = $(row).find('[name="order.orderitems[].sellprice_as_number"]'); |
|
299 |
var html_elt = $(row).find('[name="sellprice_text"]'); |
|
300 |
price_elt.val(price_str); |
|
301 |
html_elt.html(price_str); |
|
302 |
} |
|
303 |
|
|
304 |
function add_item() { |
|
305 |
if ($('#add_item_parts_id').val() == '') return; |
|
306 |
if (!check_cv()) return; |
|
307 |
|
|
308 |
$('#row_table_id thead a img').remove(); |
|
309 |
|
|
310 |
var data = $('#order_form').serializeArray(); |
|
311 |
data.push({ name: 'action', value: 'Order/add_item' }); |
|
312 |
|
|
313 |
$.post("controller.pl", data, kivi.eval_json_result); |
|
314 |
} |
|
315 |
|
|
316 |
function show_multi_items_dialog() { |
|
317 |
if (!check_cv()) return; |
|
318 |
|
|
319 |
$('#row_table_id thead a img').remove(); |
|
320 |
|
|
321 |
kivi.popup_dialog({ |
|
322 |
url: 'controller.pl?action=Order/show_multi_items_dialog', |
|
323 |
data: { type: $('#type').val(), |
|
324 |
callback: 'Order/add_multi_items', |
|
325 |
callback_data_id: 'order_form' }, |
|
326 |
id: 'jq_multi_items_dialog', |
|
327 |
dialog: { |
|
328 |
title: kivi.t8('Add multiple items'), |
|
329 |
width: 800, |
|
330 |
height: 500 |
|
331 |
} |
|
332 |
}); |
|
333 |
return true; |
|
334 |
} |
|
335 |
|
|
336 |
function close_multi_items_dialog() { |
|
337 |
$('#jq_multi_items_dialog').dialog('close'); |
|
338 |
}; |
|
339 |
|
|
340 |
function delete_order_item_row(clicked) { |
|
341 |
var row = $(clicked).parents("tbody").first(); |
|
342 |
$(row).remove(); |
|
343 |
|
|
344 |
renumber_positions(); |
|
345 |
recalc_amounts_and_taxes(); |
|
346 |
} |
|
347 |
|
|
348 |
function price_chooser_item_row(clicked) { |
|
349 |
var row = $(clicked).parents("tbody").first(); |
|
350 |
var item_id_dom = $(row).find('[name="orderitem_ids[+]"]'); |
|
351 |
|
|
352 |
var data = $('#order_form').serializeArray(); |
|
353 |
data.push({ name: 'action', value: 'Order/price_popup' }); |
|
354 |
data.push({ name: 'item_id', value: item_id_dom.val() }); |
|
355 |
|
|
356 |
$.post("controller.pl", data, kivi.eval_json_result); |
|
357 |
} |
|
358 |
|
|
359 |
function update_price_source(item_id, source, descr, price_str) { |
|
360 |
var row = $('#item_' + item_id).parents("tbody").first(); |
|
361 |
var source_elt = $(row).find('[name="order.orderitems[].active_price_source"]'); |
|
362 |
var button_elt = $(row).find('[name="price_chooser_button"]'); |
|
363 |
|
|
364 |
button_elt.val(button_elt.val().replace(/.*\|/, descr + " |")); |
|
365 |
source_elt.val(source); |
|
366 |
|
|
367 |
var editable_div_elt = $(row).find('[name="editable_price"]'); |
|
368 |
var not_editable_div_elt = $(row).find('[name="not_editable_price"]'); |
|
369 |
if ([%- AUTH.assert('edit_prices', 1) %] == 1 && source == '') { |
|
370 |
// editable |
|
371 |
$(editable_div_elt).show(); |
|
372 |
$(not_editable_div_elt).hide(); |
|
373 |
$(editable_div_elt).find(':input').prop("disabled", false); |
|
374 |
$(not_editable_div_elt).find(':input').prop("disabled", true); |
|
375 |
} else { |
|
376 |
// not editable |
|
377 |
$(editable_div_elt).hide(); |
|
378 |
$(not_editable_div_elt).show(); |
|
379 |
$(editable_div_elt).find(':input').prop("disabled", true); |
|
380 |
$(not_editable_div_elt).find(':input').prop("disabled", false); |
|
381 |
} |
|
382 |
|
|
383 |
if (price_str) { |
|
384 |
var price_elt = $(row).find('[name="order.orderitems[].sellprice_as_number"]'); |
|
385 |
var html_elt = $(row).find('[name="sellprice_text"]'); |
|
386 |
price_elt.val(price_str); |
|
387 |
html_elt.html(price_str); |
|
388 |
recalc_amounts_and_taxes(); |
|
389 |
} |
|
390 |
|
|
391 |
kivi.io.close_dialog(); |
|
392 |
} |
|
393 |
|
|
394 |
function update_discount_source(item_id, source, descr, discount_str) { |
|
395 |
var row = $('#item_' + item_id).parents("tbody").first(); |
|
396 |
var source_elt = $(row).find('[name="order.orderitems[].active_discount_source"]'); |
|
397 |
var button_elt = $(row).find('[name="price_chooser_button"]'); |
|
398 |
|
|
399 |
button_elt.val(button_elt.val().replace(/\|.*/, "| " + descr)); |
|
400 |
source_elt.val(source); |
|
401 |
|
|
402 |
var editable_div_elt = $(row).find('[name="editable_discount"]'); |
|
403 |
var not_editable_div_elt = $(row).find('[name="not_editable_discount"]'); |
|
404 |
if ([%- AUTH.assert('edit_prices', 1) %] == 1 && source == '') { |
|
405 |
// editable |
|
406 |
$(editable_div_elt).show(); |
|
407 |
$(not_editable_div_elt).hide(); |
|
408 |
$(editable_div_elt).find(':input').prop("disabled", false); |
|
409 |
$(not_editable_div_elt).find(':input').prop("disabled", true); |
|
410 |
} else { |
|
411 |
// not editable |
|
412 |
$(editable_div_elt).hide(); |
|
413 |
$(not_editable_div_elt).show(); |
|
414 |
$(editable_div_elt).find(':input').prop("disabled", true); |
|
415 |
$(not_editable_div_elt).find(':input').prop("disabled", false); |
|
416 |
} |
|
417 |
|
|
418 |
if (discount_str) { |
|
419 |
var discount_elt = $(row).find('[name="order.orderitems[].discount_as_percent"]'); |
|
420 |
var html_elt = $(row).find('[name="discount_text"]'); |
|
421 |
discount_elt.val(discount_str); |
|
422 |
html_elt.html(discount_str); |
|
423 |
recalc_amounts_and_taxes(); |
|
424 |
} |
|
425 |
|
|
426 |
kivi.io.close_dialog(); |
|
427 |
} |
|
428 |
|
|
429 |
function reformat_number(event) { |
|
430 |
$(event.target).val(kivi.format_amount(kivi.parse_amount($(event.target).val()), -2)); |
|
431 |
} |
|
432 |
|
|
433 |
function recalc_amounts_and_taxes() { |
|
434 |
var data = $('#order_form').serializeArray(); |
|
435 |
data.push({ name: 'action', value: 'Order/recalc_amounts_and_taxes' }); |
|
436 |
|
|
437 |
$.post("controller.pl", data, kivi.eval_json_result); |
|
438 |
} |
|
439 |
|
|
440 |
function redisplay_linetotals(data) { |
|
441 |
$('.row_entry [name="linetotal"]').each(function(idx, elt) { |
|
442 |
$(elt).html(data[idx]); |
|
443 |
}); |
|
444 |
} |
|
445 |
|
|
446 |
function row_table_scroll_down() { |
|
447 |
$('#row_table_scroll_id').scrollTop($('#row_table_scroll_id')[0].scrollHeight); |
|
448 |
} |
|
449 |
|
|
450 |
var email_dialog; |
|
451 |
|
|
452 |
function show_email_dialog(html) { |
|
453 |
var id = 'jqueryui_popup_dialog'; |
|
454 |
var dialog_params = { |
|
455 |
id: id, |
|
456 |
width: 800, |
|
457 |
height: 500, |
|
458 |
modal: true, |
|
459 |
close: function(event, ui) { |
|
460 |
email_dialog.remove(); |
|
461 |
}, |
|
462 |
}; |
|
463 |
|
|
464 |
$('#' + id).remove(); |
|
465 |
|
|
466 |
email_dialog = $('<div style="display:none" id="' + id + '"></div>').appendTo('body'); |
|
467 |
email_dialog.html(html); |
|
468 |
email_dialog.dialog(dialog_params); |
|
469 |
|
|
470 |
$('.cancel').click(close_email_dialog); |
|
471 |
|
|
472 |
return true; |
|
473 |
} |
|
474 |
|
|
475 |
close_email_dialog = function() { |
|
476 |
email_dialog.dialog("close"); |
|
477 |
} |
|
478 |
|
|
479 |
function renumber_positions() { |
|
480 |
$('.row_entry [name="position"]').each(function(idx, elt) { |
|
481 |
$(elt).html(idx+1); |
|
482 |
}); |
|
483 |
} |
|
484 |
|
|
485 |
function reorder_items(order_by) { |
|
486 |
var dir = $('#' + order_by + '_header_id a img').attr("data-sort-dir"); |
|
487 |
$('#row_table_id thead a img').remove(); |
|
488 |
|
|
489 |
var src; |
|
490 |
if (dir == "1") { |
|
491 |
dir = "0"; |
|
492 |
src = "image/up.png"; |
|
493 |
} else { |
|
494 |
dir = "1"; |
|
495 |
src = "image/down.png"; |
|
496 |
}; |
|
497 |
|
|
498 |
$('#' + order_by + '_header_id a').append('<img border=0 data-sort-dir=' + dir + ' src=' + src + ' alt="[%- LxERP.t8('sort items') %]">'); |
|
499 |
|
|
500 |
var data = $('#order_form').serializeArray(); |
|
501 |
data.push({ name: 'action', value: 'Order/reorder_items' }); |
|
502 |
data.push({ name: 'order_by', value: order_by }); |
|
503 |
data.push({ name: 'sort_dir', value: dir }); |
|
504 |
|
|
505 |
$.post("controller.pl", data, kivi.eval_json_result); |
|
506 |
} |
|
507 |
|
|
508 |
function redisplay_items(data) { |
|
509 |
var old_rows = $('.row_entry').detach(); |
|
510 |
var new_rows = []; |
|
511 |
$(data).each(function(idx, elt) { |
|
512 |
new_rows.push(old_rows[elt.old_pos - 1]); |
|
513 |
}); |
|
514 |
$(new_rows).appendTo($('#row_table_id')); |
|
515 |
renumber_positions(); |
|
516 |
} |
|
517 |
|
|
518 |
function show_longdescription_dialog(clicked) { |
|
519 |
var row = $(clicked).parents("tbody").first(); |
|
520 |
var position = $(row).find('[name="position"]').html(); |
|
521 |
var partnumber = $(row).find('[name="partnumber"]').html(); |
|
522 |
var description_elt = $(row).find('[name="order.orderitems[].description"]'); |
|
523 |
var description = description_elt.val(); |
|
524 |
var longdescription_elt = $(row).find('[name="order.orderitems[].longdescription"]'); |
|
525 |
var longdescription; |
|
526 |
|
|
527 |
if (!longdescription_elt.length) { |
|
528 |
var data = []; |
|
529 |
data.push({ name: 'action', value: 'Order/get_item_longdescription' }); |
|
530 |
data.push({ name: 'type', value: $('#type').val() }); |
|
531 |
data.push({ name: 'item_id', value: $(row).find('[name="order.orderitems[+].id"]').val() }); |
|
532 |
data.push({ name: 'parts_id', value: $(row).find('[name="order.orderitems[].parts_id"]').val() }); |
|
533 |
$.ajax({ |
|
534 |
url: 'controller.pl', |
|
535 |
data: data, |
|
536 |
method: "GET", |
|
537 |
async: false, |
|
538 |
dataType: 'text', |
|
539 |
success: function(val){ |
|
540 |
longdescription = val; |
|
541 |
} |
|
542 |
}); |
|
543 |
} else { |
|
544 |
longdescription = longdescription_elt.val(); |
|
545 |
} |
|
546 |
|
|
547 |
var params = { runningnumber: position, |
|
548 |
partnumber: partnumber, |
|
549 |
description: description, |
|
550 |
default_longdescription: longdescription, |
|
551 |
set_function: function(val){ |
|
552 |
longdescription_elt.remove(); |
|
553 |
$('<input type="hidden" name="order.orderitems[].longdescription">').insertAfter(description_elt).val(val); |
|
554 |
} |
|
555 |
}; |
|
556 |
|
|
557 |
kivi.SalesPurchase.edit_longdescription_with_params(params); |
|
558 |
} |
|
559 |
|
|
560 |
function init_row_handlers() { |
|
561 |
kivi.run_once_for('.recalc', 'on_change_recalc', function(elt) { |
|
562 |
$(elt).change(recalc_amounts_and_taxes); |
|
563 |
}); |
|
564 |
|
|
565 |
kivi.run_once_for('.reformat_number', 'on_change_reformat', function(elt) { |
|
566 |
$(elt).change(reformat_number); |
|
567 |
}); |
|
568 |
|
|
569 |
kivi.run_once_for('.unitselect', 'on_change_unit_with_oldval', function(elt) { |
|
570 |
$(elt).data('oldval', $(elt).val()); |
|
571 |
$(elt).change(unit_change); |
|
572 |
}); |
|
573 |
|
|
574 |
kivi.run_once_for('.row_entry', 'on_kbd_click_show_hide', function(elt) { |
|
575 |
$(elt).keydown(function(event) { |
|
576 |
if(event.keyCode == 40 && event.shiftKey == true) { |
|
577 |
// shift arrow down |
|
578 |
event.preventDefault(); |
|
579 |
var row = $(event.target).parents(".row_entry").first(); |
|
580 |
$(row).children().not(':first').show(); |
|
581 |
return false; |
|
582 |
} |
|
583 |
if(event.keyCode == 38 && event.shiftKey == true) { |
|
584 |
// shift arrow up |
|
585 |
event.preventDefault(); |
|
586 |
var row = $(event.target).parents(".row_entry").first(); |
|
587 |
$(row).children().not(':first').hide(); |
|
588 |
return false; |
|
589 |
} |
|
590 |
}); |
|
591 |
$(elt).dblclick(function(event) { |
|
592 |
event.preventDefault(); |
|
593 |
var row = $(event.target).parents(".row_entry").first(); |
|
594 |
$(row).children().not(':first').toggle(); |
|
595 |
return false; |
|
596 |
}); |
|
597 |
}); |
|
598 |
} |
|
599 |
|
|
600 |
|
|
601 |
$(function(){ |
|
602 |
$('#order_[%- cv_id %]').change(reload_cv_dependend_selections); |
|
603 |
[%- IF SELF.cv == 'customer' %] |
|
604 |
$('#add_item_parts_id').on('set_item:PartPicker', function(e,o) { $('#add_item_sellprice_as_number').val(kivi.format_amount(o.sellprice, -2)) }); |
|
605 |
[%- ELSE %] |
|
606 |
$('#add_item_parts_id').on('set_item:PartPicker', function(e,o) { $('#add_item_sellprice_as_number').val(kivi.format_amount(o.lastcost, -2)) }); |
|
607 |
[%- END %] |
|
608 |
$('#add_item_parts_id').on('set_item:PartPicker', function(e,o) { $('#add_item_description').val(o.description) }); |
|
609 |
$('#add_item_parts_id').on('set_item:PartPicker', function(e,o) { $('#add_item_unit').val(o.unit) }); |
|
610 |
$('.add_item_input').keydown(function(event) { |
|
611 |
if(event.keyCode == 13) { |
|
612 |
event.preventDefault(); |
|
613 |
add_item(); |
|
614 |
return false; |
|
615 |
} |
|
616 |
}); |
|
617 |
init_row_handlers(); |
|
618 |
}); |
|
619 |
|
|
620 |
$('#row_table_id').on('sortstop', function(event, ui) { |
|
621 |
$('#row_table_id thead a img').remove(); |
|
622 |
renumber_positions(); |
|
623 |
}); |
|
624 |
</script> |
Auch abrufbar als: Unified diff
Auftrags-Controller: javascript-Code in eigene Datei auslagern