invenio-app-ils 7.0.0__tar.gz → 7.1.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (518) hide show
  1. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/CHANGES.rst +7 -0
  2. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/PKG-INFO +8 -1
  3. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/__init__.py +1 -1
  4. invenio_app_ils-7.1.0/invenio_app_ils/acquisition/indexer.py +72 -0
  5. {invenio_app_ils-7.0.0/invenio_app_ils/acquisition/mappings/v7 → invenio_app_ils-7.1.0/invenio_app_ils/acquisition/mappings/os-v2}/acq_orders/order-v1.0.0.json +5 -0
  6. invenio_app_ils-7.1.0/invenio_app_ils/acquisition/stats/__init__.py +8 -0
  7. invenio_app_ils-7.1.0/invenio_app_ils/acquisition/stats/views.py +82 -0
  8. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/indexer.py +2 -0
  9. invenio_app_ils-7.1.0/invenio_app_ils/circulation/stats/api.py +51 -0
  10. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/stats/views.py +14 -29
  11. invenio_app_ils-7.1.0/invenio_app_ils/document_requests/indexer.py +121 -0
  12. {invenio_app_ils-7.0.0/invenio_app_ils/document_requests/mappings/v7 → invenio_app_ils-7.1.0/invenio_app_ils/document_requests/mappings/os-v2}/document_requests/document_request-v1.0.0.json +5 -0
  13. invenio_app_ils-7.1.0/invenio_app_ils/document_requests/stats/__init__.py +8 -0
  14. invenio_app_ils-7.1.0/invenio_app_ils/document_requests/stats/views.py +85 -0
  15. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/ext.py +49 -0
  16. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/permissions.py +2 -0
  17. invenio_app_ils-7.1.0/invenio_app_ils/stats/histogram/__init__.py +18 -0
  18. {invenio_app_ils-7.0.0/invenio_app_ils/circulation/stats → invenio_app_ils-7.1.0/invenio_app_ils/stats/histogram}/api.py +8 -50
  19. {invenio_app_ils-7.0.0/invenio_app_ils/circulation/stats → invenio_app_ils-7.1.0/invenio_app_ils/stats/histogram}/schemas.py +10 -28
  20. invenio_app_ils-7.1.0/invenio_app_ils/stats/histogram/serializers/__init__.py +18 -0
  21. {invenio_app_ils-7.0.0/invenio_app_ils/circulation/stats → invenio_app_ils-7.1.0/invenio_app_ils/stats/histogram}/serializers/response.py +3 -4
  22. {invenio_app_ils-7.0.0/invenio_app_ils/circulation/stats → invenio_app_ils-7.1.0/invenio_app_ils/stats/histogram}/serializers/schema.py +1 -1
  23. invenio_app_ils-7.1.0/invenio_app_ils/stats/histogram/views.py +34 -0
  24. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils.egg-info/PKG-INFO +8 -1
  25. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils.egg-info/SOURCES.txt +12 -4
  26. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils.egg-info/entry_points.txt +2 -0
  27. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/setup.cfg +2 -0
  28. invenio_app_ils-7.0.0/invenio_app_ils/circulation/stats/serializers/__init__.py +0 -13
  29. invenio_app_ils-7.0.0/invenio_app_ils/document_requests/indexer.py +0 -47
  30. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/.editorconfig +0 -0
  31. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/.git-blame-ignore-revs +0 -0
  32. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/AUTHORS.rst +0 -0
  33. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/CONTRIBUTING.rst +0 -0
  34. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/INSTALL.rst +0 -0
  35. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/LICENSE +0 -0
  36. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/MANIFEST.in +0 -0
  37. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/README.rst +0 -0
  38. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/docker/backend/Dockerfile +0 -0
  39. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/docker/frontend/Dockerfile +0 -0
  40. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/docker/frontend/conf.d/default.conf +0 -0
  41. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/docker/frontend/nginx.conf +0 -0
  42. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/docker/frontend/test.crt +0 -0
  43. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/docker/frontend/test.key +0 -0
  44. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/docker/lb/Dockerfile +0 -0
  45. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/docker/lb/haproxy.cfg +0 -0
  46. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/docker/lb/haproxy_cert.pem +0 -0
  47. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/docker-compose.full.yml +0 -0
  48. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/docker-compose.yml +0 -0
  49. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/docker-services.yml +0 -0
  50. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/acquisition/__init__.py +0 -0
  51. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/acquisition/api.py +0 -0
  52. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/acquisition/config.py +0 -0
  53. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/acquisition/errors.py +0 -0
  54. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/acquisition/ext.py +0 -0
  55. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/acquisition/jsonresolvers/__init__.py +0 -0
  56. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/acquisition/jsonresolvers/order_order_lines.py +0 -0
  57. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/acquisition/jsonresolvers/order_provider.py +0 -0
  58. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/acquisition/loaders/__init__.py +0 -0
  59. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/acquisition/loaders/jsonschemas/__init__.py +0 -0
  60. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/acquisition/loaders/jsonschemas/order.py +0 -0
  61. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/acquisition/mappings/__init__.py +0 -0
  62. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/acquisition/mappings/os-v1/__init__.py +0 -0
  63. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/acquisition/mappings/os-v1/acq_orders/order-v1.0.0.json +0 -0
  64. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/acquisition/mappings/os-v2/__init__.py +0 -0
  65. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/acquisition/mappings/v7/__init__.py +0 -0
  66. {invenio_app_ils-7.0.0/invenio_app_ils/acquisition/mappings/os-v2 → invenio_app_ils-7.1.0/invenio_app_ils/acquisition/mappings/v7}/acq_orders/order-v1.0.0.json +0 -0
  67. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/acquisition/proxies.py +0 -0
  68. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/acquisition/schemas/__init__.py +0 -0
  69. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/acquisition/schemas/acq_orders/order-v1.0.0.json +0 -0
  70. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/acquisition/search.py +0 -0
  71. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/assets/semantic-ui/less/theme.config +0 -0
  72. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/assets/semantic-ui/templates/.gitkeep +0 -0
  73. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/__init__.py +0 -0
  74. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/api.py +0 -0
  75. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/config.py +0 -0
  76. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/errors.py +0 -0
  77. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/jsonresolvers/__init__.py +0 -0
  78. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/jsonresolvers/loan.py +0 -0
  79. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/loaders/__init__.py +0 -0
  80. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/loaders/schemas/__init__.py +0 -0
  81. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/loaders/schemas/json/__init__.py +0 -0
  82. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/loaders/schemas/json/base.py +0 -0
  83. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/loaders/schemas/json/bulk_extend.py +0 -0
  84. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/loaders/schemas/json/loan_checkout.py +0 -0
  85. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/loaders/schemas/json/loan_request.py +0 -0
  86. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/loaders/schemas/json/loan_self_checkout.py +0 -0
  87. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/loaders/schemas/json/loan_update_dates.py +0 -0
  88. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/notifications/__init__.py +0 -0
  89. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/notifications/api.py +0 -0
  90. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/notifications/messages.py +0 -0
  91. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/notifications/tasks.py +0 -0
  92. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/receivers.py +0 -0
  93. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/search.py +0 -0
  94. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/serializers/__init__.py +0 -0
  95. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/serializers/csv.py +0 -0
  96. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/serializers/custom_fields.py +0 -0
  97. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/serializers/json.py +0 -0
  98. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/serializers/response.py +0 -0
  99. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/stats/__init__.py +0 -0
  100. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/tasks.py +0 -0
  101. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/templates/invenio_app_ils_circulation/notifications/bulk_extend.html +0 -0
  102. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/templates/invenio_app_ils_circulation/notifications/cancel.html +0 -0
  103. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/templates/invenio_app_ils_circulation/notifications/checkin.html +0 -0
  104. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/templates/invenio_app_ils_circulation/notifications/checkout.html +0 -0
  105. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/templates/invenio_app_ils_circulation/notifications/extend.html +0 -0
  106. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/templates/invenio_app_ils_circulation/notifications/overdue_reminder.html +0 -0
  107. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/templates/invenio_app_ils_circulation/notifications/request.html +0 -0
  108. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/templates/invenio_app_ils_circulation/notifications/request_no_items.html +0 -0
  109. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/templates/invenio_app_ils_circulation/notifications/self_checkout.html +0 -0
  110. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/templates/invenio_app_ils_circulation/notifications/update_dates.html +0 -0
  111. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/templates/invenio_app_ils_circulation/notifications/will_expire_in_reminder.html +0 -0
  112. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/transitions/__init__.py +0 -0
  113. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/transitions/transitions.py +0 -0
  114. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/utils.py +0 -0
  115. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/views.py +0 -0
  116. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/cli.py +0 -0
  117. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/closures/__init__.py +0 -0
  118. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/closures/api.py +0 -0
  119. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/closures/serializers/__init__.py +0 -0
  120. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/closures/serializers/response.py +0 -0
  121. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/closures/serializers/schema.py +0 -0
  122. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/closures/tasks.py +0 -0
  123. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/closures/views.py +0 -0
  124. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/config.py +0 -0
  125. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/demo_data/documents.json +0 -0
  126. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/demo_data/items.json +0 -0
  127. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/document_requests/__init__.py +0 -0
  128. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/document_requests/api.py +0 -0
  129. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/document_requests/jsonresolvers/__init__.py +0 -0
  130. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/document_requests/jsonresolvers/document_request_document.py +0 -0
  131. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/document_requests/jsonresolvers/document_request_patron.py +0 -0
  132. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/document_requests/loaders/__init__.py +0 -0
  133. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/document_requests/loaders/jsonschemas/__init__.py +0 -0
  134. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/document_requests/loaders/jsonschemas/document_request.py +0 -0
  135. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/document_requests/loaders/jsonschemas/document_request_decline.py +0 -0
  136. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/document_requests/loaders/jsonschemas/document_request_document.py +0 -0
  137. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/document_requests/loaders/jsonschemas/document_request_provider.py +0 -0
  138. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/document_requests/mappings/__init__.py +0 -0
  139. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/document_requests/mappings/os-v1/__init__.py +0 -0
  140. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/document_requests/mappings/os-v1/document_requests/document_request-v1.0.0.json +0 -0
  141. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/document_requests/mappings/os-v2/__init__.py +0 -0
  142. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/document_requests/mappings/v7/__init__.py +0 -0
  143. {invenio_app_ils-7.0.0/invenio_app_ils/document_requests/mappings/os-v2 → invenio_app_ils-7.1.0/invenio_app_ils/document_requests/mappings/v7}/document_requests/document_request-v1.0.0.json +0 -0
  144. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/document_requests/notifications/__init__.py +0 -0
  145. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/document_requests/notifications/api.py +0 -0
  146. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/document_requests/notifications/messages.py +0 -0
  147. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/document_requests/schemas/__init__.py +0 -0
  148. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/document_requests/schemas/document_requests/document_request-v1.0.0.json +0 -0
  149. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/document_requests/search.py +0 -0
  150. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/document_requests/templates/invenio_app_ils_document_requests/notifications/document_request_accept.html +0 -0
  151. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/document_requests/templates/invenio_app_ils_document_requests/notifications/document_request_decline_in_catalog.html +0 -0
  152. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/document_requests/templates/invenio_app_ils_document_requests/notifications/document_request_decline_not_found.html +0 -0
  153. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/document_requests/templates/invenio_app_ils_document_requests/notifications/document_request_decline_other.html +0 -0
  154. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/document_requests/templates/invenio_app_ils_document_requests/notifications/document_request_decline_user_cancel.html +0 -0
  155. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/document_requests/views.py +0 -0
  156. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/documents/__init__.py +0 -0
  157. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/documents/api.py +0 -0
  158. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/documents/indexer.py +0 -0
  159. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/documents/jsonresolvers/__init__.py +0 -0
  160. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/documents/jsonresolvers/document_circulation.py +0 -0
  161. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/documents/jsonresolvers/document_eitem.py +0 -0
  162. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/documents/jsonresolvers/document_item.py +0 -0
  163. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/documents/jsonresolvers/document_relations.py +0 -0
  164. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/documents/jsonresolvers/document_stock.py +0 -0
  165. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/documents/loaders/__init__.py +0 -0
  166. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/documents/loaders/jsonschemas/__init__.py +0 -0
  167. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/documents/loaders/jsonschemas/document.py +0 -0
  168. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/documents/mappings/__init__.py +0 -0
  169. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/documents/mappings/os-v1/__init__.py +0 -0
  170. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/documents/mappings/os-v1/documents/document-v1.0.0.json +0 -0
  171. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/documents/mappings/os-v1/documents/document-v2.0.0.json +0 -0
  172. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/documents/mappings/os-v2/__init__.py +0 -0
  173. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/documents/mappings/os-v2/documents/document-v1.0.0.json +0 -0
  174. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/documents/mappings/os-v2/documents/document-v2.0.0.json +0 -0
  175. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/documents/mappings/v7/__init__.py +0 -0
  176. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/documents/mappings/v7/documents/document-v1.0.0.json +0 -0
  177. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/documents/mappings/v7/documents/document-v2.0.0.json +0 -0
  178. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/documents/schemas/__init__.py +0 -0
  179. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/documents/schemas/documents/document-v1.0.0.json +0 -0
  180. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/documents/schemas/documents/document-v2.0.0.json +0 -0
  181. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/documents/search.py +0 -0
  182. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/documents/utils.py +0 -0
  183. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/eitems/__init__.py +0 -0
  184. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/eitems/api.py +0 -0
  185. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/eitems/indexer.py +0 -0
  186. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/eitems/jsonresolvers/__init__.py +0 -0
  187. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/eitems/jsonresolvers/eitem_document.py +0 -0
  188. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/eitems/jsonresolvers/eitem_files.py +0 -0
  189. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/eitems/loaders/__init__.py +0 -0
  190. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/eitems/loaders/jsonschemas/__init__.py +0 -0
  191. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/eitems/loaders/jsonschemas/eitems.py +0 -0
  192. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/eitems/mappings/__init__.py +0 -0
  193. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/eitems/mappings/os-v1/__init__.py +0 -0
  194. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/eitems/mappings/os-v1/eitems/eitem-v1.0.0.json +0 -0
  195. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/eitems/mappings/os-v1/eitems/eitem-v2.0.0.json +0 -0
  196. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/eitems/mappings/os-v1/eitems/eitem-v3.0.0.json +0 -0
  197. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/eitems/mappings/os-v2/__init__.py +0 -0
  198. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/eitems/mappings/os-v2/eitems/eitem-v1.0.0.json +0 -0
  199. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/eitems/mappings/os-v2/eitems/eitem-v2.0.0.json +0 -0
  200. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/eitems/mappings/os-v2/eitems/eitem-v3.0.0.json +0 -0
  201. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/eitems/mappings/v7/__init__.py +0 -0
  202. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/eitems/mappings/v7/eitems/eitem-v1.0.0.json +0 -0
  203. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/eitems/mappings/v7/eitems/eitem-v2.0.0.json +0 -0
  204. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/eitems/mappings/v7/eitems/eitem-v3.0.0.json +0 -0
  205. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/eitems/schemas/__init__.py +0 -0
  206. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/eitems/schemas/eitems/eitem-v1.0.0.json +0 -0
  207. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/eitems/schemas/eitems/eitem-v2.0.0.json +0 -0
  208. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/eitems/schemas/eitems/eitem-v3.0.0.json +0 -0
  209. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/eitems/search.py +0 -0
  210. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/errors.py +0 -0
  211. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/facets.py +0 -0
  212. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/fetchers.py +0 -0
  213. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/files/__init__.py +0 -0
  214. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/files/receivers.py +0 -0
  215. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/files/views.py +0 -0
  216. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/ill/__init__.py +0 -0
  217. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/ill/api.py +0 -0
  218. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/ill/config.py +0 -0
  219. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/ill/errors.py +0 -0
  220. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/ill/ext.py +0 -0
  221. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/ill/jsonresolvers/__init__.py +0 -0
  222. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/ill/jsonresolvers/borrowing_request_document.py +0 -0
  223. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/ill/jsonresolvers/borrowing_request_patron.py +0 -0
  224. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/ill/jsonresolvers/borrowing_request_provider.py +0 -0
  225. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/ill/loaders/__init__.py +0 -0
  226. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/ill/loaders/jsonschemas/__init__.py +0 -0
  227. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/ill/loaders/jsonschemas/borrowing_request.py +0 -0
  228. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/ill/loaders/jsonschemas/patron_loan_actions.py +0 -0
  229. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/ill/loaders/jsonschemas/patron_loan_extension_actions.py +0 -0
  230. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/ill/mappings/__init__.py +0 -0
  231. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/ill/mappings/os-v1/__init__.py +0 -0
  232. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/ill/mappings/os-v1/ill_borrowing_requests/borrowing_request-v1.0.0.json +0 -0
  233. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/ill/mappings/os-v2/__init__.py +0 -0
  234. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/ill/mappings/os-v2/ill_borrowing_requests/borrowing_request-v1.0.0.json +0 -0
  235. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/ill/mappings/v7/__init__.py +0 -0
  236. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/ill/mappings/v7/ill_borrowing_requests/borrowing_request-v1.0.0.json +0 -0
  237. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/ill/notifications/__init__.py +0 -0
  238. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/ill/notifications/api.py +0 -0
  239. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/ill/notifications/messages.py +0 -0
  240. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/ill/proxies.py +0 -0
  241. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/ill/schemas/__init__.py +0 -0
  242. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/ill/schemas/ill_borrowing_requests/borrowing_request-v1.0.0.json +0 -0
  243. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/ill/search.py +0 -0
  244. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/ill/serializers/__init__.py +0 -0
  245. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/ill/serializers/csv.py +0 -0
  246. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/ill/serializers/custom_fields.py +0 -0
  247. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/ill/serializers/json.py +0 -0
  248. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/ill/templates/invenio_app_ils_ill/notifications/patron_loan_extension_accept.html +0 -0
  249. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/ill/templates/invenio_app_ils_ill/notifications/patron_loan_extension_decline.html +0 -0
  250. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/ill/templates/invenio_app_ils_ill/notifications/patron_loan_extension_request.html +0 -0
  251. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/ill/views.py +0 -0
  252. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/indexer.py +0 -0
  253. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/internal_locations/__init__.py +0 -0
  254. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/internal_locations/api.py +0 -0
  255. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/internal_locations/indexer.py +0 -0
  256. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/internal_locations/jsonresolvers/__init__.py +0 -0
  257. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/internal_locations/jsonresolvers/internal_location.py +0 -0
  258. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/internal_locations/loaders/__init__.py +0 -0
  259. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/internal_locations/loaders/jsonschemas/__init__.py +0 -0
  260. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/internal_locations/loaders/jsonschemas/internal_location.py +0 -0
  261. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/internal_locations/mappings/__init__.py +0 -0
  262. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/internal_locations/mappings/os-v1/__init__.py +0 -0
  263. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/internal_locations/mappings/os-v1/internal_locations/internal_location-v1.0.0.json +0 -0
  264. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/internal_locations/mappings/os-v2/__init__.py +0 -0
  265. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/internal_locations/mappings/os-v2/internal_locations/internal_location-v1.0.0.json +0 -0
  266. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/internal_locations/mappings/v7/__init__.py +0 -0
  267. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/internal_locations/mappings/v7/internal_locations/internal_location-v1.0.0.json +0 -0
  268. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/internal_locations/schemas/__init__.py +0 -0
  269. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/internal_locations/schemas/internal_locations/internal_location-v1.0.0.json +0 -0
  270. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/internal_locations/search.py +0 -0
  271. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/items/__init__.py +0 -0
  272. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/items/api.py +0 -0
  273. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/items/indexer.py +0 -0
  274. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/items/jsonresolvers/__init__.py +0 -0
  275. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/items/jsonresolvers/item_document.py +0 -0
  276. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/items/jsonresolvers/item_internal_location.py +0 -0
  277. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/items/jsonresolvers/item_loan.py +0 -0
  278. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/items/loaders/__init__.py +0 -0
  279. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/items/loaders/jsonschemas/__init__.py +0 -0
  280. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/items/loaders/jsonschemas/items.py +0 -0
  281. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/items/mappings/__init__.py +0 -0
  282. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/items/mappings/os-v1/__init__.py +0 -0
  283. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/items/mappings/os-v1/items/item-v1.0.0.json +0 -0
  284. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/items/mappings/os-v1/items/item-v2.0.0.json +0 -0
  285. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/items/mappings/os-v2/__init__.py +0 -0
  286. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/items/mappings/os-v2/items/item-v1.0.0.json +0 -0
  287. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/items/mappings/os-v2/items/item-v2.0.0.json +0 -0
  288. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/items/mappings/v7/__init__.py +0 -0
  289. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/items/mappings/v7/items/item-v1.0.0.json +0 -0
  290. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/items/mappings/v7/items/item-v2.0.0.json +0 -0
  291. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/items/schemas/__init__.py +0 -0
  292. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/items/schemas/items/item-v1.0.0.json +0 -0
  293. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/items/schemas/items/item-v2.0.0.json +0 -0
  294. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/items/search.py +0 -0
  295. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/items/serializers/__init__.py +0 -0
  296. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/items/serializers/item.py +0 -0
  297. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/literature/__init__.py +0 -0
  298. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/literature/api.py +0 -0
  299. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/literature/covers_builder.py +0 -0
  300. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/literature/search.py +0 -0
  301. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/literature/serializers/__init__.py +0 -0
  302. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/literature/serializers/csv.py +0 -0
  303. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/literature/serializers/custom_fields.py +0 -0
  304. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/literature/serializers/json.py +0 -0
  305. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/locations/__init__.py +0 -0
  306. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/locations/api.py +0 -0
  307. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/locations/indexer.py +0 -0
  308. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/locations/loaders/__init__.py +0 -0
  309. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/locations/loaders/jsonschemas/__init__.py +0 -0
  310. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/locations/loaders/jsonschemas/location.py +0 -0
  311. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/locations/mappings/__init__.py +0 -0
  312. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/locations/mappings/os-v1/__init__.py +0 -0
  313. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/locations/mappings/os-v1/locations/location-v1.0.0.json +0 -0
  314. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/locations/mappings/os-v2/__init__.py +0 -0
  315. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/locations/mappings/os-v2/locations/location-v1.0.0.json +0 -0
  316. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/locations/mappings/v7/__init__.py +0 -0
  317. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/locations/mappings/v7/locations/location-v1.0.0.json +0 -0
  318. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/locations/receivers.py +0 -0
  319. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/locations/schemas/__init__.py +0 -0
  320. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/locations/schemas/locations/location-v1.0.0.json +0 -0
  321. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/locations/search.py +0 -0
  322. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/minters.py +0 -0
  323. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/notifications/__init__.py +0 -0
  324. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/notifications/api.py +0 -0
  325. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/notifications/backends/__init__.py +0 -0
  326. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/notifications/backends/mail.py +0 -0
  327. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/notifications/messages.py +0 -0
  328. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/notifications/models.py +0 -0
  329. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/notifications/tasks.py +0 -0
  330. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/notifications/views.py +0 -0
  331. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/patrons/__init__.py +0 -0
  332. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/patrons/anonymization.py +0 -0
  333. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/patrons/api.py +0 -0
  334. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/patrons/cli.py +0 -0
  335. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/patrons/indexer.py +0 -0
  336. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/patrons/mappings/__init__.py +0 -0
  337. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/patrons/mappings/os-v1/__init__.py +0 -0
  338. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/patrons/mappings/os-v1/patrons/patron-v1.0.0.json +0 -0
  339. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/patrons/mappings/os-v2/__init__.py +0 -0
  340. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/patrons/mappings/os-v2/patrons/patron-v1.0.0.json +0 -0
  341. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/patrons/mappings/v7/__init__.py +0 -0
  342. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/patrons/mappings/v7/patrons/patron-v1.0.0.json +0 -0
  343. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/patrons/search.py +0 -0
  344. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/patrons/views.py +0 -0
  345. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/providers/__init__.py +0 -0
  346. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/providers/api.py +0 -0
  347. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/providers/config.py +0 -0
  348. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/providers/errors.py +0 -0
  349. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/providers/ext.py +0 -0
  350. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/providers/indexer.py +0 -0
  351. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/providers/loaders/__init__.py +0 -0
  352. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/providers/loaders/jsonschemas/__init__.py +0 -0
  353. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/providers/loaders/jsonschemas/provider.py +0 -0
  354. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/providers/mappings/__init__.py +0 -0
  355. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/providers/mappings/os-v1/__init__.py +0 -0
  356. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/providers/mappings/os-v1/providers/provider-v1.0.0.json +0 -0
  357. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/providers/mappings/os-v2/__init__.py +0 -0
  358. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/providers/mappings/os-v2/providers/provider-v1.0.0.json +0 -0
  359. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/providers/mappings/v7/__init__.py +0 -0
  360. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/providers/mappings/v7/providers/provider-v1.0.0.json +0 -0
  361. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/providers/proxies.py +0 -0
  362. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/providers/schemas/__init__.py +0 -0
  363. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/providers/schemas/providers/provider-v1.0.0.json +0 -0
  364. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/providers/search.py +0 -0
  365. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/proxies.py +0 -0
  366. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/records/__init__.py +0 -0
  367. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/records/api.py +0 -0
  368. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/records/jsonresolvers/__init__.py +0 -0
  369. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/records/jsonresolvers/api.py +0 -0
  370. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/records/listeners.py +0 -0
  371. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/records/loaders/__init__.py +0 -0
  372. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/records/loaders/schemas/__init__.py +0 -0
  373. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/records/loaders/schemas/changed_by.py +0 -0
  374. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/records/loaders/schemas/identifiers.py +0 -0
  375. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/records/loaders/schemas/preserve_cover_metadata.py +0 -0
  376. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/records/loaders/schemas/price.py +0 -0
  377. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/records/metadata_extensions.py +0 -0
  378. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/records/permissions.py +0 -0
  379. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/records/receivers.py +0 -0
  380. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/records/schemas/__init__.py +0 -0
  381. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/records/schemas/json.py +0 -0
  382. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/records/serializers/__init__.py +0 -0
  383. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/records/views.py +0 -0
  384. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/records_relations/__init__.py +0 -0
  385. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/records_relations/api.py +0 -0
  386. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/records_relations/indexer.py +0 -0
  387. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/records_relations/retriever.py +0 -0
  388. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/records_relations/views.py +0 -0
  389. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/relations/__init__.py +0 -0
  390. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/relations/api.py +0 -0
  391. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/relations/nodes.py +0 -0
  392. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/search_permissions.py +0 -0
  393. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/series/__init__.py +0 -0
  394. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/series/api.py +0 -0
  395. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/series/indexer.py +0 -0
  396. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/series/jsonresolvers/__init__.py +0 -0
  397. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/series/jsonresolvers/series_relations.py +0 -0
  398. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/series/loaders/__init__.py +0 -0
  399. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/series/loaders/jsonschemas/__init__.py +0 -0
  400. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/series/loaders/jsonschemas/series.py +0 -0
  401. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/series/mappings/__init__.py +0 -0
  402. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/series/mappings/os-v1/__init__.py +0 -0
  403. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/series/mappings/os-v1/series/series-v1.0.0.json +0 -0
  404. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/series/mappings/os-v1/series/series-v2.0.0.json +0 -0
  405. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/series/mappings/os-v2/__init__.py +0 -0
  406. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/series/mappings/os-v2/series/series-v1.0.0.json +0 -0
  407. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/series/mappings/os-v2/series/series-v2.0.0.json +0 -0
  408. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/series/mappings/v7/__init__.py +0 -0
  409. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/series/mappings/v7/series/series-v1.0.0.json +0 -0
  410. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/series/mappings/v7/series/series-v2.0.0.json +0 -0
  411. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/series/schemas/__init__.py +0 -0
  412. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/series/schemas/series/series-v1.0.0.json +0 -0
  413. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/series/schemas/series/series-v2.0.0.json +0 -0
  414. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/series/search.py +0 -0
  415. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/signals.py +0 -0
  416. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/static/images/placeholder.png +0 -0
  417. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/static_pages/search_guide.html +0 -0
  418. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/stats/__init__.py +0 -0
  419. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/stats/aggregations/__init__.py +0 -0
  420. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/stats/aggregations/aggr_file_download/__init__.py +0 -0
  421. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/stats/aggregations/aggr_file_download/os-v1/__init__.py +0 -0
  422. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/stats/aggregations/aggr_file_download/os-v1/aggr-file-download-v1.json +0 -0
  423. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/stats/aggregations/aggr_file_download/os-v2/__init__.py +0 -0
  424. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/stats/aggregations/aggr_file_download/os-v2/aggr-file-download-v1.json +0 -0
  425. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/stats/aggregations/aggr_file_download/v7/__init__.py +0 -0
  426. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/stats/aggregations/aggr_file_download/v7/aggr-file-download-v1.json +0 -0
  427. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/stats/event_builders.py +0 -0
  428. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/stats/file_download/__init__.py +0 -0
  429. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/stats/file_download/os-v1/__init__.py +0 -0
  430. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/stats/file_download/os-v1/file-download-v1.json +0 -0
  431. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/stats/file_download/os-v2/__init__.py +0 -0
  432. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/stats/file_download/os-v2/file-download-v1.json +0 -0
  433. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/stats/file_download/v7/__init__.py +0 -0
  434. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/stats/file_download/v7/file-download-v1.json +0 -0
  435. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/stats/processors.py +0 -0
  436. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/stats/templates/aggregations/__init__.py +0 -0
  437. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/stats/templates/aggregations/ils_record_changes/__init__.py +0 -0
  438. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/stats/templates/aggregations/ils_record_changes/os-v2/__init__.py +0 -0
  439. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/stats/templates/aggregations/ils_record_changes/os-v2/aggr-ils-record-changes-v1.json +0 -0
  440. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/stats/templates/aggregations/loan_transitions/__init__.py +0 -0
  441. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/stats/templates/aggregations/loan_transitions/os-v2/__init__.py +0 -0
  442. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/stats/templates/aggregations/loan_transitions/os-v2/aggr-loan-transitions-v1.json +0 -0
  443. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/stats/templates/events/__init__.py +0 -0
  444. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/stats/templates/events/ils_record_changes/__init__.py +0 -0
  445. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/stats/templates/events/ils_record_changes/os-v2/__init__.py +0 -0
  446. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/stats/templates/events/ils_record_changes/os-v2/ils-record-changes-v1.json +0 -0
  447. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/stats/templates/events/loan_transitions/__init__.py +0 -0
  448. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/stats/templates/events/loan_transitions/os-v2/__init__.py +0 -0
  449. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/stats/templates/events/loan_transitions/os-v2/loan-transitions-v1.json +0 -0
  450. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/templates/invenio_app_ils/mail/footer.html +0 -0
  451. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/templates/invenio_app_ils/notifications/footer.html +0 -0
  452. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/templates/logged_out.html +0 -0
  453. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/translations/.gitkeep +0 -0
  454. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/views.py +0 -0
  455. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/__init__.py +0 -0
  456. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/api.py +0 -0
  457. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/cli.py +0 -0
  458. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/data/__init__.py +0 -0
  459. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/data/acq_mediums.json +0 -0
  460. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/data/acq_order_line_payment_modes.json +0 -0
  461. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/data/acq_order_line_purchase_types.json +0 -0
  462. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/data/acq_payment_modes.json +0 -0
  463. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/data/acq_recipients.json +0 -0
  464. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/data/affiliation_identifier_schemes.json +0 -0
  465. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/data/alternative_identifier_schemes.json +0 -0
  466. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/data/alternative_title_types.json +0 -0
  467. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/data/author_identifier_schemes.json +0 -0
  468. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/data/author_roles.json +0 -0
  469. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/data/author_types.json +0 -0
  470. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/data/conference_identifier_schemes.json +0 -0
  471. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/data/countries.json +0 -0
  472. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/data/currencies.json +0 -0
  473. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/data/docreq_payment_method.json +0 -0
  474. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/data/docreq_request_type.json +0 -0
  475. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/data/document_identifiers_materials.json +0 -0
  476. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/data/document_requests_mediums.json +0 -0
  477. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/data/document_subjects.json +0 -0
  478. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/data/eitem_sources.json +0 -0
  479. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/data/identifier_schemes.json +0 -0
  480. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/data/ill_item_types.json +0 -0
  481. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/data/ill_payment_modes.json +0 -0
  482. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/data/item_mediums.json +0 -0
  483. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/data/provider_types.json +0 -0
  484. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/data/series_identifier_schemes.json +0 -0
  485. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/data/series_url_access_restrictions.json +0 -0
  486. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/data/tags.json +0 -0
  487. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/indexer.py +0 -0
  488. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/jsonresolvers/__init__.py +0 -0
  489. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/jsonresolvers/licenses.py +0 -0
  490. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/mappings/__init__.py +0 -0
  491. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/mappings/os-v1/__init__.py +0 -0
  492. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/mappings/os-v1/vocabularies/vocabulary-v1.0.0.json +0 -0
  493. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/mappings/os-v2/__init__.py +0 -0
  494. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/mappings/os-v2/vocabularies/vocabulary-v1.0.0.json +0 -0
  495. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/mappings/v7/__init__.py +0 -0
  496. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/mappings/v7/vocabularies/vocabulary-v1.0.0.json +0 -0
  497. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/schemas/__init__.py +0 -0
  498. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/schemas/vocabularies/vocabulary-v1.0.0.json +0 -0
  499. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/search.py +0 -0
  500. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/sources/__init__.py +0 -0
  501. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/sources/base.py +0 -0
  502. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/sources/json.py +0 -0
  503. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/sources/opendefinition.py +0 -0
  504. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils/webpack.py +0 -0
  505. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils.egg-info/dependency_links.txt +0 -0
  506. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils.egg-info/not-zip-safe +0 -0
  507. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils.egg-info/requires.txt +0 -0
  508. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/invenio_app_ils.egg-info/top_level.txt +0 -0
  509. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/pyproject.toml +0 -0
  510. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/run-tests.sh +0 -0
  511. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/scripts/bootstrap +0 -0
  512. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/scripts/build_assets +0 -0
  513. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/scripts/celery +0 -0
  514. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/scripts/console +0 -0
  515. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/scripts/server +0 -0
  516. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/scripts/setup +0 -0
  517. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/scripts/update +0 -0
  518. {invenio_app_ils-7.0.0 → invenio_app_ils-7.1.0}/setup.py +0 -0
