1 package Koha::Patron::Discharge;
5 use File::Temp qw( :POSIX );
8 use C4::Templates qw ( gettemplate );
9 use C4::Members qw( GetPendingIssues );
12 use Koha::DateUtils qw( dt_from_string output_pref );
19 if( $params->{borrowernumber} ) {
20 $values->{borrower} = $params->{borrowernumber};
22 if( $params->{pending} ) {
23 $values->{needed} = { '!=', undef };
24 $values->{validated} = undef;
26 elsif( $params->{validated} ) {
27 $values->{validated} = { '!=', undef };
30 my $rs = Koha::Database->new->schema->resultset('Discharge');
31 return $rs->search( $values )->count;
34 sub can_be_discharged {
36 return unless $params->{borrowernumber};
38 my $issues = GetPendingIssues( $params->{borrowernumber} );
49 return unless $params->{borrowernumber};
50 my $borrowernumber = $params->{borrowernumber};
52 my $restricted = Koha::Patrons->find( $borrowernumber )->is_debarred;
53 my $validated = get_validated({borrowernumber => $borrowernumber});
55 if ($restricted && $validated) {
64 my $borrowernumber = $params->{borrowernumber};
65 return unless $borrowernumber;
66 return unless can_be_discharged({ borrowernumber => $borrowernumber });
68 my $rs = Koha::Database->new->schema->resultset('Discharge');
70 borrower => $borrowernumber,
71 needed => dt_from_string,
77 my $borrowernumber = $params->{borrowernumber};
78 return unless $borrowernumber and can_be_discharged( { borrowernumber => $borrowernumber } );
81 my $patron = Koha::Patrons->find( $borrowernumber );
82 my $holds = $patron->holds;
83 while ( my $hold = $holds->next ) {
88 Koha::Patron::Debarments::AddDebarment({
89 borrowernumber => $borrowernumber,
93 # Generate the discharge
94 my $rs = Koha::Database->new->schema->resultset('Discharge');
95 my $discharge = $rs->search({ borrower => $borrowernumber }, { order_by => { -desc => 'needed' }, rows => 1 });
96 if( $discharge->count > 0 ) {
97 $discharge->update({ validated => dt_from_string });
101 borrower => $borrowernumber,
102 validated => dt_from_string,
107 sub generate_as_pdf {
109 return unless $params->{borrowernumber};
111 my $patron = Koha::Patrons->find( $params->{borrowernumber} );
112 my $letter = C4::Letters::GetPreparedLetter(
114 letter_code => 'DISCHARGE',
115 lang => $patron->lang,
116 tables => { borrowers => $params->{borrowernumber}, branches => $params->{'branchcode'}, },
119 my $today = output_pref( dt_from_string() );
120 $letter->{'title'} =~ s/<<today>>/$today/g;
121 $letter->{'content'} =~ s/<<today>>/$today/g;
123 my $tmpl = C4::Templates::gettemplate('batch/print-notices.tt', 'intranet', new CGI);
125 stylesheet => C4::Context->preference("NoticeCSS"),
127 messages => [$letter],
130 my $html_path = tmpnam() . '.html';
131 my $pdf_path = tmpnam() . '.pdf';
132 my $html_content = $tmpl->output;
133 open my $html_fh, '>:encoding(utf8)', $html_path;
134 say $html_fh $html_content;
136 my $output = eval { require PDF::FromHTML; return; } || $@;
137 if ($output && $params->{testing}) {
145 my $pdf = PDF::FromHTML->new( encoding => 'utf-8' );
146 $pdf->load_file( $html_path );
148 $pdf->write_file( $pdf_path );
156 my $branchcode = $params->{branchcode};
157 my $borrowernumber = $params->{borrowernumber};
160 'me.needed' => { '!=', undef },
161 'me.validated' => undef,
162 ( defined $borrowernumber ? ( 'me.borrower' => $borrowernumber ) : () ),
163 ( defined $branchcode ? ( 'borrower.branchcode' => $branchcode ) : () ),
166 my $rs = Koha::Database->new->schema->resultset('Discharge');
167 my @rs = $rs->search( $cond, { join => 'borrower' } );
173 my $branchcode = $params->{branchcode};
174 my $borrowernumber = $params->{borrowernumber};
177 'me.validated' => { '!=', undef },
178 ( defined $borrowernumber ? ( 'me.borrower' => $borrowernumber ) : () ),
179 ( defined $branchcode ? ( 'borrower.branchcode' => $branchcode ) : () ),
182 my $rs = Koha::Database->new->schema->resultset('Discharge');
183 my @rs = $rs->search( $cond, { join => 'borrower' } );