Bug 32030: Some refactoring and improvements
Signed-off-by: Jonathan Field <jonathan.field@ptfs-europe.com> Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com> Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com> Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
This commit is contained in:
parent
769a1b3477
commit
87d64ea384
|
|
@ -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 ) = @_;
|
||||
|
|
|
|||
|
|
@ -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(@_);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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($_);
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ function get_package() {
|
|||
package_id: 1,
|
||||
name: "package 1",
|
||||
package_type: "complete",
|
||||
content_type: "print",
|
||||
content_type: "Print",
|
||||
package_agreements: [],
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -12,12 +12,16 @@
|
|||
<input
|
||||
type="text"
|
||||
id="publication_title_filter"
|
||||
v-model="filters.publication_title"
|
||||
@keyup.enter="filter_table"
|
||||
/>
|
||||
</li>
|
||||
<li>
|
||||
<label>{{ $t("Publication type") }}:</label>
|
||||
<select id="publication_type_filter">
|
||||
<select
|
||||
id="publication_type_filter"
|
||||
v-model="filters.publication_type"
|
||||
>
|
||||
<option value="">{{ $t("All") }}</option>
|
||||
<option
|
||||
v-for="type in av_title_publication_types"
|
||||
|
|
@ -30,7 +34,10 @@
|
|||
</li>
|
||||
<li>
|
||||
<label>{{ $t("Selection status") }}:</label>
|
||||
<select id="selection_type_filter">
|
||||
<select
|
||||
id="selection_type_filter"
|
||||
v-model="filters.selection_type"
|
||||
>
|
||||
<option value="0">{{ $t("All") }}</option>
|
||||
<option value="1">{{ $t("Selected") }}</option>
|
||||
<option value="2">{{ $t("Not selected") }}</option>
|
||||
|
|
@ -69,6 +76,11 @@ export default {
|
|||
},
|
||||
data() {
|
||||
return {
|
||||
filters: {
|
||||
publication_title: "",
|
||||
publication_type: "",
|
||||
selection_type: "",
|
||||
},
|
||||
display_filters: false,
|
||||
}
|
||||
},
|
||||
|
|
@ -83,101 +95,99 @@ export default {
|
|||
toggle_filters: function (e) {
|
||||
this.display_filters = !this.display_filters
|
||||
},
|
||||
},
|
||||
mounted() {
|
||||
let show_resource = this.show_resource
|
||||
let package_id = this.package_id
|
||||
let get_lib_from_av = this.get_lib_from_av
|
||||
build_datatable: function () {
|
||||
let show_resource = this.show_resource
|
||||
let package_id = this.package_id
|
||||
let get_lib_from_av = this.get_lib_from_av
|
||||
let filters = this.filters
|
||||
|
||||
window['av_title_publication_types'] = this.av_title_publication_types.map(e => {
|
||||
e['_id'] = e['authorised_value']
|
||||
e['_str'] = e['lib']
|
||||
return e
|
||||
})
|
||||
window['av_title_publication_types'] = this.av_title_publication_types.map(e => {
|
||||
e['_id'] = e['authorised_value']
|
||||
e['_str'] = e['lib']
|
||||
return e
|
||||
})
|
||||
|
||||
let additional_filters = {}
|
||||
if (erm_provider != 'manual') {
|
||||
additional_filters = {
|
||||
publication_title: function () {
|
||||
let publication_title_search = $("#publication_title_filter").val()
|
||||
if (!publication_title_search) return ""
|
||||
return publication_title_search
|
||||
},
|
||||
publication_type: function () {
|
||||
let content_type_search = $("#publication_type_filter").val()
|
||||
if (!content_type_search) return ""
|
||||
return content_type_search
|
||||
},
|
||||
selection_type: function () {
|
||||
let selection_type_search = $("#selection_type_filter").val()
|
||||
if (!selection_type_search) return ""
|
||||
return selection_type_search
|
||||
},
|
||||
let additional_filters = {}
|
||||
if (erm_provider != 'manual') {
|
||||
additional_filters = {
|
||||
publication_title: function () {
|
||||
return filters.publication_title || ""
|
||||
},
|
||||
publication_type: function () {
|
||||
return filters.publication_type || ""
|
||||
},
|
||||
selection_type: function () {
|
||||
return filters.selection_type || ""
|
||||
},
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$('#title_list').kohaTable({
|
||||
"ajax": {
|
||||
"url": "/api/v1/erm/eholdings/packages/" + package_id + "/resources",
|
||||
},
|
||||
...(erm_provider != 'manual' ? { ordering: false } : {}),
|
||||
...(erm_provider != 'manual' ? { dom: '<"top pager"<"table_entries"ilp>>tr<"bottom pager"ip>' } : {}),
|
||||
...(erm_provider != 'manual' ? { lengthMenu: [[10, 20, 50, 100], [10, 20, 50, 100]] } : {}),
|
||||
"embed": ['title.publication_title'],
|
||||
autoWidth: false,
|
||||
"columns": [
|
||||
{
|
||||
"title": __("Name"),
|
||||
"data": "title.publication_title",
|
||||
"searchable": (erm_provider == 'manual') ? 1 : 0,
|
||||
"orderable": (erm_provider == 'manul') ? 1 : 0,
|
||||
"render": function (data, type, row, meta) {
|
||||
// Rendering done in drawCallback
|
||||
return ""
|
||||
}
|
||||
$('#title_list').kohaTable({
|
||||
"ajax": {
|
||||
"url": "/api/v1/erm/eholdings/packages/" + package_id + "/resources",
|
||||
},
|
||||
{
|
||||
"title": __("Publication type"),
|
||||
"data": "title.publication_type",
|
||||
"searchable": (erm_provider == 'manual') ? 1 : 0,
|
||||
"orderable": (erm_provider == 'manul') ? 1 : 0,
|
||||
"render": function (data, type, row, meta) {
|
||||
return escape_str(get_lib_from_av("av_title_publication_types", row.title.publication_type))
|
||||
}
|
||||
},
|
||||
],
|
||||
drawCallback: function (settings) {
|
||||
|
||||
var api = new $.fn.dataTable.Api(settings)
|
||||
|
||||
$.each($(this).find("tbody tr td:first-child"), function (index, e) {
|
||||
let row = api.row(index).data()
|
||||
if (!row) return // Happen if the table is empty
|
||||
let n = createVNode("a", {
|
||||
role: "button",
|
||||
href: "/cgi-bin/koha/erm/eholdings/resources/" + row.resource_id,
|
||||
onClick: (e) => {
|
||||
e.preventDefault()
|
||||
show_resource(row.resource_id)
|
||||
...(erm_provider != 'manual' ? { ordering: false } : {}),
|
||||
...(erm_provider != 'manual' ? { dom: '<"top pager"<"table_entries"ilp>>tr<"bottom pager"ip>' } : {}),
|
||||
...(erm_provider != 'manual' ? { aLengthMenu: [[10, 20, 50, 100], [10, 20, 50, 100]] } : {}),
|
||||
"embed": ['title'],
|
||||
autoWidth: false,
|
||||
"columns": [
|
||||
{
|
||||
"title": __("Name"),
|
||||
"data": "title.publication_title",
|
||||
"searchable": (erm_provider == 'manual') ? 1 : 0,
|
||||
"orderable": (erm_provider == 'manul') ? 1 : 0,
|
||||
"render": function (data, type, row, meta) {
|
||||
// Rendering done in drawCallback
|
||||
return ""
|
||||
}
|
||||
},
|
||||
`${row.title.publication_title}`
|
||||
)
|
||||
if (row.is_selected) {
|
||||
n = createVNode('span', {}, [n, " ", createVNode("i", { class: "fa fa-check-square-o", style: { color: "green" }, title: __("Is selected") })])
|
||||
{
|
||||
"title": __("Publication type"),
|
||||
"data": "title.publication_type",
|
||||
"searchable": (erm_provider == 'manual') ? 1 : 0,
|
||||
"orderable": (erm_provider == 'manul') ? 1 : 0,
|
||||
"render": function (data, type, row, meta) {
|
||||
return escape_str(get_lib_from_av("av_title_publication_types", row.title.publication_type))
|
||||
}
|
||||
},
|
||||
],
|
||||
drawCallback: function (settings) {
|
||||
|
||||
var api = new $.fn.dataTable.Api(settings)
|
||||
|
||||
$.each($(this).find("tbody tr td:first-child"), function (index, e) {
|
||||
let row = api.row(index).data()
|
||||
if (!row) return // Happen if the table is empty
|
||||
let n = createVNode("a", {
|
||||
role: "button",
|
||||
href: "/cgi-bin/koha/erm/eholdings/resources/" + row.resource_id,
|
||||
onClick: (e) => {
|
||||
e.preventDefault()
|
||||
show_resource(row.resource_id)
|
||||
}
|
||||
},
|
||||
`${row.title.publication_title}`
|
||||
)
|
||||
if (row.is_selected) {
|
||||
n = createVNode('span', {}, [n, " ", createVNode("i", { class: "fa fa-check-square-o", style: { color: "green" }, title: __("Is selected") })])
|
||||
}
|
||||
render(n, e)
|
||||
})
|
||||
},
|
||||
...(erm_provider == 'manual' ? {
|
||||
preDrawCallback: function (settings) {
|
||||
var table_id = settings.nTable.id
|
||||
if (erm_provider == 'manual') {
|
||||
$("#" + table_id).find("thead th").eq(1).attr('data-filter', 'av_title_publication_types')
|
||||
}
|
||||
}
|
||||
render(n, e)
|
||||
})
|
||||
},
|
||||
...(erm_provider == 'manual' ? {
|
||||
preDrawCallback: function (settings) {
|
||||
var table_id = settings.nTable.id
|
||||
if (erm_provider == 'manual') {
|
||||
$("#" + table_id).find("thead th").eq(1).attr('data-filter', 'av_title_publication_types')
|
||||
}
|
||||
}
|
||||
} : {}),
|
||||
}, null, erm_provider == 'manual' ? 1 : 0, additional_filters)
|
||||
} : {}),
|
||||
}, null, erm_provider == 'manual' ? 1 : 0, additional_filters)
|
||||
},
|
||||
},
|
||||
mounted() {
|
||||
this.build_datatable()
|
||||
},
|
||||
beforeUnmount() {
|
||||
$('#title_list')
|
||||
|
|
@ -193,7 +203,7 @@ export default {
|
|||
|
||||
<style scoped>
|
||||
#title_list_result {
|
||||
width: 50%;
|
||||
width: 60%;
|
||||
padding-left: 10rem;
|
||||
}
|
||||
#title_list {
|
||||
|
|
|
|||
|
|
@ -3,15 +3,13 @@
|
|||
<div v-if="!this.initialized">{{ $t("Loading") }}</div>
|
||||
<div v-else-if="this.packages" id="packages_list">
|
||||
<Toolbar />
|
||||
<table v-if="this.packages.length" id="package_list"></table>
|
||||
<div v-if="this.packages.length" id="package_list_result">
|
||||
<table id="package_list"></table>
|
||||
</div>
|
||||
<div v-else-if="this.initialized" class="dialog message">
|
||||
{{ $t("There are no packages defined") }}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="package_list_result">
|
||||
<table id="package_list"></table>
|
||||
</div>
|
||||
</div>
|
||||
<div v-else>
|
||||
<fieldset>
|
||||
|
|
@ -90,7 +88,7 @@ export default {
|
|||
},
|
||||
beforeRouteEnter(to, from, next) {
|
||||
next(vm => {
|
||||
vm.getPackages()
|
||||
vm.getPackages().then(() => vm.build_datatable())
|
||||
})
|
||||
},
|
||||
methods: {
|
||||
|
|
@ -113,183 +111,183 @@ export default {
|
|||
filter_table: function () {
|
||||
$("#package_list_result").show()
|
||||
$("#package_list").DataTable().draw()
|
||||
}
|
||||
},
|
||||
updated() {
|
||||
let show_package = this.show_package
|
||||
let edit_package = this.edit_package
|
||||
let delete_package = this.delete_package
|
||||
let get_lib_from_av = this.get_lib_from_av
|
||||
let filters = this.filters
|
||||
},
|
||||
build_datatable: function () {
|
||||
let show_package = this.show_package
|
||||
let edit_package = this.edit_package
|
||||
let delete_package = this.delete_package
|
||||
let get_lib_from_av = this.get_lib_from_av
|
||||
let filters = this.filters
|
||||
|
||||
window['vendors'] = this.vendors.map(e => {
|
||||
e['_id'] = e['id']
|
||||
e['_str'] = e['name']
|
||||
return e
|
||||
})
|
||||
window['av_package_types'] = this.av_package_types.map(e => {
|
||||
e['_id'] = e['authorised_value']
|
||||
e['_str'] = e['lib']
|
||||
return e
|
||||
})
|
||||
window['av_package_content_types'] = this.av_package_content_types.map(e => {
|
||||
e['_id'] = e['authorised_value']
|
||||
e['_str'] = e['lib']
|
||||
return e
|
||||
})
|
||||
window['vendors'] = this.vendors.map(e => {
|
||||
e['_id'] = e['id']
|
||||
e['_str'] = e['name']
|
||||
return e
|
||||
})
|
||||
window['av_package_types'] = this.av_package_types.map(e => {
|
||||
e['_id'] = e['authorised_value']
|
||||
e['_str'] = e['lib']
|
||||
return e
|
||||
})
|
||||
window['av_package_content_types'] = this.av_package_content_types.map(e => {
|
||||
e['_id'] = e['authorised_value']
|
||||
e['_str'] = e['lib']
|
||||
return e
|
||||
})
|
||||
|
||||
let additional_filters = {}
|
||||
if (erm_provider != 'manual') {
|
||||
additional_filters = {
|
||||
name: function () {
|
||||
return filters.package_name || ""
|
||||
},
|
||||
content_type: function () {
|
||||
return filters.content_type || ""
|
||||
},
|
||||
selection_type: function () {
|
||||
return filters.selection_type || ""
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
$('#package_list').kohaTable({
|
||||
"ajax": {
|
||||
"url": "/api/v1/erm/eholdings/packages",
|
||||
},
|
||||
"embed": ['resources+count', 'vendor.name'],
|
||||
...(erm_provider == 'manual' ? { order: [[0, "asc"]] } : {}),
|
||||
...(erm_provider != 'manual' ? { ordering: false } : {}),
|
||||
...(erm_provider == 'manual' ? { search: { search: filters.package_name } } : {}),
|
||||
...(erm_provider != 'manual' ? { dom: '<"top pager"<"table_entries"ilp>>tr<"bottom pager"ip>' } : {}),
|
||||
...(erm_provider != 'manual' ? { lengthMenu: [[10, 20, 50, 100], [10, 20, 50, 100]] } : {}),
|
||||
...(erm_provider != 'manual' ? { deferLoading: true } : {}),
|
||||
autoWidth: false,
|
||||
"columns": [
|
||||
{
|
||||
"title": __("Name"),
|
||||
"data": "me.package_id:me.name",
|
||||
"searchable": (erm_provider == 'manual'),
|
||||
"orderable": (erm_provider == 'manul'),
|
||||
"render": function (data, type, row, meta) {
|
||||
// Rendering done in drawCallback
|
||||
return ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"title": __("Vendor"),
|
||||
"data": "vendor_id",
|
||||
"searchable": (erm_provider == 'manual'),
|
||||
"orderable": (erm_provider == 'manul'),
|
||||
"render": function (data, type, row, meta) {
|
||||
return row.vendor ? escape_str(row.vendor.name) : ""
|
||||
let additional_filters = {}
|
||||
if (erm_provider != 'manual') {
|
||||
additional_filters = {
|
||||
name: function () {
|
||||
return filters.package_name || ""
|
||||
},
|
||||
content_type: function () {
|
||||
return filters.content_type || ""
|
||||
},
|
||||
selection_type: function () {
|
||||
return filters.selection_type || ""
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
$('#package_list').kohaTable({
|
||||
"ajax": {
|
||||
"url": "/api/v1/erm/eholdings/packages",
|
||||
},
|
||||
{
|
||||
"title": __("Type"),
|
||||
"data": "package_type",
|
||||
"searchable": (erm_provider == 'manual'),
|
||||
"orderable": (erm_provider == 'manul'),
|
||||
"render": function (data, type, row, meta) {
|
||||
return escape_str(get_lib_from_av("av_package_types", row.package_type))
|
||||
}
|
||||
}, {
|
||||
"searchable": (erm_provider == 'manual'),
|
||||
"orderable": (erm_provider == 'manul'),
|
||||
"searchable": true,
|
||||
"orderable": true,
|
||||
"render": function (data, type, row, meta) {
|
||||
return escape_str(get_lib_from_av("av_package_content_types", row.content_type))
|
||||
}
|
||||
},
|
||||
erm_provider == 'manual' ?
|
||||
"embed": ['resources+count', 'vendor.name'],
|
||||
...(erm_provider == 'manual' ? { order: [[0, "asc"]] } : {}),
|
||||
...(erm_provider != 'manual' ? { ordering: false } : {}),
|
||||
...(erm_provider == 'manual' ? { search: { search: filters.package_name } } : {}),
|
||||
...(erm_provider != 'manual' ? { dom: '<"top pager"<"table_entries"ilp>>tr<"bottom pager"ip>' } : {}),
|
||||
...(erm_provider != 'manual' ? { aLengthMenu: [[10, 20, 50, 100], [10, 20, 50, 100]] } : {}),
|
||||
...(erm_provider != 'manual' ? { deferLoading: true } : {}),
|
||||
autoWidth: false,
|
||||
"columns": [
|
||||
{
|
||||
"title": __("Created on"),
|
||||
"data": "created_on",
|
||||
"title": __("Name"),
|
||||
"data": "me.package_id:me.name",
|
||||
"searchable": (erm_provider == 'manual'),
|
||||
"orderable": (erm_provider == 'manul'),
|
||||
"render": function (data, type, row, meta) {
|
||||
// Rendering done in drawCallback
|
||||
return ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"title": __("Vendor"),
|
||||
"data": "vendor_id",
|
||||
"searchable": (erm_provider == 'manual'),
|
||||
"orderable": (erm_provider == 'manul'),
|
||||
"render": function (data, type, row, meta) {
|
||||
return row.vendor ? escape_str(row.vendor.name) : ""
|
||||
},
|
||||
},
|
||||
{
|
||||
"title": __("Type"),
|
||||
"data": "package_type",
|
||||
"searchable": (erm_provider == 'manual'),
|
||||
"orderable": (erm_provider == 'manul'),
|
||||
"render": function (data, type, row, meta) {
|
||||
return escape_str(get_lib_from_av("av_package_types", row.package_type))
|
||||
}
|
||||
}, {
|
||||
"searchable": (erm_provider == 'manual'),
|
||||
"orderable": (erm_provider == 'manul'),
|
||||
"searchable": true,
|
||||
"orderable": true,
|
||||
"render": function (data, type, row, meta) {
|
||||
return $date(row.created_on)
|
||||
return escape_str(get_lib_from_av("av_package_content_types", row.content_type))
|
||||
}
|
||||
} : null,
|
||||
erm_provider == 'manual' ?
|
||||
{
|
||||
"title": __("Actions"),
|
||||
"data": function (row, type, val, meta) {
|
||||
return '<div class="actions"></div>'
|
||||
},
|
||||
erm_provider == 'manual' ?
|
||||
{
|
||||
"title": __("Created on"),
|
||||
"data": "created_on",
|
||||
"searchable": true,
|
||||
"orderable": true,
|
||||
"render": function (data, type, row, meta) {
|
||||
return $date(row.created_on)
|
||||
}
|
||||
} : null,
|
||||
erm_provider == 'manual' ?
|
||||
{
|
||||
"title": __("Actions"),
|
||||
"data": function (row, type, val, meta) {
|
||||
return '<div class="actions"></div>'
|
||||
},
|
||||
"className": "actions noExport",
|
||||
"searchable": false,
|
||||
"orderable": false
|
||||
} : null,
|
||||
].filter(Boolean),
|
||||
drawCallback: function (settings) {
|
||||
|
||||
var api = new $.fn.dataTable.Api(settings)
|
||||
|
||||
$.each($(this).find("td .actions"), function (index, e) {
|
||||
let package_id = api.row(index).data().package_id
|
||||
let editButton = createVNode("a", {
|
||||
class: "btn btn-default btn-xs", role: "button", onClick: () => {
|
||||
edit_package(package_id)
|
||||
}
|
||||
},
|
||||
"className": "actions noExport",
|
||||
"searchable": false,
|
||||
"orderable": false
|
||||
} : null,
|
||||
].filter(Boolean),
|
||||
drawCallback: function (settings) {
|
||||
[createVNode("i", { class: "fa fa-pencil", 'aria-hidden': "true" }), __("Edit")])
|
||||
|
||||
var api = new $.fn.dataTable.Api(settings)
|
||||
let deleteButton = createVNode("a", {
|
||||
class: "btn btn-default btn-xs", role: "button", onClick: () => {
|
||||
delete_package(package_id)
|
||||
}
|
||||
},
|
||||
[createVNode("i", { class: "fa fa-trash", 'aria-hidden': "true" }), __("Delete")])
|
||||
|
||||
$.each($(this).find("td .actions"), function (index, e) {
|
||||
let package_id = api.row(index).data().package_id
|
||||
let editButton = createVNode("a", {
|
||||
class: "btn btn-default btn-xs", role: "button", onClick: () => {
|
||||
edit_package(package_id)
|
||||
let n = createVNode('span', {}, [editButton, " ", deleteButton])
|
||||
render(n, e)
|
||||
})
|
||||
|
||||
$.each($(this).find("tbody tr td:first-child"), function (index, e) {
|
||||
let row = api.row(index).data()
|
||||
if (!row) return // Happen if the table is empty
|
||||
let n = createVNode("a", {
|
||||
role: "button",
|
||||
href: "/cgi-bin/koha/erm/eholdings/packages/" + row.package_id,
|
||||
onClick: (e) => {
|
||||
e.preventDefault()
|
||||
show_package(row.package_id)
|
||||
}
|
||||
},
|
||||
`${row.name} (#${row.package_id})`
|
||||
)
|
||||
if (row.is_selected) {
|
||||
n = createVNode('span', {}, [n, " ", createVNode("i", { class: "fa fa-check-square-o", style: { color: "green" }, title: __("Is selected") })])
|
||||
}
|
||||
},
|
||||
[createVNode("i", { class: "fa fa-pencil", 'aria-hidden': "true" }), __("Edit")])
|
||||
|
||||
let deleteButton = createVNode("a", {
|
||||
class: "btn btn-default btn-xs", role: "button", onClick: () => {
|
||||
delete_package(package_id)
|
||||
render(n, e)
|
||||
})
|
||||
},
|
||||
...(erm_provider == 'manual' ? {
|
||||
preDrawCallback: function (settings) {
|
||||
var table_id = settings.nTable.id
|
||||
if (erm_provider == 'manual') {
|
||||
$("#" + table_id).find("thead th").eq(1).attr('data-filter', 'vendors')
|
||||
}
|
||||
},
|
||||
[createVNode("i", { class: "fa fa-trash", 'aria-hidden': "true" }), __("Delete")])
|
||||
|
||||
let n = createVNode('span', {}, [editButton, " ", deleteButton])
|
||||
render(n, e)
|
||||
})
|
||||
|
||||
$.each($(this).find("tbody tr td:first-child"), function (index, e) {
|
||||
let row = api.row(index).data()
|
||||
if (!row) return // Happen if the table is empty
|
||||
let n = createVNode("a", {
|
||||
role: "button",
|
||||
href: "/cgi-bin/koha/erm/eholdings/packages/" + row.package_id,
|
||||
onClick: (e) => {
|
||||
e.preventDefault()
|
||||
show_package(row.package_id)
|
||||
}
|
||||
},
|
||||
`${row.name} (#${row.package_id})`
|
||||
)
|
||||
if (row.is_selected) {
|
||||
n = createVNode('span', {}, [n, " ", createVNode("i", { class: "fa fa-check-square-o", style: { color: "green" }, title: __("Is selected") })])
|
||||
$("#" + table_id).find("thead th").eq(2).attr('data-filter', 'av_package_types')
|
||||
$("#" + table_id).find("thead th").eq(3).attr('data-filter', 'av_package_content_types')
|
||||
}
|
||||
render(n, e)
|
||||
})
|
||||
},
|
||||
...(erm_provider == 'manual' ? {
|
||||
preDrawCallback: function (settings) {
|
||||
var table_id = settings.nTable.id
|
||||
if (erm_provider == 'manual') {
|
||||
$("#" + table_id).find("thead th").eq(1).attr('data-filter', 'vendors')
|
||||
}
|
||||
$("#" + table_id).find("thead th").eq(2).attr('data-filter', 'av_package_types')
|
||||
$("#" + table_id).find("thead th").eq(3).attr('data-filter', 'av_package_content_types')
|
||||
} : {}),
|
||||
}, eholdings_packages_table_settings, erm_provider == 'manual' ? 1 : 0, additional_filters)
|
||||
|
||||
if (erm_provider != 'manual') {
|
||||
if (filters.package_name.length) {
|
||||
this.filter_table()
|
||||
}
|
||||
} : {}),
|
||||
}, eholdings_packages_table_settings, erm_provider == 'manual' ? 1 : 0, additional_filters)
|
||||
|
||||
if (erm_provider != 'manual') {
|
||||
if (filters.package_name.length) {
|
||||
this.filter_table()
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
beforeUnmount() {
|
||||
$('#package_list')
|
||||
.DataTable()
|
||||
.destroy(true)
|
||||
//$('#package_list')
|
||||
// .DataTable()
|
||||
// .destroy(true)
|
||||
},
|
||||
components: { Toolbar },
|
||||
name: "EHoldingsPackagesList",
|
||||
}
|
||||
</script>
|
||||
</script>
|
||||
|
|
|
|||
|
|
@ -12,12 +12,16 @@
|
|||
<input
|
||||
type="text"
|
||||
id="package_name_filter"
|
||||
v-model="this.filters.package_name"
|
||||
@keyup.enter="filter_table"
|
||||
/>
|
||||
</li>
|
||||
<li>
|
||||
<label>{{ $t("Selection status") }}:</label>
|
||||
<select id="selection_type_filter">
|
||||
<select
|
||||
id="selection_type_filter"
|
||||
v-model="this.filters.selection_type"
|
||||
>
|
||||
<option value="0">{{ $t("All") }}</option>
|
||||
<option value="1">{{ $t("Selected") }}</option>
|
||||
<option value="2">{{ $t("Not selected") }}</option>
|
||||
|
|
@ -47,6 +51,10 @@ export default {
|
|||
},
|
||||
data() {
|
||||
return {
|
||||
filters: {
|
||||
package_name: "",
|
||||
selection_type: 0,
|
||||
},
|
||||
display_filters: false,
|
||||
}
|
||||
},
|
||||
|
|
@ -61,75 +69,73 @@ export default {
|
|||
filter_table: function () {
|
||||
$("#package_list").DataTable().draw()
|
||||
},
|
||||
build_datatable: function () {
|
||||
let show_resource = this.show_resource
|
||||
let resources = this.resources
|
||||
let filters = this.filters
|
||||
|
||||
$('#package_list').dataTable($.extend(true, {}, dataTablesDefaults, {
|
||||
data: resources,
|
||||
"embed": ['package.name'],
|
||||
...(erm_provider == 'manual' ? { order: [[0, "asc"]] } : {}),
|
||||
...(erm_provider != 'manual' ? { ordering: false } : {}),
|
||||
...(erm_provider != 'manual' ? { dom: '<"top pager"<"table_entries"ilp>>tr<"bottom pager"ip>' } : {}),
|
||||
...(erm_provider != 'manual' ? { aLengthMenu: [[10, 20, 50, 100], [10, 20, 50, 100]] } : {}),
|
||||
autoWidth: false,
|
||||
"columns": [
|
||||
{
|
||||
"title": __("Name"),
|
||||
"data": "package.name",
|
||||
"searchable": (erm_provider == 'manual'),
|
||||
"orderable": (erm_provider == 'manul'),
|
||||
"render": function (data, type, row, meta) {
|
||||
// Rendering done in drawCallback
|
||||
return ""
|
||||
},
|
||||
width: '100%',
|
||||
},
|
||||
],
|
||||
drawCallback: function (settings) {
|
||||
|
||||
var api = new $.fn.dataTable.Api(settings)
|
||||
|
||||
$.each($(this).find("tbody tr td:first-child"), function (index, e) {
|
||||
let row = api.row(index).data()
|
||||
if (!row) return // Happen if the table is empty
|
||||
let n = createVNode("a", {
|
||||
role: "button",
|
||||
href: "/cgi-bin/koha/erm/eholdings/resources/" + row.resource_id,
|
||||
onClick: (e) => {
|
||||
e.preventDefault()
|
||||
show_resource(row.resource_id)
|
||||
}
|
||||
},
|
||||
`${row.package.name}`
|
||||
)
|
||||
if (row.is_selected) {
|
||||
n = createVNode('span', {}, [n, " ", createVNode("i", { class: "fa fa-check-square-o", style: { color: "green" }, title: __("Is selected") })])
|
||||
}
|
||||
render(n, e)
|
||||
})
|
||||
},
|
||||
...(erm_provider != 'manual' ? {
|
||||
initComplete: function () {
|
||||
$.fn.dataTable.ext.search.push(
|
||||
function (settings, data, dataIndex, row) {
|
||||
console.log(filters.selection_type)
|
||||
return row.package.name.match(new RegExp(filters.package_name, "i"))
|
||||
&& (filters.selection_type == 0
|
||||
|| filters.selection_type == 1 && row.is_selected
|
||||
|| filters.selection_type == 2 && !row.is_selected)
|
||||
}
|
||||
)
|
||||
}
|
||||
} : {}),
|
||||
}))
|
||||
},
|
||||
},
|
||||
mounted() {
|
||||
let show_resource = this.show_resource
|
||||
let resources = this.resources
|
||||
|
||||
let additional_filters = {}
|
||||
if (erm_provider != 'manual') {
|
||||
additional_filters = {
|
||||
name: function () {
|
||||
let package_name_search = $("#package_name_filter").val()
|
||||
if (!package_name_search) return ""
|
||||
return package_name_search
|
||||
},
|
||||
selection_type: function () {
|
||||
let selection_type_search = $("#selection_type_filter").val()
|
||||
if (!selection_type_search) return ""
|
||||
return selection_type_search
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
$('#package_list').dataTable($.extend(true, {}, dataTablesDefaults, {
|
||||
data: resources,
|
||||
...(erm_provider != 'manual' ? { dom: '<"top pager"<"table_entries"ilp>>tr<"bottom pager"ip>' } : {}),
|
||||
...(erm_provider != 'manual' ? { lengthMenu: [[10, 20, 50, 100], [10, 20, 50, 100]] } : {}),
|
||||
"embed": ['package.name'],
|
||||
"columnDefs": [{ "width": "20%", "targets": 0 }
|
||||
],
|
||||
autoWidth: false,
|
||||
"columns": [
|
||||
{
|
||||
"title": __("Name"),
|
||||
"data": "package_name",
|
||||
"searchable": true,
|
||||
"orderable": true,
|
||||
"render": function (data, type, row, meta) {
|
||||
// Rendering done in drawCallback
|
||||
return ""
|
||||
},
|
||||
width: '100%',
|
||||
},
|
||||
],
|
||||
drawCallback: function (settings) {
|
||||
|
||||
var api = new $.fn.dataTable.Api(settings)
|
||||
|
||||
$.each($(this).find("tbody tr td:first-child"), function (index, e) {
|
||||
let row = api.row(index).data()
|
||||
if (!row) return // Happen if the table is empty
|
||||
let n = createVNode("a", {
|
||||
role: "button",
|
||||
href: "/cgi-bin/koha/erm/eholdings/resources/" + row.resource_id,
|
||||
onClick: (e) => {
|
||||
e.preventDefault()
|
||||
show_resource(row.resource_id)
|
||||
}
|
||||
},
|
||||
`${row.package.name}`
|
||||
)
|
||||
if (row.is_selected) {
|
||||
n = createVNode('span', {}, [n, " ", createVNode("i", { class: "fa fa-check-square-o", style: { color: "green" }, title: __("Is selected") })])
|
||||
}
|
||||
render(n, e)
|
||||
})
|
||||
},
|
||||
}))
|
||||
|
||||
$('#package_list_result').css('display', 'block')
|
||||
$("#package_list").DataTable().columns.adjust().draw()
|
||||
this.build_datatable()
|
||||
},
|
||||
beforeUnmount() {
|
||||
$('#package_list')
|
||||
|
|
@ -145,7 +151,7 @@ export default {
|
|||
|
||||
<style scoped>
|
||||
#package_list_result {
|
||||
width: 50%;
|
||||
width: 60%;
|
||||
padding-left: 26rem;
|
||||
}
|
||||
#package_list {
|
||||
|
|
@ -154,4 +160,4 @@ export default {
|
|||
#filters fieldset {
|
||||
margin: 0;
|
||||
}
|
||||
</style>
|
||||
</style>
|
||||
|
|
|
|||
|
|
@ -55,7 +55,7 @@ export default {
|
|||
onSubmit(e) {
|
||||
e.preventDefault()
|
||||
|
||||
let apiUrl = '/api/v1/erm/eholdings/titles' + this.title_id
|
||||
let apiUrl = '/api/v1/erm/eholdings/titles/' + this.eholding.title_id
|
||||
|
||||
const options = {
|
||||
method: 'DELETE',
|
||||
|
|
|
|||
|
|
@ -3,14 +3,13 @@
|
|||
<div v-if="!this.initialized">{{ $t("Loading") }}</div>
|
||||
<div v-else-if="this.titles" id="titles_list">
|
||||
<Toolbar />
|
||||
<table v-if="this.titles.length" id="title_list"></table>
|
||||
<div v-if="this.titles.length" id="title_list_result">
|
||||
<table v-if="this.titles.length" id="title_list"></table>
|
||||
</div>
|
||||
<div v-else-if="this.initialized" class="dialog message">
|
||||
{{ $t("There are no titles defined") }}
|
||||
</div>
|
||||
</div>
|
||||
<div id="title_list_result">
|
||||
<table id="title_list"></table>
|
||||
</div>
|
||||
</div>
|
||||
<div v-else>
|
||||
<fieldset>
|
||||
|
|
@ -94,7 +93,7 @@ export default {
|
|||
},
|
||||
beforeRouteEnter(to, from, next) {
|
||||
next(vm => {
|
||||
vm.getTitles()
|
||||
vm.getTitles().then(() => vm.build_datatable())
|
||||
})
|
||||
},
|
||||
inject: ['erm_provider'],
|
||||
|
|
@ -123,170 +122,170 @@ export default {
|
|||
} else {
|
||||
this.cannot_search = true
|
||||
}
|
||||
}
|
||||
},
|
||||
updated() {
|
||||
let show_title = this.show_title
|
||||
let edit_title = this.edit_title
|
||||
let delete_title = this.delete_title
|
||||
let get_lib_from_av = this.get_lib_from_av
|
||||
let filters = this.filters
|
||||
},
|
||||
build_datatable: function () {
|
||||
let show_title = this.show_title
|
||||
let edit_title = this.edit_title
|
||||
let delete_title = this.delete_title
|
||||
let get_lib_from_av = this.get_lib_from_av
|
||||
let filters = this.filters
|
||||
|
||||
window['vendors'] = this.vendors.map(e => {
|
||||
e['_id'] = e['id']
|
||||
e['_str'] = e['name']
|
||||
return e
|
||||
})
|
||||
let vendors_map = this.vendors.reduce((map, e) => {
|
||||
map[e.id] = e
|
||||
return map
|
||||
}, {})
|
||||
window['av_title_publication_types'] = this.av_title_publication_types.map(e => {
|
||||
e['_id'] = e['authorised_value']
|
||||
e['_str'] = e['lib']
|
||||
return e
|
||||
})
|
||||
window['vendors'] = this.vendors.map(e => {
|
||||
e['_id'] = e['id']
|
||||
e['_str'] = e['name']
|
||||
return e
|
||||
})
|
||||
let vendors_map = this.vendors.reduce((map, e) => {
|
||||
map[e.id] = e
|
||||
return map
|
||||
}, {})
|
||||
window['av_title_publication_types'] = this.av_title_publication_types.map(e => {
|
||||
e['_id'] = e['authorised_value']
|
||||
e['_str'] = e['lib']
|
||||
return e
|
||||
})
|
||||
|
||||
let additional_filters = {}
|
||||
if (erm_provider != 'manual') {
|
||||
additional_filters = {
|
||||
publication_title: function () {
|
||||
return filters.publication_title || ""
|
||||
},
|
||||
publication_type: function () {
|
||||
return filters.content_type_search || ""
|
||||
},
|
||||
selection_type: function () {
|
||||
return filters.selection_type || ""
|
||||
},
|
||||
}
|
||||
}
|
||||
$('#title_list').kohaTable({
|
||||
"ajax": {
|
||||
"url": "/api/v1/erm/eholdings/titles",
|
||||
},
|
||||
embed: ["resources.package"],
|
||||
...(erm_provider == 'manual' ? { order: [[0, "asc"]] } : {}),
|
||||
...(erm_provider != 'manual' ? { ordering: false } : {}),
|
||||
...(erm_provider == 'manual' ? { search: { search: filters.publication_title } } : {}),
|
||||
...(erm_provider != 'manual' ? { dom: '<"top pager"<"table_entries"ilp>>tr<"bottom pager"ip>' } : {}),
|
||||
...(erm_provider != 'manual' ? { lengthMenu: [[10, 20, 50, 100], [10, 20, 50, 100]] } : {}),
|
||||
...(erm_provider != 'manual' ? { deferLoading: true } : {}),
|
||||
autoWidth: false,
|
||||
"columns": [
|
||||
{
|
||||
"title": __("Title"),
|
||||
"data": "me.publication_title",
|
||||
"searchable": (erm_provider == 'manual'),
|
||||
"orderable": (erm_provider == 'manul'),
|
||||
"render": function (data, type, row, meta) {
|
||||
// Rendering done in drawCallback
|
||||
return ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"title": __("Vendor"),
|
||||
"data": "vendor_id",
|
||||
"searchable": (erm_provider == 'manual'),
|
||||
"orderable": (erm_provider == 'manul'),
|
||||
"render": function (data, type, row, meta) {
|
||||
return row.vendor_id != undefined ? escape_str(vendors_map[row.vendor_id].name) : ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"title": __("Publication type"),
|
||||
"data": "publication_type",
|
||||
"searchable": (erm_provider == 'manual'),
|
||||
"orderable": (erm_provider == 'manul'),
|
||||
"render": function (data, type, row, meta) {
|
||||
return escape_str(get_lib_from_av("av_title_publication_types", row.publication_type))
|
||||
}
|
||||
},
|
||||
{
|
||||
"title": __("Identifier"),
|
||||
"data": "print_identifier:online_identifier",
|
||||
"searchable": (erm_provider == 'manual'),
|
||||
"orderable": (erm_provider == 'manul'),
|
||||
"render": function (data, type, row, meta) {
|
||||
let print_identifier = row.print_identifier
|
||||
let online_identifier = row.online_identifier
|
||||
return (print_identifier ? escape_str(_("ISBN (Print): %s").format(print_identifier)) : "") +
|
||||
(online_identifier ? escape_str(_("ISBN (Online): %s").format(online_identifier)) : "")
|
||||
}
|
||||
},
|
||||
erm_provider == 'manual' ? {
|
||||
"title": __("Actions"),
|
||||
"data": function (row, type, val, meta) {
|
||||
return '<div class="actions"></div>'
|
||||
let additional_filters = {}
|
||||
if (erm_provider != 'manual') {
|
||||
additional_filters = {
|
||||
publication_title: function () {
|
||||
return filters.publication_title || ""
|
||||
},
|
||||
"className": "actions noExport",
|
||||
"searchable": false,
|
||||
"orderable": false
|
||||
} : null,
|
||||
].filter(Boolean),
|
||||
drawCallback: function (settings) {
|
||||
|
||||
var api = new $.fn.dataTable.Api(settings)
|
||||
|
||||
$.each($(this).find("td .actions"), function (index, e) {
|
||||
let title_id = api.row(index).data().title_id
|
||||
let editButton = createVNode("a", {
|
||||
class: "btn btn-default btn-xs", role: "button", onClick: () => {
|
||||
edit_title(title_id)
|
||||
}
|
||||
publication_type: function () {
|
||||
return filters.content_type_search || ""
|
||||
},
|
||||
[createVNode("i", { class: "fa fa-pencil", 'aria-hidden': "true" }), __("Edit")])
|
||||
|
||||
let deleteButton = createVNode("a", {
|
||||
class: "btn btn-default btn-xs", role: "button", onClick: () => {
|
||||
delete_title(title_id)
|
||||
}
|
||||
selection_type: function () {
|
||||
return filters.selection_type || ""
|
||||
},
|
||||
[createVNode("i", { class: "fa fa-trash", 'aria-hidden': "true" }), __("Delete")])
|
||||
|
||||
let n = createVNode('span', {}, [editButton, " ", deleteButton])
|
||||
render(n, e)
|
||||
})
|
||||
|
||||
$.each($(this).find("tbody tr td:first-child"), function (index, e) {
|
||||
let row = api.row(index).data()
|
||||
if (!row) return // Happen if the table is empty
|
||||
let n = createVNode("a", {
|
||||
role: "button",
|
||||
onClick: (e) => {
|
||||
e.preventDefault()
|
||||
show_title(row.title_id)
|
||||
}
|
||||
},
|
||||
`${row.publication_title} (#${row.title_id})`
|
||||
)
|
||||
// TODO? We don't have is_selected at title level
|
||||
//if (row.is_selected) {
|
||||
// n = createVNode('span', {}, [n, " ", createVNode("i", { class: "fa fa-check-square-o", style: { color: "green" }, title: __("Is selected") })])
|
||||
//}
|
||||
render(n, e)
|
||||
})
|
||||
},
|
||||
...(erm_provider == 'manual' ? {
|
||||
preDrawCallback: function (settings) {
|
||||
var table_id = settings.nTable.id
|
||||
$("#" + table_id).find("thead th").eq(1).attr('data-filter', 'vendors')
|
||||
}
|
||||
} : {}),
|
||||
}, eholdings_titles_table_settings, erm_provider == 'manual' ? 1 : 0, additional_filters)
|
||||
|
||||
if (erm_provider != 'manual') {
|
||||
if (filters.publication_title.length) {
|
||||
this.filter_table()
|
||||
}
|
||||
}
|
||||
$('#title_list').kohaTable({
|
||||
"ajax": {
|
||||
"url": "/api/v1/erm/eholdings/titles",
|
||||
},
|
||||
embed: ["resources.package"],
|
||||
...(erm_provider == 'manual' ? { order: [[0, "asc"]] } : {}),
|
||||
...(erm_provider != 'manual' ? { ordering: false } : {}),
|
||||
...(erm_provider == 'manual' ? { search: { search: filters.publication_title } } : {}),
|
||||
...(erm_provider != 'manual' ? { dom: '<"top pager"<"table_entries"ilp>>tr<"bottom pager"ip>' } : {}),
|
||||
...(erm_provider != 'manual' ? { aLengthMenu: [[10, 20, 50, 100], [10, 20, 50, 100]] } : {}),
|
||||
...(erm_provider != 'manual' ? { deferLoading: true } : {}),
|
||||
autoWidth: false,
|
||||
"columns": [
|
||||
{
|
||||
"title": __("Title"),
|
||||
"data": "me.publication_title",
|
||||
"searchable": (erm_provider == 'manual'),
|
||||
"orderable": (erm_provider == 'manul'),
|
||||
"render": function (data, type, row, meta) {
|
||||
// Rendering done in drawCallback
|
||||
return ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"title": __("Vendor"),
|
||||
"data": "vendor_id",
|
||||
"searchable": (erm_provider == 'manual'),
|
||||
"orderable": (erm_provider == 'manul'),
|
||||
"render": function (data, type, row, meta) {
|
||||
return row.vendor_id != undefined ? escape_str(vendors_map[row.vendor_id].name) : ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"title": __("Publication type"),
|
||||
"data": "publication_type",
|
||||
"searchable": (erm_provider == 'manual'),
|
||||
"orderable": (erm_provider == 'manul'),
|
||||
"render": function (data, type, row, meta) {
|
||||
return escape_str(get_lib_from_av("av_title_publication_types", row.publication_type))
|
||||
}
|
||||
},
|
||||
{
|
||||
"title": __("Identifier"),
|
||||
"data": "print_identifier:online_identifier",
|
||||
"searchable": (erm_provider == 'manual'),
|
||||
"orderable": (erm_provider == 'manul'),
|
||||
"render": function (data, type, row, meta) {
|
||||
let print_identifier = row.print_identifier
|
||||
let online_identifier = row.online_identifier
|
||||
return (print_identifier ? escape_str(_("ISBN (Print): %s").format(print_identifier)) : "") +
|
||||
(online_identifier ? escape_str(_("ISBN (Online): %s").format(online_identifier)) : "")
|
||||
}
|
||||
},
|
||||
erm_provider == 'manual' ? {
|
||||
"title": __("Actions"),
|
||||
"data": function (row, type, val, meta) {
|
||||
return '<div class="actions"></div>'
|
||||
},
|
||||
"className": "actions noExport",
|
||||
"searchable": false,
|
||||
"orderable": false
|
||||
} : null,
|
||||
].filter(Boolean),
|
||||
drawCallback: function (settings) {
|
||||
|
||||
var api = new $.fn.dataTable.Api(settings)
|
||||
|
||||
$.each($(this).find("td .actions"), function (index, e) {
|
||||
let title_id = api.row(index).data().title_id
|
||||
let editButton = createVNode("a", {
|
||||
class: "btn btn-default btn-xs", role: "button", onClick: () => {
|
||||
edit_title(title_id)
|
||||
}
|
||||
},
|
||||
[createVNode("i", { class: "fa fa-pencil", 'aria-hidden': "true" }), __("Edit")])
|
||||
|
||||
let deleteButton = createVNode("a", {
|
||||
class: "btn btn-default btn-xs", role: "button", onClick: () => {
|
||||
delete_title(title_id)
|
||||
}
|
||||
},
|
||||
[createVNode("i", { class: "fa fa-trash", 'aria-hidden': "true" }), __("Delete")])
|
||||
|
||||
let n = createVNode('span', {}, [editButton, " ", deleteButton])
|
||||
render(n, e)
|
||||
})
|
||||
|
||||
$.each($(this).find("tbody tr td:first-child"), function (index, e) {
|
||||
let row = api.row(index).data()
|
||||
if (!row) return // Happen if the table is empty
|
||||
let n = createVNode("a", {
|
||||
role: "button",
|
||||
onClick: (e) => {
|
||||
e.preventDefault()
|
||||
show_title(row.title_id)
|
||||
}
|
||||
},
|
||||
`${row.publication_title} (#${row.title_id})`
|
||||
)
|
||||
// TODO? We don't have is_selected at title level
|
||||
//if (row.is_selected) {
|
||||
// n = createVNode('span', {}, [n, " ", createVNode("i", { class: "fa fa-check-square-o", style: { color: "green" }, title: __("Is selected") })])
|
||||
//}
|
||||
render(n, e)
|
||||
})
|
||||
},
|
||||
...(erm_provider == 'manual' ? {
|
||||
preDrawCallback: function (settings) {
|
||||
var table_id = settings.nTable.id
|
||||
$("#" + table_id).find("thead th").eq(1).attr('data-filter', 'vendors')
|
||||
}
|
||||
} : {}),
|
||||
}, eholdings_titles_table_settings, erm_provider == 'manual' ? 1 : 0, additional_filters)
|
||||
|
||||
if (erm_provider != 'manual') {
|
||||
if (filters.publication_title.length) {
|
||||
this.filter_table()
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
beforeUnmount() {
|
||||
$('#title_list')
|
||||
.DataTable()
|
||||
.destroy(true)
|
||||
//$('#title_list')
|
||||
// .DataTable()
|
||||
// .destroy(true)
|
||||
},
|
||||
components: { Toolbar },
|
||||
name: "EHoldingsTitlesList",
|
||||
}
|
||||
</script>
|
||||
</script>
|
||||
|
|
|
|||
Loading…
Reference in New Issue