sub GetSuppliersWithLateIssues {
my $dbh = C4::Context->dbh;
my $query = qq|
- SELECT DISTINCT id, name
+ SELECT DISTINCT id, name
FROM subscription
LEFT JOIN serial ON serial.subscriptionid=subscription.subscriptionid
LEFT JOIN aqbooksellers ON subscription.aqbooksellerid = aqbooksellers.id
WHERE id > 0
AND (
(planneddate < now() AND serial.status=1)
- OR serial.STATUS IN (3, 4, 41, 42, 43, 44)
+ OR serial.STATUS IN (3, 4, 41, 42, 43, 44, 7)
)
AND subscription.closed = 0
ORDER BY name|;
my $dbh = C4::Context->dbh;
$date = strftime( "%Y-%m-%d", localtime ) unless ($date);
my $query = "
- UPDATE serial SET claimdate = ?, status = 7
- WHERE serialid in (" . join( ",", map { '?' } @$serialids ) . ")";
+ UPDATE serial
+ SET claimdate = ?,
+ status = 7,
+ claims_count = claims_count + 1
+ WHERE serialid in (" . join( ",", map { '?' } @$serialids ) . ")
+ ";
my $rq = $dbh->prepare($query);
$rq->execute($date, @$serialids);
return $rq->rows;
return $sth->rows;
}
-# Update missinglist field, used by ModSerialStatus
-sub _update_missinglist {
- my $subscriptionid = shift;
-
- my $dbh = C4::Context->dbh;
- my @missingserials = GetSerials2($subscriptionid, "4,41,42,43,44,5");
- my $missinglist;
- foreach my $missingserial (@missingserials) {
- if ( grep { $_ == $missingserial->{status} } qw( 4 41 42 43 44 ) ) {
- $missinglist .= $missingserial->{'serialseq'} . "; ";
- } elsif($missingserial->{'status'} == 5) {
- $missinglist .= "not issued " . $missingserial->{'serialseq'} . "; ";
- }
- }
- $missinglist =~ s/; $//;
- my $query = qq{
- UPDATE subscriptionhistory
- SET missinglist = ?
- WHERE subscriptionid = ?
- };
- my $sth = $dbh->prepare($query);
- $sth->execute($missinglist, $subscriptionid);
-}
-
-# Update recievedlist field, used by ModSerialStatus
-sub _update_receivedlist {
- my $subscriptionid = shift;
-
- my $dbh = C4::Context->dbh;
- my @receivedserials = GetSerials2($subscriptionid, "2");
- my $receivedlist;
- foreach (@receivedserials) {
- $receivedlist .= $_->{'serialseq'} . "; ";
- }
- $receivedlist =~ s/; $//;
- my $query = qq{
- UPDATE subscriptionhistory
- SET recievedlist = ?
- WHERE subscriptionid = ?
- };
- my $sth = $dbh->prepare($query);
- $sth->execute($receivedlist, $subscriptionid);
-}
-
=head2 ModSerialStatus
ModSerialStatus($serialid,$serialseq, $planneddate,$publisheddate,$status,$notes)
$sth->execute($subscriptionid);
my $val = $sth->fetchrow_hashref;
unless ( $val->{manualhistory} ) {
+ $query = "SELECT missinglist,recievedlist FROM subscriptionhistory WHERE subscriptionid=?";
+ $sth = $dbh->prepare($query);
+ $sth->execute($subscriptionid);
+ my ( $missinglist, $recievedlist ) = $sth->fetchrow;
+
if ( $status == 2 || ($oldstatus == 2 && $status != 2) ) {
- _update_receivedlist($subscriptionid);
+ $recievedlist .= "; $serialseq"
+ if ($recievedlist !~ /(^|;)\s*$serialseq(?=;|$)/);
}
- my @missing_statuses = qw( 4 41 42 43 44 );
- if ( ( grep { $_ == $status } ( @missing_statuses, 5 ) )
- || (
- ( grep { $_ == $oldstatus } @missing_statuses )
- && ! ( grep { $_ == $status } @missing_statuses ) )
- || ($oldstatus == 5 && $status != 5)) {
- _update_missinglist($subscriptionid);
+
+ # in case serial has been previously marked as missing
+ if (grep /$status/, (1,2,3,7)) {
+ $missinglist=~ s/(^|;)\s*$serialseq(?=;|$)//g;
}
+
+ my @missing_statuses = qw( 4 41 42 43 44 );
+ $missinglist .= "; $serialseq"
+ if ( ( grep { $_ == $status } @missing_statuses ) && ( $missinglist !~/(^|;)\s*$serialseq(?=;|$)/ ) );
+ $missinglist .= "; not issued $serialseq"
+ if ( $status == 5 && $missinglist !~ /(^|;)\s*$serialseq(?=;|$)/ );
+
+ $query = "UPDATE subscriptionhistory SET recievedlist=?, missinglist=? WHERE subscriptionid=?";
+ $sth = $dbh->prepare($query);
+ $recievedlist =~ s/^; //;
+ $missinglist =~ s/^; //;
+ $sth->execute( $recievedlist, $missinglist, $subscriptionid );
}
}
"SELECT
serialid, aqbooksellerid, name,
biblio.title, biblioitems.issn, planneddate, serialseq,
- serial.status, serial.subscriptionid, claimdate,
+ serial.status, serial.subscriptionid, claimdate, claims_count,
subscription.branchcode
- FROM serial
- LEFT JOIN subscription ON serial.subscriptionid=subscription.subscriptionid
+ FROM serial
+ LEFT JOIN subscription ON serial.subscriptionid=subscription.subscriptionid
LEFT JOIN biblio ON subscription.biblionumber=biblio.biblionumber
LEFT JOIN biblioitems ON subscription.biblionumber=biblioitems.biblionumber
LEFT JOIN aqbooksellers ON subscription.aqbooksellerid = aqbooksellers.id
- WHERE subscription.subscriptionid = serial.subscriptionid
+ WHERE subscription.subscriptionid = serial.subscriptionid
AND (serial.STATUS IN (4, 41, 42, 43, 44) OR ((planneddate < now() AND serial.STATUS =1) OR serial.STATUS = 3 OR serial.STATUS = 7))
AND subscription.aqbooksellerid=$supplierid
$byserial
);
} else {
$sth = $dbh->prepare(
- "SELECT
+ "SELECT
serialid, aqbooksellerid, name,
biblio.title, planneddate, serialseq,
- serial.status, serial.subscriptionid, claimdate,
+ serial.status, serial.subscriptionid, claimdate, claims_count,
subscription.branchcode
- FROM serial
- LEFT JOIN subscription ON serial.subscriptionid=subscription.subscriptionid
+ FROM serial
+ LEFT JOIN subscription ON serial.subscriptionid=subscription.subscriptionid
LEFT JOIN biblio ON subscription.biblionumber=biblio.biblionumber
LEFT JOIN aqbooksellers ON subscription.aqbooksellerid = aqbooksellers.id
- WHERE subscription.subscriptionid = serial.subscriptionid
+ WHERE subscription.subscriptionid = serial.subscriptionid
AND (serial.STATUS IN (4, 41, 42, 43, 44) OR ((planneddate < now() AND serial.STATUS =1) OR serial.STATUS = 3 OR serial.STATUS = 7))
$byserial
ORDER BY $order"
sub updateClaim {
my ($serialid) = @_;
my $dbh = C4::Context->dbh;
- my $sth = $dbh->prepare(
- "UPDATE serial SET claimdate = now()
- WHERE serialid = ?
- "
- );
- $sth->execute($serialid);
+ $dbh->do(q|
+ UPDATE serial
+ SET claimdate = NOW(),
+ claims_count = claims_count + 1
+ WHERE serialid = ?
+ |, {}, $serialid );
return;
}
$num_type //= '';
$locale ||= 'en';
my $string;
- given ($num_type) {
- when (/^dayname$/) {
- # 1970-06-01 was a monday
- $value = $value % 7;
- my $dt = DateTime->new(
- year => 1970,
- month => 6,
- day => $value + 1,
- locale => $locale,
- );
- $string = $dt->strftime("%A");
- }
- when (/^monthname$/) {
- $value = $value % 12;
- my $dt = DateTime->new(
- year => 1970,
- month => $value + 1,
- locale => $locale,
- );
- $string = $dt->strftime("%B");
- }
- when (/^season$/) {
- my @seasons= qw( Spring Summer Fall Winter );
- $value = $value % 4;
- $string = $seasons[$value];
- }
- default {
- $string = $value;
- }
+ if ( $num_type =~ /^dayname$/ ) {
+ # 1970-11-01 was a Sunday
+ $value = $value % 7;
+ my $dt = DateTime->new(
+ year => 1970,
+ month => 11,
+ day => $value + 1,
+ locale => $locale,
+ );
+ $string = $dt->strftime("%A");
+ } elsif ( $num_type =~ /^monthname$/ ) {
+ $value = $value % 12;
+ my $dt = DateTime->new(
+ year => 1970,
+ month => $value + 1,
+ locale => $locale,
+ );
+ $string = $dt->strftime("%B");
+ } elsif ( $num_type =~ /^season$/ ) {
+ my @seasons= qw( Spring Summer Fall Winter );
+ $value = $value % 4;
+ $string = $seasons[$value];
+ } else {
+ $string = $value;
}
+
return $string;
}