Bug 38010: Reset basket view
Signed-off-by: Michaela Sieber <michaela.sieber@kit.edu> Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org> Signed-off-by: Katrin Fischer <katrin.fischer@bsz-bw.de>
This commit is contained in:
parent
27bfe4ec94
commit
d4c3342262
|
|
@ -18,9 +18,8 @@ package Koha::REST::V1::Acquisitions::Baskets;
|
|||
use Modern::Perl;
|
||||
|
||||
use Mojo::Base 'Mojolicious::Controller';
|
||||
use Try::Tiny qw( catch try );
|
||||
|
||||
use C4::Acquisition qw( CanUserManageBasket );
|
||||
use Try::Tiny qw( catch try );
|
||||
|
||||
=head1 NAME
|
||||
|
||||
|
|
@ -66,25 +65,13 @@ Return a list of baskets
|
|||
=cut
|
||||
|
||||
sub list {
|
||||
my $c = shift->openapi->valid_input or return;
|
||||
my $patron = $c->stash('koha.user');
|
||||
my $c = shift->openapi->valid_input or return;
|
||||
|
||||
return try {
|
||||
|
||||
my $baskets_rs = Koha::Acquisition::Baskets->new;
|
||||
my $baskets = $c->objects->search($baskets_rs);
|
||||
|
||||
my $userflags = C4::Auth::getuserflags( $patron->flags, $patron->userid );
|
||||
|
||||
my @user_baskets;
|
||||
foreach my $basket (@$baskets) {
|
||||
my $success = CanUserManageBasket( $patron->unblessed, $basket, $userflags );
|
||||
push @user_baskets, $basket if $success;
|
||||
}
|
||||
|
||||
return $c->render(
|
||||
status => 200,
|
||||
openapi => \@user_baskets
|
||||
openapi => $c->objects->search( Koha::Acquisition::Baskets->new ),
|
||||
);
|
||||
} catch {
|
||||
$c->unhandled_exception($_);
|
||||
|
|
|
|||
|
|
@ -73,22 +73,6 @@ properties:
|
|||
- string
|
||||
- "null"
|
||||
description: basket notes
|
||||
orders:
|
||||
type: array
|
||||
description: List of orderlines for the basket
|
||||
items:
|
||||
$ref: "order.yaml"
|
||||
creator:
|
||||
type:
|
||||
- object
|
||||
- "null"
|
||||
description: Creator for the basket
|
||||
$ref: "patron.yaml"
|
||||
basket_group:
|
||||
type:
|
||||
- object
|
||||
- "null"
|
||||
description: Basket group
|
||||
create_items:
|
||||
type:
|
||||
- string
|
||||
|
|
|
|||
|
|
@ -14,18 +14,6 @@
|
|||
- $ref: "../swagger.yaml#/parameters/per_page"
|
||||
- $ref: "../swagger.yaml#/parameters/q_param"
|
||||
- $ref: "../swagger.yaml#/parameters/q_body"
|
||||
- name: x-koha-embed
|
||||
in: header
|
||||
required: false
|
||||
description: Embed list sent as a request header
|
||||
type: array
|
||||
items:
|
||||
type: string
|
||||
enum:
|
||||
- orders
|
||||
- creator
|
||||
- basket_group
|
||||
collectionFormat: csv
|
||||
produces:
|
||||
- application/json
|
||||
responses:
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
[% IF ( booksellerid ) %]
|
||||
<div id="vendor-menu" class="sidebar_menu">
|
||||
<ul>
|
||||
[% IF ( CAN_user_acquisition_order_manage ) %]<li><a href="/cgi-bin/koha/vendors/[% booksellerid | uri %]/baskets">Baskets</a></li>[% END %]
|
||||
[% IF ( CAN_user_acquisition_order_manage ) %]<li><a href="/cgi-bin/koha/acqui/booksellers.pl?booksellerid=[% booksellerid | uri %]">Baskets</a></li>[% END %]
|
||||
[% IF ( CAN_user_acquisition_group_manage ) %]<li><a href="/cgi-bin/koha/acqui/basketgroup.pl?booksellerid=[% booksellerid | uri %]">Basket groups</a></li>[% END %]
|
||||
[% IF ( CAN_user_acquisition_contracts_manage ) %]<li><a href="/cgi-bin/koha/admin/aqcontract.pl?booksellerid=[% booksellerid | uri %]">Contracts</a></li>[% END %]
|
||||
[% IF ( CAN_user_acquisition_issue_manage ) %]<li><a href="/cgi-bin/koha/acqui/vendor_issues.pl?booksellerid=[% booksellerid | uri %]">Vendor issues</a></li>[% END %]
|
||||
|
|
|
|||
|
|
@ -7,9 +7,10 @@
|
|||
isUserPermitted('CAN_user_acquisition_order_manage')
|
||||
"
|
||||
>
|
||||
<a :href="`/cgi-bin/koha/vendors/${vendorId}/baskets`">{{
|
||||
$__("Baskets")
|
||||
}}</a>
|
||||
<a
|
||||
:href="`/cgi-bin/koha/acqui/booksellers.pl?booksellerid=${vendorId}`"
|
||||
>{{ $__("Baskets") }}</a
|
||||
>
|
||||
</li>
|
||||
<li
|
||||
v-if="
|
||||
|
|
|
|||
|
|
@ -1,263 +0,0 @@
|
|||
<template>
|
||||
<div id="vendor_baskets">
|
||||
<div v-if="parseInt(basketCount) > 0" class="page-section">
|
||||
<KohaTable
|
||||
ref="table"
|
||||
v-bind="tableOptions"
|
||||
@addToBasket="addToBasket"
|
||||
@closeBasket="closeBasket"
|
||||
@uncertainPrices="uncertainPrices"
|
||||
></KohaTable>
|
||||
</div>
|
||||
<div v-else class="alert alert-info">
|
||||
{{ $__("There are no baskets defined") }}
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { inject, ref } from "vue";
|
||||
import { storeToRefs } from "pinia";
|
||||
import KohaTable from "../KohaTable.vue";
|
||||
|
||||
export default {
|
||||
setup() {
|
||||
const patronToHTML = $patron_to_html;
|
||||
const formatDate = $date;
|
||||
|
||||
const vendorStore = inject("vendorStore");
|
||||
const { vendors } = storeToRefs(vendorStore);
|
||||
|
||||
const { setConfirmationDialog, setMessage } = inject("mainStore");
|
||||
|
||||
const table = ref();
|
||||
|
||||
return {
|
||||
vendors,
|
||||
table,
|
||||
setConfirmationDialog,
|
||||
setMessage,
|
||||
escape_str,
|
||||
patronToHTML,
|
||||
formatDate,
|
||||
};
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
fp_config: flatpickr_defaults,
|
||||
initialized: false,
|
||||
tableOptions: {
|
||||
columns: this.getTableColumns(),
|
||||
options: { embed: "orders,creator,basket_group" },
|
||||
url: () => this.tableURL(),
|
||||
add_filters: true,
|
||||
actions: {
|
||||
"-1": [
|
||||
{
|
||||
addToBasket: {
|
||||
text: this.$__("Add to basket"),
|
||||
icon: "fa fa-plus",
|
||||
},
|
||||
},
|
||||
{
|
||||
closeBasket: {
|
||||
text: this.$__("Close basket"),
|
||||
icon: "fa fa-close",
|
||||
should_display: row =>
|
||||
row.orders.length > 0 && !row.standing,
|
||||
},
|
||||
},
|
||||
{
|
||||
uncertainPrices: {
|
||||
text: this.$__("Uncertain prices"),
|
||||
icon: "fa fa-question",
|
||||
should_display: row =>
|
||||
row.orders.filter(o => o.uncertain_price)
|
||||
.length > 0,
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
};
|
||||
},
|
||||
methods: {
|
||||
addToBasket({ basket_id }, dt, event) {
|
||||
event.preventDefault();
|
||||
location.href =
|
||||
"/cgi-bin/koha/acqui/basket.pl?basketno=" + basket_id;
|
||||
},
|
||||
closeBasket({ basket_id }, dt, event) {
|
||||
event.preventDefault();
|
||||
location.href =
|
||||
"/cgi-bin/koha/acqui/basket.pl?basketno=" + basket_id;
|
||||
},
|
||||
uncertainPrices({ basket_id }, dt, event) {
|
||||
event.preventDefault();
|
||||
location.href =
|
||||
"/cgi-bin/koha/acqui/uncertainprice.pl?booksellerid=" +
|
||||
basket_id +
|
||||
"&owner=1";
|
||||
},
|
||||
tableURL() {
|
||||
let url =
|
||||
"/api/v1/acquisitions/baskets?q=" +
|
||||
JSON.stringify({ "me.vendor_id": this.vendorId });
|
||||
return url;
|
||||
},
|
||||
getTableColumns() {
|
||||
const escape_str = this.escape_str;
|
||||
const patronToHTML = this.patronToHTML;
|
||||
const formatDate = this.formatDate;
|
||||
|
||||
return [
|
||||
{
|
||||
title: __("Name"),
|
||||
data: "me.name:me.basket_id",
|
||||
searchable: true,
|
||||
orderable: true,
|
||||
render(data, type, row, meta) {
|
||||
const name = row.name ? row.name : __("Unnamed basket");
|
||||
return (
|
||||
'<a href="/cgi-bin/koha/acqui/basket.pl?basketno=' +
|
||||
row.basket_id +
|
||||
'" class="show">' +
|
||||
escape_str(`${name} (#${row.basket_id})`) +
|
||||
"</a>"
|
||||
);
|
||||
},
|
||||
},
|
||||
{
|
||||
title: __("Item count"),
|
||||
data: "name",
|
||||
searchable: false,
|
||||
orderable: true,
|
||||
|
||||
render(data, type, row, meta) {
|
||||
let count = row.orders.length;
|
||||
const cancelledOrders = row.orders.filter(
|
||||
o => o.status == "cancelled"
|
||||
).length;
|
||||
if (cancelledOrders) {
|
||||
count +=
|
||||
" (" + cancelledOrders + __(" cancelled") + ")";
|
||||
}
|
||||
return count;
|
||||
},
|
||||
},
|
||||
{
|
||||
title: __("Bibliographic record count"),
|
||||
data: "name",
|
||||
searchable: false,
|
||||
orderable: true,
|
||||
render(data, type, row, meta) {
|
||||
const recordCount = row.orders.reduce(
|
||||
(acc, order) => {
|
||||
if (
|
||||
!acc.cancelledBibs.includes(
|
||||
order.biblio_id
|
||||
) &&
|
||||
order.status == "cancelled"
|
||||
) {
|
||||
acc.cancelledBibs.push(order.biblio_id);
|
||||
}
|
||||
if (acc.bibNumbers.includes(order.biblio_id)) {
|
||||
return acc;
|
||||
}
|
||||
acc.bibNumbers.push(order.biblio_id);
|
||||
return acc;
|
||||
},
|
||||
{
|
||||
bibNumbers: [],
|
||||
cancelledBibs: [],
|
||||
}
|
||||
);
|
||||
let count = recordCount.bibNumbers.length;
|
||||
if (recordCount.cancelledBibs.length) {
|
||||
count +=
|
||||
" (" +
|
||||
recordCount.cancelledBibs.length +
|
||||
__(" cancelled") +
|
||||
")";
|
||||
}
|
||||
return count;
|
||||
},
|
||||
},
|
||||
{
|
||||
title: __("Items expected"),
|
||||
data: "name",
|
||||
searchable: false,
|
||||
orderable: true,
|
||||
render(data, type, row, meta) {
|
||||
return row.orders.filter(
|
||||
o => !o.date_received && !o.cancellation_date
|
||||
).length;
|
||||
},
|
||||
},
|
||||
{
|
||||
title: __("Created by"),
|
||||
data: "creator_id",
|
||||
searchable: false,
|
||||
orderable: true,
|
||||
render(data, type, row, meta) {
|
||||
return patronToHTML(row.creator);
|
||||
},
|
||||
},
|
||||
{
|
||||
title: __("Date"),
|
||||
data: "creation_date",
|
||||
searchable: false,
|
||||
orderable: true,
|
||||
render(data, type, row, meta) {
|
||||
return formatDate(row.creation_date);
|
||||
},
|
||||
},
|
||||
{
|
||||
title: __("Basket group"),
|
||||
data: "basket_group_id",
|
||||
searchable: false,
|
||||
orderable: true,
|
||||
render(data, type, row, meta) {
|
||||
return row.basket_group ? row.basket_group.name : "";
|
||||
},
|
||||
},
|
||||
{
|
||||
title: __("Internal note"),
|
||||
data: "note",
|
||||
searchable: false,
|
||||
orderable: true,
|
||||
},
|
||||
{
|
||||
title: __("Closed"),
|
||||
data: "close_date",
|
||||
searchable: false,
|
||||
orderable: true,
|
||||
render(data, type, row, meta) {
|
||||
return formatDate(row.close_date);
|
||||
},
|
||||
},
|
||||
];
|
||||
},
|
||||
},
|
||||
components: { KohaTable },
|
||||
props: {
|
||||
basketCount: {
|
||||
type: String,
|
||||
default: "0",
|
||||
},
|
||||
vendorId: {
|
||||
type: Number,
|
||||
},
|
||||
},
|
||||
name: "VendorBaskets",
|
||||
emits: ["select-vendor", "close"],
|
||||
};
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.filters > label[for="by_mine_filter"],
|
||||
.filters > input[type="checkbox"],
|
||||
.filters > input[type="button"] {
|
||||
margin-left: 1rem;
|
||||
}
|
||||
</style>
|
||||
|
|
@ -238,9 +238,9 @@ export default {
|
|||
orderable: false,
|
||||
render(data, type, row, meta) {
|
||||
return row.baskets.length
|
||||
? '<a href="/cgi-bin/koha/vendors/' +
|
||||
? '<a href="/cgi-bin/koha/acqui/booksellers.pl?booksellerid=' +
|
||||
row.id +
|
||||
'/baskets" class="show">' +
|
||||
'" class="show">' +
|
||||
escape_str(
|
||||
`${row.baskets.length} basket(s)`
|
||||
) +
|
||||
|
|
|
|||
|
|
@ -66,36 +66,27 @@
|
|||
<h1>
|
||||
{{ vendor.name }}
|
||||
</h1>
|
||||
<template v-if="!basketView">
|
||||
<div class="row">
|
||||
<div class="col-sm-6">
|
||||
<VendorDetails :vendor="vendor" :display="true" />
|
||||
<VendorOrderingInformation
|
||||
:vendor="vendor"
|
||||
:display="true"
|
||||
/>
|
||||
<VendorInterfaces
|
||||
:vendor="vendor"
|
||||
v-if="vendor.interfaces.length > 0"
|
||||
:display="true"
|
||||
/>
|
||||
</div>
|
||||
<div class="col-sm-6">
|
||||
<VendorContacts :vendor="vendor" :display="true" />
|
||||
<VendorSubscriptions :vendor="vendor" />
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-sm-6">
|
||||
<VendorDetails :vendor="vendor" :display="true" />
|
||||
<VendorOrderingInformation :vendor="vendor" :display="true" />
|
||||
<VendorInterfaces
|
||||
:vendor="vendor"
|
||||
v-if="vendor.interfaces.length > 0"
|
||||
:display="true"
|
||||
/>
|
||||
</div>
|
||||
<div
|
||||
class="page-section rows"
|
||||
v-if="vendor.contracts && vendor.contracts.length > 0"
|
||||
>
|
||||
<VendorContracts :vendor="vendor" />
|
||||
<div class="col-sm-6">
|
||||
<VendorContacts :vendor="vendor" :display="true" />
|
||||
<VendorSubscriptions :vendor="vendor" />
|
||||
</div>
|
||||
</template>
|
||||
<template v-if="basketView">
|
||||
<h2>{{ $__("Baskets") }}</h2>
|
||||
<VendorBaskets :basketCount="basketCount" :vendorId="vendor.id" />
|
||||
</template>
|
||||
</div>
|
||||
<div
|
||||
class="page-section rows"
|
||||
v-if="vendor.contracts && vendor.contracts.length > 0"
|
||||
>
|
||||
<VendorContracts :vendor="vendor" />
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
|
|
@ -110,7 +101,6 @@ import VendorInterfaces from "./VendorInterfaces.vue";
|
|||
import VendorContacts from "./VendorContacts.vue";
|
||||
import VendorSubscriptions from "./VendorSubscriptions.vue";
|
||||
import VendorContracts from "./VendorContracts.vue";
|
||||
import VendorBaskets from "./VendorBaskets.vue";
|
||||
import DropdownButtons from "../DropdownButtons.vue";
|
||||
|
||||
export default {
|
||||
|
|
@ -126,20 +116,11 @@ export default {
|
|||
return {
|
||||
vendor: null,
|
||||
initialized: false,
|
||||
basketView: false,
|
||||
basketCount: null,
|
||||
};
|
||||
},
|
||||
beforeRouteEnter(to, from, next) {
|
||||
next(vm => {
|
||||
if (to.path.includes("basket")) {
|
||||
vm.basketView = true;
|
||||
vm.getVendor(to.params.vendor_id).then(() =>
|
||||
vm.getBasketCount(to.params.vendor_id)
|
||||
);
|
||||
} else {
|
||||
vm.getVendor(to.params.vendor_id);
|
||||
}
|
||||
vm.getVendor(to.params.vendor_id);
|
||||
});
|
||||
},
|
||||
methods: {
|
||||
|
|
@ -153,16 +134,6 @@ export default {
|
|||
error => {}
|
||||
);
|
||||
},
|
||||
async getBasketCount(booksellerid) {
|
||||
const client = APIClient.acquisition;
|
||||
await client.baskets.count({ booksellerid }).then(
|
||||
count => {
|
||||
this.basketCount = count;
|
||||
this.initialized = true;
|
||||
},
|
||||
error => {}
|
||||
);
|
||||
},
|
||||
},
|
||||
components: {
|
||||
Toolbar,
|
||||
|
|
@ -174,7 +145,6 @@ export default {
|
|||
VendorContacts,
|
||||
VendorSubscriptions,
|
||||
VendorContracts,
|
||||
VendorBaskets,
|
||||
},
|
||||
name: "VendorShow",
|
||||
};
|
||||
|
|
|
|||
|
|
@ -52,13 +52,6 @@ export const routes = [
|
|||
component: markRaw(VendorFormAdd),
|
||||
title: $__("Edit vendor"),
|
||||
},
|
||||
{
|
||||
path: ":vendor_id/baskets",
|
||||
name: "VendorShowBaskets",
|
||||
component: markRaw(VendorShow),
|
||||
title: $__("Baskets"),
|
||||
alternateLeftMenu: "VendorMenu",
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
|
|
|
|||
Loading…
Reference in New Issue