Revision 5d711a25
Von Martin Helmling martin.helmling@octosoft.eu vor fast 8 Jahren hinzugefügt
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
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