1 package Koha::Borrower::Discharge;
5 use File::Temp qw( :POSIX );
8 use C4::Templates qw ( gettemplate );
9 use C4::Members qw( GetPendingIssues );
10 use C4::Reserves qw( GetReservesFromBorrowernumber CancelReserve );
13 use Koha::DateUtils qw( dt_from_string output_pref );
15 my $rs = Koha::Database->new->schema->resultset('Discharge');
21 if( $params->{borrowernumber} ) {
22 $values->{borrower} = $params->{borrowernumber};
24 if( $params->{pending} ) {
25 $values->{needed} = { '!=', undef };
26 $values->{validated} = undef;
28 elsif( $params->{validated} ) {
29 $values->{validated} = { '!=', undef };
32 return $rs->search( $values )->count;
35 sub can_be_discharged {
37 return unless $params->{borrowernumber};
39 my $issues = GetPendingIssues( $params->{borrowernumber} );
50 my $borrowernumber = $params->{borrowernumber};
51 return unless $borrowernumber;
52 return unless can_be_discharged({ borrowernumber => $borrowernumber });
53 return if count($params);
56 borrower => $borrowernumber,
57 needed => dt_from_string,
63 my $borrowernumber = $params->{borrowernumber};
64 return unless $borrowernumber and can_be_discharged( { borrowernumber => $borrowernumber } );
67 my @reserves = GetReservesFromBorrowernumber($borrowernumber);
68 for my $reserve (@reserves) {
69 CancelReserve( { reserve_id => $reserve->{reserve_id} } );
73 Koha::Borrower::Debarments::AddDebarment({
74 borrowernumber => $borrowernumber,
78 # Generate the discharge
79 my $discharge = $rs->search({ borrower => $borrowernumber });
80 if( $discharge->count > 0 ) {
81 $discharge->update({ validated => dt_from_string });
85 borrower => $borrowernumber,
86 validated => dt_from_string,
93 return unless $params->{borrowernumber};
95 my $letter = C4::Letters::GetPreparedLetter(
97 letter_code => 'DISCHARGE',
98 tables => { borrowers => $params->{borrowernumber}, },
101 my $today = output_pref( dt_from_string() );
102 $letter->{'title'} =~ s/<<today>>/$today/g;
103 $letter->{'content'} =~ s/<<today>>/$today/g;
105 my $tmpl = C4::Templates::gettemplate('batch/print-notices.tt', 'intranet', new CGI);
107 stylesheet => C4::Context->preference("NoticeCSS"),
109 messages => [$letter],
112 my $html_path = tmpnam() . '.html';
113 my $pdf_path = tmpnam() . '.pdf';
114 my $html_content = $tmpl->output;
115 open my $html_fh, '>:encoding(utf8)', $html_path;
116 say $html_fh $html_content;
118 my $output = eval { require PDF::FromHTML; return; } || $@;
119 if ($output && $params->{testing}) {
127 my $pdf = PDF::FromHTML->new( encoding => 'utf-8' );
128 $pdf->load_file( $html_path );
130 $pdf->write_file( $pdf_path );
138 my $branchcode = $params->{branchcode};
139 my $borrowernumber = $params->{borrowernumber};
142 'me.needed' => { '!=', undef },
143 'me.validated' => undef,
144 ( defined $borrowernumber ? ( 'me.borrower' => $borrowernumber ) : () ),
145 ( defined $branchcode ? ( 'borrower.branchcode' => $branchcode ) : () ),
148 my @rs = $rs->search( $cond, { join => 'borrower' } );