@@ -8,6 +8,13 @@
8
8
  Changes
9
9
  =======
10
10
 
11
+ Version 7.1.0 (released 2026-01-22)
12
+
13
+ - stats: add document request stats endpoint and extend document request index
14
+ - stats: fix Schema using deserialize to validate
15
+ - stats: add order stats endpoint and extend orders index
16
+ - stats: turn loan histogram endpoint into reusable component
17
+
11
18
  Version 7.0.0 (released 2026-01-06)
12
19
 
13
20
  - stats: generalize stat tracking loan extensions to track all transitions
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: invenio-app-ils
3
- Version: 7.0.0
3
+ Version: 7.1.0
4
4
  Summary: Invenio Integrated Library System.
5
5
  Home-page: https://github.com/inveniosoftware/invenio-app-ils
6
6
  Author: CERN
@@ -103,6 +103,13 @@ https://invenioils.docs.cern.ch
103
103
  Changes
104
104
  =======
105
105
 
106
+ Version 7.1.0 (released 2026-01-22)
107
+
108
+ - stats: add document request stats endpoint and extend document request index
109
+ - stats: fix Schema using deserialize to validate
110
+ - stats: add order stats endpoint and extend orders index
111
+ - stats: turn loan histogram endpoint into reusable component
112
+
106
113
  Version 7.0.0 (released 2026-01-06)
