+ [% IF ( sub.branchcode ) %][% Branches.GetName( sub.branchcode ) | html %][% END %]
+
+
+ [% IF ( sub.location ) %][% AuthorisedValues.GetDescriptionByKohaField( kohafield => 'items.location', authorised_value => sub.location ) | html %][% END %]
+
+
+ [% IF ( sub.callnumber ) %][% sub.callnumber | html %][% END %]
+
+
+
+
+
+ [% END %]
+
+
+
+ [% ELSE %]
+
+
This patron has not subscribed to email alerts for any subscriptions.
+
+ [% END %]
+
+
+
+
+
+
+
+
+
+[% MACRO jsinclude BLOCK %]
+ [% INCLUDE 'str/members-menu.inc' %]
+ [% Asset.js("js/members-menu.js") | $raw %]
+ [% INCLUDE 'datatables.inc' %]
+
+[% END %]
+
+[% INCLUDE 'intranet-bottom.inc' %]
--- a/members/alert-subscriptions.pl
+++ a/members/alert-subscriptions.pl
@@ -0,0 +1,56 @@
+#!/usr/bin/perl
+
+# This file is part of Koha.
+#
+# Copyright 2023 Aleisha Amohia
+#
+# Koha is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# Koha is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Koha; if not, see .
+
+use Modern::Perl;
+
+use CGI qw ( -utf8 );
+use C4::Auth qw( get_template_and_user );
+use C4::Context;
+use C4::Output qw( output_and_exit_if_error output_and_exit output_html_with_http_headers );
+use Koha::Patrons;
+
+my $input = CGI->new;
+
+my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
+ { template_name => "members/alert-subscriptions.tt",
+ query => $input,
+ type => "intranet",
+ flagsrequired => { serials => '*' },
+ }
+);
+
+my $borrowernumber = $input->param('borrowernumber');
+
+my $logged_in_user = Koha::Patrons->find( $loggedinuser );
+my $patron = Koha::Patrons->find( $borrowernumber );
+output_and_exit_if_error( $input, $cookie, $template, { module => 'members', logged_in_user => $logged_in_user, current_patron => $patron } );
+
+my $subscription_id = $input->param('subscription_id');
+if ( $subscription_id ) {
+ my $subscription = Koha::Subscriptions->find( $subscription_id );
+ $subscription->remove_subscriber( $patron );
+ print $input->redirect("/cgi-bin/koha/members/alert-subscriptions.pl?borrowernumber=".$borrowernumber);
+}
+
+$template->param(
+ patron => $patron,
+ alertsview => 1,
+);
+
+output_html_with_http_headers $input, $cookie, $template->output;
--- a/t/db_dependent/Koha/Patron.t
+++ a/t/db_dependent/Koha/Patron.t
@@ -19,7 +19,7 @@
use Modern::Perl;
-use Test::More tests => 24;
+use Test::More tests => 25;
use Test::Exception;
use Test::Warn;
@@ -1498,3 +1498,24 @@ subtest 'update privacy tests' => sub {
is( $old_checkout->borrowernumber, $anon_patron->id, "Checkout is successfully anonymized");
is( $patron->privacy(), 2, "Patron privacy is successfully updated");
};
+
+subtest 'alert_subscriptions tests' => sub {
+
+ plan tests => 3;
+
+ my $patron = $builder->build_object({ class => 'Koha::Patrons' });
+
+ my $subscription1 = $builder->build_object({ class => 'Koha::Subscriptions' });
+ $subscription1->add_subscriber( $patron );
+
+ my $subscription2 = $builder->build_object({ class => 'Koha::Subscriptions' });
+ $subscription2->add_subscriber( $patron );
+
+ my @subscriptions = $patron->alert_subscriptions->as_list;
+
+ is( @subscriptions, 2, "Number of patron's subscribed alerts successfully fetched" );
+ is( $subscriptions[0]->subscriptionid, $subscription1->subscriptionid, "First subscribed alert is correct" );
+ is( $subscriptions[1]->subscriptionid, $subscription2->subscriptionid, "Second subscribed alert is correct" );
+
+ $patron->discard_changes;
+};
--