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

(-)a/misc/cronjobs/overdue_notices.pl (-6 / +15 lines)
Lines 463-468 elsif ( defined $text_filename ) { Link Here
463
463
464
my %already_queued;
464
my %already_queued;
465
my %seen = map { $_ => 1 } @branches;
465
my %seen = map { $_ => 1 } @branches;
466
467
# Work through branches
466
foreach my $branchcode (@branches) {
468
foreach my $branchcode (@branches) {
467
    my $calendar;
469
    my $calendar;
468
    if ( C4::Context->preference('OverdueNoticeCalendar') ) {
470
    if ( C4::Context->preference('OverdueNoticeCalendar') ) {
Lines 520-536 END_SQL Link Here
520
        @itemtypes = Koha::ItemTypes->search()->get_column('itemtype');
522
        @itemtypes = Koha::ItemTypes->search()->get_column('itemtype');
521
    }
523
    }
522
524
525
    # Work through category and itemtype combinations to catch overdue rules for each
523
    for my $category (@categories) {
526
    for my $category (@categories) {
524
        for my $itemtype (@itemtypes) {
527
        for my $itemtype (@itemtypes) {
525
            my $i = 0;
528
            my $i = 0;
529
            # Work through triggers until we run out of rules
526
            PERIOD: while (1) {
530
            PERIOD: while (1) {
527
                $i++;
531
                $i++;
528
                my $j = $i + 1;
532
                my $ii = $i + 1;
529
                my $overdue_rules = Koha::CirculationRules->get_effective_rules(
533
                my $overdue_rules = Koha::CirculationRules->get_effective_rules(
530
                    {
534
                    {
531
                        rules => [
535
                        rules => [
532
                            "overdue_$i" . '_delay',    "overdue_$i" . '_notice', "overdue_$i" . '_mtt',
536
                            "overdue_$i" . '_delay',    "overdue_$i" . '_notice', "overdue_$i" . '_mtt',
533
                            "overdue_$i" . '_restrict', "overdue_$j" . '_delay'
537
                            "overdue_$i" . '_restrict', "overdue_$ii" . '_delay'
534
                        ],
538
                        ],
535
                        categorycode => $category,
539
                        categorycode => $category,
536
                        branchcode   => $branchcode,
540
                        branchcode   => $branchcode,
Lines 546-553 END_SQL Link Here
546
                my $mindays =
550
                my $mindays =
547
                    $overdue_rules->{ "overdue_$i" . '_delay' }; # the notice will be sent after mindays days (grace period)
551
                    $overdue_rules->{ "overdue_$i" . '_delay' }; # the notice will be sent after mindays days (grace period)
548
                my $maxdays = (
552
                my $maxdays = (
549
                      $overdue_rules->{ "overdue_$j" . '_delay' }
553
                      $overdue_rules->{ "overdue_$ii" . '_delay' }
550
                    ? $overdue_rules->{ "overdue_$j" . '_delay' } - 1
554
                    ? $overdue_rules->{ "overdue_$ii" . '_delay' } - 1
551
                    : ($MAX)
555
                    : ($MAX)
552
                );    # issues being more than maxdays late are managed somewhere else. (borrower probably suspended)
556
                );    # issues being more than maxdays late are managed somewhere else. (borrower probably suspended)
553
557
Lines 565-570 END_SQL Link Here
565
            # itemcount is interpreted here as the number of items in the overdue range defined by the current notice or all overdues < max if(-list-all).
569
            # itemcount is interpreted here as the number of items in the overdue range defined by the current notice or all overdues < max if(-list-all).
566
                # <date> <itemcount> <firstname> <lastname> <address1> <address2> <address3> <city> <postcode> <country>
570
                # <date> <itemcount> <firstname> <lastname> <address1> <address2> <address3> <city> <postcode> <country>
567
571
572
                # Fetch all overdue issues where the item is not lost and the borrower category wants overdue notices grouping by borrower
568
                my $borrower_sql = <<"END_SQL";
573
                my $borrower_sql = <<"END_SQL";
569
SELECT issues.borrowernumber, firstname, surname, address, address2, city, zipcode, country, email, emailpro, B_email, smsalertnumber, phone, cardnumber, date_due
574
SELECT issues.borrowernumber, firstname, surname, address, address2, city, zipcode, country, email, emailpro, B_email, smsalertnumber, phone, cardnumber, date_due
570
FROM   issues,borrowers,categories,items
575
FROM   issues,borrowers,categories,items
Lines 589-595 END_SQL Link Here
589
                }
594
                }
590
                $borrower_sql .= '  AND categories.overduenoticerequired=1 ORDER BY issues.borrowernumber';
595
                $borrower_sql .= '  AND categories.overduenoticerequired=1 ORDER BY issues.borrowernumber';
591
596
592
                # $sth gets borrower info iff at least one overdue item has triggered the overdue action.
597
                # $sth gets borrower info if at least one overdue item has triggered the overdue action.
593
                my $sth = $dbh->prepare($borrower_sql);
598
                my $sth = $dbh->prepare($borrower_sql);
594
                $sth->execute(@borrower_parameters);
599
                $sth->execute(@borrower_parameters);
595
600
Lines 600-605 END_SQL Link Here
600
                }
605
                }
601
                $verbose and warn sprintf "Found %s borrowers with overdues\n", $sth->rows;
606
                $verbose and warn sprintf "Found %s borrowers with overdues\n", $sth->rows;
602
                my $borrowernumber;
607
                my $borrowernumber;
608
                # Iterate over all overdue issues
603
                while ( my $data = $sth->fetchrow_hashref ) {
609
                while ( my $data = $sth->fetchrow_hashref ) {
604
610
605
                    # check the borrower has at least one item that matches
611
                    # check the borrower has at least one item that matches
Lines 633-639 END_SQL Link Here
633
                        next;
639
                        next;
634
                    }
640
                    }
635
                    $borrowernumber = $data->{'borrowernumber'};
641
                    $borrowernumber = $data->{'borrowernumber'};
642
643
                    # Skip duplicate borrowers as we'll have already handled them
636
                    next if ( $patron_homelibrary && $already_queued{"$borrowernumber$i"} );
644
                    next if ( $patron_homelibrary && $already_queued{"$borrowernumber$i"} );
645
637
                    my $borr = sprintf( "%s%s%s (%s)",
646
                    my $borr = sprintf( "%s%s%s (%s)",
638
                        $data->{'surname'} || '',
647
                        $data->{'surname'} || '',
639
                        $data->{'firstname'} && $data->{'surname'} ? ', ' : '',
648
                        $data->{'firstname'} && $data->{'surname'} ? ', ' : '',
Lines 700-705 END_SQL Link Here
700
709
701
                    my $j = 0;
710
                    my $j = 0;
702
                    my $exceededPrintNoticesMaxLines = 0;
711
                    my $exceededPrintNoticesMaxLines = 0;
712
                    # Get each overdue item for this patron
703
                    while ( my $item_info = $sth2->fetchrow_hashref() ) {
713
                    while ( my $item_info = $sth2->fetchrow_hashref() ) {
704
                        if ( C4::Context->preference('OverdueNoticeCalendar') ) {
714
                        if ( C4::Context->preference('OverdueNoticeCalendar') ) {
705
                            $days_between =
715
                            $days_between =
706
- 

Return to bug 10190