Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in
Toggle navigation
P
perpus
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Fahmi
perpus
Commits
6fe4d040
Commit
6fe4d040
authored
Jan 11, 2024
by
Fahmi
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
commit ke 3
parent
4261cddf
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
311 additions
and
198 deletions
+311
-198
serializers.py
api/serializers.py
+12
-1
views.py
api/views.py
+2
-19
views.py
library/views.py
+297
-178
No files found.
api/serializers.py
View file @
6fe4d040
...
@@ -2,6 +2,7 @@ from library.models import *
...
@@ -2,6 +2,7 @@ from library.models import *
from
.models
import
*
from
.models
import
*
from
rest_framework
import
serializers
from
rest_framework
import
serializers
from
django.contrib.auth
import
authenticate
,
get_user_model
from
django.contrib.auth
import
authenticate
,
get_user_model
from
datetime
import
date
class
UserLoginSerializer
(
serializers
.
Serializer
):
class
UserLoginSerializer
(
serializers
.
Serializer
):
username
=
serializers
.
CharField
()
username
=
serializers
.
CharField
()
...
@@ -99,11 +100,21 @@ class BookLoanSerializer(serializers.ModelSerializer):
...
@@ -99,11 +100,21 @@ class BookLoanSerializer(serializers.ModelSerializer):
fields
=
'__all__'
fields
=
'__all__'
class
OverdueLoanSerializer
(
serializers
.
ModelSerializer
):
class
OverdueLoanSerializer
(
serializers
.
ModelSerializer
):
days_over
=
serializers
.
SerializerMethodField
()
class
Meta
:
class
Meta
:
model
=
BookLoan
model
=
BookLoan
fields
=
'__all__'
fields
=
'__all__'
def
get_days_over
(
self
,
obj
):
return
(
date
.
today
()
-
obj
.
due_date
)
.
days
class
NearOutstandingLoanSerializer
(
serializers
.
ModelSerializer
):
class
NearOutstandingLoanSerializer
(
serializers
.
ModelSerializer
):
days_left
=
serializers
.
SerializerMethodField
()
class
Meta
:
class
Meta
:
model
=
BookLoan
model
=
BookLoan
fields
=
'__all__'
fields
=
'__all__'
def
get_days_left
(
self
,
obj
):
return
(
obj
.
due_date
-
date
.
today
())
.
days
\ No newline at end of file
api/views.py
View file @
6fe4d040
...
@@ -28,29 +28,12 @@ class MyPageNumberPagination(PageNumberPagination):
...
@@ -28,29 +28,12 @@ class MyPageNumberPagination(PageNumberPagination):
#regist librarian
#regist librarian
class
LibrarianRegistrationAPIView
(
generics
.
CreateAPIView
):
class
LibrarianRegistrationAPIView
(
generics
.
CreateAPIView
):
queryset
=
CustomUser
.
objects
.
all
()
queryset
=
CustomUser
.
objects
.
all
()
serializer_class
=
Member
RegistrationSerializer
serializer_class
=
Librarian
RegistrationSerializer
#regist member
#regist member
class
MemberRegistrationAPIView
(
generics
.
ListCreateAPIView
):
class
MemberRegistrationAPIView
(
generics
.
ListCreateAPIView
):
queryset
=
CustomUser
.
objects
.
all
()
queryset
=
CustomUser
.
objects
.
all
()
serializer_class
=
MemberRegistrationSerializer
serializer_class
=
MemberRegistrationSerializer
# def create(self, request, *args, **kwargs):
# serializer = self.get_serializer(data=request.data)
# serializer.is_valid(raise_exception=True)
# user = serializer.save(is_member=True)
# login(request, user)
# response_data = {
# 'message': 'Member registered successfully',
# 'user_id': user.id,
# 'username': user.username,
# 'email': user.email,
# 'is_member': user.is_member,
# }
# return Response(response_data, status=status.HTTP_201_CREATED)
#login member
#login member
class
MemberLoginView
(
APIView
):
class
MemberLoginView
(
APIView
):
def
post
(
self
,
request
,
*
args
,
**
kwargs
):
def
post
(
self
,
request
,
*
args
,
**
kwargs
):
...
@@ -273,7 +256,7 @@ class NearOutstandingLoansAPIView(APIView):
...
@@ -273,7 +256,7 @@ class NearOutstandingLoansAPIView(APIView):
def
get
(
self
,
request
,
format
=
None
):
def
get
(
self
,
request
,
format
=
None
):
tomorrow
=
date
.
today
()
+
timedelta
(
days
=
1
)
tomorrow
=
date
.
today
()
+
timedelta
(
days
=
1
)
near_outstanding_loans
=
tomorrow
+
timedelta
(
days
=
2
)
near_outstanding_loans
=
tomorrow
+
timedelta
(
days
=
2
)
near_date
=
BookLoan
.
objects
.
filter
(
due_date__gte
=
tomorrow
,
due_date__lte
=
near_outstanding_loans
)
near_date
=
BookLoan
.
objects
.
filter
(
due_date__gte
=
tomorrow
,
due_date__lte
=
near_outstanding_loans
,
is_returned
=
False
)
near_outstanding_loans
=
near_date
.
annotate
(
near_outstanding_loans
=
near_date
.
annotate
(
time_difference
=
ExpressionWrapper
(
time_difference
=
ExpressionWrapper
(
...
...
library/views.py
View file @
6fe4d040
from
django.conf
import
settings
from
django.conf
import
settings
from
django.forms.models
import
BaseModelForm
from
django.shortcuts
import
render
,
redirect
,
get_object_or_404
from
django.shortcuts
import
render
,
redirect
,
get_object_or_404
from
django.contrib.auth
import
authenticate
,
login
from
django.contrib.auth
import
authenticate
,
login
,
update_session_auth_hash
from
django.contrib.auth.views
import
LogoutView
from
django.contrib.auth.views
import
LogoutView
from
django.contrib.auth.decorators
import
login_required
from
django.contrib.auth.decorators
import
login_required
from
django.contrib.auth.models
import
User
from
django.utils.decorators
import
method_decorator
# from django.contrib.auth.models import CustomUser
from
datetime
import
date
,
timedelta
from
datetime
import
date
,
timedelta
from
django.db.models
import
F
,
ExpressionWrapper
,
fields
from
django.db.models
import
F
,
ExpressionWrapper
,
fields
from
django.urls
import
reverse_lazy
from
django.urls
import
reverse_lazy
from
.forms
import
*
from
.forms
import
*
from
.models
import
Book
,
Member
,
BookLoan
,
Librarian
,
LoginHistory
from
.models
import
*
from
django.views.generic
import
*
from
django.views.generic
import
*
from
.mixins
import
LibrarianRequiredMixin
from
rest_framework.pagination
import
PageNumberPagination
from
django.contrib.auth.forms
import
AuthenticationForm
from
django.contrib
import
messages
from
django.contrib.auth.decorators
import
permission_required
from
.decorators
import
librarian_required
#pagination
class
MyPageNumberPagination
(
PageNumberPagination
):
page_size
=
5
page_size_query_param
=
'page_size'
# Create your views here.
# Create your views here.
def
homepage
(
request
):
def
homepage
(
request
):
return
render
(
request
,
'homepage.html'
)
return
render
(
request
,
'homepage.html'
)
def
login_view
(
request
):
#librarian Regist
login_form
=
LoginForm
()
def
librarian_registration
(
request
):
if
request
.
method
==
'POST'
:
form
=
LibrarianRegistrationForm
(
request
.
POST
)
if
form
.
is_valid
():
user
=
form
.
save
(
commit
=
False
)
user
.
set_password
(
form
.
cleaned_data
[
'password1'
])
user
.
save
()
return
redirect
(
'login'
)
# Redirect to librarian dashboard or another page
else
:
form
=
LibrarianRegistrationForm
()
return
render
(
request
,
'librarian_registration.html'
,
{
'form'
:
form
})
#Login
def
Login
(
request
):
if
request
.
method
==
'POST'
:
if
request
.
method
==
'POST'
:
login_form
=
LoginForm
(
request
.
POST
)
form
=
CustomAuthenticationForm
(
request
,
data
=
request
.
POST
)
if
login_
form
.
is_valid
():
if
form
.
is_valid
():
username
=
login_
form
.
cleaned_data
[
'username'
]
username
=
form
.
cleaned_data
[
'username'
]
password
=
login_
form
.
cleaned_data
[
'password'
]
password
=
form
.
cleaned_data
[
'password'
]
user
=
authenticate
(
request
,
username
=
username
,
password
=
password
)
user
=
authenticate
(
request
,
username
=
username
,
password
=
password
)
if
user
is
not
None
and
user
.
is_active
:
if
user
is
not
None
:
login
(
request
,
user
)
login
(
request
,
user
)
return
redirect
(
'dashboard'
)
return
redirect
(
'dashboard'
)
else
:
else
:
login_form
.
add_error
(
None
,
'Invalid username or password'
)
form
=
AuthenticationForm
(
)
return
render
(
request
,
'login.html'
,
{
'
login_form'
:
login_
form
})
return
render
(
request
,
'login.html'
,
{
'
form'
:
form
})
def
register_view
(
request
):
#member regist
def
member_registration
(
request
):
if
request
.
method
==
'POST'
:
if
request
.
method
==
'POST'
:
user_form
=
userCreat
(
request
.
POST
)
form
=
MemberRegistrationForm
(
request
.
POST
)
librarian_form
=
LibrarianForm
(
request
.
POST
)
if
form
.
is_valid
():
user
=
form
.
save
(
commit
=
False
)
if
user_form
.
is_valid
()
and
librarian_form
.
is_valid
():
user
.
is_member
=
True
user
=
user_form
.
save
()
user
.
save
()
librarian
=
librarian_form
.
save
(
commit
=
False
)
return
redirect
(
'login'
)
# Redirect to member dashboard or another page
librarian
.
user
=
user
librarian
.
save
()
return
redirect
(
'login'
)
else
:
else
:
user_form
=
UserCreationForm
()
form
=
MemberRegistrationForm
()
librarian_form
=
LibrarianForm
()
context
=
{
'user_form'
:
user_form
,
'librarian_form'
:
librarian_form
}
return
render
(
request
,
'
register.html'
,
context
)
return
render
(
request
,
'
member_registration.html'
,
{
'form'
:
form
}
)
@
login_required
@
login_required
def
dashboard
(
request
):
def
dashboard
(
request
):
return
render
(
request
,
'dashboard.html'
)
return
render
(
request
,
'dashboard.html'
)
@
login_required
@
librarian_required
class
CustomLogoutView
(
LogoutView
):
next_page
=
'homepage'
@
login_required
def
book_list
(
request
):
books
=
Book
.
objects
.
all
()
return
render
(
request
,
'book_list.html'
,
{
'books'
:
books
})
@
login_required
def
book_new
(
request
):
if
request
.
method
==
'POST'
:
form
=
BookForm
(
request
.
POST
)
if
form
.
is_valid
():
form
.
save
()
return
redirect
(
'book_list'
)
else
:
form
=
BookForm
()
return
render
(
request
,
'book_new.html'
,
{
'form'
:
form
})
@
login_required
def
book_update
(
request
,
id
):
context
=
{}
book
=
get_object_or_404
(
Book
,
id
=
id
)
form
=
BookForm
(
instance
=
book
)
context
[
'book'
]
=
book
if
request
.
method
==
'POST'
:
form
=
BookForm
(
request
.
POST
,
instance
=
book
)
if
form
.
is_valid
():
form
.
save
()
return
redirect
(
'book_list'
)
else
:
form
=
BookForm
(
instance
=
book
)
context
[
'form'
]
=
form
return
render
(
request
,
'book_update.html'
,
context
)
@
login_required
def
book_delete
(
request
,
id
):
book
=
get_object_or_404
(
Book
,
id
=
id
)
book
.
delete
()
return
redirect
(
'book_list'
)
@
login_required
def
member_list
(
request
):
def
member_list
(
request
):
members
=
Member
.
objects
.
all
()
members
=
Member
.
objects
.
all
()
return
render
(
request
,
'member_list.html'
,
{
'members'
:
members
})
return
render
(
request
,
'member_list.html'
,
{
'members'
:
members
})
@
l
ogi
n_required
@
l
ibraria
n_required
def
member_new
(
request
):
def
member_new
(
request
):
if
request
.
method
==
'POST'
:
if
request
.
method
==
'POST'
:
form
=
MemberForm
(
request
.
POST
)
form
=
MemberForm
(
request
.
POST
)
...
@@ -121,7 +95,7 @@ def member_new(request):
...
@@ -121,7 +95,7 @@ def member_new(request):
form
=
MemberForm
()
form
=
MemberForm
()
return
render
(
request
,
'member_new.html'
,
{
'form'
:
form
})
return
render
(
request
,
'member_new.html'
,
{
'form'
:
form
})
@
l
ogi
n_required
@
l
ibraria
n_required
def
edit_member
(
request
,
id
):
def
edit_member
(
request
,
id
):
context
=
{}
context
=
{}
member
=
get_object_or_404
(
Member
,
id
=
id
)
member
=
get_object_or_404
(
Member
,
id
=
id
)
...
@@ -139,18 +113,64 @@ def edit_member(request, id):
...
@@ -139,18 +113,64 @@ def edit_member(request, id):
context
[
'form'
]
=
form
context
[
'form'
]
=
form
return
render
(
request
,
'member_update.html'
,
context
)
return
render
(
request
,
'member_update.html'
,
context
)
@
l
ogi
n_required
@
l
ibraria
n_required
def
delete_member
(
request
,
id
):
def
delete_member
(
request
,
id
):
member
=
get_object_or_404
(
Member
,
id
=
id
)
member
=
get_object_or_404
(
Member
,
id
=
id
)
member
.
delete
()
member
.
delete
()
return
redirect
(
'member_list'
)
return
redirect
(
'member_list'
)
@
login_required
@
librarian_required
def
librarian_list
(
request
):
librarian
=
Librarian
.
objects
.
all
()
return
render
(
request
,
'librarian_list.html'
,
{
'librarian'
:
librarian
})
@
librarian_required
def
librarian_new
(
request
):
if
request
.
method
==
'POST'
:
form
=
LibrarianForm
(
request
.
POST
)
if
form
.
is_valid
():
form
.
save
()
return
redirect
(
'librarian_list'
)
else
:
form
=
LibrarianForm
()
return
render
(
request
,
'librarian_new.html'
,
{
'form'
:
form
})
@
librarian_required
def
librarian_update
(
request
,
id
):
context
=
{}
librarian
=
get_object_or_404
(
Librarian
,
id
=
id
)
form
=
LibrarianForm
(
instance
=
librarian
)
context
[
'librarian'
]
=
librarian
if
request
.
method
==
'POST'
:
form
=
LibrarianForm
(
request
.
POST
,
instance
=
librarian
)
if
form
.
is_valid
():
form
.
save
()
return
redirect
(
librarian_list
)
else
:
form
=
LibrarianForm
(
instance
=
librarian
)
context
[
'form'
]
=
form
return
render
(
request
,
'librarian_update.html'
,
context
)
@
librarian_required
def
librarian_delete
(
request
,
pk
):
librarian
=
Librarian
.
objects
.
get
(
pk
=
pk
)
librarian
.
user
.
delete
()
librarian
.
delete
()
return
redirect
(
'librarian_list'
)
@
librarian_required
def
librarian_login_history
(
request
):
login_history
=
LoginHistory
.
objects
.
all
()
return
render
(
request
,
'librarian_login_history.html'
,
{
'login_history'
:
login_history
})
@
librarian_required
def
book_loan_list
(
request
):
def
book_loan_list
(
request
):
book_loan
=
BookLoan
.
objects
.
all
()
book_loan
=
BookLoan
.
objects
.
all
()
return
render
(
request
,
'book_loan_list.html'
,
{
'book_loan'
:
book_loan
})
return
render
(
request
,
'book_loan_list.html'
,
{
'book_loan'
:
book_loan
})
@
l
ogi
n_required
@
l
ibraria
n_required
def
book_loan_new
(
request
):
def
book_loan_new
(
request
):
members
=
Member
.
objects
.
all
()
members
=
Member
.
objects
.
all
()
books
=
Book
.
objects
.
all
()
books
=
Book
.
objects
.
all
()
...
@@ -163,7 +183,7 @@ def book_loan_new(request):
...
@@ -163,7 +183,7 @@ def book_loan_new(request):
form
=
BookLoanForm
()
form
=
BookLoanForm
()
return
render
(
request
,
'book_loan_new.html'
,
{
'form'
:
form
,
'members'
:
members
,
'books'
:
books
})
return
render
(
request
,
'book_loan_new.html'
,
{
'form'
:
form
,
'members'
:
members
,
'books'
:
books
})
@
l
ogi
n_required
@
l
ibraria
n_required
def
book_loan_update
(
request
,
id
):
def
book_loan_update
(
request
,
id
):
context
=
{}
context
=
{}
...
@@ -183,13 +203,30 @@ def book_loan_update(request, id):
...
@@ -183,13 +203,30 @@ def book_loan_update(request, id):
return
render
(
request
,
'book_loan_update.html'
,
context
)
return
render
(
request
,
'book_loan_update.html'
,
context
)
@
l
ogi
n_required
@
l
ibraria
n_required
def
book_loan_delete
(
request
,
id
):
def
book_loan_delete
(
request
,
id
):
book_loan
=
get_object_or_404
(
BookLoan
,
id
=
id
)
book_loan
=
get_object_or_404
(
BookLoan
,
id
=
id
)
book_loan
.
delete
()
book_loan
.
delete
()
return
redirect
(
'book_loan_list'
)
return
redirect
(
'book_loan_list'
)
@
login_required
@
librarian_required
def
near_outstanding_loans
(
request
):
tomorow
=
date
.
today
()
+
timedelta
(
days
=
1
)
near_outstanding_loans
=
tomorow
+
timedelta
(
days
=
2
)
near_date
=
BookLoan
.
objects
.
filter
(
due_date__gte
=
tomorow
,
due_date__lte
=
near_outstanding_loans
,
is_returned
=
False
)
near_outstanding_loans
=
near_date
.
annotate
(
time_difference
=
ExpressionWrapper
(
F
(
'due_date'
)
-
date
.
today
(),
output_field
=
fields
.
DurationField
()
)
)
context
=
{
'near_outstanding_loan'
:
near_outstanding_loans
}
return
render
(
request
,
'near_outstanding_loans.html'
,
context
)
@
librarian_required
def
overdue_loans
(
request
):
def
overdue_loans
(
request
):
overdue_loans
=
BookLoan
.
objects
.
filter
(
due_date__lte
=
date
.
today
())
overdue_loans
=
BookLoan
.
objects
.
filter
(
due_date__lte
=
date
.
today
())
...
@@ -200,125 +237,207 @@ def overdue_loans(request):
...
@@ -200,125 +237,207 @@ def overdue_loans(request):
)
)
)
.
exclude
(
is_returned
=
True
)
)
.
exclude
(
is_returned
=
True
)
for
loan
in
over_due
:
loan
.
dead
=
abs
(
loan
.
dead
.
days
)
context
=
{
context
=
{
'over_due'
:
over_due
,
'over_due'
:
over_due
,
}
}
return
render
(
request
,
'overdue_loans.html'
,
context
)
return
render
(
request
,
'overdue_loans.html'
,
context
)
@
login_required
@
method_decorator
(
login_required
,
name
=
'dispatch'
)
def
near_outstanding_loans
(
request
):
class
BookList
(
ListView
):
tomorow
=
date
.
today
()
+
timedelta
(
days
=
1
)
model
=
Book
near_outstanding_loans
=
tomorow
+
timedelta
(
days
=
2
)
template_name
=
"book_list.html"
near_date
=
BookLoan
.
objects
.
filter
(
due_date__gte
=
tomorow
,
due_date__lte
=
near_outstanding_loans
)
context_object_name
=
'books'
pagination_class
=
MyPageNumberPagination
near_outstanding_loans
=
near_date
.
annotate
(
@
method_decorator
(
login_required
,
name
=
'dispatch'
)
time_difference
=
ExpressionWrapper
(
class
BookDetail
(
DetailView
):
F
(
'due_date'
)
-
date
.
today
(),
model
=
Book
output_field
=
fields
.
DurationField
()
template_name
=
'book_detail.html'
)
)
context
=
{
'near_outstanding_loan'
:
near_outstanding_loans
}
@
method_decorator
(
librarian_required
,
name
=
'dispatch'
)
class
BookCreateView
(
View
):
template_name
=
'book_new.html'
return
render
(
request
,
'near_outstanding_loans.html'
,
context
)
# get category list
def
get
(
self
,
request
):
category
=
Category
.
objects
.
all
()
return
render
(
request
,
self
.
template_name
,
{
'category'
:
category
})
@
login_required
#form new book
def
librarian_list
(
request
):
def
post
(
self
,
request
):
librarian
=
Librarian
.
objects
.
all
()
form
=
BookForm
(
request
.
POST
,
request
.
FILES
)
return
render
(
request
,
'librarian_list.html'
,
{
'librarian'
:
librarian
})
form
.
save
()
return
redirect
(
'book-list'
)
@
method_decorator
(
login_required
,
name
=
'dispatch'
)
class
BookUpdateView
(
LibrarianRequiredMixin
,
UpdateView
):
template_name
=
'book_update.html'
#get
def
get
(
self
,
request
,
pk
):
book
=
get_object_or_404
(
Book
,
pk
=
pk
)
category
=
Category
.
objects
.
all
()
return
render
(
request
,
self
.
template_name
,
{
'book'
:
book
,
'category'
:
category
})
# form update book
def
post
(
self
,
request
,
pk
):
book
=
get_object_or_404
(
Book
,
pk
=
pk
)
form
=
BookForm
(
request
.
POST
,
request
.
FILES
,
instance
=
book
)
form
.
save
()
return
redirect
(
'book-list'
)
@
l
ogi
n_required
@
l
ibraria
n_required
def
librarian_new
(
request
):
def
book_delete
(
request
,
id
):
if
request
.
method
==
'POST'
:
book
=
get_object_or_404
(
Book
,
id
=
id
)
user_form
=
userCreat
(
request
.
POST
)
book
.
delete
(
)
librarian_form
=
LibrarianForm
(
request
.
POST
)
return
redirect
(
'book-list'
)
if
user_form
.
is_valid
()
and
librarian_form
.
is_valid
():
@
method_decorator
(
login_required
,
name
=
'dispatch'
)
user
=
user_form
.
save
()
class
BookDeleteView
(
LibrarianRequiredMixin
,
DeleteView
):
librarian
=
librarian_form
.
save
(
commit
=
False
)
model
=
Book
librarian
.
user
=
user
template_name
=
'book_delete.html'
librarian
.
save
(
)
success_url
=
reverse_lazy
(
'book-list'
)
return
redirect
(
'librarian_list'
)
@
method_decorator
(
login_required
,
name
=
'dispatch'
)
class
CategoryListView
(
ListView
):
model
=
Category
template_name
=
'category_list.html'
context_object_name
=
'categories'
else
:
@
method_decorator
(
login_required
,
name
=
'dispatch'
)
user_form
=
UserCreationForm
()
class
CategoryCreateView
(
LibrarianRequiredMixin
,
CreateView
):
librarian_form
=
LibrarianForm
()
model
=
Category
form_class
=
CategoryForm
template_name
=
'category_new.html'
success_url
=
reverse_lazy
(
'category_list'
)
# Adjust the success URL as needed
def
form_valid
(
self
,
form
):
form
.
instance
.
owner
=
self
.
request
.
user
return
super
()
.
form_valid
(
form
)
@
method_decorator
(
login_required
,
name
=
'dispatch'
)
class
CategoryUpdateView
(
LibrarianRequiredMixin
,
UpdateView
):
model
=
Category
form_class
=
CategoryForm
template_name
=
'category_update.html'
context_object_name
=
'categories'
success_url
=
reverse_lazy
(
'category_list'
)
# Adjust the success URL as needed
context
=
{
'user_form'
:
user_form
,
'librarian_form'
:
librarian_form
}
def
form_valid
(
self
,
form
):
form
.
instance
.
owner
=
self
.
request
.
user
return
super
()
.
form_valid
(
form
)
return
render
(
request
,
'librarian_new.html'
,
context
)
@
login_required
def
userchange_password
(
request
):
if
request
.
method
==
'POST'
:
old_password
=
request
.
POST
.
get
(
'old_password'
)
new_password
=
request
.
POST
.
get
(
'new_password'
)
confirm_password
=
request
.
POST
.
get
(
'confirm_password'
)
# @login_required
# Ensure that new password and confirm password match
# def librarian_update(request, pk):
if
new_password
!=
confirm_password
:
# context = {}
messages
.
error
(
request
,
'New password and confirm password do not match.'
)
# librarian = Librarian.objects.get(pk=pk)
return
render
(
request
,
'update_password.html'
)
# context['librarian'] = librarian
# if request.method == 'POST':
# Authenticate the user
# form = LibrarianForm(request.POST, instance=librarian)
user
=
authenticate
(
request
,
username
=
request
.
user
.
username
,
password
=
old_password
)
# if form.is_valid():
# form.save()
# return redirect('librarian_list')
# else:
# form = LibrarianForm(instance=librarian)
# context['form'] = form
if
user
is
not
None
:
# Set the new password
user
.
set_password
(
new_password
)
user
.
save
()
# return render(request, 'librarian_update.html', context
)
update_session_auth_hash
(
request
,
user
)
def
librarian_update
(
request
,
pk
):
messages
.
success
(
request
,
'Password changed successfully.'
)
return
redirect
(
'updatepassword_success'
)
# Redirect to the user's profile or another page
else
:
messages
.
error
(
request
,
'Incorrect old password. Please try again.'
)
librarian
=
get_object_or_404
(
librarian
,
pk
=
pk
)
librarian_form
=
LibrarianUpdateForm
(
instance
=
librarian
)
if
request
.
method
==
'POST'
:
return
render
(
request
,
'update_password.html'
)
user_form
=
LibrarianUpdateForm
(
request
.
POST
,
instance
=
librarian
.
user
)
librarian_form
=
LibrarianUpdateForm
(
request
.
POST
,
instance
=
librarian
)
if
user_form
.
is_valid
()
and
librarian_form
.
is_valid
():
def
updatepassword_success
(
request
):
user_form
.
save
()
return
render
(
request
,
'updatepassword_success.html'
)
librarian_form
.
save
()
return
redirect
(
'librarian_list'
)
@
login_required
def
update_usermember
(
request
):
if
request
.
method
==
'POST'
:
form
=
MemberProfileUpdateForm
(
request
.
POST
,
instance
=
request
.
user
)
if
form
.
is_valid
():
form
.
save
()
messages
.
success
(
request
,
'Your Profile has been Update!'
)
return
redirect
(
'updateuser_success'
)
else
:
else
:
user_form
=
LibrarianUpdateForm
(
instance
=
librarian
.
user
)
form
=
MemberProfileUpdateForm
(
instance
=
request
.
user
)
context
=
{
'user_form'
:
user_form
,
'librarian_form'
:
librarian_form
,
'librarian'
:
librarian
}
return
render
(
request
,
'librarian_update.html'
,
context
)
return
render
(
request
,
'update_usermember.html'
,
{
'form'
:
form
}
)
@
login_required
@
login_required
def
librarian_delete
(
request
,
pk
):
def
update_userlibrarian
(
request
):
librarian
=
Librarian
.
objects
.
get
(
pk
=
pk
)
librarian
.
user
.
delete
()
librarian
.
delete
()
return
redirect
(
'librarian_list'
)
@
login_required
if
request
.
method
==
'POST'
:
def
librarian_login_history
(
request
):
form
=
LibrarianProfileUpdateForm
(
request
.
POST
,
instance
=
request
.
user
)
login_history
=
LoginHistory
.
objects
.
all
()
if
form
.
is_valid
():
return
render
(
request
,
'librarian_login_history.html'
,
{
'login_history'
:
login_history
})
form
.
save
()
messages
.
success
(
request
,
'Your Profile has been Update!'
)
return
redirect
(
'updateuser_success'
)
else
:
form
=
LibrarianProfileUpdateForm
(
instance
=
request
.
user
)
return
render
(
request
,
'update_userlibrarian.html'
,
{
'form'
:
form
})
class
BookList
(
ListView
):
def
updateuser_success
(
request
):
model
=
Book
return
render
(
request
,
'updateuser_success.html'
)
template_name
=
"book_list.html"
context_object_name
=
'books'
class
BookCreateView
(
CreateView
):
def
unauthorized
(
request
):
model
=
Book
return
render
(
request
,
'unauthorized.html'
)
form_class
=
BookForm
template_name
=
'book_new.html'
success_url
=
reverse_lazy
(
'book_list'
)
# Adjust the success URL as needed
def
form_valid
(
self
,
form
):
@
method_decorator
(
login_required
,
name
=
'dispatch'
)
form
.
instance
.
owner
=
self
.
request
.
user
class
BookLoanList
(
ListView
):
return
super
()
.
form_valid
(
form
)
model
=
BookLoan
template_name
=
'book_loan_list.html'
context_object_name
=
'bookloan'
class
CategoryListView
(
ListView
):
@
method_decorator
(
librarian_required
,
name
=
'dispatch'
)
model
=
Category
class
BookLoanCreateView
(
View
):
template_name
=
'category_list.html'
template_name
=
'book_loan_new.html'
context_object_name
=
'categories'
\ No newline at end of file
# get book list
def
get
(
self
,
request
):
book
=
Book
.
objects
.
all
()
return
render
(
request
,
self
.
template_name
,
{
'book'
:
book
})
# get member list
def
get
(
self
,
request
):
member
=
Member
.
objects
.
all
()
return
render
(
request
,
self
.
template_name
,
{
'member'
:
member
})
#form new book
def
post
(
self
,
request
):
form
=
BookLoanForm
(
request
.
POST
,
request
.
FILES
)
form
.
save
()
return
redirect
(
'bookloan-list'
)
@
method_decorator
(
login_required
,
name
=
'dispatch'
)
class
BookLoanUpdateView
(
LibrarianRequiredMixin
,
UpdateView
):
template_name
=
'book_loan_update.html'
#get
def
get
(
self
,
request
,
pk
):
bookloan
=
get_object_or_404
(
BookLoan
,
pk
=
pk
)
book
=
Book
.
objects
.
all
()
member
=
Member
.
objects
.
all
()
return
render
(
request
,
self
.
template_name
,
{
'bookloan'
:
bookloan
,
'book'
:
book
,
'member'
:
member
})
# form update book
def
post
(
self
,
request
,
pk
):
book
=
get_object_or_404
(
Book
,
pk
=
pk
)
form
=
BookForm
(
request
.
POST
,
request
.
FILES
,
instance
=
book
)
form
.
save
()
return
redirect
(
'bookloan-update'
)
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment