User Management
GET /users
Display paginated list of all users. Blueprint:adminMethods:
GETTemplate:
admin/users.htmlLogin Required: Yes
Roles:
admin
Query Parameters
Page number for pagination
Response Data
Paginated user list (10 per page)
Form for creating new users
Form for bulk user import
Dictionary mapping user IDs to EditUserForm instances
app/admin/routes.py:15
GET /users/search
Search users by name or document ID. Blueprint:adminMethods:
GETTemplate:
admin/users.htmlLogin Required: Yes
Roles:
admin
Query Parameters
Search term (searches full_name and document_id)
Page number for pagination
Example
app/admin/routes.py:32
POST /users/create
Create a new user account. Blueprint:adminMethods:
POSTLogin Required: Yes
Roles:
admin
Form Fields
User’s full name
Unique document ID
Unique email address
Phone number
User role: ‘cliente’, ‘premium’, ‘bibliotecario’, ‘admin’
Academic program (required only if role=‘cliente’)
Initial password
Validation
- Document ID must be unique
- Email must be unique
- Password is hashed before storage
app/admin/routes.py:58
POST /users/edit/{id}
Update existing user information. Blueprint:adminMethods:
POSTLogin Required: Yes
Roles:
admin
URL Parameters
User ID to edit
Form Fields
Updated full name
Updated phone number
Updated role
Updated program (if role=‘cliente’)
Optional: New password (leave blank to keep current)
Example
app/admin/routes.py:93
POST /users/delete/{id}
Delete a user account. Blueprint:adminMethods:
POSTLogin Required: Yes
Roles:
admin
URL Parameters
User ID to delete
Business Rules
- Cannot delete your own account
- Cascading deletes handled by database relationships
app/admin/routes.py:122
Loan Management
GET /dashboard
Admin dashboard showing loan statistics and filtered loans. Blueprint:adminMethods:
GETTemplate:
admin/dashboard.htmlLogin Required: Yes
Roles:
bibliotecario, admin
Query Parameters
Filter loans by status: ‘pendiente’, ‘activo’, ‘devuelto’, ‘atrasado’
Response Data
Filtered loans ordered by request_date (descending)
Counts for each loan status:
- pending: Count of pending loans
- activo: Count of active loans
- returned: Count of returned loans
- atrasado: Count of overdue loans
Top 5 most requested items with loan counts
Example
app/admin/routes.py:134
POST /approve/{id}
Approve a pending loan request. Blueprint:adminMethods:
POSTLogin Required: Yes
Roles:
bibliotecario
URL Parameters
Loan ID to approve
Business Logic
- Uses
LoanService.approve_loan() - Only pending loans can be approved
- Sets status to ‘activo’
- Records approval timestamp
Example
app/admin/routes.py:162
POST /loan/{loan_id}/return
Process the return of a loaned item. Blueprint:adminMethods:
POSTLogin Required: Yes
Roles:
admin, bibliotecario
URL Parameters
Loan ID to process return for
Business Logic
- Freezes penalty amount for historical record
- Sets status to ‘devuelto’
- Records return timestamp
- Releases instance back to inventory using
InventoryService.release_instance() - Commits transaction or rolls back on error
Example
app/admin/routes.py:174
POST /reject/{id}
Reject a pending loan request. Blueprint:adminMethods:
POSTLogin Required: Yes
Roles:
bibliotecario
URL Parameters
Loan ID to reject
Business Logic
- Only pending loans can be rejected
- Sets status to ‘rechazado’
- Releases reserved instance back to ‘disponible’
- Adds rejection observation
Example
app/admin/routes.py:197
Catalog Management
GET/POST /catalog
Manage catalog items (titles/names of items). Blueprint:adminMethods:
GET, POSTTemplate:
admin/catalog.htmlLogin Required: Yes
Roles:
bibliotecario, admin
Query Parameters
Search term for title_or_name and category
Form Fields (POST)
Item title or name
Item category: ‘computo’, ‘libro’, ‘accesorio’, etc.
Author (for books) or brand (for equipment)
Example
app/admin/routes.py:216
POST /catalog/delete/{id}
Delete a catalog item. Blueprint:adminMethods:
POSTLogin Required: Yes
Roles:
bibliotecario, admin
URL Parameters
Catalog ID to delete
Business Rules
- Cannot delete if physical instances exist
- Check
catalog.total_count > 0
app/admin/routes.py:244
Instance Management
GET/POST /catalog/{catalog_id}/instances
Manage physical instances of a catalog item. Blueprint:adminMethods:
GET, POSTTemplate:
admin/instances.htmlLogin Required: Yes
Roles:
bibliotecario, admin
URL Parameters
Catalog ID to manage instances for
Form Fields (POST)
Serial number or unique identifier (must be unique)
Physical condition: ‘nuevo’, ‘bueno’, ‘regular’, ‘malo’
Status: ‘disponible’, ‘prestado’, ‘mantenimiento’, ‘perdido’
Example
app/admin/routes.py:256
POST /instance/update_status/{instance_id}
Update the status of a physical instance. Blueprint:adminMethods:
POSTLogin Required: Yes
Roles:
bibliotecario, admin
URL Parameters
Instance ID to update
Form Fields
New status: ‘disponible’, ‘mantenimiento’, ‘perdido’
Allowed Status Values
disponible: Item is available for loanmantenimiento: Item is under maintenanceperdido: Item is lost
app/admin/routes.py:296
POST /instance/delete/{instance_id}
Delete a physical instance. Blueprint:adminMethods:
POSTLogin Required: Yes
Roles:
bibliotecario, admin
URL Parameters
Instance ID to delete
Business Rules
- Cannot delete if instance has active loans (pendiente, activo, atrasado)
- Checks using
instance.loans.filter()
Example
app/admin/routes.py:322