View | Details | Raw Unified | Return to bug 9351
Collapse All | Expand All

(-)a/C4/Circulation.pm (-32 / +37 lines)
Lines 693-702 sub CanBookBeIssued { Link Here
693
    my %issuingimpossible;    # filled with problems that causes the issue to be IMPOSSIBLE
693
    my %issuingimpossible;    # filled with problems that causes the issue to be IMPOSSIBLE
694
    my %alerts;               # filled with messages that shouldn't stop issuing, but the librarian should be aware of.
694
    my %alerts;               # filled with messages that shouldn't stop issuing, but the librarian should be aware of.
695
695
696
    my $item = GetItem(GetItemnumberFromBarcode( $barcode ));
696
    my $item = GetItem(undef, $barcode);
697
    my $issue = GetItemIssue($item->{itemnumber});
698
	my $biblioitem = GetBiblioItemData($item->{biblioitemnumber});
699
	$item->{'itemtype'}=$item->{'itype'}; 
700
    my $dbh             = C4::Context->dbh;
697
    my $dbh             = C4::Context->dbh;
701
698
702
    # MANDATORY CHECKS - unless item exists, nothing else matters
699
    # MANDATORY CHECKS - unless item exists, nothing else matters
Lines 705-710 sub CanBookBeIssued { Link Here
705
    }
702
    }
706
	return ( \%issuingimpossible, \%needsconfirmation ) if %issuingimpossible;
703
	return ( \%issuingimpossible, \%needsconfirmation ) if %issuingimpossible;
707
704
705
    my $issue  = GetItemIssue($item->{'itemnumber'});
706
    my $biblio = GetBiblioItemData($item->{'biblioitemnumber'});
707
    my $itype  = ( C4::Context->preference('item-level_itypes') ) ? $item->{'itype'} : $biblio->{'itemtype'};
708
708
    #
709
    #
709
    # DUE DATE is OK ? -- should already have checked.
710
    # DUE DATE is OK ? -- should already have checked.
710
    #
711
    #
Lines 716-722 sub CanBookBeIssued { Link Here
716
        my $issuedate = $now->clone();
717
        my $issuedate = $now->clone();
717
718
718
        my $branch = _GetCircControlBranch($item,$borrower);
719
        my $branch = _GetCircControlBranch($item,$borrower);
719
        my $itype = ( C4::Context->preference('item-level_itypes') ) ? $item->{'itype'} : $biblioitem->{'itemtype'};
720
        $duedate = CalcDateDue( $issuedate, $itype, $branch, $borrower );
720
        $duedate = CalcDateDue( $issuedate, $itype, $branch, $borrower );
721
721
722
        # Offline circ calls AddIssue directly, doesn't run through here
722
        # Offline circ calls AddIssue directly, doesn't run through here
Lines 737-743 sub CanBookBeIssued { Link Here
737
    #
737
    #
738
    if ( $borrower->{'category_type'} eq 'X' && (  $item->{barcode}  )) { 
738
    if ( $borrower->{'category_type'} eq 'X' && (  $item->{barcode}  )) { 
739
    	# stats only borrower -- add entry to statistics table, and return issuingimpossible{STATS} = 1  .
739
    	# stats only borrower -- add entry to statistics table, and return issuingimpossible{STATS} = 1  .
740
        &UpdateStats(C4::Context->userenv->{'branch'},'localuse','','',$item->{'itemnumber'},$item->{'itemtype'},$borrower->{'borrowernumber'}, undef, $item->{'ccode'});
740
        &UpdateStats(C4::Context->userenv->{'branch'},'localuse','','',$item->{'itemnumber'},$itype,$borrower->{'borrowernumber'}, undef, $item->{'ccode'});
741
        ModDateLastSeen( $item->{'itemnumber'} );
741
        ModDateLastSeen( $item->{'itemnumber'} );
742
        return( { STATS => 1 }, {});
742
        return( { STATS => 1 }, {});
743
    }
743
    }
Lines 863-875 sub CanBookBeIssued { Link Here
863
                }
863
                }
864
            }
864
            }
865
        }
865
        }
