&GetIssuingCharges
&GetIssuingRule
&GetBranchBorrowerCircRule
+ &GetBranchItemRule
&GetBiblioIssues
&AnonymiseIssueHistory
);
if ( $borrower->{'dateexpiry'} eq '0000-00-00') {
$issuingimpossible{EXPIRED} = 1;
} else {
- my @expirydate= split /-/,$borrower->{'dateexpiry'};
+ my @expirydate= split (/-/,$borrower->{'dateexpiry'});
if($expirydate[0]==0 || $expirydate[1]==0|| $expirydate[2]==0 ||
Date_to_Days(Today) > Date_to_Days( @expirydate )) {
$issuingimpossible{EXPIRED} = 1;
maxissueqty => undef,
};
}
+=head2 GetBranchItemRule
+
+=over 4
+
+my $branch_item_rule = GetBranchItemRule($branchcode, $itemtype);
+
+=back
+
+Retrieves circulation rule attributes that apply to the given
+branch and item type, regardless of patron category.
+
+The return value is a hashref containing the following key:
+
+holdallowed => Hold policy for this branch and itemtype. Possible values:
+ 0: No holds allowed.
+ 1: Holds allowed only by patrons that have the same homebranch as the item.
+ 2: Holds allowed from any patron.
+
+This searches branchitemrules in the following order:
+
+ * Same branchcode and itemtype
+ * Same branchcode, itemtype '*'
+ * branchcode '*', same itemtype
+ * branchcode and itemtype '*'
+
+Neither C<$branchcode> nor C<$categorycode> should be '*'.
+
+=cut
+
+sub GetBranchItemRule {
+ my ( $branchcode, $itemtype ) = @_;
+ my $dbh = C4::Context->dbh();
+ my $result = {};
+
+ my @attempts = (
+ ['SELECT holdallowed
+ FROM branch_item_rules
+ WHERE branchcode = ?
+ AND itemtype = ?', $branchcode, $itemtype],
+ ['SELECT holdallowed
+ FROM default_branch_circ_rules
+ WHERE branchcode = ?', $branchcode],
+ ['SELECT holdallowed
+ FROM default_branch_item_rules
+ WHERE itemtype = ?', $itemtype],
+ ['SELECT holdallowed
+ FROM default_circ_rules'],
+ );
+
+ foreach my $attempt (@attempts) {
+ my ($query, @bind_params) = @{$attempt};
+
+ # Since branch/category and branch/itemtype use the same per-branch
+ # defaults tables, we have to check that the key we want is set, not
+ # just that a row was returned
+ return $result if ( defined( $result->{'holdallowed'} = $dbh->selectrow_array( $query, {}, @bind_params ) ) );
+ }
+
+ # built-in default circulation rule
+ return {
+ holdallowed => 2,
+ };
+}
+
=head2 AddReturn
$messages->{'BadBarcode'} = $barcode;
$doreturn = 0;
} else {
+ $iteminformation->{'itemnumber'} = $itemnumber;
# find the borrower
if ( not $iteminformation->{borrowernumber} ) {
$messages->{'NotIssued'} = $barcode;
$iteminformation->{'itemlost'} = $curr_iteminfo->{'itemlost'};
# check if the book is in a permanent collection....
- my $hbr = $iteminformation->{C4::Context->preference("HomeOrHoldingBranch")};
+ my $hbr = C4::Context->preference("HomeOrHoldingBranchReturn") || "homebranch";
+ $hbr = $iteminformation->{$hbr};
my $branches = GetBranches();
# FIXME -- This 'PE' attribute is largely undocumented. afaict, there's no user interface that reflects this functionality.
if ( $hbr && $branches->{$hbr}->{'PE'} ) {
$doreturn = 0;
}
-
+ # We know the document was just seen
+ ModDateLastSeen( $iteminformation->{'itemnumber'} );
+
# new op dev : if the book returned in an other branch update the holding branch
# update issues, thereby returning book (should push this out into another subroutine
$borrower = C4::Members::GetMemberDetails( $iteminformation->{borrowernumber}, 0 );
# case of a return of document (deal with issues and holdingbranch)
-
+
if ($doreturn) {
my $circControlBranch = _GetCircControlBranch($iteminformation,$borrower);
if($dropbox) {
# We update the holdingbranch from circControlBranch variable
UpdateHoldingbranch($branch,$iteminformation->{'itemnumber'});
$iteminformation->{'holdingbranch'} = $branch;
-
-
- ModDateLastSeen( $iteminformation->{'itemnumber'} );
+
ModItem({ onloan => undef }, $biblio->{'biblionumber'}, $iteminformation->{'itemnumber'});
if ($iteminformation->{borrowernumber}){
#adding message if holdingbranch is non equal a userenv branch to return the document to homebranch
#we check, if we don't have reserv or transfert for this document, if not, return it to homebranch .
-
- if (($doreturn or $messages->{'NotIssued'}) and ($branch ne $iteminformation->{$hbr}) and not $messages->{'WrongTransfer'} and ($validTransfert ne 1) and ($reserveDone ne 1) ){
+ if (($doreturn or $messages->{'NotIssued'})
+ and ($branch ne $hbr)
+ and not $messages->{'WrongTransfer'}
+ and ($validTransfert ne 1)
+ and ($reserveDone ne 1) ){
if (C4::Context->preference("AutomaticItemReturn") == 1) {
ModItemTransfer($iteminformation->{'itemnumber'}, $branch, $iteminformation->{$hbr});
$messages->{'WasTransfered'} = 1;
my ($startdate,$loanlength,$branch,$borrower) = @_;
my $datedue;
- if(C4::Context->preference('useDaysMode') eq 'Days') { # ignoring calendar
- my $timedue = time + ($loanlength) * 86400;
- #FIXME - assumes now even though we take a startdate
- my @datearr = localtime($timedue);
- $datedue = C4::Dates->new( sprintf("%04d-%02d-%02d", 1900 + $datearr[5], $datearr[4] + 1, $datearr[3]), 'iso');
- } else {
- my $calendar = C4::Calendar->new( branchcode => $branch );
- $datedue = $calendar->addDate($startdate, $loanlength);
- }
+ my $calendar = C4::Calendar->new( branchcode => $branch );
+ $datedue = $calendar->addDate($startdate, $loanlength);
# if ReturnBeforeExpiry ON the datedue can't be after borrower expirydate
if ( C4::Context->preference('ReturnBeforeExpiry') && $datedue->output('iso') gt $borrower->{dateexpiry} ) {