Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in
Toggle navigation
L
library-app-django
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
Ilham Maulana
library-app-django
Commits
ffa82600
Commit
ffa82600
authored
Jul 09, 2024
by
impfundev
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix: shifting book loan from function base view to class based view
parent
5b686a9e
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
87 additions
and
163 deletions
+87
-163
forms.py
book_loans/forms.py
+24
-1
0006_rename_librarians_bookloans_librarian.py
.../migrations/0006_rename_librarians_bookloans_librarian.py
+18
-0
urls.py
book_loans/urls.py
+10
-5
views.py
book_loans/views.py
+35
-157
No files found.
book_loans/forms.py
View file @
ffa82600
...
...
@@ -5,8 +5,31 @@ from book_loans.models import BookLoans
class
BookLoanForm
(
forms
.
ModelForm
):
class
Meta
:
model
=
BookLoans
fields
=
[
"loan_date"
,
"due_date"
,
"return_date"
,
"notes"
]
fields
=
[
"book"
,
"member"
,
"librarian"
,
"loan_date"
,
"due_date"
,
"return_date"
,
"notes"
,
]
widgets
=
{
"book"
:
forms
.
Select
(
attrs
=
{
"class"
:
"form-control"
,
}
),
"member"
:
forms
.
Select
(
attrs
=
{
"class"
:
"form-control"
,
}
),
"librarian"
:
forms
.
Select
(
attrs
=
{
"class"
:
"form-control"
,
}
),
"loan_date"
:
forms
.
DateTimeInput
(
attrs
=
{
"type"
:
"datetime-local"
,
...
...
book_loans/migrations/0006_rename_librarians_bookloans_librarian.py
0 → 100644
View file @
ffa82600
# Generated by Django 5.0.6 on 2024-07-09 07:15
from
django.db
import
migrations
class
Migration
(
migrations
.
Migration
):
dependencies
=
[
(
'book_loans'
,
'0005_alter_bookloans_book_alter_bookloans_librarians_and_more'
),
]
operations
=
[
migrations
.
RenameField
(
model_name
=
'bookloans'
,
old_name
=
'librarians'
,
new_name
=
'librarian'
,
),
]
book_loans/urls.py
View file @
ffa82600
from
django.urls
import
path
from
book_loans.views
import
index
,
update
,
delete
from
django.views.decorators.cache
import
cache_page
from
book_loans.views
import
(
BookLoanListView
,
BookLoanCreateView
,
BookLoanUpdateView
,
BookLoanDeleteView
,
)
urlpatterns
=
[
path
(
""
,
index
,
name
=
"book_loan_lists"
),
path
(
"<id>/update/"
,
update
,
name
=
"update_book"
),
path
(
"<id>/delete/"
,
delete
,
name
=
"delete_book_loan"
),
path
(
""
,
BookLoanListView
.
as_view
(),
name
=
"book_loan_lists"
),
path
(
"add/"
,
BookLoanCreateView
.
as_view
(),
name
=
"add_book_loan"
),
path
(
"<int:pk>/"
,
BookLoanUpdateView
.
as_view
(),
name
=
"update_book_loan"
),
path
(
"<int:pk>/delete/"
,
BookLoanDeleteView
.
as_view
(),
name
=
"delete_book_loan"
),
]
book_loans/views.py
View file @
ffa82600
import
jwt
from
django.conf
import
settings
from
datetime
import
datetime
from
django.db.models
import
Q
from
django.http
import
HttpResponseRedirect
from
django.shortcuts
import
render
,
get_object_or_404
from
book_loans.models
import
Book
,
BookLoans
from
members.models
import
Members
from
django.views
import
generic
from
book_loans.models
import
BookLoans
from
book_loans.forms
import
BookLoanForm
from
django.core.paginator
import
Paginator
,
PageNotAnInteger
,
EmptyPage
def
index
(
request
):
book_loan_lists
=
BookLoans
.
objects
.
all
()
books
=
Book
.
objects
.
all
()
member
=
Members
.
objects
.
all
()
context
=
{
"book_loans"
:
book_loan_lists
,
"form"
:
BookLoanForm
(),
"books"
:
books
,
"members"
:
member
,
}
default_page
=
1
page
=
request
.
GET
.
get
(
"page"
,
default_page
)
items_per_page
=
5
paginator
=
Paginator
(
book_loan_lists
,
items_per_page
)
try
:
page_obj
=
paginator
.
page
(
page
)
context
[
"page_obj"
]
=
page_obj
context
[
"book_loans"
]
=
page_obj
except
PageNotAnInteger
:
page_obj
=
paginator
.
page
(
default_page
)
context
[
"page_obj"
]
=
page_obj
context
[
"book_loans"
]
=
page_obj
except
EmptyPage
:
page_obj
=
paginator
.
page
(
paginator
.
num_pages
)
context
[
"page_obj"
]
=
page_obj
context
[
"book_loans"
]
=
page_obj
if
request
.
method
==
"POST"
:
form
=
BookLoanForm
(
request
.
POST
)
if
form
.
is_valid
:
book_id
=
request
.
POST
[
"book"
]
member_id
=
request
.
POST
[
"member"
]
loan_date
=
form
.
data
[
"loan_date"
]
due_date
=
form
.
data
[
"due_date"
]
return_date
=
form
.
data
[
"return_date"
]
or
None
notes
=
form
.
data
[
"notes"
]
class
BookLoanListView
(
generic
.
ListView
):
model
=
BookLoans
template_name
=
"loans.html"
paginate_by
=
5
book
=
books
.
get
(
id
=
book_id
)
new_stock
=
book
.
stock
-
1
books
.
filter
(
id
=
book_id
)
.
update
(
stock
=
new_stock
)
def
get_queryset
(
self
):
queryset
=
super
()
.
get_queryset
()
keyword
=
self
.
request
.
GET
.
get
(
"q"
)
order
=
self
.
request
.
GET
.
get
(
"o"
)
auth_session
=
request
.
session
.
get
(
"auth_session"
,
None
)
decoded
=
jwt
.
decode
(
auth_session
,
settings
.
JWT_SECRET
,
algorithms
=
[
"HS256"
]
)
librarians_id
=
decoded
[
"librarian_id"
]
BookLoans
.
objects
.
create
(
book_id
=
book_id
,
member_id
=
member_id
,
loan_date
=
loan_date
,
due_date
=
due_date
,
notes
=
notes
,
librarians_id
=
librarians_id
,
return_date
=
return_date
,
)
if
request
.
method
==
"GET"
:
keyword
=
request
.
GET
.
get
(
"q"
)
order
=
request
.
GET
.
get
(
"o"
)
if
keyword
is
not
None
:
filtered_book_list
=
BookLoans
.
objects
.
filter
(
Q
(
member__name__icontains
=
keyword
)
|
Q
(
book__title__icontains
=
keyword
)
if
keyword
:
queryset
=
queryset
.
filter
(
Q
(
book__title__icontains
=
keyword
)
|
Q
(
member__name__icontains
=
keyword
)
|
Q
(
librarian__name__icontains
=
keyword
)
)
.
order_by
(
"-created_at"
)
context
[
"book_loans"
]
=
filtered_book_list
if
order
==
"new"
:
context
[
"book_loans"
]
=
BookLoans
.
objects
.
all
()
.
order_by
(
"-created_at"
)
elif
order
==
"old"
:
context
[
"book_loans"
]
=
BookLoans
.
objects
.
all
()
.
order_by
(
"created_at"
)
return
render
(
request
,
"loans.html"
,
context
)
def
update
(
request
,
id
):
book_loans
=
BookLoans
.
objects
.
order_by
(
"created_at"
)
loan
=
get_object_or_404
(
BookLoans
,
id
=
id
)
books
=
Book
.
objects
.
all
()
member
=
Members
.
objects
.
all
()
context
=
{
"book_loans"
:
book_loans
,
"loan"
:
loan
,
"books"
:
books
,
"members"
:
member
,
}
initial_dict
=
{
"loan_date"
:
loan
.
loan_date
,
"due_date"
:
loan
.
due_date
,
"return_date"
:
loan
.
return_date
,
"notes"
:
loan
.
notes
,
}
form
=
BookLoanForm
(
request
.
POST
or
None
,
initial
=
initial_dict
)
if
request
.
method
==
"POST"
:
book_id
=
request
.
POST
[
"book"
]
member_id
=
request
.
POST
[
"member"
]
loan
=
BookLoans
.
objects
.
filter
(
id
=
id
)
auth_session
=
request
.
session
.
get
(
"auth_session"
,
None
)
decoded
=
jwt
.
decode
(
auth_session
,
settings
.
JWT_SECRET
,
algorithms
=
[
"HS256"
])
librarians_id
=
decoded
[
"librarian_id"
]
context
[
"initial_book_id"
]
=
book_id
if
form
.
is_valid
:
loan_date
=
form
.
data
[
"loan_date"
]
due_date
=
form
.
data
[
"due_date"
]
return_date
=
form
.
data
[
"return_date"
]
or
None
notes
=
form
.
data
[
"notes"
]
loan
.
update
(
book_id
=
book_id
,
member_id
=
member_id
,
librarians_id
=
librarians_id
,
loan_date
=
loan_date
,
due_date
=
due_date
,
return_date
=
return_date
,
notes
=
notes
,
updated_at
=
datetime
.
now
(),
)
updated_loan
=
BookLoans
.
objects
.
get
(
id
=
id
)
book
=
Book
.
objects
.
get
(
id
=
book_id
)
new_stock
=
book
.
stock
+
1
if
updated_loan
.
return_date
is
not
None
and
book
.
stock
<
new_stock
:
Book
.
objects
.
filter
(
id
=
book_id
)
.
update
(
stock_in
=
new_stock
)
return
HttpResponseRedirect
(
"/dashboard/book-loans"
)
context
[
"form"
]
=
form
return
render
(
request
,
"book_loan_update_form.html"
,
context
)
if
order
:
if
order
==
"new"
:
queryset
=
queryset
.
order_by
(
"-created_at"
)
elif
order
==
"old"
:
queryset
=
queryset
.
order_by
(
"created_at"
)
def
delete
(
request
,
id
):
context
=
{}
book_loan
=
get_object_or_404
(
BookLoans
,
id
=
id
)
return
queryset
.
order_by
(
"-updated_at"
)
if
request
.
method
==
"POST"
:
books
=
Book
.
objects
.
all
()
book_id
=
request
.
POST
[
"book_id"
]
book
=
Book
.
objects
.
get
(
id
=
book_id
)
new_stock
=
book
.
stock
+
1
class
BookLoanCreateView
(
generic
.
edit
.
CreateView
):
model
=
BookLoans
form_class
=
BookLoanForm
success_url
=
"/dashboard/book-loans/"
template_name
=
"form/create_form.html"
if
book_loan
.
return_date
is
None
:
books
.
filter
(
id
=
book_id
)
.
update
(
stock
=
new_stock
)
book_loan
.
delete
()
class
BookLoanUpdateView
(
generic
.
edit
.
UpdateView
):
model
=
BookLoans
form_class
=
BookLoanForm
success_url
=
"/dashboard/book-loans"
template_name
=
"form/update_form.html"
return
HttpResponseRedirect
(
"/dashboard/book-loans"
)
return
render
(
request
,
"loans.html"
,
context
)
class
BookLoanDeleteView
(
generic
.
edit
.
DeleteView
):
model
=
BookLoans
success_url
=
"/dashboard/book-loans"
template_name
=
"form/delete_form.html"
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