use DateTime::Format::MySQL;
my $input = new CGI;
-my $order = $input->param('order') || '';
my $showall = $input->param('showall');
my $bornamefilter = $input->param('borname') || '';
my $borcatfilter = $input->param('borcat') || '';
}
);
+our $logged_in_user = Koha::Patrons->find( $loggedinuser ) or die "Not logged in";
+
my $dbh = C4::Context->dbh;
my $req;
my $have_pattr_filter_data = keys(%cgi_attrcode_to_attrvalues) > 0;
my @patron_attr_filter_loop; # array of [ domid cgivalue ismany isclone ordinal code description repeatable authorised_value_category ]
-my @patron_attr_order_loop; # array of { label => $patron_attr_label, value => $patron_attr_order }
-
-my @sort_roots = qw(borrower title barcode date_due);
-push @sort_roots, map {$_ . " desc"} @sort_roots;
-my @order_loop = ({selected => $order ? 0 : 1}); # initial blank row
-foreach (@sort_roots) {
- my $tmpl_name = $_;
- $tmpl_name =~ s/\s/_/g;
- push @order_loop, {
- selected => $order eq $_ ? 1 : 0,
- ordervalue => $_,
- 'order_' . $tmpl_name => 1,
- };
-}
my $sth = $dbh->prepare('SELECT code,description,repeatable,authorised_value_category
FROM borrower_attribute_types
$row->{isclone} = $isclone;
push @patron_attr_filter_loop, { %$row }; # careful: must store a *deep copy* of the modified row
} continue { $isclone = 1, ++$serial }
- foreach my $sortorder ('asc', 'desc') {
- my $ordervalue = "patron_attr_${sortorder}_${code}";
- push @order_loop, {
- selected => $order eq $ordervalue ? 1 : 0,
- ordervalue => $ordervalue,
- label => $row->{description},
- $sortorder => 1,
- };
- }
} continue { ++$ordinal }
-for (@patron_attr_order_loop) { $_->{selected} = 1 if $order eq $_->{value} }
-
-$template->param(ORDER_LOOP => \@order_loop);
my %borrowernumber_to_attributes; # hash of { borrowernumber => { attrcode => [ [val,display], [val,display], ... ] } }
# i.e. val differs from display when attr is an authorised value
patron_attr_header_loop => [ map { { header => $_->{description} } } grep { ! $_->{isclone} } @patron_attr_filter_loop ],
branchfilter => $branchfilter,
homebranchfilter => $homebranchfilter,
- holdingbranchfilter => $homebranchfilter,
+ holdingbranchfilter => $holdingbranchfilter,
borcatloop=> \@borcatloop,
itemtypeloop => \@itemtypeloop,
patron_attr_filter_loop => \@patron_attr_filter_loop,
borname => $bornamefilter,
- order => $order,
showall => $showall,
dateduefrom => $dateduefrom,
datedueto => $datedueto,
borrowers.surname,
borrowers.firstname,
borrowers.streetnumber,
- borrowers.streettype,
+ borrowers.streettype,
borrowers.address,
borrowers.address2,
borrowers.city,
borrowers.phone,
borrowers.email,
borrowers.cardnumber,
+ borrowers.borrowernumber,
+ borrowers.branchcode,
issues.itemnumber,
issues.issuedate,
items.barcode,
items.holdingbranch,
biblio.title,
biblio.author,
- borrowers.borrowernumber,
biblio.biblionumber,
- borrowers.branchcode,
items.itemcallnumber,
items.replacementprice,
- items.enumchron
+ items.enumchron,
+ items.itemnotes_nonpublic
FROM issues
LEFT JOIN borrowers ON (issues.borrowernumber=borrowers.borrowernumber )
LEFT JOIN items ON (issues.itemnumber=items.itemnumber)
my $bnlist = $have_pattr_filter_data ? join(',',keys %borrowernumber_to_attributes) : '';
$strsth =~ s/WHERE 1=1/WHERE 1=1 AND borrowers.borrowernumber IN ($bnlist)/ if $bnlist;
$strsth =~ s/WHERE 1=1/WHERE 0=1/ if $have_pattr_filter_data && !$bnlist; # no match if no borrowers matched patron attrs
- $strsth.=" ORDER BY " . (
- ($order eq "borrower") ? "surname, firstname, date_due" :
- ($order eq "borrower desc") ? "surname desc, firstname desc, date_due" :
- ($order eq "title" or $order eq "title desc") ? "$order, date_due, surname, firstname" :
- ($order eq "barcode" or $order eq "barcode desc") ? "items.$order, date_due, surname, firstname" :
- ($order eq "date_due desc") ? "date_due DESC, surname, firstname" :
- "date_due, surname, firstname" # default sort order
- );
+ $strsth.=" ORDER BY date_due, surname, firstname";
$template->param(sql=>$strsth);
my $sth=$dbh->prepare($strsth);
$sth->execute(
my @displayvalues = map { $_->[1] } @{ $pattrs->{$pattr_filter->{code}} }; # grab second value from each subarray
push @patron_attr_value_loop, { value => join(', ', sort { lc $a cmp lc $b } @displayvalues) };
}
- my $dt = dt_from_string($data->{date_due}, 'sql');
push @overduedata, {
- duedate => output_pref($dt),
+ patron => scalar Koha::Patrons->find( $data->{borrowernumber} ),
+ duedate => $data->{date_due},
borrowernumber => $data->{borrowernumber},
- barcode => $data->{barcode},
cardnumber => $data->{cardnumber},
- itemnum => $data->{itemnumber},
- issuedate => output_pref({ dt => dt_from_string( $data->{issuedate} ), dateonly => 1 }),
borrowertitle => $data->{borrowertitle},
surname => $data->{surname},
firstname => $data->{firstname},
- streetnumber => $data->{streetnumber},
- streettype => $data->{streettype},
- address => $data->{address},
- address2 => $data->{address2},
- city => $data->{city},
- zipcode => $data->{zipcode},
+ streetnumber => $data->{streetnumber},
+ streettype => $data->{streettype},
+ address => $data->{address},
+ address2 => $data->{address2},
+ city => $data->{city},
+ zipcode => $data->{zipcode},
country => $data->{country},
phone => $data->{phone},
email => $data->{email},
+ branchcode => $data->{branchcode},
+ barcode => $data->{barcode},
+ itemnum => $data->{itemnumber},
+ issuedate => output_pref({ dt => dt_from_string( $data->{issuedate} ), dateonly => 1 }),
biblionumber => $data->{biblionumber},
title => $data->{title},
author => $data->{author},
- branchcode => $data->{branchcode},
homebranchcode => $data->{homebranchcode},
holdingbranchcode => $data->{holdingbranchcode},
itemcallnumber => $data->{itemcallnumber},
replacementprice => $data->{replacementprice},
+ itemnotes_nonpublic => $data->{itemnotes_nonpublic},
enumchron => $data->{enumchron},
patron_attr_value_loop => \@patron_attr_value_loop,
};
}
- my ($attrorder) = $order =~ /patron_attr_(.*)$/;
- my $patrorder = '';
- my $sortorder = 'asc';
- if (defined $attrorder) {
- ($sortorder, $patrorder) = split /_/, $attrorder, 2;
- }
- print STDERR ">>> order is $order, patrorder is $patrorder, sortorder is $sortorder\n" if $debug;
-
- if (my @attrtype = grep { $_->{'code'} eq $patrorder } @patron_attr_filter_loop) { # sort by patron attrs perhaps?
- my $ordinal = $attrtype[0]{ordinal};
- print STDERR ">>> sort ordinal is $ordinal\n" if $debug;
-
- sub patronattr_sorter_asc {
- lc $a->{patron_attr_value_loop}[$ordinal]{value}
- cmp
- lc $b->{patron_attr_value_loop}[$ordinal]{value} }
-
- sub patronattr_sorter_des { -patronattr_sorter_asc() }
-
- my $sorter = $sortorder eq 'desc' ? \&patronattr_sorter_des : \&patronattr_sorter_asc;
- @overduedata = sort $sorter @overduedata;
- }
-
if ($op eq 'csv') {
binmode(STDOUT, ":encoding(UTF-8)");
my $csv = build_csv(\@overduedata);
my @lines = ();
# build header ...
- my @keys = qw /duedate title author borrowertitle firstname surname phone barcode email address address2 zipcode city country
- branchcode itemcallnumber biblionumber borrowernumber itemnum issuedate replacementprice streetnumber streettype/;
+ my @keys =
+ qw ( duedate title author borrowertitle firstname surname phone barcode email address address2 zipcode city country
+ branchcode itemcallnumber biblionumber borrowernumber itemnum issuedate replacementprice itemnotes_nonpublic streetnumber streettype);
my $csv = Text::CSV_XS->new();
$csv->combine(@keys);
push @lines, $csv->string();
+ my @private_keys = qw( borrowertitle firstname surname phone email address address2 zipcode city country streetnumber streettype );
# ... and rest of report
foreach my $overdue ( @{ $overdues } ) {
+ unless ( $logged_in_user->can_see_patron_infos( $overdue->{patron} ) ) {
+ $overdue->{$_} = undef for @private_keys;
+ }
push @lines, $csv->string() if $csv->combine(map { $overdue->{$_} } @keys);
}