Skip to content

Commit

Permalink
loan: update request pickup location
Browse files Browse the repository at this point in the history
* Adds route to update request pickup location.

Co-Authored-by: Alicia Zangger <alicia.zangger@rero.ch>
  • Loading branch information
Alicia Zangger committed Apr 24, 2020
1 parent 6b8ab98 commit d04540d
Show file tree
Hide file tree
Showing 2 changed files with 52 additions and 0 deletions.
20 changes: 20 additions & 0 deletions rero_ils/modules/items/api_views.py
Original file line number Diff line number Diff line change
Expand Up @@ -164,9 +164,29 @@ def automatic_checkin(item, data):
@jsonify_action
def cancel_loan(item, params):
"""HTTP request for cancel action."""
# TODO: manage transitions for complex cases
return item.cancel_loan(**params)


@api_blueprint.route("/update_loan_pickup_location", methods=['POST'])
@check_authentication
def update_loan_pickup_location():
"""HTTP request for update loan pickup location."""
data = flask_request.get_json()
loan_pid = data.get('loan_pid')
pickup_location_pid = data.get('pickup_location_pid')
if not loan_pid:
return jsonify({'status': 'error: Not Found'}), 404
loan = Loan.get_record_by_pid(loan_pid)
# for now request pickup location update allowed for pending requests only
# TODO: manage case 'at desk' and 'in transit' (needs PO feedback)
if loan.get('state') == 'PENDING':
loan['pickup_location_pid'] = pickup_location_pid
new_loan = loan.update(loan, dbcommit=True, reindex=True)
return new_loan
return jsonify({'status': 'error: Forbidden'}), 403


@api_blueprint.route("/lose", methods=['POST'])
@check_authentication
@jsonify_action
Expand Down
32 changes: 32 additions & 0 deletions tests/api/test_items_rest_views.py
Original file line number Diff line number Diff line change
Expand Up @@ -670,3 +670,35 @@ def test_checkout_cancel_old_loan(
# loan will be canclled if a librarian decided to checkout the item anyway.
item, actions = item_lib_fully.prior_checkout_actions(action_params)
assert 'cancel' in actions


def test_update_loan_pickup_location(
client, librarian_martigny_no_email,
patron_martigny_no_email, loc_public_martigny, loc_public_saxon,
item3_lib_martigny, circulation_policies):
"""Test loan pickup location change."""
login_user_via_session(client, librarian_martigny_no_email.user)
# request an item by a librarian
res, data = postdata(
client,
'api_item.librarian_request',
dict(
item_pid=item3_lib_martigny.pid,
pickup_location_pid=loc_public_martigny.pid,
patron_pid=patron_martigny_no_email.pid
)
)
assert res.status_code == 200
# update pickup location of the request
loan_pid = data.get('action_applied').get('request').get('pid')
res, data = postdata(
client,
'api_item.update_loan_pickup_location',
dict(
item_pid=item3_lib_martigny.pid,
pickup_location_pid=loc_public_saxon.pid,
loan_pid=loan_pid
)
)
assert res.status_code == 200
assert data.get('pickup_location_pid') == loc_public_saxon.pid

0 comments on commit d04540d

Please sign in to comment.