package C4::Serials;
# Copyright 2000-2002 Katipo Communications
+# Parts Copyright 2010 Biblibre
#
# This file is part of Koha.
#
sub GetSuppliersWithLateIssues {
my $dbh = C4::Context->dbh;
- my $query = q|
- SELECT DISTINCT aqbooksellerid as id, aqbooksellers.name as name
+ my $query = qq|
+ SELECT DISTINCT id, name
FROM subscription
LEFT JOIN serial ON serial.subscriptionid=subscription.subscriptionid
LEFT JOIN aqbooksellers ON subscription.aqbooksellerid = aqbooksellers.id
- WHERE id > 0 AND (planneddate < now() OR serial.STATUS = 3 OR serial.STATUS = 4) ORDER BY name|;
+ WHERE id > 0 AND ((planneddate < now() AND serial.status=1) OR serial.STATUS = 3 OR serial.STATUS = 4) ORDER BY name|;
return $dbh->selectall_arrayref($query, { Slice => {} });
}
LEFT JOIN biblio ON biblio.biblionumber = subscription.biblionumber
LEFT JOIN aqbooksellers ON subscription.aqbooksellerid = aqbooksellers.id
WHERE ((planneddate < now() AND serial.STATUS =1) OR serial.STATUS = 3)
- AND subscription.aqbooksellerid=$supplierid
+ AND subscription.aqbooksellerid=?
ORDER BY title
|;
$sth = $dbh->prepare($query);
+ $sth->execute($supplierid);
} else {
my $query = qq|
SELECT name,title,planneddate,serialseq,serial.subscriptionid
ORDER BY title
|;
$sth = $dbh->prepare($query);
+ $sth->execute;
}
- $sth->execute;
my @issuelist;
my $last_title;
my $odd = 0;
my $dbh = C4::Context->dbh;
$date = strftime( "%Y-%m-%d", localtime ) unless ($date);
my $query = "
- UPDATE serial SET claimdate=$date,status=7
- WHERE serialid in (" . join( ",", @$serialids ) . ")";
+ UPDATE serial SET claimdate = ?, status = 7
+ WHERE serialid in (" . join( ",", map { '?' } @$serialids ) . ")";
my $rq = $dbh->prepare($query);
- $rq->execute;
+ $rq->execute($date, @$serialids);
return $rq->rows;
}
my $first;
my $previousnote = "";
- foreach my $subs (@$lines) {
- $subs->{'publisheddate'} = (
- $subs->{'publisheddate'}
- ? format_date( $subs->{'publisheddate'} )
- : "XXX"
- );
+ foreach my $subs (@{$lines}) {
+ for my $datefield ( qw(publisheddate planneddate) ) {
+ # handle both undef and undef returned as 0000-00-00
+ if (!defined $subs->{$datefield} or $subs->{$datefield}=~m/^00/) {
+ $subs->{$datefield} = 'XXX';
+ }
+ else {
+ $subs->{$datefield} = format_date( $subs->{$datefield} );
+ }
+ }
$subs->{'branchname'} = GetBranchName( $subs->{'branchcode'} );
- $subs->{'planneddate'} = format_date( $subs->{'planneddate'} );
$subs->{ "status" . $subs->{'status'} } = 1;
$subs->{"checked"} = $subs->{'status'} =~ /1|3|4|7/;
foreach my $key ( sort { $b cmp $a } keys %tmpresults ) {
push @res, $tmpresults{$key};
}
- $res[0]->{'first'} = 1;
return \@res;
}
my @sqlstrings;
my @strings_to_search;
@strings_to_search = map { "%$_%" } split( / /, $string );
- foreach my $index qw(biblio.title subscription.callnumber subscription.location subscription.notes subscription.internalnotes) {
+ foreach my $index (qw(biblio.title subscription.callnumber subscription.location subscription.notes subscription.internalnotes)) {
push @bind_params, @strings_to_search;
my $tmpstring = "AND $index LIKE ? " x scalar(@strings_to_search);
$debug && warn "$tmpstring";
my @sqlstrings;
my @strings_to_search;
@strings_to_search = map { "%$_%" } split( / /, $issn );
- foreach my $index qw(biblioitems.issn subscription.callnumber) {
+ foreach my $index ( qw(biblioitems.issn subscription.callnumber)) {
push @bind_params, @strings_to_search;
my $tmpstring = "OR $index LIKE ? " x scalar(@strings_to_search);
$debug && warn "$tmpstring";
$sth = $dbh->prepare($sql);
$sth->execute(@bind_params);
my @results;
- my $previoustitle = "";
+ my $previousbiblio = "";
my $odd = 1;
while ( my $line = $sth->fetchrow_hashref ) {
- if ( $previoustitle eq $line->{title} ) {
+ if ( $previousbiblio eq $line->{biblionumber} ) {
$line->{title} = "";
$line->{issn} = "";
} else {
- $previoustitle = $line->{title};
+ $previousbiblio = $line->{biblionumber};
$odd = -$odd;
}
$line->{toggle} = 1 if $odd == 1;
while ( my $line = $sth->fetchrow_hashref ) {
$line->{ "status" . $line->{status} } = 1; # fills a "statusX" value, used for template status select list
- $line->{"publisheddate"} = format_date( $line->{"publisheddate"} );
- $line->{"planneddate"} = format_date( $line->{"planneddate"} );
+ for my $datefield ( qw( planneddate publisheddate) ) {
+ if ($line->{$datefield} && $line->{$datefield}!~m/^00/) {
+ $line->{$datefield} = format_date( $line->{$datefield});
+ } else {
+ $line->{$datefield} = q{};
+ }
+ }
push @serials, $line;
}
while ( ( my $line = $sth->fetchrow_hashref ) && $counter < $count ) {
$counter++;
$line->{ "status" . $line->{status} } = 1; # fills a "statusX" value, used for template status select list
- $line->{"planneddate"} = format_date( $line->{"planneddate"} );
- $line->{"publisheddate"} = format_date( $line->{"publisheddate"} );
+ for my $datefield ( qw( planneddate publisheddate) ) {
+ if ($line->{$datefield} && $line->{$datefield}!~m/^00/) {
+ $line->{$datefield} = format_date( $line->{$datefield});
+ } else {
+ $line->{$datefield} = q{};
+ }
+ }
+
push @serials, $line;
}
my @serials;
while ( my $line = $sth->fetchrow_hashref ) {
- $line->{ "status" . $line->{status} } = 1; # fills a "statusX" value, used for template status select list
- $line->{"planneddate"} = format_date( $line->{"planneddate"} );
- $line->{"publisheddate"} = format_date( $line->{"publisheddate"} );
+ $line->{ "status" . $line->{status} } = 1; # fills a "statusX" value, used for template status select list
+ # Format dates for display
+ for my $datefield ( qw( planneddate publisheddate ) ) {
+ if ($line->{$datefield} =~m/^00/) {
+ $line->{$datefield} = q{};
+ }
+ else {
+ $line->{$datefield} = format_date( $line->{$datefield} );
+ }
+ }
push @serials, $line;
}
return @serials;
=head2 GetExpirationDate
-$sensddate = GetExpirationDate($subscriptionid, [$startdate])
+$enddate = GetExpirationDate($subscriptionid, [$startdate])
this function return the next expiration date for a subscription given on input args.
$internalnotes, $serialsadditems, $staffdisplaycount, $opacdisplaycount, $graceperiod, $location, $enddate
);
- #then create the 1st waited number
my $subscriptionid = $dbh->{'mysql_insertid'};
+ unless ($enddate){
+ $enddate = GetExpirationDate($subscriptionid,$startdate);
+ $query = q|
+ UPDATE subscription
+ SET enddate=?
+ WHERE subscriptionid=?
+ |;
+ $sth = $dbh->prepare($query);
+ $sth->execute( $enddate, $subscriptionid );
+ }
+ #then create the 1st waited number
$query = qq(
INSERT INTO subscriptionhistory
(biblionumber, subscriptionid, histstartdate, opacnote, librariannote)
my $fwk = GetFrameworkCode( $data->{'biblionumber'} );
if ( $info->{barcode} ) {
my @errors;
- my $exists = itemdata( $info->{'barcode'} );
- push @errors, "barcode_not_unique" if ($exists);
- unless ($exists) {
+ if ( is_barcode_in_use( $info->{barcode} ) ) {
+ push @errors, 'barcode_not_unique';
+ } else {
my $marcrecord = MARC::Record->new();
my ( $tag, $subfield ) = GetMarcFromKohaField( "items.barcode", $fwk );
my $newField = MARC::Field->new( "$tag", '', '', "$subfield" => $info->{barcode} );
my $dbh = C4::Context->dbh;
my $subscription = GetSubscription($subscriptionid);
if ( ( $subscription->{periodicity} % 16 ) > 0 ) {
- my $expirationdate = $subscription->{enddate};
+ my $expirationdate = $subscription->{enddate} || GetExpirationDate($subscriptionid);
if (!defined $expirationdate) {
$expirationdate = q{};
}
my $sth = $dbh->prepare($query);
$sth->execute($subscriptionid);
my ($res) = $sth->fetchrow;
- return 0 unless $res;
+ if (!$res || $res=~m/^0000/) {
+ return 0;
+ }
my @res = split( /-/, $res );
my @endofsubscriptiondate = split( /-/, $expirationdate );
return 2 if ( scalar(@res) != 3 || scalar(@endofsubscriptiondate) != 3 || not check_date(@res) || not check_date(@endofsubscriptiondate) );
"SELECT
serialid, aqbooksellerid, name,
biblio.title, planneddate, serialseq,
- serial.status, serial.subscriptionid, claimdate
+ serial.status, serial.subscriptionid, claimdate,
+ subscription.branchcode
FROM serial
LEFT JOIN subscription ON serial.subscriptionid=subscription.subscriptionid
LEFT JOIN biblio ON subscription.biblionumber=biblio.biblionumber
"SELECT
serialid, aqbooksellerid, name,
biblio.title, planneddate, serialseq,
- serial.status, serial.subscriptionid, claimdate
+ serial.status, serial.subscriptionid, claimdate,
+ subscription.branchcode
FROM serial
LEFT JOIN subscription ON serial.subscriptionid=subscription.subscriptionid
LEFT JOIN biblio ON subscription.biblionumber=biblio.biblionumber
sub HasItems {
my ($subscriptionid) = @_;
my $dbh = C4::Context->dbh;
- my $query = qq|
+ my $query = q|
SELECT COUNT(serialitems.itemnumber)
FROM serial
LEFT JOIN serialitems USING(serialid)
- WHERE subscriptionid=? AND serialitems.serialid NOT NULL
+ WHERE subscriptionid=? AND serialitems.serialid IS NOT NULL
|;
my $sth=$dbh->prepare($query);
$sth->execute($subscriptionid);
- my ($countitems)=$sth->fetchrow;
+ my ($countitems)=$sth->fetchrow_array();
return $countitems;
}
return "$resultdate";
}
-=head2 itemdata
+=head2 is_barcode_in_use
- $item = itemdata($barcode);
-
-Looks up the item with the given barcode, and returns a
-reference-to-hash containing information about that item. The keys of
-the hash are the fields from the C<items> and C<biblioitems> tables in
-the Koha database.
+Returns number of occurence of the barcode in the items table
+Can be used as a boolean test of whether the barcode has
+been deployed as yet
=cut
-#'
-sub itemdata {
- my ($barcode) = @_;
+sub is_barcode_in_use {
+ my $barcode = shift;
my $dbh = C4::Context->dbh;
- my $sth = $dbh->prepare(
- "Select * from items LEFT JOIN biblioitems ON items.biblioitemnumber=biblioitems.biblioitemnumber
- WHERE barcode=?"
+ my $occurences = $dbh->selectall_arrayref(
+ 'SELECT itemnumber from items where barcode = ?',
+ {}, $barcode
+
);
- $sth->execute($barcode);
- my $data = $sth->fetchrow_hashref;
- $sth->finish;
- return ($data);
+
+ return @{$occurences};
}
1;