[UPDT] ASSET: Made individual view from modal toggle to htmx in asset request and allocation

This commit is contained in:
Horilla
2023-11-17 10:14:20 +05:30
parent 64b26b8c18
commit e27d139e3f
5 changed files with 821 additions and 469 deletions

View File

@@ -0,0 +1,124 @@
{% load static %} {% load i18n %}
<div class="oh-modal__dialog oh-modal__dialog--navigation m-0 p-0">
<button
hx-get="{% url 'asset-allocation-individual-view' previous %}?allocations_ids={{allocations_ids}}"
hx-target="#singleAllocate"
class="oh-modal__diaglog-nav oh-modal__nav-prev"
>
<ion-icon
name="chevron-back-outline"
class="md hydrated"
role="img"
aria-label="chevron back outline"
></ion-icon>
</button>
<button
hx-get="{% url 'asset-allocation-individual-view' next %}?allocations_ids={{allocations_ids}}"
hx-target="#singleAllocate"
class="oh-modal__diaglog-nav oh-modal__nav-next"
>
<ion-icon
name="chevron-forward-outline"
class="md hydrated"
role="img"
aria-label="chevron forward outline"
></ion-icon>
</button>
</div>
<div class="oh-timeoff-modal__profile-content pt-4">
<div class="oh-profile mb-2">
<div class="oh-profile__avatar">
<img
src="{{asset_allocation.assigned_to_employee_id.get_avatar}}"
class="oh-profile__image me-2"
alt="Mary Magdalene"
/>
</div>
<div class="oh-timeoff-modal__profile-info">
<span class="oh-timeoff-modal__user fw-bold m-0"
>{{asset_allocation.assigned_to_employee_id.get_full_name}}</span
>
<span
class="oh-timeoff-modal__user m-0"
style="font-size: 18px; color: #4d4a4a"
>
{{asset_allocation.assigned_to_employee_id.employee_work_info.department_id}} /
{{asset_allocation.assigned_to_employee_id.employee_work_info.job_position_id}}</span
>
</div>
</div>
</div>
<div class="oh-timeoff-modal__stats-container">
<div class="oh-timeoff-modal__stat">
<span class="oh-timeoff-modal__stat-title"
>{% trans "Returned Status" %}
</span>
<span class="oh-timeoff-modal__stat-count"
>{{asset_allocation.return_status}}</span
>
</div>
<div class="oh-timeoff-modal__stat">
<span class="oh-timeoff-modal__stat-title"
>{% trans "Allocated User" %}</span
>
<span class="oh-timeoff-modal__stat-count"
>{{asset_allocation.assigned_by_employee_id}}</span
>
</div>
</div>
<div class="oh-timeoff-modal__stats-container mt-3">
<div class="oh-timeoff-modal__stat">
<span class="oh-timeoff-modal__stat-title"
>{% trans "Allocated Date" %}
</span>
<span class="oh-timeoff-modal__stat-count"
>{{asset_allocation.assigned_date}}</span
>
</div>
<div class="oh-timeoff-modal__stat">
<span class="oh-timeoff-modal__stat-title"
>{% trans "Returned Date" %}
</span>
<span class="oh-timeoff-modal__stat-count"
>{{asset_allocation.return_date}}</span
>
</div>
</div>
<div class="oh-timeoff-modal__stats-container mt-3">
<div class="oh-timeoff-modal__stat w-100">
<span class="oh-timeoff-modal__stat-title">{% trans "Asset" %}</span>
<span class="oh-timeoff-modal__stat-count"
>{{asset_allocation.asset_id}}</span
>
</div>
</div>
<div class="oh-timeoff-modal__stats mt-3 w-100">
<div class="oh-timeoff-modal__stat">
<span class="oh-timeoff-modal__stat-title"
>{% trans "Return Description" %}</span
>
<div class="oh-timeoff-modal__stat-description">
{{asset_allocation.return_condition}}
</div>
</div>
</div>
<div class="oh-modal__button-container text-center w-100 mt-3">
{% if not asset_allocation.return_status %}
<button
class="oh-btn oh-btn--secondary w-100"
role="button"
data-toggle="oh-modal-toggle"
data-target="#asset-request-allocation-modal"
hx-get="{% url 'asset-allocate-return' asset_id=asset_allocation.asset_id.id %}"
hx-target="#asset-request-allocation-modal-target"
>
<ion-icon name="return-down-back-sharp"></ion-icon>{% trans "Return" %}
</button>
{% endif %}
</div>

View File

