@@ -, +, @@ && $budget->{budget_owner_id} && $budget->{budget_owner_id} != $borrower->{borrowernumber} - not superlibrarian, no buget_manage_all, no owner, no users, no library, no restrictions on the fund = visible - changed: library = staff patron library, restriction = Owner, users and library = visible - changed: library = not staff patron library = invisible - changed: budget_manage_all = visible - changed: owner = staff patron no budget_manage_all = visible - changed: no owner, user = staff patron = visible - changed: no user, owner = another user, restriction = owner = invisible - changed: budget_manage_all = visible - changed: no budget_manage_all but superlibrarian = visible --- C4/Budgets.pm | 58 +++++++++++++++++++++++++++------------ t/Budgets/CanUserModifyBudget.t | 14 +++++----- t/Budgets/CanUserUseBudget.t | 14 +++++----- 3 files changed, 54 insertions(+), 32 deletions(-) --- a/C4/Budgets.pm +++ a/C4/Budgets.pm @@ -827,30 +827,52 @@ sub CanUserUseBudget { } # Budget restricted to owner - if ($budget->{budget_permission} == 1 - && $budget->{budget_owner_id} - && $budget->{budget_owner_id} != $borrower->{borrowernumber}) { - return 0; + if ( $budget->{budget_permission} == 1 ) { + if ( $budget->{budget_owner_id} + and $budget->{budget_owner_id} != $borrower->{borrowernumber} ) + { + return 0; + } } - my @budget_users = GetBudgetUsers($budget->{budget_id}); - # Budget restricted to owner, users and library - if ($budget->{budget_permission} == 2 - && $budget->{budget_owner_id} - && $budget->{budget_owner_id} != $borrower->{borrowernumber} - && (0 == grep {$borrower->{borrowernumber} == $_} @budget_users) - && defined $budget->{budget_branchcode} - && $budget->{budget_branchcode} ne C4::Context->userenv->{branch}) { - return 0; + elsif ( $budget->{budget_permission} == 2 ) { + my @budget_users = GetBudgetUsers( $budget->{budget_id} ); + + if ( + ( + $budget->{budget_owner_id} + and $budget->{budget_owner_id} != + $borrower->{borrowernumber} + or not $budget->{budget_owner_id} + ) + and ( 0 == grep { $borrower->{borrowernumber} == $_ } + @budget_users ) + and defined $budget->{budget_branchcode} + and $budget->{budget_branchcode} ne + C4::Context->userenv->{branch} + ) + { + return 0; + } } # Budget restricted to owner and users - if ($budget->{budget_permission} == 3 - && $budget->{budget_owner_id} - && $budget->{budget_owner_id} != $borrower->{borrowernumber} - && (0 == grep {$borrower->{borrowernumber} == $_} @budget_users)) { - return 0; + elsif ( $budget->{budget_permission} == 3 ) { + my @budget_users = GetBudgetUsers( $budget->{budget_id} ); + if ( + ( + $budget->{budget_owner_id} + and $budget->{budget_owner_id} != + $borrower->{borrowernumber} + or not $budget->{budget_owner_id} + ) + and ( 0 == grep { $borrower->{borrowernumber} == $_ } + @budget_users ) + ) + { + return 0; + } } } --- a/t/Budgets/CanUserModifyBudget.t +++ a/t/Budgets/CanUserModifyBudget.t @@ -182,12 +182,12 @@ ok (CanUserModifyBudget($borrower2, $budget11, $flags)); ok (CanUserModifyBudget($borrower2, $budget12, $flags)); # Restriction is 'owner and users' -ok (CanUserModifyBudget($borrower1, $budget13, $flags)); +ok (!CanUserModifyBudget($borrower1, $budget13, $flags)); # no owner, no user ok (CanUserModifyBudget($borrower1, $budget14, $flags)); ok (CanUserModifyBudget($borrower1, $budget15, $flags)); ok (CanUserModifyBudget($borrower1, $budget16, $flags)); -ok (CanUserModifyBudget($borrower2, $budget13, $flags)); -ok (CanUserModifyBudget($borrower2, $budget14, $flags)); +ok (!CanUserModifyBudget($borrower2, $budget13, $flags)); # no owner, no user +ok (!CanUserModifyBudget($borrower2, $budget14, $flags)); # No owner and user list contains borrower1 ok (CanUserModifyBudget($borrower2, $budget15, $flags)); ok (!CanUserModifyBudget($borrower2, $budget16, $flags)); @@ -220,17 +220,17 @@ ok (CanUserModifyBudget($borrower1, $budget10, $flags)); ok (CanUserModifyBudget($borrower1, $budget11, $flags)); ok (CanUserModifyBudget($borrower1, $budget12, $flags)); ok (CanUserModifyBudget($borrower2, $budget9, $flags)); -ok (CanUserModifyBudget($borrower2, $budget10, $flags)); +ok (!CanUserModifyBudget($borrower2, $budget10, $flags)); # Limited to library B1 ok (CanUserModifyBudget($borrower2, $budget11, $flags)); ok (!CanUserModifyBudget($borrower2, $budget12, $flags)); # Restriction is 'owner and users' -ok (CanUserModifyBudget($borrower1, $budget13, $flags)); +ok (!CanUserModifyBudget($borrower1, $budget13, $flags)); # No owner, no user ok (CanUserModifyBudget($borrower1, $budget14, $flags)); ok (CanUserModifyBudget($borrower1, $budget15, $flags)); ok (CanUserModifyBudget($borrower1, $budget16, $flags)); -ok (CanUserModifyBudget($borrower2, $budget13, $flags)); -ok (CanUserModifyBudget($borrower2, $budget14, $flags)); +ok (!CanUserModifyBudget($borrower2, $budget13, $flags)); # No owner, no user +ok (!CanUserModifyBudget($borrower2, $budget14, $flags)); # No owner and user list contains borrower1 ok (CanUserModifyBudget($borrower2, $budget15, $flags)); ok (!CanUserModifyBudget($borrower2, $budget16, $flags)); --- a/t/Budgets/CanUserUseBudget.t +++ a/t/Budgets/CanUserUseBudget.t @@ -182,12 +182,12 @@ ok (CanUserUseBudget($borrower2, $budget11, $flags)); ok (CanUserUseBudget($borrower2, $budget12, $flags)); # Restriction is 'owner and users' -ok (CanUserUseBudget($borrower1, $budget13, $flags)); +ok (!CanUserUseBudget($borrower1, $budget13, $flags)); # No user, no owner ok (CanUserUseBudget($borrower1, $budget14, $flags)); ok (CanUserUseBudget($borrower1, $budget15, $flags)); ok (CanUserUseBudget($borrower1, $budget16, $flags)); -ok (CanUserUseBudget($borrower2, $budget13, $flags)); -ok (CanUserUseBudget($borrower2, $budget14, $flags)); +ok (!CanUserUseBudget($borrower2, $budget13, $flags)); # No user, no owner +ok (!CanUserUseBudget($borrower2, $budget14, $flags)); # No owner and user list contains borrower1 ok (CanUserUseBudget($borrower2, $budget15, $flags)); ok (!CanUserUseBudget($borrower2, $budget16, $flags)); @@ -220,17 +220,17 @@ ok (CanUserUseBudget($borrower1, $budget10, $flags)); ok (CanUserUseBudget($borrower1, $budget11, $flags)); ok (CanUserUseBudget($borrower1, $budget12, $flags)); ok (CanUserUseBudget($borrower2, $budget9, $flags)); -ok (CanUserUseBudget($borrower2, $budget10, $flags)); +ok (!CanUserUseBudget($borrower2, $budget10, $flags)); # Limited to library B1 ok (CanUserUseBudget($borrower2, $budget11, $flags)); ok (!CanUserUseBudget($borrower2, $budget12, $flags)); # Restriction is 'owner and users' -ok (CanUserUseBudget($borrower1, $budget13, $flags)); +ok (!CanUserUseBudget($borrower1, $budget13, $flags)); # No owner, no user ok (CanUserUseBudget($borrower1, $budget14, $flags)); ok (CanUserUseBudget($borrower1, $budget15, $flags)); ok (CanUserUseBudget($borrower1, $budget16, $flags)); -ok (CanUserUseBudget($borrower2, $budget13, $flags)); -ok (CanUserUseBudget($borrower2, $budget14, $flags)); +ok (!CanUserUseBudget($borrower2, $budget13, $flags)); # No owner, no user +ok (!CanUserUseBudget($borrower2, $budget14, $flags)); # No owner and user list contains borrower1 ok (CanUserUseBudget($borrower2, $budget15, $flags)); ok (!CanUserUseBudget($borrower2, $budget16, $flags)); --