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 <kyle@bywatersolutions.com>
Signed-off-by: Christopher Brannon <cbrannon@cdalibrary.org>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
This commit is contained in:
Martha Fuerst 2018-08-08 12:51:39 -04:00 committed by Martin Renvoize
parent 77e809ee50
commit 3cb66af150
No known key found for this signature in database
GPG Key ID: 422B469130441A0F
1 changed files with 40 additions and 10 deletions

View File

@ -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);