Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision 9eb765a5

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

  • ID 9eb765a5e78cea60962849c8bf0879da85adeff1
  • Vorgänger 28a7a539
  • Nachfolger 93a613de

Auftrags-Controller: zweite Zeile laden mit Icons und alle zweiten Zeilen laden.

Unterschiede anzeigen:

SL/Controller/Order.pm
594 594
  $_[0]->render(\ $longdescription, { type => 'text' });
595 595
}
596 596

  
597
# load the second row for an item (cvars only for now)
597
# load the second row for one or more items (cvars only for now)
598 598
#
599
# This action gets the html code for the items second row by rendering a template for
600
# the second row and calls a javascript function with this html code via client js.
601
sub action_load_second_row {
599
# This action gets the html code for all items second rows by rendering a template for
600
# the second row and sets the html code via client js.
601
sub action_load_second_rows {
602 602
  my ($self) = @_;
603 603

  
604
  my $idx  = first_index { $_ eq $::form->{item_id} } @{ $::form->{orderitem_ids} };
605
  my $item = $self->order->items_sorted->[$idx];
604
  foreach my $item_id (@{ $::form->{item_ids} }) {
605
    my $idx  = first_index { $_ eq $item_id } @{ $::form->{orderitem_ids} };
606
    my $item = $self->order->items_sorted->[$idx];
607

  
608
    $self->_js_load_second_row($item, $item_id, 0);
609
  }
610

  
611
  $self->js->render();
612
}
606 613

  
607
  # Parse values from form (they are formated while rendering (template)).
608
  # Workaround to pre-parse number-cvars (parse_custom_variable_values does not parse number values).
609
  # This parsing is not necessary at all, if we assure that the second row/cvars are only loaded once.
610
  #foreach my $var (@{ $item->cvars_by_config }) {
611
  #  $var->unparsed_value($::form->parse_amount(\%::myconfig, $var->{__unparsed_value})) if ($var->config->type eq 'number' && exists($var->{__unparsed_value}));
612
  #}
613
  #$item->parse_custom_variable_values;
614
sub _js_load_second_row {
615
  my ($self, $item, $item_id, $do_parse) = @_;
616

  
617
  if ($do_parse) {
618
    # Parse values from form (they are formated while rendering (template)).
619
    # Workaround to pre-parse number-cvars (parse_custom_variable_values does not parse number values).
620
    # This parsing is not necessary at all, if we assure that the second row/cvars are only loaded once.
621
    foreach my $var (@{ $item->cvars_by_config }) {
622
      $var->unparsed_value($::form->parse_amount(\%::myconfig, $var->{__unparsed_value})) if ($var->config->type eq 'number' && exists($var->{__unparsed_value}));
623
    }
624
    $item->parse_custom_variable_values;
625
  }
614 626

  
615 627
  my $row_as_html = $self->p->render('order/tabs/_second_row', ITEM => $item);
616 628

  
617 629
  $self->js
618
    ->html('.row_entry:has(#item_' . $::form->{item_id} . ') [name = "second_row"]', $row_as_html)
619
    ->data('.row_entry:has(#item_' . $::form->{item_id} . ') [name = "second_row"]', 'loaded', 1)
620
    ->render();
630
    ->html('.row_entry:has(#item_' . $item_id . ') [name = "second_row"]', $row_as_html)
631
    ->data('.row_entry:has(#item_' . $item_id . ') [name = "second_row"]', 'loaded', 1);
621 632
}
622 633

  
623 634
sub _js_redisplay_linetotals {
js/kivi.Order.js
190 190
      return;
191 191
    }
192 192
    var data = $('#order_form').serializeArray();
193
    data.push({ name: 'action', value: 'Order/load_second_row' });
194
    data.push({ name: 'item_id', value: item_id_dom.val() });
193
    data.push({ name: 'action', value: 'Order/load_second_rows' });
194
    data.push({ name: 'item_ids[]', value: item_id_dom.val() });
195 195

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

  
199
  ns.load_all_second_rows = function() {
200
    var rows = $('.row_entry').filter(function(idx, elt) {
201
      return $(elt).find('[name="second_row"]').data('loaded') != 1;
202
    });
203

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

  
209
    if (item_ids.length == 0) {
210
      return;
211
    }
212

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

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

  
220
  ns.hide_second_row = function(row) {
221
    $(row).children().not(':first').hide();
222
    $(row).data('expanded', false);
223
    var elt = $(row).find('.expand');
224
    elt.attr('src', "image/expand3.gif");
225
    elt.attr('alt', kivi.t8('Show details'));
226
    elt.attr('title', kivi.t8('Show details'));
227
  };
228

  
229
  ns.show_second_row = function(row) {
230
    $(row).children().not(':first').show();
231
    $(row).data('expanded', true);
232
    var elt = $(row).find('.expand');
233
    elt.attr('src', "image/collapse3.gif");
234
    elt.attr('alt', kivi.t8('Hide details'));
235
    elt.attr('title', kivi.t8('Hide details'));
236
  };
237

  
238
  ns.toggle_second_row = function(row) {
239
    if ($(row).data('expanded') === true) {
240
      ns.hide_second_row(row);
241
    } else {
242
      ns.show_second_row(row);
243
    }
244
  };
199 245

  
200 246
  ns.init_row_handlers = function() {
201 247
    kivi.run_once_for('.recalc', 'on_change_recalc', function(elt) {
......
218 264
          event.preventDefault();
219 265
          var row = $(event.target).parents(".row_entry").first();
220 266
          ns.load_second_row(row);
221
          $(row).children().not(':first').show();
267
          ns.show_second_row(row);
222 268
          return false;
223 269
        }
224 270
        if(event.keyCode == 38 && event.shiftKey === true) {
225 271
          // shift arrow up
226 272
          event.preventDefault();
227 273
          var row = $(event.target).parents(".row_entry").first();
228
          $(row).children().not(':first').hide();
274
          ns.hide_second_row(row);
229 275
          return false;
230 276
        }
231 277
      });
......
233 279
        event.preventDefault();
234 280
        var row = $(event.target).parents(".row_entry").first();
235 281
        ns.load_second_row(row);
236
        $(row).children().not(':first').toggle();
282
        ns.toggle_second_row(row);
237 283
        return false;
238 284
      });
