Lines 19-36
Link Here
|
19 |
# with Koha; if not, write to the Free Software Foundation, Inc., |
19 |
# with Koha; if not, write to the Free Software Foundation, Inc., |
20 |
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
20 |
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
21 |
|
21 |
|
22 |
use Modern::Perl; |
22 |
use strict; |
|
|
23 |
use warnings; |
23 |
|
24 |
|
24 |
use CGI; |
25 |
use CGI; |
25 |
use JSON qw(to_json); |
26 |
use JSON qw(to_json); |
26 |
|
27 |
|
27 |
use C4::Auth qw(check_cookie_auth); |
28 |
use C4::Auth qw(check_cookie_auth); |
28 |
use C4::Biblio qw(GetMarcBiblio GetFrameworkCode GetRecordValue ); |
29 |
use C4::Biblio qw(GetMarcBiblio GetFrameworkCode GetRecordValue ); |
29 |
use C4::Charset; |
|
|
30 |
use C4::Circulation qw(GetIssuingCharges CanBookBeRenewed GetRenewCount); |
30 |
use C4::Circulation qw(GetIssuingCharges CanBookBeRenewed GetRenewCount); |
31 |
use C4::Context; |
31 |
use C4::Context; |
32 |
|
32 |
|
33 |
use Koha::Database; |
|
|
34 |
use Koha::DateUtils; |
33 |
use Koha::DateUtils; |
35 |
|
34 |
|
36 |
my $input = new CGI; |
35 |
my $input = new CGI; |
Lines 43-128
if ( $auth_status ne "ok" ) {
Link Here
|
43 |
exit 0; |
42 |
exit 0; |
44 |
} |
43 |
} |
45 |
|
44 |
|
46 |
my $schema = Koha::Database->new()->schema(); |
|
|
47 |
|
48 |
my @sort_columns = qw/date_due title itype issuedate branchcode itemcallnumber/; |
45 |
my @sort_columns = qw/date_due title itype issuedate branchcode itemcallnumber/; |
49 |
|
46 |
|
50 |
my @borrowernumber = $input->param('borrowernumber'); |
47 |
my @borrowernumber = $input->param('borrowernumber'); |
51 |
my $offset = $input->param('iDisplayStart'); |
48 |
my $offset = $input->param('iDisplayStart'); |
52 |
my $results_per_page = $input->param('iDisplayLength'); |
49 |
my $results_per_page = $input->param('iDisplayLength') || -1; |
53 |
my $sorting_column = $sort_columns[ $input->param('iSortCol_0') ] || 'issuedate'; |
50 |
my $sorting_column = $sort_columns[ $input->param('iSortCol_0') ] |
54 |
my $sorting_direction = $input->param('sSortDir_0') || 'desc'; |
51 |
|| 'issuedate'; |
|
|
52 |
my $sorting_direction = $input->param('sSortDir_0') eq 'asc' ? 'asc' : 'desc'; |
55 |
|
53 |
|
56 |
$results_per_page = undef if ( $results_per_page == -1 ); |
54 |
$results_per_page = undef if ( $results_per_page == -1 ); |
57 |
|
55 |
|
58 |
binmode STDOUT, ":encoding(UTF-8)"; |
56 |
binmode STDOUT, ":encoding(UTF-8)"; |
59 |
print $input->header( -type => 'text/plain', -charset => 'UTF-8' ); |
57 |
print $input->header( -type => 'text/plain', -charset => 'UTF-8' ); |
60 |
|
58 |
|
61 |
my $checkouts_rs = $schema->resultset('Issue')->search( |
59 |
my @parameters; |
62 |
{ borrowernumber => \@borrowernumber }, |
60 |
my $sql = ' |
63 |
{ |
61 |
SELECT |
64 |
prefetch => { 'item' => 'biblio' }, |
62 |
issuedate, |
65 |
order_by => { "-$sorting_direction" => $sorting_column } |
63 |
date_due, |
66 |
} |
64 |
|
67 |
); |
65 |
biblionumber, |
|
|
66 |
biblio.title, |
67 |
author, |
68 |
|
69 |
itemnumber, |
70 |
barcode, |
71 |
itemnotes, |
72 |
itemcallnumber, |
73 |
replacementprice, |
74 |
|
75 |
issues.branchcode, |
76 |
branchname, |
77 |
|
78 |
itype, |
79 |
itemtype, |
80 |
|
81 |
borrowernumber, |
82 |
surname, |
83 |
firstname, |
84 |
cardnumber |
85 |
FROM issues |
86 |
LEFT JOIN items USING ( itemnumber ) |
87 |
LEFT JOIN biblio USING ( biblionumber ) |
88 |
LEFT JOIN biblioitems USING ( biblionumber ) |
89 |
LEFT JOIN borrowers USING ( borrowernumber ) |
90 |
LEFT JOIN branches ON ( issues.branchcode = branches.branchcode ) |
91 |
WHERE borrowernumber |
92 |
'; |
93 |
|
94 |
if ( @borrowernumber == 1 ) { |
95 |
$sql .= '= ?'; |
96 |
} |
97 |
else { |
98 |
$sql = ' IN (' . join( ',', ('?') x @borrowernumber ) . ') '; |
99 |
} |
100 |
push( @parameters, @borrowernumber ); |
68 |
|
101 |
|
69 |
my $borrower; |
102 |
$sql .= " ORDER BY ? $sorting_direction "; |
70 |
my @checkouts; |
103 |
push( @parameters, $sorting_column ); |
71 |
while ( my $c = $checkouts_rs->next() ) { |
|
|
72 |
|
104 |
|
73 |
# No point in fetching this every time if only one borrower |
105 |
my $dbh = C4::Context->dbh(); |
74 |
$borrower = $c->borrower() |
106 |
my $sth = $dbh->prepare($sql); |
75 |
if ( !$borrower || @borrowernumber > 1 ); |
107 |
$sth->execute( @parameters ); |
76 |
|
108 |
|
77 |
my $borrowernumber = $borrower->borrowernumber(); |
109 |
my $item_level_itypes = C4::Context->preference('item-level_itypes'); |
78 |
my $itemnumber = $c->item()->itemnumber(); |
|
|
79 |
my $biblionumber = $c->item()->biblionumber(); |
80 |
|
110 |
|
81 |
my ($charge) = |
111 |
my @checkouts; |
82 |
GetIssuingCharges( $c->itemnumber()->itemnumber(), $borrowernumber ); |
112 |
while ( my $c = $sth->fetchrow_hashref() ) { |
|
|
113 |
my ($charge) = GetIssuingCharges( $c->{itemnumber}, $c->{borrowernumber} ); |
83 |
|
114 |
|
84 |
my ( $can_renew, $can_renew_error ) = |
115 |
my ( $can_renew, $can_renew_error ) = |
85 |
CanBookBeRenewed( $borrowernumber, $itemnumber ); |
116 |
CanBookBeRenewed( $c->{borrowernumber}, $c->{itemnumber} ); |
86 |
|
117 |
|
87 |
my ( $renewals_count, $renewals_allowed, $renewals_remaining ) = |
118 |
my ( $renewals_count, $renewals_allowed, $renewals_remaining ) = |
88 |
GetRenewCount( $borrowernumber, $itemnumber ); |
119 |
GetRenewCount( $c->{borrowernumber}, $c->{itemnumber} ); |
89 |
|
120 |
|
90 |
push( |
121 |
push( |
91 |
@checkouts, |
122 |
@checkouts, |
92 |
{ |
123 |
{ |
93 |
DT_RowId => "$itemnumber-$borrowernumber", |
124 |
DT_RowId => $c->{itemnumber} . '-' . $c->{borrowernumber}, |
94 |
title => $c->item()->biblio()->title(), |
125 |
title => $c->{title}, |
95 |
author => $c->item()->biblio()->author(), |
126 |
author => $c->{author}, |
96 |
barcode => $c->item()->barcode(), |
127 |
barcode => $c->{barcode}, |
97 |
itemtype => $c->item()->effective_itemtype(), |
128 |
itemtype => $item_level_itypes ? $c->{itype} : $c->{itemtype}, |
98 |
itemnotes => $c->item()->itemnotes(), |
129 |
itemnotes => $c->{itemnotes}, |
99 |
branchcode => $c->branchcode(), |
130 |
branchcode => $c->{branchcode}, |
100 |
branchname => $c->branch->branchname(), |
131 |
branchname => $c->{branchname}, |
101 |
itemcallnumber => $c->item()->itemcallnumber() || q{}, |
132 |
itemcallnumber => $c->{itemcallnumber} || q{}, |
102 |
charge => $charge, |
133 |
charge => $charge, |
103 |
price => $c->item->replacementprice() || q{}, |
134 |
price => $c->{replacementprice} || q{}, |
104 |
can_renew => $can_renew, |
135 |
can_renew => $can_renew, |
105 |
can_renew_error => $can_renew_error, |
136 |
can_renew_error => $can_renew_error, |
106 |
itemnumber => $itemnumber, |
137 |
itemnumber => $c->{itemnumber}, |
107 |
borrowernumber => $borrowernumber, |
138 |
borrowernumber => $c->{borrowernumber}, |
108 |
biblionumber => $biblionumber, |
139 |
biblionumber => $c->{biblionumber}, |
109 |
issuedate => $c->issuedate(), |
140 |
issuedate => $c->{issuedate}, |
110 |
date_due => $c->date_due(), |
141 |
date_due => $c->{date_due}, |
111 |
renewals_count => $renewals_count, |
142 |
renewals_count => $renewals_count, |
112 |
renewals_allowed => $renewals_allowed, |
143 |
renewals_allowed => $renewals_allowed, |
113 |
renewals_remaining => $renewals_remaining, |
144 |
renewals_remaining => $renewals_remaining, |
114 |
issuedate_formatted => |
145 |
issuedate_formatted => |
115 |
output_pref( dt_from_string( $c->issuedate() ) ), |
146 |
output_pref( dt_from_string( $c->{issuedate} ) ), |
116 |
date_due_formatted => |
147 |
date_due_formatted => |
117 |
output_pref_due( dt_from_string( $c->date_due() ) ), |
148 |
output_pref_due( dt_from_string( $c->{date_due} ) ), |
118 |
subtitle => GetRecordValue( |
149 |
subtitle => GetRecordValue( |
119 |
'subtitle', GetMarcBiblio($biblionumber), |
150 |
'subtitle', |
120 |
GetFrameworkCode($biblionumber) |
151 |
GetMarcBiblio( $c->{biblionumber} ), |
|
|
152 |
GetFrameworkCode( $c->{biblionumber} ) |
121 |
), |
153 |
), |
122 |
borrower => { |
154 |
borrower => { |
123 |
surname => $borrower->surname(), |
155 |
surname => $c->{surname}, |
124 |
firstname => $borrower->firstname(), |
156 |
firstname => $c->{firstname}, |
125 |
cardnumber => $borrower->cardnumber(), |
157 |
cardnumber => $c->{cardnumber}, |
126 |
} |
158 |
} |
127 |
} |
159 |
} |
128 |
); |
160 |
); |
129 |
- |
|
|