1 package Koha::Borrower::Discharge;
5 use File::Temp qw( :POSIX );
8 use C4::Members qw( GetPendingIssues );
9 use C4::Reserves qw( GetReservesFromBorrowernumber CancelReserve );
12 use Koha::DateUtils qw( dt_from_string output_pref );
14 my $rs = Koha::Database->new->schema->resultset('Discharge');
20 if( $params->{borrowernumber} ) {
21 $values->{borrower} = $params->{borrowernumber};
23 if( $params->{pending} ) {
24 $values->{needed} = { '!=', undef };
25 $values->{validated} = undef;
27 elsif( $params->{validated} ) {
28 $values->{validated} = { '!=', undef };
31 return $rs->search( $values )->count;
34 sub can_be_discharged {
36 return unless $params->{borrowernumber};
38 my $issues = GetPendingIssues( $params->{borrowernumber} );
49 my $borrowernumber = $params->{borrowernumber};
50 return unless $borrowernumber;
51 return unless can_be_discharged({ borrowernumber => $borrowernumber });
52 return if count($params);
55 borrower => $borrowernumber,
56 needed => dt_from_string,
62 my $borrowernumber = $params->{borrowernumber};
63 return unless $borrowernumber and can_be_discharged( { borrowernumber => $borrowernumber } );
66 my @reserves = GetReservesFromBorrowernumber($borrowernumber);
67 for my $reserve (@reserves) {
68 CancelReserve( { reserve_id => $reserve->{reserve_id} } );
72 Koha::Borrower::Debarments::AddDebarment({
73 borrowernumber => $borrowernumber,
77 # Generate the discharge
78 my $discharge = $rs->search({ borrower => $borrowernumber });
79 if( $discharge->count > 0 ) {
80 $discharge->update({ validated => dt_from_string });
84 borrower => $borrowernumber,
85 validated => dt_from_string,
92 return unless $params->{borrowernumber};
94 my $letter = C4::Letters::GetPreparedLetter(
96 letter_code => 'DISCHARGE',
97 tables => { borrowers => $params->{borrowernumber}, },
100 my $today = output_pref( dt_from_string() );
101 $letter->{'title'} =~ s/<<today>>/$today/g;
102 $letter->{'content'} =~ s/<<today>>/$today/g;
104 my $tmpl = C4::Templates::gettemplate('batch/print-notices.tt', 'intranet', new CGI);
106 stylesheet => C4::Context->preference("NoticeCSS"),
108 messages => [$letter],
111 my $pdf_path = tmpnam();
112 my $htmldoc = new HTML::HTMLDoc();
113 $htmldoc->set_html_content($tmpl->output);
114 $htmldoc->generate_pdf()->to_file($pdf_path);
121 my $branchcode = $params->{branchcode};
122 my $borrowernumber = $params->{borrowernumber};
125 'me.needed' => { '!=', undef },
126 'me.validated' => undef,
127 ( defined $borrowernumber ? ( 'me.borrower' => $borrowernumber ) : () ),
128 ( defined $branchcode ? ( 'borrower.branchcode' => $branchcode ) : () ),
131 my @rs = $rs->search( $cond, { join => 'borrower' } );