107
114
 
108
115
  - stats: generalize stat tracking loan extensions to track all transitions
@@ -7,6 +7,6 @@
7
7
 
8
8
  """invenio-app-ils."""
9
9
 
10
- __version__ = "7.0.0"
10
+ __version__ = "7.1.0"
11
11
 
12
12
  __all__ = ("__version__",)
@@ -0,0 +1,72 @@
1
+ # -*- coding: utf-8 -*-
2
+ #
3
+ # Copyright (C) 2025 CERN.
4
+ #
5
+ # invenio-app-ils is free software; you can redistribute it and/or modify it
6
+ # under the terms of the MIT License; see LICENSE file for more details.
7
+
8
+ """Order indexer APIs."""
9
+
10
+ from datetime import datetime
11
+
12
+ from invenio_search import current_search_client
13
+
14
+ from invenio_app_ils.acquisition.api import ORDER_PID_TYPE
15
+ from invenio_app_ils.proxies import current_app_ils
16
+
17
+
18
+ def index_stats_fields_for_order(order_dict):
19
+ """Indexer hook to modify the order record dict before indexing."""
20
+
21
+ # This is done through the hook and not through an indexer class,
22
+ # as we need access to the `_created` field
23
+
24
+ # Only calculate stats if order is received
25
+ if not order_dict.get("received_date"):
26
+ return
27
+
28
+ stats = {}
29
+
30
+ received_date = datetime.fromisoformat(order_dict["received_date"]).date()
31
+ creation_date = datetime.fromisoformat(order_dict["_created"]).date()
32
+
33
+ # Calculate order_processing_time
34
+ order_processing_time = (received_date - creation_date).days
35
+ stats["order_processing_time"] = order_processing_time if order_processing_time >= 0 else None
36
+
37
+ # Find related document request if any
38
+ order_pid = order_dict.get("pid")
39
+ if order_pid:
40
+ doc_req_search_cls = current_app_ils.document_request_search_cls
41
+ search_body = {
42
+ "query": {
43
+ "bool": {
44
+ "must": [
45
+ {"term": {"physical_item_provider.pid": order_pid}},
46
+ {"term": {"physical_item_provider.pid_type": ORDER_PID_TYPE}},
47
+ ],
48
+ }
49
+ },
50
+ "size": 1,
51
+ }
52
+
53
+ search_result = current_search_client.search(
54
+ index=doc_req_search_cls.Meta.index, body=search_body
55
+ )
56
+
57
+ hits = search_result["hits"]["hits"]
58
+ if len(hits) > 0:
59
+ doc_request = hits[0]["_source"]
60
+ doc_req_creation_date = datetime.fromisoformat(
61
+ doc_request["_created"]
62
+ ).date()
63
+
64
+ order_dict["doc_request"] = {}
65
+
66
+ # Calculate document_request_waiting_time
67
+ waiting_time = (received_date - doc_req_creation_date).days
68
+ stats["document_request_waiting_time"] = (
69
+ waiting_time if waiting_time >= 0 else None
70
+ )
71
+
72
+ order_dict["stats"] = stats
@@ -358,6 +358,11 @@
358
358
  },
