invenio-app-ils 6.1.1__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-6.1.1 → invenio_app_ils-7.1.0}/CHANGES.rst +18 -1
  2. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/PKG-INFO +20 -3
  3. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/__init__.py +2 -2
  4. invenio_app_ils-7.1.0/invenio_app_ils/acquisition/indexer.py +72 -0
  5. {invenio_app_ils-6.1.1/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.1.0/invenio_app_ils/circulation/errors.py +12 -0
  9. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/indexer.py +72 -0
  10. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/stats/api.py +1 -1
  11. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/stats/views.py +57 -1
  12. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/config.py +55 -1
  13. invenio_app_ils-7.1.0/invenio_app_ils/document_requests/indexer.py +121 -0
  14. {invenio_app_ils-6.1.1/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
  15. invenio_app_ils-7.1.0/invenio_app_ils/document_requests/stats/__init__.py +8 -0
  16. invenio_app_ils-7.1.0/invenio_app_ils/document_requests/stats/views.py +85 -0
  17. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/ext.py +56 -2
  18. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/permissions.py +3 -0
  19. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/stats/event_builders.py +44 -0
  20. invenio_app_ils-7.1.0/invenio_app_ils/stats/histogram/__init__.py +18 -0
  21. invenio_app_ils-7.1.0/invenio_app_ils/stats/histogram/api.py +109 -0
  22. invenio_app_ils-7.1.0/invenio_app_ils/stats/histogram/schemas.py +92 -0
  23. invenio_app_ils-7.1.0/invenio_app_ils/stats/histogram/serializers/__init__.py +18 -0
  24. invenio_app_ils-7.1.0/invenio_app_ils/stats/histogram/serializers/response.py +36 -0
  25. invenio_app_ils-7.1.0/invenio_app_ils/stats/histogram/serializers/schema.py +33 -0
  26. invenio_app_ils-7.1.0/invenio_app_ils/stats/histogram/views.py +34 -0
  27. invenio_app_ils-7.1.0/invenio_app_ils/stats/processors.py +86 -0
  28. invenio_app_ils-7.1.0/invenio_app_ils/stats/templates/aggregations/loan_transitions/__init__.py +8 -0
  29. invenio_app_ils-7.1.0/invenio_app_ils/stats/templates/aggregations/loan_transitions/os-v2/__init__.py +8 -0
  30. invenio_app_ils-7.1.0/invenio_app_ils/stats/templates/aggregations/loan_transitions/os-v2/aggr-loan-transitions-v1.json +32 -0
  31. invenio_app_ils-7.1.0/invenio_app_ils/stats/templates/events/loan_transitions/__init__.py +8 -0
  32. invenio_app_ils-7.1.0/invenio_app_ils/stats/templates/events/loan_transitions/os-v2/__init__.py +8 -0
  33. invenio_app_ils-7.1.0/invenio_app_ils/stats/templates/events/loan_transitions/os-v2/loan-transitions-v1.json +40 -0
  34. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils.egg-info/PKG-INFO +20 -3
  35. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils.egg-info/SOURCES.txt +19 -0
  36. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils.egg-info/entry_points.txt +2 -0
  37. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils.egg-info/requires.txt +1 -1
  38. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/setup.cfg +3 -1
  39. invenio_app_ils-6.1.1/invenio_app_ils/document_requests/indexer.py +0 -47
  40. invenio_app_ils-6.1.1/invenio_app_ils/stats/processors.py +0 -30
  41. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/.editorconfig +0 -0
  42. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/.git-blame-ignore-revs +0 -0
  43. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/AUTHORS.rst +0 -0
  44. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/CONTRIBUTING.rst +0 -0
  45. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/INSTALL.rst +0 -0
  46. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/LICENSE +0 -0
  47. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/MANIFEST.in +0 -0
  48. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/README.rst +0 -0
  49. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/docker/backend/Dockerfile +0 -0
  50. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/docker/frontend/Dockerfile +0 -0
  51. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/docker/frontend/conf.d/default.conf +0 -0
  52. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/docker/frontend/nginx.conf +0 -0
  53. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/docker/frontend/test.crt +0 -0
  54. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/docker/frontend/test.key +0 -0
  55. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/docker/lb/Dockerfile +0 -0
  56. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/docker/lb/haproxy.cfg +0 -0
  57. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/docker/lb/haproxy_cert.pem +0 -0
  58. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/docker-compose.full.yml +0 -0
  59. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/docker-compose.yml +0 -0
  60. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/docker-services.yml +0 -0
  61. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/acquisition/__init__.py +0 -0
  62. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/acquisition/api.py +0 -0
  63. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/acquisition/config.py +0 -0
  64. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/acquisition/errors.py +0 -0
  65. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/acquisition/ext.py +0 -0
  66. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/acquisition/jsonresolvers/__init__.py +0 -0
  67. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/acquisition/jsonresolvers/order_order_lines.py +0 -0
  68. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/acquisition/jsonresolvers/order_provider.py +0 -0
  69. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/acquisition/loaders/__init__.py +0 -0
  70. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/acquisition/loaders/jsonschemas/__init__.py +0 -0
  71. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/acquisition/loaders/jsonschemas/order.py +0 -0
  72. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/acquisition/mappings/__init__.py +0 -0
  73. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/acquisition/mappings/os-v1/__init__.py +0 -0
  74. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/acquisition/mappings/os-v1/acq_orders/order-v1.0.0.json +0 -0
  75. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/acquisition/mappings/os-v2/__init__.py +0 -0
  76. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/acquisition/mappings/v7/__init__.py +0 -0
  77. {invenio_app_ils-6.1.1/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
  78. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/acquisition/proxies.py +0 -0
  79. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/acquisition/schemas/__init__.py +0 -0
  80. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/acquisition/schemas/acq_orders/order-v1.0.0.json +0 -0
  81. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/acquisition/search.py +0 -0
  82. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/assets/semantic-ui/less/theme.config +0 -0
  83. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/assets/semantic-ui/templates/.gitkeep +0 -0
  84. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/__init__.py +0 -0
  85. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/api.py +0 -0
  86. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/config.py +0 -0
  87. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/jsonresolvers/__init__.py +0 -0
  88. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/jsonresolvers/loan.py +0 -0
  89. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/loaders/__init__.py +0 -0
  90. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/loaders/schemas/__init__.py +0 -0
  91. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/loaders/schemas/json/__init__.py +0 -0
  92. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/loaders/schemas/json/base.py +0 -0
  93. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/loaders/schemas/json/bulk_extend.py +0 -0
  94. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/loaders/schemas/json/loan_checkout.py +0 -0
  95. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/loaders/schemas/json/loan_request.py +0 -0
  96. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/loaders/schemas/json/loan_self_checkout.py +0 -0
  97. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/loaders/schemas/json/loan_update_dates.py +0 -0
  98. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/notifications/__init__.py +0 -0
  99. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/notifications/api.py +0 -0
  100. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/notifications/messages.py +0 -0
  101. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/notifications/tasks.py +0 -0
  102. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/receivers.py +0 -0
  103. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/search.py +0 -0
  104. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/serializers/__init__.py +0 -0
  105. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/serializers/csv.py +0 -0
  106. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/serializers/custom_fields.py +0 -0
  107. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/serializers/json.py +0 -0
  108. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/serializers/response.py +0 -0
  109. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/stats/__init__.py +0 -0
  110. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/tasks.py +0 -0
  111. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/templates/invenio_app_ils_circulation/notifications/bulk_extend.html +0 -0
  112. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/templates/invenio_app_ils_circulation/notifications/cancel.html +0 -0
  113. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/templates/invenio_app_ils_circulation/notifications/checkin.html +0 -0
  114. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/templates/invenio_app_ils_circulation/notifications/checkout.html +0 -0
  115. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/templates/invenio_app_ils_circulation/notifications/extend.html +0 -0
  116. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/templates/invenio_app_ils_circulation/notifications/overdue_reminder.html +0 -0
  117. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/templates/invenio_app_ils_circulation/notifications/request.html +0 -0
  118. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/templates/invenio_app_ils_circulation/notifications/request_no_items.html +0 -0
  119. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/templates/invenio_app_ils_circulation/notifications/self_checkout.html +0 -0
  120. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/templates/invenio_app_ils_circulation/notifications/update_dates.html +0 -0
  121. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/templates/invenio_app_ils_circulation/notifications/will_expire_in_reminder.html +0 -0
  122. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/transitions/__init__.py +0 -0
  123. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/transitions/transitions.py +0 -0
  124. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/utils.py +0 -0
  125. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/circulation/views.py +0 -0
  126. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/cli.py +0 -0
  127. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/closures/__init__.py +0 -0
  128. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/closures/api.py +0 -0
  129. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/closures/serializers/__init__.py +0 -0
  130. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/closures/serializers/response.py +0 -0
  131. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/closures/serializers/schema.py +0 -0
  132. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/closures/tasks.py +0 -0
  133. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/closures/views.py +0 -0
  134. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/demo_data/documents.json +0 -0
  135. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/demo_data/items.json +0 -0
  136. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/document_requests/__init__.py +0 -0
  137. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/document_requests/api.py +0 -0
  138. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/document_requests/jsonresolvers/__init__.py +0 -0
  139. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/document_requests/jsonresolvers/document_request_document.py +0 -0
  140. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/document_requests/jsonresolvers/document_request_patron.py +0 -0
  141. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/document_requests/loaders/__init__.py +0 -0
  142. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/document_requests/loaders/jsonschemas/__init__.py +0 -0
  143. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/document_requests/loaders/jsonschemas/document_request.py +0 -0
  144. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/document_requests/loaders/jsonschemas/document_request_decline.py +0 -0
  145. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/document_requests/loaders/jsonschemas/document_request_document.py +0 -0
  146. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/document_requests/loaders/jsonschemas/document_request_provider.py +0 -0
  147. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/document_requests/mappings/__init__.py +0 -0
  148. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/document_requests/mappings/os-v1/__init__.py +0 -0
  149. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/document_requests/mappings/os-v1/document_requests/document_request-v1.0.0.json +0 -0
  150. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/document_requests/mappings/os-v2/__init__.py +0 -0
  151. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/document_requests/mappings/v7/__init__.py +0 -0
  152. {invenio_app_ils-6.1.1/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
  153. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/document_requests/notifications/__init__.py +0 -0
  154. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/document_requests/notifications/api.py +0 -0
  155. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/document_requests/notifications/messages.py +0 -0
  156. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/document_requests/schemas/__init__.py +0 -0
  157. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/document_requests/schemas/document_requests/document_request-v1.0.0.json +0 -0
  158. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/document_requests/search.py +0 -0
  159. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/document_requests/templates/invenio_app_ils_document_requests/notifications/document_request_accept.html +0 -0
  160. {invenio_app_ils-6.1.1 → 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
  161. {invenio_app_ils-6.1.1 → 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
  162. {invenio_app_ils-6.1.1 → 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
  163. {invenio_app_ils-6.1.1 → 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
  164. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/document_requests/views.py +0 -0
  165. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/documents/__init__.py +0 -0
  166. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/documents/api.py +0 -0
  167. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/documents/indexer.py +0 -0
  168. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/documents/jsonresolvers/__init__.py +0 -0
  169. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/documents/jsonresolvers/document_circulation.py +0 -0
  170. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/documents/jsonresolvers/document_eitem.py +0 -0
  171. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/documents/jsonresolvers/document_item.py +0 -0
  172. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/documents/jsonresolvers/document_relations.py +0 -0
  173. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/documents/jsonresolvers/document_stock.py +0 -0
  174. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/documents/loaders/__init__.py +0 -0
  175. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/documents/loaders/jsonschemas/__init__.py +0 -0
  176. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/documents/loaders/jsonschemas/document.py +0 -0
  177. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/documents/mappings/__init__.py +0 -0
  178. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/documents/mappings/os-v1/__init__.py +0 -0
  179. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/documents/mappings/os-v1/documents/document-v1.0.0.json +0 -0
  180. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/documents/mappings/os-v1/documents/document-v2.0.0.json +0 -0
  181. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/documents/mappings/os-v2/__init__.py +0 -0
  182. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/documents/mappings/os-v2/documents/document-v1.0.0.json +0 -0
  183. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/documents/mappings/os-v2/documents/document-v2.0.0.json +0 -0
  184. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/documents/mappings/v7/__init__.py +0 -0
  185. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/documents/mappings/v7/documents/document-v1.0.0.json +0 -0
  186. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/documents/mappings/v7/documents/document-v2.0.0.json +0 -0
  187. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/documents/schemas/__init__.py +0 -0
  188. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/documents/schemas/documents/document-v1.0.0.json +0 -0
  189. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/documents/schemas/documents/document-v2.0.0.json +0 -0
  190. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/documents/search.py +0 -0
  191. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/documents/utils.py +0 -0
  192. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/eitems/__init__.py +0 -0
  193. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/eitems/api.py +0 -0
  194. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/eitems/indexer.py +0 -0
  195. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/eitems/jsonresolvers/__init__.py +0 -0
  196. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/eitems/jsonresolvers/eitem_document.py +0 -0
  197. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/eitems/jsonresolvers/eitem_files.py +0 -0
  198. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/eitems/loaders/__init__.py +0 -0
  199. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/eitems/loaders/jsonschemas/__init__.py +0 -0
  200. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/eitems/loaders/jsonschemas/eitems.py +0 -0
  201. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/eitems/mappings/__init__.py +0 -0
  202. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/eitems/mappings/os-v1/__init__.py +0 -0
  203. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/eitems/mappings/os-v1/eitems/eitem-v1.0.0.json +0 -0
  204. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/eitems/mappings/os-v1/eitems/eitem-v2.0.0.json +0 -0
  205. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/eitems/mappings/os-v1/eitems/eitem-v3.0.0.json +0 -0
  206. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/eitems/mappings/os-v2/__init__.py +0 -0
  207. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/eitems/mappings/os-v2/eitems/eitem-v1.0.0.json +0 -0
  208. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/eitems/mappings/os-v2/eitems/eitem-v2.0.0.json +0 -0
  209. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/eitems/mappings/os-v2/eitems/eitem-v3.0.0.json +0 -0
  210. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/eitems/mappings/v7/__init__.py +0 -0
  211. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/eitems/mappings/v7/eitems/eitem-v1.0.0.json +0 -0
  212. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/eitems/mappings/v7/eitems/eitem-v2.0.0.json +0 -0
  213. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/eitems/mappings/v7/eitems/eitem-v3.0.0.json +0 -0
  214. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/eitems/schemas/__init__.py +0 -0
  215. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/eitems/schemas/eitems/eitem-v1.0.0.json +0 -0
  216. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/eitems/schemas/eitems/eitem-v2.0.0.json +0 -0
  217. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/eitems/schemas/eitems/eitem-v3.0.0.json +0 -0
  218. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/eitems/search.py +0 -0
  219. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/errors.py +0 -0
  220. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/facets.py +0 -0
  221. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/fetchers.py +0 -0
  222. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/files/__init__.py +0 -0
  223. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/files/receivers.py +0 -0
  224. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/files/views.py +0 -0
  225. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/ill/__init__.py +0 -0
  226. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/ill/api.py +0 -0
  227. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/ill/config.py +0 -0
  228. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/ill/errors.py +0 -0
  229. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/ill/ext.py +0 -0
  230. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/ill/jsonresolvers/__init__.py +0 -0
  231. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/ill/jsonresolvers/borrowing_request_document.py +0 -0
  232. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/ill/jsonresolvers/borrowing_request_patron.py +0 -0
  233. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/ill/jsonresolvers/borrowing_request_provider.py +0 -0
  234. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/ill/loaders/__init__.py +0 -0
  235. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/ill/loaders/jsonschemas/__init__.py +0 -0
  236. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/ill/loaders/jsonschemas/borrowing_request.py +0 -0
  237. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/ill/loaders/jsonschemas/patron_loan_actions.py +0 -0
  238. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/ill/loaders/jsonschemas/patron_loan_extension_actions.py +0 -0
  239. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/ill/mappings/__init__.py +0 -0
  240. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/ill/mappings/os-v1/__init__.py +0 -0
  241. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/ill/mappings/os-v1/ill_borrowing_requests/borrowing_request-v1.0.0.json +0 -0
  242. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/ill/mappings/os-v2/__init__.py +0 -0
  243. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/ill/mappings/os-v2/ill_borrowing_requests/borrowing_request-v1.0.0.json +0 -0
  244. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/ill/mappings/v7/__init__.py +0 -0
  245. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/ill/mappings/v7/ill_borrowing_requests/borrowing_request-v1.0.0.json +0 -0
  246. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/ill/notifications/__init__.py +0 -0
  247. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/ill/notifications/api.py +0 -0
  248. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/ill/notifications/messages.py +0 -0
  249. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/ill/proxies.py +0 -0
  250. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/ill/schemas/__init__.py +0 -0
  251. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/ill/schemas/ill_borrowing_requests/borrowing_request-v1.0.0.json +0 -0
  252. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/ill/search.py +0 -0
  253. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/ill/serializers/__init__.py +0 -0
  254. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/ill/serializers/csv.py +0 -0
  255. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/ill/serializers/custom_fields.py +0 -0
  256. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/ill/serializers/json.py +0 -0
  257. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/ill/templates/invenio_app_ils_ill/notifications/patron_loan_extension_accept.html +0 -0
  258. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/ill/templates/invenio_app_ils_ill/notifications/patron_loan_extension_decline.html +0 -0
  259. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/ill/templates/invenio_app_ils_ill/notifications/patron_loan_extension_request.html +0 -0
  260. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/ill/views.py +0 -0
  261. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/indexer.py +0 -0
  262. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/internal_locations/__init__.py +0 -0
  263. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/internal_locations/api.py +0 -0
  264. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/internal_locations/indexer.py +0 -0
  265. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/internal_locations/jsonresolvers/__init__.py +0 -0
  266. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/internal_locations/jsonresolvers/internal_location.py +0 -0
  267. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/internal_locations/loaders/__init__.py +0 -0
  268. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/internal_locations/loaders/jsonschemas/__init__.py +0 -0
  269. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/internal_locations/loaders/jsonschemas/internal_location.py +0 -0
  270. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/internal_locations/mappings/__init__.py +0 -0
  271. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/internal_locations/mappings/os-v1/__init__.py +0 -0
  272. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/internal_locations/mappings/os-v1/internal_locations/internal_location-v1.0.0.json +0 -0
  273. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/internal_locations/mappings/os-v2/__init__.py +0 -0
  274. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/internal_locations/mappings/os-v2/internal_locations/internal_location-v1.0.0.json +0 -0
  275. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/internal_locations/mappings/v7/__init__.py +0 -0
  276. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/internal_locations/mappings/v7/internal_locations/internal_location-v1.0.0.json +0 -0
  277. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/internal_locations/schemas/__init__.py +0 -0
  278. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/internal_locations/schemas/internal_locations/internal_location-v1.0.0.json +0 -0
  279. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/internal_locations/search.py +0 -0
  280. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/items/__init__.py +0 -0
  281. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/items/api.py +0 -0
  282. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/items/indexer.py +0 -0
  283. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/items/jsonresolvers/__init__.py +0 -0
  284. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/items/jsonresolvers/item_document.py +0 -0
  285. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/items/jsonresolvers/item_internal_location.py +0 -0
  286. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/items/jsonresolvers/item_loan.py +0 -0
  287. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/items/loaders/__init__.py +0 -0
  288. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/items/loaders/jsonschemas/__init__.py +0 -0
  289. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/items/loaders/jsonschemas/items.py +0 -0
  290. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/items/mappings/__init__.py +0 -0
  291. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/items/mappings/os-v1/__init__.py +0 -0
  292. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/items/mappings/os-v1/items/item-v1.0.0.json +0 -0
  293. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/items/mappings/os-v1/items/item-v2.0.0.json +0 -0
  294. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/items/mappings/os-v2/__init__.py +0 -0
  295. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/items/mappings/os-v2/items/item-v1.0.0.json +0 -0
  296. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/items/mappings/os-v2/items/item-v2.0.0.json +0 -0
  297. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/items/mappings/v7/__init__.py +0 -0
  298. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/items/mappings/v7/items/item-v1.0.0.json +0 -0
  299. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/items/mappings/v7/items/item-v2.0.0.json +0 -0
  300. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/items/schemas/__init__.py +0 -0
  301. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/items/schemas/items/item-v1.0.0.json +0 -0
  302. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/items/schemas/items/item-v2.0.0.json +0 -0
  303. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/items/search.py +0 -0
  304. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/items/serializers/__init__.py +0 -0
  305. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/items/serializers/item.py +0 -0
  306. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/literature/__init__.py +0 -0
  307. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/literature/api.py +0 -0
  308. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/literature/covers_builder.py +0 -0
  309. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/literature/search.py +0 -0
  310. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/literature/serializers/__init__.py +0 -0
  311. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/literature/serializers/csv.py +0 -0
  312. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/literature/serializers/custom_fields.py +0 -0
  313. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/literature/serializers/json.py +0 -0
  314. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/locations/__init__.py +0 -0
  315. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/locations/api.py +0 -0
  316. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/locations/indexer.py +0 -0
  317. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/locations/loaders/__init__.py +0 -0
  318. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/locations/loaders/jsonschemas/__init__.py +0 -0
  319. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/locations/loaders/jsonschemas/location.py +0 -0
  320. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/locations/mappings/__init__.py +0 -0
  321. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/locations/mappings/os-v1/__init__.py +0 -0
  322. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/locations/mappings/os-v1/locations/location-v1.0.0.json +0 -0
  323. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/locations/mappings/os-v2/__init__.py +0 -0
  324. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/locations/mappings/os-v2/locations/location-v1.0.0.json +0 -0
  325. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/locations/mappings/v7/__init__.py +0 -0
  326. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/locations/mappings/v7/locations/location-v1.0.0.json +0 -0
  327. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/locations/receivers.py +0 -0
  328. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/locations/schemas/__init__.py +0 -0
  329. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/locations/schemas/locations/location-v1.0.0.json +0 -0
  330. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/locations/search.py +0 -0
  331. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/minters.py +0 -0
  332. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/notifications/__init__.py +0 -0
  333. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/notifications/api.py +0 -0
  334. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/notifications/backends/__init__.py +0 -0
  335. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/notifications/backends/mail.py +0 -0
  336. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/notifications/messages.py +0 -0
  337. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/notifications/models.py +0 -0
  338. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/notifications/tasks.py +0 -0
  339. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/notifications/views.py +0 -0
  340. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/patrons/__init__.py +0 -0
  341. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/patrons/anonymization.py +0 -0
  342. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/patrons/api.py +0 -0
  343. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/patrons/cli.py +0 -0
  344. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/patrons/indexer.py +0 -0
  345. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/patrons/mappings/__init__.py +0 -0
  346. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/patrons/mappings/os-v1/__init__.py +0 -0
  347. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/patrons/mappings/os-v1/patrons/patron-v1.0.0.json +0 -0
  348. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/patrons/mappings/os-v2/__init__.py +0 -0
  349. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/patrons/mappings/os-v2/patrons/patron-v1.0.0.json +0 -0
  350. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/patrons/mappings/v7/__init__.py +0 -0
  351. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/patrons/mappings/v7/patrons/patron-v1.0.0.json +0 -0
  352. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/patrons/search.py +0 -0
  353. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/patrons/views.py +0 -0
  354. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/providers/__init__.py +0 -0
  355. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/providers/api.py +0 -0
  356. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/providers/config.py +0 -0
  357. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/providers/errors.py +0 -0
  358. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/providers/ext.py +0 -0
  359. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/providers/indexer.py +0 -0
  360. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/providers/loaders/__init__.py +0 -0
  361. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/providers/loaders/jsonschemas/__init__.py +0 -0
  362. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/providers/loaders/jsonschemas/provider.py +0 -0
  363. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/providers/mappings/__init__.py +0 -0
  364. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/providers/mappings/os-v1/__init__.py +0 -0
  365. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/providers/mappings/os-v1/providers/provider-v1.0.0.json +0 -0
  366. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/providers/mappings/os-v2/__init__.py +0 -0
  367. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/providers/mappings/os-v2/providers/provider-v1.0.0.json +0 -0
  368. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/providers/mappings/v7/__init__.py +0 -0
  369. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/providers/mappings/v7/providers/provider-v1.0.0.json +0 -0
  370. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/providers/proxies.py +0 -0
  371. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/providers/schemas/__init__.py +0 -0
  372. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/providers/schemas/providers/provider-v1.0.0.json +0 -0
  373. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/providers/search.py +0 -0
  374. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/proxies.py +0 -0
  375. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/records/__init__.py +0 -0
  376. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/records/api.py +0 -0
  377. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/records/jsonresolvers/__init__.py +0 -0
  378. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/records/jsonresolvers/api.py +0 -0
  379. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/records/listeners.py +0 -0
  380. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/records/loaders/__init__.py +0 -0
  381. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/records/loaders/schemas/__init__.py +0 -0
  382. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/records/loaders/schemas/changed_by.py +0 -0
  383. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/records/loaders/schemas/identifiers.py +0 -0
  384. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/records/loaders/schemas/preserve_cover_metadata.py +0 -0
  385. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/records/loaders/schemas/price.py +0 -0
  386. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/records/metadata_extensions.py +0 -0
  387. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/records/permissions.py +0 -0
  388. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/records/receivers.py +0 -0
  389. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/records/schemas/__init__.py +0 -0
  390. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/records/schemas/json.py +0 -0
  391. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/records/serializers/__init__.py +0 -0
  392. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/records/views.py +0 -0
  393. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/records_relations/__init__.py +0 -0
  394. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/records_relations/api.py +0 -0
  395. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/records_relations/indexer.py +0 -0
  396. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/records_relations/retriever.py +0 -0
  397. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/records_relations/views.py +0 -0
  398. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/relations/__init__.py +0 -0
  399. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/relations/api.py +0 -0
  400. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/relations/nodes.py +0 -0
  401. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/search_permissions.py +0 -0
  402. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/series/__init__.py +0 -0
  403. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/series/api.py +0 -0
  404. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/series/indexer.py +0 -0
  405. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/series/jsonresolvers/__init__.py +0 -0
  406. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/series/jsonresolvers/series_relations.py +0 -0
  407. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/series/loaders/__init__.py +0 -0
  408. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/series/loaders/jsonschemas/__init__.py +0 -0
  409. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/series/loaders/jsonschemas/series.py +0 -0
  410. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/series/mappings/__init__.py +0 -0
  411. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/series/mappings/os-v1/__init__.py +0 -0
  412. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/series/mappings/os-v1/series/series-v1.0.0.json +0 -0
  413. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/series/mappings/os-v1/series/series-v2.0.0.json +0 -0
  414. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/series/mappings/os-v2/__init__.py +0 -0
  415. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/series/mappings/os-v2/series/series-v1.0.0.json +0 -0
  416. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/series/mappings/os-v2/series/series-v2.0.0.json +0 -0
  417. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/series/mappings/v7/__init__.py +0 -0
  418. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/series/mappings/v7/series/series-v1.0.0.json +0 -0
  419. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/series/mappings/v7/series/series-v2.0.0.json +0 -0
  420. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/series/schemas/__init__.py +0 -0
  421. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/series/schemas/series/series-v1.0.0.json +0 -0
  422. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/series/schemas/series/series-v2.0.0.json +0 -0
  423. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/series/search.py +0 -0
  424. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/signals.py +0 -0
  425. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/static/images/placeholder.png +0 -0
  426. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/static_pages/search_guide.html +0 -0
  427. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/stats/__init__.py +0 -0
  428. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/stats/aggregations/__init__.py +0 -0
  429. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/stats/aggregations/aggr_file_download/__init__.py +0 -0
  430. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/stats/aggregations/aggr_file_download/os-v1/__init__.py +0 -0
  431. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/stats/aggregations/aggr_file_download/os-v1/aggr-file-download-v1.json +0 -0
  432. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/stats/aggregations/aggr_file_download/os-v2/__init__.py +0 -0
  433. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/stats/aggregations/aggr_file_download/os-v2/aggr-file-download-v1.json +0 -0
  434. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/stats/aggregations/aggr_file_download/v7/__init__.py +0 -0
  435. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/stats/aggregations/aggr_file_download/v7/aggr-file-download-v1.json +0 -0
  436. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/stats/file_download/__init__.py +0 -0
  437. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/stats/file_download/os-v1/__init__.py +0 -0
  438. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/stats/file_download/os-v1/file-download-v1.json +0 -0
  439. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/stats/file_download/os-v2/__init__.py +0 -0
  440. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/stats/file_download/os-v2/file-download-v1.json +0 -0
  441. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/stats/file_download/v7/__init__.py +0 -0
  442. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/stats/file_download/v7/file-download-v1.json +0 -0
  443. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/stats/templates/aggregations/__init__.py +0 -0
  444. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/stats/templates/aggregations/ils_record_changes/__init__.py +0 -0
  445. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/stats/templates/aggregations/ils_record_changes/os-v2/__init__.py +0 -0
  446. {invenio_app_ils-6.1.1 → 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
  447. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/stats/templates/events/__init__.py +0 -0
  448. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/stats/templates/events/ils_record_changes/__init__.py +0 -0
  449. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/stats/templates/events/ils_record_changes/os-v2/__init__.py +0 -0
  450. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/stats/templates/events/ils_record_changes/os-v2/ils-record-changes-v1.json +0 -0
  451. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/templates/invenio_app_ils/mail/footer.html +0 -0
  452. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/templates/invenio_app_ils/notifications/footer.html +0 -0
  453. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/templates/logged_out.html +0 -0
  454. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/translations/.gitkeep +0 -0
  455. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/views.py +0 -0
  456. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/__init__.py +0 -0
  457. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/api.py +0 -0
  458. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/cli.py +0 -0
  459. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/data/__init__.py +0 -0
  460. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/data/acq_mediums.json +0 -0
  461. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/data/acq_order_line_payment_modes.json +0 -0
  462. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/data/acq_order_line_purchase_types.json +0 -0
  463. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/data/acq_payment_modes.json +0 -0
  464. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/data/acq_recipients.json +0 -0
  465. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/data/affiliation_identifier_schemes.json +0 -0
  466. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/data/alternative_identifier_schemes.json +0 -0
  467. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/data/alternative_title_types.json +0 -0
  468. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/data/author_identifier_schemes.json +0 -0
  469. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/data/author_roles.json +0 -0
  470. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/data/author_types.json +0 -0
  471. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/data/conference_identifier_schemes.json +0 -0
  472. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/data/countries.json +0 -0
  473. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/data/currencies.json +0 -0
  474. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/data/docreq_payment_method.json +0 -0
  475. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/data/docreq_request_type.json +0 -0
  476. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/data/document_identifiers_materials.json +0 -0
  477. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/data/document_requests_mediums.json +0 -0
  478. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/data/document_subjects.json +0 -0
  479. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/data/eitem_sources.json +0 -0
  480. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/data/identifier_schemes.json +0 -0
  481. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/data/ill_item_types.json +0 -0
  482. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/data/ill_payment_modes.json +0 -0
  483. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/data/item_mediums.json +0 -0
  484. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/data/provider_types.json +0 -0
  485. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/data/series_identifier_schemes.json +0 -0
  486. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/data/series_url_access_restrictions.json +0 -0
  487. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/data/tags.json +0 -0
  488. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/indexer.py +0 -0
  489. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/jsonresolvers/__init__.py +0 -0
  490. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/jsonresolvers/licenses.py +0 -0
  491. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/mappings/__init__.py +0 -0
  492. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/mappings/os-v1/__init__.py +0 -0
  493. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/mappings/os-v1/vocabularies/vocabulary-v1.0.0.json +0 -0
  494. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/mappings/os-v2/__init__.py +0 -0
  495. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/mappings/os-v2/vocabularies/vocabulary-v1.0.0.json +0 -0
  496. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/mappings/v7/__init__.py +0 -0
  497. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/mappings/v7/vocabularies/vocabulary-v1.0.0.json +0 -0
  498. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/schemas/__init__.py +0 -0
  499. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/schemas/vocabularies/vocabulary-v1.0.0.json +0 -0
  500. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/search.py +0 -0
  501. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/sources/__init__.py +0 -0
  502. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/sources/base.py +0 -0
  503. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/sources/json.py +0 -0
  504. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/vocabularies/sources/opendefinition.py +0 -0
  505. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils/webpack.py +0 -0
  506. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils.egg-info/dependency_links.txt +0 -0
  507. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils.egg-info/not-zip-safe +0 -0
  508. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/invenio_app_ils.egg-info/top_level.txt +0 -0
  509. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/pyproject.toml +0 -0
  510. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/run-tests.sh +0 -0
  511. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/scripts/bootstrap +0 -0
  512. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/scripts/build_assets +0 -0
  513. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/scripts/celery +0 -0
  514. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/scripts/console +0 -0
  515. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/scripts/server +0 -0
  516. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/scripts/setup +0 -0
  517. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/scripts/update +0 -0
  518. {invenio_app_ils-6.1.1 → invenio_app_ils-7.1.0}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
 
2
2
  ..
3
- Copyright (C) 2018-2025 CERN.
3
+ Copyright (C) 2018-2026 CERN.
4
4
 
5
5
  invenio-app-ils is free software; you can redistribute it and/or modify it
6
6
  under the terms of the MIT License; see LICENSE file for more details.
@@ -8,6 +8,23 @@
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
+
18
+ Version 7.0.0 (released 2026-01-06)
19
+
20
+ - stats: generalize stat tracking loan extensions to track all transitions
21
+ - stats: raise error when loan is indexed while loan transition events index does not exits
22
+ - stats: add feature flag for extending record indices with stats
23
+ - stats: warn when loan gets indexed while loan-transitions index does not exist
24
+ - breaking change: global: update invenio-circulation
25
+ - breaking change: stats: add loan stats endpoint and extend loans index
26
+ - breaking change: stats: add stat to track loan extensions
27
+
11
28
  Version 6.1.1 (released 2025-12-10)
12
29
 
13
30
  - tests: move covers builder test into correct folder
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: invenio-app-ils
3
- Version: 6.1.1
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
@@ -39,7 +39,7 @@ Requires-Dist: invenio-records<4.0.0,>=3.0.2
39
39
  Requires-Dist: invenio-files-rest<4.0.0,>=3.2.0
40
40
  Requires-Dist: invenio-banners<6.0.0,>=5.0.0
41
41
  Requires-Dist: invenio-pages<8.0.0,>=7.1.0
42
- Requires-Dist: invenio-circulation<4.0.0,>=3.0.0a1
42
+ Requires-Dist: invenio-circulation<5.0.0,>=4.0.0
43
43
  Requires-Dist: invenio-opendefinition<3.0.0,>=2.0.0a2
44
44
  Requires-Dist: invenio-pidrelations<2.0.0,>=1.0.0
45
45
  Requires-Dist: invenio-stats<6.0.0,>=5.1.1
@@ -95,7 +95,7 @@ https://invenioils.docs.cern.ch
95
95
 
96
96
 
97
97
  ..
98
- Copyright (C) 2018-2025 CERN.
98
+ Copyright (C) 2018-2026 CERN.
99
99
 
100
100
  invenio-app-ils is free software; you can redistribute it and/or modify it
101
101
  under the terms of the MIT License; see LICENSE file for more details.
@@ -103,6 +103,23 @@ 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
+
113
+ Version 7.0.0 (released 2026-01-06)
114
+
115
+ - stats: generalize stat tracking loan extensions to track all transitions
116
+ - stats: raise error when loan is indexed while loan transition events index does not exits
117
+ - stats: add feature flag for extending record indices with stats
118
+ - stats: warn when loan gets indexed while loan-transitions index does not exist
119
+ - breaking change: global: update invenio-circulation
120
+ - breaking change: stats: add loan stats endpoint and extend loans index
121
+ - breaking change: stats: add stat to track loan extensions
122
+
106
123
  Version 6.1.1 (released 2025-12-10)
107
124
 
108
125
  - tests: move covers builder test into correct folder
@@ -1,12 +1,12 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  #
3
- # Copyright (C) 2018-2024 CERN.
3
+ # Copyright (C) 2018-2026 CERN.
4
4
  #
5
5
  # invenio-app-ils is free software; you can redistribute it and/or modify it
6
6
  # under the terms of the MIT License; see LICENSE file for more details.
7
7
 
8
8
  """invenio-app-ils."""
9
9
 
10
- __version__ = "6.1.1"
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)
@@ -0,0 +1,12 @@
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
6
+ # it under the terms of the MIT License; see LICENSE file for more details.
7
+
8
+ """Circulation exceptions."""
9
+
10
+
11
+ class LoanTransitionEventsIndexMissingError(Exception):
12
+ """Error raised when the loan transition events index is missing."""
@@ -15,7 +15,9 @@ from invenio_circulation.pidstore.pids import CIRCULATION_LOAN_PID_TYPE
15
15
  from invenio_circulation.proxies import current_circulation
16
16
  from invenio_indexer.api import RecordIndexer
17
17
  from invenio_pidstore.errors import PIDDeletedError
18
+ from invenio_search import current_search_client
18
19
 
20
+ from invenio_app_ils.circulation.errors import LoanTransitionEventsIndexMissingError
19
21
  from invenio_app_ils.circulation.utils import resolve_item_from_loan
20
22
  from invenio_app_ils.documents.api import DOCUMENT_PID_TYPE
21
23
  from invenio_app_ils.indexer import ReferencedRecordsIndexer
@@ -97,3 +99,73 @@ def index_extra_fields_for_loan(loan_dict):
97
99
 
98
100
  can_circulate_items_count = document["circulation"]["can_circulate_items_count"]
99
101
  loan_dict["can_circulate_items_count"] = can_circulate_items_count
102
+
103
+
104
+ def index_stats_fields_for_loan(loan_dict):
105
+ """Indexer hook to modify the loan record dict before indexing"""
106
+
107
+ creation_date = datetime.fromisoformat(loan_dict["_created"]).date()
108
+ start_date = (
109
+ datetime.fromisoformat(loan_dict["start_date"]).date()
110
+ if loan_dict.get("start_date")
111
+ else None
112
+ )
113
+ end_date = (
114
+ datetime.fromisoformat(loan_dict["end_date"]).date()
115
+ if loan_dict.get("end_date")
116
+ else None
117
+ )
118
+
119
+ # Collect extra information relevant for stats
120
+ stats = {}
121
+
122
+ # Time ranges in days
123
+ if start_date and end_date:
124
+ loan_duration = (end_date - start_date).days
125
+ stats["loan_duration"] = loan_duration
126
+
127
+ if creation_date and start_date:
128
+ waiting_time = (start_date - creation_date).days
129
+ stats["waiting_time"] = waiting_time if waiting_time >= 0 else None
130
+
131
+ # Document availability during loan request
132
+ stat_events_index_name = "events-stats-loan-transitions"
133
+ if not current_search_client.indices.exists(index=stat_events_index_name):
134
+ raise LoanTransitionEventsIndexMissingError()
135
+
136
+ loan_pid = loan_dict["pid"]
137
+ search_body = {
138
+ "query": {
139
+ "bool": {
140
+ "must": [
141
+ {"term": {"trigger": "request"}},
142
+ {"term": {"pid_value": loan_pid}},
143
+ ],
144
+ }
145
+ },
146
+ }
147
+
148
+ search_result = current_search_client.search(
149
+ index=stat_events_index_name, body=search_body
150
+ )
151
+ hits = search_result["hits"]["hits"]
152
+ if len(hits) == 1:
153
+ request_transition_event = hits[0]["_source"]
154
+ available_items_during_request_count = request_transition_event[
155
+ "extra_data"
156
+ ]["available_items_during_request_count"]
157
+ stats["available_items_during_request"] = (
158
+ available_items_during_request_count > 0
159
+ )
160
+ elif len(hits) > 1:
161
+ raise ValueError(
162
+ f"Multiple request transition events for loan {loan_pid}."
163
+ "Expected zero or one."
164
+ )
165
+
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
169
+ if not "extra_data" in loan_dict:
170
+ loan_dict["extra_data"] = {}
171
+ loan_dict["extra_data"]["stats"] = stats
@@ -1,6 +1,6 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  #
3
- # Copyright (C) 2019 CERN.
3
+ # Copyright (C) 2019-2025 CERN.
4
4
  #
5
5
  # invenio-app-ils is free software; you can redistribute it and/or modify it
6
6
  # under the terms of the MIT License; see LICENSE file for more details.
@@ -1,6 +1,6 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  #
3
- # Copyright (C) 2019 CERN.
3
+ # Copyright (C) 2019-2025 CERN.
4
4
  #
5
5
  # invenio-app-ils is free software; you can redistribute it and/or modify it
6
6
  # under the terms of the MIT License; see LICENSE file for more details.
@@ -10,15 +10,25 @@
10
10
  from datetime import datetime
11
11
 
12
12
  from flask import Blueprint, current_app, request
13
+ from invenio_circulation.pidstore.pids import CIRCULATION_LOAN_PID_TYPE
14
+ from invenio_circulation.proxies import current_circulation
13
15
  from invenio_pidstore import current_pidstore
16
+ from invenio_records_rest.query import default_search_factory
14
17
  from invenio_records_rest.utils import obj_or_import_string
15
18
  from invenio_rest import ContentNegotiatedMethodView
19
+ from marshmallow.exceptions import ValidationError
16
20
 
17
21
  from invenio_app_ils.circulation.stats.api import fetch_most_loaned_documents
22
+ from invenio_app_ils.circulation.views import IlsCirculationResource
18
23
  from invenio_app_ils.config import RECORDS_REST_MAX_RESULT_WINDOW
19
24
  from invenio_app_ils.documents.api import DOCUMENT_PID_FETCHER, DOCUMENT_PID_TYPE
20
25
  from invenio_app_ils.errors import InvalidParameterError
21
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
+ )
22
32
 
23
33
 
24
34
  def create_most_loaned_documents_view(blueprint, app):
@@ -51,6 +61,13 @@ def create_circulation_stats_blueprint(app):
51
61
  blueprint = Blueprint("invenio_app_ils_circulation_stats", __name__, url_prefix="")
52
62
 
53
63
  create_most_loaned_documents_view(blueprint, app)
64
+ create_histogram_view(
65
+ blueprint,
66
+ app,
67
+ CIRCULATION_LOAN_PID_TYPE,
68
+ LoanHistogramResource,
69
+ "/circulation/loans",
70
+ )
54
71
 
55
72
  return blueprint
56
73
 
@@ -131,3 +148,42 @@ class MostLoanedDocumentsResource(ContentNegotiatedMethodView):
131
148
  pid_fetcher=current_pidstore.fetchers[DOCUMENT_PID_FETCHER],
132
149
  search_result=most_loaned_documents,
133
150
  )
151
+
152
+
153
+ class LoanHistogramResource(IlsCirculationResource):
154
+ """Loan stats resource."""
155
+
156
+ view_name = "loan_histogram"
157
+
158
+ @need_permissions("stats-loans")
159
+ def get(self, **kwargs):
160
+ """Get loan statistics."""
161
+
162
+ loan_cls = current_circulation.loan_record_cls
163
+ loan_date_fields = (
164
+ loan_cls.DATE_FIELDS + loan_cls.DATETIME_FIELDS + ["_created"]
165
+ )
166
+
167
+ schema = HistogramParamsSchema(loan_date_fields)
168
+ try:
169
+ parsed_args = schema.load(request.args.to_dict())
170
+ except ValidationError as e:
171
+ raise InvalidParameterError(description=e.messages) from e
172
+
173
+ # Construct search to allow for filtering with the q parameter
174
+ search_cls = current_circulation.loan_search_cls
175
+ search = search_cls()
176
+ search, _ = default_search_factory(self, search)
177
+
178
+ aggregation_buckets = get_record_statistics(
179
+ loan_date_fields,
180
+ search,
181
+ parsed_args["group_by"],
182
+ parsed_args["metrics"],
183
+ )
184
+
185
+ response = {
186
+ "buckets": aggregation_buckets,
187
+ }
188
+
189
+ return self.make_response(response, 200)
@@ -43,6 +43,7 @@ from invenio_app_ils.locations.indexer import LocationIndexer
43
43
  from invenio_app_ils.patrons.indexer import PatronIndexer
44
44
  from invenio_app_ils.series.indexer import SeriesIndexer
45
45
  from invenio_app_ils.stats.event_builders import ils_record_changed_event_builder
46
+ from invenio_app_ils.stats.processors import LoansEventsIndexer
46
47
  from invenio_app_ils.vocabularies.indexer import VocabularyIndexer
47
48
 
48
49
  from .document_requests.api import (
@@ -244,13 +245,21 @@ CELERY_BEAT_SCHEDULE = {
244
245
  "ils-record-changes-updates",
245
246
  "ils-record-changes-insertions",
246
247
  "ils-record-changes-deletions",
248
+ "loan-transitions",
247
249
  )
248
250
  ],
249
251
  },
250
252
  "stats-aggregate-events": {
251
253
  "task": "invenio_stats.tasks.aggregate_events",
252
254
  "schedule": timedelta(hours=3),
253
- "args": [("record-view-agg", "file-download-agg", "ils-record-changes-agg")],
255
+ "args": [
256
+ (
257
+ "record-view-agg",
258
+ "file-download-agg",
259
+ "ils-record-changes-agg",
260
+ "loan-transitions-agg",
261
+ )
262
+ ],
254
263
  },
255
264
  "clean_locations_past_closures_exceptions": {
256
265
  "task": (
@@ -983,6 +992,25 @@ STATS_EVENTS = {
983
992
  "suffix": "%Y",
984
993
  },
985
994
  },
995
+ # The following events are used to count loan state transitions.
996
+ # Additionally, some transitions, e.g. "request", are used to store extra data,
997
+ # like the number of available items when a loan is requested.
998
+ # The loan indexer then later queries those events and adds the information to the loan.
999
+ "loan-transitions": {
1000
+ "signal": "invenio_circulation.signals.loan_state_changed",
1001
+ "templates": "invenio_app_ils.stats.templates.events.loan_transitions",
1002
+ "event_builders": [
1003
+ "invenio_app_ils.stats.event_builders.loan_transition_event_builder",
1004
+ ],
1005
+ "cls": LoansEventsIndexer,
1006
+ "params": {
1007
+ "preprocessors": [
1008
+ "invenio_app_ils.stats.processors.add_loan_transition_unique_id",
1009
+ ],
1010
+ "double_click_window": 0,
1011
+ "suffix": "%Y",
1012
+ },
1013
+ },
986
1014
  }
987
1015
 
988
1016
  STATS_AGGREGATIONS = {
@@ -1042,6 +1070,19 @@ STATS_AGGREGATIONS = {
1042
1070
  query_modifiers=[],
1043
1071
  ),
1044
1072
  ),
1073
+ "loan-transitions-agg": dict(
1074
+ templates="invenio_app_ils.stats.templates.aggregations.loan_transitions",
1075
+ cls=StatAggregator,
1076
+ params=dict(
1077
+ event="loan-transitions",
1078
+ field="trigger",
1079
+ interval="day",
1080
+ index_interval="year",
1081
+ copy_fields=dict(),
1082
+ metric_fields=dict(),
1083
+ query_modifiers=[],
1084
+ ),
1085
+ ),
1045
1086
  }
1046
1087
 
1047
1088
  STATS_QUERIES = {
@@ -1116,6 +1157,18 @@ STATS_QUERIES = {
1116
1157
  aggregated_fields=["user_id"],
1117
1158
  ),
1118
1159
  ),
1160
+ "loan-transitions": dict(
1161
+ cls=DateHistogramQuery,
1162
+ permission_factory=backoffice_read_permission,
1163
+ params=dict(
1164
+ index="stats-loan-transitions",
1165
+ copy_fields=dict(),
1166
+ required_filters=dict(trigger="trigger"),
1167
+ metric_fields=dict(
1168
+ count=("sum", "count", {}),
1169
+ ),
1170
+ ),
1171
+ ),
1119
1172
  }
1120
1173
 
1121
1174
  # List of available vocabularies
@@ -1189,6 +1242,7 @@ DB_VERSIONING_USER_MODEL = None
1189
1242
 
1190
1243
  # Feature Toggles
1191
1244
  ILS_SELF_CHECKOUT_ENABLED = False
1245
+ ILS_EXTEND_INDICES_WITH_STATS_ENABLED = False
1192
1246
 
1193
1247
  # Use default frontpage
1194
1248
  THEME_FRONTPAGE = False