1 package Koha
::Patron
::Discharge
;
5 use File
::Temp
qw( :POSIX );
8 use C4
::Templates qw
( gettemplate
);
9 use C4
::Members
qw( GetPendingIssues );
10 use C4
::Reserves
qw( CancelReserve );
13 use Koha
::DateUtils
qw( dt_from_string output_pref );
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 my $rs = Koha
::Database
->new->schema->resultset('Discharge');
32 return $rs->search( $values )->count;
35 sub can_be_discharged
{
37 return unless $params->{borrowernumber
};
39 my $issues = GetPendingIssues
( $params->{borrowernumber
} );
50 return unless $params->{borrowernumber
};
51 my $borrowernumber = $params->{borrowernumber
};
53 my $restricted = Koha
::Patrons
->find( $borrowernumber )->is_debarred;
54 my $validated = get_validated
({borrowernumber
=> $borrowernumber});
56 if ($restricted && $validated) {
65 my $borrowernumber = $params->{borrowernumber
};
66 return unless $borrowernumber;
67 return unless can_be_discharged
({ borrowernumber
=> $borrowernumber });
69 my $rs = Koha
::Database
->new->schema->resultset('Discharge');
71 borrower
=> $borrowernumber,
72 needed
=> dt_from_string
,
78 my $borrowernumber = $params->{borrowernumber
};
79 return unless $borrowernumber and can_be_discharged
( { borrowernumber
=> $borrowernumber } );
82 my $patron = Koha
::Patrons
->find( $borrowernumber );
83 my $holds = $patron->holds;
84 while ( my $hold = $holds->next ) {
85 CancelReserve
( { reserve_id
=> $hold->reserve_id } );
89 Koha
::Patron
::Debarments
::AddDebarment
({
90 borrowernumber
=> $borrowernumber,
94 # Generate the discharge
95 my $rs = Koha
::Database
->new->schema->resultset('Discharge');
96 my $discharge = $rs->search({ borrower
=> $borrowernumber }, { order_by
=> { -desc
=> 'needed' }, rows
=> 1 });
97 if( $discharge->count > 0 ) {
98 $discharge->update({ validated
=> dt_from_string
});
102 borrower
=> $borrowernumber,
103 validated
=> dt_from_string
,
108 sub generate_as_pdf
{
110 return unless $params->{borrowernumber
};
112 my $patron = Koha
::Patrons
->find( $params->{borrowernumber
} );
113 my $letter = C4
::Letters
::GetPreparedLetter
(
115 letter_code
=> 'DISCHARGE',
116 lang
=> $patron->lang,
117 tables
=> { borrowers
=> $params->{borrowernumber
}, branches
=> $params->{'branchcode'}, },
120 my $today = output_pref
( dt_from_string
() );
121 $letter->{'title'} =~ s/<<today>>/$today/g;
122 $letter->{'content'} =~ s/<<today>>/$today/g;
124 my $tmpl = C4
::Templates
::gettemplate
('batch/print-notices.tt', 'intranet', new CGI
);
126 stylesheet
=> C4
::Context
->preference("NoticeCSS"),
128 messages
=> [$letter],
131 my $html_path = tmpnam
() . '.html';
132 my $pdf_path = tmpnam
() . '.pdf';
133 my $html_content = $tmpl->output;
134 open my $html_fh, '>:encoding(utf8)', $html_path;
135 say $html_fh $html_content;
137 my $output = eval { require PDF
::FromHTML
; return; } || $@
;
138 if ($output && $params->{testing
}) {
146 my $pdf = PDF
::FromHTML
->new( encoding
=> 'utf-8' );
147 $pdf->load_file( $html_path );
149 $pdf->write_file( $pdf_path );
157 my $branchcode = $params->{branchcode
};
158 my $borrowernumber = $params->{borrowernumber
};
161 'me.needed' => { '!=', undef },
162 'me.validated' => undef,
163 ( defined $borrowernumber ?
( 'me.borrower' => $borrowernumber ) : () ),
164 ( defined $branchcode ?
( 'borrower.branchcode' => $branchcode ) : () ),
167 my $rs = Koha
::Database
->new->schema->resultset('Discharge');
168 my @rs = $rs->search( $cond, { join => 'borrower' } );
174 my $branchcode = $params->{branchcode
};
175 my $borrowernumber = $params->{borrowernumber
};
178 'me.validated' => { '!=', undef },
179 ( defined $borrowernumber ?
( 'me.borrower' => $borrowernumber ) : () ),
180 ( defined $branchcode ?
( 'borrower.branchcode' => $branchcode ) : () ),
183 my $rs = Koha
::Database
->new->schema->resultset('Discharge');
184 my @rs = $rs->search( $cond, { join => 'borrower' } );