$data->{'date_due'} = ($data->{'wthdrawn'} eq '1') ? 'Cancelled' : 'Available';
}
- $sth2->finish;
# Find the last 3 people who borrowed this item.
$sth2 = $dbh->prepare(
} # if
} # for
- $sth2->finish;
$results[$i] = $data;
$i++;
}
- $sth->finish;
return (@results);
}
}
}
- #
+ my ($blocktype, $count) = C4::Members::IsMemberBlocked($borrower->{'borrowernumber'});
+ if($blocktype == -1){
+ ## remaining overdue documents
+ $issuingimpossible{USERBLOCKEDREMAINING} = $count;
+ }elsif($blocktype == 1){
+ ## blocked because of overdue return
+ $issuingimpossible{USERBLOCKEDOVERDUE} = $count;
+ }
+
+#
# JB34 CHECKS IF BORROWERS DONT HAVE ISSUE TOO MANY BOOKS
#
my $toomany = TooMany( $borrower, $item->{biblionumber}, $item );
&PutPatronImage
&RmPatronImage
+ &IsMemberBlocked
&GetMemberAccountRecords
&GetBorNotifyAcctRecord
return undef;
}
+=head2 IsMemberBlocked
+
+=over 4
+
+my $blocked = IsMemberBlocked( $borrowernumber );
+
+return the status, and the number of day or documents, depends his punishment
+
+return :
+-1 if the user have overdue returns
+1 if the user is punished X days
+0 if the user is authorised to loan
+
+=back
+
+=cut
+
+sub IsMemberBlocked {
+ my $borrowernumber = shift;
+ my $dbh = C4::Context->dbh;
+ # if he have late issues
+ my $sth = $dbh->prepare(
+ "SELECT COUNT(*) as latedocs
+ FROM issues
+ WHERE borrowernumber = ?
+ AND date_due < now()"
+ );
+ $sth->execute($borrowernumber);
+ my $latedocs = $sth->fetchrow_hashref->{'latedocs'};
+
+ return (-1, $latedocs) if $latedocs > 0;
+
+ my $strsth=qq{
+ SELECT
+ ADDDATE(returndate, finedays * DATEDIFF(returndate,date_due) ) AS blockingdate,
+ DATEDIFF(ADDDATE(returndate, finedays * DATEDIFF(returndate,date_due)),NOW()) AS blockedcount
+ FROM old_issues
+ };
+ # or if he must wait to loan
+ if(C4::Context->preference("item-level_itypes")){
+ $strsth.=
+ qq{ LEFT JOIN items ON (items.itemnumber=old_issues.itemnumber)
+ LEFT JOIN issuingrules ON (issuingrules.itemtype=items.itype)}
+ }else{
+ $strsth .=
+ qq{ LEFT JOIN items ON (items.itemnumber=old_issues.itemnumber)
+ LEFT JOIN biblioitems ON (biblioitems.biblioitemnumber=items.biblioitemnumber)
+ LEFT JOIN issuingrules ON (issuingrules.itemtype=biblioitems.itemtype) };
+ }
+ $strsth.=
+ qq{ WHERE finedays IS NOT NULL
+ AND date_due < returndate
+ AND borrowernumber = ?
+ ORDER BY blockingdate DESC, blockedcount DESC
+ LIMIT 1};
+ $sth=$dbh->prepare($strsth);
+ $sth->execute($borrowernumber);
+ my $row = $sth->fetchrow_hashref;
+ my $blockeddate = $row->{'blockeddate'};
+ my $blockedcount = $row->{'blockedcount'};
+
+ return (1, $blockedcount) if $blockedcount > 0;
+
+ return 0
+}
+
=head2 GetMemberIssuesAndFines
($overdue_count, $issue_count, $total_fines) = &GetMemberIssuesAndFines($borrowernumber);
--- /dev/null
+#! /usr/bin/perl
+use strict;
+use warnings;
+use C4::Context;
+my $dbh=C4::Context->dbh;
+$dbh->do("ALTER TABLE issuingrules ADD
+ COLUMN `finedays` int(11) default NULL AFTER `fine`,
+ COLUMN `renewalsallowed` smallint(6) default NULL,
+ COLUMN `reservesallowed` smallint(6) default NULL,
+ ");
+$sth = $dbh->prepare("SELECT itemtype, renewalsallowed FROM itemtypes");
+$sth->execute();
+
+my $sthupd = $dbh->prepare("UPDATE issuingrules SET renewalsallowed = ? WHERE itemtype = ?");
+
+while(my $row = $sth->fetchrow_hashref){
+ $sthupd->execute($row->{renewalsallowed}, $row->{itemtype});
+}
+
+$dbh->do('ALTER TABLE itemtypes DROP COLUMN `renewalsallowed`;');
+
+print "Upgrade done (Adding finedays renewalsallowed, and reservesallowed fields in issuingrules table)\n";