View | Details | Raw Unified | Return to bug 10190
Collapse All | Expand All

(-)a/misc/cronjobs/overdue_notices.pl (-40 / +46 lines)
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
- 

Return to bug 10190