X-Git-Url: http://wagnertech.de/gitweb/gitweb.cgi/mfinanz.git/blobdiff_plain/d9e0bbb51793a06d452cc50fa8f4fe43f1ea9c3f..ec1dc3e8dd611bf973ba7306d6a09d65a7e2bfce:/SL/Dev/Inventory.pm?ds=inline diff --git a/SL/Dev/Inventory.pm b/SL/Dev/Inventory.pm new file mode 100644 index 000000000..2ea6a5010 --- /dev/null +++ b/SL/Dev/Inventory.pm @@ -0,0 +1,103 @@ +package SL::Dev::Inventory; + +use base qw(Exporter); +@EXPORT = qw(create_warehouse_and_bins set_stock); + +use SL::DB::Warehouse; +use SL::DB::Bin; +use SL::DB::Inventory; +use SL::DB::TransferType; +use SL::DB::Employee; + +sub create_warehouse_and_bins { + my (%params) = @_; + + my $number_of_bins = $params{number_of_bins} || 5; + my $wh = SL::DB::Warehouse->new(description => $params{warehouse_description} || "Warehouse", invalid => 0); + for my $i ( 1 .. $number_of_bins ) { + $wh->add_bins( SL::DB::Bin->new(description => ( $params{bin_description} || "Bin" ) . " $i" ) ); + } + $wh->save; + return ($wh, $wh->bins->[0]); +} + +sub set_stock { + my ($part, %params) = @_; + + die "first argument is not a part" unless ref($part) eq 'SL::DB::Part'; + + die "no default warehouse" unless $part->warehouse_id or $part->bin_id; + + die "Can't determine employee" unless SL::DB::Manager::Employee->current; + + die "qty is missing or not positive" unless $params{qty} and $params{qty} > 0; + + my $transfer_type_description = delete $params{transfer_type} || 'stock'; + my $transfer_type = SL::DB::Manager::TransferType->find_by( description => $transfer_type_description, direction => 'in' ); + + my $shippingdate; + if ( $params{shippingdate} ) { + $shippingdate = $::locale->parse_date_to_object(delete $params{shippingdate}); + } else { + $shippingdate = DateTime->today; + }; + + my ($trans_id) = $part->db->dbh->selectrow_array("select nextval('id')", {}); + + SL::DB::Inventory->new( + parts_id => $part->id, + bin_id => $part->bin_id, + warehouse_id => $part->warehouse_id, + employee_id => $params{employee_id} || SL::DB::Manager::Employee->current->id, + trans_type_id => $transfer_type->id, + comment => $params{comment}, + shippingdate => $shippingdate, + qty => $params{qty}, + trans_id => $trans_id, + )->save; +} + +1; + +__END__ + +=head1 NAME + +SL::Dev::Inventory - create inventory-related objects for testing, with minimal +defaults + +=head1 FUNCTIONS + +=head2 C + +Creates a new warehouse and bins, and immediately saves them. Returns the +warehouse and the first bin object. + my ($wh, $bin) = SL::Dev::Inventory::create_warehouse_and_bins(); + +Create named warehouse with 10 bins: + my ($wh, $bin) = SL::Dev::Inventory::create_warehouse_and_bins(warehouse_description => 'Testlager', + bin_description => 'Testlagerplatz', + number_of_bins => 10, + ); +To access the second bin: + my $bin2 = $wh->bins->[1]; + +=head2 C + +Increase the stock level of a certain part by creating an inventory event. Currently +only positive stock levels can be set. To access the updated onhand the part +object needs to be loaded afterwards. + + my $part = SL::DB::Manager::Part->find_by(partnumber => '1'); + SL::Dev::Inventory::set_stock($part, 5); + $part->load; + +=head1 BUGS + +Nothing here yet. + +=head1 AUTHOR + +G. Richardson Egrichardson@kivitendo-premium.deE + +=cut