X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FWH.pm;h=28e836e485cd22b3a7018b93182b004025c2678f;hb=e0811efeffea10076fc8ab4db310b4c5187ef293;hp=833b573b5a02d72b4fa82ed9be7076bb5a020efb;hpb=c7cabbb276bfc046b6855b4330538288bf33385d;p=kivitendo-erp.git diff --git a/SL/WH.pm b/SL/WH.pm index 833b573b5..28e836e48 100644 --- a/SL/WH.pm +++ b/SL/WH.pm @@ -59,7 +59,6 @@ sub transfer { my $employee = SL::DB::Manager::Employee->find_by(login => $::form->{login}); my ($now) = selectrow_query($::form, $::form->get_standard_dbh, qq|SELECT current_date|); my @directions = (undef, qw(out in transfer)); - my $db = SL::DB->create(undef, 'LXOFFICE'); # get handle for transaction my $objectify = sub { my ($transfer, $field, $class, @find_by) = @_; @@ -74,14 +73,15 @@ sub transfer { return; }; - $db->begin_work; - eval { + my @trans_ids; - for my $transfer (@args) { + my $db = SL::DB::Inventory->new->db; + $db->do_transaction(sub{ + while (my $transfer = shift @args) { my ($trans_id) = selectrow_query($::form, $::form->get_standard_dbh, qq|SELECT nextval('id')|); my $part = $objectify->($transfer, 'parts', 'SL::DB::Part'); - my $unit = $objectify->($transfer, 'unit', 'SL::DB::Unit', unit => $transfer->{unit}); + my $unit = $objectify->($transfer, 'unit', 'SL::DB::Unit', name => $transfer->{unit}); my $qty = $transfer->{qty}; my $src_bin = $objectify->($transfer, 'src_bin', 'SL::DB::Bin'); my $dst_bin = $objectify->($transfer, 'dst_bin', 'SL::DB::Bin'); @@ -111,10 +111,11 @@ sub transfer { ); if ($unit) { - $qty *= $unit->factor; - $qty /= $part->unit_obj->factor || 1 if $part->unit; + $qty = $unit->convert_to($qty, $part->unit_obj); } + $params{chargenumber} ||= ''; + if ($direction & 1) { SL::DB::Inventory->new( %params, @@ -132,17 +133,16 @@ sub transfer { qty => $qty, )->save; } - } - - $db->commit; - 1; - } or do { - $db->rollback; - die $@; # rethrow + push @trans_ids, $trans_id; + } + }) or do { + $::form->error("Warehouse transfer error: " . join("\n", (split(/\n/, $db->error))[0..2])); }; $::lxdebug->leave_sub; + + return @trans_ids; } sub transfer_assembly { @@ -621,6 +621,14 @@ sub get_warehouse_report { push @filter_vars, '%' . $filter{ean} . '%'; } + if ($filter{date}) { + push @filter_ary, "i.itime <= ?"; + push @filter_vars, $filter{date}; + } + if (!$filter{include_invalid_warehouses}){ + push @filter_ary, "NOT (w.invalid)"; + } + # prepare qty comparison for later filtering my ($f_qty_op, $f_qty, $f_qty_base_unit); @@ -1014,6 +1022,8 @@ An expiration date. Note that this is not by default used by C =head1 BUGS +None yet. + =head1 AUTHOR =cut