&GetLatestSerials &ModSerialStatus &GetNextDate &GetSerials2
&ReNewSubscription &GetLateIssues &GetLateOrMissingIssues
&GetSerialInformation &AddItem2Serial
- &PrepareSerialsData
+ &PrepareSerialsData &GetNextExpected &ModNextExpected
&UpdateClaimdateIssues
&GetSuppliersWithLateIssues &getsupplierbyserialid
while ( my ( $id, $name ) = $sth->fetchrow ) {
$supplierlist{$id} = $name;
}
- if ( C4::Context->preference("RoutingSerials") ) {
- $supplierlist{''} = "All Suppliers";
- }
return %supplierlist;
}
#Maybe GetMarcItem should return values on failure
$debug and warn "itemnumber :$itemnum->[0], bibnum :".$data->{'biblionumber'};
my $itemprocessed =
- PrepareItemrecordDisplay( $data->{'biblionumber'}, $itemnum->[0] );
+ PrepareItemrecordDisplay( $data->{'biblionumber'}, $itemnum->[0] , $data );
$itemprocessed->{'itemnumber'} = $itemnum->[0];
$itemprocessed->{'itemid'} = $itemnum->[0];
$itemprocessed->{'serialid'} = $serialid;
}
else {
my $itemprocessed =
- PrepareItemrecordDisplay( $data->{'biblionumber'} );
+ PrepareItemrecordDisplay( $data->{'biblionumber'}, '', $data );
$itemprocessed->{'itemid'} = "N$serialid";
$itemprocessed->{'serialid'} = $serialid;
$itemprocessed->{'biblionumber'} = $data->{'biblionumber'};
$data = AddItem2Serial($serialid,$itemnumber);
Adds an itemnumber to Serial record
+
=back
=cut
Update Claimdate for issues in @$serialids list with date $date
(Take Today if none)
+
=back
=cut
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
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
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 );
}
}
}
}
+=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
$whenmorethan3, $setto3, $lastvalue3, $innerloop3,
$numberingmethod, $status, $biblionumber, $callnumber,
$notes, $letter, $hemisphere, $manualhistory,
- $internalnotes, $serialsadditems,
- $subscriptionid
+ $internalnotes, $serialsadditems,$subscriptionid,
+ $staffdisplaycount,$opacdisplaycount, $location
) = @_;
# warn $irregularity;
my $dbh = C4::Context->dbh;
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=?,serialsadditems=?
+ numberingmethod=?, status=?, biblionumber=?, callnumber=?, notes=?, letter=?, hemisphere=?,manualhistory=?,internalnotes=?,serialsadditems=?,staffdisplaycount = ?,opacdisplaycount = ?, location = ?
WHERE subscriptionid = ?";
-# warn "query :".$query;
+ #warn "query :".$query;
my $sth = $dbh->prepare($query);
$sth->execute(
$auser, $branchcode, $aqbooksellerid, $cost,
$numberingmethod, $status, $biblionumber, $callnumber,
$notes, $letter, $hemisphere, ($manualhistory?$manualhistory:0),
$internalnotes, $serialsadditems,
+ $staffdisplaycount, $opacdisplaycount, $location,
$subscriptionid
);
my $rows=$sth->rows;
$add1,$every1,$whenmorethan1,$setto1,$lastvalue1,$innerloop1,
$add2,$every2,$whenmorethan2,$setto2,$lastvalue2,$innerloop2,
$add3,$every3,$whenmorethan3,$setto3,$lastvalue3,$innerloop3,
- $numberingmethod, $status, $notes, $serialsadditems)
+ $numberingmethod, $status, $notes, $serialsadditems,
+ $staffdisplaycount, $opacdisplaycount, $graceperiod, $location);
Create a new subscription with value given on input args.
$lastvalue3, $innerloop3, $numberingmethod, $status,
$notes, $letter, $firstacquidate, $irregularity,
$numberpattern, $callnumber, $hemisphere, $manualhistory,
- $internalnotes, $serialsadditems,
+ $internalnotes, $serialsadditems, $staffdisplaycount, $opacdisplaycount,
+ $graceperiod, $location
) = @_;
my $dbh = C4::Context->dbh;
add2,every2,whenmorethan2,setto2,lastvalue2,innerloop2,
add3,every3,whenmorethan3,setto3,lastvalue3,innerloop3,
numberingmethod, status, notes, letter,firstacquidate,irregularity,
- numberpattern, callnumber, hemisphere,manualhistory,internalnotes,serialsadditems)
- VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)
+ numberpattern, callnumber, hemisphere,manualhistory,internalnotes,serialsadditems,
+ staffdisplaycount,opacdisplaycount,graceperiod,location)
+ VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)
|;
my $sth = $dbh->prepare($query);
$sth->execute(
$numberpattern, $callnumber,
$hemisphere, $manualhistory,
$internalnotes, $serialsadditems,
+ $staffdisplaycount, $opacdisplaycount,
+ $graceperiod, $location,
);
#then create the 1st waited number
### 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
WHERE subscriptionid=?
|;
$sth = $dbh->prepare($query);
+ $recievedlist =~ s/^; //;
+ $missinglist =~ s/^; //;
$sth->execute( $recievedlist, $missinglist, $subscriptionid );
return $serialid;
}
=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
my $sth = $dbh->prepare($query);
$sth->execute($subscriptionid);
my ($res) = $sth->fetchrow ;
+ return 0 unless $res;
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));
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
$sth->execute($subscriptionid);
my ($res) = $sth->fetchrow ;
# warn "date expiration : ".$expirationdate." date courante ".$res;
- my @res=split /-/,$res;
+ my @res=split (/-/,$res);
@res=Date::Calc::Today if ($res[0]*$res[1]==0);
- my @endofsubscriptiondate=split/-/,$expirationdate;
+ my @endofsubscriptiondate=split(/-/,$expirationdate);
my $x;
if ( $per == 1 ) {$x=7;}
if ( $per == 2 ) {$x=7; }
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 {
@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);
@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} : $@";}
@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} : $@";}
1;
__END__
-=back
-
=head1 AUTHOR
Koha Developement team <info@koha.org>