diff --git a/Koha/ERM/Providers/EBSCO.pm b/Koha/ERM/Providers/EBSCO.pm
index 7326184814..bbac755ab9 100644
--- a/Koha/ERM/Providers/EBSCO.pm
+++ b/Koha/ERM/Providers/EBSCO.pm
@@ -52,7 +52,7 @@ sub build_title {
my @contributors = @{ $result->{contributorsList} };
my $first_author = first { $_->{type} eq 'author' || $_->{type} eq 'Author' } @contributors;
if ( $first_author ) {
- $title->{first_author} = $first_author->{contributor}
+ $title->{first_author} = $first_author->{contributor};
}
}
for my $identifier ( @{ $result->{identifiersList} } ) {
@@ -71,8 +71,9 @@ sub build_title {
sub build_vendor {
my ( $self, $result ) = @_;
my $vendor = {
- vendor_id => $result->{vendorId},
- name => $result->{vendorName},
+ vendor_id => $result->{vendorId},
+ name => $result->{vendorName},
+ package_type => $result->{packageType},
};
return $vendor;
}
@@ -80,8 +81,13 @@ sub build_vendor {
sub build_package {
my ( $self, $result ) = @_;
my $package = {
- package_id => $result->{packageId},
- name => $result->{packageName},
+ package_id => $result->{vendorId} . '-' . $result->{packageId},
+ name => $result->{packageName},
+ content_type => $result->{contentType}, # This does not exist in /vendors/1/packages/2/titles/3
+ created_on => undef,
+ is_selected => $result->{isSelected},
+ package_type => $result->{packageType},
+ vendor_id => $result->{vendorId},
};
return $package;
}
@@ -89,11 +95,90 @@ sub build_package {
sub build_resource {
my ( $self, $result ) = @_;
my $resource = {
- resource_id => $result->{vendorId} . '-' . $result->{packageId} . '-'. $result->{titleId},
- is_selected => $result->{isSelected},
- }
+ resource_id => $result->{vendorId} . '-'
+ . $result->{packageId} . '-'
+ . $result->{titleId},
+ package_id => $result->{vendorId} . '-' . $result->{packageId},
+ title_id => $result->{titleId},
+ is_selected => $result->{isSelected},
+ started_on => $result->{managedCoverageList}->[0]->{beginCoverage},
+ ended_on => $result->{managedCoverageList}->[0]->{endCoverage},
+ };
+ return $resource;
}
+sub build_additional_params {
+ my ( $self, $query_params ) = @_;
+
+ my $additional_params;
+ if ( $query_params->{q} ) {
+ my $q = decode_json $query_params->{q};
+ while ( my ( $attr, $value ) = each %$q ) {
+ $additional_params->{$attr} = $value;
+ }
+ }
+
+ return $additional_params;
+}
+
+sub embed {
+ my ( $self, $object, $info, $embed_header ) = @_;
+ $embed_header ||= q{};
+
+ my @embed_resources;
+ foreach my $embed_req ( split /\s*,\s*/, $embed_header ) {
+ if ( $embed_req eq 'vendor.name' ) {
+ $object->{vendor} = { name => $info->{vendorName}, };
+ }
+ elsif ( $embed_req eq 'vendor' ) {
+ $object->{vendor} = $self->build_vendor($info);
+ }
+ elsif ( $embed_req eq 'title' ) {
+ $object->{title} = $self->build_title($info);
+ }
+ elsif ( $embed_req eq 'resources+count' ) {
+ $object->{resources_count} = $info->{titleCount};
+ }
+ elsif ( $embed_req eq 'package' ) {
+ $object->{package} = $self->build_package($info);
+ }
+ elsif ( $embed_req eq 'package.name' ) {
+ $object->{package} = { name => $info->{packageName}, };
+ }
+ if ( $embed_req eq 'resources' || $embed_req eq 'resources.package' ) {
+ push @embed_resources, $embed_req;
+ }
+ }
+
+ if (@embed_resources) {
+ for my $r ( @{ $info->{customerResourcesList} } ) {
+ my $resource = {};
+ for my $embed_req ( @embed_resources ) {
+ if ( $embed_req eq 'resources' ) {
+ $resource = $self->build_resource($r);
+ }
+ elsif ( $embed_req eq 'resources.package' ) {
+ unless ( %$resource ) {
+ $resource = $self->build_resource($r);
+ }
+ $resource->{package} = $self->build_package($r);
+ }
+ }
+ push @{$object->{resources}}, $resource;
+ }
+ }
+ return $object;
+}
+
+sub build_query_pagination {
+ my ( $self, $params ) = @_;
+ my $per_page = $params->{_per_page}
+ // C4::Context->preference('RESTdefaultPageSize') // 20;
+ if ( $per_page == -1 || $per_page > 100 ) { $per_page = 100; }
+ my $page = $params->{_page} || 1;
+
+ return ( $per_page, $page );
+}
sub build_query {
my ( $self, $url, $params ) = @_;
diff --git a/Koha/REST/V1/ERM/EHoldings/Packages.pm b/Koha/REST/V1/ERM/EHoldings/Packages.pm
index fa974fc4a8..7e7b983848 100644
--- a/Koha/REST/V1/ERM/EHoldings/Packages.pm
+++ b/Koha/REST/V1/ERM/EHoldings/Packages.pm
@@ -96,7 +96,7 @@ sub delete {
if ( $provider eq 'ebsco' ) {
die "invalid action";
} else {
- return Koha::REST::V1::ERM::EHoldings::Packages::Manual::update(@_);
+ return Koha::REST::V1::ERM::EHoldings::Packages::Manual::delete(@_);
}
}
diff --git a/Koha/REST/V1/ERM/EHoldings/Packages/EBSCO.pm b/Koha/REST/V1/ERM/EHoldings/Packages/EBSCO.pm
index ddb93b4c27..938ebcd45e 100644
--- a/Koha/REST/V1/ERM/EHoldings/Packages/EBSCO.pm
+++ b/Koha/REST/V1/ERM/EHoldings/Packages/EBSCO.pm
@@ -30,56 +30,30 @@ sub list {
return try {
- my $args = $c->validation->output;
- my $params = '?orderby=packagename&offset=1&count=1';
- my $result =
- Koha::ERM::Providers::EBSCO->request( GET => '/packages' . $params );
+ my $args = $c->validation->output;
+ my $params = '?orderby=packagename&offset=1&count=1';
+ my $ebsco = Koha::ERM::Providers::EBSCO->new;
+ my $result = $ebsco->request( GET => '/packages' . $params );
my $base_total = $result->{totalResults};
- my $per_page = $args->{_per_page}
- // C4::Context->preference('RESTdefaultPageSize') // 20;
- if ( $per_page == -1 || $per_page > 100 ) { $per_page = 100; }
- my $page = $args->{_page} || 1;
-
- my ( $search, $content_type, $selection_type );
- my $query_params = $c->req->params->to_hash;
- my $additional_params;
- if ( $query_params->{q} ) {
- my $q = decode_json $query_params->{q};
- while ( my ( $attr, $value ) = each %$q ) {
- $additional_params->{$attr} = $value;
- }
- }
+ my ( $per_page, $page ) = $ebsco->build_query_pagination($args);
+ my $additional_params =
+ $ebsco->build_additional_params( $c->req->params->to_hash );
my $orderby = $additional_params->{name} ? 'relevance' : 'packagename';
- $params = sprintf '?orderby=%s&offset=%s&count=%s', $orderby, $page,
- $per_page;
- $result = Koha::ERM::Providers::EBSCO->request(
+ $params = sprintf '?orderby=%s&offset=%s&count=%s', $orderby, $page, $per_page;
+
+ $result = $ebsco->request(
GET => '/packages' . $params,
$additional_params
);
my @packages;
for my $p ( @{ $result->{packagesList} } ) {
- my $package = {
- content_type => $p->{contentType},
- created_on => undef,
- is_selected => $p->{isSelected},
- name => $p->{packageName},
- package_id => $p->{vendorId} . '-' . $p->{packageId},
- package_type => $p->{packageType},
- vendor_id => $p->{vendorId},
- };
- my $embed_header = $c->req->headers->header('x-koha-embed') || q{};
- foreach my $embed_req ( split /\s*,\s*/, $embed_header ) {
- if ( $embed_req eq 'vendor.name' ) {
- $package->{vendor} = { name => $p->{vendorName}, };
- }
- elsif ( $embed_req eq 'resources+count' ) {
- $package->{resources_count} = $p->{titleCount};
- }
- }
- push @packages, $package;
+ my $package = $ebsco->build_package($p);
+ $package =
+ $ebsco->embed( $package, $p, $c->req->headers->header('x-koha-embed') );
+ push @packages, $package;
}
my $total = $result->{totalResults};
$total = 10000 if $total > 10000;
@@ -104,7 +78,8 @@ sub get {
return try {
my ( $vendor_id, $package_id ) = split '-',
$c->validation->param('package_id');
- my $p = Koha::ERM::Providers::EBSCO->request(
+ my $ebsco = Koha::ERM::Providers::EBSCO->new;
+ my $p = $ebsco->request(
GET => '/vendors/' . $vendor_id . '/packages/' . $package_id );
unless ($p) {
return $c->render(
@@ -113,31 +88,16 @@ sub get {
);
}
- my $package = {
- content_type => $p->{contentType},
- name => $p->{packageName},
- package_id => $p->{vendorId} . '-' . $p->{packageId},
- package_type => $p->{packageType},
- vendor_id => $p->{vendorId},
- };
+ my $package = $ebsco->build_package($p);
- my $embed_header = $c->req->headers->header('x-koha-embed') || q{};
- foreach my $embed_req ( split /\s*,\s*/, $embed_header ) {
- if ( $embed_req eq 'vendor' ) {
- $package->{vendor} = {
- id => $p->{vendorId},
- name => $p->{vendorName},
- };
- }
- elsif ( $embed_req eq 'resources+count' ) {
- $package->{resources_count} = $p->{titleCount};
- }
- }
+ $package =
+ $ebsco->embed( $package, $p,
+ $c->req->headers->header('x-koha-embed') );
- return $c->render(
+ return $c->render(
status => 200,
openapi => $package
- );
+ );
}
catch {
$c->unhandled_exception($_);
diff --git a/Koha/REST/V1/ERM/EHoldings/Resources/EBSCO.pm b/Koha/REST/V1/ERM/EHoldings/Resources/EBSCO.pm
index 555a6e3099..c378ddb69a 100644
--- a/Koha/REST/V1/ERM/EHoldings/Resources/EBSCO.pm
+++ b/Koha/REST/V1/ERM/EHoldings/Resources/EBSCO.pm
@@ -39,8 +39,9 @@ sub list {
return try {
my $args = $c->validation->output;
+ my $ebsco = Koha::ERM::Providers::EBSCO->new;
- # FIXME Do we need more validation here? Don't think so we have the API specs.
+ # FIXME Do we need more validation here? Don't think so we have the API specs.
my ( $vendor_id, $package_id ) = split '-',
$c->validation->param('package_id') || q{};
my $title_id = $c->validation->param('title_id') || q{};
@@ -55,7 +56,7 @@ sub list {
my $result;
try {
$result =
- Koha::ERM::Providers::EBSCO->request( GET => $url . $params );
+ $ebsco->request( GET => $url . $params );
}
catch {
if ( blessed $_ ) {
@@ -73,26 +74,17 @@ sub list {
my $base_total = $result->{totalResults};
- my $per_page = $args->{_per_page}
- // C4::Context->preference('RESTdefaultPageSize') // 20;
- if ( $per_page == -1 || $per_page > 100 ) { $per_page = 100; }
- my $page = $args->{_page} || 1;
+ my ( $per_page, $page ) = $ebsco->build_query_pagination($args);
my ( $search, $content_type, $selection_type );
- my $query_params = $c->req->params->to_hash;
- my $additional_params;
- if ( $query_params->{q} ) {
- my $q = decode_json $query_params->{q};
- while ( my ( $attr, $value ) = each %$q ) {
- $additional_params->{$attr} = $value;
- }
- }
+ my $additional_params = $ebsco->build_additional_params( $c->req->params->to_hash );
my $searchfield = 'titlename';
$params =
sprintf '?orderby=titlename&offset=%s&count=%s&searchfield=%s',
$page, $per_page, $searchfield;
- $result = Koha::ERM::Providers::EBSCO->request(
+
+ $result = $ebsco->request(
GET => $url . $params,
$additional_params
);
@@ -101,30 +93,12 @@ sub list {
for my $t ( @{ $result->{titles} } ) {
my $r =
$t->{customerResourcesList}->[0]; # FIXME What about the others?
- my $resource = {
- resource_id => $r->{vendorId} . '-'
- . $r->{packageId} . '-'
- . $r->{titleId},
- package_id => $r->{vendorId} . '-' . $r->{packageId},
- title_id => $r->{titleId},
- is_selected => $r->{isSelected},
- started_on => $r->{managedCoverageList}->[0]->{beginCoverage},
- ended_on => $r->{managedCoverageList}->[0]->{endCoverage},
- };
- my $embed_header = $c->req->headers->header('x-koha-embed') || q{};
- foreach my $embed_req ( split /\s*,\s*/, $embed_header ) {
- if ( $embed_req eq 'title.publication_title' ) {
- $resource->{title} = {
- publication_title => $t->{titleName},
- publisher_name => $t->{publisherName},
- publication_type => $t->{pubType},
- };
- }
- elsif ( $embed_req eq 'package.name' ) {
- $resource->{package} = { name => $t->{packageName}, };
- }
- }
+ my $resource = $ebsco->build_resource($r);
+
+ $resource = $ebsco->embed( $resource, $t,
+ $c->req->headers->header('x-koha-embed') );
+
push @resources, $resource;
}
my $total = $result->{totalResults};
@@ -153,10 +127,9 @@ sub get {
return try {
my ( $vendor_id, $package_id, $resource_id ) = split '-',
$c->validation->param('resource_id');
- my $t;
- try {
- $t =
- Koha::ERM::Providers::EBSCO->request( GET => '/vendors/'
+ my $ebsco = Koha::ERM::Providers::EBSCO->new;
+ my $t = try {
+ return $ebsco->request( GET => '/vendors/'
. $vendor_id
. '/packages/'
. $package_id
@@ -186,55 +159,9 @@ sub get {
}
my $r = $t->{customerResourcesList}->[0]; # FIXME What about the others?
- my $resource = {
- resource_id => $r->{vendorId} . '-'
- . $r->{packageId} . '-'
- . $r->{titleId},
- package_id => $r->{vendorId} . '-' . $r->{packageId},
- title_id => $r->{titleId},
- started_on => $r->{managedCoverageList}->[0]->{beginCoverage},
- ended_on => $r->{managedCoverageList}->[0]->{endCoverage},
- };
+ my $resource = $ebsco->build_resource($r);
- my $embed_header = $c->req->headers->header('x-koha-embed') || q{};
- foreach my $embed_req ( split /\s*,\s*/, $embed_header ) {
- if ( $embed_req eq 'title' ) {
- $resource->{title} = {
- publication_title => $t->{titleName},
- publisher_name => $t->{publisherName},
- publication_type => $t->{pubType},
- };
- for my $identifier ( @{ $t->{identifiersList} } ) {
-
- # FIXME $identifier->{type} : 0 for ISSN and 1 for ISBN
- if ( $identifier->{subtype} == 1 ) {
- $resource->{title}->{print_identifier} =
- $identifier->{id};
- }
- elsif ( $identifier->{subtype} == 1 ) {
- $resource->{title}->{online_identifier} =
- $identifier->{id};
- }
- }
- }
- elsif ( $embed_req eq 'package' ) {
- $resource->{package} = {
-
- #content_type => $e->{contentType}, FIXME We don't have that
- name => $r->{packageName},
- package_id => $r->{vendorId} . '-' . $r->{packageId},
- package_type => $r->{packageType},
- vendor_id => $r->{vendorId},
- };
- }
- elsif ( $embed_req eq 'vendor' ) {
- $resource->{vendor} = {
- name => $r->{vendorName},
- id => $r->{vendorId},
- package_type => $r->{packageType},
- };
- }
- }
+ $resource = $ebsco->embed( $resource, {%$t, %$r}, $c->req->headers->header('x-koha-embed') );
return $c->render(
status => 200,
diff --git a/Koha/REST/V1/ERM/EHoldings/Titles/EBSCO.pm b/Koha/REST/V1/ERM/EHoldings/Titles/EBSCO.pm
index 3537a8b195..1fb79055eb 100644
--- a/Koha/REST/V1/ERM/EHoldings/Titles/EBSCO.pm
+++ b/Koha/REST/V1/ERM/EHoldings/Titles/EBSCO.pm
@@ -43,24 +43,11 @@ sub list {
my $ebsco = Koha::ERM::Providers::EBSCO->new;
# We cannot get base_total as a search kw is required by the API
- #my $params = '?orderby=relevance&offset=1&count=1&searchfield=titlename&search=a';
- #my $result = $ebsco->request( GET => '/titles' . $params );
- #my $base_total = $result->{totalResults};
- my $per_page = $args->{_per_page}
- // C4::Context->preference('RESTdefaultPageSize') // 20;
- if ( $per_page == -1 || $per_page > 100 ) { $per_page = 100; }
- my $page = $args->{_page} || 1;
+ my ( $per_page, $page ) = $ebsco->build_query_pagination($args);
my ( $search, $content_type, $selection_type );
- my $query_params = $c->req->params->to_hash;
- my $additional_params;
- if ( $query_params->{q} ) {
- my $q = decode_json $query_params->{q};
- while ( my ( $attr, $value ) = each %$q ) {
- $additional_params->{$attr} = $value;
- }
- }
+ my $additional_params = $ebsco->build_additional_params( $c->req->params->to_hash );
unless ( defined $additional_params->{publication_title} ) {
@@ -85,16 +72,11 @@ sub list {
my $result =
$ebsco->request( GET => '/titles' . $params, $additional_params );
+ my $embed_header = $c->req->headers->header('x-koha-embed');
my @titles;
for my $t ( @{ $result->{titles} } ) {
my $title = $ebsco->build_title($t);
-
- my $embed_header = $c->req->headers->header('x-koha-embed') || q{};
- foreach my $embed_req ( split /\s*,\s*/, $embed_header ) {
- if ( $embed_req eq 'vendor.name' ) {
- $title->{vendor} = $ebsco->build_vendor($t);
- }
- }
+ $title = $ebsco->embed( $title, $t, $embed_header );
push @titles, $title;
}
my $total = $result->{totalResults};
@@ -132,20 +114,9 @@ sub get {
);
}
- my $title = $ebsco->build_title($t);
- my $embed_header = $c->req->headers->header('x-koha-embed') || q{};
- for my $r ( @{ $t->{customerResourcesList} } ) {
- my $resource = {};
- foreach my $embed_req ( split /\s*,\s*/, $embed_header ) {
- if ( $embed_req eq 'resources' ) {
- $resource = $ebsco->build_resource($r);
- }
- elsif ( $embed_req eq 'resources.package' ) {
- $resource->{package} = $ebsco->build_package($r);
- }
- }
- push @{ $title->{resources} }, $resource;
- }
+ my $title = $ebsco->build_title($t);
+ $title =
+ $ebsco->embed( $title, $t, $c->req->headers->header('x-koha-embed') );
return $c->render(
status => 200,
diff --git a/cypress/integration/Packages_spec.ts b/cypress/integration/Packages_spec.ts
index 29ef68e3e6..4cb17d0569 100644
--- a/cypress/integration/Packages_spec.ts
+++ b/cypress/integration/Packages_spec.ts
@@ -7,7 +7,7 @@ function get_package() {
package_id: 1,
name: "package 1",
package_type: "complete",
- content_type: "print",
+ content_type: "Print",
package_agreements: [],
};
}
diff --git a/koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/EHoldingsPackageTitlesList.vue b/koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/EHoldingsPackageTitlesList.vue
index 39a60a93da..3871cf846f 100644
--- a/koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/EHoldingsPackageTitlesList.vue
+++ b/koha-tmpl/intranet-tmpl/prog/js/vue/components/ERM/EHoldingsPackageTitlesList.vue
@@ -12,12 +12,16 @@
-