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) = @_;
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');
);
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,
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 {
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);
=head1 BUGS
+None yet.
+
=head1 AUTHOR
=cut