[Koha-patches] [PATCH] bug 2503 [3/9]: adding dates to some C4:Circulation methods to allow offline circulation tool to specify dates other than today
Andrew Moore
andrew.moore at liblime.com
Tue Aug 19 16:00:24 CEST 2008
When uploading an offline circulation file, some actions may need to take place
in the past. This patch adds date parameters to some C4::Circulation methods
to allow us to set dates on them
added issuedate to C4::Circulation::AddIssue
adding issuedate to C4::Circulation::AddRenewal
adding returdate to C4::Circulation::MarkIssueReturned
---
C4/Circulation.pm | 78 +++++++++++++++++++++++++++++++++-------------------
1 files changed, 49 insertions(+), 29 deletions(-)
diff --git a/C4/Circulation.pm b/C4/Circulation.pm
index c4a3f1a..a524e35 100644
--- a/C4/Circulation.pm
+++ b/C4/Circulation.pm
@@ -826,6 +826,8 @@ Issue a book. Does no check, they are done in CanBookBeIssued. If we reach this
=item C<$cancelreserve>
+=item C<$issuedate> the date to issue the item in iso format (YYYY-MM-DD). Defaults to today.
+
AddIssue does the following things :
- step 01: check that there is a borrowernumber & a barcode provided
- check for RENEWAL (book issued & being issued to the same patron)
@@ -844,9 +846,14 @@ AddIssue does the following things :
=cut
sub AddIssue {
- my ( $borrower, $barcode, $date, $cancelreserve ) = @_;
+ my ( $borrower, $barcode, $datedue, $cancelreserve, $issuedate ) = @_;
my $dbh = C4::Context->dbh;
my $barcodecheck=CheckValidBarcode($barcode);
+
+ # $issuedate defaults to today.
+ if ( ! defined $issuedate ) {
+ $issuedate = strftime( "%Y-%m-%d", localtime );
+ }
if ($borrower and $barcode and $barcodecheck ne '0'){
# find which item we issue
my $item = GetItem('', $barcode) or return undef; # if we don't get an Item, abort.
@@ -878,7 +885,8 @@ sub AddIssue {
$borrower->{'borrowernumber'},
$item->{'itemnumber'},
$branch,
- $date
+ $datedue,
+ $issuedate,
);
}
@@ -956,8 +964,8 @@ sub AddIssue {
VALUES (?,?,?,?,?)"
);
my $dateduef;
- if ($date) {
- $dateduef = $date;
+ if ($datedue) {
+ $dateduef = $datedue;
} else {
my $itype=(C4::Context->preference('item-level_itypes')) ? $biblio->{'itype'} : $biblio->{'itemtype'} ;
my $loanlength = GetLoanLength(
@@ -971,11 +979,13 @@ sub AddIssue {
$dateduef = C4::Dates->new($borrower->{dateexpiry},'iso');
}
};
- $sth->execute(
- $borrower->{'borrowernumber'},
- $item->{'itemnumber'},
- strftime( "%Y-%m-%d", localtime ),$dateduef->output('iso'), C4::Context->userenv->{'branch'}
- );
+ $sth->execute(
+ $borrower->{'borrowernumber'}, # borrowernumber
+ $item->{'itemnumber'}, # itemnumber
+ $issuedate, # issuedate
+ $dateduef->output('iso'), # date_due
+ C4::Context->userenv->{'branch'} # branchcode
+ );
$sth->finish;
$item->{'issues'}++;
ModItem({ issues => $item->{'issues'},
@@ -1517,7 +1527,7 @@ sub ForceReturn {
=over 4
-MarkIssueReturned($borrowernumber, $itemnumber, $dropbox_branch);
+MarkIssueReturned($borrowernumber, $itemnumber, $dropbox_branch, $returndate);
=back
@@ -1525,9 +1535,12 @@ Unconditionally marks an issue as being returned by
moving the C<issues> row to C<old_issues> and
setting C<returndate> to the current date, or
the last non-holiday date of the branccode specified in
-C<dropbox> . Assumes you've already checked that
+C<dropbox_branch> . Assumes you've already checked that
it's safe to do this, i.e. last non-holiday > issuedate.
+if C<$returndate> is specified (in iso format), it is used as the date
+of the return. It is ignored when a dropbox_branch is passed in.
+
Ideally, this function would be internal to C<C4::Circulation>,
not exported, but it is currently needed by one
routine in C<C4::Accounts>.
@@ -1535,19 +1548,23 @@ routine in C<C4::Accounts>.
=cut
sub MarkIssueReturned {
- my ($borrowernumber, $itemnumber, $dropbox_branch ) = @_;
- my $dbh = C4::Context->dbh;
- my $query = "UPDATE issues SET returndate=";
- my @bind = ($borrowernumber,$itemnumber);
- if($dropbox_branch) {
- my $calendar = C4::Calendar->new( branchcode => $dropbox_branch );
- my $dropboxdate = $calendar->addDate(C4::Dates->new(), -1 );
- unshift @bind, $dropboxdate->output('iso') ;
- $query .= " ? "
- } else {
- $query .= " now() ";
- }
- $query .= " WHERE borrowernumber = ? AND itemnumber = ?";
+ my ( $borrowernumber, $itemnumber, $dropbox_branch, $returndate ) = @_;
+ my $dbh = C4::Context->dbh;
+ my $query = "UPDATE issues SET returndate=";
+ my @bind;
+ if ($dropbox_branch) {
+ my $calendar = C4::Calendar->new( branchcode => $dropbox_branch );
+ my $dropboxdate = $calendar->addDate( C4::Dates->new(), -1 );
+ $query .= " ? ";
+ push @bind, $dropboxdate->output('iso');
+ } elsif ($returndate) {
+ $query .= " ? ";
+ push @bind, $returndate;
+ } else {
+ $query .= " now() ";
+ }
+ $query .= " WHERE borrowernumber = ? AND itemnumber = ?";
+ push @bind, $borrowernumber, $itemnumber;
# FIXME transaction
my $sth_upd = $dbh->prepare($query);
$sth_upd->execute(@bind);
@@ -1992,7 +2009,7 @@ sub CanBookBeRenewed {
=head2 AddRenewal
-&AddRenewal($borrowernumber, $itemnumber, $branch, [$datedue]);
+&AddRenewal($borrowernumber, $itemnumber, $branch, [$datedue], [$issuedate]);
Renews a loan.
@@ -2005,6 +2022,8 @@ C<$branch> is the library branch. Defaults to the homebranch of the ITEM.
C<$datedue> can be a C4::Dates object used to set the due date.
+C<$issuedate> can be a iso formatted date to use for the issuedate.
+
If C<$datedue> is the empty string, C<&AddRenewal> will calculate the due date automatically
from the book's item type.
@@ -2016,10 +2035,11 @@ sub AddRenewal {
my $item = GetItem($itemnumber) or return undef;
my $biblio = GetBiblioFromItemNumber($itemnumber) or return undef;
my $branch = (@_) ? shift : $item->{homebranch}; # opac-renew doesn't send branch
- my $datedue;
+ my $datedue = shift;
+ my $issuedate = shift;
# If the due date wasn't specified, calculate it by adding the
# book's loan length to today's date.
- unless (@_ and $datedue = shift and $datedue->output('iso')) {
+ unless ($datedue && $datedue->output('iso')) {
my $borrower = C4::Members::GetMemberDetails( $borrowernumber, 0 ) or return undef;
my $loanlength = GetLoanLength(
@@ -2046,11 +2066,11 @@ sub AddRenewal {
# Update the issues record to have the new due date, and a new count
# of how many times it has been renewed.
my $renews = $issuedata->{'renewals'} + 1;
- $sth = $dbh->prepare("UPDATE issues SET date_due = ?, renewals = ?, lastreneweddate = CURRENT_DATE
+ $sth = $dbh->prepare("UPDATE issues SET date_due = ?, renewals = ?, lastreneweddate = CURRENT_DATE, issuedate = ?
WHERE borrowernumber=?
AND itemnumber=?"
);
- $sth->execute( $datedue->output('iso'), $renews, $borrowernumber, $itemnumber );
+ $sth->execute( $datedue->output('iso'), $renews, $issuedate, $borrowernumber, $itemnumber );
$sth->finish;
# Update the renewal count on the item, and tell zebra to reindex
--
1.5.6
More information about the Koha-patches
mailing list