SL::DB::Part - neue Methode get_stock
authorG. Richardson <information@kivitendo-premium.de>
Tue, 17 Jan 2017 07:41:38 +0000 (08:41 +0100)
committerG. Richardson <information@kivitendo-premium.de>
Wed, 18 Jan 2017 13:46:44 +0000 (14:46 +0100)
um den aktuellen Lagerbestand eines Artikels in einem bestimmten
Lagerplatz oder in einem bestimmten Lager zu einem bestimmten Stichtag
in der Standardeinheit auszulesen.

SL/DB/Part.pm

index 21240a6..df0169d 100644 (file)
@@ -262,6 +262,36 @@ sub get_chart {
   return $charts->{$taxzone}->{$type};
 }
 
+sub get_stock {
+  my ($self, %params) = @_;
+
+  return undef unless $self->id;
+
+  my $query = 'SELECT SUM(qty) FROM inventory WHERE parts_id = ?';
+  my @values = ($self->id);
+
+  if ( $params{bin_id} ) {
+    $query .= ' AND bin_id = ?';
+    push(@values, $params{bin_id});
+  }
+
+  if ( $params{warehouse_id} ) {
+    $query .= ' AND warehouse_id = ?';
+    push(@values, $params{warehouse_id});
+  }
+
+  if ( $params{shippingdate} ) {
+    die unless ref($params{shippingdate}) eq 'DateTime';
+    $query .= ' AND shippingdate <= ?';
+    push(@values, $params{shippingdate});
+  }
+
+  my ($stock) = selectrow_query($::form, $self->db->dbh, $query, @values);
+
+  return $stock || 0; # never return undef
+};
+
+
 # this is designed to ignore chargenumbers, expiration dates and just give a list of how much <-> where
 sub get_simple_stock {
   my ($self, %params) = @_;
@@ -519,6 +549,20 @@ Non-recursive lastcost sum of all the assembly item lastcosts.
 
 Non-recursive lastcost sum of all the assortment item lastcosts.
 
+=item C<get_stock %params>
+
+Fetches stock qty in the default unit for a part.
+
+bin_id and warehouse_id may be passed as params. If only a bin_id is passed,
+the stock qty for that bin is returned. If only a warehouse_id is passed, the
+stock qty for all bins in that warehouse is returned.  If a shippingdate is
+passed the stock qty for that date is returned.
+
+Examples:
+ my $qty = $part->get_stock(bin_id => 52);
+
+ $part->get_stock(shippingdate => DateTime->today->add(days => -5));
+
 =back
 
 =head1 AUTHORS