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

(-)a/misc/cronjobs/overdue_notices.pl (-6 / +18 lines)
Lines 464-469 if ( defined $htmlfilename ) { Link Here
464
464
465
my %already_queued;
465
my %already_queued;
466
my %seen = map { $_ => 1 } @branches;
466
my %seen = map { $_ => 1 } @branches;
467
468
# Work through branches
467
foreach my $branchcode (@branches) {
469
foreach my $branchcode (@branches) {
468
    my $calendar;
470
    my $calendar;
469
    if ( C4::Context->preference('OverdueNoticeCalendar') ) {
471
    if ( C4::Context->preference('OverdueNoticeCalendar') ) {
Lines 521-537 END_SQL Link Here
521
        @itemtypes = Koha::ItemTypes->search()->get_column('itemtype');
523
        @itemtypes = Koha::ItemTypes->search()->get_column('itemtype');
522
    }
524
    }
523
525
526
    # Work through category and itemtype combinations to catch overdue rules for each
524
    for my $category (@categories) {
527
    for my $category (@categories) {
525
        for my $itemtype (@itemtypes) {
528
        for my $itemtype (@itemtypes) {
526
            my $i = 0;
529
            my $i = 0;
530
531
            # Work through triggers until we run out of rules
527
        PERIOD: while (1) {
532
        PERIOD: while (1) {
528
                $i++;
533
                $i++;
529
                my $j             = $i + 1;
534
                my $ii            = $i + 1;
530
                my $overdue_rules = Koha::CirculationRules->get_effective_rules(
535
                my $overdue_rules = Koha::CirculationRules->get_effective_rules(
531
                    {
536
                    {
532
                        rules => [
537
                        rules => [
533
                            "overdue_$i" . '_delay',    "overdue_$i" . '_notice', "overdue_$i" . '_mtt',
538
                            "overdue_$i" . '_delay',    "overdue_$i" . '_notice', "overdue_$i" . '_mtt',
534
                            "overdue_$i" . '_restrict', "overdue_$j" . '_delay'
539
                            "overdue_$i" . '_restrict', "overdue_$ii" . '_delay'
535
                        ],
540
                        ],
536
                        categorycode => $category,
541
                        categorycode => $category,
537
                        branchcode   => $branchcode,
542
                        branchcode   => $branchcode,
Lines 548-555 END_SQL Link Here
548
                    $overdue_rules->{ "overdue_$i" . '_delay' }
553
                    $overdue_rules->{ "overdue_$i" . '_delay' }
549
                    ;    # the notice will be sent after mindays days (grace period)
554
                    ;    # the notice will be sent after mindays days (grace period)
550
                my $maxdays = (
555
                my $maxdays = (
551
                      $overdue_rules->{ "overdue_$j" . '_delay' }
556
                      $overdue_rules->{ "overdue_$ii" . '_delay' }
552
                    ? $overdue_rules->{ "overdue_$j" . '_delay' } - 1
557
                    ? $overdue_rules->{ "overdue_$ii" . '_delay' } - 1
553
                    : ($MAX)
558
                    : ($MAX)
554
                );       # issues being more than maxdays late are managed somewhere else. (borrower probably suspended)
559
                );       # issues being more than maxdays late are managed somewhere else. (borrower probably suspended)
555
560
Lines 569-574 END_SQL Link Here
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).
574
                # 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).
570
                # <date> <itemcount> <firstname> <lastname> <address1> <address2> <address3> <city> <postcode> <country>
575
                # <date> <itemcount> <firstname> <lastname> <address1> <address2> <address3> <city> <postcode> <country>
571
576
577
                # Fetch all overdue issues where the item is not lost and the borrower category wants overdue notices grouping by borrower
572
                my $borrower_sql = <<"END_SQL";
578
                my $borrower_sql = <<"END_SQL";
573
SELECT issues.borrowernumber, firstname, surname, address, address2, city, zipcode, country, email, emailpro, B_email, smsalertnumber, phone, cardnumber, date_due
579
SELECT issues.borrowernumber, firstname, surname, address, address2, city, zipcode, country, email, emailpro, B_email, smsalertnumber, phone, cardnumber, date_due
574
FROM   issues,borrowers,categories,items
580
FROM   issues,borrowers,categories,items
Lines 593-599 END_SQL Link Here
593
                }
599
                }
594
                $borrower_sql .= '  AND categories.overduenoticerequired=1 ORDER BY issues.borrowernumber';
600
                $borrower_sql .= '  AND categories.overduenoticerequired=1 ORDER BY issues.borrowernumber';
595
601
596
                # $sth gets borrower info iff at least one overdue item has triggered the overdue action.
602
                # $sth gets borrower info if at least one overdue item has triggered the overdue action.
597
                my $sth = $dbh->prepare($borrower_sql);
603
                my $sth = $dbh->prepare($borrower_sql);
598
                $sth->execute(@borrower_parameters);
604
                $sth->execute(@borrower_parameters);
599
605
Lines 608-613 END_SQL Link Here
608
                }
614
                }
609
                $verbose and warn sprintf "Found %s borrowers with overdues\n", $sth->rows;
615
                $verbose and warn sprintf "Found %s borrowers with overdues\n", $sth->rows;
610
                my $borrowernumber;
616
                my $borrowernumber;
617
618
                # Iterate over all overdue issues
611
                while ( my $data = $sth->fetchrow_hashref ) {
619
                while ( my $data = $sth->fetchrow_hashref ) {
612
620
613
                    # check the borrower has at least one item that matches
621
                    # check the borrower has at least one item that matches
Lines 640-646 END_SQL Link Here
640
                        next;
648
                        next;
641
                    }
649
                    }
642
                    $borrowernumber = $data->{'borrowernumber'};
650
                    $borrowernumber = $data->{'borrowernumber'};
651
652
                    # Skip duplicate borrowers as we'll have already handled them
643
                    next if ( $patron_homelibrary && $already_queued{"$borrowernumber$i"} );
653
                    next if ( $patron_homelibrary && $already_queued{"$borrowernumber$i"} );
654
644
                    my $borr = sprintf(
655
                    my $borr = sprintf(
645
                        "%s%s%s (%s)",
656
                        "%s%s%s (%s)",
646
                        $data->{'surname'} || '',
657
                        $data->{'surname'} || '',
Lines 708-713 END_SQL Link Here
708
719
709
                    my $j                            = 0;
720
                    my $j                            = 0;
710
                    my $exceededPrintNoticesMaxLines = 0;
721
                    my $exceededPrintNoticesMaxLines = 0;
722
723
                    # Get each overdue item for this patron
711
                    while ( my $item_info = $sth2->fetchrow_hashref() ) {
724
                    while ( my $item_info = $sth2->fetchrow_hashref() ) {
712
                        if ( C4::Context->preference('OverdueNoticeCalendar') ) {
725
                        if ( C4::Context->preference('OverdueNoticeCalendar') ) {
713
                            $days_between =
726
                            $days_between =
714
- 

Return to bug 10190