From 5b69dec4e9e8093545203b0603e08d4fc27f8ecf Mon Sep 17 00:00:00 2001 From: Matt Blenkinsop Date: Tue, 6 Dec 2022 16:48:45 +0000 Subject: [PATCH] Bug 30642: Record renewal type A requirement has been requested to record whether a renewal was done manually or automatically. A column has been added to the checkout_renewals table in the database to record this and a check is now in place to determine whether the renewal was manual or automatic. The API has also been updated to reflect this new column and return the data when requested. The renewals modal view has also been updated to show what type the renewal was. Test plan: 1) In the database shell run "show columns from checkout_renewals;" and observe that there is currently no column for recording the type of renewal 2) Apply patch 3) In the shell run "dbic" and "perl installer/data/mysql/updatedatabase.pl" to update the database schema with the new column. 4) Create some checkouts 5) Renew some checkouts manually and observe in the database that there is now a column called "renewal_type" that will have recorded these as "Manual" 6) Create some checkouts that can be automatically renewed 7) Run the cron script in automatic_renewals.pl and observe that there are now also entries with a renewal_type of "Automatic" 8) Send a GET request to http://localhost:8081/api/v1/checkouts/1/renewals and observe that the renewal_type is now returned in the response 9) In the Item Details tab for a record, there is the "Current renewals" option which has a button to view renewals. Click on this and observe that the modal now displays the new information. Signed-off-by: Lucas Gass Signed-off-by: Kyle M Hall Signed-off-by: Tomas Cohen Arazi (cherry picked from commit 5045da59f15a7dfb3da72b5f96e249976a84692b) Signed-off-by: Jacob O'Mara --- C4/Circulation.pm | 6 +++++- Koha/Schema/Result/CheckoutRenewal.pm | 14 ++++++++++++-- api/v1/swagger/definitions/renewal.yaml | 4 ++++ .../atomicupdate/bug_30642-add_renewal_type.pl | 18 ++++++++++++++++++ installer/data/mysql/kohastructure.sql | 1 + .../prog/en/includes/str/checkout_renewals.inc | 1 + .../prog/js/checkout_renewals_modal.js | 2 +- 7 files changed, 42 insertions(+), 4 deletions(-) create mode 100644 installer/data/mysql/atomicupdate/bug_30642-add_renewal_type.pl diff --git a/C4/Circulation.pm b/C4/Circulation.pm index 6fcd491820..068093e7a6 100644 --- a/C4/Circulation.pm +++ b/C4/Circulation.pm @@ -3068,6 +3068,9 @@ sub AddRenewal { my $issue = $item_object->checkout; my $item_unblessed = $item_object->unblessed; + my ($package, $filename, $line) = caller; + my $renewal_type = $filename =~ m/automatic_renewals.pl/ ? "Automatic" : "Manual"; + my $dbh = C4::Context->dbh; return unless $issue; @@ -3206,7 +3209,8 @@ sub AddRenewal { checkout_id => $issue->issue_id, renewer_id => C4::Context->userenv ? C4::Context->userenv->{'number'} : undef, seen => $seen, - interface => C4::Context->interface + interface => C4::Context->interface, + renewal_type => $renewal_type } )->store(); diff --git a/Koha/Schema/Result/CheckoutRenewal.pm b/Koha/Schema/Result/CheckoutRenewal.pm index bf3cbe1883..9efbd93630 100644 --- a/Koha/Schema/Result/CheckoutRenewal.pm +++ b/Koha/Schema/Result/CheckoutRenewal.pm @@ -69,6 +69,14 @@ the interface this renewal took place on the date and time the renewal took place +=head2 renewal_type + + data_type: 'varchar' + is_nullable: 0 + size: 9 + +whether the renewal was an automatic or manual renewal + =cut __PACKAGE__->add_columns( @@ -89,6 +97,8 @@ __PACKAGE__->add_columns( default_value => \"current_timestamp", is_nullable => 0, }, + "renewal_type", + { data_type => "varchar", is_nullable => 0, size => 9 }, ); =head1 PRIMARY KEY @@ -126,8 +136,8 @@ __PACKAGE__->belongs_to( ); -# Created by DBIx::Class::Schema::Loader v0.07049 @ 2022-04-27 19:43:17 -# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:7mjiEx634L5FZyjroACUkg +# Created by DBIx::Class::Schema::Loader v0.07049 @ 2022-12-06 16:44:53 +# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:BcbN0Iceh09H2DWEA6CDwA =head2 checkout diff --git a/api/v1/swagger/definitions/renewal.yaml b/api/v1/swagger/definitions/renewal.yaml index 95e6d94816..895fe4811e 100644 --- a/api/v1/swagger/definitions/renewal.yaml +++ b/api/v1/swagger/definitions/renewal.yaml @@ -28,6 +28,10 @@ properties: timestamp: type: string description: Last update time + renewal_type: + type: + - string + - "null" renewer: type: - object diff --git a/installer/data/mysql/atomicupdate/bug_30642-add_renewal_type.pl b/installer/data/mysql/atomicupdate/bug_30642-add_renewal_type.pl new file mode 100644 index 0000000000..cc86ed11b7 --- /dev/null +++ b/installer/data/mysql/atomicupdate/bug_30642-add_renewal_type.pl @@ -0,0 +1,18 @@ +use Modern::Perl; + +return { + bug_number => "BUG_30642", + description => "Record whether a renewal has been done manually or automatically.", + up => sub { + my ($args) = @_; + my ($dbh, $out) = @$args{qw(dbh out)}; + + if( !column_exists( 'checkout_renewals', 'renewal_type' ) ) { + $dbh->do(q{ + ALTER TABLE checkout_renewals ADD COLUMN `renewal_type` varchar(9) NOT NULL AFTER `timestamp` + }); + + say $out "Added column 'checkout_renewals.column_name'"; + } + }, +}; \ No newline at end of file diff --git a/installer/data/mysql/kohastructure.sql b/installer/data/mysql/kohastructure.sql index cda278174e..257574e957 100644 --- a/installer/data/mysql/kohastructure.sql +++ b/installer/data/mysql/kohastructure.sql @@ -1714,6 +1714,7 @@ CREATE TABLE `checkout_renewals` ( `seen` tinyint(1) DEFAULT 0 COMMENT 'boolean denoting whether the item was present or not', `interface` varchar(16) NOT NULL COMMENT 'the interface this renewal took place on', `timestamp` timestamp NOT NULL DEFAULT current_timestamp() COMMENT 'the date and time the renewal took place', + `renewal_type` varchar(9) NOT NULL COMMENT 'whether the renewal was an automatic or manual renewal', PRIMARY KEY (`renewal_id`), KEY `renewer_id` (`renewer_id`), CONSTRAINT `renewals_renewer_id` FOREIGN KEY (`renewer_id`) REFERENCES `borrowers` (`borrowernumber`) ON DELETE SET NULL ON UPDATE CASCADE diff --git a/koha-tmpl/intranet-tmpl/prog/en/includes/str/checkout_renewals.inc b/koha-tmpl/intranet-tmpl/prog/en/includes/str/checkout_renewals.inc index a8dfcde80b..3dc7138355 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/includes/str/checkout_renewals.inc +++ b/koha-tmpl/intranet-tmpl/prog/en/includes/str/checkout_renewals.inc @@ -2,4 +2,5 @@ diff --git a/koha-tmpl/intranet-tmpl/prog/js/checkout_renewals_modal.js b/koha-tmpl/intranet-tmpl/prog/js/checkout_renewals_modal.js index d6448ebabe..4ca4c6cf73 100644 --- a/koha-tmpl/intranet-tmpl/prog/js/checkout_renewals_modal.js +++ b/koha-tmpl/intranet-tmpl/prog/js/checkout_renewals_modal.js @@ -20,6 +20,6 @@ $(document).ready(function(){ }); }); function createLi(renewal) { - return '
  • ' + $datetime(renewal.timestamp) + ' ' + renewed + ' ' + $patron_to_html(renewal.renewer) + '
  • '; + return '
  • ' + $datetime(renewal.timestamp) + ' ' + renewed + ' ' + $patron_to_html(renewal.renewer) + '' + renewed_type + ' ' + renewal.renewal_type + '
  • '; } }); -- 2.39.5