Koha/api/v1/swagger/paths/items.yaml
Martin Renvoize 5f614c05fd
Bug 28854: Expose functionality to attach items to bundles
This patch adds methods the the Koha::Item object for managing item
bundling operations and then exposes those methods via the REST API.

We include the new `BundleNotLoanValue` preference for setting not
for loan values when an item is added to a bundle.

Finally, we expose bundle management via the catalogue details page.

Test plan:
0) Apply patches up to this point and run the database update
1) Configuration: `BundleNotLoanValue` should have been set by the
   database update and point to a newly added AV value.
2) Creating a new bundle
   * Add a new bib record
   * Mark the bib record as a 'collection' type by setting leader
     position 7 to 'c'
   * Add a new item to this bib record
   * You should see a new 'Manage bundle' button available in the
     'Actions' column of the Holdings table.
   * Clicking 'Manage bundle' should expand the table to include a new
     row directly beneath this one.
   * Use the new 'Add to bundle' button that appears in this row to
     trigger a modal that allows entering the barcode of items you wish
     to add to the bundle
   * Upon closing the modal, the bundle content table should reload and
     contain your newly associated items.
   * You can subsequently remove an item from a bundle using the new
     'Remove' button.
3) Not for loan
   * Items that have been added into a bundle should now appear as 'Not
     for loan' from their original biblio record and note which bundle
     they belong to.
4) Error cases
   * Try adding an item that already belongs to a bundle to another
     bundle: Note an error is displayed in the modal form.
5) The bundles feature can be disabled by unsetting the
   `BundleNotLoanValue` system preference.

Signed-off-by: Katrin Fischer <katrin.fischer@bsz-bw.de>

Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
2022-07-13 10:35:25 -03:00

315 lines
9 KiB
YAML

