Skip to content

Commit

Permalink
Merge 977148c into aac70e6
Browse files Browse the repository at this point in the history
  • Loading branch information
Aly Badr committed Aug 26, 2019
2 parents aac70e6 + 977148c commit 5931866
Show file tree
Hide file tree
Showing 46 changed files with 1,882 additions and 200 deletions.
1 change: 1 addition & 0 deletions Pipfile.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

51 changes: 47 additions & 4 deletions rero_ils/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@

from .modules.circ_policies.api import CircPolicy
from .modules.documents.api import Document
from .modules.holdings.api import Holding, HoldingsIndexer
from .modules.item_types.api import ItemType
from .modules.items.api import Item, ItemsIndexer
from .modules.libraries.api import Library
Expand Down Expand Up @@ -428,6 +429,38 @@ def _(x):
update_permission_factory_imp=can_update_organisation_records_factory,
delete_permission_factory_imp=can_delete_organisation_records_factory,
),
hold=dict(
pid_type='hold',
pid_minter='holding_id',
pid_fetcher='holding_id',
search_class=RecordsSearch,
search_index='holdings',
indexer_class=HoldingsIndexer,
search_type=None,
record_serializers={
'application/json': (
'rero_ils.modules.serializers:json_v1_response'
)
},
search_serializers={
'application/json': (
'rero_ils.modules.serializers:json_v1_search'
)
},
list_route='/holdings/',
record_loaders={
'application/json': lambda: Holding(request.get_json()),
},
record_class='rero_ils.modules.holdings.api:Holding',
item_route='/holdings/<pid(hold, record_class="rero_ils.modules.holdings.api:Holding"):pid_value>',
default_media_type='application/json',
max_result_window=10000,
search_factory_imp='rero_ils.query:organisation_search_factory',
read_permission_factory_imp=can_access_organisation_records_factory,
create_permission_factory_imp=can_create_organisation_records_factory,
update_permission_factory_imp=can_update_organisation_records_factory,
delete_permission_factory_imp=can_delete_organisation_records_factory,
),
ptrn=dict(
pid_type='ptrn',
pid_minter='patron_id',
Expand Down Expand Up @@ -759,22 +792,22 @@ def _(x):
terms=dict(field='facet_subjects')
),
status=dict(
terms=dict(field='items.status')
terms=dict(field='holdings.items.status')
)
),
filters={
_('document_type'): terms_filter('type'),
_('organisation'): terms_filter(
'items.organisation.organisation_pid'
'holdings.organisation.organisation_pid'
),
_('library'): terms_filter('items.organisation.library_pid'),
_('library'): terms_filter('holdings.organisation.library_pid'),
_('author__en'): terms_filter('facet_authors_en'),
_('author__fr'): terms_filter('facet_authors_fr'),
_('author__de'): terms_filter('facet_authors_de'),
_('author__it'): terms_filter('facet_authors_it'),
_('language'): terms_filter('language.value'),
_('subject'): terms_filter('facet_subjects'),
_('status'): terms_filter('items.status'),
_('status'): terms_filter('holdings.items.status'),
}
),
patrons=dict(
Expand Down Expand Up @@ -870,6 +903,15 @@ def _(x):
permission_factory_imp='rero_ils.permissions.'
'librarian_permission_factory',
),
'hold': dict(
pid_type='hold',
route='/<string:viewcode>/holdings/<pid_value>',
template='rero_ils/detailed_view_holdings.html',
view_imp='rero_ils.modules.holdings.views.holding_view_method',
record_class='rero_ils.modules.holdings.api:Holding',
permission_factory_imp='rero_ils.permissions.'
'librarian_permission_factory',
),
}

RECORDS_UI_EXPORT_FORMATS = {
Expand All @@ -893,6 +935,7 @@ def _(x):
'ptrn': '/patrons/patron-v0.0.1.json',
'ptty': '/patron_types/patron_type-v0.0.1.json',
'notif': '/notifications/notification-v0.0.1.json',
'hold': '/holdings/holding-v0.0.1.json',
}

