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

(-)a/t/db_dependent/Circulation.t (-122 / +45 lines)
Lines 1925-1932 subtest 'AddIssue & AllowReturnToBranch' => sub { Link Here
1925
};
1925
};
1926
1926
1927
1927
1928
subtest 'CanBookBeReturned + UseBranchTransfertLimits' => sub {
1928
subtest 'CanBookBeReturned + UseBranchTransfertLimits + CirculationRules' => sub {
1929
    plan tests => 33;
1929
    plan tests => 22;
1930
1930
1931
    t::lib::Mocks::mock_preference( 'UseBranchTransferLimits', '1' );
1931
    t::lib::Mocks::mock_preference( 'UseBranchTransferLimits', '1' );
1932
1932
Lines 1946-2078 subtest 'CanBookBeReturned + UseBranchTransfertLimits' => sub { Link Here
1946
    set_userenv($holdingbranch);
1946
    set_userenv($holdingbranch);
1947
    my $issue = AddIssue( $patron, $item->barcode );
1947
    my $issue = AddIssue( $patron, $item->barcode );
1948
1948
1949
    # 'Anywhere' + BranchTransferLimits
1949
    # Attempt returns at returnbranch
1950
    t::lib::Mocks::mock_preference( 'AllowReturnToBranch', 'anywhere' );
1951
1952
    # Attempt return at returnbranch (No limits defined)
1953
    my ($allowed, $message) = C4::Circulation::CanBookBeReturned($item, $returnbranch);
1954
    is ( 1 , $allowed , 'with AllowReturnToBranch = anywhere and no limits return to returnbranch is allowed');
1955
    is ( undef , $message , 'without limits provides no message');
1956
1957
    # Set limit (Holding -> Return denied)
1958
    t::lib::Mocks::mock_preference( 'BranchTransferLimitsType', 'itemtype' );
1959
    my $limit = Koha::Item::Transfer::Limit->new({
1960
        toBranch   => $returnbranch->{branchcode},
1961
        fromBranch => $holdingbranch->{branchcode},
1962
        itemtype   => $item->effective_itemtype,
1963
    })->store();
1964
1965
    diag("Attempt return at returnbranch ('Homebranch' + Holding -> Return limit)");
1966
    t::lib::Mocks::mock_preference( 'AllowReturnToBranch', 'homebranch' );
1950
    t::lib::Mocks::mock_preference( 'AllowReturnToBranch', 'homebranch' );
1967
    ($allowed, $message) = C4::Circulation::CanBookBeReturned($item, $returnbranch);
1951
    my ($allowed, $message) = C4::Circulation::CanBookBeReturned($item, $returnbranch->{branchcode});
1968
    is ( 0 , $allowed , 'Prevent return where returnbranch != homebranch');
1952
    is ( 0 , $allowed , 'Prevent return where returnbranch != homebranch');
1969
    is ( $homebranch->{branchcode} , $message , 'Redirect to homebranch');
1953
    is ( $homebranch->{branchcode} , $message , 'Redirect to homebranch');
1970
1954
1971
    diag("Attempt return at returnbranch ('Holdingbranch' + Holding -> Return limit)");
1972
    t::lib::Mocks::mock_preference( 'AllowReturnToBranch', 'holdingbranch' );
1955
    t::lib::Mocks::mock_preference( 'AllowReturnToBranch', 'holdingbranch' );
1973
    ($allowed, $message) = C4::Circulation::CanBookBeReturned($item, $returnbranch);
1956
    ($allowed, $message) = C4::Circulation::CanBookBeReturned($item, $returnbranch->{branchcode});
1974
    is ( 0 , $allowed , 'Prevent return where returnbranch != holdingbranch');
1957
    is ( 0 , $allowed , 'Prevent return where returnbranch != holdingbranch');
1975
    is ( $holdingbranch->{branchcode} , $message , 'Redirect to holdingbranch');
1958
    is ( $holdingbranch->{branchcode} , $message , 'Redirect to holdingbranch');
1976
1959
1977
    diag("Attempt return at returnbranch ('Home Or Holding' + Holding -> Return limit)");
1978
    t::lib::Mocks::mock_preference( 'AllowReturnToBranch', 'homeorholdingbranch' );
1960
    t::lib::Mocks::mock_preference( 'AllowReturnToBranch', 'homeorholdingbranch' );
1979
    ($allowed, $message) = C4::Circulation::CanBookBeReturned($item, $returnbranch);
1961
    ($allowed, $message) = C4::Circulation::CanBookBeReturned($item, $returnbranch->{branchcode});
1980
    is ( 0 , $allowed , 'Prevent return where returnbranch != homebranch or holdingbranch');
1962
    is ( 0 , $allowed , 'Prevent return where returnbranch != homebranch or holdingbranch');
1981
    is ( $homebranch->{branchcode} , $message , 'Redirect to homebranch');
1963
    is ( $homebranch->{branchcode} , $message , 'Redirect to homebranch');
1982
1964
1983
    diag("Attempt return at returnbranch ('Anywhere' + Holding -> Return limit)");
1984
    # NOTE: This prevents receiving an item from a branch that is listed in
1985
    # the branchtransferlimits as not allowed to send to our returnbranch.
1986
    t::lib::Mocks::mock_preference( 'AllowReturnToBranch', 'anywhere' );
1965
    t::lib::Mocks::mock_preference( 'AllowReturnToBranch', 'anywhere' );
1987
    ($allowed, $message) = C4::Circulation::CanBookBeReturned($item, $returnbranch);
1966
    ($allowed, $message) = C4::Circulation::CanBookBeReturned($item, $returnbranch->{branchcode});
1988
    is ( 0 , $allowed , 'Prevent return where returnbranch has a branchtransfer limit from holdingbranch');
1967
    is ( 1 , $allowed , 'with AllowReturnToBranch = anywhere and no limits return to returnbranch is allowed');
1989
    is ( $homebranch->{branchcode} , $message , 'Redirect to homebranch');
1968
    is ( undef , $message , 'without limits provides no message');
1990
1991
    # Set limit ( Return -> Home denied)
1992
    $limit->set(
1993
        {
1994
            toBranch   => $homebranch->{branchcode},
1995
            fromBranch => $returnbranch->{branchcode}
1996
        }
1997
    )->store()->discard_changes;
1998
1999
    diag("Attempt return at returnbranch ('Homebranch' + Return -> Home limit)");
2000
    t::lib::Mocks::mock_preference( 'AllowReturnToBranch', 'homebranch' );
2001
    ($allowed, $message) = C4::Circulation::CanBookBeReturned($item, $returnbranch);
2002
    is ( 0 , $allowed , 'Prevent return where returnbranch != homebranch');
2003
    is ( $homebranch->{branchcode} , $message , 'Redirect to homebranch');
2004
2005
    diag("Attempt return at returnbranch ('Holdingbranch' + Return -> Home limit)");
2006
    t::lib::Mocks::mock_preference( 'AllowReturnToBranch', 'holdingbranch' );
2007
    ($allowed, $message) = C4::Circulation::CanBookBeReturned($item, $returnbranch);
2008
    is ( 0 , $allowed , 'Prevent return where returnbranch != holdingbranch');
2009
    is ( $holdingbranch->{branchcode} , $message , 'Redirect to holdingbranch');
2010
2011
    diag("Attempt return at returnbranch ('Home Or Holding' + Return -> Home limit)");
2012
    t::lib::Mocks::mock_preference( 'AllowReturnToBranch', 'homeorholdingbranch' );
2013
    ($allowed, $message) = C4::Circulation::CanBookBeReturned($item, $returnbranch);
2014
    is ( 0 , $allowed , 'Prevent return where returnbranch != homebranch or holdingbranch');
2015
    is ( $homebranch->{branchcode} , $message , 'Redirect to homebranch');
2016
2017
    diag("Attempt return at returnbranch ('Anywhere' + Return -> Home limit)");
2018
    # NOTE: Should we prevent return here.. we cannot transfer from 'returnbranch'
2019
    # to 'homebranch' (But we can transfer back to 'holdingbranch').
2020
    # NOTE: This is the ONLY change that bug 7376 introduces currently.
2021
    t::lib::Mocks::mock_preference( 'AllowReturnToBranch', 'anywhere' );
2022
    ($allowed, $message) = C4::Circulation::CanBookBeReturned($item, $returnbranch);
2023
    is ( 1 , $allowed , 'Allow return where returnbranch can be transfered to holding (homebranch forbidden) from returnbranch');
2024
1969
2025
    my $limit_2 = Koha::Item::Transfer::Limit->new({
1970
    # Set limit (Holding -> Return denied)
2026
        toBranch   => $holdingbranch->{branchcode},
1971
    diag("Transfer limit: Holding -> Return");
2027
        fromBranch => $returnbranch->{branchcode},
1972
    t::lib::Mocks::mock_preference( 'BranchTransferLimitsType', 'itemtype' );
1973
    my $limit = Koha::Item::Transfer::Limit->new({
1974
        toBranch   => $returnbranch->{branchcode},
1975
        fromBranch => $holdingbranch->{branchcode},
2028
        itemtype   => $item->effective_itemtype,
1976
        itemtype   => $item->effective_itemtype,
2029
    })->store();
1977
    })->store();
2030
1978
2031
    diag("Attempt return at returnbranch ('Anywhere' + Return -> Home and Return -> Holding limit)");
2032
    # NOTE: Should we prevent return here.. we cannot transfer from 'returnbranch'
2033
    # to 'homebranch' (But we can transfer back to 'holdingbranch').
2034
    # NOTE: This is the ONLY change that bug 7376 introduces currently.
2035
    t::lib::Mocks::mock_preference( 'AllowReturnToBranch', 'anywhere' );
1979
    t::lib::Mocks::mock_preference( 'AllowReturnToBranch', 'anywhere' );
2036
    ($allowed, $message) = C4::Circulation::CanBookBeReturned($item, $returnbranch);
1980
    ($allowed, $message) = C4::Circulation::CanBookBeReturned($item, $returnbranch->{branchcode});
2037
    is ( 0 , $allowed , 'Prevent return where item can\'t be transferred to both homebranch and holding from returnbranch');
1981
    is ( 1 , $allowed , 'Allow return where transferbranch is not passed');
2038
    is ( $homebranch->{branchcode} , $message , 'Redirect to homebranch');
1982
    is ( undef , $message , 'without limits provides no message');
1983
1984
    t::lib::Mocks::mock_preference( 'AllowReturnToBranch', 'anywhere' );
1985
    ($allowed, $message) = C4::Circulation::CanBookBeReturned($item, $returnbranch->{branchcode}, $homebranch->{branchcode});
1986
    is ( 1 , $allowed , 'Allow return where there is no transfer limit between returnbranch and homebranch');
1987
    is ( undef , $message , 'without limits provides no message');
2039
1988
2040
    $limit_2->delete()->store()->discard_changes;
1989
    t::lib::Mocks::mock_preference( 'AllowReturnToBranch', 'anywhere' );
1990
    ($allowed, $message) = C4::Circulation::CanBookBeReturned($item, $returnbranch->{branchcode}, $holdingbranch->{branchcode});
1991
    is ( 1 , $allowed , 'Allow return where there is no transfer limit between returnbranch and holdingbranch');
1992
    is ( undef , $message , 'without limits provides no message');
2041
1993
2042
    # Set limit ( Return -> Holding denied)
1994
    # Set limit ( Return -> Home denied)
1995
    diag("Transfer limit: Return -> Home");
2043
    $limit->set(
1996
    $limit->set(
2044
        {
1997
        {
2045
            toBranch   => $holdingbranch->{branchcode},
1998
            toBranch   => $homebranch->{branchcode},
2046
            fromBranch => $returnbranch->{branchcode}
1999
            fromBranch => $returnbranch->{branchcode}
2047
        }
2000
        }
2048
    )->store()->discard_changes;
2001
    )->store()->discard_changes;
2049
2002
2050
    diag("Attempt return at returnbranch ('Homebranch' + Return -> Holding limit)");
2003
    t::lib::Mocks::mock_preference( 'AllowReturnToBranch', 'anywhere' );
2051
    t::lib::Mocks::mock_preference( 'AllowReturnToBranch', 'homebranch' );
2004
    ($allowed, $message) = C4::Circulation::CanBookBeReturned($item, $returnbranch->{branchcode}, $homebranch->{branchcode});
2052
    ($allowed, $message) = C4::Circulation::CanBookBeReturned($item, $returnbranch);
2005
    is ( 0 , $allowed , 'Prevent return where returnbranch cannot transfer to homebranch');
2053
    is ( 0 , $allowed , 'Prevent return where returnbranch != homebranch');
2054
    is ( $homebranch->{branchcode} , $message , 'Redirect to homebranch');
2055
2056
    diag("Attempt return at returnbranch ('Holdingbranch' + Return -> Holding limit)");
2057
    t::lib::Mocks::mock_preference( 'AllowReturnToBranch', 'holdingbranch' );
2058
    ($allowed, $message) = C4::Circulation::CanBookBeReturned($item, $returnbranch);
2059
    is ( 0 , $allowed , 'Prevent return where returnbranch != holdingbranch');
2060
    is ( $holdingbranch->{branchcode} , $message , 'Redirect to holdingbranch');
2061
2062
    diag("Attempt return at returnbranch ('Home Or Holding' + Return -> Holding limit)");
2063
    t::lib::Mocks::mock_preference( 'AllowReturnToBranch', 'homeorholdingbranch' );
2064
    ($allowed, $message) = C4::Circulation::CanBookBeReturned($item, $returnbranch);
2065
    is ( 0 , $allowed , 'Prevent return where returnbranch != homebranch or holdingbranch');
2066
    is ( $homebranch->{branchcode} , $message , 'Redirect to homebranch');
2006
    is ( $homebranch->{branchcode} , $message , 'Redirect to homebranch');
2067
2007
2068
    diag("Attempt return at returnbranch ('Anywhere' + Return -> Holding limit)");
2069
    # NOTE: Should we prevent return here.. we cannot transfer from 'returnbranch'
2070
    # to 'holdingbranch' (But we can transfer back to 'homebranch').
2071
    t::lib::Mocks::mock_preference( 'AllowReturnToBranch', 'anywhere' );
2008
    t::lib::Mocks::mock_preference( 'AllowReturnToBranch', 'anywhere' );
2072
    ($allowed, $message) = C4::Circulation::CanBookBeReturned($item, $returnbranch);
2009
    ($allowed, $message) = C4::Circulation::CanBookBeReturned($item, $returnbranch->{branchcode}, $holdingbranch->{branchcode});
2073
    is ( 1 , $allowed , 'Allow return where returnbranch can be transferred to homebranch (holdingbranch forbidden) from returnbranch');
2010
    is ( 1 , $allowed , 'Allow return where there is no transfer limit between returnbranch and holdingbranch');
2011
    is ( undef , $message , 'without limits provides no message');
2074
2012
2075
    # Set limit ( Holding -> Home denied)
2013
    # Set limit ( Return -> Holding denied)
2014
    diag("Transfer limit: Return -> Holding");
2076
    $limit->set(
2015
    $limit->set(
2077
        {
2016
        {
2078
            toBranch   => $holdingbranch->{branchcode},
2017
            toBranch   => $holdingbranch->{branchcode},
Lines 2080-2109 subtest 'CanBookBeReturned + UseBranchTransfertLimits' => sub { Link Here
2080
        }
2019
        }
2081
    )->store()->discard_changes;
2020
    )->store()->discard_changes;
2082
2021
2083
    diag("Attempt return at returnbranch ('Homebranch' + Holding -> Home limit)");
2022
    t::lib::Mocks::mock_preference( 'AllowReturnToBranch', 'anywhere' );
2084
    t::lib::Mocks::mock_preference( 'AllowReturnToBranch', 'homebranch' );
2023
    ($allowed, $message) = C4::Circulation::CanBookBeReturned($item, $returnbranch->{branchcode}, $homebranch->{branchcode});
2085
    ($allowed, $message) = C4::Circulation::CanBookBeReturned($item, $returnbranch);
2024
    is ( 1 , $allowed , 'Allow return where there is no transfer limit between returnbranch and homebranch');
2086
    is ( 0 , $allowed , 'Prevent return where returnbranch != homebranch');
2025
    is ( undef , $message , 'without limits provides no message');
2087
    is ( $homebranch->{branchcode} , $message , 'Redirect to homebranch');
2088
2089
    diag("Attempt return at returnbranch ('Holdingbranch' + Holding -> Home limit)");
2090
    t::lib::Mocks::mock_preference( 'AllowReturnToBranch', 'holdingbranch' );
2091
    ($allowed, $message) = C4::Circulation::CanBookBeReturned($item, $returnbranch);
2092
    is ( 0 , $allowed , 'Prevent return where returnbranch != holdingbranch');
2093
    is ( $holdingbranch->{branchcode} , $message , 'Redirect to holdingbranch');
2094
2095
    diag("Attempt return at returnbranch ('Home Or Holding' + Holding -> Home limit)");
2096
    t::lib::Mocks::mock_preference( 'AllowReturnToBranch', 'homeorholdingbranch' );
2097
    ($allowed, $message) = C4::Circulation::CanBookBeReturned($item, $returnbranch);
2098
    is ( 0 , $allowed , 'Prevent return where returnbranch != homebranch or holdingbranch');
2099
    is ( $homebranch->{branchcode} , $message , 'Redirect to homebranch');
2100
2026
2101
    diag("Attempt return at returnbranch ('Anywhere' + Holding -> Home limit)");
2102
    # NOTE: A return here can subsequently be transferred to back to homebranch
2103
    # or holdingbranch.
2104
    t::lib::Mocks::mock_preference( 'AllowReturnToBranch', 'anywhere' );
2027
    t::lib::Mocks::mock_preference( 'AllowReturnToBranch', 'anywhere' );
2105
    ($allowed, $message) = C4::Circulation::CanBookBeReturned($item, $returnbranch);
2028
    ($allowed, $message) = C4::Circulation::CanBookBeReturned($item, $returnbranch->{branchcode}, $holdingbranch->{branchcode});
2106
    is ( 1 , $allowed , 'Allow return where returnbranch can be transferred to from anywhere');
2029
    is ( 0 , $allowed , 'Prevent return where returnbranch cannot transfer to holdingbranch');
2030
    is ( $holdingbranch->{branchcode} , $message , 'Redirect to holdingbranch');
2107
};
2031
};
2108
2032
2109
subtest 'CanBookBeIssued + Koha::Patron->is_debarred|has_overdues' => sub {
2033
subtest 'CanBookBeIssued + Koha::Patron->is_debarred|has_overdues' => sub {
2110
- 

Return to bug 7376