3 package C4::Barcodes::annual;
5 # Copyright 2008 LibLime
7 # This file is part of Koha.
9 # Koha is free software; you can redistribute it and/or modify it under the
10 # terms of the GNU General Public License as published by the Free Software
11 # Foundation; either version 2 of the License, or (at your option) any later
14 # Koha is distributed in the hope that it will be useful, but WITHOUT ANY
15 # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
16 # A PARTICULAR PURPOSE. See the GNU General Public License for more details.
18 # You should have received a copy of the GNU General Public License along with
19 # Koha; if not, write to the Free Software Foundation, Inc., 59 Temple Place,
20 # Suite 330, Boston, MA 02111-1307 USA
31 use vars qw($VERSION @ISA);
32 use vars qw($debug $cgi_debug); # from C4::Debug, of course
37 @ISA = qw(C4::Barcodes);
43 my $query = "SELECT max(substring_index(barcode,'-',-1)) AS chunk,barcode FROM items WHERE barcode LIKE ? GROUP BY barcode";
44 # FIXME: unreasonably expensive query on large datasets
45 my $sth = C4::Context->dbh->prepare($query);
49 $iso = C4::Dates->new($input,'iso')->output('iso'); # try to set the date w/ 2nd arg
51 warn "Failed to create 'iso' Dates object with input '$input'. Reverting to today's date.";
52 $iso = C4::Dates->new->output('iso'); # failover back to today
55 $iso = C4::Dates->new->output('iso');
57 my $year = substr($iso,0,4); # YYYY
58 $sth->execute("$year-%");
59 my $row = $sth->fetchrow_hashref;
60 warn "barcode db_max (annual format, year $year): $row->{barcode}" if $debug;
61 return $row->{barcode};
66 return substr(C4::Dates->new->output('iso'),0,4) .'-'. sprintf('%'."$width.$width".'d', 1);
71 my $barcode = (@_) ? shift : $self->value;
72 unless ($barcode =~ /(\d{4}-)(\d+)$/) { # non-greedy match in first part
73 carp "Barcode '$barcode' has no incrementing part!";
74 return ($barcode,undef,undef);
76 $debug and warn "Barcode '$barcode' parses into: '$1', '$2', ''";
77 return ($1,$2,''); # the third part is in anticipation of barcodes that include checkdigits
81 (@_) and $width = shift; # hitting the class variable.
84 sub process_head($$;$$) { # (self,head,whole,specific)
85 my ($self,$head,$whole,$specific) = @_;
86 $specific and return $head; # if this is built off an existing barcode, just return the head unchanged.
87 return substr(C4::Dates->new->output('iso'),0,4) . '-'; # else get new YYYY-
92 my $type = ref($class) || $class;
93 my $self = $type->default_self('annual');
94 return bless $self, $type;