239 285
    });
286

  
287
    kivi.run_once_for('.expand', 'expand_second_row', function(elt) {
288
      $(elt).click(function(event) {
289
        event.preventDefault();
290
        var row = $(event.target).parents(".row_entry").first();
291
        ns.load_second_row(row);
292
        ns.toggle_second_row(row);
293
        return false;
294
      })
295
    });
296

  
240 297
  };
241 298

  
242 299
  ns.redisplay_linetotals = function(data) {
......
486 543
    $('#row_table_id thead a img').remove();
487 544
    kivi.Order.renumber_positions();
488 545
  });
546

  
547
  $('#expand_all').on('click', function(event) {
548
    event.preventDefault();
549
    if ($('#expand_all').data('expanded') === true) {
550
      $('#expand_all').data('expanded', false);
551
      $('#expand_all').attr('src', 'image/expand3.gif');
552
      $('#expand_all').attr('alt', kivi.t8('Show all details'));
553
      $('#expand_all').attr('title', kivi.t8('Show all details'));
554
      $('.row_entry').each(function(idx, elt) {
555
        kivi.Order.hide_second_row(elt);
556
      });
557
    } else {
558
      $('#expand_all').data('expanded', true);
559
      $('#expand_all').attr('src', "image/collapse3.gif");
560
      $('#expand_all').attr('alt', kivi.t8('Hide all details'));
561
      $('#expand_all').attr('title', kivi.t8('Hide all details'));
562
      kivi.Order.load_all_second_rows();
563
      $('.row_entry').each(function(idx, elt) {
564
        kivi.Order.show_second_row(elt);
565
      });
566
    }
567
    return false;
568
  });
489 569
});
js/locale/de.js
47 47
"Edit text block":"Textblock bearbeiten",
48 48
"Enter longdescription":"Langtext eingeben",
49 49
"Function block actions":"Funktionsblockaktionen",
50
"Hide all details":"",
51
"Hide details":"Details verbergen",
50 52
"History":"Historie",
51 53
"If you switch to a different tab without saving you will lose the data you've entered in the current tab.":"Wenn Sie auf einen anderen Tab wechseln, ohne vorher zu speichern, so gehen die im aktuellen Tab eingegebenen Daten verloren.",
52 54
"Map":"Karte",
......
72 74
"Save and keep open":"Speichern und geöffnet lassen",
73 75
"Section/Function block actions":"Abschnitts-/Funktionsblockaktionen",
74 76
"Select template to paste":"Einzufügende Vorlage auswählen",
77
"Show all details":"",
78
"Show details":"Details anzeigen",
75 79
"Subject":"Betreff",
76 80
"Text block actions":"Textblockaktionen",
77 81
"Text block picture actions":"Aktionen für Textblockbilder",
locale/de/all
1416 1416
  'Here you only provide the credentials for logging into the database.' => 'Hier geben Sie nur die Logindaten für die Anmeldung an der Datenbank ein.',
1417 1417
  'Here\'s an example command line:' => 'Hier ist eine Kommandozeile, die als Beispiel dient:',
1418 1418
  'Hide Filter'                 => 'Filter verbergen',
