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

(-)a/reserve/request.pl (-85 / +84 lines)
Lines 464-569 foreach my $biblionumber (@biblionumbers) { Link Here
464
        # it's complicated logic to analyse.
464
        # it's complicated logic to analyse.
465
        # (before this loop was inside that sub loop so it was O(n^2) )
465
        # (before this loop was inside that sub loop so it was O(n^2) )
466
        my $items_any_available;
466
        my $items_any_available;
467
        $items_any_available = ItemsAnyAvailableAndNotRestricted( { biblionumber => $biblioitem->{biblionumber}, patron => $patron })
467
        if ( $patron ) {
468
            if $patron;
468
            $items_any_available = ItemsAnyAvailableAndNotRestricted( { biblionumber => $biblioitem->{biblionumber}, patron => $patron });
469
469
470
        foreach my $itemnumber ( @{ $itemnumbers_of_biblioitem{$biblioitemnumber} } )    {
470
            foreach my $itemnumber ( @{ $itemnumbers_of_biblioitem{$biblioitemnumber} } )    {
471
            my $item = $iteminfos_of->{$itemnumber};
471
                my $item = $iteminfos_of->{$itemnumber};
472
            my $do_check;
472
                my $do_check;
473
            if ( $patron ) {
473
                if ( $patron ) {
474
                $do_check = $patron->do_check_for_previous_checkout($item) if $wants_check;
474
                    $do_check = $patron->do_check_for_previous_checkout($item) if $wants_check;
475
                if ( $do_check && $wants_check ) {
475
                    if ( $do_check && $wants_check ) {
476
                    $item->{checked_previously} = $do_check;
476
                        $item->{checked_previously} = $do_check;
477
                    if ( $multi_hold ) {
477
                        if ( $multi_hold ) {
478
                        $biblioloopiter{checked_previously} = $do_check;
478
                            $biblioloopiter{checked_previously} = $do_check;
479
                    } else {
479
                        } else {
480
                        $template->param( checked_previously => $do_check );
480
                            $template->param( checked_previously => $do_check );
481
                        }
481
                    }
482
                    }
482
                }
483
                }
483
            }
484
                $item->{force_hold_level} = $force_hold_level;
484
            $item->{force_hold_level} = $force_hold_level;
485
485
486
            unless (C4::Context->preference('item-level_itypes')) {
486
                unless (C4::Context->preference('item-level_itypes')) {
487
                $item->{itype} = $biblioitem->{itemtype};
487
                    $item->{itype} = $biblioitem->{itemtype};
488
            }
488
                }
489
489
490
            $item->{itypename} = $itemtypes->{ $item->{itype} }{description};
490
                $item->{itypename} = $itemtypes->{ $item->{itype} }{description};
491
            $item->{imageurl} = getitemtypeimagelocation( 'intranet', $itemtypes->{ $item->{itype} }{imageurl} );
491
                $item->{imageurl} = getitemtypeimagelocation( 'intranet', $itemtypes->{ $item->{itype} }{imageurl} );
492
            $item->{homebranch} = $item->{homebranch};
492
                $item->{homebranch} = $item->{homebranch};
493
493
494
            # if the holdingbranch is different than the homebranch, we show the
494
                # if the holdingbranch is different than the homebranch, we show the
495
            # holdingbranch of the document too
495
                # holdingbranch of the document too
496
            if ( $item->{homebranch} ne $item->{holdingbranch} ) {
496
                if ( $item->{homebranch} ne $item->{holdingbranch} ) {
497
                $item->{holdingbranch} = $item->{holdingbranch};
497
                    $item->{holdingbranch} = $item->{holdingbranch};
498
            }
498
                }
499
499
500
            if($item->{biblionumber} ne $biblionumber){
500
                if($item->{biblionumber} ne $biblionumber){
501
                $item->{hostitemsflag} = 1;
501
                    $item->{hostitemsflag} = 1;
502
                $item->{hosttitle} = Koha::Biblios->find( $item->{biblionumber} )->title;
502
                    $item->{hosttitle} = Koha::Biblios->find( $item->{biblionumber} )->title;
503
            }
503
                }
504
504
505
            # if the item is currently on loan, we display its return date and
505
                # if the item is currently on loan, we display its return date and
506
            # change the background color
506
                # change the background color
507
            my $issue = Koha::Checkouts->find( { itemnumber => $itemnumber } );
507
                my $issue = Koha::Checkouts->find( { itemnumber => $itemnumber } );
508
            if ( $issue ) {
508
                if ( $issue ) {
509
                $item->{date_due} = $issue->date_due;
509
                    $item->{date_due} = $issue->date_due;
510
                $item->{backgroundcolor} = 'onloan';
510
                    $item->{backgroundcolor} = 'onloan';
511
            }
511
                }
512
512
513
            # checking reserve
513
                # checking reserve
514
            my $item_object = Koha::Items->find( $itemnumber );
514
                my $item_object = Koha::Items->find( $itemnumber );
515
            my $holds = $item_object->current_holds;
515
                my $holds = $item_object->current_holds;
516
            if ( my $first_hold = $holds->next ) {
516
                if ( my $first_hold = $holds->next ) {
517
                my $p = Koha::Patrons->find( $first_hold->borrowernumber );
517
                    my $p = Koha::Patrons->find( $first_hold->borrowernumber );
518
518
519
                $item->{backgroundcolor} = 'reserved';
519
                    $item->{backgroundcolor} = 'reserved';
520
                $item->{reservedate}     = output_pref({ dt => dt_from_string( $first_hold->reservedate ), dateonly => 1 }); # FIXME Should be formatted in the template
520
                    $item->{reservedate}     = output_pref({ dt => dt_from_string( $first_hold->reservedate ), dateonly => 1 }); # FIXME Should be formatted in the template
521
                $item->{ReservedFor}     = $p;
521
                    $item->{ReservedFor}     = $p;
522
                $item->{ExpectedAtLibrary}     = $first_hold->branchcode;
522
                    $item->{ExpectedAtLibrary}     = $first_hold->branchcode;
523
                $item->{waitingdate} = $first_hold->waitingdate;
523
                    $item->{waitingdate} = $first_hold->waitingdate;
524
            }
524
                }
525
525
526
            # Management of the notforloan document
526
                # Management of the notforloan document
527
            if ( $item->{notforloan} ) {
527
                if ( $item->{notforloan} ) {
528
                $item->{backgroundcolor} = 'other';
528
                    $item->{backgroundcolor} = 'other';
529
            }
529
                }
530
530
531
            # Management of lost or long overdue items
531
                # Management of lost or long overdue items
532
            if ( $item->{itemlost} ) {
532
                if ( $item->{itemlost} ) {
533
                $item->{backgroundcolor} = 'other';
533
                    $item->{backgroundcolor} = 'other';
534
                if ($logged_in_patron->category->hidelostitems && !$showallitems) {
534
                    if ($logged_in_patron->category->hidelostitems && !$showallitems) {
535
                    $item->{hide} = 1;
535
                        $item->{hide} = 1;
536
                    $hiddencount++;
536
                        $hiddencount++;
537
                    }
537
                }
538
                }
538
            }
539
539
540
            # Check the transit status
540
                # Check the transit status
541
            my ( $transfertwhen, $transfertfrom, $transfertto ) =
541
                my ( $transfertwhen, $transfertfrom, $transfertto ) =
542
              GetTransfers($itemnumber);
542
                  GetTransfers($itemnumber);
543
543
544
            if ( defined $transfertwhen && $transfertwhen ne '' ) {
544
                if ( defined $transfertwhen && $transfertwhen ne '' ) {
545
                $item->{transfertwhen} = output_pref({ dt => dt_from_string( $transfertwhen ), dateonly => 1 });
545
                    $item->{transfertwhen} = output_pref({ dt => dt_from_string( $transfertwhen ), dateonly => 1 });
546
                $item->{transfertfrom} = $transfertfrom;
546
                    $item->{transfertfrom} = $transfertfrom;
547
                $item->{transfertto} = $transfertto;
547
                    $item->{transfertto} = $transfertto;
548
                $item->{nocancel} = 1;
548
                    $item->{nocancel} = 1;
549
            }
549
                }
550
550
551
            # If there is no loan, return and transfer, we show a checkbox.
551
                # If there is no loan, return and transfer, we show a checkbox.
552
            $item->{notforloan} ||= 0;
552
                $item->{notforloan} ||= 0;
553
553
554
            # if independent branches is on we need to check if the person can reserve
554
                # if independent branches is on we need to check if the person can reserve
555
            # for branches they arent logged in to
555
                # for branches they arent logged in to
556
            if ( C4::Context->preference("IndependentBranches") ) {
556
                if ( C4::Context->preference("IndependentBranches") ) {
557
                if (! C4::Context->preference("canreservefromotherbranches")){
557
                    if (! C4::Context->preference("canreservefromotherbranches")){
558
                    # can't reserve items so need to check if item homebranch and userenv branch match if not we can't reserve
558
                        # can't reserve items so need to check if item homebranch and userenv branch match if not we can't reserve
559
                    my $userenv = C4::Context->userenv;
559
                        my $userenv = C4::Context->userenv;
560
                    unless ( C4::Context->IsSuperLibrarian ) {
560
                        unless ( C4::Context->IsSuperLibrarian ) {
561
                        $item->{cantreserve} = 1 if ( $item->{homebranch} ne $userenv->{branch} );
561
                            $item->{cantreserve} = 1 if ( $item->{homebranch} ne $userenv->{branch} );
562
                        }
562
                    }
563
                    }
563
                }
564
                }
564
            }
565
565
566
            if ( $patron ) {
567
                my $patron_unblessed = $patron->unblessed;
566
                my $patron_unblessed = $patron->unblessed;
568
                my $branch = C4::Circulation::_GetCircControlBranch($item, $patron_unblessed);
567
                my $branch = C4::Circulation::_GetCircControlBranch($item, $patron_unblessed);
569
568
Lines 623-631 foreach my $biblionumber (@biblionumbers) { Link Here
623
                if ($item->{ccode}) {
622
                if ($item->{ccode}) {
624
                    $itemdata_ccode = 1;
623
                    $itemdata_ccode = 1;
625
                }
624
                }
626
            }
627
625
628
            push @{ $biblioitem->{itemloop} }, $item;
626
            push @{ $biblioitem->{itemloop} }, $item;
627
628
            }
629
        }
629
        }
630
630
631
        # While we can't override an alreay held item, we should be able to override the others
631
        # While we can't override an alreay held item, we should be able to override the others
632
- 

Return to bug 29043