From 92b966a87a74d58e5fdf5a252365175cc2397e9f Mon Sep 17 00:00:00 2001 From: Martha Fuerst Date: Wed, 8 Aug 2018 12:51:39 -0400 Subject: [PATCH] Bug 21180: Allow Talking Tech outbound script to limit based on patron home library branchcode A library system has requested the ability to limit which patrons are sent to Itivia for phone notices. Test Plan: 1) Enable phone notices for two patrons with overdues 2) Run the misc/cronjobs/thirdparty/TalkingTech_itiva_outbound.pl with the new --patron-branchcode option 3) Note only the patron whose homebranch you specified is in the output file Signed-off-by: Kyle M Hall Signed-off-by: Christopher Brannon Signed-off-by: Tomas Cohen Arazi Signed-off-by: Martin Renvoize (cherry picked from commit 3cb66af150171abf44868f8b0bdca8f70132e4f0) Signed-off-by: Fridolin Somers --- .../thirdparty/TalkingTech_itiva_outbound.pl | 50 +++++++++++++++---- 1 file changed, 40 insertions(+), 10 deletions(-) diff --git a/misc/cronjobs/thirdparty/TalkingTech_itiva_outbound.pl b/misc/cronjobs/thirdparty/TalkingTech_itiva_outbound.pl index 98a3d1007f..220793456d 100755 --- a/misc/cronjobs/thirdparty/TalkingTech_itiva_outbound.pl +++ b/misc/cronjobs/thirdparty/TalkingTech_itiva_outbound.pl @@ -39,6 +39,7 @@ use C4::Overdues; use Koha::Calendar; use Koha::DateUtils; use Koha::Patrons; +use Koha::Libraries; sub usage { pod2usage( -verbose => 2 ); @@ -60,6 +61,7 @@ my $library_code; my $help; my $outfile; my $skip_patrons_with_email; +my $patron_branchcode; # maps to convert I-tiva terms to Koha terms my $type_module_map = { @@ -75,14 +77,15 @@ my $type_notice_map = { }; GetOptions( - 'o|output:s' => \$outfile, - 'v' => \$verbose, - 'lang:s' => \$language, - 'type:s' => \@types, - 'w|waiting-hold-day:s' => \@holds_waiting_days_to_call, - 'c|code|library-code:s' => \$library_code, + 'o|output:s' => \$outfile, + 'v' => \$verbose, + 'lang:s' => \$language, + 'type:s' => \@types, + 'w|waiting-hold-day:s' => \@holds_waiting_days_to_call, + 'c|code|library-code:s' => \$library_code, 's|skip-patrons-with-email' => \$skip_patrons_with_email, - 'help|h' => \$help, + 'pb|patron-branchcode:s' => \$patron_branchcode, + 'h|help' => \$help, ); $language = uc($language); @@ -90,6 +93,11 @@ $library_code ||= ''; pod2usage( -verbose => 1 ) if $help; +if ($patron_branchcode) { + die("Invalid branchcode '$patron_branchcode' passed in -pb --patron-branchcode parameter") + unless Koha::Libraries->search( { branchcode => $patron_branchcode } )->count; +} + # output log or STDOUT my $OUT; if ( defined $outfile ) { @@ -109,11 +117,11 @@ foreach my $type (@types) { my @loop; if ( $type eq 'OVERDUE' ) { - @loop = GetOverdueIssues(); + @loop = GetOverdueIssues( $patron_branchcode ); } elsif ( $type eq 'PREOVERDUE' ) { - @loop = GetPredueIssues(); + @loop = GetPredueIssues( $patron_branchcode ); } elsif ( $type eq 'RESERVE' ) { - @loop = GetWaitingHolds(); + @loop = GetWaitingHolds( $patron_branchcode ); } else { print "Unknown or unsupported message type $type; skipping...\n" if ( defined $verbose ); @@ -215,11 +223,22 @@ consortium purposes and apply library specific settings, such as prompts, to those notices. This field can be blank if all messages are from a single library. +=item B<--patron-branchcode> B<--pb> + +OPTIONAL + +Limits the the patrons to generate notices for based on the patron's home library. +Items and holds from other libraries will still be included for the given patron. + =back =cut sub GetOverdueIssues { + my ( $patron_branchcode ) = @_; + + my $patron_branchcode_filter = $patron_branchcode ? "AND borrowers.branchcode = '$patron_branchcode'" : q{}; + my $query = "SELECT borrowers.borrowernumber, borrowers.cardnumber, borrowers.title as patron_title, borrowers.firstname, borrowers.surname, borrowers.phone, borrowers.email, borrowers.branchcode, biblio.biblionumber, biblio.title, items.barcode, issues.date_due, max(overduerules.branchcode) as rulebranch, TO_DAYS(NOW())-TO_DAYS(date_due) as daysoverdue, delay1, delay2, delay3, @@ -235,6 +254,7 @@ sub GetOverdueIssues { AND ( (TO_DAYS(NOW())-TO_DAYS(date_due) ) = delay1 OR (TO_DAYS(NOW())-TO_DAYS(date_due) ) = delay2 OR (TO_DAYS(NOW())-TO_DAYS(date_due) ) = delay3 ) + $patron_branchcode_filter GROUP BY items.itemnumber "; my $sth = $dbh->prepare($query); @@ -257,6 +277,10 @@ sub GetOverdueIssues { } sub GetPredueIssues { + my ( $patron_branchcode ) = @_; + + my $patron_branchcode_filter = $patron_branchcode ? "AND borrowers.branchcode = '$patron_branchcode'" : q{}; + my $query = "SELECT borrowers.borrowernumber, borrowers.cardnumber, borrowers.title as patron_title, borrowers.firstname, borrowers.surname, borrowers.phone, borrowers.email, borrowers.branchcode, biblio.biblionumber, biblio.title, items.barcode, issues.date_due, issues.branchcode as site, branches.branchname as site_name @@ -270,6 +294,7 @@ sub GetPredueIssues { WHERE ( TO_DAYS( date_due ) - TO_DAYS( NOW() ) ) = days_in_advance AND message_transport_type = 'phone' AND message_name = 'Advance_Notice' + $patron_branchcode_filter "; my $sth = $dbh->prepare($query); $sth->execute(); @@ -282,6 +307,10 @@ sub GetPredueIssues { } sub GetWaitingHolds { + my ( $patron_branchcode ) = @_; + + my $patron_branchcode_filter = $patron_branchcode ? "AND borrowers.branchcode = '$patron_branchcode'" : q{}; + my $query = "SELECT borrowers.borrowernumber, borrowers.cardnumber, borrowers.title as patron_title, borrowers.firstname, borrowers.surname, borrowers.phone, borrowers.email, borrowers.branchcode, biblio.biblionumber, biblio.title, items.barcode, reserves.waitingdate, reserves.branchcode AS site, branches.branchname AS site_name, @@ -296,6 +325,7 @@ sub GetWaitingHolds { WHERE ( reserves.found = 'W' ) AND message_transport_type = 'phone' AND message_name = 'Hold_Filled' + $patron_branchcode_filter "; my $pickupdelay = C4::Context->preference("ReservesMaxPickUpDelay"); my $sth = $dbh->prepare($query); -- 2.39.5