package LIMS::Controller::Roles::Storage;
use POSIX;
use Moose::Role;
use Data::Printer alias => 'p';
# calculates location of rack and tray according to location specification:
sub auto_location {
my ($self, $base_location) = @_;
my $i = do {
my $q = [ storage_location => { like => $base_location . '%' } ];
$self->model('Base')->get_objects_count('StorageRack', { query => $q });
}; # p $i;
if ( $self->cfg('settings')->{'_centre'} eq 'leeds' ) {
# see scripts/test_scripts/storage_locations.pl for calculations
my $rack = floor($i / 36) + 1; # p $rack;
my $tray = floor($i % 36 / 4) + 1; # p $tray;
if ( $base_location eq 'Archive' ) { # replace rack number with letter:
my $letter = 'A'; # start at A and auto-increment, a ..z, aa, ab, etc
$letter++ while --$rack; # p $letter;
$rack = $letter;
}
return join '/', $base_location, $rack, $tray;
}
# else { return join '/', $base_location, ++$i }
return $base_location; # will be free-text box
}
1;