Koha/api/v1/swagger/paths/patrons.yaml
Jonathan Druart 9309dedb53
Bug 30578: Remove circ/ysearch.pl in favor of the /patrons REST API route
This patch removes the circ/ysearch.pl script used by the jQuery autocomplete widget.
We can now use the /api/v1/patrons endpoint to retrieve the patrons and
generate the patron result list.

Prior to this patch the different occurrences were defining the style
and the list of patron's attributes to display for each option (name,
date of birth, age, address, etc.). Now they are all displaying the same
information.

To acchieve this we had to:
* Make js-date-format.inc and js-patron-get-age.inc available from js_includes.inc
and so available from everywhere, which is certainly a good move. We
could discuss why this code is in include file instead of JS files
however.
* Remove the .ajaxSetup call in tags-review.js to reduce its scope: an
underscore parameter was added to the REST API query (?)

A better solution would have been to extend the existing widget
(https://learn.jquery.com/jquery-ui/widget-factory/extending-widgets/)
but I didn't manage to do it, and I feel like there is a bug in jQuery
autocomplete. The "source" was not taken into account.
We could think about replacing the jQuery autocomplete with something
else, but that's outside the scope of this bug.

Test plan:
Search for patrons and confirm the autocomplete works and that the
"select" action works as before (either a redirect or select the
patrons) on the different views:
* Place a hold
* Search for tags (form on the left)
* In the header, "Check out" and "Search patrons"
* Add instructors to course reserves
* View logs (the "librarian" input)

Signed-off-by: Owen Leonard <oleonard@myacpl.org>
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
2022-07-18 11:01:34 -03:00

611 lines
18 KiB
YAML

---
/patrons:
get:
x-mojo-to: Patrons#list
operationId: listPatrons
tags:
- patrons
summary: List patrons
produces:
- application/json
parameters:
- name: patron_id
in: query
description: Search on patron_id
required: false
type: string
- name: cardnumber
in: query
description: Case insensitive search on cardnumber
required: false
type: string
- name: surname
in: query
description: Case insensitive search on surname
required: false
type: string
- name: firstname
in: query
description: Case insensitive search on firstname
required: false
type: string
- name: title
in: query
description: Case insensitive search on title
required: false
type: string
- name: other_name
in: query
description: Case insensitive search on othernames
required: false
type: string
- name: initials
in: query
description: Case insensitive search on initials
required: false
type: string
- name: street_number
in: query
description: Case insensitive search on streetnumber
required: false
type: string
- name: street_type
in: query
description: Case insensitive search on streettype
required: false
type: string
- name: address
in: query
description: Case insensitive search on address
required: false
type: string
- name: address2
in: query
description: Case insensitive search on address2
required: false
type: string
- name: city
in: query
description: Case insensitive search on city
required: false
type: string
- name: state
in: query
description: Case insensitive search on state
required: false
type: string
- name: postal_code
in: query
description: Case insensitive search on zipcode
required: false
type: string
- name: country
in: query
description: Case insensitive search on country
required: false
type: string
- name: email
in: query
description: Case insensitive search on email
required: false
type: string
- name: phone
in: query
description: Case insensitive search on phone
required: false
type: string
- name: mobile
in: query
description: Case insensitive search on mobile
required: false
type: string
- name: fax
in: query
description: Case insensitive search on fax
required: false
type: string
- name: secondary_email
in: query
description: Case insensitive search on secondary_email
required: false
type: string
- name: secondary_phone
in: query
description: Case insensitive search on secondary_phone
required: false
type: string
- name: altaddress_street_number
in: query
description: Case insensitive search on altaddress_street_number
required: false
type: string
- name: altaddress_street_type
in: query
description: Case insensitive search on altaddress_street_type
required: false
type: string
- name: altaddress_address
in: query
description: Case insensitive search on altaddress_address
required: false
type: string
- name: altaddress_address2
in: query
description: Case insensitive search on altaddress_address2
required: false
type: string
- name: altaddress_city
in: query
description: Case insensitive search on altaddress_city
required: false
type: string
- name: altaddress_state
in: query
description: Case insensitive search on altaddress_state
required: false
type: string
- name: altaddress_postal_code
in: query
description: Case insensitive search on altaddress_postal_code
required: false
type: string
- name: altaddress_country
in: query
description: Case insensitive search on altaddress_country
required: false
type: string
- name: altaddress_email
in: query
description: Case insensitive search on altaddress_email
required: false
type: string
- name: altaddress_phone
in: query
description: Case insensitive search on altaddress_phone
required: false
type: string
- name: date_of_birth
in: query
description: Case insensitive search on date_of_birth
required: false
type: string
- name: library_id
in: query
description: Case insensitive search on library_id
required: false
type: string
- name: category_id
in: query
description: Case insensitive search on category_id
required: false
type: string
- name: date_enrolled
in: query
description: Case insensitive search on date_enrolled
required: false
type: string
- name: expiry_date
in: query
description: Case insensitive search on expiry_date
required: false
type: string
- name: incorrect_address
in: query
description: Search on incorrect_address
required: false
type: boolean
- name: patron_card_lost
in: query
description: Search on patron_card_lost
required: false
type: boolean
- name: restricted
in: query
description: Filter search by restricted
required: false
type: boolean
- name: staff_notes
in: query
description: Case insensitive search on staff_notes
required: false
type: string
- name: relationship_type
in: query
description: Case insensitive search on relationship_type
required: false
type: string
- name: gender
in: query
description: Case insensitive search on gender
required: false
type: string
- name: userid
in: query
description: Case insensitive search on userid
required: false
type: string
- name: opac_notes
in: query
description: Case insensitive search on opac_notes
required: false
type: string
- name: altaddress_notes
in: query
description: Case insensitive search on altaddress_notes
required: false
type: string
- name: statistics_1
in: query
description: Case insensitive search on statistics_1
required: false
type: string
- name: statistics_2
in: query
description: Case insensitive search on statistics_2
required: false
type: string
- name: autorenew_checkouts
in: query
description: Search on autorenew_checkouts
required: false
type: boolean
- name: altcontact_firstname
in: query
description: Case insensitive search on altcontact_firstname
required: false
type: string
- name: altcontact_surname
in: query
description: Case insensitive search on altcontact_surname
required: false
type: string
- name: altcontact_address
in: query
description: Case insensitive search on altcontact_address
required: false
type: string
- name: altcontact_address2
in: query
description: Case insensitive search on altcontact_address2
required: false
type: string
- name: altcontact_city
in: query
description: Case insensitive search on altcontact_city
required: false
type: string
- name: altcontact_state
in: query
description: Case insensitive search on altcontact_state
required: false
type: string
- name: altcontact_postal_code
in: query
description: Case insensitive search on altcontact_postal_code
required: false
type: string
- name: altcontact_country
in: query
description: Case insensitive search on altcontact_country
required: false
type: string
- name: altcontact_phone
in: query
description: Case insensitive search on altcontact_phone
required: false
type: string
- name: sms_number
in: query
description: Case insensitive search on sms_number
required: false
type: string
- name: sms_provider_id
in: query
description: Case insensitive search on sms_provider_id
required: false
type: string
- name: privacy
in: query
description: Search on privacy
required: false
type: string
- name: privacy_guarantor_checkouts
in: query
description: Search on privacy_guarantor_checkouts
required: false
type: string
- name: check_previous_checkout
in: query
description: Case insensitive search on check_previous_checkout
required: false
type: string
- name: updated_on
in: query
description: Search on updated_on
required: false
type: string
- name: last_seen
in: query
description: Case insensitive search on last_seen
required: false
type: string
- name: lang
in: query
description: Case insensitive search on lang
required: false
type: string
- name: login_attempts
in: query
description: Search on login_attempts
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"
- name: x-koha-embed
in: header
required: false
description: Embed list sent as a request header
type: array
items:
type: string
enum:
- extended_attributes
- checkouts+count
- overdues+count
- account_balance
- library
collectionFormat: csv
responses:
"200":
description: A list of patrons
schema:
type: array
items:
$ref: "../swagger.yaml#/definitions/patron"
"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:
- borrowers: "edit_borrowers"
- tools: "label_creator"
- serials: "routing"
- acquisition: "order_manage"
post:
x-mojo-to: Patrons#add
operationId: addPatron
tags:
- patrons
summary: Add patron
parameters:
- name: body
in: body
description: A JSON object containing information about the new patron
required: true
schema:
$ref: "../swagger.yaml#/definitions/patron"
consumes:
- application/json
produces:
- application/json
responses:
"201":
description: A successfully created patron
schema:
items:
$ref: "../swagger.yaml#/definitions/patron"
"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. 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:
borrowers: edit_borrowers
"/patrons/{patron_id}":
get:
x-mojo-to: Patrons#get
operationId: getPatron
tags:
- patrons
summary: Get patron
parameters:
- $ref: "../swagger.yaml#/parameters/patron_id_pp"
- name: x-koha-embed
in: header
required: false
description: Embed list sent as a request header
type: array
items:
type: string
enum:
- extended_attributes
collectionFormat: csv
produces:
- application/json
responses:
"200":
description: A patron
schema:
$ref: "../swagger.yaml#/definitions/patron"
"401":
description: Authentication required
schema:
$ref: "../swagger.yaml#/definitions/error"
"403":
description: Access forbidden
schema:
$ref: "../swagger.yaml#/definitions/error"
"404":
description: Patron 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:
borrowers: edit_borrowers
put:
x-mojo-to: Patrons#update
operationId: updatePatron
tags:
- patrons
summary: Update patron
parameters:
- $ref: "../swagger.yaml#/parameters/patron_id_pp"
- name: body
in: body
description: A JSON object containing new information about existing patron
required: true
schema:
$ref: "../swagger.yaml#/definitions/patron"
consumes:
- application/json
produces:
- application/json
responses:
"200":
description: A successfully updated patron
schema:
items:
$ref: "../swagger.yaml#/definitions/patron"
"400":
description: Bad parameter
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 updating resource
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:
borrowers: "1"
delete:
x-mojo-to: Patrons#delete
operationId: deletePatron
tags:
- patrons
summary: Delete patron
parameters:
- $ref: "../swagger.yaml#/parameters/patron_id_pp"
produces:
- application/json
responses:
"204":
description: Patron deleted
"400":
description: Patron deletion failed
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: Patron not found
schema:
$ref: "../swagger.yaml#/definitions/error"
"409":
description: |
Conflict. Possible `error_code` attribute values:
* `has_checkouts`: The patron has pending checkouts
* `has_debt`: The patron has pending debts
* `has_guarantees`: The patron has guarantees
* `is_anonymous_patron`: The system-wide anonymous patron cannot be deleted
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:
borrowers: delete_borrowers