1419
  'Hide all details'            => 'Alle Details verbergen',
1419 1420
  'Hide by default'             => 'Standardmäßig verstecken',
1420 1421
  'Hide chart details'          => 'Konteninformation verstecken',
1421 1422
  'Hide details'                => 'Details verbergen',
......
2593 2594
  'Show TODO list'              => 'Aufgabenliste anzeigen',
2594 2595
  'Show Transfer via default'   => 'Ein- / Auslagern über Standardlagerplatz anzeigen (zusätzlicher Knopf in Beleg Lieferschein)',
2595 2596
  'Show administration link'    => 'Link zur Administration anzeigen',
2597
  'Show all details'            => 'Alle Details anzeigen',
2596 2598
  'Show all parts'              => 'Alle Artikel anzeigen',
2597 2599
  'Show by default'             => 'Standardmäßig anzeigen',
2598 2600
  'Show custom variable search inputs' => 'Suchoptionen für Benutzerdefinierte Variablen verstecken',
locale/en/all
1415 1415
  'Here you only provide the credentials for logging into the database.' => '',
1416 1416
  'Here\'s an example command line:' => '',
1417 1417
  'Hide Filter'                 => '',
1418
  'Hide all details'            => '',
1418 1419
  'Hide by default'             => '',
1419 1420
  'Hide chart details'          => '',
1420 1421
  'Hide details'                => '',
......
2584 2585
  'Show TODO list'              => '',
2585 2586
  'Show Transfer via default'   => '',
2586 2587
  'Show administration link'    => '',
2588
  'Show all details'            => '',
2587 2589
  'Show all parts'              => '',
2588 2590
  'Show by default'             => '',
2589 2591
  'Show custom variable search inputs' => '',
templates/webpages/order/tabs/_row.html
6 6
<tbody class="row_entry">
7 7

  
8 8
  <tr class="listrow0">
9
    <td style='display:none'>
9
    <td align="center">
10
      [%- IF MYCONFIG.show_form_details %]
11
        [% L.img_tag(src="image/collapse3.gif",
12
                     alt=LxERP.t8('Hide details'), title=LxERP.t8('Hide details'), class="expand") %]
13
      [%- ELSE %]
14
        [% L.img_tag(src="image/expand3.gif",
15
                     alt=LxERP.t8('Show details'), title=LxERP.t8('Show details'), class="expand") %]
16
      [%- END %]
10 17
      [% L.hidden_tag("orderitem_ids[+]", ID) %]
11 18
      [% L.hidden_tag("order.orderitems[+].id", ITEM.id, id='item_' _ ID) %]
12 19
      [% L.hidden_tag("order.orderitems[].parts_id", ITEM.parts_id) %]
......
100 107

  
101 108
  </tr>
102 109

  
103
  <tr class="listrow1" style="display:none">
110
  <tr class="listrow1" [%- IF !MYCONFIG.show_form_details -%]style="display:none"[%- END -%]>
104 111
    <td colspan="100%">
105
      <div name="second_row">
106
        [%- LxERP.t8("Loading...") %]
107
      </div>
112
      [%- IF MYCONFIG.show_form_details %]
113
        <div name="second_row" data-loaded="1">
114
          [%- PROCESS order/tabs/_second_row.html ITEM=ITEM %]
115
        </div>
116
      [%- ELSE %]
117
        <div name="second_row">
118
          [%- LxERP.t8("Loading...") %]
119
        </div>
120
      [%- END %]
108 121
    </td>
109 122
  </tr>
110 123

  
templates/webpages/order/tabs/basic_data.html
155 155
          <table id="row_table_id" width="100%">
156 156
            <thead>
157 157
              <tr class="listheading">
158
                <th class="listheading" style='display:none'></th>
158
                <th class="listheading" style='text-align:center' nowrap width="1">
159
                  [%- IF MYCONFIG.show_form_details %]
160
                    [%- L.img_tag(src="image/collapse3.gif", alt=LxERP.t8('Hide all details'), title=LxERP.t8('Hide all details'), id='expand_all') %]
161
                  [%- ELSE %]
162
                    [%- L.img_tag(src="image/expand3.gif", alt=LxERP.t8('Show all details'), title=LxERP.t8('Show all details'), id='expand_all') %]
163
                  [%- END %]
164
                </th>
159 165
                <th class="listheading" nowrap width="3" >[%- 'position'     | $T8 %] </th>
160 166
                <th class="listheading" style='text-align:center' nowrap width="1"><img src="image/updown.png" alt="[%- LxERP.t8('reorder item') %]"></th>
161 167
                <th class="listheading" style='text-align:center' nowrap width="1"><img src="image/close.png" alt="[%- LxERP.t8('delete item') %]"></th>

Auch abrufbar als: Unified diff