359
359
  "provider_pid": {
360
360
  "type": "keyword"
361
+ },
362
+ "stats": {
363
+ "type": "object",
364
+ "dynamic": true,
365
+ "enabled": true
361
366
  }
362
367
  }
363
368
  }
@@ -0,0 +1,8 @@
1
+ # -*- coding: utf-8 -*-
2
+ #
3
+ # Copyright (C) 2025 CERN.
4
+ #
5
+ # invenio-app-ils is free software; you can redistribute it and/or modify it
6
+ # under the terms of the MIT License; see LICENSE file for more details.
7
+
8
+ """Invenio App ILS acquisition stats module."""
@@ -0,0 +1,82 @@
1
+ # -*- coding: utf-8 -*-
2
+ #
3
+ # Copyright (C) 2025 CERN.
4
+ #
5
+ # invenio-app-ils is free software; you can redistribute it and/or modify it
6
+ # under the terms of the MIT License; see LICENSE file for more details.
7
+
8
+ """Invenio App ILS acquisition stats views."""
9
+
10
+ from flask import Blueprint, request
11
+ from invenio_records_rest.query import default_search_factory
12
+ from invenio_rest import ContentNegotiatedMethodView
13
+ from marshmallow.exceptions import ValidationError
14
+
15
+ from invenio_app_ils.acquisition.api import ORDER_PID_TYPE
16
+ from invenio_app_ils.acquisition.proxies import current_ils_acq
17
+ from invenio_app_ils.errors import InvalidParameterError
18
+ from invenio_app_ils.permissions import need_permissions
19
+ from invenio_app_ils.stats.histogram import (
20
+ HistogramParamsSchema,
21
+ create_histogram_view,
22
+ get_record_statistics,
23
+ )
24
+
25
+
26
+ def create_acquisition_stats_blueprint(app):
27
+ """Add statistics views to the blueprint."""
28
+ blueprint = Blueprint("invenio_app_ils_acquisition_stats", __name__, url_prefix="")
29
+
30
+ create_histogram_view(
31
+ blueprint, app, ORDER_PID_TYPE, OrderHistogramResource, "/acquisition"
32
+ )
33
+
34
+ return blueprint
35
+
36
+
37
+ class OrderHistogramResource(ContentNegotiatedMethodView):
38
+ """Order stats resource."""
39
+
40
+ view_name = "order_histogram"
41
+
42
+ def __init__(self, serializers, ctx, *args, **kwargs):
43
+ """Constructor."""
44
+ super().__init__(serializers, *args, **kwargs)
45
+ for key, value in ctx.items():
46
+ setattr(self, key, value)
47
+
48
+ @need_permissions("stats-orders")
49
+ def get(self, **kwargs):
50
+ """Get order statistics."""
51
+
52
+ order_date_fields = [
53
+ "order_date",
54
+ "expected_delivery_date",
55
+ "received_date",
56
+ "_created",
57
+ "_updated",
58
+ ]
59
+
60
+ schema = HistogramParamsSchema(order_date_fields)
61
+ try:
62
+ parsed_args = schema.load(request.args.to_dict())
63
+ except ValidationError as e:
64
+ raise InvalidParameterError(description=e.messages) from e
65
+
66
+ # Construct search to allow for filtering with the q parameter
67
+ search_cls = current_ils_acq.order_search_cls
68
+ search = search_cls()
69
+ search, _ = default_search_factory(self, search)
70
+
71
+ aggregation_buckets = get_record_statistics(
72
+ order_date_fields,
73
+ search,
74
+ parsed_args["group_by"],
75
+ parsed_args["metrics"],
76
+ )
77
+
78
+ response = {
79
+ "buckets": aggregation_buckets,
80
+ }
81
+
82
+ return self.make_response(response, 200)
@@ -164,6 +164,8 @@ def index_stats_fields_for_loan(loan_dict):
164
164
  )