---
/items:
get:
x-mojo-to: Items#list
operationId: listItems
tags:
- items
summary: List items
parameters:
- name: external_id
in: query
description: Search on the item's barcode
required: false
type: string
- $ref: "../swagger.yaml#/parameters/match"
- $ref: "../swagger.yaml#/parameters/order_by"
- $ref: "../swagger.yaml#/parameters/page"
- $ref: "../swagger.yaml#/parameters/per_page"
- $ref: "../swagger.yaml#/parameters/q_param"
- $ref: "../swagger.yaml#/parameters/q_body"
- $ref: "../swagger.yaml#/parameters/q_header"
- $ref: "../swagger.yaml#/parameters/request_id_header"
consumes:
- application/json
produces:
- application/json
responses:
"200":
description: A list of item
schema:
type: array
items:
$ref: "../swagger.yaml#/definitions/item"
"401":
description: Authentication required
schema:
$ref: "../swagger.yaml#/definitions/error"
"403":
description: Access forbidden
schema:
$ref: "../swagger.yaml#/definitions/error"
"500":
description: |
Internal server error. Possible `error_code` attribute values:
* `internal_server_error`
schema:
$ref: "../swagger.yaml#/definitions/error"
"503":
description: Under maintenance
schema:
$ref: "../swagger.yaml#/definitions/error"
x-koha-authorization:
permissions:
catalogue: "1"
"/items/{item_id}":
get:
x-mojo-to: Items#get
operationId: getItem
tags:
- items
summary: Get item
parameters:
- $ref: "../swagger.yaml#/parameters/item_id_pp"
consumes:
- application/json
produces:
- application/json
responses:
"200":
description: An item
schema:
$ref: "../swagger.yaml#/definitions/item"
"400":
description: Missing or wrong parameters
schema:
$ref: "../swagger.yaml#/definitions/error"
"404":
description: Item not found
schema:
$ref: "../swagger.yaml#/definitions/error"
"500":
description: |
Internal server error. Possible `error_code` attribute values:
* `internal_server_error`
schema:
$ref: "../swagger.yaml#/definitions/error"
"503":
description: Under maintenance
schema:
$ref: "../swagger.yaml#/definitions/error"
x-koha-authorization:
permissions:
catalogue: "1"
"/items/{item_id}/bundled_items":
post:
x-mojo-to: Items#add_to_bundle
operationId: addToBundle
tags:
- items
summary: Add item to bundle
parameters:
- $ref: "../swagger.yaml#/parameters/item_id_pp"
- name: body
in: body
description: A JSON object containing information about the new bundle link
required: true
schema:
$ref: "../swagger.yaml#/definitions/bundle_link"
consumes:
- application/json
produces:
- application/json
responses:
"201":
description: A successfully created bundle link
schema:
items:
$ref: "../swagger.yaml#/definitions/item"
"400":
description: Bad parameter
schema:
$ref: "../swagger.yaml#/definitions/error"
"401":
description: Authentication required
schema:
$ref: "../swagger.yaml#/definitions/error"
"403":
description: Access forbidden
schema:
$ref: "../swagger.yaml#/definitions/error"
"404":
description: Resource not found
schema:
$ref: "../swagger.yaml#/definitions/error"
"409":
description: Conflict in creating resource
schema:
$ref: "../swagger.yaml#/definitions/error"
"500":
description: Internal server error
schema:
$ref: "../swagger.yaml#/definitions/error"
"503":
description: Under maintenance
schema:
$ref: "../swagger.yaml#/definitions/error"
x-koha-authorization:
permissions:
catalogue: 1
get:
x-mojo-to: Items#bundled_items
operationId: bundledItems
tags:
- items
summary: List bundled items
parameters:
- $ref: "../swagger.yaml#/parameters/item_id_pp"
- name: external_id
in: query
description: Search on the item's barcode
required: false
type: string
- $ref: "../swagger.yaml#/parameters/match"
- $ref: "../swagger.yaml#/parameters/order_by"
- $ref: "../swagger.yaml#/parameters/page"
- $ref: "../swagger.yaml#/parameters/per_page"
- $ref: "../swagger.yaml#/parameters/q_param"
- $ref: "../swagger.yaml#/parameters/q_body"
- $ref: "../swagger.yaml#/parameters/q_header"
consumes:
- application/json
produces:
- application/json
responses:
"200":
description: A list of item
schema:
type: array
items:
$ref: "../swagger.yaml#/definitions/item"
"401":
description: Authentication required
schema:
$ref: "../swagger.yaml#/definitions/error"
"403":
description: Access forbidden
schema:
$ref: "../swagger.yaml#/definitions/error"
"500":
description: Internal server error
schema:
$ref: "../swagger.yaml#/definitions/error"
"503":
description: Under maintenance
schema:
$ref: "../swagger.yaml#/definitions/error"
x-koha-authorization:
permissions:
catalogue: "1"
x-koha-embed:
- biblio
- checkout
"/items/{item_id}/bundled_items/{bundled_item_id}":
delete:
x-mojo-to: Items#remove_from_bundle
operationId: removeFromBundle
tags:
- items
summary: Remove item from bundle
parameters:
- $ref: "../swagger.yaml#/parameters/item_id_pp"
- name: bundled_item_id
in: path
description: Internal identifier for the bundled item
required: true
type: string
consumes:
- application/json
produces:
- application/json
responses:
"204":
description: Bundle link deleted
"400":
description: Bad parameter
schema:
$ref: "../swagger.yaml#/definitions/error"
"401":
description: Authentication required
schema:
$ref: "../swagger.yaml#/definitions/error"
"403":
description: Access forbidden
schema:
$ref: "../swagger.yaml#/definitions/error"
"404":
description: Resource not found
schema:
$ref: "../swagger.yaml#/definitions/error"
"500":
description: Internal server error
schema:
$ref: "../swagger.yaml#/definitions/error"
"503":
description: Under maintenance
schema:
$ref: "../swagger.yaml#/definitions/error"
x-koha-authorization:
permissions:
catalogue: 1
"/items/{item_id}/pickup_locations":
get:
x-mojo-to: Items#pickup_locations
operationId: getItemPickupLocations
summary: Get valid pickup locations for an item
tags:
- items
parameters:
- $ref: "../swagger.yaml#/parameters/item_id_pp"
- name: patron_id
in: query
description: Internal patron identifier
required: true
type: integer
- $ref: "../swagger.yaml#/parameters/match"
- $ref: "../swagger.yaml#/parameters/order_by"
- $ref: "../swagger.yaml#/parameters/page"
- $ref: "../swagger.yaml#/parameters/per_page"
- $ref: "../swagger.yaml#/parameters/q_param"
- $ref: "../swagger.yaml#/parameters/q_body"
- $ref: "../swagger.yaml#/parameters/q_header"
- $ref: "../swagger.yaml#/parameters/request_id_header"
consumes:
- application/json
produces:
- application/json
responses:
"200":
description: Item pickup locations
schema:
type: array
items:
$ref: "../swagger.yaml#/definitions/library"
"400":
description: Missing or wrong parameters
schema:
$ref: "../swagger.yaml#/definitions/error"
"401":
description: Authentication required
schema:
$ref: "../swagger.yaml#/definitions/error"
"403":
description: Access forbidden
schema:
$ref: "../swagger.yaml#/definitions/error"
"404":
description: Biblio not found
schema:
$ref: "../swagger.yaml#/definitions/error"
"500":
description: |
Internal server error. Possible `error_code` attribute values:
* `internal_server_error`
schema:
$ref: "../swagger.yaml#/definitions/error"
"503":
description: Under maintenance
schema:
$ref: "../swagger.yaml#/definitions/error"
x-koha-authorization:
permissions:
reserveforothers: place_holds