X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FWH.pm;h=e836d65f00bd70ca724630fec96e11ff6eff36f7;hb=071e5546e649fc0108f64adfb1d0f8356dbe2716;hp=cc53427c50a378cc3f87a53aa2594c29b1ea9185;hpb=48963f462b5fff937438ca93bcc537d78e454f30;p=kivitendo-erp.git diff --git a/SL/WH.pm b/SL/WH.pm index cc53427c5..e836d65f0 100644 --- a/SL/WH.pm +++ b/SL/WH.pm @@ -38,6 +38,9 @@ use SL::AM; use SL::DBUtils; use SL::Form; +use SL::DB::Unit; +use SL::DB::Assembly; + use warnings; use strict; @@ -107,12 +110,11 @@ sub transfer { trans_id => $trans_id, shippingdate => !$transfer->{shippingdate} || $transfer->{shippingdate} eq 'current_date' ? $now : $transfer->{shippingdate}, - map { $_ => $transfer->{$_} } qw( chargenumber bestbefore oe_id orderitems_id comment), + map { $_ => $transfer->{$_} } qw( chargenumber bestbefore oe_id delivery_order_items_stock_id comment), ); if ($unit) { - $qty *= $unit->factor || 1; - $qty /= $part->unit_obj->factor || 1 if $part->unit; + $qty = $unit->convert_to($qty, $part->unit_obj); } $params{chargenumber} ||= ''; @@ -133,7 +135,13 @@ sub transfer { bin => $dst_bin->id, qty => $qty, )->save; - } + # Standardlagerplatz in Stammdaten gleich mitverschieben + if (defined($transfer->{change_default_bin})){ + my $part = SL::DB::Part->new(id => conv_i($transfer->{parts_id}))->load; + $part->update_attributes(warehouse_id => conv_i($transfer->{dst_warehouse_id})); + $part->update_attributes(bin_id => conv_i($transfer->{dst_bin_id})); + } + } push @trans_ids, $trans_id; } @@ -153,6 +161,17 @@ sub transfer_assembly { my %params = @_; Common::check_params(\%params, qw(assembly_id dst_warehouse_id login qty unit dst_bin_id chargenumber bestbefore comment)); + + my $unit = SL::DB::Manager::Unit->find_by(name => $params{unit}); + if ($unit) { + my $assembly = SL::DB::Manager::Assembly->get_all( + query => [ id => $params{assembly_id} ], + with_objects => ['part'], + limit => 1, + )->[0]; + $params{qty} = $unit->convert_to($params{qty}, $assembly->part->unit_obj); + } + # my $maxcreate=WH->check_assembly_max_create(assembly_id =>$params{'assembly_id'}, dbh => $my_dbh); my $myconfig = \%main::myconfig; @@ -909,7 +928,50 @@ $main::lxdebug->enter_sub(); return $part_description; } +# +# Eingabe: Teilenummer, Lagerplatz_Id (bin_id) +# Ausgabe: Die maximale Anzahl der Teile in diesem Lagerplatz +# Bzw. Fehler, falls Chargen oder bestbefore +# bei eingelagerten Teilen definiert sind. +# +sub get_max_qty_parts_bin { +$main::lxdebug->enter_sub(); + + my $self = shift; + my %params = @_; + + Common::check_params(\%params, qw(parts_id bin_id)); #die brauchen wir + + my $myconfig = \%main::myconfig; + my $form = $main::form; + + my $dbh = $params{dbh} || $form->get_standard_dbh(); + + my $query = qq| SELECT SUM(qty), chargenumber, bestbefore FROM inventory where parts_id = ? + AND bin_id = ? GROUP BY chargenumber, bestbefore|; + + my $sth_QTY = prepare_execute_query($form, $dbh, $query, ,$params{parts_id}, $params{bin_id}); #info: aufruf an DBUtils.pm + + my $max_qty_parts = 0; #Initialisierung mit 0 + # falls derselbe artikel mehrmals eingelagert ist + # chargennummer, muss entsprechend händisch agiert werden + my $i = 0; + my $error; + while (my $ref = $sth_QTY->fetchrow_hashref()) { # wir laufen über alle Haltbarkeiten und Chargen(s.a. SQL-Query oben) + $max_qty_parts += $ref->{sum}; + $i++; + if ($ref->{chargenumber} || $ref->{bestbefore}){ + $error=1; + } + } + #if ($i < 1){ + # $error = 2; + #} + $main::lxdebug->leave_sub(); + + return ($max_qty_parts, $error); +} 1; @@ -1023,6 +1085,8 @@ An expiration date. Note that this is not by default used by C =head1 BUGS +None yet. + =head1 AUTHOR =cut