165
165
 
166
166
 
167
+ # Make use of the `extra_data` property as loans are part of `invenio-circulation`,
168
+ # which do not expose the `stats` property directly
167
169
  if not "extra_data" in loan_dict:
168
170
  loan_dict["extra_data"] = {}
169
171
  loan_dict["extra_data"]["stats"] = stats
@@ -0,0 +1,51 @@
1
+ # -*- coding: utf-8 -*-
2
+ #
3
+ # Copyright (C) 2019-2025 CERN.
4
+ #
5
+ # invenio-app-ils is free software; you can redistribute it and/or modify it
6
+ # under the terms of the MIT License; see LICENSE file for more details.
7
+
8
+ """APIs for ILS circulation statistics."""
9
+
10
+ from invenio_app_ils.circulation.search import get_most_loaned_documents
11
+ from invenio_app_ils.proxies import current_app_ils
12
+
13
+
14
+ def fetch_most_loaned_documents(from_date, to_date, bucket_size):
15
+ """Fetch the documents with the most loans within the date interval."""
16
+ # Create loans aggregation
17
+ most_loaned = get_most_loaned_documents(from_date, to_date, bucket_size)
18
+
19
+ # Prepare the loan and extension count
20
+ document_pids = []
21
+ document_metadata = {}
22
+ loan_result = most_loaned.execute()
23
+ for bucket in loan_result.aggregations.most_loaned_documents.buckets:
24
+ document_pid = bucket["key"]
25
+ loan_count = bucket["doc_count"]
26
+ loan_extensions = int(bucket["extensions"]["value"])
27
+ document_pids.append(document_pid)
28
+ document_metadata[document_pid] = dict(
29
+ loans=loan_count, extensions=loan_extensions
30
+ )
31
+
32
+ # Enhance the document serializer
33
+ doc_search = current_app_ils.document_search_cls()
34
+ doc_search = doc_search.with_preference_param().params(version=True)
35
+ doc_search = doc_search.search_by_pid(*document_pids)
36
+ doc_search = doc_search[0:bucket_size]
37
+ result = doc_search.execute()
38
+
39
+ for hit in result.hits:
40
+ pid = hit["pid"]
41
+ hit["loan_count"] = document_metadata[pid]["loans"]
42
+ hit["loan_extensions"] = document_metadata[pid]["extensions"]
43
+
44
+ res = result.to_dict()
45
+ res["hits"]["hits"] = sorted(
46
+ res["hits"]["hits"],
47
+ key=lambda hit: hit["_source"]["loan_count"],
48
+ reverse=True,
49
+ )
50
+
51
+ return res
@@ -18,17 +18,17 @@ from invenio_records_rest.utils import obj_or_import_string
18
18
  from invenio_rest import ContentNegotiatedMethodView
