Tengo el siguiente trozo de código, es una función que se encarga de mirar cual es el mayor código de barras que hay en la base de datos del tipo hbyymmincr (Home Branch+Year+Month+Incremental).
El mayor problema lo tengo en la frase en rojo, puesto que no me devuelve ningún valor. Por lo tanto no detecta que hay un código del tipo hbyymmincr en la BD. Por lo tanto toma el valor inicial, por ejemplo, "OLE108120001" luego le suma 1 y cada vez que quiero catalogar un nuevo libro me pone que el código que toca es el "OLE108120002" pero ese ya está introducido
por lo tanto código duplicado...
LLevo varios días dándole vueltas y ya no se qué pasa.
Ojalá me podais ayudar...
gracias a todos... si teneis alguna duda preguntad!!
--------------------------------------------------------------------------------------------------------
La función es la siguiente:
sub db_max ($;$) {
my $self = shift;
my $query = "SELECT MAX(SUBSTRING(barcode,-$width)), barcode FROM items WHERE barcode REGEXP ? GROUP BY barcode";
$debug and print STDERR "(hbyymmincr) db_max query: $query\n";
my $sth = C4::Context->dbh->prepare($query);
my ($iso);
if (@_) {
my $input = shift;
$iso = C4::Dates->new($input,'iso')->output('iso'); # try to set the date w/ 2nd arg
unless ($iso) {
warn "Failed to create 'iso' Dates object with input '$input'. Reverting to today's date.";
$iso = C4::Dates->new->output('iso'); # failover back to today
}
} else {
$iso = C4::Dates->new->output('iso');
}
my $year = substr($iso,2,2); # i.e. "08" for 2008
my $andtwo = $width+2; #$width vale 4
$sth->execute("^[a-zA-Z]{1,4}" . $year . "[0-9]{$andtwo}"); # the extra two digits are the month. we don't care what they are, just that they are there.
warn "CONTENIDO: ".$sth->rows;
unless ($sth->rows) {
warn "No existing hbyymmincr barcodes found. Reverting to initial value.";
return $self->initial;
}
my ($row) = $sth->fetchrow_hashref;
my $max = $row->{barcode};
warn "barcode max (hbyymmincr format): $max" if $debug;
return ($max || 0);
}