|
Lines 29-35
use DateTime::Duration;
Link Here
|
| 29 |
use Koha::Script -cron; |
29 |
use Koha::Script -cron; |
| 30 |
use C4::Context; |
30 |
use C4::Context; |
| 31 |
use C4::Letters; |
31 |
use C4::Letters; |
| 32 |
use C4::Overdues qw( GetOverdueMessageTransportTypes parse_overdues_letter ); |
32 |
use C4::Overdues qw( parse_overdues_letter ); |
| 33 |
use C4::Log qw( cronlogaction ); |
33 |
use C4::Log qw( cronlogaction ); |
| 34 |
use Koha::Patron::Debarments qw( AddUniqueDebarment ); |
34 |
use Koha::Patron::Debarments qw( AddUniqueDebarment ); |
| 35 |
use Koha::DateUtils qw( dt_from_string output_pref ); |
35 |
use Koha::DateUtils qw( dt_from_string output_pref ); |
|
Lines 489-531
END_SQL
Link Here
|
| 489 |
} |
489 |
} |
| 490 |
my $sth2 = $dbh->prepare($sql2); |
490 |
my $sth2 = $dbh->prepare($sql2); |
| 491 |
|
491 |
|
| 492 |
my $query = "SELECT * FROM overduerules WHERE delay1 IS NOT NULL AND branchcode = ? "; |
492 |
my @categories; |
| 493 |
$query .= " AND categorycode IN (" . join( ',', ('?') x @myborcat ) . ") " if (@myborcat); |
493 |
if (@myborcat) { |
| 494 |
$query .= " AND categorycode NOT IN (" . join( ',', ('?') x @myborcatout ) . ") " if (@myborcatout); |
494 |
@categories = @myborcat; |
| 495 |
|
495 |
} elsif (@myborcatout) { |
| 496 |
my $rqoverduerules = $dbh->prepare($query); |
496 |
@categories = Koha::Patron::Categories->search( { catagorycode => { 'not_in' => \@myborcatout } } ) |
| 497 |
$rqoverduerules->execute( $branchcode, @myborcat, @myborcatout ); |
497 |
->get_column('categorycode'); |
| 498 |
|
498 |
} else { |
| 499 |
# We get default rules if there is no rule for this branch |
499 |
@categories = Koha::Patron::Categories->search()->get_column('categorycode'); |
| 500 |
if ( $rqoverduerules->rows == 0 ) { |
|
|
| 501 |
$query = "SELECT * FROM overduerules WHERE delay1 IS NOT NULL AND branchcode = '' "; |
| 502 |
$query .= " AND categorycode IN (" . join( ',', ('?') x @myborcat ) . ") " if (@myborcat); |
| 503 |
$query .= " AND categorycode NOT IN (" . join( ',', ('?') x @myborcatout ) . ") " if (@myborcatout); |
| 504 |
|
| 505 |
$rqoverduerules = $dbh->prepare($query); |
| 506 |
$rqoverduerules->execute( @myborcat, @myborcatout ); |
| 507 |
} |
500 |
} |
| 508 |
|
501 |
|
| 509 |
# my $outfile = 'overdues_' . ( $mybranch || $branchcode || 'default' ); |
502 |
for my $category (@categories) { |
| 510 |
while ( my $overdue_rules = $rqoverduerules->fetchrow_hashref ) { |
503 |
my $i = 0; |
| 511 |
PERIOD: foreach my $i ( 1 .. 3 ) { |
504 |
PERIOD: while (1) { |
|
|
505 |
$i++; |
| 506 |
my $j = $i + 1; |
| 507 |
my $overdue_rules = Koha::CirculationRules->get_effective_rules( |
| 508 |
{ |
| 509 |
rules => [ |
| 510 |
"overdue_$i" . '_delay', "overdue_$i" . '_notice', "overdue_$i" . '_mtt', |
| 511 |
"overdue_$i" . '_restrict', "overdue_$j" . '_delay' |
| 512 |
], |
| 513 |
categorycode => $category, |
| 514 |
branchcode => $branchcode |
| 515 |
} |
| 516 |
); |
| 517 |
$verbose and warn "branch '$branchcode', categorycode = $category pass $i\n"; |
| 512 |
|
518 |
|
| 513 |
$verbose and warn "branch '$branchcode', categorycode = $overdue_rules->{categorycode} pass $i\n"; |
519 |
if ( !$overdue_rules->{ "overdue_$i" . '_delay' } ) { |
|
|
520 |
last PERIOD; |
| 521 |
} |
| 514 |
|
522 |
|
| 515 |
my $mindays = $overdue_rules->{"delay$i"}; # the notice will be sent after mindays days (grace period) |
523 |
my $mindays = |
|
|
524 |
$overdue_rules->{ "overdue_$i" . '_delay' }; # the notice will be sent after mindays days (grace period) |
| 516 |
my $maxdays = ( |
525 |
my $maxdays = ( |
| 517 |
$overdue_rules->{ "delay" . ( $i + 1 ) } |
526 |
$overdue_rules->{ "overdue_$j" . '_delay' } |
| 518 |
? $overdue_rules->{ "delay" . ( $i + 1 ) } - 1 |
527 |
? $overdue_rules->{ "overdue_$j" . '_delay' } - 1 |
| 519 |
: ($MAX) |
528 |
: ($MAX) |
| 520 |
); # issues being more than maxdays late are managed somewhere else. (borrower probably suspended) |
529 |
); # issues being more than maxdays late are managed somewhere else. (borrower probably suspended) |
| 521 |
|
530 |
|
| 522 |
next unless defined $mindays; |
531 |
next unless defined $mindays; |
| 523 |
|
532 |
|
| 524 |
if ( !$overdue_rules->{"letter$i"} ) { |
533 |
if ( !$overdue_rules->{ "overdue_$i" . '_notice' } ) { |
| 525 |
$verbose and warn sprintf "No letter code found for pass %s\n", $i; |
534 |
$verbose and warn sprintf "No letter code found for pass %s\n", $i; |
| 526 |
next PERIOD; |
535 |
next PERIOD; |
| 527 |
} |
536 |
} |
| 528 |
$verbose and warn sprintf "Using letter code '%s' for pass %s\n", $overdue_rules->{"letter$i"}, $i; |
537 |
$verbose |
|
|
538 |
and warn sprintf "Using letter code '%s' for pass %s\n", $overdue_rules->{ "overdue_$i" . '_notice' }, |
| 539 |
$i; |
| 529 |
|
540 |
|
| 530 |
# $letter->{'content'} is the text of the mail that is sent. |
541 |
# $letter->{'content'} is the text of the mail that is sent. |
| 531 |
# this text contains fields that are replaced by their value. Those fields must be written between brackets |
542 |
# this text contains fields that are replaced by their value. Those fields must be written between brackets |
|
Lines 551-559
END_SQL
Link Here
|
| 551 |
} |
562 |
} |
| 552 |
push @borrower_parameters, $branchcode; |
563 |
push @borrower_parameters, $branchcode; |
| 553 |
} |
564 |
} |
| 554 |
if ( $overdue_rules->{categorycode} ) { |
565 |
if ($category) { |
| 555 |
$borrower_sql .= ' AND borrowers.categorycode=? '; |
566 |
$borrower_sql .= ' AND borrowers.categorycode=? '; |
| 556 |
push @borrower_parameters, $overdue_rules->{categorycode}; |
567 |
push @borrower_parameters, $category; |
| 557 |
} |
568 |
} |
| 558 |
$borrower_sql .= ' AND categories.overduenoticerequired=1 ORDER BY issues.borrowernumber'; |
569 |
$borrower_sql .= ' AND categories.overduenoticerequired=1 ORDER BY issues.borrowernumber'; |
| 559 |
|
570 |
|
|
Lines 565-571
END_SQL
Link Here
|
| 565 |
warn sprintf "--------Borrower SQL------\n"; |
576 |
warn sprintf "--------Borrower SQL------\n"; |
| 566 |
warn $borrower_sql |
577 |
warn $borrower_sql |
| 567 |
. "\n $branchcode | " |
578 |
. "\n $branchcode | " |
| 568 |
. $overdue_rules->{'categorycode'} |
579 |
. $category |
| 569 |
. "\n ($mindays, $maxdays, " |
580 |
. "\n ($mindays, $maxdays, " |
| 570 |
. $date_to_run->datetime() . ")\n"; |
581 |
. $date_to_run->datetime() . ")\n"; |
| 571 |
warn sprintf "--------------------------\n"; |
582 |
warn sprintf "--------------------------\n"; |
|
Lines 637-657
END_SQL
Link Here
|
| 637 |
my $letter = Koha::Notice::Templates->find_effective_template( |
648 |
my $letter = Koha::Notice::Templates->find_effective_template( |
| 638 |
{ |
649 |
{ |
| 639 |
module => 'circulation', |
650 |
module => 'circulation', |
| 640 |
code => $overdue_rules->{"letter$i"}, |
651 |
code => $overdue_rules->{ "overdue_$i" . '_notice' }, |
| 641 |
branchcode => $branchcode, |
652 |
branchcode => $branchcode, |
| 642 |
lang => $patron->lang |
653 |
lang => $patron->lang |
| 643 |
} |
654 |
} |
| 644 |
); |
655 |
); |
| 645 |
|
656 |
|
| 646 |
unless ($letter) { |
657 |
unless ($letter) { |
| 647 |
$verbose and warn qq|Message '$overdue_rules->{"letter$i"}' content not found|; |
658 |
$verbose and warn qq|Message '$overdue_rules->{"overdue_$i"."_notice"}' content not found|; |
| 648 |
|
659 |
|
| 649 |
# might as well skip while PERIOD, no other borrowers are going to work. |
660 |
# might as well skip while PERIOD, no other borrowers are going to work. |
| 650 |
# FIXME : Does this mean a letter must be defined in order to trigger a debar ? |
661 |
# FIXME : Does this mean a letter must be defined in order to trigger a debar ? |
| 651 |
next PERIOD; |
662 |
next PERIOD; |
| 652 |
} |
663 |
} |
| 653 |
|
664 |
|
| 654 |
if ( $overdue_rules->{"debarred$i"} ) { |
665 |
if ( $overdue_rules->{ "overdue_$i" . '_restrict' } ) { |
| 655 |
|
666 |
|
| 656 |
#action taken is debarring |
667 |
#action taken is debarring |
| 657 |
AddUniqueDebarment( |
668 |
AddUniqueDebarment( |
|
Lines 715-725
END_SQL
Link Here
|
| 715 |
} |
726 |
} |
| 716 |
$sth2->finish; |
727 |
$sth2->finish; |
| 717 |
|
728 |
|
| 718 |
my @message_transport_types = |
729 |
my @message_transport_types = split( /,/, $overdue_rules->{ "overdue_$i" . '_mtt' } ); |
| 719 |
@{ GetOverdueMessageTransportTypes( $branchcode, $overdue_rules->{categorycode}, $i ) }; |
|
|
| 720 |
@message_transport_types = |
| 721 |
@{ GetOverdueMessageTransportTypes( q{}, $overdue_rules->{categorycode}, $i ) } |
| 722 |
unless @message_transport_types; |
| 723 |
|
730 |
|
| 724 |
my $print_sent = 0; # A print notice is not yet sent for this patron |
731 |
my $print_sent = 0; # A print notice is not yet sent for this patron |
| 725 |
for my $mtt (@message_transport_types) { |
732 |
for my $mtt (@message_transport_types) { |
|
Lines 739-745
END_SQL
Link Here
|
| 739 |
my $letter_exists = Koha::Notice::Templates->find_effective_template( |
746 |
my $letter_exists = Koha::Notice::Templates->find_effective_template( |
| 740 |
{ |
747 |
{ |
| 741 |
module => 'circulation', |
748 |
module => 'circulation', |
| 742 |
code => $overdue_rules->{"letter$i"}, |
749 |
code => $overdue_rules->{ "overdue_$i" . '_notice' }, |
| 743 |
message_transport_type => $effective_mtt, |
750 |
message_transport_type => $effective_mtt, |
| 744 |
branchcode => $branchcode, |
751 |
branchcode => $branchcode, |
| 745 |
lang => $patron->lang |
752 |
lang => $patron->lang |
|
Lines 748-754
END_SQL
Link Here
|
| 748 |
|
755 |
|
| 749 |
my $letter = parse_overdues_letter( |
756 |
my $letter = parse_overdues_letter( |
| 750 |
{ |
757 |
{ |
| 751 |
letter_code => $overdue_rules->{"letter$i"}, |
758 |
letter_code => $overdue_rules->{ "overdue_$i" . '_notice' }, |
| 752 |
borrowernumber => $borrowernumber, |
759 |
borrowernumber => $borrowernumber, |
| 753 |
branchcode => $branchcode, |
760 |
branchcode => $branchcode, |
| 754 |
items => \@items, |
761 |
items => \@items, |
|
Lines 764-770
END_SQL
Link Here
|
| 764 |
} |
771 |
} |
| 765 |
); |
772 |
); |
| 766 |
unless ( $letter && $letter->{content} ) { |
773 |
unless ( $letter && $letter->{content} ) { |
| 767 |
$verbose and warn qq|Message '$overdue_rules->{"letter$i"}' content not found|; |
774 |
$verbose and warn qq|Message '$overdue_rules->{"overdue_$i"."_notice"}' content not found|; |
| 768 |
|
775 |
|
| 769 |
# this transport doesn't have a configured notice, so try another |
776 |
# this transport doesn't have a configured notice, so try another |
| 770 |
next; |
777 |
next; |
| 771 |
- |
|
|