X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=C4%2FSerials.pm;h=2f5f27f7063d64f67664de8dbbb5ce6420284343;hb=aefcbc11c6e53276805130bf4eceace79551a952;hp=b27b3f09a6b93cf9ddb2cd05c5a634f63dfd1657;hpb=c9c6c8dd6e8a7aa9461708f2e45e5df7126bd7c7;p=koha.git diff --git a/C4/Serials.pm b/C4/Serials.pm index b27b3f09a6..2f5f27f706 100644 --- a/C4/Serials.pm +++ b/C4/Serials.pm @@ -29,6 +29,7 @@ use C4::Items; use C4::Search; use C4::Letters; use C4::Log; # logaction +use C4::Debug; use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS); @@ -46,16 +47,14 @@ BEGIN { &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 ); } @@ -105,9 +104,6 @@ sub GetSuppliersWithLateIssues { while ( my ( $id, $name ) = $sth->fetchrow ) { $supplierlist{$id} = $name; } - if ( C4::Context->preference("RoutingSerials") ) { - $supplierlist{''} = "All Suppliers"; - } return %supplierlist; } @@ -239,7 +235,7 @@ 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'}){ @@ -253,19 +249,20 @@ sub GetSerialInformation { 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; @@ -273,7 +270,7 @@ sub GetSerialInformation { } else { my $itemprocessed = - PrepareItemrecordDisplay( $data->{'biblionumber'} ); + PrepareItemrecordDisplay( $data->{'biblionumber'}, '', $data ); $itemprocessed->{'itemid'} = "N$serialid"; $itemprocessed->{'serialid'} = $serialid; $itemprocessed->{'biblionumber'} = $data->{'biblionumber'}; @@ -295,6 +292,7 @@ sub GetSerialInformation { $data = AddItem2Serial($serialid,$itemnumber); Adds an itemnumber to Serial record + =back =cut @@ -302,12 +300,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; } @@ -319,6 +313,7 @@ UpdateClaimdateIssues($serialids,[$date]); Update Claimdate for issues in @$serialids list with date $date (Take Today if none) + =back =cut @@ -356,6 +351,7 @@ sub GetSubscription { my $query = qq( SELECT subscription.*, subscriptionhistory.*, + subscriptionhistory.enddate as histenddate, aqbudget.bookfundid, aqbooksellers.name AS aqbooksellername, biblio.title AS bibliotitle, @@ -377,15 +373,13 @@ sub GetSubscription { # if (C4::Context->preference('IndependantBranches') && # C4::Context->userenv && # C4::Context->userenv->{'flags'} != 1){ -# # warn "flags: ".C4::Context->userenv->{'flags'}; +# # $debug and warn "flags: ".C4::Context->userenv->{'flags'}; # $query.=" AND subscription.branchcode IN ('".C4::Context->userenv->{'branch'}."',\"\")"; # } -# warn "query : $query"; + $debug and warn "query : $query\nsubsid :$subscriptionid"; my $sth = $dbh->prepare($query); -# warn "subsid :$subscriptionid"; $sth->execute($subscriptionid); - my $subs = $sth->fetchrow_hashref; - return $subs; + return $sth->fetchrow_hashref; } =head2 GetFullSubscription @@ -432,11 +426,10 @@ sub GetFullSubscription { IF(serial.publisheddate="00-00-0000",serial.planneddate,serial.publisheddate) DESC, serial.subscriptionid |; -# warn $query; + $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({}); } @@ -522,6 +515,7 @@ sub GetSubscriptionsFromBiblionumber { SELECT subscription.*, branches.branchname, subscriptionhistory.*, + subscriptionhistory.enddate as histenddate, aqbudget.bookfundid, aqbooksellers.name AS aqbooksellername, biblio.title AS bibliotitle @@ -544,6 +538,7 @@ sub GetSubscriptionsFromBiblionumber { 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; @@ -593,6 +588,7 @@ sub GetFullSubscriptionsFromBiblionumber { aqbudget.bookfundid,aqbooksellers.name as aqbooksellername, biblio.title as bibliotitle, subscription.branchcode AS branchcode, + branches.branchname AS branchname, subscription.subscriptionid AS subscriptionid|; if (C4::Context->preference('IndependantBranches') && C4::Context->userenv && @@ -607,6 +603,7 @@ sub GetFullSubscriptionsFromBiblionumber { (serial.subscriptionid=subscription.subscriptionid) LEFT JOIN aqbudget ON subscription.aqbudgetid=aqbudget.aqbudgetid LEFT JOIN aqbooksellers on subscription.aqbooksellerid=aqbooksellers.id + LEFT JOIN branches ON branches.branchcode=subscription.branchcode LEFT JOIN biblio on biblio.biblionumber=subscription.biblionumber WHERE subscription.biblionumber = ? ORDER BY year DESC, @@ -615,8 +612,7 @@ sub GetFullSubscriptionsFromBiblionumber { |; my $sth = $dbh->prepare($query); $sth->execute($biblionumber); - my $subs= $sth->fetchall_arrayref({}); - return $subs; + return $sth->fetchall_arrayref({}); } =head2 GetSubscriptions @@ -646,7 +642,7 @@ sub GetSubscriptions { WHERE biblio.biblionumber=? ); $query.=" ORDER BY title"; -# warn "query :$query"; + $debug and warn "GetSubscriptions query: $query"; $sth = $dbh->prepare($query); $sth->execute($biblionumber); } @@ -659,6 +655,7 @@ sub GetSubscriptions { 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( $ISSN ); } @@ -672,7 +669,7 @@ sub GetSubscriptions { WHERE biblioitems.issn LIKE ? ); $query.=" ORDER BY title"; -# warn "query :$query"; + $debug and warn "GetSubscriptions query: $query"; $sth = $dbh->prepare($query); $sth->execute( "%" . $ISSN . "%" ); } @@ -686,7 +683,7 @@ sub GetSubscriptions { ).($title?" and ":""). join('and ',map{"biblio.title LIKE \"%$_%\""} split (" ",$title) ); $query.=" ORDER BY title"; -# warn $query; + $debug and warn "GetSubscriptions query: $query"; $sth = $dbh->prepare($query); $sth->execute; } @@ -699,13 +696,12 @@ 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} !=1 && @@ -725,6 +721,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 @@ -798,7 +796,7 @@ sub GetSerials2 { 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; @@ -834,7 +832,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); @@ -857,27 +855,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 @@ -1034,7 +1011,9 @@ sub GetExpirationDate { my $dbh = C4::Context->dbh; my $subscription = GetSubscription($subscriptionid); my $enddate = $subscription->{startdate}; - + + return if not $subscription->{startdate}; + # we don't do the same test if the subscription is based on X numbers or on X weeks/months if (($subscription->{periodicity} % 16) >0){ if ( $subscription->{numberlength} ) { @@ -1105,9 +1084,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 @@ -1163,21 +1142,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 ); } } @@ -1218,6 +1198,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 @@ -1240,7 +1281,7 @@ sub ModSubscription { $whenmorethan3, $setto3, $lastvalue3, $innerloop3, $numberingmethod, $status, $biblionumber, $callnumber, $notes, $letter, $hemisphere, $manualhistory, - $internalnotes, + $internalnotes, $serialsadditems, $subscriptionid ) = @_; # warn $irregularity; @@ -1251,7 +1292,7 @@ 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=? WHERE subscriptionid = ?"; # warn "query :".$query; my $sth = $dbh->prepare($query); @@ -1266,14 +1307,13 @@ sub ModSubscription { $whenmorethan3, $setto3, $lastvalue3, $innerloop3, $numberingmethod, $status, $biblionumber, $callnumber, $notes, $letter, $hemisphere, ($manualhistory?$manualhistory:0), - $internalnotes, + $internalnotes, $serialsadditems, $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; } @@ -1286,7 +1326,7 @@ $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) Create a new subscription with value given on input args. @@ -1309,7 +1349,7 @@ sub NewSubscription { $lastvalue3, $innerloop3, $numberingmethod, $status, $notes, $letter, $firstacquidate, $irregularity, $numberpattern, $callnumber, $hemisphere, $manualhistory, - $internalnotes + $internalnotes, $serialsadditems, ) = @_; my $dbh = C4::Context->dbh; @@ -1322,8 +1362,8 @@ 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) + VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) |; my $sth = $dbh->prepare($query); $sth->execute( @@ -1347,20 +1387,20 @@ sub NewSubscription { format_date_in_iso($firstacquidate), $irregularity, $numberpattern, $callnumber, $hemisphere, $manualhistory, - $internalnotes + $internalnotes, $serialsadditems, ); #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( @@ -1382,13 +1422,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; } @@ -1419,14 +1470,16 @@ sub ReNewSubscription { 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} - ); + if (C4::Context->preference("RenewSerialAddsSuggestion")){ + NewSuggestion( + $user, $subscription->{bibliotitle}, + $biblio->{author}, $biblio->{publishercode}, + $biblio->{note}, '', + '', '', + '', '', + $subscription->{biblionumber} + ); + } # renew subscription $query = qq| @@ -1438,8 +1491,7 @@ 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 @@ -1484,10 +1536,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 @@ -1495,6 +1547,8 @@ sub NewIssue { WHERE subscriptionid=? |; $sth = $dbh->prepare($query); + $recievedlist =~ s/^; //; + $missinglist =~ s/^; //; $sth->execute( $recievedlist, $missinglist, $subscriptionid ); return $serialid; } @@ -1704,12 +1758,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 @@ -1730,8 +1786,8 @@ sub HasSubscriptionExpired { $sth->execute($subscriptionid); my ($res) = $sth->fetchrow ; my @res=split (/-/,$res); -# warn "date expiration :$expirationdate"; 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)); @@ -1739,36 +1795,13 @@ sub HasSubscriptionExpired { } else { if ($subscription->{'numberlength'}){ my $countreceived=countissuesfrom($subscriptionid,$subscription->{'startdate'}); - return 1 if ($countreceived >$subscription->{'numberlentgh'}); + return 1 if ($countreceived >$subscription->{'numberlength'}); return 0; } else { return 0; } } - 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; # Notice that you'll never get here. } =head2 DelSubscription @@ -1791,8 +1824,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 @@ -2050,6 +2082,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 @@ -2321,232 +2354,6 @@ sub abouttoexpire { } else {return 0} } -=head2 old_newsubscription - -=over 4 - -($subscriptionid) = &old_newsubscription($auser,$aqbooksellerid,$cost,$aqbudgetid,$biblionumber, - $startdate,$periodicity,$firstacquidate,$dow,$irregularity,$numberpattern,$numberlength,$weeklength,$monthlength, - $add1,$every1,$whenmorethan1,$setto1,$lastvalue1, - $add2,$every2,$whenmorethan2,$setto2,$lastvalue2, - $add3,$every3,$whenmorethan3,$setto3,$lastvalue3, - $numberingmethod, $status, $callnumber, $notes, $hemisphere) - -this function is similar to the NewSubscription subroutine but has a few different -values passed in -$firstacquidate - date of first serial issue to arrive -$irregularity - the issues not expected separated by a '|' -- eg. monthly issue but not expecting issue for june and july would have $irregularity of '6|7' -$numberpattern - the number for an array of labels to reconstruct the javascript correctly in the - subscription-add.tmpl file -$callnumber - display the callnumber of the serial -$hemisphere - either 2 = southern hemisphere or 1 = northern hemisphere - used for quarterly serials - -return : -the $subscriptionid number of the new subscription - -=back - -=cut - -sub old_newsubscription { - my ( - $auser, $aqbooksellerid, $cost, $aqbudgetid, - $biblionumber, $startdate, $periodicity, $firstacquidate, - $dow, $irregularity, $numberpattern, $numberlength, - $weeklength, $monthlength, $add1, $every1, - $whenmorethan1, $setto1, $lastvalue1, $add2, - $every2, $whenmorethan2, $setto2, $lastvalue2, - $add3, $every3, $whenmorethan3, $setto3, - $lastvalue3, $numberingmethod, $status, $callnumber, - $notes, $hemisphere - ) = @_; - my $dbh = C4::Context->dbh; - - #save subscription - my $sth = $dbh->prepare( -"insert into subscription (librarian,aqbooksellerid,cost,aqbudgetid,biblionumber, - startdate,periodicity,firstacquidate,dow,irregularity,numberpattern,numberlength,weeklength,monthlength, - add1,every1,whenmorethan1,setto1,lastvalue1, - add2,every2,whenmorethan2,setto2,lastvalue2, - add3,every3,whenmorethan3,setto3,lastvalue3, - numberingmethod, status, callnumber, notes, hemisphere) values - (?,?,?,?,?,?,?,?,?,?,?, - ?,?,?,?,?,?,?,?,?,?,?, - ?,?,?,?,?,?,?,?,?,?,?,?)" - ); - $sth->execute( - $auser, $aqbooksellerid, - $cost, $aqbudgetid, - $biblionumber, format_date_in_iso($startdate), - $periodicity, format_date_in_iso($firstacquidate), - $dow, $irregularity, - $numberpattern, $numberlength, - $weeklength, $monthlength, - $add1, $every1, - $whenmorethan1, $setto1, - $lastvalue1, $add2, - $every2, $whenmorethan2, - $setto2, $lastvalue2, - $add3, $every3, - $whenmorethan3, $setto3, - $lastvalue3, $numberingmethod, - $status, $callnumber, - $notes, $hemisphere - ); - - #then create the 1st waited number - my $subscriptionid = $dbh->{'mysql_insertid'}; - my $enddate = GetExpirationDate($subscriptionid); - - $sth = - $dbh->prepare( -"insert into subscriptionhistory (biblionumber, subscriptionid, histstartdate, enddate, missinglist, recievedlist, opacnote, librariannote) values (?,?,?,?,?,?,?,?)" - ); - $sth->execute( - $biblionumber, $subscriptionid, - format_date_in_iso($startdate), - format_date_in_iso($enddate), - "", "", "", $notes - ); - - # reread subscription to get a hash (for calculation of the 1st issue number) - $sth = - $dbh->prepare("select * from subscription where subscriptionid = ? "); - $sth->execute($subscriptionid); - my $val = $sth->fetchrow_hashref; - - # calculate issue number - my $serialseq = GetSeq($val); - $sth = - $dbh->prepare( -"insert into serial (serialseq,subscriptionid,biblionumber,status, planneddate) values (?,?,?,?,?)" - ); - $sth->execute( $serialseq, $subscriptionid, $val->{'biblionumber'}, - 1, format_date_in_iso($startdate) ); - return $subscriptionid; -} - -=head2 old_modsubscription - -=over 4 - -($subscriptionid) = &old_modsubscription($auser,$aqbooksellerid,$cost,$aqbudgetid,$biblionumber, - $startdate,$periodicity,$firstacquidate,$dow,$irregularity,$numberpattern,$numberlength,$weeklength,$monthlength, - $add1,$every1,$whenmorethan1,$setto1,$lastvalue1, - $add2,$every2,$whenmorethan2,$setto2,$lastvalue2, - $add3,$every3,$whenmorethan3,$setto3,$lastvalue3, - $numberingmethod, $status, $callnumber, $notes, $hemisphere, $subscriptionid) - -this function is similar to the ModSubscription subroutine but has a few different -values passed in -$firstacquidate - date of first serial issue to arrive -$irregularity - the issues not expected separated by a '|' -- eg. monthly issue but not expecting issue for june and july would have $irregularity of '6|7' -$numberpattern - the number for an array of labels to reconstruct the javascript correctly in the - subscription-add.tmpl file -$callnumber - display the callnumber of the serial -$hemisphere - either 2 = southern hemisphere or 1 = northern hemisphere - used for quarterly serials - -=back - -=cut - -sub old_modsubscription { - my ( - $auser, $aqbooksellerid, $cost, $aqbudgetid, - $startdate, $periodicity, $firstacquidate, $dow, - $irregularity, $numberpattern, $numberlength, $weeklength, - $monthlength, $add1, $every1, $whenmorethan1, - $setto1, $lastvalue1, $innerloop1, $add2, - $every2, $whenmorethan2, $setto2, $lastvalue2, - $innerloop2, $add3, $every3, $whenmorethan3, - $setto3, $lastvalue3, $innerloop3, $numberingmethod, - $status, $biblionumber, $callnumber, $notes, - $hemisphere, $subscriptionid - ) = @_; - my $dbh = C4::Context->dbh; - my $sth = $dbh->prepare( -"update subscription set librarian=?, aqbooksellerid=?,cost=?,aqbudgetid=?,startdate=?, - periodicity=?,firstacquidate=?,dow=?,irregularity=?,numberpattern=?,numberlength=?,weeklength=?,monthlength=?, - add1=?,every1=?,whenmorethan1=?,setto1=?,lastvalue1=?,innerloop1=?, - add2=?,every2=?,whenmorethan2=?,setto2=?,lastvalue2=?,innerloop2=?, - add3=?,every3=?,whenmorethan3=?,setto3=?,lastvalue3=?,innerloop3=?, - numberingmethod=?, status=?, biblionumber=?, callnumber=?, notes=?, hemisphere=? where subscriptionid = ?" - ); - $sth->execute( - $auser, $aqbooksellerid, $cost, $aqbudgetid, - $startdate, $periodicity, $firstacquidate, $dow, - $irregularity, $numberpattern, $numberlength, $weeklength, - $monthlength, $add1, $every1, $whenmorethan1, - $setto1, $lastvalue1, $innerloop1, $add2, - $every2, $whenmorethan2, $setto2, $lastvalue2, - $innerloop2, $add3, $every3, $whenmorethan3, - $setto3, $lastvalue3, $innerloop3, $numberingmethod, - $status, $biblionumber, $callnumber, $notes, - $hemisphere, $subscriptionid - ); - $sth->finish; - - $sth = - $dbh->prepare("select * from subscription where subscriptionid = ? "); - $sth->execute($subscriptionid); - my $val = $sth->fetchrow_hashref; - - # calculate issue number - my $serialseq = Get_Seq($val); - $sth = - $dbh->prepare("UPDATE serial SET serialseq = ? WHERE subscriptionid = ?"); - $sth->execute( $serialseq, $subscriptionid ); - - my $enddate = subscriptionexpirationdate($subscriptionid); - $sth = $dbh->prepare("update subscriptionhistory set enddate=?"); - $sth->execute( format_date_in_iso($enddate) ); -} - -=head2 old_getserials - -=over 4 - -($totalissues,@serials) = &old_getserials($subscriptionid) - -this function get a hashref of serials and the total count of them - -return : -$totalissues - number of serial lines -the serials into a table. Each line of this table containts a ref to a hash which it containts -serialid, serialseq, status,planneddate,notes,routingnotes from tables : serial where status is not 2, 4, or 5 - -=back - -=cut - -sub old_getserials { - my ($subscriptionid) = @_; - my $dbh = C4::Context->dbh; - - # status = 2 is "arrived" - my $sth = - $dbh->prepare( -"select serialid,serialseq, status, planneddate,notes,routingnotes from serial where subscriptionid = ? and status <>2 and status <>4 and status <>5" - ); - $sth->execute($subscriptionid); - my @serials; - my $num = 1; - 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->{"num"} = $num; - $num++; - push @serials, $line; - } - $sth = $dbh->prepare("select count(*) from serial where subscriptionid=?"); - $sth->execute($subscriptionid); - my ($totalissues) = $sth->fetchrow; - return ( $totalissues, @serials ); -} - =head2 GetNextDate ($resultdate) = &GetNextDate($planneddate,$subscription) @@ -2581,15 +2388,19 @@ sub GetNextDate(@) { #date supposed to be in ISO. my ( $year, $month, $day ) = split(/-/, $planneddate); + return undef if not check_date($year, $month, $day); $month=1 unless ($month); $day=1 unless ($day); my @resultdate; # warn "DOW $dayofweek"; - if ( $subscription->{periodicity} % 16 == 0 ) { + if ( $subscription->{periodicity} % 16 == 0 ) { # 'without regularity' || 'irregular' return 0; } - if ( $subscription->{periodicity} == 1 ) { + # 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 { @@ -2603,11 +2414,13 @@ sub GetNextDate(@) { @resultdate = Add_Delta_Days($year,$month, $day , 1 ); } } + # 1 week if ( $subscription->{periodicity} == 2 ) { 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); @@ -2616,6 +2429,7 @@ sub GetNextDate(@) { @resultdate = Add_Delta_Days( $year,$month, $day, 7); } } + # 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} : $@";} @@ -2630,6 +2444,7 @@ sub GetNextDate(@) { @resultdate = Add_Delta_Days($year,$month, $day , 14 ); } } + # 1 / 3 weeks if ( $subscription->{periodicity} == 4 ) { my ($wkno,$year) = eval {Week_of_Year( $year,$month, $day )}; if ($@){warn "année mois jour : $year $month $day $subscription->{subscriptionid} : $@";} @@ -2732,8 +2547,6 @@ sub itemdata { 1; __END__ -=back - =head1 AUTHOR Koha Developement team