Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision 5d711a25

Von Martin Helmling martin.helmling@octosoft.eu vor fast 8 Jahren hinzugefügt

  • ID 5d711a25d9257690164f396b25f57095776790d6
  • Vorgänger a116f27a
  • Nachfolger 899f502c

Prüfen der Bestandteile eines Erzeugnisses beim Hinzufügen

Erst Prüfung innerhalb des Erzeugnisses,
dann recursive Prüfung der das Erzeugnis enthaltenen Erzeugnisse,
Abbruch nach 100 Rekursionen.

Die Abfrage ist so, dass nur vom Erzeugnis abwärts der Baum in die Tiefe geprüft wird.
Dabei darf auf einem Graph kein Erzeugnis doppelt vorkommen.

Erzeugnisse sind nun editierbar, wenn sie von einem anderen Erzeugnis verwendet werden
solange sie in keinem ERP-Dokument verwendet werden.

Implementiert in einem Helper für SL::Controller::Part.
Er wird auch im Test t/part/assembly.t verwendet

Unterschiede anzeigen:

SL/Controller/Part.pm
13 13
use Data::Dumper;
14 14
use DateTime;
15 15
use SL::DB::History;
16
use SL::DB::Helper::ValidateAssembly qw(validate_assembly);
16 17
use SL::CVar;
17 18
use Carp;
18 19

  
......
250 251
    ->html('#items_sum_diff',            $::form->format_amount(\%::myconfig, $sum_diff,      2, 0))
251 252
    ->html('#items_sellprice_sum_basic', $::form->format_amount(\%::myconfig, $sellprice_sum, 2, 0))
252 253
    ->html('#items_lastcost_sum_basic',  $::form->format_amount(\%::myconfig, $lastcost_sum,  2, 0))
253
    ->render();
254
    ->no_flash_clear->render();
254 255
}
255 256

  
256 257
sub action_add_multi_assortment_items {
......
270 271
  my ($self) = @_;
271 272

  
272 273
  my $item_objects = $self->parse_add_items_to_objects(part_type => 'assembly');
273
  my $html         = $self->render_assembly_items_to_html($item_objects);
274
  my @checked_objects;
275
  foreach my $item (@{$item_objects}) {
276
    my $errstr = validate_assembly($item->part,$self->part);
277
    $self->js->flash('error',$errstr) if     $errstr;
278
    push (@checked_objects,$item)     unless $errstr;
279
  }
280

  
281
  my $html = $self->render_assembly_items_to_html(\@checked_objects);
274 282

  
275 283
  $self->js->run('kivi.Part.close_multi_items_dialog')
276 284
           ->append('#assembly_rows', $html)
......
313 321
    ->html('#items_lastcost_sum_basic',  $::form->format_amount(\%::myconfig, $items_lastcost_sum,  2, 0))
314 322
    ->render;
315 323
}
324

  
316 325
sub action_add_assembly_item {
317 326
  my ($self) = @_;
318 327

  
......
321 330
  carp('Too many objects passed to add_assembly_item') if @{$::form->{add_items}} > 1;
322 331

  
323 332
  my $add_item_id = $::form->{add_items}->[0]->{parts_id};
333

  
324 334
  my $duplicate_warning = 0; # duplicates are allowed, just warn
325 335
  if ( $add_item_id && grep { $add_item_id == $_->parts_id } @{ $self->assembly_items } ) {
326 336
    $duplicate_warning++;
......
328 338

  
329 339
  my $number_of_items = scalar @{$self->assembly_items};
330 340
  my $item_objects    = $self->parse_add_items_to_objects(part_type => 'assembly');
341
  if ($add_item_id ) {
342
    foreach my $item (@{$item_objects}) {
343
      my $errstr = validate_assembly($item->part,$self->part);
344
      return $self->js->flash('error',$errstr)->render if $errstr;
345
    }
346
  }
347

  
348

  
331 349
  my $html            = $self->render_assembly_items_to_html($item_objects, $number_of_items);
332 350

  
333 351
  $self->js->flash('info', t8("This part has already been added.")) if $duplicate_warning;

Auch abrufbar als: Unified diff