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

(-)a/C4/Circulation.pm (-4 / +2 lines)
Lines 2918-2927 sub MarkIssueReturned { Link Here
2918
                }
2918
                }
2919
            );
2919
            );
2920
2920
2921
            if ( C4::Context->preference('StoreLastBorrower') ) {
2921
            my $item = Koha::Items->find($itemnumber);
2922
                my $item = Koha::Items->find($itemnumber);
2922
            $item->last_returned_by( $patron->borrowernumber )->store;
2923
                $item->last_returned_by( $patron->borrowernumber )->store;
2924
            }
2925
2923
2926
            # Possibly remove any OVERDUES related debarment
2924
            # Possibly remove any OVERDUES related debarment
2927
            my $overdue_restrictions = $patron->restrictions->search( { type => 'OVERDUES' } );
2925
            my $overdue_restrictions = $patron->restrictions->search( { type => 'OVERDUES' } );
(-)a/Koha/Item.pm (-2 / +58 lines)
Lines 927-932 sub get_transfers { Link Here
927
    return Koha::Item::Transfers->_new_from_dbic($transfers_rs);
927
    return Koha::Item::Transfers->_new_from_dbic($transfers_rs);
928
}
928
}
929
929
930
=head3 last_returned_by_all
931
932
Returns all patrons who have returned this item, ordered by most recent first.
933
934
=cut
935
936
sub last_returned_by_all {
937
    my ($self) = @_;
938
939
    my $max_stored_borrowers = C4::Context->preference('StoreLastBorrower') || 0;
940
941
    my @borrowers = $self->_result->last_returned_by(
942
        {},
943
        {
944
            order_by => { -desc => 'created_on' },
945
            rows     => $max_stored_borrowers,
946
        }
947
    );
948
949
    return map { Koha::Patron->_new_from_dbic( $_->borrowernumber ) } @borrowers;
950
}
951
930
=head3 last_returned_by
952
=head3 last_returned_by
931
953
932
Gets and sets the last patron to return an item.
954
Gets and sets the last patron to return an item.
Lines 941-953 my $patron = $item->last_returned_by(); Link Here
941
963
942
sub last_returned_by {
964
sub last_returned_by {
943
    my ( $self, $borrowernumber ) = @_;
965
    my ( $self, $borrowernumber ) = @_;
966
944
    if ($borrowernumber) {
967
    if ($borrowernumber) {
945
        $self->_result->update_or_create_related(
968
969
        # Clean up the table by deleting older entries, depending on what StoreLastBorrower is set to
970
        my $max_stored_borrowers = C4::Context->preference('StoreLastBorrower') || 0;
971
972
        # If StoreLastBorrower is 0 or disabled, bail without storing anything. Also delete any remaining rows from the table.
973
        if ( $max_stored_borrowers == 0 ) {
974
            $self->_result->last_returned_by->delete_all;
975
            return $self;
976
        }
977
978
        #Create an entry for last_returned_by
979
        my $new_record = $self->_result->create_related(
946
            'last_returned_by',
980
            'last_returned_by',
947
            { borrowernumber => $borrowernumber, itemnumber => $self->itemnumber }
981
            { borrowernumber => $borrowernumber, itemnumber => $self->itemnumber }
948
        );
982
        );
983
984
        # Get all entries, ordered by newest first
985
        my @all_entries =
986
            $self->_result->last_returned_by( {}, { order_by => [ { '-desc' => 'created_on' }, { '-desc' => 'id' } ] } )
987
            ->all;
988
989
        # If we have more than the limit, delete the excess oldest ones
990
        if ( scalar(@all_entries) > $max_stored_borrowers ) {
991
            my @entries_to_delete = splice( @all_entries, $max_stored_borrowers );
992
            $_->delete for @entries_to_delete;
993
        }
994
995
        return $self;
949
    }
996
    }
950
    my $rs = $self->_result->last_returned_by;
997
998
    # Return the most recent borrower
999
    my $rs = $self->_result->last_returned_by(
1000
        {},
1001
        {
1002
            order_by => [ { '-desc' => 'created_on' }, { '-desc' => 'id' } ],
1003
            rows     => 1
1004
        }
1005
    )->first;
1006
951
    return unless $rs;
1007
    return unless $rs;
952
    return Koha::Patron->_new_from_dbic( $rs->borrowernumber );
1008
    return Koha::Patron->_new_from_dbic( $rs->borrowernumber );
953
}
1009
}
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/moredetail.tt (-7 / +13 lines)
Lines 493-505 Link Here
493
                                    <span class="label">Last borrowed:</span>
493
                                    <span class="label">Last borrowed:</span>
494
                                    [% IF (ITEM_DAT.datelastborrowed ) %][% ITEM_DAT.datelastborrowed | $KohaDates %][% END %]
494
                                    [% IF (ITEM_DAT.datelastborrowed ) %][% ITEM_DAT.datelastborrowed | $KohaDates %][% END %]
495
                                </li>
495
                                </li>
496
                                [% IF Koha.Preference('StoreLastBorrower') && ITEM_DAT.object.last_returned_by %]
496
497
                                    [% SET last_returned_by = ITEM_DAT.object.last_returned_by.cardnumber || ITEM_DAT.object.last_returned_by.borrowernumber %]
497
                                [% IF Koha.Preference('StoreLastBorrower') && Koha.Preference('StoreLastBorrower') > 0 %]
498
                                    <li>
498
                                    [% SET all_borrowers = ITEM_DAT.object.last_returned_by_all %]
499
                                        <span class="label">Last returned by:</span>
499
                                    [% IF all_borrowers.size > 0 %]
500
                                        <a href="/cgi-bin/koha/circ/circulation.pl?borrowernumber=[% ITEM_DAT.object.last_returned_by.borrowernumber | uri %]">[% last_returned_by | html %]</a>
500
                                        <li>
501
                                    </li>
501
                                            <span class="label">Last returned by:</span>
502
                                            [% FOREACH patron IN all_borrowers %]
503
                                                [% SET returned_by = patron.cardnumber || patron.borrowernumber %]
504
                                                <a href="/cgi-bin/koha/circ/circulation.pl?borrowernumber=[% patron.borrowernumber | uri %]">[% returned_by | html %]</a>[% UNLESS loop.last %],[% END %]
505
                                            [% END %]
506
                                        </li>
507
                                    [% END %]
502
                                [% END %]
508
                                [% END %]
509
503
                                [% FOR i IN ITEM_DAT.old_issues %]
510
                                [% FOR i IN ITEM_DAT.old_issues %]
504
                                    [% SET b = i.patron %]
511
                                    [% SET b = i.patron %]
505
                                    <li class="previous_borrowers">
512
                                    <li class="previous_borrowers">
506
- 

Return to bug 26993