From 72cc9b4933821df36a0f5b8f020a42e3bc175a6d Mon Sep 17 00:00:00 2001 From: Jonathan Druart Date: Tue, 18 Apr 2023 10:57:09 +0200 Subject: [PATCH] Bug 33568: enumchron/volinfo MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Owen Leonard Signed-off-by: Laurence Rault Signed-off-by: Emily Lamancusa Signed-off-by: Tomás Cohen Arazi --- Koha/Item.pm | 12 +++++++ Koha/REST/V1/Biblios.pm | 1 + Koha/Serial/Item.pm | 13 ++++++++ api/v1/swagger/definitions/item.yaml | 4 +++ api/v1/swagger/paths/biblios.yaml | 1 + .../prog/en/modules/catalogue/detail.tt | 32 ++++++++++++++----- 6 files changed, 55 insertions(+), 8 deletions(-) diff --git a/Koha/Item.pm b/Koha/Item.pm index 6fa6bd7ae43..f677abac769 100644 --- a/Koha/Item.pm +++ b/Koha/Item.pm @@ -51,6 +51,7 @@ use Koha::Plugins; use Koha::Recalls; use Koha::Result::Boolean; use Koha::SearchEngine::Indexer; +use Koha::Serial::Items; use Koha::StockRotationItem; use Koha::StockRotationRotas; use Koha::TrackedLinks; @@ -444,6 +445,17 @@ sub checkout { return Koha::Checkout->_new_from_dbic( $checkout_rs ); } +=head3 serialitem + +=cut + +sub serialitem { + my ( $self ) = @_; + my $rs = $self->_result->serialitem; + return unless $rs; + return Koha::Serial::Item->_new_from_dbic($rs); +} + =head3 item_group my $item_group = $item->item_group; diff --git a/Koha/REST/V1/Biblios.pm b/Koha/REST/V1/Biblios.pm index 0f66754f830..94d9ddc59ef 100644 --- a/Koha/REST/V1/Biblios.pm +++ b/Koha/REST/V1/Biblios.pm @@ -302,6 +302,7 @@ sub get_items { my $items_rs = $biblio->items; $items_rs = $items_rs->filter_by_bookable if $bookable_only; + # FIXME We need to order_by serial.publisheddate if we have _order_by=+me.serial_issue_number my $items = $c->objects->search($items_rs); return $c->render( status => 200, diff --git a/Koha/Serial/Item.pm b/Koha/Serial/Item.pm index a68a7299940..b611eee28a8 100644 --- a/Koha/Serial/Item.pm +++ b/Koha/Serial/Item.pm @@ -24,6 +24,8 @@ use Koha::Database; use base qw(Koha::Object); +use Koha::Serials; + =head1 NAME Koha::Serial::Item - Koha Serial Item Object class @@ -34,6 +36,17 @@ Koha::Serial::Item - Koha Serial Item Object class =cut +=head3 serial + +=cut + +sub serial { + my ($self) = @_; + my $rs = $self->_result->serialid; + return unless $rs; + return Koha::Serial->_new_from_dbic($rs); +} + =head3 type =cut diff --git a/api/v1/swagger/definitions/item.yaml b/api/v1/swagger/definitions/item.yaml index 5c9a0d230d4..bb5a96ffb5e 100644 --- a/api/v1/swagger/definitions/item.yaml +++ b/api/v1/swagger/definitions/item.yaml @@ -238,6 +238,10 @@ properties: type: - object - "null" + serialitem: + type: + - object + - "null" _strings: type: - object diff --git a/api/v1/swagger/paths/biblios.yaml b/api/v1/swagger/paths/biblios.yaml index ff3edf6093a..a15997e3ba7 100644 --- a/api/v1/swagger/paths/biblios.yaml +++ b/api/v1/swagger/paths/biblios.yaml @@ -425,6 +425,7 @@ - +strings - cover_image_ids - item_group_item.item_group.description + - serialitem.serial collectionFormat: csv - $ref: "../swagger.yaml#/parameters/match" - $ref: "../swagger.yaml#/parameters/order_by" diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/detail.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/detail.tt index ca5b0eddec3..73499267cee 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/detail.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/detail.tt @@ -712,9 +712,7 @@ Item group [% END %] Call number - [% IF volinfo %] - Serial enumeration / chronology - [% END %] + Serial enumeration / chronology Status Last seen Checkouts @@ -2498,6 +2496,9 @@ [% IF Koha.Preference('EnableItemGroups') %] embed.push('item_group_item.item_group.description'); [% END %] + [% IF biblio.serial %] + embed.push('serialitem.serial'); + [% END %] let table_settings = [% TablesSettings.GetTableSettings('catalogue', 'detail','holdings_table','json') | $raw %]; var items_table = $("#table_items").kohaTable({ ajax: { url: table_url }, @@ -2631,17 +2632,32 @@ } }, - [% IF volinfo %] { - data: "", + data: "me.serial_issue_number", className: "enumchron", - searchable: false, // FIXME + searchable: true, orderable: true, render: function (data, type, row, meta) { - return "volinfo"; // FIXME volinfo/enumchron/serial_issue_number + let nodes = ""; + [%# FIXME Previously we displayed the column if at least one item of the biblio had an enumchron/serial_issue_number. Now it's only if one item of the ones displayed on the current page, how is that bad? How can it be fixed in an elegant way? Should we display the column only if biblio.serial? %] + let serial = row.serialitem ? row.serialitem.serial : null; + if ( row.serial_issue_number && serial && serial.serialseq ) { + nodes += '%s'.format(row.serial_issue_number); + if ( serial.serialseq && row.serial_issue_number != serial.serialseq ) { + nodes += ' -- ' + nodes += ' %s'.format(serial.serialseq); + } + } else if ( row.serial_issue_number ) { + nodes += ' %s'.format(row.serial_issue_number); + } else if ( serial && serial.serialseq ) { + nodes += '%s'.format(serial.serialseq); + } + if ( serial && serial.publisheddate ) { + nodes += ' (%s)'.format($date(serial.publisheddate)); + } + return nodes; } }, - [% END %] { data: "", className: "status", -- 2.34.1