19
19
  from marshmallow.exceptions import ValidationError
20
20
 
21
- from invenio_app_ils.circulation.stats.api import (
22
- fetch_most_loaned_documents,
23
- get_loan_statistics,
24
- )
25
- from invenio_app_ils.circulation.stats.schemas import HistogramParamsSchema
26
- from invenio_app_ils.circulation.stats.serializers import loan_stats_response
21
+ from invenio_app_ils.circulation.stats.api import fetch_most_loaned_documents
27
22
  from invenio_app_ils.circulation.views import IlsCirculationResource
28
23
  from invenio_app_ils.config import RECORDS_REST_MAX_RESULT_WINDOW
29
24
  from invenio_app_ils.documents.api import DOCUMENT_PID_FETCHER, DOCUMENT_PID_TYPE
30
25
  from invenio_app_ils.errors import InvalidParameterError
31
26
  from invenio_app_ils.permissions import need_permissions
27
+ from invenio_app_ils.stats.histogram import (
28
+ HistogramParamsSchema,
29
+ create_histogram_view,
30
+ get_record_statistics,
31
+ )
32
32
 
33
33
 
34
34
  def create_most_loaned_documents_view(blueprint, app):
@@ -56,33 +56,18 @@ def create_most_loaned_documents_view(blueprint, app):
56
56
  )
