@@ -, +, @@ - As a user, ask for a discharge. - As a librarian, allow the discharge. - Check that the requested and validated dates appear on the discharge panel of the borrower in the admin interface. - Lift the discharge debarment of the user. - Check that you can repeat these steps and that the new discharges are added in the discharge panel of the borrower in the admin interface. --- Koha/Borrower/Discharge.pm | 35 ++++++++++++++++++-- .../bug_14368_Add_discharges_history.sql | 1 + installer/data/mysql/kohastructure.sql | 2 ++ .../prog/en/modules/members/discharge.tt | 21 ++++++++++++ members/discharge.pl | 6 ++++ opac/opac-discharge.pl | 2 +- t/db_dependent/Borrower_Discharge.t | 7 ++++ 7 files changed, 71 insertions(+), 3 deletions(-) create mode 100644 installer/data/mysql/atomicupdate/bug_14368_Add_discharges_history.sql --- a/Koha/Borrower/Discharge.pm +++ a/Koha/Borrower/Discharge.pm @@ -45,12 +45,27 @@ sub can_be_discharged { } } +sub is_discharged { + my ($params) = @_; + return unless $params->{borrowernumber}; + my $borrowernumber = $params->{borrowernumber}; + + + my $restricted = Koha::Borrower::Debarments::IsDebarred($borrowernumber); + my $validated = get_validated({borrowernumber => $borrowernumber}); + + if ($restricted && $validated) { + return 1; + } else { + return 0; + } +} + sub request { my ($params) = @_; my $borrowernumber = $params->{borrowernumber}; return unless $borrowernumber; return unless can_be_discharged({ borrowernumber => $borrowernumber }); - return if count($params); return $rs->create({ borrower => $borrowernumber, @@ -76,7 +91,7 @@ sub discharge { }); # Generate the discharge - my $discharge = $rs->search({ borrower => $borrowernumber }); + my $discharge = $rs->search({ borrower => $borrowernumber }, { order_by => { -desc => 'needed' }, rows => 1 }); if( $discharge->count > 0 ) { $discharge->update({ validated => dt_from_string }); } @@ -149,4 +164,20 @@ sub get_pendings { return \@rs; } +sub get_validated { + my ($params) = @_; + my $branchcode = $params->{branchcode}; + my $borrowernumber = $params->{borrowernumber}; + + my $cond = { + 'me.validated' => { '!=', undef }, + ( defined $borrowernumber ? ( 'me.borrower' => $borrowernumber ) : () ), + ( defined $branchcode ? ( 'borrower.branchcode' => $branchcode ) : () ), + }; + + my @rs = $rs->search( $cond, { join => 'borrower' } ); + return \@rs; +} + + 1; --- a/installer/data/mysql/atomicupdate/bug_14368_Add_discharges_history.sql +++ a/installer/data/mysql/atomicupdate/bug_14368_Add_discharges_history.sql @@ -0,0 +1, @@ +ALTER TABLE discharges ADD COLUMN discharge_id int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST; --- a/installer/data/mysql/kohastructure.sql +++ a/installer/data/mysql/kohastructure.sql @@ -3525,9 +3525,11 @@ CREATE TABLE items_search_fields ( DROP TABLE IF EXISTS discharges; CREATE TABLE discharges ( + discharge_id int(11) NOT NULL AUTO_INCREMENT, borrower int(11) DEFAULT NULL, needed timestamp NULL DEFAULT NULL, validated timestamp NULL DEFAULT NULL, + PRIMARY KEY (discharge_id), KEY borrower_discharges_ibfk1 (borrower), CONSTRAINT borrower_discharges_ibfk1 FOREIGN KEY (borrower) REFERENCES borrowers (borrowernumber) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; --- a/koha-tmpl/intranet-tmpl/prog/en/modules/members/discharge.tt +++ a/koha-tmpl/intranet-tmpl/prog/en/modules/members/discharge.tt @@ -1,3 +1,4 @@ +[% USE KohaDates %] [% INCLUDE 'doc-head-open.inc' %] Koha › Patrons › [% IF (unknowuser) %]Patron does not exist[% ELSE %]Discharge for [% firstname %] [% surname %] ([% cardnumber %])[% END %] [% INCLUDE 'doc-head-close.inc' %] @@ -37,6 +38,26 @@ [% END %] + [% IF validated_discharges %] +

Already validated discharges

+ + + + + + + + + [% FOR d IN validated_discharges %] + + + + + [% END %] + +
RequestedValidated
[% d.needed | $KohaDates with_hours = 1 %][% d.validated | $KohaDates with_hours = 1 %]
+ [% END %] + --- a/members/discharge.pl +++ a/members/discharge.pl @@ -98,6 +98,11 @@ if ( $input->param('borrowernumber') ) { } } + # Already generated discharges + my $validated_discharges = Koha::Borrower::Discharge::get_validated({ + branchcode => $data->{'branchcode'}, + }); + $template->param( borrowernumber => $borrowernumber, biblionumber => $data->{'biblionumber'}, @@ -120,6 +125,7 @@ if ( $input->param('borrowernumber') ) { branchcode => $data->{'branchcode'}, has_reserves => $has_reserves, can_be_discharged => $can_be_discharged, + validated_discharges => $validated_discharges, ); } --- a/opac/opac-discharge.pl +++ a/opac/opac-discharge.pl @@ -88,7 +88,7 @@ else { validated => 1, }); $template->param( - available => $available, + available => $available && Koha::Borrower::Discharge::is_discharged({borrowernumber => $loggedinuser}), pending => $pending, ); } --- a/t/db_dependent/Borrower_Discharge.t +++ a/t/db_dependent/Borrower_Discharge.t @@ -49,6 +49,13 @@ is( Koha::Borrower::Discharge::can_be_discharged({ borrowernumber => $borrowernu is(Koha::Borrower::Discharge::generate_as_pdf,undef,"Confirm failure when lacking borrower number"); +# Verify that the user is not discharged anymore if the restriction has been lifted +Koha::Borrower::Discharge::discharge({ borrowernumber => $borrowernumber }); +is( Koha::Borrower::Discharge::is_discharged({ borrowernumber => $borrowernumber }), 1, 'The patron has been discharged' ); +is(Koha::Borrower::Debarments::IsDebarred($borrowernumber), '9999-12-31', 'The patron has been debarred after discharge'); +Koha::Borrower::Debarments::DelDebarment($borrowernumber); +is( Koha::Borrower::Discharge::is_discharged({ borrowernumber => $borrowernumber }), 1, 'The patron is not discharged after the restriction has been lifted' ); + # Check if PDF::FromHTML is installed. my $check = eval { require PDF::FromHTML; }; --