Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision 0935b012

Von Bernd Bleßmann vor etwa 8 Jahren hinzugefügt

  • ID 0935b012a57196f883b59ec97bb7fe0882210c5a
  • Vorgänger d8a1906b
  • Nachfolger e09f2da3

Auftrags-Controller: javascript-Code in eigene Datei auslagern

Unterschiede anzeigen:

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