From 80b72099b7a61e436c854e375ab4dfc01ac4bca0 Mon Sep 17 00:00:00 2001 From: Kyle M Hall Date: Tue, 20 Jan 2015 10:11:24 -0500 Subject: [PATCH] [SIGNED-OFF] 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 --- C4/Barcodes/ValueBuilder.pm | 9 +++++---- 1 files changed, 5 insertions(+), 4 deletions(-) diff --git a/C4/Barcodes/ValueBuilder.pm b/C4/Barcodes/ValueBuilder.pm index 13c5792..341d339 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