From b280b4890c813b5535b6e98b27c390d9af10551a Mon Sep 17 00:00:00 2001 From: Kyle M Hall Date: Tue, 20 Jan 2015 10:11:24 -0500 Subject: [PATCH] Bug 13603 - autoBarcode setting hbyymmincr not taking month into account when looking up next increment The hbyymmincr autoBarcode builder looks up all barcodes that begin with any number of letters ( the branchcode ) and a two-digit year directly afterward ( e.g. MPL15 ), then grabs the last four digits as the increment counter. The problem is, this does not take months into account, so unlike the description that says the system is limited to 10,000 items a month, it is limited to 10,000 items per *year*. This situation can easily be corrected my adding the month into the lookup ( e.g. MPL1501 ). Test Plan: 1) Enable autoBarcode, set to hbyymmincr 2) Catalog an item, let the barcode.pl plugin generate the next barcode. 3) Catalog an item with the barcode MPL15009999 4) Catalog another item, use the barcode.pl plugin to generate the next barcode. 5) Note the barcode is generated ends with '0001' instead of the correct increment 6) Apply this patch 7) Repeat step 4 8) Note the barcode now ends with the correct increment Signed-off-by: Kyle M Hall Signed-off-by: Jeanne Heicher Signed-off-by: Katrin Fischer Problem confirmed - the continuing number bit was not reset to start counting from 1 again on the beginning of a new month. Signed-off-by: Tomas Cohen Arazi --- C4/Barcodes/ValueBuilder.pm | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/C4/Barcodes/ValueBuilder.pm b/C4/Barcodes/ValueBuilder.pm index 13c57924f9..341d339fd0 100644 --- a/C4/Barcodes/ValueBuilder.pm +++ b/C4/Barcodes/ValueBuilder.pm @@ -44,19 +44,20 @@ my $DEBUG = 0; sub get_barcode { my ($args) = @_; - my $nextnum; + my $nextnum = 0; my $year = substr($args->{year}, -2); + my $month = $args->{mon}; my $query = "SELECT MAX(CAST(SUBSTRING(barcode,-4) AS signed)) AS number FROM items WHERE barcode REGEXP ?"; my $sth = C4::Context->dbh->prepare($query); - $sth->execute("^[-a-zA-Z]{1,}$year"); + $sth->execute("^[-a-zA-Z]{1,}$year$month"); while (my ($count)= $sth->fetchrow_array) { $nextnum = $count if $count; - $nextnum = 0 if $nextnum == 9999; # this sequence only allows for cataloging 10000 books per month + $nextnum = 0 if $nextnum == 9999; # this sequence only allows for cataloging 9999 items per month warn "Existing incremental number = $nextnum" if $DEBUG; } $nextnum++; $nextnum = sprintf("%0*d", "4",$nextnum); - $nextnum = $year . $args->{mon} . $nextnum; + $nextnum = $year . $month . $nextnum; warn "New hbyymmincr Barcode = $nextnum" if $DEBUG; my $scr = " for (i=0 ; i