57
57
 
58
58
 
59
- def create_loan_histogram_view(blueprint, app):
60
- """Add url rule for loan histogram view."""
61
-
62
- endpoints = app.config.get("RECORDS_REST_ENDPOINTS")
63
- document_endpoint = endpoints.get(CIRCULATION_LOAN_PID_TYPE)
64
- default_media_type = document_endpoint.get("default_media_type")
65
- loan_stats_serializers = {"application/json": loan_stats_response}
66
-
67
- loan_stats_view_func = LoanHistogramResource.as_view(
68
- LoanHistogramResource.view_name,
69
- serializers=loan_stats_serializers,
70
- default_media_type=default_media_type,
71
- ctx={},
72
- )
73
- blueprint.add_url_rule(
74
- "/circulation/loans/stats",
75
- view_func=loan_stats_view_func,
76
- methods=["GET"],
77
- )
78
-
79
-
80
59
  def create_circulation_stats_blueprint(app):
81
60
  """Add statistics views to the blueprint."""
82
61
  blueprint = Blueprint("invenio_app_ils_circulation_stats", __name__, url_prefix="")
83
62
 
84
63
  create_most_loaned_documents_view(blueprint, app)
85
- create_loan_histogram_view(blueprint, app)
64
+ create_histogram_view(
65
+ blueprint,
66
+ app,
67
+ CIRCULATION_LOAN_PID_TYPE,
68
+ LoanHistogramResource,
69
+ "/circulation/loans",
70
+ )
86
71
 
87
72
  return blueprint
88
73
 
@@ -190,7 +175,7 @@ class LoanHistogramResource(IlsCirculationResource):
190
175
  search = search_cls()
191
176
  search, _ = default_search_factory(self, search)
192
177
 
