Browse Source

Bug 14368: Add discharges history.

Currently, once a user is discharged, lifting the discharge debarment does
not allow the user to ask for a discharge again.

This patch adds the ability for a user to be discharged several times and to
keep an history of the discharges.

Test plan:

 - 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.

Please note that you will need to run misc/devel/update_dbix_class_files.pl after the SQL update.
Adding a primary key to the discharges table was mandatory for DBIX::Class to be able to query with order_by.

Signed-off-by: Indranil Das Gupta (L2C2 Technologies) <indradg@gmail.com>

Signed-off-by: Jonathan Druart <jonathan.druart@koha-community.org>

Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
Signed-off-by: Tomas Cohen Arazi <tomascohen@unc.edu.ar>
3.22.x
Matthias Meusburger 9 years ago
committed by Tomas Cohen Arazi
parent
commit
c34c8ee853
  1. 35
      Koha/Borrower/Discharge.pm
  2. 1
      installer/data/mysql/atomicupdate/bug_14368_Add_discharges_history.sql
  3. 2
      installer/data/mysql/kohastructure.sql
  4. 22
      koha-tmpl/intranet-tmpl/prog/en/modules/members/discharge.tt
  5. 6
      members/discharge.pl
  6. 2
      opac/opac-discharge.pl
  7. 7
      t/db_dependent/Borrower_Discharge.t

35
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;

1
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;

2
installer/data/mysql/kohastructure.sql

@ -3531,9 +3531,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;

22
koha-tmpl/intranet-tmpl/prog/en/modules/members/discharge.tt

@ -1,3 +1,4 @@
[% USE KohaDates %]
[% INCLUDE 'doc-head-open.inc' %]
<title>Koha &rsaquo; Patrons &rsaquo; [% IF (unknowuser) %]Patron does not exist[% ELSE %]Discharge for [% firstname %] [% surname %] ([% cardnumber %])[% END %]</title>
[% INCLUDE 'doc-head-close.inc' %]
@ -37,6 +38,27 @@
<input type="hidden" value="[% borrowernumber %]" name="borrowernumber" />
</form>
[% END %]
[% IF validated_discharges %]
<h2>Already validated discharges</h2>
<table>
<thead>
<tr>
<th>Requested</th>
<th>Validated</th>
</tr>
</thead>
<tbody>
[% FOR d IN validated_discharges %]
<tr>
<td>[% d.needed | $KohaDates with_hours = 1 %]</td>
<td>[% d.validated | $KohaDates with_hours = 1 %]</td>
</tr>
[% END %]
</tbody>
</table>
[% END %]
</div>

6
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,
);
}

2
opac/opac-discharge.pl

@ -92,7 +92,7 @@ else {
validated => 1,
});
$template->param(
available => $available,
available => $available && Koha::Borrower::Discharge::is_discharged({borrowernumber => $loggedinuser}),
pending => $pending,
);
}

7
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; };

Loading…
Cancel
Save