&AddRenewal
&GetRenewCount
&GetItemIssue
- &GetOpenIssue
&GetItemIssues
&GetBorrowerIssues
&GetIssuingCharges
&GetBranchBorrowerCircRule
&GetBranchItemRule
&GetBiblioIssues
+ &GetOpenIssue
&AnonymiseIssueHistory
);
=head2 barcodedecode
-=head3 $str = &barcodedecode($barcode, [$filter]);
+ $str = &barcodedecode($barcode, [$filter]);
-=over 4
-
-=item Generic filter function for barcode string.
+Generic filter function for barcode string.
Called on every circ if the System Pref itemBarcodeInputFilter is set.
Will do some manipulation of the barcode for systems that deliver a barcode
to circulation.pl that differs from the barcode stored for the item.
behavior that ignores the System Pref. Valid values are the same as the
System Pref options.
-=back
-
=cut
# FIXME -- the &decode fcn below should be wrapped into this one.
=head2 decode
-=head3 $str = &decode($chunk);
+ $str = &decode($chunk);
-=over 4
-
-=item Decodes a segment of a string emitted by a CueCat barcode scanner and
+Decodes a segment of a string emitted by a CueCat barcode scanner and
returns it.
FIXME: Should be replaced with Barcode::Cuecat from CPAN
or Javascript based decoding on the client side.
-=back
-
=cut
sub decode {
=head2 transferbook
-($dotransfer, $messages, $iteminformation) = &transferbook($newbranch, $barcode, $ignore_reserves);
+ ($dotransfer, $messages, $iteminformation) = &transferbook($newbranch,
+ $barcode, $ignore_reserves);
Transfers an item to a new branch. If the item is currently on loan, it is automatically returned before the actual transfer.
Returns three values:
-=head3 $dotransfer
+=over
+
+=item $dotransfer
is true if the transfer was successful.
-=head3 $messages
+=item $messages
is a reference-to-hash which may have any of the following keys:
-=over 4
+=over
=item C<BadBarcode>
=back
+=back
+
=cut
sub transferbook {
=head2 CanBookBeIssued
-Check if a book can be issued.
+ ( $issuingimpossible, $needsconfirmation ) = CanBookBeIssued( $borrower,
+ $barcode, $duedatespec, $inprocess );
-( $issuingimpossible, $needsconfirmation ) = CanBookBeIssued( $borrower, $barcode, $duedatespec, $inprocess );
+Check if a book can be issued.
C<$issuingimpossible> and C<$needsconfirmation> are some hashref.
item is restricted (set by ??)
-C<$needsconfirmation> a reference to a hash. It contains reasons why the loan could be prevented,
-but ones that can be overriden by the operator.
+C<$needsconfirmation> a reference to a hash. It contains reasons why the loan
+could be prevented, but ones that can be overriden by the operator.
Possible values are :
if ( $borrower->{'category_type'} eq 'X' && ( $item->{barcode} )) {
# stats only borrower -- add entry to statistics table, and return issuingimpossible{STATS} = 1 .
&UpdateStats(C4::Context->userenv->{'branch'},'localuse','','',$item->{'itemnumber'},$item->{'itemtype'},$borrower->{'borrowernumber'});
+ ModDateLastSeen( $item->{'itemnumber'} );
return( { STATS => 1 }, {});
}
if ( $borrower->{flags}->{GNA} ) {
}
my ($blocktype, $count) = C4::Members::IsMemberBlocked($borrower->{'borrowernumber'});
- if($blocktype == -1){
- ## remaining overdue documentsi
- if ( C4::Context->preference("OverduesBlockCirc") eq 'block'){
- $issuingimpossible{USERBLOCKEDREMAINING} = $count;
- }
- elsif ( C4::Context->preference("OverduesBlockCirc") eq 'confirmation'){
- $needsconfirmation{USERBLOCKEDREMAINING} = $count;
- }
- }elsif($blocktype == 1){
- ## blocked because of overdue return
- $issuingimpossible{USERBLOCKEDOVERDUE} = $count;
+ if ($blocktype == -1) {
+ ## patron has outstanding overdue loans
+ if ( C4::Context->preference("OverduesBlockCirc") eq 'block'){
+ $issuingimpossible{USERBLOCKEDOVERDUE} = $count;
+ }
+ elsif ( C4::Context->preference("OverduesBlockCirc") eq 'confirmation'){
+ $needsconfirmation{USERBLOCKEDOVERDUE} = $count;
+ }
+ } elsif($blocktype == 1) {
+ # patron has accrued fine days
+ $issuingimpossible{USERBLOCKEDREMAINING} = $count;
}
#
if ( C4::Context->preference("IndependantBranches") ) {
my $userenv = C4::Context->userenv;
if ( ($userenv) && ( $userenv->{flags} % 2 != 1 ) ) {
- $issuingimpossible{NOTSAMEBRANCH} = 1
+ $issuingimpossible{ITEMNOTSAMEBRANCH} = 1
if ( $item->{C4::Context->preference("HomeOrHoldingBranch")} ne $userenv->{branch} );
+ $needsconfirmation{BORRNOTSAMEBRANCH} = GetBranchName( $borrower->{'branchcode'} )
+ if ( $borrower->{'branchcode'} ne $userenv->{branch} );
}
}
=head2 AddIssue
-Issue a book. Does no check, they are done in CanBookBeIssued. If we reach this sub, it means the user confirmed if needed.
+ &AddIssue($borrower, $barcode, [$datedue], [$cancelreserve], [$issuedate])
-&AddIssue($borrower, $barcode, [$datedue], [$cancelreserve], [$issuedate])
+Issue a book. Does no check, they are done in CanBookBeIssued. If we reach this sub, it means the user confirmed if needed.
=over 4
my ( $borrower, $barcode, $datedue, $cancelreserve, $issuedate, $sipmode) = @_;
my $dbh = C4::Context->dbh;
my $barcodecheck=CheckValidBarcode($barcode);
-
# $issuedate defaults to today.
if ( ! defined $issuedate ) {
$issuedate = strftime( "%Y-%m-%d", localtime );
=head2 GetLoanLength
-Get loan length for an itemtype, a borrower type and a branch
+ my $loanlength = &GetLoanLength($borrowertype,$itemtype,branchcode)
-my $loanlength = &GetLoanLength($borrowertype,$itemtype,branchcode)
+Get loan length for an itemtype, a borrower type and a branch
=cut
=head2 GetIssuingRule
+ my $irule = &GetIssuingRule($borrowertype,$itemtype,branchcode)
+
FIXME - This is a copy-paste of GetLoanLength
as a stop-gap. Do not wish to change API for GetLoanLength
this close to release, however, Overdues::GetIssuingRules is broken.
Get the issuing rule for an itemtype, a borrower type and a branch
Returns a hashref from the issuingrules table.
-my $irule = &GetIssuingRule($borrowertype,$itemtype,branchcode)
-
=cut
sub GetIssuingRule {
=head2 GetBranchBorrowerCircRule
-=over 4
-
-my $branch_cat_rule = GetBranchBorrowerCircRule($branchcode, $categorycode);
-
-=back
+ my $branch_cat_rule = GetBranchBorrowerCircRule($branchcode, $categorycode);
Retrieves circulation rule attributes that apply to the given
branch and patron category, regardless of item type.
=head2 GetBranchItemRule
-=over 4
-
-my $branch_item_rule = GetBranchItemRule($branchcode, $itemtype);
-
-=back
+ my $branch_item_rule = GetBranchItemRule($branchcode, $itemtype);
Retrieves circulation rule attributes that apply to the given
branch and item type, regardless of patron category.
=head2 AddReturn
-($doreturn, $messages, $iteminformation, $borrower) =
- &AddReturn($barcode, $branch, $exemptfine, $dropbox);
+ ($doreturn, $messages, $iteminformation, $borrower) =
+ &AddReturn($barcode, $branch, $exemptfine, $dropbox);
Returns a book.
=head2 MarkIssueReturned
-=over 4
-
-MarkIssueReturned($borrowernumber, $itemnumber, $dropbox_branch, $returndate);
-
-=back
+ MarkIssueReturned($borrowernumber, $itemnumber, $dropbox_branch, $returndate);
Unconditionally marks an issue as being returned by
moving the C<issues> row to C<old_issues> and
=head2 _FixOverduesOnReturn
- &_FixOverduesOnReturn($brn,$itm, $exemptfine, $dropboxmode);
+ &_FixOverduesOnReturn($brn,$itm, $exemptfine, $dropboxmode);
C<$brn> borrowernumber
=head2 _FixAccountForLostAndReturned
- &_FixAccountForLostAndReturned($itemnumber, [$borrowernumber, $barcode]);
+ &_FixAccountForLostAndReturned($itemnumber, [$borrowernumber, $barcode]);
Calculates the charge for a book lost and returned.
=head2 GetItemIssue
-$issue = &GetItemIssue($itemnumber);
+ $issue = &GetItemIssue($itemnumber);
Returns patron currently having a book, or undef if not checked out.
=head2 GetOpenIssue
-$issue = GetOpenIssue( $itemnumber );
+ $issue = GetOpenIssue( $itemnumber );
Returns the row from the issues table if the item is currently issued, undef if the item is not currently issued
=head2 GetItemIssues
-$issues = &GetItemIssues($itemnumber, $history);
+ $issues = &GetItemIssues($itemnumber, $history);
Returns patrons that have issued a book
=head2 GetBiblioIssues
-$issues = GetBiblioIssues($biblionumber);
+ $issues = GetBiblioIssues($biblionumber);
this function get all issues from a biblionumber.
=head2 GetUpcomingDueIssues
-=over 4
-
-my $upcoming_dues = GetUpcomingDueIssues( { days_in_advance => 4 } );
-
-=back
+ my $upcoming_dues = GetUpcomingDueIssues( { days_in_advance => 4 } );
=cut
=head2 CanBookBeRenewed
-($ok,$error) = &CanBookBeRenewed($borrowernumber, $itemnumber[, $override_limit]);
+ ($ok,$error) = &CanBookBeRenewed($borrowernumber, $itemnumber[, $override_limit]);
Find out whether a borrowed item may be renewed.
=head2 AddRenewal
-&AddRenewal($borrowernumber, $itemnumber, $branch, [$datedue], [$lastreneweddate]);
+ &AddRenewal($borrowernumber, $itemnumber, $branch, [$datedue], [$lastreneweddate]);
Renews a loan.
sub GetRenewCount {
# check renewal status
- my ($bornum,$itemno)=@_;
- my $dbh = C4::Context->dbh;
- my $renewcount = 0;
- my $renewsallowed = 0;
- my $renewsleft = 0;
+ my ( $bornum, $itemno ) = @_;
+ my $dbh = C4::Context->dbh;
+ my $renewcount = 0;
+ my $renewsallowed = 0;
+ my $renewsleft = 0;
+
+ my $borrower = C4::Members::GetMemberDetails($bornum);
+ my $item = GetItem($itemno);
+
# Look in the issues table for this item, lent to this borrower,
# and not yet returned.
# FIXME - I think this function could be redone to use only one SQL call.
- my $sth = $dbh->prepare("select * from issues
+ my $sth = $dbh->prepare(
+ "select * from issues
where (borrowernumber = ?)
- and (itemnumber = ?)");
- $sth->execute($bornum,$itemno);
+ and (itemnumber = ?)"
+ );
+ $sth->execute( $bornum, $itemno );
my $data = $sth->fetchrow_hashref;
$renewcount = $data->{'renewals'} if $data->{'renewals'};
$sth->finish;
- my $query = "SELECT renewalsallowed FROM items ";
- $query .= (C4::Context->preference('item-level_itypes'))
- ? "LEFT JOIN itemtypes ON items.itype = itemtypes.itemtype "
- : "LEFT JOIN biblioitems on items.biblioitemnumber = biblioitems.biblioitemnumber
- LEFT JOIN itemtypes ON biblioitems.itemtype = itemtypes.itemtype ";
- $query .= "WHERE items.itemnumber = ?";
- my $sth2 = $dbh->prepare($query);
- $sth2->execute($itemno);
- my $data2 = $sth2->fetchrow_hashref();
- $renewsallowed = $data2->{'renewalsallowed'};
- $renewsleft = $renewsallowed - $renewcount;
- return ($renewcount,$renewsallowed,$renewsleft);
+ # $item and $borrower should be calculated
+ my $branchcode = _GetCircControlBranch($item, $borrower);
+
+ my $issuingrule = GetIssuingRule($borrower->{categorycode}, $item->{itype}, $branchcode);
+
+ $renewsallowed = $issuingrule->{'renewalsallowed'};
+ $renewsleft = $renewsallowed - $renewcount;
+ if($renewsleft < 0){ $renewsleft = 0; }
+ return ( $renewcount, $renewsallowed, $renewsleft );
}
=head2 GetIssuingCharges
-($charge, $item_type) = &GetIssuingCharges($itemnumber, $borrowernumber);
+ ($charge, $item_type) = &GetIssuingCharges($itemnumber, $borrowernumber);
Calculate how much it would cost for a given patron to borrow a given
item, including any applicable discounts.
my $q2 = "SELECT rentaldiscount FROM borrowers
LEFT JOIN issuingrules ON borrowers.categorycode = issuingrules.categorycode
WHERE borrowers.borrowernumber = ?
- AND issuingrules.itemtype = ?";
+ AND (issuingrules.itemtype = ? OR issuingrules.itemtype = '*')";
my $sth2 = $dbh->prepare($q2);
$sth2->execute( $borrowernumber, $item_type );
if ( my $data2 = $sth2->fetchrow_hashref ) {
=head2 AddIssuingCharge
-&AddIssuingCharge( $itemno, $borrowernumber, $charge )
+ &AddIssuingCharge( $itemno, $borrowernumber, $charge )
=cut
=head2 GetTransfers
-GetTransfers($itemnumber);
+ GetTransfers($itemnumber);
=cut
=head2 GetTransfersFromTo
-@results = GetTransfersFromTo($frombranch,$tobranch);
+ @results = GetTransfersFromTo($frombranch,$tobranch);
Returns the list of pending transfers between $from and $to branch
=head2 DeleteTransfer
-&DeleteTransfer($itemnumber);
+ &DeleteTransfer($itemnumber);
=cut
=head2 AnonymiseIssueHistory
-$rows = AnonymiseIssueHistory($borrowernumber,$date)
+ $rows = AnonymiseIssueHistory($borrowernumber,$date)
This function write NULL instead of C<$borrowernumber> given on input arg into the table issues.
if C<$borrowernumber> is not set, it will delete the issue history for all borrower older than C<$date>.
=head2 updateWrongTransfer
-$items = updateWrongTransfer($itemNumber,$borrowernumber,$waitingAtLibrary,$FromLibrary);
+ $items = updateWrongTransfer($itemNumber,$borrowernumber,$waitingAtLibrary,$FromLibrary);
This function validate the line of brachtransfer but with the wrong destination (mistake from a librarian ...), and create a new line in branchtransfer from the actual library to the original library of reservation
=head2 UpdateHoldingbranch
-$items = UpdateHoldingbranch($branch,$itmenumber);
+ $items = UpdateHoldingbranch($branch,$itmenumber);
+
Simple methode for updating hodlingbranch in items BDD line
=cut
}
=head2 CheckValidDatedue
- This function does not account for holiday exceptions nor does it handle the 'useDaysMode' syspref .
- To be replaced by CalcDateDue() once C4::Calendar use is tested.
-$newdatedue = CheckValidDatedue($date_due,$itemnumber,$branchcode);
+ $newdatedue = CheckValidDatedue($date_due,$itemnumber,$branchcode);
+
+This function does not account for holiday exceptions nor does it handle the 'useDaysMode' syspref .
+To be replaced by CalcDateDue() once C4::Calendar use is tested.
+
this function validates the loan length against the holidays calendar, and adjusts the due date as per the 'useDaysMode' syspref.
C<$date_due> = returndate calculate with no day check
C<$itemnumber> = itemnumber
C<$branchcode> = location of issue (affected by 'CircControl' syspref)
C<$loanlength> = loan length prior to adjustment
+
=cut
sub CheckValidDatedue {
=head2 CheckRepeatableHolidays
-$countrepeatable = CheckRepeatableHoliday($itemnumber,$week_day,$branchcode);
-this function checks if the date due is a repeatable holiday
+ $countrepeatable = CheckRepeatableHoliday($itemnumber,$week_day,$branchcode);
+
+This function checks if the date due is a repeatable holiday
+
C<$date_due> = returndate calculate with no day check
C<$itemnumber> = itemnumber
C<$branchcode> = localisation of issue
=head2 CheckSpecialHolidays
-$countspecial = CheckSpecialHolidays($years,$month,$day,$itemnumber,$branchcode);
-this function check if the date is a special holiday
+ $countspecial = CheckSpecialHolidays($years,$month,$day,$itemnumber,$branchcode);
+
+This function check if the date is a special holiday
+
C<$years> = the years of datedue
C<$month> = the month of datedue
C<$day> = the day of datedue
=head2 CheckRepeatableSpecialHolidays
-$countspecial = CheckRepeatableSpecialHolidays($month,$day,$itemnumber,$branchcode);
-this function check if the date is a repeatble special holidays
+ $countspecial = CheckRepeatableSpecialHolidays($month,$day,$itemnumber,$branchcode);
+
+This function check if the date is a repeatble special holidays
+
C<$month> = the month of datedue
C<$day> = the day of datedue
C<$itemnumber> = itemnumber
=head2 IsBranchTransferAllowed
-$allowed = IsBranchTransferAllowed( $toBranch, $fromBranch, $code );
+ $allowed = IsBranchTransferAllowed( $toBranch, $fromBranch, $code );
Code is either an itemtype or collection doe depending on the pref BranchTransferLimitsType
=head2 CreateBranchTransferLimit
-CreateBranchTransferLimit( $toBranch, $fromBranch, $code );
+ CreateBranchTransferLimit( $toBranch, $fromBranch, $code );
$code is either itemtype or collection code depending on what the pref BranchTransferLimitsType is set to.
=head2 DeleteBranchTransferLimits
-DeleteBranchTransferLimits();
+ DeleteBranchTransferLimits();
=cut
=head1 AUTHOR
-Koha Developement team <info@koha.org>
+Koha Development Team <http://koha-community.org/>
=cut