return;
};
+ my @trans_ids;
+
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,
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;
}
}) 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);
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;
=head1 BUGS
+None yet.
+
=head1 AUTHOR
=cut