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 |
- |
|
|