diff --git a/asset/cbv/asset_batch_no.py b/asset/cbv/asset_batch_no.py
index 7d3b2135b..b7bd59f2d 100644
--- a/asset/cbv/asset_batch_no.py
+++ b/asset/cbv/asset_batch_no.py
@@ -40,19 +40,20 @@ class AssetBatchNoListView(HorillaListView):
list view for batch number
"""
- model = AssetLot
- filter_class = AssetBatchNoFilter
- columns = [
- "lot_number",
- "lot_description",
- (_("Assets"), "assets_column"),
- ]
-
def __init__(self, **kwargs: Any) -> None:
super().__init__(**kwargs)
self.search_url = reverse("asset-batch-list")
self.view_id = "AssetBatchList"
+ model = AssetLot
+ filter_class = AssetBatchNoFilter
+
+ columns = [
+ (_("Batch Number"), "lot_number"),
+ (_("Description"), "lot_description"),
+ (_("Assets"), "assets_column"),
+ ]
+
header_attrs = {
"action": """
style = "width:180px !important"
@@ -138,8 +139,46 @@ class AssetBatchDetailView(HorillaDetailedView):
detail view of the page
"""
- title = _("Details")
- header = False
+ def get_context_data(self, **kwargs: Any):
+ """
+ Return context data with the title set to the contract's name.
+ """
+
+ context = super().get_context_data(**kwargs)
+ lot_number = context["assetlot"].lot_number
+ context["title"] = "Asset Batch:" + lot_number
+ return context
+
model = AssetLot
- body = ["lot_number", (_("Asset"), "assets_column"), "lot_description"]
- action_method = "detail_actions"
+ header = False
+
+ cols = {"assets_column": 12, "lot_description": 12, "lot_number": 12}
+ body = {
+ (_("Assets"), "assets_column"),
+ (_("Description"), "lot_description"),
+ (_("Batch Number"), "lot_number"),
+ }
+
+ actions = [
+ {
+ "action": _("Edit"),
+ "icon": "create-outline",
+ "attrs": """
+ class="oh-btn oh-btn--info w-100"
+ hx-get='{get_update_url}?instance_ids={ordered_ids}'
+ hx-target="#genericModalBody"
+ data-toggle="oh-modal-toggle"
+ data-target="#genericModal"
+ """,
+ },
+ {
+ "action": _("Delete"),
+ "icon": "trash-outline",
+ "attrs": """
+ class="oh-btn oh-btn--danger w-100"
+ hx-confirm="Do you want to delete this batch number?"
+ hx-post="{get_delete_url}?instance_ids={ordered_ids}"
+ hx-target="#AssetBatchList"
+ """,
+ },
+ ]
diff --git a/asset/cbv/asset_category.py b/asset/cbv/asset_category.py
index 32b222a80..d3079cb18 100644
--- a/asset/cbv/asset_category.py
+++ b/asset/cbv/asset_category.py
@@ -214,43 +214,12 @@ class AssetCategoryNav(HorillaNavView):
def __init__(self, **kwargs: Any) -> None:
super().__init__(**kwargs)
self.search_url = reverse("asset-category-view-search-filter")
- self.actions = []
- if self.request.user.has_perm("add_assetcategory"):
- self.create_attrs = f"""
- data-toggle="oh-modal-toggle"
- data-target="#genericModal"
- hx-get="{reverse('asset-category-creation')}"
- hx-target="#genericModalBody"
- """
- if self.request.user.has_perm("add_assetcategory"):
- self.actions.append(
- {
- "action": _("Import"),
- "attrs": f"""
- onclick="getAssetImportTemplate();"
- data-toggle="oh-modal-toggle"
- data-target="#objectCreateModal"
- hx-get="{reverse('asset-import')}"
- hx-target="#objectCreateModalTarget"
- style="cursor: pointer;"
- """,
- },
- )
-
- if self.request.user.has_perm("view_asset"):
- self.actions.append(
- {
- "action": _("Export"),
- "attrs": f"""
+ self.create_attrs = f"""
data-toggle="oh-modal-toggle"
- data-target="#objectCreateModal"
- hx-get="{reverse('asset-export-excel')}"
- hx-target="#objectCreateModalTarget"
- style="cursor: pointer;"
- """,
- }
- )
-
+ data-target="#genericModal"
+ hx-get="{reverse('asset-category-creation')}"
+ hx-target="#genericModalBody"
+ """
# if self.request.user.has_perm(
# "attendance.add_attendanceovertime"
# ) or is_reportingmanager(self.request):
@@ -281,3 +250,55 @@ class AssetCategoryNav(HorillaNavView):
filter_instance = AssetFilter()
filter_form_context_name = "form"
search_swap_target = "#assetCategoryList"
+
+
+class AssetCategoryDetailView(HorillaDetailedView):
+ """
+ Detail view of the page
+ """
+
+ def get_context_data(self, **kwargs: Any):
+ """
+ Return context data with the title set to the contract's name.
+ """
+
+ context = super().get_context_data(**kwargs)
+ asset_name = context["asset"].asset_name
+ context["title"] = asset_name
+ return context
+
+ model = Asset
+ header = False
+ template_name = "cbv/asset_category/detail_view_action.html"
+ body = [
+ (_("Tracking Id"), "asset_tracking_id"),
+ (_("Purchase Date"), "asset_purchase_date"),
+ (_("Cost"), "asset_purchase_cost"),
+ (_("Status"), "get_status_display"),
+ (_("Batch No"), "asset_lot_number_id__lot_number"),
+ (_("Category"), "asset_category_id"),
+ ]
+
+ actions = [
+ {
+ "action": _("Edit"),
+ "icon": "create-outline",
+ "attrs": """
+ class="oh-btn oh-btn--info w-100"
+ hx-get='{get_update_url}?instance_ids={ordered_ids}'
+ hx-target="#genericModalBody"
+ data-toggle="oh-modal-toggle"
+ data-target="#genericModal"
+ """,
+ },
+ {
+ "action": _("Delete"),
+ "icon": "trash-outline",
+ "attrs": """
+ class="oh-btn oh-btn--danger w-100"
+ hx-confirm="Do you want to delete this asset?"
+ hx-post="{get_delete_url}?instance_ids={ordered_ids}"
+ hx-target="#genericModalBody"
+ """,
+ },
+ ]
diff --git a/asset/cbv/request_and_allocation.py b/asset/cbv/request_and_allocation.py
index ba6522035..65e9a7510 100644
--- a/asset/cbv/request_and_allocation.py
+++ b/asset/cbv/request_and_allocation.py
@@ -310,6 +310,18 @@ class AssetDetailView(HorillaDetailedView):
detail view of asset tab
"""
+ def __init__(self, **kwargs: Any) -> None:
+ super().__init__(**kwargs)
+ self.body = [
+ (_("Description"), "asset_id__asset_description"),
+ (_("Tracking Id"), "asset_id__asset_tracking_id"),
+ (_("Assigned Date"), "assigned_date"),
+ (_("Status"), "asset_detail_status"),
+ (_("Assigned by"), "assigned_by_employee_id"),
+ (_("Batch No"), "asset_id__asset_lot_number_id"),
+ # ("Category","asset_id__asset_category_id")
+ ]
+
action_method = "asset_detail_action"
model = AssetAssignment
@@ -319,15 +331,6 @@ class AssetDetailView(HorillaDetailedView):
"subtitle": "asset_id__asset_category_id",
"avatar": "get_avatar",
}
- body = [
- (_("Tracking Id"), "asset_id__asset_tracking_id"),
- (_("Batch No"), "asset_id__asset_lot_number_id"),
- (_("Assigned Date"), "assigned_date"),
- (_("Status"), "asset_detail_status"),
- (_("Assigned by"), "assigned_by_employee_id"),
- (_("Description"), "asset_id__asset_description"),
- # ("Category","asset_id__asset_category_id")
- ]
@method_decorator(login_required, name="dispatch")
@@ -336,6 +339,15 @@ class AssetRequestDetailView(HorillaDetailedView):
detail view of asset request tab
"""
+ def __init__(self, **kwargs: Any) -> None:
+ super().__init__(**kwargs)
+ self.body = [
+ (_("Asset Category"), "asset_category_id"),
+ (_("Requested Date"), "asset_request_date"),
+ (_("Request Description"), "description"),
+ (_("Status"), "status_col"),
+ ]
+
model = AssetRequest
title = _("Details")
header = {
@@ -343,12 +355,6 @@ class AssetRequestDetailView(HorillaDetailedView):
"subtitle": "asset_request_detail_subtitle",
"avatar": "requested_employee_id__get_avatar",
}
- body = [
- (_("Asset Category"), "asset_category_id"),
- (_("Requested Date"), "asset_request_date"),
- (_("Request Description"), "description"),
- (_("Status"), "get_asset_request_status_display"),
- ]
action_method = "detail_action_col"
@@ -358,6 +364,18 @@ class AssetAllocationDetailView(HorillaDetailedView):
detail view of asset allocation tab
"""
+ def __init__(self, **kwargs: Any) -> None:
+ super().__init__(**kwargs)
+ self.body = [
+ (_("Returned Status"), "return_status"),
+ (_("Allocated User"), "assigned_by_employee_id"),
+ (_("Allocated Date"), "assigned_date"),
+ (_("Return Date"), "return_date"),
+ (_("Asset"), "asset_id"),
+ (_("Return Description"), "return_condition"),
+ (_("Status"), "detail_status"),
+ ]
+
model = AssetAssignment
title = _("Details")
header = {
@@ -365,15 +383,6 @@ class AssetAllocationDetailView(HorillaDetailedView):
"subtitle": "asset_allocation_detail_subtitle",
"avatar": "assigned_to_employee_id__get_avatar",
}
- body = [
- (_("Returned Status"), "return_status"),
- (_("Allocated User"), "assigned_by_employee_id"),
- (_("Allocated Date"), "assigned_date"),
- (_("Return Date"), "return_date"),
- (_("Asset"), "asset_id"),
- (_("Return Description"), "return_condition"),
- (_("Status"), "detail_status"),
- ]
action_method = "asset_allocation_detail_action"
diff --git a/asset/models.py b/asset/models.py
index 4ef817b2b..4473c7e73 100644
--- a/asset/models.py
+++ b/asset/models.py
@@ -14,7 +14,7 @@ from django.utils.translation import gettext_lazy as _
from base.horilla_company_manager import HorillaCompanyManager
from base.models import Company
from employee.models import Employee
-from horilla.models import HorillaModel
+from horilla.models import HorillaModel, upload_path
from horilla_views.cbv_methods import render_template
@@ -104,12 +104,6 @@ class AssetLot(HorillaModel):
context={"instance": self},
)
- def detail_actions(self):
- return render_template(
- path="cbv/asset_batch_no/detail_actions.html",
- context={"instance": self},
- )
-
def get_update_url(self):
"""
This method to get update url
@@ -183,10 +177,11 @@ class Asset(HorillaModel):
def __str__(self):
return f"{self.asset_name}-{self.asset_tracking_id}"
- def action_column(self):
- return render_template(
- path="asset/action_column.html", context={"instance": self}
- )
+ def get_status_display(self):
+ """
+ Display status
+ """
+ return dict(self.ASSET_STATUS).get(self.asset_status)
def detail_view_action(self):
"""
@@ -194,14 +189,10 @@ class Asset(HorillaModel):
"""
return render_template(
- path="cbv/asset/detail_action.html",
+ path="cbv/asset_category/detail_view_action.html",
context={"instance": self},
)
- def asset_detail(self):
- url = reverse_lazy("asset-information", kwargs={"pk": self.pk})
- return url
-
def get_update_url(self):
"""
This method to get update url
@@ -273,9 +264,7 @@ class AssetDocuments(HorillaModel):
asset_report = models.ForeignKey(
"AssetReport", related_name="documents", on_delete=models.CASCADE
)
- file = models.FileField(
- upload_to="asset/asset_report/documents/", blank=True, null=True
- )
+ file = models.FileField(upload_to=upload_path, blank=True, null=True)
objects = models.Manager()
class Meta:
@@ -294,7 +283,7 @@ class ReturnImages(HorillaModel):
- image: A FileField for uploading the image file (optional).
"""
- image = models.FileField(upload_to="asset/return_images/", blank=True, null=True)
+ image = models.FileField(upload_to=upload_path, blank=True, null=True)
class AssetAssignment(HorillaModel):
@@ -515,31 +504,6 @@ class AssetAssignment(HorillaModel):
date_col=date_col,
)
- def get_asset_of_offboarding_employee(self):
- url = f"{reverse('asset-request-allocation-view')}?assigned_to_employee_id={self.assigned_to_employee_id.id}"
- return url
-
- def get_send_mail_employee_link(self):
- if not self.assigned_to_employee_id:
- return ""
- url = reverse(
- "send-mail-employee", kwargs={"emp_id": self.assigned_to_employee_id.id}
- )
- title = _("Send Mail")
- html = f"""
-
-
-
- """
- return format_html(html)
-
class AssetRequest(HorillaModel):
"""
diff --git a/asset/static/src/asset/dashboard.js b/asset/static/src/asset/dashboard.js
index 88d3045fb..ed9e860e4 100644
--- a/asset/static/src/asset/dashboard.js
+++ b/asset/static/src/asset/dashboard.js
@@ -1,225 +1,44 @@
staticUrl = $("#statiUrl").attr("data-url");
$(document).ready(function () {
- // function available_asset_chart(dataSet) {
- // var Asset_available_chart = document.getElementById("assetAvailableChart");
- // if (Asset_available_chart) {
- // var assetAvailableChartChart = new Chart(Asset_available_chart, {
- // type: "pie",
- // data: {
- // labels: dataSet.labels,
- // datasets: dataSet.dataset,
- // emptyImageSrc: dataSet.emptyImageSrc,
- // message: dataSet.message,
- // },
- // plugins: [
- // {
- // afterRender: (assetAvailableChartChart) => emptyAssetAvialabeChart(assetAvailableChartChart),
- // },
- // ],
- // });
- // }
- // }
-
function available_asset_chart(dataSet) {
var Asset_available_chart = document.getElementById("assetAvailableChart");
if (Asset_available_chart) {
- const ctx = Asset_available_chart.getContext('2d');
-
- // Load center icon image
- const centerImage = new Image();
- centerImage.src = "/static/horilla_theme/assets/img/icons/asset-chart.svg"; // Adjust path as needed
-
- var assetAvailableChartChart = new Chart(ctx, {
- type: "doughnut", // Changed from pie to doughnut
+ var assetAvailableChartChart = new Chart(Asset_available_chart, {
+ type: "pie",
data: {
labels: dataSet.labels,
- datasets: [{
- data: dataSet.dataset[0].data, // Assuming your dataset structure
- backgroundColor: dataSet.dataset[0].backgroundColor || ['#cfe9ff', '#ffc9de', '#e6ccff', '#ffeb99', '#d4edda'], // Default colors
- borderWidth: 0
- }],
+ datasets: dataSet.dataset,
emptyImageSrc: dataSet.emptyImageSrc,
message: dataSet.message,
},
- options: {
- cutout: '70%', // Creates the doughnut hole
- responsive: true,
- maintainAspectRatio: false,
- plugins: {
- legend: {
- position: 'bottom',
- labels: {
- usePointStyle: true,
- pointStyle: 'circle',
- padding: 20,
- font: {
- size: 12
- },
- color: '#000'
- }
- }
- }
- },
plugins: [
- {
- id: 'centerIcon',
- afterDraw(chart) {
- if (!centerImage.complete) return; // Wait till image is loaded
- const ctx = chart.ctx;
- const size = 70;
- const centerX = chart.getDatasetMeta(0).data[0].x; // Center X of the doughnut
- const centerY = chart.getDatasetMeta(0).data[0].y; // Center Y of the doughnut
- ctx.drawImage(
- centerImage,
- centerX - size / 2,
- centerY - size / 2,
- size,
- size
- );
- }
- },
{
afterRender: (assetAvailableChartChart) => emptyAssetAvialabeChart(assetAvailableChartChart),
- }
- ]
+ },
+ ],
});
}
}
- // function asset_category_chart(dataSet) {
- // var Asset_category_chart = document.getElementById("assetCategoryChart");
- // if (Asset_category_chart) {
- // var assetCategoryChart = new Chart(Asset_category_chart, {
- // type: "bar",
- // data: {
- // labels: dataSet.labels,
- // datasets: dataSet.dataset,
- // emptyImageSrc: dataSet.emptyImageSrc,
- // message: dataSet.message,
- // },
- // plugins: [
- // {
- // afterRender: (assetCategoryChart) => emptyAssetAvialabeChart(assetCategoryChart),
- // },
- // ],
- // });
- // }
- // }
function asset_category_chart(dataSet) {
- const ctx = document.getElementById('assetCategoryChart');
- if (!ctx) return;
-
- const chartCtx = ctx.getContext('2d');
- const labels = dataSet.labels || [];
-
- // Extract data from your existing dataset structure
- const datasets = dataSet.dataset || [];
- const values = datasets.length > 0 ? datasets[0].data || [] : [];
-
- // Different pastel colors for each item
- const colors = [
- '#a5b4fc',
- '#fca5a5',
- '#fcd34d',
- '#c084fc',
- '#7dd3fc',
- '#bef264',
- '#fdba74'
- ];
-
- const visibility = new Array(labels.length).fill(true);
-
- const chart = new Chart(chartCtx, {
- type: 'bar',
- data: {
- labels: labels,
- datasets: [{
- label: datasets.length > 0 ? datasets[0].label || 'Asset Count' : 'Asset Count',
- data: values,
- backgroundColor: colors,
- borderRadius: 20,
- barPercentage: 0.6,
- categoryPercentage: 0.6
- }]
- },
- options: {
- responsive: true,
- maintainAspectRatio: false,
- plugins: {
- legend: { display: false },
- tooltip: { enabled: true }
- },
- scales: {
- y: {
- beginAtZero: true,
- max: Math.max(...values) + 20 || 100,
- ticks: {
- stepSize: 5,
- color: '#6b7280',
- font: { size: 12 }
+ var Asset_category_chart = document.getElementById("assetCategoryChart");
+ if (Asset_category_chart) {
+ var assetCategoryChart = new Chart(Asset_category_chart, {
+ type: "bar",
+ data: {
+ labels: dataSet.labels,
+ datasets: dataSet.dataset,
+ emptyImageSrc: dataSet.emptyImageSrc,
+ message: dataSet.message,
},
- grid: {
- drawBorder: false,
- color: '#e5e7eb',
- display: true // Show Y-axis grid lines
- }
- },
- x: {
- ticks: { display: false },
- grid: { display: false },
- border: { display: true, color: '#d1d5db' }
- }
- }
- }
- });
-
- // Create legend dynamically
- const legendContainer = document.getElementById('assetCategoryLegend');
- if (legendContainer) {
- // Clear existing legend
- legendContainer.innerHTML = '';
-
- // Create legend items flowing naturally like "Joinings Per Month"
- const legendWrapper = document.createElement('div');
- legendWrapper.className = 'mt-4 flex justify-center flex-wrap gap-3 text-xs';
-
- labels.forEach((label, index) => {
- const legendItem = document.createElement('div');
- legendItem.className = 'flex items-center gap-2 cursor-pointer';
-
- const colorDot = document.createElement('span');
-
- colorDot.style.cssText = `
- background:${colors[index]}; transition: 0.3s;`;
- colorDot.className ='w-4 h-4 rounded-full inline-block';
-
- const labelText = document.createElement('span');
- labelText.textContent = label;
- labelText.style.cssText = 'font-size: 14px; color: #374151; font-weight: 400; transition: text-decoration 0.3s; white-space: nowrap;';
-
- legendItem.appendChild(colorDot);
- legendItem.appendChild(labelText);
- legendWrapper.appendChild(legendItem);
-
- // Add click event listener
- legendItem.addEventListener('click', () => {
- visibility[index] = !visibility[index];
-
- // Update chart data
- chart.data.datasets[0].data = values.map((val, i) => visibility[i] ? val : 0);
- chart.data.datasets[0].backgroundColor = colors.map((col, i) => visibility[i] ? col : '#e5e7eb');
- chart.update();
-
- // Update legend visuals
- colorDot.style.opacity = visibility[index] ? '1' : '0.4';
- labelText.style.textDecoration = visibility[index] ? 'none' : 'line-through';
+ plugins: [
+ {
+ afterRender: (assetCategoryChart) => emptyAssetAvialabeChart(assetCategoryChart),
+ },
+ ],
});
- });
-
- // Append the wrapper to the container
- legendContainer.appendChild(legendWrapper);
}
- }
+ }
$.ajax({
type: "GET",
diff --git a/asset/static/src/asset_category/assetCategoryView.js b/asset/static/src/asset_category/assetCategoryView.js
index ebbb492be..82ab8f9fc 100644
--- a/asset/static/src/asset_category/assetCategoryView.js
+++ b/asset/static/src/asset_category/assetCategoryView.js
@@ -28,7 +28,22 @@ function getCurrentLanguageCode(callback) {
if (allowedLanguageCodes.includes(languageCode)) {
callback(languageCode);
} else {
- callback("en");
+ $.ajax({
+ type: "GET",
+ url: "/employee/get-language-code/",
+ success: function (response) {
+ var ajaxLanguageCode = response.language_code;
+ $("#main-section-data").attr("data-lang", ajaxLanguageCode);
+ callback(
+ allowedLanguageCodes.includes(ajaxLanguageCode)
+ ? ajaxLanguageCode
+ : "en"
+ );
+ },
+ error: function () {
+ callback("en");
+ },
+ });
}
}
diff --git a/asset/templates/cbv/asset_category/detail_view_action.html b/asset/templates/cbv/asset_category/detail_view_action.html
new file mode 100644
index 000000000..658811c57
--- /dev/null
+++ b/asset/templates/cbv/asset_category/detail_view_action.html
@@ -0,0 +1,19 @@
+{% load i18n %}
+{% include 'generic/horilla_detailed_view.html'%}
+
+{% if messages %}
+
+ {% for message in messages %}
+
+
+{%if message.tags == "oh-alert--success" %}
+
+ {% endif %}
+ {% endfor %}
+
+{% endif %}
\ No newline at end of file
diff --git a/asset/templates/cbv/asset_history/assign_condition.html b/asset/templates/cbv/asset_history/assign_condition.html
index 44c5652c0..17606877d 100644
--- a/asset/templates/cbv/asset_history/assign_condition.html
+++ b/asset/templates/cbv/asset_history/assign_condition.html
@@ -12,5 +12,5 @@
style="width:40px;height:40px"
>
+ {% endfor %}
-{% endfor %}
diff --git a/asset/templates/cbv/asset_history/return_condition.html b/asset/templates/cbv/asset_history/return_condition.html
index 775fdfa05..8586a37e3 100644
--- a/asset/templates/cbv/asset_history/return_condition.html
+++ b/asset/templates/cbv/asset_history/return_condition.html
@@ -12,5 +12,5 @@
style="width:40px;height:40px"
>
+ {% endfor %}
-{% endfor %}
diff --git a/asset/templates/cbv/request_and_allocation/asset_detail_action.html b/asset/templates/cbv/request_and_allocation/asset_detail_action.html
index 08f97820f..341fc7ae6 100644
--- a/asset/templates/cbv/request_and_allocation/asset_detail_action.html
+++ b/asset/templates/cbv/request_and_allocation/asset_detail_action.html
@@ -1,26 +1,32 @@
-{% load static i18n %}
-{% if perms.asset.change_assetassignment %}
-
-
-
-{% else %}
- {% if not instance.return_request %}
-
-
-
+{% load i18n %}
+
+ {% if perms.asset.change_assetassignment or not instance.return_request %}
+
+ {% if perms.asset.change_assetassignment %}
+
+ {% else %}
+ {% if not instance.return_request %}
+
+ {% endif %}
+ {% endif %}
+
{% endif %}
-{% endif %}
+
diff --git a/asset/templates/cbv/request_and_allocation/asset_request_detail_action.html b/asset/templates/cbv/request_and_allocation/asset_request_detail_action.html
index faf2fd94e..c3638a843 100644
--- a/asset/templates/cbv/request_and_allocation/asset_request_detail_action.html
+++ b/asset/templates/cbv/request_and_allocation/asset_request_detail_action.html
@@ -1,30 +1,30 @@
{% load i18n %}
-{% if perms.asset.add_assetassignment %}
- {% if instance.asset_request_status == 'Requested' %}
-
-
-
-
- {% else %}
-
-
+
+ {% if perms.asset.add_assetassignment %}
+ {% if instance.asset_request_status == 'Requested' %}
+
+ {% endif %}
{% endif %}
-{% endif %}
+
diff --git a/asset/templates/cbv/request_and_allocation/detail_action_asset_allocation.html b/asset/templates/cbv/request_and_allocation/detail_action_asset_allocation.html
index 6509da891..30cbfdf2e 100644
--- a/asset/templates/cbv/request_and_allocation/detail_action_asset_allocation.html
+++ b/asset/templates/cbv/request_and_allocation/detail_action_asset_allocation.html
@@ -1,12 +1,15 @@
-{% load static i18n %}
-{% if perms.asset.change_assetassignment and not instance.return_status%}
-
-