[Koha-patches] [PATCH] UpdateDataBase for smart-rules modification
Henri-Damien LAURENT
henridamien.laurent at biblibre.com
Mon Aug 24 22:10:22 CEST 2009
Members.pm :
Adding IsMemberBlocked
Circulation.pm :
Using IsMemberBlocked in order to implement finedays
---
C4/Circulation.pm | 14 +++-
C4/Members.pm | 67 ++++++++++++++++++++
...-permit_to_define_fine_days_in_issuing_rules.pl | 22 +++++++
3 files changed, 99 insertions(+), 4 deletions(-)
create mode 100755 installer/data/mysql/atomicupdate/0001-bug_2929-permit_to_define_fine_days_in_issuing_rules.pl
diff --git a/C4/Circulation.pm b/C4/Circulation.pm
index 7f2bfeb..98f324c 100644
--- a/C4/Circulation.pm
+++ b/C4/Circulation.pm
@@ -532,7 +532,6 @@ sub itemissues {
$data->{'date_due'} = ($data->{'wthdrawn'} eq '1') ? 'Cancelled' : 'Available';
}
- $sth2->finish;
# Find the last 3 people who borrowed this item.
$sth2 = $dbh->prepare(
@@ -552,12 +551,10 @@ sub itemissues {
} # if
} # for
- $sth2->finish;
$results[$i] = $data;
$i++;
}
- $sth->finish;
return (@results);
}
@@ -731,7 +728,16 @@ sub CanBookBeIssued {
}
}
- #
+ 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 );
diff --git a/C4/Members.pm b/C4/Members.pm
index d82e5e4..ea17d2b 100644
--- a/C4/Members.pm
+++ b/C4/Members.pm
@@ -63,6 +63,7 @@ BEGIN {
&PutPatronImage
&RmPatronImage
+ &IsMemberBlocked
&GetMemberAccountRecords
&GetBorNotifyAcctRecord
@@ -506,6 +507,72 @@ LEFT JOIN categories on borrowers.categorycode=categories.categorycode
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);
diff --git a/installer/data/mysql/atomicupdate/0001-bug_2929-permit_to_define_fine_days_in_issuing_rules.pl b/installer/data/mysql/atomicupdate/0001-bug_2929-permit_to_define_fine_days_in_issuing_rules.pl
new file mode 100755
index 0000000..dfe3b6b
--- /dev/null
+++ b/installer/data/mysql/atomicupdate/0001-bug_2929-permit_to_define_fine_days_in_issuing_rules.pl
@@ -0,0 +1,22 @@
+#! /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";
--
1.6.0.4
More information about the Koha-patches
mailing list