X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=C4%2FSerials.pm;h=2de4ab324c653db90208e82f38e39e5c53f10210;hb=d4f6022e436056f9b32e7ab2456c3256044faf8f;hp=b7785b7b2d2ec9875773792fb08f51d187d09a5b;hpb=a481fad4b7e84e1571fb2750ee99d1edf234b796;p=koha.git diff --git a/C4/Serials.pm b/C4/Serials.pm index b7785b7b2d..2de4ab324c 100644 --- a/C4/Serials.pm +++ b/C4/Serials.pm @@ -17,47 +17,27 @@ package C4::Serials; #assumes C4/Serials.pm # Koha; if not, write to the Free Software Foundation, Inc., 59 Temple Place, # Suite 330, Boston, MA 02111-1307 USA -# $Id$ use strict; -use C4::Date; +use C4::Dates qw(format_date format_date_in_iso); use Date::Calc qw(:all); use POSIX qw(strftime); use C4::Suggestions; use C4::Koha; use C4::Biblio; +use C4::Items; use C4::Search; use C4::Letters; use C4::Log; # logaction - -require Exporter; +use C4::Debug; use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS); -# set the version for version checking -$VERSION = do { my @v = '$Revision$' =~ /\d+/g; - shift(@v) . "." . join( "_", map { sprintf "%03d", $_ } @v ); -}; - -=head1 NAME - -C4::Serials - Give functions for serializing. - -=head1 SYNOPSIS - - use C4::Serials; - -=head1 DESCRIPTION - -Give all XYZ functions - -=head1 FUNCTIONS - -=cut - -@ISA = qw(Exporter); -@EXPORT = qw( - +BEGIN { + $VERSION = 3.01; # set version for version checking + require Exporter; + @ISA = qw(Exporter); + @EXPORT = qw( &NewSubscription &ModSubscription &DelSubscription &GetSubscriptions &GetSubscription &CountSubscriptionFromBiblionumber &GetSubscriptionsFromBiblionumber &GetFullSubscriptionsFromBiblionumber &GetFullSubscription &ModSubscriptionHistory @@ -67,20 +47,34 @@ Give all XYZ functions &GetLatestSerials &ModSerialStatus &GetNextDate &GetSerials2 &ReNewSubscription &GetLateIssues &GetLateOrMissingIssues &GetSerialInformation &AddItem2Serial - &PrepareSerialsData + &PrepareSerialsData &GetNextExpected &ModNextExpected &UpdateClaimdateIssues &GetSuppliersWithLateIssues &getsupplierbyserialid - &GetDistributedTo &SetDistributedTo &getroutinglist &delroutingmember &addroutingmember &reorder_members &check_routing &updateClaim &removeMissingIssue &old_newsubscription &old_modsubscription &old_getserials -); + ); +} =head2 GetSuppliersWithLateIssues +=head1 NAME + +C4::Serials - Give functions for serializing. + +=head1 SYNOPSIS + + use C4::Serials; + +=head1 DESCRIPTION + +Give all XYZ functions + +=head1 FUNCTIONS + =over 4 %supplierlist = &GetSuppliersWithLateIssues @@ -98,10 +92,12 @@ sub GetSuppliersWithLateIssues { my $dbh = C4::Context->dbh; my $query = qq| SELECT DISTINCT id, name - FROM subscription, serial + FROM subscription + LEFT JOIN serial ON serial.subscriptionid=subscription.subscriptionid LEFT JOIN aqbooksellers ON subscription.aqbooksellerid = aqbooksellers.id WHERE subscription.subscriptionid = serial.subscriptionid AND (planneddate < now() OR serial.STATUS = 3 OR serial.STATUS = 4) + ORDER BY name |; my $sth = $dbh->prepare($query); $sth->execute; @@ -109,9 +105,6 @@ sub GetSuppliersWithLateIssues { while ( my ( $id, $name ) = $sth->fetchrow ) { $supplierlist{$id} = $name; } - if ( C4::Context->preference("RoutingSerials") ) { - $supplierlist{''} = "All Suppliers"; - } return %supplierlist; } @@ -138,12 +131,12 @@ sub GetLateIssues { if ($supplierid) { my $query = qq| SELECT name,title,planneddate,serialseq,serial.subscriptionid - FROM subscription, serial, biblio + FROM subscription + LEFT JOIN serial ON subscription.subscriptionid = serial.subscriptionid + LEFT JOIN biblio ON biblio.biblionumber = subscription.biblionumber LEFT JOIN aqbooksellers ON subscription.aqbooksellerid = aqbooksellers.id - WHERE subscription.subscriptionid = serial.subscriptionid - AND ((planneddate < now() AND serial.STATUS =1) OR serial.STATUS = 3) + WHERE ((planneddate < now() AND serial.STATUS =1) OR serial.STATUS = 3) AND subscription.aqbooksellerid=$supplierid - AND biblio.biblionumber = subscription.biblionumber ORDER BY title |; $sth = $dbh->prepare($query); @@ -151,11 +144,11 @@ sub GetLateIssues { else { my $query = qq| SELECT name,title,planneddate,serialseq,serial.subscriptionid - FROM subscription, serial, biblio + FROM subscription + LEFT JOIN serial ON subscription.subscriptionid = serial.subscriptionid + LEFT JOIN biblio ON biblio.biblionumber = subscription.biblionumber LEFT JOIN aqbooksellers ON subscription.aqbooksellerid = aqbooksellers.id - WHERE subscription.subscriptionid = serial.subscriptionid - AND ((planneddate < now() AND serial.STATUS =1) OR serial.STATUS = 3) - AND biblio.biblionumber = subscription.biblionumber + WHERE ((planneddate < now() AND serial.STATUS =1) OR serial.STATUS = 3) ORDER BY title |; $sth = $dbh->prepare($query); @@ -243,26 +236,34 @@ sub GetSerialInformation { my ($serialid) = @_; my $dbh = C4::Context->dbh; my $query = qq| - SELECT serial.*, serial.notes as sernotes, serial.status as serstatus,subscription.*,subscription.subscriptionid as subsid + SELECT serial.*, serial.notes as sernotes, serial.status as serstatus,subscription.*,subscription.subscriptionid as subsid |; + if (C4::Context->preference('IndependantBranches') && + C4::Context->userenv && + C4::Context->userenv->{'flags'} != 1 && C4::Context->userenv->{'branch'}){ + $query.=" + , ((subscription.branchcode <>\"".C4::Context->userenv->{'branch'}."\") and subscription.branchcode <>\"\" and subscription.branchcode IS NOT NULL) as cannotedit "; + } + $query .= qq| FROM serial LEFT JOIN subscription ON subscription.subscriptionid=serial.subscriptionid WHERE serialid = ? |; my $rq = $dbh->prepare($query); $rq->execute($serialid); my $data = $rq->fetchrow_hashref; - - if ( C4::Context->preference("serialsadditems") ) { - if ( $data->{'itemnumber'} ) { - my @itemnumbers = split /,/, $data->{'itemnumber'}; - foreach my $itemnum (@itemnumbers) { - + # create item information if we have serialsadditems for this subscription + if ( $data->{'serialsadditems'} ) { + my $queryitem=$dbh->prepare("SELECT itemnumber from serialitems where serialid=?"); + $queryitem->execute($serialid); + my $itemnumbers=$queryitem->fetchall_arrayref([0]); + if (scalar(@$itemnumbers)>0){ + foreach my $itemnum (@$itemnumbers) { #It is ASSUMED that GetMarcItem ALWAYS WORK... #Maybe GetMarcItem should return values on failure -# warn "itemnumber :$itemnum, bibnum :".$data->{'biblionumber'}; + $debug and warn "itemnumber :$itemnum->[0], bibnum :".$data->{'biblionumber'}; my $itemprocessed = - PrepareItemrecordDisplay( $data->{'biblionumber'}, $itemnum ); - $itemprocessed->{'itemnumber'} = $itemnum; - $itemprocessed->{'itemid'} = $itemnum; + PrepareItemrecordDisplay( $data->{'biblionumber'}, $itemnum->[0] , $data ); + $itemprocessed->{'itemnumber'} = $itemnum->[0]; + $itemprocessed->{'itemid'} = $itemnum->[0]; $itemprocessed->{'serialid'} = $serialid; $itemprocessed->{'biblionumber'} = $data->{'biblionumber'}; push @{ $data->{'items'} }, $itemprocessed; @@ -270,7 +271,7 @@ sub GetSerialInformation { } else { my $itemprocessed = - PrepareItemrecordDisplay( $data->{'biblionumber'} ); + PrepareItemrecordDisplay( $data->{'biblionumber'}, '', $data ); $itemprocessed->{'itemid'} = "N$serialid"; $itemprocessed->{'serialid'} = $serialid; $itemprocessed->{'biblionumber'} = $data->{'biblionumber'}; @@ -286,12 +287,13 @@ sub GetSerialInformation { return $data; } -=head2 GetSerialInformation +=head2 AddItem2Serial =over 4 $data = AddItem2Serial($serialid,$itemnumber); Adds an itemnumber to Serial record + =back =cut @@ -299,12 +301,8 @@ Adds an itemnumber to Serial record sub AddItem2Serial { my ( $serialid, $itemnumber ) = @_; my $dbh = C4::Context->dbh; - my $query = qq| - UPDATE serial SET itemnumber=IF(itemnumber IS NULL, $itemnumber, CONCAT(itemnumber,",",$itemnumber)) - WHERE serialid = ? - |; - my $rq = $dbh->prepare($query); - $rq->execute($serialid); + my $rq = $dbh->prepare("INSERT INTO `serialitems` SET serialid=? , itemnumber=?"); + $rq->execute($serialid, $itemnumber); return $rq->rows; } @@ -316,6 +314,7 @@ UpdateClaimdateIssues($serialids,[$date]); Update Claimdate for issues in @$serialids list with date $date (Take Today if none) + =back =cut @@ -353,10 +352,18 @@ sub GetSubscription { my $query = qq( SELECT subscription.*, subscriptionhistory.*, + subscriptionhistory.enddate as histenddate, aqbudget.bookfundid, aqbooksellers.name AS aqbooksellername, biblio.title AS bibliotitle, - subscription.biblionumber as bibnum + subscription.biblionumber as bibnum); + if (C4::Context->preference('IndependantBranches') && + C4::Context->userenv && + C4::Context->userenv->{'flags'} != 1 && C4::Context->userenv->{'branch'}){ + $query.=" + , ((subscription.branchcode <>\"".C4::Context->userenv->{'branch'}."\") and subscription.branchcode <>\"\" and subscription.branchcode IS NOT NULL) as cannotedit "; + } + $query .= qq( FROM subscription LEFT JOIN subscriptionhistory ON subscription.subscriptionid=subscriptionhistory.subscriptionid LEFT JOIN aqbudget ON subscription.aqbudgetid=aqbudget.aqbudgetid @@ -364,17 +371,16 @@ sub GetSubscription { LEFT JOIN biblio ON biblio.biblionumber=subscription.biblionumber WHERE subscription.subscriptionid = ? ); - if (C4::Context->preference('IndependantBranches') && - C4::Context->userenv && - C4::Context->userenv->{'flags'} != 1){ -# warn "flags: ".C4::Context->userenv->{'flags'}; - $query.=" AND subscription.branchcode IN ('".C4::Context->userenv->{'branch'}."',\"''\")"; - } -# warn "query : $query"; +# if (C4::Context->preference('IndependantBranches') && +# C4::Context->userenv && +# C4::Context->userenv->{'flags'} != 1){ +# # $debug and warn "flags: ".C4::Context->userenv->{'flags'}; +# $query.=" AND subscription.branchcode IN ('".C4::Context->userenv->{'branch'}."',\"\")"; +# } + $debug and warn "query : $query\nsubsid :$subscriptionid"; my $sth = $dbh->prepare($query); $sth->execute($subscriptionid); - my $subs = $sth->fetchrow_hashref; - return $subs; + return $sth->fetchrow_hashref; } =head2 GetFullSubscription @@ -402,29 +408,29 @@ sub GetFullSubscription { aqbudget.bookfundid,aqbooksellers.name as aqbooksellername, biblio.title as bibliotitle, subscription.branchcode AS branchcode, - subscription.subscriptionid AS subscriptionid + subscription.subscriptionid AS subscriptionid |; + if (C4::Context->preference('IndependantBranches') && + C4::Context->userenv && + C4::Context->userenv->{'flags'} != 1 && C4::Context->userenv->{'branch'}){ + $query.=" + , ((subscription.branchcode <>\"".C4::Context->userenv->{'branch'}."\") and subscription.branchcode <>\"\" and subscription.branchcode IS NOT NULL) as cannotedit "; + } + $query.=qq| FROM serial LEFT JOIN subscription ON - (serial.subscriptionid=subscription.subscriptionid AND subscription.biblionumber=serial.biblionumber) + (serial.subscriptionid=subscription.subscriptionid ) LEFT JOIN aqbudget ON subscription.aqbudgetid=aqbudget.aqbudgetid LEFT JOIN aqbooksellers on subscription.aqbooksellerid=aqbooksellers.id LEFT JOIN biblio on biblio.biblionumber=subscription.biblionumber - WHERE serial.subscriptionid = ? |; - if (C4::Context->preference('IndependantBranches') && - C4::Context->userenv && - C4::Context->userenv->{'flags'} != 1){ - $query.=" - AND subscription.branchcode IN ('".C4::Context->userenv->{'branch'}."',\"''\")"; - } - $query .=qq| + WHERE serial.subscriptionid = ? ORDER BY year DESC, IF(serial.publisheddate="00-00-0000",serial.planneddate,serial.publisheddate) DESC, serial.subscriptionid |; + $debug and warn "GetFullSubscription query: $query"; my $sth = $dbh->prepare($query); $sth->execute($subscriptionid); - my $subs = $sth->fetchall_arrayref({}); - return $subs; + return $sth->fetchall_arrayref({}); } @@ -478,8 +484,8 @@ sub PrepareSerialsData{ 'bibliotitle' => $subs->{'bibliotitle'}, 'serials' => [$subs], 'first' => $first, - 'branchcode' => $subs->{'branchcode'}, - 'subscriptionid' => $subs->{'subscriptionid'}, +# 'branchcode' => $subs->{'branchcode'}, +# 'subscriptionid' => $subs->{'subscriptionid'}, }; } @@ -488,6 +494,7 @@ sub PrepareSerialsData{ foreach my $key ( sort { $b cmp $a } keys %tmpresults ) { push @res, $tmpresults{$key}; } + $res[0]->{'first'}=1; return \@res; } @@ -509,6 +516,7 @@ sub GetSubscriptionsFromBiblionumber { SELECT subscription.*, branches.branchname, subscriptionhistory.*, + subscriptionhistory.enddate as histenddate, aqbudget.bookfundid, aqbooksellers.name AS aqbooksellername, biblio.title AS bibliotitle @@ -520,23 +528,29 @@ sub GetSubscriptionsFromBiblionumber { LEFT JOIN branches ON branches.branchcode=subscription.branchcode WHERE subscription.biblionumber = ? ); - if (C4::Context->preference('IndependantBranches') && - C4::Context->userenv && - C4::Context->userenv->{'flags'} != 1){ - $query.=" AND subscription.branchcode IN ('".C4::Context->userenv->{'branch'}."',\"''\")"; - } +# if (C4::Context->preference('IndependantBranches') && +# C4::Context->userenv && +# C4::Context->userenv->{'flags'} != 1){ +# $query.=" AND subscription.branchcode IN ('".C4::Context->userenv->{'branch'}."',\"\")"; +# } my $sth = $dbh->prepare($query); $sth->execute($biblionumber); my @res; while ( my $subs = $sth->fetchrow_hashref ) { $subs->{startdate} = format_date( $subs->{startdate} ); $subs->{histstartdate} = format_date( $subs->{histstartdate} ); + $subs->{histenddate} = format_date( $subs->{histenddate} ); $subs->{opacnote} =~ s/\n/\/g; $subs->{missinglist} =~ s/\n/\/g; $subs->{recievedlist} =~ s/\n/\/g; $subs->{ "periodicity" . $subs->{periodicity} } = 1; $subs->{ "numberpattern" . $subs->{numberpattern} } = 1; $subs->{ "status" . $subs->{'status'} } = 1; + $subs->{'cannotedit'}=(C4::Context->preference('IndependantBranches') && + C4::Context->userenv && + C4::Context->userenv->{flags} % 2 !=1 && + C4::Context->userenv->{branch} && $subs->{branchcode} && + (C4::Context->userenv->{branch} ne $subs->{branchcode})); if ( $subs->{enddate} eq '0000-00-00' ) { $subs->{enddate} = ''; } @@ -575,29 +589,29 @@ sub GetFullSubscriptionsFromBiblionumber { aqbudget.bookfundid,aqbooksellers.name as aqbooksellername, biblio.title as bibliotitle, subscription.branchcode AS branchcode, - subscription.subscriptionid AS subscriptionid + subscription.subscriptionid AS subscriptionid|; + if (C4::Context->preference('IndependantBranches') && + C4::Context->userenv && + C4::Context->userenv->{'flags'} != 1 && C4::Context->userenv->{'branch'}){ + $query.=" + , ((subscription.branchcode <>\"".C4::Context->userenv->{'branch'}."\") and subscription.branchcode <>\"\" and subscription.branchcode IS NOT NULL) as cannotedit "; + } + + $query.=qq| FROM serial LEFT JOIN subscription ON - (serial.subscriptionid=subscription.subscriptionid AND subscription.biblionumber=serial.biblionumber) + (serial.subscriptionid=subscription.subscriptionid) LEFT JOIN aqbudget ON subscription.aqbudgetid=aqbudget.aqbudgetid LEFT JOIN aqbooksellers on subscription.aqbooksellerid=aqbooksellers.id LEFT JOIN biblio on biblio.biblionumber=subscription.biblionumber - WHERE subscription.biblionumber = ? |; - if (C4::Context->preference('IndependantBranches') && - C4::Context->userenv && - C4::Context->userenv->{'flags'} != 1){ - $query.=" - AND subscription.branchcode IN ('".C4::Context->userenv->{'branch'}."',\"''\")"; - } - $query .=qq| + WHERE subscription.biblionumber = ? ORDER BY year DESC, IF(serial.publisheddate="00-00-0000",serial.planneddate,serial.publisheddate) DESC, serial.subscriptionid |; my $sth = $dbh->prepare($query); $sth->execute($biblionumber); - my $subs= $sth->fetchall_arrayref({}); - return $subs; + return $sth->fetchall_arrayref({}); } =head2 GetSubscriptions @@ -620,75 +634,57 @@ sub GetSubscriptions { my $sth; if ($biblionumber) { my $query = qq( - SELECT subscription.subscriptionid,biblio.title,biblioitems.issn,subscription.notes,subscription.branchcode,biblio.biblionumber - FROM subscription,biblio,biblioitems - WHERE biblio.biblionumber = biblioitems.biblionumber - AND biblio.biblionumber = subscription.biblionumber - AND biblio.biblionumber=? + SELECT subscription.*,biblio.title,biblioitems.issn,biblio.biblionumber + FROM subscription + LEFT JOIN biblio ON biblio.biblionumber = subscription.biblionumber + LEFT JOIN biblioitems ON biblio.biblionumber = biblioitems.biblionumber + WHERE biblio.biblionumber=? ); - if (C4::Context->preference('IndependantBranches') && - C4::Context->userenv && - C4::Context->userenv->{'flags'} != 1){ - $query.=" AND subscription.branchcode IN ('".C4::Context->userenv->{'branch'}."',\"''\")"; - } $query.=" ORDER BY title"; -# warn "query :$query"; + $debug and warn "GetSubscriptions query: $query"; $sth = $dbh->prepare($query); $sth->execute($biblionumber); } else { if ( $ISSN and $title ) { my $query = qq| - SELECT subscription.subscriptionid,biblio.title,biblioitems.issn,subscription.notes,subscription.branchcode,biblio.biblionumber - FROM subscription,biblio,biblioitems - WHERE biblio.biblionumber = biblioitems.biblionumber - AND biblio.biblionumber= subscription.biblionumber - AND (biblio.title LIKE ? or biblioitems.issn = ?) - |; - if (C4::Context->preference('IndependantBranches') && - C4::Context->userenv && - C4::Context->userenv->{'flags'} != 1){ - $query.=" AND subscription.branchcode IN ('".C4::Context->userenv->{'branch'}."',\"''\")"; - } + SELECT subscription.*,biblio.title,biblioitems.issn,biblio.biblionumber + FROM subscription + LEFT JOIN biblio ON biblio.biblionumber = subscription.biblionumber + LEFT JOIN biblioitems ON biblio.biblionumber = biblioitems.biblionumber + WHERE (biblioitems.issn = ? or|. join('and ',map{"biblio.title LIKE \"%$_%\""}split (" ",$title))." )"; $query.=" ORDER BY title"; + $debug and warn "GetSubscriptions query: $query"; $sth = $dbh->prepare($query); - $sth->execute( "%$title%", $ISSN ); + $sth->execute( $ISSN ); } else { if ($ISSN) { my $query = qq( - SELECT subscription.subscriptionid,biblio.title,biblioitems.issn,subscription.notes,subscription.branchcode,biblio.biblionumber - FROM subscription,biblio,biblioitems - WHERE biblio.biblionumber = biblioitems.biblionumber - AND biblio.biblionumber=subscription.biblionumber - AND biblioitems.issn LIKE ? + SELECT subscription.*,biblio.title,biblioitems.issn,biblio.biblionumber + FROM subscription + LEFT JOIN biblio ON biblio.biblionumber = subscription.biblionumber + LEFT JOIN biblioitems ON biblio.biblionumber = biblioitems.biblionumber + WHERE biblioitems.issn LIKE ? ); - if (C4::Context->preference('IndependantBranches') && - C4::Context->userenv && - C4::Context->userenv->{'flags'} != 1){ - $query.=" AND subscription.branchcode IN ('".C4::Context->userenv->{'branch'}."',\"''\")"; - } $query.=" ORDER BY title"; -# warn "query :$query"; + $debug and warn "GetSubscriptions query: $query"; $sth = $dbh->prepare($query); $sth->execute( "%" . $ISSN . "%" ); } else { my $query = qq( - SELECT subscription.subscriptionid,biblio.title,biblioitems.issn,subscription.notes,subscription.branchcode,biblio.biblionumber - FROM subscription,biblio,biblioitems - WHERE biblio.biblionumber = biblioitems.biblionumber - AND biblio.biblionumber=subscription.biblionumber - AND biblio.title LIKE ? - ); - if (C4::Context->preference('IndependantBranches') && - C4::Context->userenv && - C4::Context->userenv->{'flags'} != 1){ - $query.=" AND subscription.branchcode IN ('".C4::Context->userenv->{'branch'}."',\"''\")"; - } + SELECT subscription.*,biblio.title,biblioitems.issn,biblio.biblionumber + FROM subscription + LEFT JOIN biblio ON biblio.biblionumber = subscription.biblionumber + LEFT JOIN biblioitems ON biblio.biblionumber = biblioitems.biblionumber + WHERE 1 + ).($title?" and ":""). join('and ',map{"biblio.title LIKE \"%$_%\""} split (" ",$title) ); + $query.=" ORDER BY title"; + $debug and warn "GetSubscriptions query: $query"; $sth = $dbh->prepare($query); - $sth->execute( "%" . $title . "%" ); + $sth->execute; } } } @@ -699,13 +695,17 @@ sub GetSubscriptions { if ( $previoustitle eq $line->{title} ) { $line->{title} = ""; $line->{issn} = ""; - $line->{toggle} = 1 if $odd == 1; } else { $previoustitle = $line->{title}; $odd = -$odd; - $line->{toggle} = 1 if $odd == 1; } + $line->{toggle} = 1 if $odd == 1; + $line->{'cannotedit'}=(C4::Context->preference('IndependantBranches') && + C4::Context->userenv && + C4::Context->userenv->{flags} % 2 !=1 && + C4::Context->userenv->{branch} && $line->{branchcode} && + (C4::Context->userenv->{branch} ne $line->{branchcode})); push @results, $line; } return @results; @@ -720,6 +720,8 @@ this function get every serial not arrived for a given subscription as well as the number of issues registered in the database (all types) this number is used to see if a subscription can be deleted (=it must have only 1 issue) +FIXME: We should return \@serials. + =back =cut @@ -733,10 +735,10 @@ sub GetSerials { $count=5 unless ($count); my @serials; my $query = - "SELECT serialid,serialseq, status, publisheddate, planneddate,notes + "SELECT serialid,serialseq, status, publisheddate, planneddate,notes, routingnotes FROM serial WHERE subscriptionid = ? AND status NOT IN (2,4,5) - ORDER BY publisheddate,serialid DESC"; + ORDER BY IF(publisheddate<>'0000-00-00',publisheddate,planneddate) DESC"; my $sth = $dbh->prepare($query); $sth->execute($subscriptionid); while ( my $line = $sth->fetchrow_hashref ) { @@ -748,11 +750,11 @@ sub GetSerials { } # OK, now add the last 5 issues arrives/missing $query = - "SELECT serialid,serialseq, status, planneddate, publisheddate,notes + "SELECT serialid,serialseq, status, planneddate, publisheddate,notes, routingnotes FROM serial WHERE subscriptionid = ? AND (status in (2,4,5)) - ORDER BY publisheddate,serialid DESC + ORDER BY IF(publisheddate<>'0000-00-00',publisheddate,planneddate) DESC "; $sth = $dbh->prepare($query); $sth->execute($subscriptionid); @@ -772,7 +774,7 @@ sub GetSerials { return ( $totalissues, @serials ); } -=head2 GetSerials +=head2 GetSerials2 =over 4 @@ -788,12 +790,12 @@ sub GetSerials2 { my ($subscription,$status) = @_; my $dbh = C4::Context->dbh; my $query = qq| - SELECT serialid,serialseq, status, planneddate, publisheddate,notes + SELECT serialid,serialseq, status, planneddate, publisheddate,notes, routingnotes FROM serial - WHERE subscriptionid=$subscription AND status=$status + WHERE subscriptionid=$subscription AND status IN ($status) ORDER BY publisheddate,serialid DESC |; -# warn $query; + $debug and warn "GetSerials2 query: $query"; my $sth=$dbh->prepare($query); $sth->execute; my @serials; @@ -829,7 +831,7 @@ sub GetLatestSerials { FROM serial WHERE subscriptionid = ? AND (status =2 or status=4) - ORDER BY planneddate DESC LIMIT 0,$limit + ORDER BY publisheddate DESC LIMIT 0,$limit "; my $sth = $dbh->prepare($strsth); $sth->execute($subscriptionid); @@ -852,27 +854,6 @@ sub GetLatestSerials { return \@serials; } -=head2 GetDistributedTo - -=over 4 - -$distributedto=GetDistributedTo($subscriptionid) -This function select the old previous value of distributedto in the database. - -=back - -=cut - -sub GetDistributedTo { - my $dbh = C4::Context->dbh; - my $distributedto; - my $subscriptionid = @_; - my $query = "SELECT distributedto FROM subscription WHERE subscriptionid=?"; - my $sth = $dbh->prepare($query); - $sth->execute($subscriptionid); - return ($distributedto) = $sth->fetchrow; -} - =head2 GetNextSeq =over 4 @@ -931,64 +912,45 @@ sub GetNextSeq { $newlastvalue1 = $val->{lastvalue1}; $newlastvalue2 = $val->{lastvalue2}; $newlastvalue3 = $val->{lastvalue3}; - - if ( $newlastvalue3 > 0 ) { # if x y and z columns are used - $newlastvalue3 = $newlastvalue3 + 1; - if ( $newlastvalue3 > $val->{whenmorethan3} ) { - $newlastvalue3 = $val->{setto3}; - $newlastvalue2++; - if ( $newlastvalue2 > $val->{whenmorethan2} ) { - $newlastvalue1++; - $newlastvalue2 = $val->{setto2}; - } - } - $calculated =~ s/\{X\}/$newlastvalue1/g; - if ( $pattern == 6 ) { - if ( $val->{hemisphere} == 2 ) { - my $newlastvalue2seq = $southern_seasons[$newlastvalue2]; - $calculated =~ s/\{Y\}/$newlastvalue2seq/g; - } - else { - my $newlastvalue2seq = $seasons[$newlastvalue2]; - $calculated =~ s/\{Y\}/$newlastvalue2seq/g; - } - } - else { - $calculated =~ s/\{Y\}/$newlastvalue2/g; - } - $calculated =~ s/\{Z\}/$newlastvalue3/g; - } - if ( $newlastvalue2 > 0 && $newlastvalue3 < 1 ) - { # if x and y columns are used - $newlastvalue2 = $newlastvalue2 + 1; - if ( $newlastvalue2 > $val->{whenmorethan2} ) { - $newlastvalue2 = $val->{setto2}; - $newlastvalue1++; - } - $calculated =~ s/\{X\}/$newlastvalue1/g; - if ( $pattern == 6 ) { - if ( $val->{hemisphere} == 2 ) { - my $newlastvalue2seq = $southern_seasons[$newlastvalue2]; - $calculated =~ s/\{Y\}/$newlastvalue2seq/g; - } - else { - my $newlastvalue2seq = $seasons[$newlastvalue2]; - $calculated =~ s/\{Y\}/$newlastvalue2seq/g; - } - } - else { - $calculated =~ s/\{Y\}/$newlastvalue2/g; - } + $newlastvalue1 = $val->{lastvalue1}; + # check if we have to increase the new value. + $newinnerloop1 = $val->{innerloop1} + 1; + $newinnerloop1=0 if ($newinnerloop1 >= $val->{every1}); + $newlastvalue1 += $val->{add1} if ($newinnerloop1<1); # <1 to be true when 0 or empty. + $newlastvalue1=$val->{setto1} if ($newlastvalue1>$val->{whenmorethan1}); # reset counter if needed. + $calculated =~ s/\{X\}/$newlastvalue1/g; + + $newlastvalue2 = $val->{lastvalue2}; + # check if we have to increase the new value. + $newinnerloop2 = $val->{innerloop2} + 1; + $newinnerloop2=0 if ($newinnerloop2 >= $val->{every2}); + $newlastvalue2 += $val->{add2} if ($newinnerloop2<1); # <1 to be true when 0 or empty. + $newlastvalue2=$val->{setto2} if ($newlastvalue2>$val->{whenmorethan2}); # reset counter if needed. + if ( $pattern == 6 ) { + if ( $val->{hemisphere} == 2 ) { + my $newlastvalue2seq = $southern_seasons[$newlastvalue2]; + $calculated =~ s/\{Y\}/$newlastvalue2seq/g; } - if ( $newlastvalue1 > 0 && $newlastvalue2 < 1 && $newlastvalue3 < 1 ) - { # if column x only - $newlastvalue1 = $newlastvalue1 + 1; - if ( $newlastvalue1 > $val->{whenmorethan1} ) { - $newlastvalue1 = $val->{setto2}; - } - $calculated =~ s/\{X\}/$newlastvalue1/g; + else { + my $newlastvalue2seq = $seasons[$newlastvalue2]; + $calculated =~ s/\{Y\}/$newlastvalue2seq/g; } - return ( $calculated, $newlastvalue1, $newlastvalue2, $newlastvalue3 ); + } + else { + $calculated =~ s/\{Y\}/$newlastvalue2/g; + } + + + $newlastvalue3 = $val->{lastvalue3}; + # check if we have to increase the new value. + $newinnerloop3 = $val->{innerloop3} + 1; + $newinnerloop3=0 if ($newinnerloop3 >= $val->{every3}); + $newlastvalue3 += $val->{add3} if ($newinnerloop3<1); # <1 to be true when 0 or empty. + $newlastvalue3=$val->{setto3} if ($newlastvalue3>$val->{whenmorethan3}); # reset counter if needed. + $calculated =~ s/\{Z\}/$newlastvalue3/g; + + return ( $calculated, $newlastvalue1, $newlastvalue2, $newlastvalue3 , + $newinnerloop1, $newinnerloop2, $newinnerloop3); } =head2 GetSeq @@ -1050,40 +1012,27 @@ sub GetExpirationDate { my $enddate = $subscription->{startdate}; # we don't do the same test if the subscription is based on X numbers or on X weeks/months -# warn "SUBSCRIPTIONID :$subscriptionid"; -# use Data::Dumper; warn Dumper($subscription); - - if ( $subscription->{numberlength} ) { - #calculate the date of the last issue. - my $length = $subscription->{numberlength}; -# warn "ENDDATE ".$enddate; - for ( my $i = 1 ; $i <= $length ; $i++ ) { - $enddate = GetNextDate( $enddate, $subscription ); -# warn "AFTER ENDDATE ".$enddate; - } - } - elsif ( $subscription->{monthlength} ){ -# warn "dateCHECKRESERV :".$subscription->{startdate}; - my @date=split (/-/,$subscription->{startdate}); - my @enddate = Add_Delta_YM($date[0],$date[1],$date[2],0,$subscription->{monthlength}); - $enddate=sprintf("%04d-%02d-%02d",$enddate[0],$enddate[1],$enddate[2]); - } elsif ( $subscription->{weeklength} ){ - my @date=split (/-/,$subscription->{startdate}); -# warn "dateCHECKRESERV :".$subscription->{startdate}; -#### An other way to do it -# if ( $subscription->{weeklength} ){ -# my ($weeknb,$year)=Week_of_Year(@startdate); -# $weeknb += $subscription->{weeklength}; -# my $weeknbcalc= $weeknb % 52; -# $year += int($weeknb/52); -# # warn "year : $year weeknb :$weeknb weeknbcalc $weeknbcalc"; -# @endofsubscriptiondate=Monday_of_Week($weeknbcalc,$year); -# } - my @enddate = Add_Delta_Days($date[0],$date[1],$date[2],$subscription->{weeklength}*7); - $enddate=sprintf("%04d-%02d-%02d",$enddate[0],$enddate[1],$enddate[2]); - } -# warn "date de fin :$enddate"; - return $enddate; + if (($subscription->{periodicity} % 16) >0){ + if ( $subscription->{numberlength} ) { + #calculate the date of the last issue. + my $length = $subscription->{numberlength}; + for ( my $i = 1 ; $i <= $length ; $i++ ) { + $enddate = GetNextDate( $enddate, $subscription ); + } + } + elsif ( $subscription->{monthlength} ){ + my @date=split (/-/,$subscription->{startdate}); + my @enddate = Add_Delta_YM($date[0],$date[1],$date[2],0,$subscription->{monthlength}); + $enddate=sprintf("%04d-%02d-%02d",$enddate[0],$enddate[1],$enddate[2]); + } elsif ( $subscription->{weeklength} ){ + my @date=split (/-/,$subscription->{startdate}); + my @enddate = Add_Delta_Days($date[0],$date[1],$date[2],$subscription->{weeklength}*7); + $enddate=sprintf("%04d-%02d-%02d",$enddate[0],$enddate[1],$enddate[2]); + } + return $enddate; + } else { + return 0; + } } =head2 CountSubscriptionFromBiblionumber @@ -1132,9 +1081,9 @@ sub ModSubscriptionHistory { WHERE subscriptionid=? "; my $sth = $dbh->prepare($query); - $recievedlist =~ s/^,//g; - $missinglist =~ s/^,//g; - $opacnote =~ s/^,//g; + $recievedlist =~ s/^; //; + $missinglist =~ s/^; //; + $opacnote =~ s/^; //; $sth->execute( $histstartdate, $enddate, $recievedlist, $missinglist, $opacnote, $librariannote, $subscriptionid @@ -1146,7 +1095,7 @@ sub ModSubscriptionHistory { =over 4 -ModSerialStatus($serialid,$serialseq, $publisheddate,$planneddate,$status,$notes) +ModSerialStatus($serialid,$serialseq, $planneddate,$publisheddate,$status,$notes) This function modify the serial status. Serial status is a number.(eg 2 is "arrived") Note : if we change from "waited" to something else,then we will have to create a new "waited" entry @@ -1156,7 +1105,7 @@ Note : if we change from "waited" to something else,then we will have to create =cut sub ModSerialStatus { - my ( $serialid, $serialseq, $publisheddate, $planneddate, $status, $notes ) + my ( $serialid, $serialseq, $planneddate,$publisheddate, $status, $notes ) = @_; #It is a usual serial @@ -1170,7 +1119,7 @@ sub ModSerialStatus { # change status & update subscriptionhistory my $val; if ( $status eq 6 ) { - DelIssue( $serialseq, $subscriptionid ); + DelIssue( {'serialid'=>$serialid, 'subscriptionid'=>$subscriptionid,'serialseq'=>$serialseq} ); } else { my $query = @@ -1190,21 +1139,22 @@ sub ModSerialStatus { my ( $missinglist, $recievedlist ) = $sth->fetchrow; if ( $status eq 2 ) { -# warn "receivedlist : $recievedlist serialseq :$serialseq, ".index("$recievedlist","$serialseq"); - $recievedlist .= ",$serialseq" + $recievedlist .= "; $serialseq" unless ( index( "$recievedlist", "$serialseq" ) >= 0 ); } # warn "missinglist : $missinglist serialseq :$serialseq, ".index("$missinglist","$serialseq"); - $missinglist .= ",$serialseq" + $missinglist .= "; $serialseq" if ( $status eq 4 and not index( "$missinglist", "$serialseq" ) >= 0 ); - $missinglist .= ",not issued $serialseq" + $missinglist .= "; not issued $serialseq" if ( $status eq 5 and index( "$missinglist", "$serialseq" ) >= 0 ); $query = "UPDATE subscriptionhistory SET recievedlist=?, missinglist=? WHERE subscriptionid=?"; $sth = $dbh->prepare($query); + $recievedlist =~ s/^; //; + $missinglist =~ s/^; //; $sth->execute( $recievedlist, $missinglist, $subscriptionid ); } } @@ -1217,10 +1167,12 @@ sub ModSerialStatus { my $val = $sth->fetchrow_hashref; # next issue number +# warn "Next Seq"; my ( $newserialseq, $newlastvalue1, $newlastvalue2, $newlastvalue3, $newinnerloop1, $newinnerloop2, $newinnerloop3 ) = GetNextSeq($val); +# warn "Next Seq End"; # next date (calculated from actual date & frequency parameters) # warn "publisheddate :$publisheddate "; @@ -1243,6 +1195,67 @@ sub ModSerialStatus { } } +=head2 GetNextExpected + +=over 4 + +$nextexpected = GetNextExpected($subscriptionid) + +Get the planneddate for the current expected issue of the subscription. + +returns a hashref: + +$nextexepected = { + serialid => int + planneddate => C4::Dates object + } + +=back + +=cut + +sub GetNextExpected($) { + my ($subscriptionid) = @_; + my $dbh = C4::Context->dbh; + my $sth = $dbh->prepare('SELECT serialid, planneddate FROM serial WHERE subscriptionid=? AND status=?'); + # Each subscription has only one 'expected' issue, with serial.status==1. + $sth->execute( $subscriptionid, 1 ); + my ( $nextissue ) = $sth->fetchrow_hashref; + if(not $nextissue){ + $sth = $dbh->prepare('SELECT serialid,planneddate FROM serial WHERE subscriptionid = ? ORDER BY planneddate DESC LIMIT 1'); + $sth->execute( $subscriptionid ); + $nextissue = $sth->fetchrow_hashref; + } + $nextissue->{planneddate} = C4::Dates->new($nextissue->{planneddate},'iso'); + return $nextissue; + +} +=head2 ModNextExpected + +=over 4 + +ModNextExpected($subscriptionid,$date) + +Update the planneddate for the current expected issue of the subscription. +This will modify all future prediction results. + +C<$date> is a C4::Dates object. + +=back + +=cut + +sub ModNextExpected($$) { + my ($subscriptionid,$date) = @_; + my $dbh = C4::Context->dbh; + #FIXME: Would expect to only set planneddate, but we set both on new issue creation, so updating it here + my $sth = $dbh->prepare('UPDATE serial SET planneddate=?,publisheddate=? WHERE subscriptionid=? AND status=?'); + # Each subscription has only one 'expected' issue, with serial.status==1. + $sth->execute( $date->output('iso'),$date->output('iso'), $subscriptionid, 1); + return 0; + +} + =head2 ModSubscription =over 4 @@ -1265,8 +1278,8 @@ sub ModSubscription { $whenmorethan3, $setto3, $lastvalue3, $innerloop3, $numberingmethod, $status, $biblionumber, $callnumber, $notes, $letter, $hemisphere, $manualhistory, - $internalnotes, - $subscriptionid + $internalnotes, $serialsadditems,$subscriptionid, + $staffdisplaycount,$opacdisplaycount, $graceperiod, $location ) = @_; # warn $irregularity; my $dbh = C4::Context->dbh; @@ -1276,9 +1289,9 @@ sub ModSubscription { add1=?,every1=?,whenmorethan1=?,setto1=?,lastvalue1=?,innerloop1=?, add2=?,every2=?,whenmorethan2=?,setto2=?,lastvalue2=?,innerloop2=?, add3=?,every3=?,whenmorethan3=?,setto3=?,lastvalue3=?,innerloop3=?, - numberingmethod=?, status=?, biblionumber=?, callnumber=?, notes=?, letter=?, hemisphere=?,manualhistory=?,internalnotes=? + numberingmethod=?, status=?, biblionumber=?, callnumber=?, notes=?, letter=?, hemisphere=?,manualhistory=?,internalnotes=?,serialsadditems=?,staffdisplaycount = ?,opacdisplaycount = ?, graceperiod = ?, location = ? WHERE subscriptionid = ?"; -# warn "query :".$query; + #warn "query :".$query; my $sth = $dbh->prepare($query); $sth->execute( $auser, $branchcode, $aqbooksellerid, $cost, @@ -1291,14 +1304,14 @@ sub ModSubscription { $whenmorethan3, $setto3, $lastvalue3, $innerloop3, $numberingmethod, $status, $biblionumber, $callnumber, $notes, $letter, $hemisphere, ($manualhistory?$manualhistory:0), - $internalnotes, + $internalnotes, $serialsadditems, + $staffdisplaycount, $opacdisplaycount, $graceperiod, $location, $subscriptionid ); my $rows=$sth->rows; $sth->finish; - &logaction(C4::Context->userenv->{'number'},"SERIAL","MODIFY",$subscriptionid,"") - if C4::Context->preference("SubscriptionLog"); + logaction("SERIAL", "MODIFY", $subscriptionid, "") if C4::Context->preference("SubscriptionLog"); return $rows; } @@ -1311,7 +1324,8 @@ $subscriptionid = &NewSubscription($auser,branchcode,$aqbooksellerid,$cost,$aqbu $add1,$every1,$whenmorethan1,$setto1,$lastvalue1,$innerloop1, $add2,$every2,$whenmorethan2,$setto2,$lastvalue2,$innerloop2, $add3,$every3,$whenmorethan3,$setto3,$lastvalue3,$innerloop3, - $numberingmethod, $status, $notes) + $numberingmethod, $status, $notes, $serialsadditems, + $staffdisplaycount, $opacdisplaycount, $graceperiod, $location); Create a new subscription with value given on input args. @@ -1334,7 +1348,8 @@ sub NewSubscription { $lastvalue3, $innerloop3, $numberingmethod, $status, $notes, $letter, $firstacquidate, $irregularity, $numberpattern, $callnumber, $hemisphere, $manualhistory, - $internalnotes + $internalnotes, $serialsadditems, $staffdisplaycount, $opacdisplaycount, + $graceperiod, $location ) = @_; my $dbh = C4::Context->dbh; @@ -1347,8 +1362,9 @@ sub NewSubscription { add2,every2,whenmorethan2,setto2,lastvalue2,innerloop2, add3,every3,whenmorethan3,setto3,lastvalue3,innerloop3, numberingmethod, status, notes, letter,firstacquidate,irregularity, - numberpattern, callnumber, hemisphere,manualhistory,internalnotes) - VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) + numberpattern, callnumber, hemisphere,manualhistory,internalnotes,serialsadditems, + staffdisplaycount,opacdisplaycount,graceperiod,location) + VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) |; my $sth = $dbh->prepare($query); $sth->execute( @@ -1369,23 +1385,25 @@ sub NewSubscription { $lastvalue3, $innerloop3, $numberingmethod, "$status", $notes, $letter, - $firstacquidate, $irregularity, + format_date_in_iso($firstacquidate), $irregularity, $numberpattern, $callnumber, $hemisphere, $manualhistory, - $internalnotes + $internalnotes, $serialsadditems, + $staffdisplaycount, $opacdisplaycount, + $graceperiod, $location, ); #then create the 1st waited number my $subscriptionid = $dbh->{'mysql_insertid'}; $query = qq( INSERT INTO subscriptionhistory - (biblionumber, subscriptionid, histstartdate, enddate, missinglist, recievedlist, opacnote, librariannote) - VALUES (?,?,?,?,?,?,?,?) + (biblionumber, subscriptionid, histstartdate, opacnote, librariannote) + VALUES (?,?,?,?,?) ); $sth = $dbh->prepare($query); $sth->execute( $biblionumber, $subscriptionid, format_date_in_iso($startdate), - 0, "", "", "", "$notes" ); + $notes,$internalnotes ); # reread subscription to get a hash (for calculation of the 1st issue number) $query = qq( @@ -1407,13 +1425,24 @@ sub NewSubscription { $sth = $dbh->prepare($query); $sth->execute( "$serialseq", $subscriptionid, $biblionumber, 1, - format_date_in_iso($startdate), - format_date_in_iso($startdate) + format_date_in_iso($firstacquidate), + format_date_in_iso($firstacquidate) ); - &logaction(C4::Context->userenv->{'number'},"SERIAL","ADD",$subscriptionid,"") - if C4::Context->preference("SubscriptionLog"); + logaction("SERIAL", "ADD", $subscriptionid, "") if C4::Context->preference("SubscriptionLog"); +#set serial flag on biblio if not already set. + my ($null, ($bib)) = GetBiblio($biblionumber); + if( ! $bib->{'serial'} ) { + my $record = GetMarcBiblio($biblionumber); + my ($tag,$subf) = GetMarcFromKohaField('biblio.serial',$bib->{'frameworkcode'}); + if($tag) { + eval { + $record->field($tag)->update( $subf => 1 ); + }; + } + ModBiblio($record,$biblionumber,$bib->{'frameworkcode'}); + } return $subscriptionid; } @@ -1435,23 +1464,25 @@ sub ReNewSubscription { = @_; my $dbh = C4::Context->dbh; my $subscription = GetSubscription($subscriptionid); - my $query = qq| - SELECT * - FROM biblio,biblioitems - WHERE biblio.biblionumber=biblioitems.biblionumber - AND biblio.biblionumber=? - |; - my $sth = $dbh->prepare($query); - $sth->execute( $subscription->{biblionumber} ); - my $biblio = $sth->fetchrow_hashref; - NewSuggestion( - $user, $subscription->{bibliotitle}, - $biblio->{author}, $biblio->{publishercode}, - $biblio->{note}, '', - '', '', - '', '', - $subscription->{biblionumber} - ); + my $query = qq| + SELECT * + FROM biblio + LEFT JOIN biblioitems ON biblio.biblionumber=biblioitems.biblionumber + WHERE biblio.biblionumber=? + |; + my $sth = $dbh->prepare($query); + $sth->execute( $subscription->{biblionumber} ); + my $biblio = $sth->fetchrow_hashref; + if (C4::Context->preference("RenewSerialAddsSuggestion")){ + NewSuggestion( + $user, $subscription->{bibliotitle}, + $biblio->{author}, $biblio->{publishercode}, + $biblio->{note}, '', + '', '', + '', '', + $subscription->{biblionumber} + ); + } # renew subscription $query = qq| @@ -1463,15 +1494,14 @@ sub ReNewSubscription { $sth->execute( format_date_in_iso($startdate), $numberlength, $weeklength, $monthlength, $subscriptionid ); - &logaction(C4::Context->userenv->{'number'},"SERIAL","RENEW",$subscriptionid,"") - if C4::Context->preference("SubscriptionLog"); + logaction("SERIAL", "RENEW", $subscriptionid, "") if C4::Context->preference("SubscriptionLog"); } =head2 NewIssue =over 4 -NewIssue($serialseq,$subscriptionid,$biblionumber,$status, $publisheddate, $planneddate) +NewIssue($serialseq,$subscriptionid,$biblionumber,$status, $planneddate, $publisheddate, $notes) Create a new issue stored on the database. Note : we have to update the recievedlist and missinglist on subscriptionhistory for this subscription. @@ -1481,8 +1511,8 @@ Note : we have to update the recievedlist and missinglist on subscriptionhistory =cut sub NewIssue { - my ( $serialseq, $subscriptionid, $biblionumber, $status, $publisheddate, - $planneddate, $notes ) + my ( $serialseq, $subscriptionid, $biblionumber, $status, + $planneddate, $publisheddate, $notes ) = @_; ### FIXME biblionumber CAN be provided by subscriptionid. So Do we STILL NEED IT ? @@ -1509,10 +1539,10 @@ sub NewIssue { ### TODO Add a feature that improves recognition and description. ### As such count (serialseq) i.e. : N18,2(N19),N20 ### Would use substr and index But be careful to previous presence of () - $recievedlist .= ",$serialseq" unless (index($recievedlist,$serialseq)>0); + $recievedlist .= "; $serialseq" unless (index($recievedlist,$serialseq)>0); } if ( $status eq 4 ) { - $missinglist .= ",$serialseq" unless (index($missinglist,$serialseq)>0); + $missinglist .= "; $serialseq" unless (index($missinglist,$serialseq)>0); } $query = qq| UPDATE subscriptionhistory @@ -1520,6 +1550,8 @@ sub NewIssue { WHERE subscriptionid=? |; $sth = $dbh->prepare($query); + $recievedlist =~ s/^; //; + $missinglist =~ s/^; //; $sth->execute( $recievedlist, $missinglist, $subscriptionid ); return $serialid; } @@ -1601,14 +1633,14 @@ sub ItemizeSerials { unless ($exists) { my $marcrecord = MARC::Record->new(); my ( $tag, $subfield ) = - GetMarcFromKohaField( $dbh, "items.barcode", $fwk ); + GetMarcFromKohaField( "items.barcode", $fwk ); my $newField = MARC::Field->new( "$tag", '', '', "$subfield" => $info->{barcode} ); $marcrecord->insert_fields_ordered($newField); if ( $info->{branch} ) { my ( $tag, $subfield ) = - GetMarcFromKohaField( $dbh, "items.homebranch", + GetMarcFromKohaField( "items.homebranch", $fwk ); #warn "items.homebranch : $tag , $subfield"; @@ -1623,7 +1655,7 @@ sub ItemizeSerials { $marcrecord->insert_fields_ordered($newField); } ( $tag, $subfield ) = - GetMarcFromKohaField( $dbh, "items.holdingbranch", + GetMarcFromKohaField( "items.holdingbranch", $fwk ); #warn "items.holdingbranch : $tag , $subfield"; @@ -1640,7 +1672,7 @@ sub ItemizeSerials { } if ( $info->{itemcallnumber} ) { my ( $tag, $subfield ) = - GetMarcFromKohaField( $dbh, "items.itemcallnumber", + GetMarcFromKohaField( "items.itemcallnumber", $fwk ); #warn "items.itemcallnumber : $tag , $subfield"; @@ -1657,7 +1689,7 @@ sub ItemizeSerials { } if ( $info->{notes} ) { my ( $tag, $subfield ) = - GetMarcFromKohaField( $dbh, "items.itemnotes", $fwk ); + GetMarcFromKohaField( "items.itemnotes", $fwk ); # warn "items.itemnotes : $tag , $subfield"; if ( $marcrecord->field($tag) ) { @@ -1673,7 +1705,7 @@ sub ItemizeSerials { } if ( $info->{location} ) { my ( $tag, $subfield ) = - GetMarcFromKohaField( $dbh, "items.location", $fwk ); + GetMarcFromKohaField( "items.location", $fwk ); # warn "items.location : $tag , $subfield"; if ( $marcrecord->field($tag) ) { @@ -1689,7 +1721,7 @@ sub ItemizeSerials { } if ( $info->{status} ) { my ( $tag, $subfield ) = - GetMarcFromKohaField( $dbh, "items.notforloan", + GetMarcFromKohaField( "items.notforloan", $fwk ); # warn "items.notforloan : $tag , $subfield"; @@ -1706,7 +1738,7 @@ sub ItemizeSerials { } if ( C4::Context->preference("RoutingSerials") ) { my ( $tag, $subfield ) = - GetMarcFromKohaField( $dbh, "items.dateaccessioned", + GetMarcFromKohaField( "items.dateaccessioned", $fwk ); if ( $marcrecord->field($tag) ) { $marcrecord->field($tag) @@ -1718,7 +1750,7 @@ sub ItemizeSerials { $marcrecord->insert_fields_ordered($newField); } } - AddItem( $marcrecord, $data->{'biblionumber'} ); + AddItemFromMarc( $marcrecord, $data->{'biblionumber'} ); return 1; } return ( 0, @errors ); @@ -1729,12 +1761,14 @@ sub ItemizeSerials { =over 4 -1 or 0 = HasSubscriptionExpired($subscriptionid) +$has_expired = HasSubscriptionExpired($subscriptionid) the subscription has expired when the next issue to arrive is out of subscription limit. return : -1 if true, 0 if false. +0 if the subscription has not expired +1 if the subscription has expired +2 if has subscription does not have a valid expiration date set =back @@ -1744,44 +1778,34 @@ sub HasSubscriptionExpired { my ($subscriptionid) = @_; my $dbh = C4::Context->dbh; my $subscription = GetSubscription($subscriptionid); - my $expirationdate = GetExpirationDate($subscriptionid); - my $query = qq| + if (($subscription->{periodicity} % 16)>0){ + my $expirationdate = GetExpirationDate($subscriptionid); + my $query = qq| SELECT max(planneddate) FROM serial WHERE subscriptionid=? - |; - my $sth = $dbh->prepare($query); - $sth->execute($subscriptionid); - my ($res) = $sth->fetchrow ; - my @res=split (/-/,$res); - my @endofsubscriptiondate=split(/-/,$expirationdate); - return 1 if ( (@endofsubscriptiondate && Delta_Days($res[0],$res[1],$res[2], + |; + my $sth = $dbh->prepare($query); + $sth->execute($subscriptionid); + my ($res) = $sth->fetchrow ; + return 0 unless $res; + 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)); + return 1 if ( (@endofsubscriptiondate && Delta_Days($res[0],$res[1],$res[2], $endofsubscriptiondate[0],$endofsubscriptiondate[1],$endofsubscriptiondate[2]) <= 0) || (!$res)); - return 0; -} - -=head2 SetDistributedto - -=over 4 - -SetDistributedto($distributedto,$subscriptionid); -This function update the value of distributedto for a subscription given on input arg. - -=back - -=cut - -sub SetDistributedto { - my ( $distributedto, $subscriptionid ) = @_; - my $dbh = C4::Context->dbh; - my $query = qq| - UPDATE subscription - SET distributedto=? - WHERE subscriptionid=? - |; - my $sth = $dbh->prepare($query); - $sth->execute( $distributedto, $subscriptionid ); + return 0; + } else { + if ($subscription->{'numberlength'}){ + my $countreceived=countissuesfrom($subscriptionid,$subscription->{'startdate'}); + return 1 if ($countreceived >$subscription->{'numberlength'}); + return 0; + } else { + return 0; + } + } + return 0; # Notice that you'll never get here. } =head2 DelSubscription @@ -1804,8 +1828,7 @@ sub DelSubscription { "DELETE FROM subscriptionhistory WHERE subscriptionid=$subscriptionid"); $dbh->do("DELETE FROM serial WHERE subscriptionid=$subscriptionid"); - &logaction(C4::Context->userenv->{'number'},"SERIAL","DELETE",$subscriptionid,"") - if C4::Context->preference("SubscriptionLog"); + logaction("SERIAL", "DELETE", $subscriptionid, "") if C4::Context->preference("SubscriptionLog"); } =head2 DelIssue @@ -1820,20 +1843,22 @@ this function delete an issue which has $serialseq and $subscriptionid given on =cut sub DelIssue { - my ( $serialseq, $subscriptionid ) = @_; + my ( $dataissue) = @_; my $dbh = C4::Context->dbh; + ### TODO Add itemdeletion. Would need to get itemnumbers. Should be in a pref ? + my $query = qq| DELETE FROM serial - WHERE serialseq= ? + WHERE serialid= ? AND subscriptionid= ? |; my $mainsth = $dbh->prepare($query); - $mainsth->execute( $serialseq, $subscriptionid ); + $mainsth->execute( $dataissue->{'serialid'}, $dataissue->{'subscriptionid'}); #Delete element from subscription history $query = "SELECT * FROM subscription WHERE subscriptionid = ?"; my $sth = $dbh->prepare($query); - $sth->execute($subscriptionid); + $sth->execute($dataissue->{'subscriptionid'}); my $val = $sth->fetchrow_hashref; unless ( $val->{manualhistory} ) { my $query = qq| @@ -1841,18 +1866,18 @@ sub DelIssue { WHERE subscriptionid= ? |; my $sth = $dbh->prepare($query); - $sth->execute($subscriptionid); + $sth->execute($dataissue->{'subscriptionid'}); my $data = $sth->fetchrow_hashref; - $data->{'missinglist'} =~ s/$serialseq//; - $data->{'recievedlist'} =~ s/$serialseq//; + my $serialseq= $dataissue->{'serialseq'}; + $data->{'missinglist'} =~ s/\b$serialseq\b//; + $data->{'recievedlist'} =~ s/\b$serialseq\b//; my $strsth = "UPDATE subscriptionhistory SET " . join( ",", map { join( "=", $_, $dbh->quote( $data->{$_} ) ) } keys %$data ) . " WHERE subscriptionid=?"; $sth = $dbh->prepare($strsth); - $sth->execute($subscriptionid); + $sth->execute($dataissue->{'subscriptionid'}); } - ### TODO Add itemdeletion. Should be in a pref ? return $mainsth->rows; } @@ -1901,7 +1926,7 @@ sub GetLateOrMissingIssues { claimdate FROM serial LEFT JOIN subscription ON serial.subscriptionid=subscription.subscriptionid -LEFT JOIN biblio ON serial.biblionumber=biblio.biblionumber +LEFT JOIN biblio ON subscription.biblionumber=biblio.biblionumber LEFT JOIN aqbooksellers ON subscription.aqbooksellerid = aqbooksellers.id WHERE subscription.subscriptionid = serial.subscriptionid AND (serial.STATUS = 4 OR ((planneddate < now() AND serial.STATUS =1) OR serial.STATUS = 3)) @@ -1926,13 +1951,12 @@ FROM serial LEFT JOIN subscription ON serial.subscriptionid=subscription.subscriptionid LEFT JOIN biblio -ON serial.biblionumber=biblio.biblionumber +ON subscription.biblionumber=biblio.biblionumber LEFT JOIN aqbooksellers ON subscription.aqbooksellerid = aqbooksellers.id WHERE subscription.subscriptionid = serial.subscriptionid AND (serial.STATUS = 4 OR ((planneddate < now() AND serial.STATUS =1) OR serial.STATUS = 3)) -AND biblio.biblionumber = subscription.biblionumber $byserial ORDER BY $order" ); @@ -2043,9 +2067,9 @@ sub getsupplierbyserialid { my $dbh = C4::Context->dbh; my $sth = $dbh->prepare( "SELECT serialid, serial.subscriptionid, aqbooksellerid - FROM serial, subscription - WHERE serial.subscriptionid = subscription.subscriptionid - AND serialid = ? + FROM serial + LEFT JOIN subscription ON serial.subscriptionid = subscription.subscriptionid + WHERE serialid = ? " ); $sth->execute($serialid); @@ -2062,6 +2086,7 @@ sub getsupplierbyserialid { this function checks to see if a serial has a routing list and returns the count of routingid used to show either an 'add' or 'edit' link + =back =cut @@ -2070,9 +2095,9 @@ sub check_routing { my ($subscriptionid) = @_; my $dbh = C4::Context->dbh; my $sth = $dbh->prepare( -"SELECT count(routingid) routingids FROM subscriptionroutinglist, subscription - WHERE subscription.subscriptionid = subscriptionroutinglist.subscriptionid - AND subscription.subscriptionid = ? ORDER BY ranking ASC +"SELECT count(routingid) routingids FROM subscription LEFT JOIN subscriptionroutinglist + ON subscription.subscriptionid = subscriptionroutinglist.subscriptionid + WHERE subscription.subscriptionid = ? ORDER BY ranking ASC " ); $sth->execute($subscriptionid); @@ -2233,9 +2258,10 @@ sub getroutinglist { my $dbh = C4::Context->dbh; my $sth = $dbh->prepare( "SELECT routingid, borrowernumber, - ranking, biblionumber FROM subscriptionroutinglist, subscription - WHERE subscription.subscriptionid = subscriptionroutinglist.subscriptionid - AND subscription.subscriptionid = ? ORDER BY ranking ASC + ranking, biblionumber + FROM subscription + LEFT JOIN subscriptionroutinglist ON subscription.subscriptionid = subscriptionroutinglist.subscriptionid + WHERE subscription.subscriptionid = ? ORDER BY ranking ASC " ); $sth->execute($subscriptionid); @@ -2248,6 +2274,32 @@ sub getroutinglist { return ( $count, @routinglist ); } +=head2 countissuesfrom + +=over 4 + +$result = &countissuesfrom($subscriptionid,$startdate) + + +=back + +=cut + +sub countissuesfrom { + my ($subscriptionid,$startdate) = @_; + my $dbh = C4::Context->dbh; + my $query = qq| + SELECT count(*) + FROM serial + WHERE subscriptionid=? + AND serial.publisheddate>? + |; + my $sth=$dbh->prepare($query); + $sth->execute($subscriptionid, $startdate); + my ($countreceived)=$sth->fetchrow; + return $countreceived; +} + =head2 abouttoexpire =over 4 @@ -2267,38 +2319,43 @@ sub abouttoexpire { my ($subscriptionid) = @_; my $dbh = C4::Context->dbh; my $subscription = GetSubscription($subscriptionid); - my $expirationdate = GetExpirationDate($subscriptionid); - my $sth = - $dbh->prepare( - "select max(planneddate) from serial where subscriptionid=?"); - $sth->execute($subscriptionid); - my ($res) = $sth->fetchrow ; -# warn "date expiration : ".$expirationdate." date courante ".$res; - my @res=split /-/,$res; - my @endofsubscriptiondate=split/-/,$expirationdate; my $per = $subscription->{'periodicity'}; - my $x; - if ( $per == 1 ) {$x=7;} - if ( $per == 2 ) {$x=7; } - if ( $per == 3 ) {$x=14;} - if ( $per == 4 ) { $x = 21; } - if ( $per == 5 ) { $x = 31; } - if ( $per == 6 ) { $x = 62; } - if ( $per == 7 || $per == 8 ) { $x = 93; } - if ( $per == 9 ) { $x = 190; } - if ( $per == 10 ) { $x = 365; } - if ( $per == 11 ) { $x = 730; } - my @datebeforeend=Add_Delta_Days( $endofsubscriptiondate[0],$endofsubscriptiondate[1],$endofsubscriptiondate[2], - - (3 * $x)) if (@endofsubscriptiondate); - # warn "DATE BEFORE END: $datebeforeend"; - return 1 if ( @res && - (@datebeforeend && - Delta_Days($res[0],$res[1],$res[2], - $datebeforeend[0],$datebeforeend[1],$datebeforeend[2]) <= 0) && - (@endofsubscriptiondate && - Delta_Days($res[0],$res[1],$res[2], - $endofsubscriptiondate[0],$endofsubscriptiondate[1],$endofsubscriptiondate[2]) >= 0) ); + if ($per % 16>0){ + my $expirationdate = GetExpirationDate($subscriptionid); + my $sth = + $dbh->prepare( + "select max(planneddate) from serial where subscriptionid=?"); + $sth->execute($subscriptionid); + my ($res) = $sth->fetchrow ; +# warn "date expiration : ".$expirationdate." date courante ".$res; + my @res=split (/-/,$res); + @res=Date::Calc::Today if ($res[0]*$res[1]==0); + my @endofsubscriptiondate=split(/-/,$expirationdate); + my $x; + if ( $per == 1 ) {$x=7;} + if ( $per == 2 ) {$x=7; } + if ( $per == 3 ) {$x=14;} + if ( $per == 4 ) { $x = 21; } + if ( $per == 5 ) { $x = 31; } + if ( $per == 6 ) { $x = 62; } + if ( $per == 7 || $per == 8 ) { $x = 93; } + if ( $per == 9 ) { $x = 190; } + if ( $per == 10 ) { $x = 365; } + if ( $per == 11 ) { $x = 730; } + my @datebeforeend=Add_Delta_Days( $endofsubscriptiondate[0],$endofsubscriptiondate[1],$endofsubscriptiondate[2], + - (3 * $x)) if (@endofsubscriptiondate && $endofsubscriptiondate[0]*$endofsubscriptiondate[1]*$endofsubscriptiondate[2]); + # warn "DATE BEFORE END: $datebeforeend"; + return 1 if ( @res && + (@datebeforeend && + Delta_Days($res[0],$res[1],$res[2], + $datebeforeend[0],$datebeforeend[1],$datebeforeend[2]) <= 0) && + (@endofsubscriptiondate && + Delta_Days($res[0],$res[1],$res[2], + $endofsubscriptiondate[0],$endofsubscriptiondate[1],$endofsubscriptiondate[2]) >= 0) ); return 0; + } elsif ($subscription->{numberlength}>0) { + return (countissuesfrom($subscriptionid,$subscription->{'startdate'}) >=$subscription->{numberlength}-1); + } else {return 0} } =head2 old_newsubscription @@ -2541,7 +2598,7 @@ skipped then the returned date will be 2007-05-10 return : $resultdate - then next date in the sequence -FIXME : have to replace Date::Manip by Date::Calc in this function to improve performances. +Return 0 if periodicity==0 =cut sub in_array { # used in next sub down @@ -2566,66 +2623,89 @@ sub GetNextDate(@) { my @resultdate; # warn "DOW $dayofweek"; - if ( $subscription->{periodicity} == 1 ) { - my $dayofweek = Day_of_Week( $year,$month, $day ); - for ( my $i = 0 ; $i < @irreg ; $i++ ) { - $dayofweek = 0 if ( $dayofweek == 7 ); - if ( in_array( ($dayofweek + 1), @irreg ) ) { - ($year,$month,$day) = Add_Delta_Days($year,$month, $day , 1 ); - $dayofweek++; - } - } - @resultdate = Add_Delta_Days($year,$month, $day , 1 ); + if ( $subscription->{periodicity} % 16 == 0 ) { # 'without regularity' || 'irregular' + return 0; + } + # daily : n / week + # Since we're interpreting irregularity here as which days of the week to skip an issue, + # renaming this pattern from 1/day to " n / week ". + if ( $subscription->{periodicity} == 1 ) { + my $dayofweek = eval{Day_of_Week( $year,$month, $day )}; + if ($@){warn "year month day : $year $month $day $subscription->{subscriptionid} : $@";} + else { + for ( my $i = 0 ; $i < @irreg ; $i++ ) { + $dayofweek = 0 if ( $dayofweek == 7 ); + if ( in_array( ($dayofweek + 1), @irreg ) ) { + ($year,$month,$day) = Add_Delta_Days($year,$month, $day , 1 ); + $dayofweek++; + } + } + @resultdate = Add_Delta_Days($year,$month, $day , 1 ); + } } + # 1 week if ( $subscription->{periodicity} == 2 ) { - my ($wkno,$year) = Week_of_Year( $year,$month, $day ); - for ( my $i = 0 ; $i < @irreg ; $i++ ) { - if ( $irreg[$i] == (($wkno!=51)?($wkno +1) % 52 :52)) { - ($year,$month,$day) = Add_Delta_Days($year,$month, $day , 7 ); - $wkno=(($wkno!=51)?($wkno +1) % 52 :52); - } - } - @resultdate = Add_Delta_Days( $year,$month, $day, 7); + my ($wkno,$year) = eval {Week_of_Year( $year,$month, $day )}; + if ($@){warn "year month day : $year $month $day $subscription->{subscriptionid} : $@";} + else { + for ( my $i = 0 ; $i < @irreg ; $i++ ) { + #FIXME: if two consecutive irreg, do we only skip one? + if ( $irreg[$i] == (($wkno!=51)?($wkno +1) % 52 :52)) { + ($year,$month,$day) = Add_Delta_Days($year,$month, $day , 7 ); + $wkno=(($wkno!=51)?($wkno +1) % 52 :52); + } + } + @resultdate = Add_Delta_Days( $year,$month, $day, 7); + } } - if ( $subscription->{periodicity} == 3 ) { - my ($wkno,$year) = Week_of_Year( $year,$month, $day ); - for ( my $i = 0 ; $i < @irreg ; $i++ ) { - if ( $irreg[$i] == (($wkno!=50)?($wkno +2) % 52 :52)) { - ### BUGFIX was previously +1 ^ - ($year,$month,$day) = Add_Delta_Days($year,$month, $day , 14 ); - $wkno=(($wkno!=50)?($wkno +2) % 52 :52); - } - } - @resultdate = Add_Delta_Days($year,$month, $day , 14 ); + # 1 / 2 weeks + if ( $subscription->{periodicity} == 3 ) { + my ($wkno,$year) = eval {Week_of_Year( $year,$month, $day )}; + if ($@){warn "year month day : $year $month $day $subscription->{subscriptionid} : $@";} + else { + for ( my $i = 0 ; $i < @irreg ; $i++ ) { + if ( $irreg[$i] == (($wkno!=50)?($wkno +2) % 52 :52)) { + ### BUGFIX was previously +1 ^ + ($year,$month,$day) = Add_Delta_Days($year,$month, $day , 14 ); + $wkno=(($wkno!=50)?($wkno +2) % 52 :52); + } + } + @resultdate = Add_Delta_Days($year,$month, $day , 14 ); + } } + # 1 / 3 weeks if ( $subscription->{periodicity} == 4 ) { - my ($wkno,$year) = Week_of_Year( $year,$month, $day ); - for ( my $i = 0 ; $i < @irreg ; $i++ ) { - if ( $irreg[$i] == (($wkno!=49)?($wkno +3) % 52 :52)) { - ($year,$month,$day) = Add_Delta_Days($year,$month, $day , 21 ); - $wkno=(($wkno!=49)?($wkno +3) % 52 :52); - } - } - @resultdate = Add_Delta_Days($year,$month, $day , 21 ); + my ($wkno,$year) = eval {Week_of_Year( $year,$month, $day )}; + if ($@){warn "année mois jour : $year $month $day $subscription->{subscriptionid} : $@";} + else { + for ( my $i = 0 ; $i < @irreg ; $i++ ) { + if ( $irreg[$i] == (($wkno!=49)?($wkno +3) % 52 :52)) { + ($year,$month,$day) = Add_Delta_Days($year,$month, $day , 21 ); + $wkno=(($wkno!=49)?($wkno +3) % 52 :52); + } + } + @resultdate = Add_Delta_Days($year,$month, $day , 21 ); + } } my $tmpmonth=$month; + if ($year && $month && $day){ if ( $subscription->{periodicity} == 5 ) { - for ( my $i = 0 ; $i < @irreg ; $i++ ) { - if ( $irreg[$i] == (($tmpmonth!=11)?($tmpmonth +1) % 12 :12)) { - ($year,$month,$day) = Add_Delta_YMD($year,$month, $day ,0,1,0 ); - $tmpmonth=(($tmpmonth!=11)?($tmpmonth +1) % 12 :12); - } - } - @resultdate = Add_Delta_YMD($year,$month, $day ,0,1,0 ); + for ( my $i = 0 ; $i < @irreg ; $i++ ) { + if ( $irreg[$i] == (($tmpmonth!=11)?($tmpmonth +1) % 12 :12)) { + ($year,$month,$day) = Add_Delta_YMD($year,$month, $day ,0,1,0 ); + $tmpmonth=(($tmpmonth!=11)?($tmpmonth +1) % 12 :12); + } + } + @resultdate = Add_Delta_YMD($year,$month, $day ,0,1,0 ); } if ( $subscription->{periodicity} == 6 ) { - for ( my $i = 0 ; $i < @irreg ; $i++ ) { - if ( $irreg[$i] == (($tmpmonth!=10)?($tmpmonth +2) % 12 :12)) { - ($year,$month,$day) = Add_Delta_YMD($year,$month, $day ,0,2,0 ); - $tmpmonth=(($tmpmonth!=10)?($tmpmonth + 2) % 12 :12); - } - } - @resultdate = Add_Delta_YMD($year,$month, $day, 0, 2,0 ); + for ( my $i = 0 ; $i < @irreg ; $i++ ) { + if ( $irreg[$i] == (($tmpmonth!=10)?($tmpmonth +2) % 12 :12)) { + ($year,$month,$day) = Add_Delta_YMD($year,$month, $day ,0,2,0 ); + $tmpmonth=(($tmpmonth!=10)?($tmpmonth + 2) % 12 :12); + } + } + @resultdate = Add_Delta_YMD($year,$month, $day, 0, 2,0 ); } if ( $subscription->{periodicity} == 7 ) { for ( my $i = 0 ; $i < @irreg ; $i++ ) { @@ -2661,7 +2741,9 @@ sub GetNextDate(@) { if ( $subscription->{periodicity} == 11 ) { @resultdate = Add_Delta_YM($year,$month, $day, 2, 0 ); } + } my $resultdate=sprintf("%04d-%02d-%02d",$resultdate[0],$resultdate[1],$resultdate[2]); + # warn "dateNEXTSEQ : ".$resultdate; return "$resultdate"; } @@ -2682,8 +2764,8 @@ sub itemdata { my ($barcode) = @_; my $dbh = C4::Context->dbh; my $sth = $dbh->prepare( - "Select * from items,biblioitems where barcode=? - and items.biblioitemnumber=biblioitems.biblioitemnumber" + "Select * from items LEFT JOIN biblioitems ON items.biblioitemnumber=biblioitems.biblioitemnumber + WHERE barcode=?" ); $sth->execute($barcode); my $data = $sth->fetchrow_hashref; @@ -2691,11 +2773,8 @@ sub itemdata { return ($data); } -END { } # module clean-up code here (global destructor) - 1; - -=back +__END__ =head1 AUTHOR