193
- aggregation_buckets = get_loan_statistics(
178
+ aggregation_buckets = get_record_statistics(
194
179
  loan_date_fields,
195
180
  search,
196
181
  parsed_args["group_by"],
@@ -0,0 +1,121 @@
1
+ # -*- coding: utf-8 -*-
2
+ #
3
+ # Copyright (C) 2019-2025 CERN.
4
+ #
5
+ # invenio-app-ils is free software; you can redistribute it and/or modify it
6
+ # under the terms of the MIT License; see LICENSE file for more details.
7
+
8
+ """DocumentRequest indexer APIs."""
9
+
10
+ from datetime import datetime
11
+
12
+ from celery import shared_task
13
+ from flask import current_app
14
+ from invenio_indexer.api import RecordIndexer
15
+ from invenio_search import current_search_client
16
+
17
+ from invenio_app_ils.acquisition.api import ORDER_PID_TYPE
18
+ from invenio_app_ils.acquisition.proxies import current_ils_acq
19
+ from invenio_app_ils.documents.api import DOCUMENT_PID_TYPE
20
+ from invenio_app_ils.ill.api import BORROWING_REQUEST_PID_TYPE
21
+ from invenio_app_ils.ill.proxies import current_ils_ill
22
+ from invenio_app_ils.indexer import ReferencedRecordsIndexer
23
+ from invenio_app_ils.proxies import current_app_ils
24
+
25
+ from .api import DOCUMENT_REQUEST_PID_TYPE
26
+
27
+
28
+ def index_stats_fields_for_document_request(doc_request_dict):
29
+ """Indexer hook to modify the document request record dict before indexing."""
30
+
31
+ # This is done through the hook and not through an indexer class,
32
+ # as we need access to the `_created` field.
33
+
34
+ physical_item_provider = doc_request_dict.get("physical_item_provider")
35
+ if not physical_item_provider:
36
+ return
37
+
38
+ provider_pid = physical_item_provider["pid"]
39
+ provider_pid_type = physical_item_provider["pid_type"]
40
+
41
+ doc_request_created = doc_request_dict["_created"]
42
+ doc_request_creation_date = datetime.fromisoformat(doc_request_created).date()
43
+
44
+ provider_creation_date = None
45
+
46
+ if provider_pid_type == ORDER_PID_TYPE:
47
+ order_search_cls = current_ils_acq.order_search_cls
48
+ search_body = {
49
+ "query": {"term": {"pid": provider_pid}},
50
+ "size": 1,
51
+ }
52
+ search_result = current_search_client.search(
53
+ index=order_search_cls.Meta.index, body=search_body
54
+ )
55
+ hits = search_result["hits"]["hits"]
56
+ if len(hits) > 0:
57
+ order = hits[0]["_source"]
58
+ provider_creation_date = datetime.fromisoformat(order["_created"]).date()
59
+
60
+ elif provider_pid_type == BORROWING_REQUEST_PID_TYPE:
61
+ brw_req_search_cls = current_ils_ill.borrowing_request_search_cls
62
+ search_body = {
63
+ "query": {"term": {"pid": provider_pid}},
64
+ "size": 1,
65
+ }
66
+ search_result = current_search_client.search(
67
+ index=brw_req_search_cls.Meta.index, body=search_body
68
+ )
69
+ hits = search_result["hits"]["hits"]
70
+ if len(hits) > 0:
71
+ brw_req = hits[0]["_source"]
72
+ provider_creation_date = datetime.fromisoformat(brw_req["_created"]).date()
73
+ stats = {}
74
+ if provider_creation_date:
75
+ provider_creation_delay = (
76
+ provider_creation_date - doc_request_creation_date
77
+ ).days
78
+ stats["provider_creation_delay"] = (
79
+ provider_creation_delay if provider_creation_delay >= 0 else None
80
+ )
81
+
82
+ if stats:
83
+ doc_request_dict["stats"] = stats
84
+
85
+
86
+ @shared_task(ignore_result=True)
87
+ def index_referenced_records(docreq):
88
+ """Index referenced records."""
89
+ indexer = ReferencedRecordsIndexer()
90
+ indexed = dict(pid_type=DOCUMENT_REQUEST_PID_TYPE, record=docreq)
91
+
92
+ referenced = []
93
+
94
+ # fetch and index the document
95
+ document_pid = docreq.get("document_pid")
96
+ if document_pid:
97
+ document_cls = current_app_ils.document_record_cls
98
+ document = document_cls.get_record_by_pid(document_pid)
99
+ referenced.append(dict(pid_type=DOCUMENT_PID_TYPE, record=document))
100
+
101
+ # fetch and index the related order (physical_item_provider)
102
+ physical_item_provider = docreq.get("physical_item_provider")
103
+ if physical_item_provider:
104
+ provider_pid = physical_item_provider.get("pid")
105
+ provider_pid_type = physical_item_provider.get("pid_type")
106
+ if provider_pid and provider_pid_type == ORDER_PID_TYPE:
107
+ order_cls = current_ils_acq.order_record_cls
108
+ order = order_cls.get_record_by_pid(provider_pid)
109
+ referenced.append(dict(pid_type=ORDER_PID_TYPE, record=order))
110
+
111
+ indexer.index(indexed, referenced)
112
+
113
+
114
+ class DocumentRequestIndexer(RecordIndexer):
115
+ """Indexer class for DocumentRequest record."""
116
+
117
+ def index(self, docreq, arguments=None, **kwargs):
118
+ """Index a DocumentRequest."""
119
+ super().index(docreq)
120
+ eta = datetime.utcnow() + current_app.config["ILS_INDEXER_TASK_DELAY"]
121
+ index_referenced_records.apply_async((docreq,), eta=eta)
@@ -0,0 +1,8 @@
1
+ # -*- coding: utf-8 -*-
2
+ #
3
+ # Copyright (C) 2025 CERN.
4
+ #
5
+ # invenio-app-ils is free software; you can redistribute it and/or modify it
6
+ # under the terms of the MIT License; see LICENSE file for more details.
7
+
8
+ """Invenio App ILS document requests stats module."""
@@ -0,0 +1,85 @@
1
+ # -*- coding: utf-8 -*-
2
+ #
3
+ # Copyright (C) 2025 CERN.
4
+ #
5
+ # invenio-app-ils is free software; you can redistribute it and/or modify it
6
+ # under the terms of the MIT License; see LICENSE file for more details.
7
+
8
+ """Invenio App ILS document requests stats views."""
9
+
10
+ from flask import Blueprint, request
11
+ from invenio_records_rest.query import default_search_factory
12
+ from invenio_rest import ContentNegotiatedMethodView
13
+ from marshmallow.exceptions import ValidationError
14
+
15
+ from invenio_app_ils.document_requests.api import DOCUMENT_REQUEST_PID_TYPE
16
+ from invenio_app_ils.errors import InvalidParameterError
17
+ from invenio_app_ils.permissions import need_permissions
18
+ from invenio_app_ils.proxies import current_app_ils
19
+ from invenio_app_ils.stats.histogram import (
20
+ HistogramParamsSchema,
21
+ create_histogram_view,
22
+ get_record_statistics,
23
+ )
24
+
25
+
26
+ def create_document_request_stats_blueprint(app):
27
+ """Add statistics views to the blueprint."""
28
+ blueprint = Blueprint(
29
+ "invenio_app_ils_document_request_stats", __name__, url_prefix=""
30
+ )
31
+
32
+ create_histogram_view(
33
+ blueprint,
34
+ app,
35
+ DOCUMENT_REQUEST_PID_TYPE,
36
+ DocumentRequestHistogramResource,
37
+ "/document-requests",
38
+ )
39
+
40
+ return blueprint
41
+
42
+
43
+ class DocumentRequestHistogramResource(ContentNegotiatedMethodView):
44
+ """Document request stats resource."""
45
+
46
+ view_name = "document_request_histogram"
47
+
48
+ def __init__(self, serializers, ctx, *args, **kwargs):
49
+ """Constructor."""
50
+ super().__init__(serializers, *args, **kwargs)
51
+ for key, value in ctx.items():
52
+ setattr(self, key, value)
53
+
54
+ @need_permissions("stats-document-requests")
55
+ def get(self, **kwargs):
56
+ """Get document request statistics."""
57
+
58
+ document_request_date_fields = [
59
+ "_created",
60
+ "_updated",
61
+ ]
62
+
63
+ schema = HistogramParamsSchema(document_request_date_fields)
64
+ try:
65
+ parsed_args = schema.load(request.args.to_dict())
66
+ except ValidationError as e:
67
+ raise InvalidParameterError(description=e.messages) from e
68
+
69
+ # Construct search to allow for filtering with the q parameter
70
+ search_cls = current_app_ils.document_request_search_cls
71
+ search = search_cls()
72
+ search, _ = default_search_factory(self, search)
73
+
74
+ aggregation_buckets = get_record_statistics(
75
+ document_request_date_fields,
76
+ search,
77
+ parsed_args["group_by"],
78
+ parsed_args["metrics"],
79
+ )
80
+
81
+ response = {
82
+ "buckets": aggregation_buckets,
83
+ }
84
+
85
+ return self.make_response(response, 200)
@@ -20,12 +20,14 @@ from invenio_app_ils.records.metadata_extensions import (
20
20
  )
21
21
 
22
22
  from .circulation import config as circulation_config
23
+ from .acquisition.indexer import index_stats_fields_for_order
23
24
  from .circulation.indexer import (
24
25
  index_extra_fields_for_loan,
25
26
  index_stats_fields_for_loan,
26
27
  )
27
28
  from .circulation.receivers import register_circulation_signals
28
29
  from .document_requests.api import DOCUMENT_REQUEST_PID_TYPE
30
+ from .document_requests.indexer import index_stats_fields_for_document_request
29
31
  from .documents.api import DOCUMENT_PID_TYPE
30
32
  from .eitems.api import EITEM_PID_TYPE
31
33
  from .files.receivers import register_files_signals
@@ -224,6 +226,8 @@ class InvenioAppIls(object):
224
226
  self.init_app(app)
225
227
  self.init_metadata_extensions(app)
226
228
  self.init_loan_indexer_hook(app)
229
+ self.init_order_indexer_hook(app)
230
+ self.init_document_request_indexer_hook(app)
227
231
 
228
232
  def init_app(self, app):
229
233
  """Flask application initialization."""
@@ -278,6 +282,24 @@ class InvenioAppIls(object):
278
282
  index="{0}s-{0}-v1.0.0".format("loan"),
279
283
  )
280
284
 
285
+ def init_order_indexer_hook(self, app):
286
+ """Custom order indexer hook init."""
287
+ before_record_index.dynamic_connect(
288
+ before_order_index_hook,
289
+ sender=app,
290
+ weak=False,
291
+ index="acq_orders-order-v1.0.0",
292
+ )
293
+
294
+ def init_document_request_indexer_hook(self, app):
295
+ """Custom document request indexer hook init."""
296
+ before_record_index.dynamic_connect(
297
+ before_document_request_index_hook,
298
+ sender=app,
299
+ weak=False,
300
+ index="document_requests-document_request-v1.0.0",
301
+ )
302
+
281
303
  def update_config_records_rest(self, app):
282
304
  """Merge overridden circ records rest into global records rest."""
283
305
  for k in dir(circulation_config):
@@ -332,3 +354,30 @@ def before_loan_index_hook(sender, json=None, record=None, index=None, **kwargs)
332
354
  index_extra_fields_for_loan(json)
333
355
  if current_app.config["ILS_EXTEND_INDICES_WITH_STATS_ENABLED"]:
334
356
  index_stats_fields_for_loan(json)
357
+
358
+
359
+ def before_order_index_hook(sender, json=None, record=None, index=None, **kwargs):
360
+ """Hook to transform order record before ES indexing.
361
+
362
+ :param sender: The entity sending the signal.
363
+ :param json: The dumped Record dict which will be indexed.
364
+ :param record: The corresponding Record object.
365
+ :param index: The index in which the json will be indexed.
366
+ :param kwargs: Any other parameters.
367
+ """
368
+ if current_app.config["ILS_EXTEND_INDICES_WITH_STATS_ENABLED"]:
369
+ index_stats_fields_for_order(json)
370
+
371
+ def before_document_request_index_hook(
372
+ sender, json=None, record=None, index=None, **kwargs
373
+ ):
374
+ """Hook to transform document request record before ES indexing.
375
+
376
+ :param sender: The entity sending the signal.
377
+ :param json: The dumped Record dict which will be indexed.
378
+ :param record: The corresponding Record object.
379
+ :param index: The index in which the json will be indexed.
380
+ :param kwargs: Any other parameters.
381
+ """
382
+ if current_app.config["ILS_EXTEND_INDICES_WITH_STATS_ENABLED"]:
383
+ index_stats_fields_for_document_request(json)
@@ -206,6 +206,8 @@ _is_backoffice_permission = [
206
206
  _is_backoffice_read_permission = [
207
207
  "stats-most-loaned",
208
208
  "stats-loans",
209
+ "stats-orders",
210
+ "stats-document-requests",
209
211
  "get-notifications-sent-to-patron",
210
212
  ]
211
213
  _is_patron_owner_permission = [