# Login Configuration
Expand Down
11 changes: 11 additions & 0 deletions rero_ils/modules/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -197,3 +197,14 @@ def is_accessible(self):
menu_icon_value='fa-barcode'
)
}

holdings = {
'view_class': LibraryManager,
'kwargs': dict(
name='Holdings',
category='Resources',
endpoint='records/holdings',
menu_icon_type='fa',
menu_icon_value='fa-barcode'
)
}
63 changes: 47 additions & 16 deletions rero_ils/modules/documents/listener.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@
from requests import get as requests_get

from ..documents.api import DocumentsSearch
from ..holdings.api import Holding
from ..item_types.api import ItemType
from ..items.api import Item
from ..locations.api import Location
from ..organisations.api import Organisation
Expand All @@ -42,20 +44,31 @@ def enrich_document_data(sender, json=None, record=None, index=None,
# TODO: this multiply the indexing time by 5, try an other way!
document_index_name = DocumentsSearch.Meta.index
if index.startswith(document_index_name):
items = []
# HOLDINGS
holdings = []
available = False
for item_pid in Item.get_items_pid_by_document_pid(record['pid']):
item = Item.get_record_by_pid(item_pid)
available = available or item.available
for holding_pid in Holding.get_holdings_pid_by_document_pid(
record['pid']
):
holding = Holding.get_record_by_pid(holding_pid)
location = Location.get_record_by_pid(
item.replace_refs()['location']['pid']).replace_refs()
org_pid = item.get_library().organisation_pid
organisation = Organisation.get_record_by_pid(org_pid)
items.append({
'pid': item.pid,
'barcode': item['barcode'],
'call_number': item['call_number'],
'status': item['status'],
holding.location_pid).replace_refs()
organisation = Organisation.get_record_by_pid(
holding.organisation_pid
)
circ_category = ItemType.get_record_by_pid(
holding.circulation_category_pid).replace_refs()
data = {
'pid': holding.pid,
'call_number': holding.get('call_number'),
'location': {
'pid': location.pid,
'name': location.get('name')
},
'circulation_category': {
'pid': circ_category['pid'],
'name': circ_category.get('name')
},
'organisation': {
'organisation_pid': organisation['pid'],
'library_pid': location['library']['pid'],
Expand All @@ -64,10 +77,28 @@ def enrich_document_data(sender, json=None, record=None, index=None,
location['library']['pid']
)
}
})
if items:
json['items'] = items
json['available'] = available
}

items = []
for item_pid in Item.get_items_pid_by_holding_pid(holding_pid):
item = Item.get_record_by_pid(item_pid)
available = available or item.available
items.append({
'pid': item.pid,
'barcode': item['barcode'],
'call_number': item['call_number'],
'status': item['status'],
'available': available
})
if items:
data['items'] = items

holdings.append(data)

if holdings:
json['holdings'] = holdings

json['available'] = available


def mef_person_insert(sender, *args, **kwargs):
Expand Down
50 changes: 43 additions & 7 deletions rero_ils/modules/documents/mappings/v6/documents/document.json
Original file line number Diff line number Diff line change
Expand Up @@ -348,20 +348,36 @@
"facet_subjects": {
"type": "keyword"
},
"items": {
"holdings": {
"type": "object",
"properties": {
"pid": {
"type": "keyword"
},
"barcode": {
"type": "keyword"
},
"call_number": {
"type": "keyword"
},
"status": {
"type": "keyword"
"location": {
"type": "object",
"properties": {
"pid": {
"type": "keyword"
},
"name": {
"type": "text"
}
}
},
"circulation_category": {
"type": "object",
"properties": {
"pid": {
"type": "keyword"
},
"name": {
"type": "text"
}
}
},
"organisation": {
"type": "object",
Expand All @@ -376,6 +392,26 @@
"type": "keyword"
}
}
},
"items": {
"type": "object",
"properties": {
"pid": {
"type": "keyword"
},
"barcode": {
"type": "keyword"
},
"call_number": {
"type": "keyword"
},
"status": {
"type": "keyword"
},
"available": {
"type": "boolean"
}
}
}
}
},
Expand All @@ -394,4 +430,4 @@
}
}
}
}
}

0 comments on commit 5931866

Please sign in to comment.