@@ -0,0 +1,110 @@
{% load static %} {% load i18n %}
<div class="oh-modal__dialog oh-modal__dialog--navigation m-0 p-0">
<button
hx-get="{% url 'asset-request-individual-view' previous %}?requests_ids={{requests_ids}}"
hx-target="#singleRequest"
class="oh-modal__diaglog-nav oh-modal__nav-prev"
>
<ion-icon
name="chevron-back-outline"
class="md hydrated"
role="img"
aria-label="chevron back outline"
></ion-icon>
</button>
<button
hx-get="{% url 'asset-request-individual-view' next %}?requests_ids={{requests_ids}}"
hx-target="#singleRequest"
class="oh-modal__diaglog-nav oh-modal__nav-next"
>
<ion-icon
name="chevron-forward-outline"
class="md hydrated"
role="img"
aria-label="chevron forward outline"
></ion-icon>
</button>
</div>
<div class="oh-timeoff-modal__profile-content pt-4">
<div class="oh-profile mb-2">
<div class="oh-profile__avatar">
<img
src="{{asset_request.requested_employee_id.get_avatar}}"
class="oh-profile__image me-2"
alt="Mary Magdalene"
/>
</div>
<div class="oh-timeoff-modal__profile-info">
<span class="oh-timeoff-modal__user fw-bold m-0"
>{{asset_request.requested_employee_id.get_full_name}}</span
>
<span
class="oh-timeoff-modal__user m-0"
style="font-size: 18px; color: #4d4a4a"
>
{{asset_request.requested_employee_id.employee_work_info.department_id}} /
{{asset_request.requested_employee_id.employee_work_info.job_position_id}}</span
>
</div>
</div>
</div>
<div class="oh-timeoff-modal__stats-container">
<div class="oh-timeoff-modal__stat">
<span class="oh-timeoff-modal__stat-title"
>{% trans "Requested Date" %} </span
>
<span class="oh-timeoff-modal__stat-count"
>{{asset_request.asset_request_date}}</span
>
</div>
<div class="oh-timeoff-modal__stat">
<span class="oh-timeoff-modal__stat-title">{% trans "Category" %}</span>
<span class="oh-timeoff-modal__stat-count"
>{{asset_request.asset_category_id}}</span
>
</div>
</div>
<div class="oh-timeoff-modal__stats mt-3 w-100">
<div class="oh-timeoff-modal__stat">
<span class="oh-timeoff-modal__stat-title"
>{% trans "Request Description" %}</span
>
<div class="oh-timeoff-modal__stat-description">
{{asset_request.description}}
</div>
</div>
</div>
<div class="oh-modal__button-container text-center w-100 m-4">
{% if perms.asset.add_assetassignment %}
{% if asset_request.asset_request_status == 'Requested' %}
<div class="oh-btn-group">
<a
class="oh-btn oh-btn--success w-100"
role="button"
data-toggle="oh-modal-toggle"
data-target="#asset-request-allocation-modal"
hx-get="{% url 'asset-request-approve' req_id=asset_request.id %}"
hx-target="#asset-request-allocation-modal-target"
>
<ion-icon name="checkmark-outline"></ion-icon>{% trans 'Approve' %}
</a>
<form
action="{% url 'asset-request-reject' req_id=asset_request.id %}"
method="post"
class="w-100"
>
{% csrf_token %}
<button class="oh-btn oh-btn--danger w-100">
<ion-icon name="close-outline"></ion-icon> {% trans 'Reject' %}
</button>
</form>
</div>
{% endif %}
{% endif %}
</div>

View File

@@ -45,6 +45,17 @@ urlpatterns = [
views.asset_request_alloaction_view,
name="asset-request-allocation-view",
),
path(
"asset-request-individual-view/<int:id>",
views.asset_request_individual_view,
name="asset-request-individual-view",
),
path(
"asset-allocation-individual-view/<int:id>",
views.asset_allocation_individual_view,
name="asset-allocation-individual-view",
),
path(
"asset-request-allocation-view-search-filter",
views.asset_request_alloaction_view_search_filter,

View File

@@ -2,6 +2,7 @@
asset.py
This module is used to """
import json
from urllib.parse import parse_qs
import pandas as pd
from django.db.models import ProtectedError
@@ -10,7 +11,7 @@ from django.http import HttpResponse, HttpResponseRedirect
from django.contrib import messages
from django.core.paginator import Paginator
from django.utils.translation import gettext_lazy as _
from base.methods import get_key_instances
from base.methods import closest_numbers, get_key_instances
from notifications.signals import notify
from horilla.decorators import login_required, hx_request_required
from horilla.decorators import permission_required
@@ -691,6 +692,19 @@ def filter_pagination_asset_request_allocation(request):
assets = asset_paginator.get_page(page_number)
asset_requests = asset_request_paginator.get_page(page_number)
asset_allocations = asset_allocation_paginator.get_page(page_number)
requests_ids = json.dumps(
[
instance.id
for instance in asset_requests.object_list
]
)
allocations_ids = json.dumps(
[
instance.id
for instance in asset_allocations.object_list
]
)
data_dict = parse_qs(previous_data)
get_key_instances(AssetRequest, data_dict)
get_key_instances(AssetAssignment, data_dict)
@@ -708,6 +722,8 @@ def filter_pagination_asset_request_allocation(request):
"gp_Allocation_fields": AssetAllocationReGroup.fields,
"request_field":request_field,
"allocation_field":allocation_field,
"requests_ids":requests_ids,
"allocations_ids":allocations_ids
}
@@ -748,6 +764,39 @@ def asset_request_alloaction_view_search_filter(request):
request, template, context
)
def asset_request_individual_view(request,id):
asset_request = AssetRequest.objects.get(id=id)
context = {"asset_request":asset_request}
requests_ids_json = request.GET.get("requests_ids")
if requests_ids_json:
requests_ids = json.loads(requests_ids_json)
previous_id, next_id = closest_numbers(requests_ids, id)
context["requests_ids"] = requests_ids_json
context["previous"] = previous_id
context["next"] = next_id
return render(
request,
"request_allocation/individual_request.html",
context
)
def asset_allocation_individual_view(request,id):
asset_allocation = AssetAssignment.objects.get(id=id)
context = {"asset_allocation":asset_allocation}
allocation_ids_json = request.GET.get("allocations_ids")
if allocation_ids_json:
allocation_ids = json.loads(allocation_ids_json)
previous_id, next_id = closest_numbers(allocation_ids, id)
context["allocations_ids"] = allocation_ids_json
context["previous"] = previous_id
context["next"] = next_id
return render(
request,
"request_allocation/individual allocation.html",
context
)
def convert_nan(val):
if pd.isna(val):