Bug 32740: Add a new option patron home library to OverdueNoticeFrom
This patch add 'patron home library' option to the OverdueNoticeFrom preference. When it's selected notification messages for overdues will be bundled and sent from the borrowing user's home library
To Test
1. Create 3 libraries B1, B2 and B3
1.1. Go to Koha administration, click on Libraries
1.2. Click New library
1.3. Fill the Library Code (ex. B1), Name(ex. B1) and email(ex. b1@test.com) fields.
2. Create a user belonging to B1
2.1. Go to patron module, click on New patron and patron
2.2. Fill the Surname,Card number,Primary email,Card number field and select B1 as Library.
3. Create 2 notices : the first belongs to B2 and the second belong to B3
3.1. Go to Cataloging module and click on new
3.2. field the required field (000 subfield 0, 003 subfield 0, 005 subfield 0, 008 subfield 0, 040 subfield c,245 subfield a, and 942 subfield c )
3.3. Click on save
3.4. In the item form, Select Home library = B2 and Current library = B2 and type a Barcode.
3.5. Repeat 3.1 3.2 3.3 3.4 to create a second notice belong to B3
4. Have (or create) a default notice for all branches in Notices and Slips Module
5. Make sure you connected to branch B2 or Switch to branch B2
6. checkout item I2 (belonging to B2) to the user created in step 2 (specifying as due date the day before (1 day overdue))
7. switch to branch B3
8. checkout item I3 (belonging to B3) to the user created in step 2 (specifying as due date the day before (1 day overdue))
9. make sure you have defined 'Overdue notice/status triggers' for that patron category, ie with Delay=1 so that 'Overdue Notice' is selected and 'Email' is checked.
Note: we have a user belong to B1, two item: I2 belong to B2, I3 belong to B3 and the user has borrowed I2 from B2 and I3 from B3.
10. Test
10.1. Search for OverdueNoticeFrom in System preferences and select item home library
10.2. from cli run 'perl ./misc/cronjobs/overdue_notices.pl'
=> Two new entries will be generated in message_queue DB table, coming from different branches that have the SAME list of overdue items.
=> The sender address is the item home library address for each entry.
11. Apply the patch
12. Search for OverdueNoticeFrom in System preferences
=> There is now 'patron home library' in the options list
13. Select patron home library
14. from cli run 'perl ./misc/cronjobs/overdue_notices.pl'
=> You will see that only one message had been created. Its content shows both B2 and B3 overdue items
=> The sender address matches B1 address (the patron home library).
15. Search for OverdueNoticeFrom in System preferences and select cron
16. from cli run './misc/cronjobs/overdue_notices.pl --frombranch patron-homebranch'
=> you will get the same result at step 14
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
Signed-off-by: Hinemoea Viault <hinemoea.viault@inlibro.com>
Was failing the qa script, so I perltidied the changed lines.
Signed-off-by: Chris Cormack <chris@bigballofwax.co.nz>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
This commit is contained in:
parent
a19f1ffbbd
commit
2f8a24bd58
|
|
@ -397,6 +397,7 @@ Circulation:
|
|||
cron: "command-line option"
|
||||
item-issuebranch: "checkout library"
|
||||
item-homebranch: "item home library"
|
||||
patron-homebranch: "patron home library"
|
||||
- .
|
||||
-
|
||||
- Include up to
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@
|
|||
use Modern::Perl;
|
||||
|
||||
use Getopt::Long qw( GetOptions );
|
||||
use Pod::Usage qw( pod2usage );
|
||||
use Pod::Usage qw( pod2usage );
|
||||
use Text::CSV_XS;
|
||||
use DateTime;
|
||||
use DateTime::Duration;
|
||||
|
|
@ -69,7 +69,7 @@ overdue_notices.pl
|
|||
--date <yyyy-mm-dd> Emulate overdues run for this date.
|
||||
--email <email_type> Type of email that will be used.
|
||||
Can be 'email', 'emailpro' or 'B_email'. Repeatable.
|
||||
--frombranch Organize and send overdue notices by home library (item-homebranch) or checkout library (item-issuebranch).
|
||||
--frombranch Organize and send overdue notices by home library (item-homebranch) or checkout library (item-issuebranch) or patron home library (patron-homebranch).
|
||||
This option is only used, if the OverdueNoticeFrom system preference is set to 'command-line option'.
|
||||
Defaults to item-issuebranch.
|
||||
|
||||
|
|
@ -184,7 +184,7 @@ Allows to specify which type of email will be used. Can be email, emailpro or B_
|
|||
|
||||
=item B<--frombranch>
|
||||
|
||||
Organize overdue notices either by checkout library (item-issuebranch) or item home library (item-homebranch).
|
||||
Organize overdue notices either by checkout library (item-issuebranch) or item home library (item-homebranch) or patron home library (patron-homebranch).
|
||||
This option is only used, if the OverdueNoticeFrom system preference is set to use 'command-line option'.
|
||||
Defaults to checkout library (item-issuebranch).
|
||||
|
||||
|
|
@ -341,11 +341,14 @@ if ( defined $csvfilename && $csvfilename =~ /^-/ ) {
|
|||
warn qq(using "$csvfilename" as filename, that seems odd);
|
||||
}
|
||||
|
||||
die "--frombranch takes item-homebranch or item-issuebranch only"
|
||||
die "--frombranch takes item-homebranch or item-issuebranch or patron-homebranch only"
|
||||
unless ( $frombranch eq 'item-issuebranch'
|
||||
|| $frombranch eq 'item-homebranch' );
|
||||
$frombranch = C4::Context->preference('OverdueNoticeFrom') ne 'cron' ? C4::Context->preference('OverdueNoticeFrom') : $frombranch;
|
||||
|| $frombranch eq 'item-homebranch'
|
||||
|| $frombranch eq 'patron-homebranch' );
|
||||
$frombranch =
|
||||
C4::Context->preference('OverdueNoticeFrom') ne 'cron' ? C4::Context->preference('OverdueNoticeFrom') : $frombranch;
|
||||
my $owning_library = ( $frombranch eq 'item-homebranch' ) ? 1 : 0;
|
||||
my $patron_homelibrary = ( $frombranch eq 'patron-homebranch' ) ? 1 : 0;
|
||||
|
||||
my @overduebranches = C4::Overdues::GetBranchcodesWithOverdueRules(); # Branches with overdue rules
|
||||
my @branches; # Branches passed as parameter with overdue rules
|
||||
|
|
@ -446,6 +449,8 @@ elsif ( defined $text_filename ) {
|
|||
}
|
||||
}
|
||||
|
||||
my %already_queued;
|
||||
my %seen = map { $_ => 1 } @branches;
|
||||
foreach my $branchcode (@branches) {
|
||||
my $calendar;
|
||||
if ( C4::Context->preference('OverdueNoticeCalendar') ) {
|
||||
|
|
@ -476,10 +481,10 @@ SELECT biblio.*, items.*, issues.*, biblioitems.itemtype, branchname
|
|||
AND TO_DAYS($date)-TO_DAYS(issues.date_due) >= 0
|
||||
END_SQL
|
||||
|
||||
if($owning_library) {
|
||||
$sql2 .= ' AND items.homebranch = ? ';
|
||||
if ($owning_library) {
|
||||
$sql2 .= ' AND items.homebranch = ? ' unless ($patron_homelibrary);
|
||||
} else {
|
||||
$sql2 .= ' AND issues.branchcode = ? ';
|
||||
$sql2 .= ' AND issues.branchcode = ? ' unless ($patron_homelibrary);
|
||||
}
|
||||
my $sth2 = $dbh->prepare($sql2);
|
||||
|
||||
|
|
@ -595,6 +600,7 @@ END_SQL
|
|||
next;
|
||||
}
|
||||
$borrowernumber = $data->{'borrowernumber'};
|
||||
next if ( $patron_homelibrary && $already_queued{"$borrowernumber$i"} );
|
||||
my $borr = sprintf( "%s%s%s (%s)",
|
||||
$data->{'surname'} || '',
|
||||
$data->{'firstname'} && $data->{'surname'} ? ', ' : '',
|
||||
|
|
@ -603,6 +609,13 @@ END_SQL
|
|||
$verbose and warn "borrower $borr has items triggering level $i.\n";
|
||||
|
||||
my $patron = Koha::Patrons->find( $borrowernumber );
|
||||
if ($patron_homelibrary) {
|
||||
$branchcode = $patron->branchcode;
|
||||
$library = Koha::Libraries->find($branchcode);
|
||||
$admin_email_address = $library->from_email_address;
|
||||
$branch_email_address = C4::Context->preference('AddressForFailedOverdueNotices')
|
||||
|| $library->inbound_email_address;
|
||||
}
|
||||
@emails_to_use = ();
|
||||
my $notice_email = $patron->notice_email_address;
|
||||
unless ($nomail) {
|
||||
|
|
@ -645,7 +658,7 @@ END_SQL
|
|||
) unless $test_mode;
|
||||
$verbose and warn "debarring $borr\n";
|
||||
}
|
||||
my @params = ($borrowernumber,$branchcode);
|
||||
my @params = $patron_homelibrary ? ($borrowernumber) : ( $borrowernumber, $branchcode );
|
||||
|
||||
$sth2->execute(@params);
|
||||
my $itemcount = 0;
|
||||
|
|
@ -690,6 +703,7 @@ END_SQL
|
|||
$exceededPrintNoticesMaxLines = 1;
|
||||
last;
|
||||
}
|
||||
next if $patron_homelibrary and !grep { $seen{ $item_info->{branchcode} } } @branches;
|
||||
$j++;
|
||||
|
||||
$titles .= C4::Letters::get_item_content( { item => $item_info, item_content_fields => \@item_content_fields, dateonly => 1 } );
|
||||
|
|
@ -813,6 +827,7 @@ END_SQL
|
|||
}
|
||||
}
|
||||
}
|
||||
$already_queued{"$borrowernumber$i"} = 1;
|
||||
}
|
||||
$sth->finish;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue