@@ -, +, @@ --- Koha/ArticleRequest.pm | 48 +++++ admin/categories.pl | 187 +++++++++--------- .../prog/en/modules/admin/categories.tt | 22 ++- .../prog/en/modules/circ/request-article.tt | 7 +- .../en/modules/opac-request-article.tt | 7 + 5 files changed, 180 insertions(+), 91 deletions(-) --- a/Koha/ArticleRequest.pm +++ a/Koha/ArticleRequest.pm @@ -27,6 +27,8 @@ use Koha::Biblios; use Koha::Items; use Koha::Libraries; use Koha::DateUtils qw(dt_from_string); +use C4::Context; +use Koha::Account::Lines; use base qw(Koha::Object); @@ -48,6 +50,19 @@ sub open { my ($self) = @_; $self->status(Koha::ArticleRequest::Status::Pending); + if(C4::Context->preference('ArticleRequests') && $self->borrower->category->article_request_fee) { + my $debit_line = $self->borrower->account->add_debit( + { + amount => $self->borrower->category->article_request_fee, + user_id => C4::Context->userenv ? C4::Context->userenv->{'number'} : undef, + interface => C4::Context->interface, + library_id => C4::Context->userenv ? C4::Context->userenv->{'branch'} : undef, + type => 'ARTICLE_REQUEST', + item_id => $self->itemnumber + } + ); + $self->debit_line_id($debit_line->id); + } $self->SUPER::store(); $self->notify(); return $self; @@ -88,6 +103,39 @@ sub cancel { $self->status(Koha::ArticleRequest::Status::Canceled); $self->notes($notes) if $notes; + if ( $self->debit_line_id ) { + my $line = Koha::Account::Lines->find( $self->debit_line_id ); + if ( $line->amount != $line->amountoutstanding ) { + $self->borrower->account->add_credit( + { + amount => $line->amount, + user_id => C4::Context->userenv + ? C4::Context->userenv->{'number'} + : undef, + interface => C4::Context->interface, + library_id => C4::Context->userenv + ? C4::Context->userenv->{'branch'} + : undef, + type => 'CREDIT', + description => 'Article request cancelled', + item_id => $self->itemnumber + } + ); + } + else { + $line->cancel( + { + branch => C4::Context->userenv + ? C4::Context->userenv->{'branch'} + : undef, + staff_id => C4::Context->userenv + ? C4::Context->userenv->{'number'} + : undef, + } + ) unless $line->status && $line->status eq 'CANCELLED'; + } + } + $self->store(); $self->notify(); return $self; --- a/admin/categories.pl +++ a/admin/categories.pl @@ -46,18 +46,7 @@ my ( $template, $loggedinuser, $cookie ) = get_template_and_user( } ); -if ( $op eq 'add_form' ) { - - $template->param( - category => scalar Koha::Patron::Categories->find($categorycode), - ); - - if ( C4::Context->preference('EnhancedMessagingPreferences') ) { - C4::Form::MessagingPreferences::set_form_values( - { categorycode => $categorycode }, $template ); - } -} -elsif ( $op eq 'add_validate' ) { +if ( $op eq 'add_validate' ) { my $categorycode = $input->param('categorycode'); my $description = $input->param('description'); @@ -78,6 +67,7 @@ elsif ( $op eq 'add_validate' ) { my $exclude_from_local_holds_priority = $input->param('exclude_from_local_holds_priority'); my $min_password_length = $input->param('min_password_length'); my $require_strong_password = $input->param('require_strong_password'); + my $article_request_fee = $input->param('article_request_fee'); my @branches = grep { $_ ne q{} } $input->multi_param('branches'); $reset_password = undef if $reset_password eq -1; @@ -87,88 +77,95 @@ elsif ( $op eq 'add_validate' ) { my $is_a_modif = $input->param("is_a_modif"); - if ($enrolmentperioddate) { - $enrolmentperioddate = output_pref( - { - dt => dt_from_string($enrolmentperioddate), - dateformat => 'iso', - dateonly => 1, - } - ); - } + if ($article_request_fee < 0) { + push @messages, {type => 'error', code => 'article_request_negative_fee' }; + $op = 'add_form'; + } else { + if ($enrolmentperioddate) { + $enrolmentperioddate = output_pref( + { + dt => dt_from_string($enrolmentperioddate), + dateformat => 'iso', + dateonly => 1, + } + ); + } - if ($is_a_modif) { - my $category = Koha::Patron::Categories->find( $categorycode ); - $category->categorycode($categorycode); - $category->description($description); - $category->enrolmentperiod($enrolmentperiod); - $category->enrolmentperioddate($enrolmentperioddate); - $category->upperagelimit($upperagelimit); - $category->dateofbirthrequired($dateofbirthrequired); - $category->enrolmentfee($enrolmentfee); - $category->reservefee($reservefee); - $category->hidelostitems($hidelostitems); - $category->overduenoticerequired($overduenoticerequired); - $category->category_type($category_type); - $category->BlockExpiredPatronOpacActions($BlockExpiredPatronOpacActions); - $category->checkprevcheckout($checkPrevCheckout); - $category->default_privacy($default_privacy); - $category->reset_password($reset_password); - $category->change_password($change_password); - $category->exclude_from_local_holds_priority($exclude_from_local_holds_priority); - $category->min_password_length($min_password_length); - $category->require_strong_password($require_strong_password); - eval { - $category->store; - $category->replace_library_limits( \@branches ); - }; - if ( $@ ) { - push @messages, {type => 'error', code => 'error_on_update' }; - } else { - push @messages, { type => 'message', code => 'success_on_update' }; + if ($is_a_modif) { + my $category = Koha::Patron::Categories->find( $categorycode ); + $category->categorycode($categorycode); + $category->description($description); + $category->enrolmentperiod($enrolmentperiod); + $category->enrolmentperioddate($enrolmentperioddate); + $category->upperagelimit($upperagelimit); + $category->dateofbirthrequired($dateofbirthrequired); + $category->enrolmentfee($enrolmentfee); + $category->reservefee($reservefee); + $category->hidelostitems($hidelostitems); + $category->overduenoticerequired($overduenoticerequired); + $category->category_type($category_type); + $category->BlockExpiredPatronOpacActions($BlockExpiredPatronOpacActions); + $category->checkprevcheckout($checkPrevCheckout); + $category->default_privacy($default_privacy); + $category->reset_password($reset_password); + $category->change_password($change_password); + $category->exclude_from_local_holds_priority($exclude_from_local_holds_priority); + $category->min_password_length($min_password_length); + $category->require_strong_password($require_strong_password); + $category->article_request_fee($article_request_fee); + eval { + $category->store; + $category->replace_library_limits( \@branches ); + }; + if ( $@ ) { + push @messages, {type => 'error', code => 'error_on_update' }; + } else { + push @messages, { type => 'message', code => 'success_on_update' }; + } } - } - else { - my $category = Koha::Patron::Category->new({ - categorycode => $categorycode, - description => $description, - enrolmentperiod => $enrolmentperiod, - enrolmentperioddate => $enrolmentperioddate, - upperagelimit => $upperagelimit, - dateofbirthrequired => $dateofbirthrequired, - enrolmentfee => $enrolmentfee, - reservefee => $reservefee, - hidelostitems => $hidelostitems, - overduenoticerequired => $overduenoticerequired, - category_type => $category_type, - BlockExpiredPatronOpacActions => $BlockExpiredPatronOpacActions, - checkprevcheckout => $checkPrevCheckout, - default_privacy => $default_privacy, - reset_password => $reset_password, - change_password => $change_password, - exclude_from_local_holds_priority => $exclude_from_local_holds_priority, - min_password_length => $min_password_length, - require_strong_password => $require_strong_password, - }); - eval { - $category->store; - $category->replace_library_limits( \@branches ); - }; - - if ( $@ ) { - push @messages, { type => 'error', code => 'error_on_insert' }; - } else { - push @messages, { type => 'message', code => 'success_on_insert' }; + else { + my $category = Koha::Patron::Category->new({ + categorycode => $categorycode, + description => $description, + enrolmentperiod => $enrolmentperiod, + enrolmentperioddate => $enrolmentperioddate, + upperagelimit => $upperagelimit, + dateofbirthrequired => $dateofbirthrequired, + enrolmentfee => $enrolmentfee, + reservefee => $reservefee, + hidelostitems => $hidelostitems, + overduenoticerequired => $overduenoticerequired, + category_type => $category_type, + BlockExpiredPatronOpacActions => $BlockExpiredPatronOpacActions, + checkprevcheckout => $checkPrevCheckout, + default_privacy => $default_privacy, + reset_password => $reset_password, + change_password => $change_password, + exclude_from_local_holds_priority => $exclude_from_local_holds_priority, + min_password_length => $min_password_length, + require_strong_password => $require_strong_password, + article_request_fee => $article_request_fee, + }); + eval { + $category->store; + $category->replace_library_limits( \@branches ); + }; + + if ( $@ ) { + push @messages, { type => 'error', code => 'error_on_insert' }; + } else { + push @messages, { type => 'message', code => 'success_on_insert' }; + } } - } - if ( C4::Context->preference('EnhancedMessagingPreferences') ) { - C4::Form::MessagingPreferences::handle_form_action( $input, - { categorycode => scalar $input->param('categorycode') }, $template ); + if ( C4::Context->preference('EnhancedMessagingPreferences') ) { + C4::Form::MessagingPreferences::handle_form_action( $input, + { categorycode => scalar $input->param('categorycode') }, $template ); + } + + $searchfield = q||; + $op = 'list'; } - - $searchfield = q||; - $op = 'list'; } elsif ( $op eq 'delete_confirm' ) { @@ -199,6 +196,18 @@ elsif ( $op eq 'delete_confirmed' ) { $op = 'list'; } +if ( $op eq 'add_form' ) { + + $template->param( + category => scalar Koha::Patron::Categories->find($categorycode), + ); + + if ( C4::Context->preference('EnhancedMessagingPreferences') ) { + C4::Form::MessagingPreferences::set_form_values( + { categorycode => $categorycode }, $template ); + } +} + if ( $op eq 'list' ) { my $categories = Koha::Patron::Categories->search( { --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/categories.tt +++ a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/categories.tt @@ -108,6 +108,8 @@ Patron category deleted successfully. [% CASE 'already_exists' %] This patron category already exists. + [% CASE 'article_request_negative_fee' %] + Article request fee cannot be negative. [% CASE %] [% m.code | html %] [% END %] @@ -202,6 +204,12 @@ + [% IF Koha.Preference('ArticleRequests') %] +
  • + + +
  • + [% END %]
  • --- a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-request-article.tt +++ a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-request-article.tt @@ -1,6 +1,7 @@ [% USE Koha %] [% USE Branches %] [% USE ItemTypes %] +[% USE Price %] [% INCLUDE 'doc-head-open.inc' %] Request article › [% IF ( LibraryNameTitle ) %][% LibraryNameTitle | html %][% ELSE %]Koha online[% END %] catalog @@ -38,6 +39,12 @@

    Place article request for [% biblio.title | html %]

    + [% IF patron.category.article_request_fee > 0 %] +
    + You will be charged with [% patron.category.article_request_fee | $Price %] for every request +
    + [% END %] +
    Place article request --