X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FController%2FInventory.pm;h=8e5a445deec49154914cf96747440627d7cfba7f;hb=e73ff77bd82ac037e7189d0d30397dc08d8c9584;hp=88c24fbb841d9322301efd48061536a1a0a48ef3;hpb=fbb83292bc25a065821c3f5b69755fa6b1b8c7fd;p=kivitendo-erp.git diff --git a/SL/Controller/Inventory.pm b/SL/Controller/Inventory.pm index 88c24fbb8..8e5a445de 100644 --- a/SL/Controller/Inventory.pm +++ b/SL/Controller/Inventory.pm @@ -44,33 +44,42 @@ sub action_stock_in { sub action_stock { my ($self) = @_; - # do stock - WH->transfer({ - parts => $self->part, - dst_bin => $self->bin, - dst_wh => $self->warehouse, - qty => $::form->format_amount(\%::myconfig, $::form->{qty}), - unit => $self->unit, - transfer_type => 'stock', - chargenumber => $::form->{chargenumber}, - ean => $::form->{ean}, - comment => $::form->{comment}, - }); - - if ($::form->{write_default_bin}) { - $self->part->bin($self->bin); - $self->part->warehouse($self->warehouse); - $self->part->save; + my $qty = $::form->parse_amount(\%::myconfig, $::form->{qty}); + if (!$qty) { + flash_later('error', t8('Cannot stock without amount')); + } elsif ($qty < 0) { + flash_later('error', t8('Cannot stock negative amounts')); + } else { + # do stock + WH->transfer({ + parts => $self->part, + dst_bin => $self->bin, + dst_wh => $self->warehouse, + qty => $qty, + unit => $self->unit, + transfer_type => 'stock', + chargenumber => $::form->{chargenumber}, + ean => $::form->{ean}, + comment => $::form->{comment}, + }); + + if ($::form->{write_default_bin}) { + $self->part->load; # onhand is calculated in between. don't mess that up + $self->part->bin($self->bin); + $self->part->warehouse($self->warehouse); + $self->part->save; + } + + flash_later('info', t8('Transfer successful')); } - flash_later('info', t8('Transfer successful')); - # redirect $self->redirect_to( action => 'stock_in', part_id => $self->part->id, bin_id => $self->bin->id, warehouse_id => $self->warehouse->id, + unit_id => $self->unit->id, ); } @@ -121,7 +130,7 @@ sub _check_warehouses { } sub init_warehouses { - SL::DB::Manager::Warehouse->get_all; + SL::DB::Manager::Warehouse->get_all(query => [ or => [ invalid => 0, invalid => undef ]]); } sub init_units { @@ -148,8 +157,8 @@ sub set_target_from_part { sub sanitize_target { my ($self) = @_; - $self->warehouse(SL::DB::Manager::Warehouse->get_first) if !$self->warehouse || !$self->warehouse->id; - $self->bin ($self->warehouse->bins->[0]) if !$self->bin || !$self->bin->id; + $self->warehouse($self->warehouses->[0]) if !$self->warehouse || !$self->warehouse->id; + $self->bin ($self->warehouse->bins->[0]) if !$self->bin || !$self->bin->id; } sub load_part_from_form { @@ -229,12 +238,12 @@ sub mini_stock { $self->{stock_empty} = ! grep { $_->{sum} * 1 } @$stock; } -sub show_no_warehouse_error { +sub show_no_warehouses_error { my ($self) = @_; my $msg = t8('No warehouse has been created yet or the quantity of the bins is not configured yet.') . ' '; - if ($::auth->check_right($::form->{login}, 'config')) { # TODO wut? + if ($::auth->check_right($::myconfig{login}, 'config')) { # TODO wut? $msg .= t8('You can create warehouses and bins via the menu "System -> Warehouses".'); } else { $msg .= t8('Please ask your administrator to create warehouses and bins.');