|
Lines 74-80
overdue_notices.pl
Link Here
|
| 74 |
-list-all list all overdues |
74 |
-list-all list all overdues |
| 75 |
-date <yyyy-mm-dd> emulate overdues run for this date |
75 |
-date <yyyy-mm-dd> emulate overdues run for this date |
| 76 |
-email <email_type> type of email that will be used. Can be 'email', 'emailpro' or 'B_email'. Repeatable. |
76 |
-email <email_type> type of email that will be used. Can be 'email', 'emailpro' or 'B_email'. Repeatable. |
| 77 |
|
77 |
-a <branchcode> Create only one message per borrower and delay level including overdues from all branches. |
| 78 |
=head1 OPTIONS |
78 |
=head1 OPTIONS |
| 79 |
|
79 |
|
| 80 |
=over 8 |
80 |
=over 8 |
|
Lines 182-187
use it in order to send overdues on a specific date and not Now. Format: YYYY-MM
Link Here
|
| 182 |
|
182 |
|
| 183 |
Allows to specify which type of email will be used. Can be email, emailpro or B_email. Repeatable. |
183 |
Allows to specify which type of email will be used. Can be email, emailpro or B_email. Repeatable. |
| 184 |
|
184 |
|
|
|
185 |
=item B<-a> | B<--all_in_one> |
| 186 |
|
| 187 |
Create only one message per borrower and for each delay level including overdues from all branches. |
| 188 |
Branchcode value (branches.branchcode) has to be given to choose which sender address will be set. |
| 189 |
It's recommended to use this option only with default notice(s) defined for 'All branches' |
| 190 |
in Notices & Slips and no specific ones. |
| 191 |
|
| 185 |
=back |
192 |
=back |
| 186 |
|
193 |
|
| 187 |
=head1 DESCRIPTION |
194 |
=head1 DESCRIPTION |
|
Lines 303-308
my $itemscontent = join( ',', qw( date_due title barcode author itemnumber ) );
Link Here
|
| 303 |
my @myborcat; |
310 |
my @myborcat; |
| 304 |
my @myborcatout; |
311 |
my @myborcatout; |
| 305 |
my ( $date_input, $today ); |
312 |
my ( $date_input, $today ); |
|
|
313 |
my $all_in_one; |
| 306 |
|
314 |
|
| 307 |
GetOptions( |
315 |
GetOptions( |
| 308 |
'help|?' => \$help, |
316 |
'help|?' => \$help, |
|
Lines 322-327
GetOptions(
Link Here
|
| 322 |
'borcat=s' => \@myborcat, |
330 |
'borcat=s' => \@myborcat, |
| 323 |
'borcatout=s' => \@myborcatout, |
331 |
'borcatout=s' => \@myborcatout, |
| 324 |
'email=s' => \@emails, |
332 |
'email=s' => \@emails, |
|
|
333 |
'a|all_in_one=s' => \$all_in_one, |
| 325 |
) or pod2usage(2); |
334 |
) or pod2usage(2); |
| 326 |
pod2usage(1) if $help; |
335 |
pod2usage(1) if $help; |
| 327 |
pod2usage( -verbose => 2 ) if $man; |
336 |
pod2usage( -verbose => 2 ) if $man; |
|
Lines 443-448
elsif ( defined $text_filename ) {
Link Here
|
| 443 |
} |
452 |
} |
| 444 |
} |
453 |
} |
| 445 |
|
454 |
|
|
|
455 |
my %already_queued; |
| 456 |
my %seen = map { $_ => 1 } @branches; |
| 446 |
foreach my $branchcode (@branches) { |
457 |
foreach my $branchcode (@branches) { |
| 447 |
my $calendar; |
458 |
my $calendar; |
| 448 |
if ( C4::Context->preference('OverdueNoticeCalendar') ) { |
459 |
if ( C4::Context->preference('OverdueNoticeCalendar') ) { |
|
Lines 452-465
foreach my $branchcode (@branches) {
Link Here
|
| 452 |
} |
463 |
} |
| 453 |
} |
464 |
} |
| 454 |
|
465 |
|
| 455 |
my $library = Koha::Libraries->find($branchcode); |
466 |
my $library = $all_in_one ? Koha::Libraries->find($all_in_one) : Koha::Libraries->find($branchcode); |
| 456 |
my $admin_email_address = $library->branchemail |
467 |
my $admin_email_address = $library->branchemail |
| 457 |
|| C4::Context->preference('KohaAdminEmailAddress'); |
468 |
|| C4::Context->preference('KohaAdminEmailAddress'); |
| 458 |
my @output_chunks; # may be sent to mail or stdout or csv file. |
469 |
my @output_chunks; # may be sent to mail or stdout or csv file. |
| 459 |
|
470 |
|
| 460 |
$verbose and warn sprintf "branchcode : '%s' using %s\n", $branchcode, $admin_email_address; |
471 |
$verbose and warn sprintf "branchcode : '%s' using %s\n", $branchcode, $admin_email_address; |
| 461 |
|
472 |
|
| 462 |
my $sth2 = $dbh->prepare( <<"END_SQL" ); |
473 |
my $overduequery = <<"END_SQL"; |
| 463 |
SELECT biblio.*, items.*, issues.*, biblioitems.itemtype, branchname |
474 |
SELECT biblio.*, items.*, issues.*, biblioitems.itemtype, branchname |
| 464 |
FROM issues,items,biblio, biblioitems, branches b |
475 |
FROM issues,items,biblio, biblioitems, branches b |
| 465 |
WHERE items.itemnumber=issues.itemnumber |
476 |
WHERE items.itemnumber=issues.itemnumber |
|
Lines 467-476
SELECT biblio.*, items.*, issues.*, biblioitems.itemtype, branchname
Link Here
|
| 467 |
AND b.branchcode = items.homebranch |
478 |
AND b.branchcode = items.homebranch |
| 468 |
AND biblio.biblionumber = biblioitems.biblionumber |
479 |
AND biblio.biblionumber = biblioitems.biblionumber |
| 469 |
AND issues.borrowernumber = ? |
480 |
AND issues.borrowernumber = ? |
| 470 |
AND issues.branchcode = ? |
|
|
| 471 |
AND items.itemlost = 0 |
481 |
AND items.itemlost = 0 |
| 472 |
AND TO_DAYS($date)-TO_DAYS(issues.date_due) >= 0 |
482 |
AND TO_DAYS($date)-TO_DAYS(issues.date_due) >= 0 |
| 473 |
END_SQL |
483 |
END_SQL |
|
|
484 |
$overduequery.= " AND issues.branchcode = ?" unless $all_in_one; |
| 485 |
my $sth2 = $dbh->prepare($overduequery); |
| 474 |
|
486 |
|
| 475 |
my $query = "SELECT * FROM overduerules WHERE delay1 IS NOT NULL AND branchcode = ? "; |
487 |
my $query = "SELECT * FROM overduerules WHERE delay1 IS NOT NULL AND branchcode = ? "; |
| 476 |
$query .= " AND categorycode IN (".join( ',' , ('?') x @myborcat ).") " if (@myborcat); |
488 |
$query .= " AND categorycode IN (".join( ',' , ('?') x @myborcat ).") " if (@myborcat); |
|
Lines 574-579
END_SQL
Link Here
|
| 574 |
next; |
586 |
next; |
| 575 |
} |
587 |
} |
| 576 |
$borrowernumber = $data->{'borrowernumber'}; |
588 |
$borrowernumber = $data->{'borrowernumber'}; |
|
|
589 |
next if ($all_in_one && $already_queued{"$borrowernumber$i"}); |
| 577 |
my $borr = |
590 |
my $borr = |
| 578 |
$data->{'firstname'} . ', ' |
591 |
$data->{'firstname'} . ', ' |
| 579 |
. $data->{'surname'} . ' (' |
592 |
. $data->{'surname'} . ' (' |
|
Lines 617-623
END_SQL
Link Here
|
| 617 |
) unless $test_mode; |
630 |
) unless $test_mode; |
| 618 |
$verbose and warn "debarring $borr\n"; |
631 |
$verbose and warn "debarring $borr\n"; |
| 619 |
} |
632 |
} |
| 620 |
my @params = ($borrowernumber,$branchcode); |
633 |
my @params = $all_in_one ? ($borrowernumber) : ($borrowernumber, $branchcode); |
| 621 |
$verbose and warn "STH2 PARAMS: borrowernumber = $borrowernumber"; |
634 |
$verbose and warn "STH2 PARAMS: borrowernumber = $borrowernumber"; |
| 622 |
|
635 |
|
| 623 |
$sth2->execute(@params); |
636 |
$sth2->execute(@params); |
|
Lines 663-668
END_SQL
Link Here
|
| 663 |
$exceededPrintNoticesMaxLines = 1; |
676 |
$exceededPrintNoticesMaxLines = 1; |
| 664 |
last; |
677 |
last; |
| 665 |
} |
678 |
} |
|
|
679 |
next if $all_in_one and ! grep {$seen{$item_info->{branchcode}}} @branches; |
| 666 |
$j++; |
680 |
$j++; |
| 667 |
|
681 |
|
| 668 |
$titles .= C4::Letters::get_item_content( { item => $item_info, item_content_fields => \@item_content_fields, dateonly => 1 } ); |
682 |
$titles .= C4::Letters::get_item_content( { item => $item_info, item_content_fields => \@item_content_fields, dateonly => 1 } ); |
|
Lines 773-778
END_SQL
Link Here
|
| 773 |
} |
787 |
} |
| 774 |
} |
788 |
} |
| 775 |
} |
789 |
} |
|
|
790 |
$already_queued{"$borrowernumber$i"} = 1; |
| 776 |
} |
791 |
} |
| 777 |
$sth->finish; |
792 |
$sth->finish; |
| 778 |
} |
793 |
} |
| 779 |
- |
|
|