866
        elsif ($biblioitem->{'notforloan'} == 1){
866
        elsif ($biblio->{'notforloan'} == 1){
867
            if (!C4::Context->preference("AllowNotForLoanOverride")) {
867
            if (!C4::Context->preference("AllowNotForLoanOverride")) {
868
                $issuingimpossible{NOT_FOR_LOAN} = 1;
868
                $issuingimpossible{NOT_FOR_LOAN} = 1;
869
                $issuingimpossible{itemtype_notforloan} = $biblioitem->{'itemtype'};
869
                $issuingimpossible{itemtype_notforloan} = $biblio->{'itemtype'};
870
            } else {
870
            } else {
871
                $needsconfirmation{NOT_FOR_LOAN_FORCING} = 1;
871
                $needsconfirmation{NOT_FOR_LOAN_FORCING} = 1;
872
                $needsconfirmation{itemtype_notforloan} = $biblioitem->{'itemtype'};
872
                $needsconfirmation{itemtype_notforloan} = $biblio->{'itemtype'};
873
            }
873
            }
874
        }
874
        }
875
    }
875
    }
Lines 968-974 sub CanBookBeIssued { Link Here
968
968
969
    # get $marker from preferences. Could be something like "FSK|PEGI|Alter|Age:"
969
    # get $marker from preferences. Could be something like "FSK|PEGI|Alter|Age:"
970
    my $markers = C4::Context->preference('AgeRestrictionMarker' );
970
    my $markers = C4::Context->preference('AgeRestrictionMarker' );
971
    my $bibvalues = $biblioitem->{'agerestriction'};
971
    my $bibvalues = $biblio->{'agerestriction'};
972
    if (($markers)&&($bibvalues))
972
    if (($markers)&&($bibvalues))
973
    {
973
    {
974
        # Split $bibvalues to something like FSK 16 or PEGI 6
974
        # Split $bibvalues to something like FSK 16 or PEGI 6
Lines 1194-1200 sub AddIssue { Link Here
1194
		my $actualissue = GetItemIssue( $item->{itemnumber});
1194
		my $actualissue = GetItemIssue( $item->{itemnumber});
1195
		
1195
		
1196
		# get biblioinformation for this item
1196
		# get biblioinformation for this item
1197
		my $biblio = GetBiblioFromItemNumber($item->{itemnumber});
1197
        my $biblio = GetBiblioItemData($item->{'biblioitemnumber'});
1198
        my $itype = ( C4::Context->preference('item-level_itypes') ) ? $item->{'itype'} : $biblio->{'itemtype'};
1198
		
1199
		
1199
		#
1200
		#
1200
		# check if we just renew the issue.
1201
		# check if we just renew the issue.
Lines 1243-1251 sub AddIssue { Link Here
1243
                VALUES (?,?,?,?,?)"
1244
                VALUES (?,?,?,?,?)"
1244
          );
1245
          );
1245
        unless ($datedue) {
1246
        unless ($datedue) {
1246
            my $itype = ( C4::Context->preference('item-level_itypes') ) ? $biblio->{'itype'} : $biblio->{'itemtype'};
1247
            $datedue = CalcDateDue( $issuedate, $itype, $branch, $borrower );
1247
            $datedue = CalcDateDue( $issuedate, $itype, $branch, $borrower );
1248
1249
        }
1248
        }
1250
        $datedue->truncate( to => 'minute');
1249
        $datedue->truncate( to => 'minute');
1251
        $sth->execute(
1250
        $sth->execute(
Lines 1279-1285 sub AddIssue { Link Here
1279
        ModDateLastSeen( $item->{'itemnumber'} );
1278
        ModDateLastSeen( $item->{'itemnumber'} );
1280
1279
1281
        # If it costs to borrow this book, charge it to the patron's account.
1280
        # If it costs to borrow this book, charge it to the patron's account.
1282
        my ( $charge, $itemtype ) = GetIssuingCharges(
1281
        my ( $charge, $charge_itemtype ) = GetIssuingCharges(
1283
            $item->{'itemnumber'},
1282
            $item->{'itemnumber'},
1284
            $borrower->{'borrowernumber'}
1283
            $borrower->{'borrowernumber'}
1285
        );
1284
        );
Lines 1296-1302 sub AddIssue { Link Here
1296
            C4::Context->userenv->{'branch'},
1295
            C4::Context->userenv->{'branch'},
1297
            'issue', $charge,
1296
            'issue', $charge,
1298
            ($sipmode ? "SIP-$sipmode" : ''), $item->{'itemnumber'},
1297
            ($sipmode ? "SIP-$sipmode" : ''), $item->{'itemnumber'},
1299
            $item->{'itype'}, $borrower->{'borrowernumber'}, undef, $item->{'ccode'}
1298
            $itype, $borrower->{'borrowernumber'}, undef, $item->{'ccode'}
1300
        );
1299
        );
1301
1300
1302
        # Send a checkout slip.
1301
        # Send a checkout slip.
Lines 1304-1310 sub AddIssue { Link Here
1304
        my %conditions = (
1303
        my %conditions = (
1305
            branchcode   => $branch,
1304
            branchcode   => $branch,
1306
            categorycode => $borrower->{categorycode},
1305
            categorycode => $borrower->{categorycode},
1307
            item_type    => $item->{itype},
1306
            item_type    => $itype,
1308
            notification => 'CHECKOUT',
1307
            notification => 'CHECKOUT',
1309
        );
1308
        );
1310
        if ($circulation_alert->is_enabled_for(\%conditions)) {
1309
        if ($circulation_alert->is_enabled_for(\%conditions)) {
Lines 1317-1323 sub AddIssue { Link Here
1317
        }
1316
        }
1318
    }
1317
    }
1319
1318
1320
    logaction("CIRCULATION", "ISSUE", $borrower->{'borrowernumber'}, $biblio->{'itemnumber'})
1319
    logaction("CIRCULATION", "ISSUE", $borrower->{'borrowernumber'}, $item->{'itemnumber'})
1321
        if C4::Context->preference("IssueLog");
1320
        if C4::Context->preference("IssueLog");
1322
  }
1321
  }
1323
  return ($datedue);	# not necessarily the same as when it came in!
1322
  return ($datedue);	# not necessarily the same as when it came in!
Lines 1708-1714 sub AddReturn { Link Here
1708
    $branch = C4::Context->userenv->{'branch'} unless $branch;  # we trust userenv to be a safe fallback/default
1707
    $branch = C4::Context->userenv->{'branch'} unless $branch;  # we trust userenv to be a safe fallback/default
1709
    my $messages;
1708
    my $messages;
1710
    my $borrower;
1709
    my $borrower;
1711
    my $biblio;
1712
    my $doreturn       = 1;
1710
    my $doreturn       = 1;
1713
    my $validTransfert = 0;
1711
    my $validTransfert = 0;
1714
    my $stat_type = 'return';    
1712
    my $stat_type = 'return';    
Lines 1739-1745 sub AddReturn { Link Here
1739
    my $item = GetItem($itemnumber) or die "GetItem($itemnumber) failed";
1737
    my $item = GetItem($itemnumber) or die "GetItem($itemnumber) failed";
1740
        # full item data, but no borrowernumber or checkout info (no issue)
1738
        # full item data, but no borrowernumber or checkout info (no issue)
1741
        # we know GetItem should work because GetItemnumberFromBarcode worked
1739
        # we know GetItem should work because GetItemnumberFromBarcode worked
1742
    my $hbr      = GetBranchItemRule($item->{'homebranch'}, $item->{'itype'})->{'returnbranch'} || "homebranch";
1740
1741
    # get biblioinformation for this item
1742
    my $biblio = GetBiblioItemData($item->{'biblioitemnumber'});
1743
    my $itype = ( C4::Context->preference('item-level_itypes') ) ? $item->{'itype'} : $biblio->{'itemtype'};
1744
        
1745
    my $hbr      = GetBranchItemRule($item->{'homebranch'}, $itype)->{'returnbranch'} || "homebranch";
1743
        # get the proper branch to which to return the item
1746
        # get the proper branch to which to return the item
1744
    $hbr = $item->{$hbr} || $branch ;
1747
    $hbr = $item->{$hbr} || $branch ;
1745
        # if $hbr was "noreturn" or any other non-item table value, then it should 'float' (i.e. stay at this branch)
1748
        # if $hbr was "noreturn" or any other non-item table value, then it should 'float' (i.e. stay at this branch)
Lines 1887-1893 sub AddReturn { Link Here
1887
    UpdateStats(
1890
    UpdateStats(
1888
        $branch, $stat_type, '0', '',
1891
        $branch, $stat_type, '0', '',
1889
        $item->{'itemnumber'},
1892
        $item->{'itemnumber'},
1890
        $biblio->{'itemtype'},
1893
        $itype,
1891
        $borrowernumber, undef, $item->{'ccode'}
1894
        $borrowernumber, undef, $item->{'ccode'}
1892
    );
1895
    );
1893
1896
Lines 1896-1902 sub AddReturn { Link Here
1896
    my %conditions = (
1899
    my %conditions = (
1897
        branchcode   => $branch,
1900
        branchcode   => $branch,
1898
        categorycode => $borrower->{categorycode},
1901
        categorycode => $borrower->{categorycode},
1899
        item_type    => $item->{itype},
1902
        item_type    => $itype,
1900
        notification => 'CHECKIN',
1903
        notification => 'CHECKIN',
1901
    );
1904
    );
1902
    if ($doreturn && $circulation_alert->is_enabled_for(\%conditions)) {
1905
    if ($doreturn && $circulation_alert->is_enabled_for(\%conditions)) {
Lines 2466-2478 sub CanBookBeRenewed { Link Here
2466
2469
2467
    my $borrower    = C4::Members::GetMemberDetails( $borrowernumber, 0 )   or return;
2470
    my $borrower    = C4::Members::GetMemberDetails( $borrowernumber, 0 )   or return;
2468
    my $item        = GetItem($itemnumber)                                  or return;
2471
    my $item        = GetItem($itemnumber)                                  or return;
2469
    my $itemissue   = GetItemIssue($itemnumber)                             or return;
2472
    my $issue       = GetItemIssue($itemnumber)                             or return;
2473
    my $biblio      = GetBiblioItemData($item->{'biblioitemnumber'});
2474
    my $itype       = ( C4::Context->preference('item-level_itypes') ) ? $item->{'itype'} : $biblio->{'itemtype'};
2470
2475
2471
    my $branchcode  = _GetCircControlBranch($item, $borrower);
2476
    my $branchcode  = _GetCircControlBranch($item, $borrower);
2472
2477
2473
    my $issuingrule = GetIssuingRule($borrower->{categorycode}, $item->{itype}, $branchcode);
2478
    my $issuingrule = GetIssuingRule($borrower->{categorycode}, $itype, $branchcode);
2474
2479
2475
    if ( ( $issuingrule->{renewalsallowed} > $itemissue->{renewals} ) || $override_limit ) {
2480
    if ( ( $issuingrule->{renewalsallowed} > $issue->{renewals} ) || $override_limit ) {
2476
        $renewokay = 1;
2481
        $renewokay = 1;
2477
    } else {
2482
    } else {
2478
        $error = "too_many";
2483
        $error = "too_many";
Lines 2517-2524 sub AddRenewal { Link Here
2517
    my $branch          = shift;
2522
    my $branch          = shift;
2518
    my $datedue         = shift;
2523
    my $datedue         = shift;
2519
    my $lastreneweddate = shift || DateTime->now(time_zone => C4::Context->tz)->ymd();
2524
    my $lastreneweddate = shift || DateTime->now(time_zone => C4::Context->tz)->ymd();
2525
2520
    my $item   = GetItem($itemnumber) or return;
2526
    my $item   = GetItem($itemnumber) or return;
2521
    my $biblio = GetBiblioFromItemNumber($itemnumber) or return;
2527
    my $biblio = GetBiblioItemData($item->{'biblioitemnumber'}) or return;
2528
    my $itype = (C4::Context->preference('item-level_itypes')) ? $item->{'itype'} : $biblio->{'itemtype'};
2522
2529
2523
    my $dbh = C4::Context->dbh;
2530
    my $dbh = C4::Context->dbh;
2524
    # Find the issues record for this book
2531
    # Find the issues record for this book
Lines 2540-2551 sub AddRenewal { Link Here
2540
    unless ($datedue) {
2547
    unless ($datedue) {
2541
2548
2542
        my $borrower = C4::Members::GetMember( borrowernumber => $borrowernumber ) or return;
2549
        my $borrower = C4::Members::GetMember( borrowernumber => $borrowernumber ) or return;
2543
        my $itemtype = (C4::Context->preference('item-level_itypes')) ? $biblio->{'itype'} : $biblio->{'itemtype'};
2544
2550
2545
        $datedue = (C4::Context->preference('RenewalPeriodBase') eq 'date_due') ?
2551
        $datedue = (C4::Context->preference('RenewalPeriodBase') eq 'date_due') ?
2546
                                        dt_from_string( $issuedata->{date_due} ) :
2552
                                        dt_from_string( $issuedata->{date_due} ) :
2547
                                        DateTime->now( time_zone => C4::Context->tz());
2553
                                        DateTime->now( time_zone => C4::Context->tz());
2548
        $datedue =  CalcDateDue($datedue, $itemtype, $issuedata->{'branchcode'}, $borrower, 'is a renewal');
2554
        $datedue =  CalcDateDue($datedue, $itype, $issuedata->{'branchcode'}, $borrower, 'is a renewal');
2549
    }
2555
    }
2550
2556
2551
    # Update the issues record to have the new due date, and a new count
2557
    # Update the issues record to have the new due date, and a new count
Lines 2560-2567 sub AddRenewal { Link Here
2560
    $sth->finish;
2566
    $sth->finish;
2561
2567
2562
    # Update the renewal count on the item, and tell zebra to reindex
2568
    # Update the renewal count on the item, and tell zebra to reindex
2563
    $renews = $biblio->{'renewals'} + 1;
2569
    $renews = $item->{'renewals'} + 1;
2564
    ModItem({ renewals => $renews, onloan => $datedue->strftime('%Y-%m-%d %H:%M')}, $biblio->{'biblionumber'}, $itemnumber);
2570
    ModItem({ renewals => $renews, onloan => $datedue->strftime('%Y-%m-%d %H:%M')}, $item->{'biblionumber'}, $itemnumber);
2565
2571
2566
    # Charge a new rental fee, if applicable?
2572
    # Charge a new rental fee, if applicable?
2567
    my ( $charge, $type ) = GetIssuingCharges( $itemnumber, $borrowernumber );
2573
    my ( $charge, $type ) = GetIssuingCharges( $itemnumber, $borrowernumber );
Lines 2588-2594 sub AddRenewal { Link Here
2588
	my %conditions = (
2594
	my %conditions = (
2589
		branchcode   => $branch,
2595
		branchcode   => $branch,
2590
		categorycode => $borrower->{categorycode},
2596
		categorycode => $borrower->{categorycode},
2591
		item_type    => $item->{itype},
2597
		item_type    => $itype,
2592
		notification => 'CHECKOUT',
2598
		notification => 'CHECKOUT',
2593
	);
2599
	);
2594
	if ($circulation_alert->is_enabled_for(\%conditions)) {
2600
	if ($circulation_alert->is_enabled_for(\%conditions)) {
Lines 2602-2608 sub AddRenewal { Link Here
2602
    }
2608
    }
2603
2609
2604
    # Log the renewal
2610
    # Log the renewal
2605
    UpdateStats( $branch, 'renew', $charge, '', $itemnumber, $item->{itype}, $borrowernumber, undef, $item->{'ccode'});
2611
    UpdateStats( $branch, 'renew', $charge, '', $itemnumber, $itype, $borrowernumber, undef, $item->{'ccode'});
2606
	return $datedue;
2612
	return $datedue;
2607
}
2613
}
2608
2614
2609
- 

Return to bug 9351