@@ -, +, @@ --- 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(-) --- a/Koha/Item.pm +++ a/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; --- a/Koha/REST/V1/Biblios.pm +++ a/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, --- a/Koha/Serial/Item.pm +++ a/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 --- a/api/v1/swagger/definitions/item.yaml +++ a/api/v1/swagger/definitions/item.yaml @@ -238,6 +238,10 @@ properties: type: - object - "null" + serialitem: + type: + - object + - "null" _strings: type: - object --- a/api/v1/swagger/paths/biblios.yaml +++ a/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" --- a/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/detail.tt +++ a/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", --