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
b6844ada
Commit
b6844ada
authored
Jul 01, 2024
by
impfundev
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat: CRUD Book Loan
parent
4ee10367
Show whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
351 additions
and
2 deletions
+351
-2
forms.py
book_loans/forms.py
+36
-0
book_loan_create_form.html
book_loans/templates/book_loan_create_form.html
+45
-0
book_loan_delete_form.html
book_loans/templates/book_loan_delete_form.html
+38
-0
book_loan_table_data.html
book_loans/templates/book_loan_table_data.html
+60
-0
book_loan_update_form.html
book_loans/templates/book_loan_update_form.html
+43
-0
loans.html
book_loans/templates/loans.html
+17
-0
urls.py
book_loans/urls.py
+8
-0
views.py
book_loans/views.py
+103
-2
urls.py
dashboards/urls.py
+1
-0
No files found.
book_loans/forms.py
0 → 100644
View file @
b6844ada
from
django
import
forms
class
BookLoanForm
(
forms
.
Form
):
loan_date
=
forms
.
DateTimeField
(
widget
=
forms
.
DateTimeInput
(
attrs
=
{
"type"
:
"datetime-local"
,
"class"
:
"form-control"
,
}
)
)
due_date
=
forms
.
DateTimeField
(
widget
=
forms
.
DateTimeInput
(
attrs
=
{
"type"
:
"datetime-local"
,
"class"
:
"form-control"
,
}
)
)
return_date
=
forms
.
DateTimeField
(
widget
=
forms
.
DateTimeInput
(
attrs
=
{
"type"
:
"datetime-local"
,
"class"
:
"form-control"
,
}
)
)
notes
=
forms
.
CharField
(
widget
=
forms
.
Textarea
(
attrs
=
{
"placeholder"
:
"Note"
,
"class"
:
"form-control"
,
}
),
)
book_loans/templates/book_loan_create_form.html
0 → 100644
View file @
b6844ada
<form
class=
"modal fade"
id=
"book_loan_modal_create"
tabindex=
"-1"
aria-labelledby=
"book_loan_modal_label"
aria-hidden=
"true"
action=
"/dashboard/book-loans/"
method=
"POST"
>
<div
class=
"modal-dialog modal-dialog-scrollable"
>
<div
class=
"modal-content"
>
<div
class=
"modal-header"
>
<h1
class=
"modal-title fs-5"
id=
"exampleModalLabel"
>
Input Data
</h1>
<button
type=
"button"
class=
"btn-close"
data-bs-dismiss=
"modal"
aria-label=
"Close"
></button>
</div>
<div
class=
"modal-body d-flex flex-column gap-2"
>
{% csrf_token %}
<label
for=
"book"
>
Book:
</label>
<select
id=
"book"
name=
"book"
class=
"form-select"
>
{% for book in books %}
<option
value=
"{{ book.id }}"
>
{{ book.title }}
</option>
{% endfor %}
</select>
<label
for=
"member"
>
Member:
</label>
<select
id=
"member"
name=
"member"
class=
"form-select"
>
{% for member in members %}
<option
value=
"{{ member.id }}"
>
{{ member.name }}
</option>
{% endfor %}
</select>
{{ form }}
</div>
<div
class=
"modal-footer"
>
<button
type=
"button"
class=
"btn btn-secondary"
data-bs-dismiss=
"modal"
>
Close
</button>
<button
type=
"submit"
class=
"btn btn-primary"
>
Submit
</button>
</div>
</div>
</div>
</form>
book_loans/templates/book_loan_delete_form.html
0 → 100644
View file @
b6844ada
{% for book_loan in book_loans %}
<form
class=
"modal fade"
id=
"book_loan_delete_modal_{{ book_loan.id }}"
tabindex=
"-1"
aria-labelledby=
"book_loan_delete_label"
aria-hidden=
"true"
action=
"/dashboard/book-loans/{{ book_loan.id }}/delete/"
method=
"POST"
>
{% csrf_token %}
<div
class=
"modal-dialog modal-dialog-centered"
>
<div
class=
"modal-content"
>
<div
class=
"modal-header"
>
<h1
class=
"modal-title fs-5"
id=
"exampleModalLabel"
>
Are you sure want to delete this data
</b>
?
</h1>
<button
type=
"button"
class=
"btn-close"
data-bs-dismiss=
"modal"
aria-label=
"Close"
></button>
</div>
<div
class=
"modal-body"
>
Once data is deleted, it cannot be restored.
<input
type=
"hidden"
name=
"id"
id=
"almacen_id"
/>
</div>
<div
class=
"modal-footer"
>
<button
type=
"button"
class=
"btn btn-secondary"
data-bs-dismiss=
"modal"
>
Cancel
</button>
<button
type=
"submit"
class=
"btn btn-danger"
>
Continue
</button>
</div>
</div>
</div>
</form>
{% endfor %}
book_loans/templates/book_loan_table_data.html
0 → 100644
View file @
b6844ada
<div
class=
"table-responsive"
>
<table
class=
"table table-hover"
>
<thead>
<tr
class=
"table-primary"
>
<th
scope=
"col"
>
Book
</th>
<th
scope=
"col"
>
Member
</th>
<th
scope=
"col"
>
Librarian
</th>
<th
scope=
"col"
>
Loan Date
</th>
<th
scope=
"col"
>
Due Date
</th>
<th
scope=
"col"
>
Return Date
</th>
<th
scope=
"col"
>
Created At
</th>
<th
scope=
"col"
>
Updated At
</th>
<th
scope=
"col"
></th>
</tr>
</thead>
<tbody>
{% if book_loans %} {% for loan in book_loans %}
<tr>
<td>
{{ loan.book.title }}
</td>
<td>
{{ loan.member.name }}
</td>
<td>
{{ loan.librarians.name }}
</td>
<td>
{{ loan.loan_date }}
</td>
<td>
{{ loan.due_date }}
</td>
<td>
{{ loan.return_date }}
</td>
<td>
{{ loan.created_at }}
</td>
<td>
{{ loan.updated_at }}
</td>
<td
class=
"d-flex gap-2 py-4"
>
<a
class=
"btn btn-success"
href=
"/dashboard/book-loans/{{ loan.id }}/update/"
>
<i
class=
"bi bi-pencil-square"
></i>
</a>
<button
class=
"btn btn-danger"
data-bs-toggle=
"modal"
data-bs-target=
"#book_loan_delete_modal_{{ loan.id }}"
>
<i
class=
"bi bi-trash3-fill"
></i>
</button>
</td>
</tr>
{% endfor %} {% else %}
<tr
class=
"w-100"
>
<td></td>
<td></td>
<td></td>
<td></td>
<td>
<p>
Data Empty
</p>
</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
{% endif %}
</tbody>
</table>
</div>
book_loans/templates/book_loan_update_form.html
0 → 100644
View file @
b6844ada
{% extends "layout.html" %} {% block dashboard %}
<div
style=
"max-width: 80vw"
class=
"w-100 p-4"
>
<div
class=
"d-flex flex-column gap-2 mb-4"
>
<form
id=
"book_loan_update_modal_{{ loan.id }}"
action=
"/dashboard/book-loans/{{ loan.id }}/update/"
method=
"POST"
>
{% csrf_token %}
<div
class=
"modal-dialog modal-dialog-centered"
>
<div
class=
"modal-content"
>
<div
class=
"modal-header justify-content-between"
>
<h1
class=
"fs-4"
>
Input Data
</h1>
<div
class=
"d-flex gap-2 my-2"
>
<a
href=
"/dashboard/book-loans/"
class=
"btn btn-secondary"
>
Cancel
</a>
<button
type=
"submit"
class=
"btn btn-primary"
>
Submit
</button>
</div>
</div>
<div
class=
"modal-body"
>
<label
for=
"book"
>
Book
</label>
<select
id=
"book"
name=
"book"
class=
"form-select"
>
{% for book in books %}
<option
value=
"{{ book.id }}"
>
{{ book.title }}
</option>
{% endfor %}
</select>
<label
for=
"member"
>
Member
</label>
<select
id=
"member"
name=
"member"
class=
"form-select"
>
{% for member in members %}
<option
value=
"{{ member.id }}"
>
{{ member.name }}
</option>
{% endfor %}
</select>
{{ form.as_p }}
</div>
</div>
</div>
</form>
</div>
</div>
{% endblock dashboard %}
book_loans/templates/loans.html
0 → 100644
View file @
b6844ada
{% extends "layout.html" %} {% block dashboard %}
<div
class=
"w-100 p-4"
>
{% include "book_loan_delete_form.html" %}
<div
class=
"d-flex flex-column gap-2 mb-4"
>
<button
type=
"button"
class=
"btn btn-primary"
data-bs-toggle=
"modal"
data-bs-target=
"#book_loan_modal_create"
>
<i
class=
"bi bi-plus-circle"
></i>
Add Book Loan
</button>
{% include "book_loan_create_form.html" %}
</div>
{% include "book_loan_table_data.html" %}
</div>
{% endblock dashboard %}
book_loans/urls.py
0 → 100644
View file @
b6844ada
from
django.urls
import
path
from
book_loans.views
import
index
,
update
,
delete
urlpatterns
=
[
path
(
""
,
index
,
name
=
"book_loan_lists"
),
path
(
"<id>/update/"
,
update
,
name
=
"update_book"
),
path
(
"<id>/delete/"
,
delete
,
name
=
"delete_book_loan"
),
]
book_loans/views.py
View file @
b6844ada
from
django.shortcuts
import
render
import
jwt
from
django.conf
import
settings
from
datetime
import
datetime
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
book_loans.forms
import
BookLoanForm
# Create your views here.
def
index
(
request
):
latest_book_loan_list
=
BookLoans
.
objects
.
order_by
(
"created_at"
)[:
10
]
books
=
Book
.
objects
.
all
()
member
=
Members
.
objects
.
all
()
context
=
{
"book_loans"
:
latest_book_loan_list
,
"form"
:
BookLoanForm
(),
"books"
:
books
,
"members"
:
member
,
}
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"
]
note
=
form
.
data
[
"note"
]
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
,
return_date
=
return_date
,
notes
=
note
,
librarians_id
=
librarians_id
,
)
return
render
(
request
,
"loans.html"
,
context
)
def
update
(
request
,
id
):
latest_book_loan_list
=
BookLoans
.
objects
.
order_by
(
"created_at"
)[:
10
]
loan
=
get_object_or_404
(
BookLoans
,
id
=
id
)
books
=
Book
.
objects
.
all
()
member
=
Members
.
objects
.
all
()
context
=
{
"book_loans"
:
latest_book_loan_list
,
"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"
]
if
form
.
is_valid
:
loan
.
update
(
book_id
=
book_id
,
member_id
=
member_id
,
librarians_id
=
librarians_id
,
loan_date
=
form
.
data
[
"loan_date"
],
due_date
=
form
.
data
[
"due_date"
],
return_date
=
form
.
data
[
"return_date"
],
notes
=
form
.
data
[
"notes"
],
updated_at
=
datetime
.
now
(),
)
return
HttpResponseRedirect
(
"/dashboard/book-loans"
)
context
[
"form"
]
=
form
return
render
(
request
,
"book_loan_update_form.html"
,
context
)
def
delete
(
request
,
id
):
context
=
{}
book_loan
=
get_object_or_404
(
BookLoans
,
id
=
id
)
if
request
.
method
==
"POST"
:
book_loan
.
delete
()
return
HttpResponseRedirect
(
"/dashboard/book-loans"
)
return
render
(
request
,
"loans.html"
,
context
)
dashboards/urls.py
View file @
b6844ada
...
...
@@ -5,5 +5,6 @@ urlpatterns = [
path
(
""
,
index
,
name
=
"dashboard"
),
path
(
"books/"
,
include
(
"books.urls"
)),
path
(
"members/"
,
include
(
"members.urls"
)),
path
(
"book-loans/"
,
include
(
"book_loans.urls"
)),
path
(
"librarians/"
,
include
(
"librarians.urls"
)),
]
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