Integrated Library System based on Invenio
Official documentation (under development) is available at https://invenioils.docs.cern.ch
Integrated Library System (ILS) flavour of Invenio.
Home Page: https://invenioils.docs.cern.ch/
License: MIT License
Integrated Library System based on Invenio
Official documentation (under development) is available at https://invenioils.docs.cern.ch
Retrieve patron loans history using a REST call. The patron can see only her(his) own loans.
If you to /static/ the older jinja template are loaded. This should be removed.
Restructure api to separate concerns.
Investigate on how the librarian can create a loan possibly on a Document, to get the first available item when it is returned.
Setup email notifications for actions done on a loan
Implement loan details page as in the mockups.
Integrate aggregation and sorting in loans search page.
Patrons (librarians?) should not be able to create/request Loans on Items if the patron has currently a Loan for the same Item.
Update item schema with mandatory circulation_status and ensure that item is re-indexed on any loan action on this item.
Create a user session with at least userPid
and locationPid
after login in the React app.
This is needed to perform any loan
action.
Currently, they are hardcoded in the UserSession
reducer initial state, and they need to be replaced with real values.
An admin should be able easily to add banners on the website for general announcements.
Currently, this is done in videos: https://github.com/CERNDocumentServer/cds-videos/tree/cdslabs_qa/cds/modules/announcements
It should be moved to an Invenio module and the front-end app should be able to fetch this configuration and display the banner.
Starting from the requirements and the existing pages for circulation, create the initial mock-ups for the back-office UI using balsamiq. Some of the mockups have been done in the past (loan page, item page) so the rest can follow a similar approach.
Integrate React-SearchKit to enable search for:
It has been decided that Invenio config for now should be injected in the Jinja template and exposed to the JS app.
Handle _access on documents/items
depends on #71
A dashboard layout with proper routing to connect all our components.
GOAL
Librarian to be able to send email reminders to the patrons who exceeded the loan end date without returning the book.
System to automatically send the reminder if the book is not returned on time. Configurable variable of how frequent the celery task should be triggered.
Celery task should run every day and send reminders for loans which expire today or X days ago, where X is configurable.
Implementation
Implement rest endpoint with loanid to send the reminder to the current patron of the exceeded loan.
Implement celerybeat task
Use the celery task for sending the manual ones.
Create current pending loans box on item details page as in the mockup
Implement item details page to show all fields for an item.
Depends on #63
Integrate aggregation and sorting in items search page.
We need a high order component to wrap existing components that load data, and inject a loading indicator when they do so.
Front site:
PENDING
Back-office:
User privacy:
CERN CDS Overlay (to be moved):
During the implementation of resolvers several issues popped up.
JSONSCHEMAS_HOST
, it is a dummy domain and it is used from the resolvers to avoid url conflicts with rest api. $ref
properties don't work with relative urls and currently we don't have access to request
to get our current host.PID
being part of the schema
for create and update.Change has_librarian_permission
and has_admin_permission
to be based on egroup.
Currently we have some modules that are almost identical. Remove duplications and move shared logic and components under shared module.
To enable the correct Invenio configuration resolution with Flavor/Overlay, this PR has to merged and the released version of invenio-config
added in the setup.py
.
We need a proper mechanism to handle failures and errors for the whole application
We should remove any invenio module that involves UI and we are not using, such as invenio-records-ui
and invenio-search-ui
.
Loan details page
/library/circulation/loans/<loan_pid>
actions
on loanlogin_required
only. Add test.Librarians should be able to see an audit log of a Loan. Proposed solutions:
Currently, main and backoffice UI are split in 2 different React apps, so authorization is handled by backend.
We can merge together the 2 apps to simplify the development and enable several features.
This commit has been added to unblock a PR merge, but it should be reverted and fixed.
The issue is that every time an Item is indexed, it will resolve the $ref
current circulation status
and perform a search to find the corresponding loan. The search is done using IlsLoansSearch
which is restricting the patron_pid
and if you are not in a request context (like cli
) you have g.identity
that is None
.
A solution has to be implemented to search with permissions but index correctly Items.
(related #25)
Circulation api endpoint for item state returns loan object, if loaned. This should be filtered by permissions, as not every user has permissions to see all the field of a loan (for example, the patron_pid
and dates if the loan is on another user).
Tasks
invenio-circulation
(or in invenio-app-ils
?) for Loan
to show/hide/filter loan fields depending on the current logged in user, or None/fail if anonymousinvenio-app-ils
for Item
to use the Loan
serializer and show/hide/filter item/loan fields depending on the current logged in user, or None/fail if anonymousA declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.