diff --git a/InvenTree/templates/js/translated/attachment.js b/InvenTree/templates/js/translated/attachment.js
index dd1fe31c66..53b1d90b6d 100644
--- a/InvenTree/templates/js/translated/attachment.js
+++ b/InvenTree/templates/js/translated/attachment.js
@@ -149,7 +149,7 @@ function loadAttachmentTable(url, options) {
var html = ` ${filename}`;
- return renderLink(html, value);
+ return renderLink(html, value, {download: true});
} else if (row.link) {
var html = ` ${row.link}`;
return renderLink(html, row.link);
diff --git a/InvenTree/templates/js/translated/stock.js b/InvenTree/templates/js/translated/stock.js
index f0b7b28a73..3a664b1f4d 100644
--- a/InvenTree/templates/js/translated/stock.js
+++ b/InvenTree/templates/js/translated/stock.js
@@ -1306,7 +1306,8 @@ function loadStockTestResultsTable(table, options) {
var html = value;
if (row.attachment) {
- html += ``;
+ var text = ``;
+ html += renderLink(text, row.attachment, {download: true});
}
return html;
diff --git a/InvenTree/templates/js/translated/tables.js b/InvenTree/templates/js/translated/tables.js
index a20978dd7d..2e40a6bbc5 100644
--- a/InvenTree/templates/js/translated/tables.js
+++ b/InvenTree/templates/js/translated/tables.js
@@ -92,6 +92,13 @@ function renderLink(text, url, options={}) {
var max_length = options.max_length || -1;
+ var extra = '';
+
+ if (options.download) {
+ var fn = url.split('/').at(-1);
+ extra += ` download='${fn}'`;
+ }
+
// Shorten the displayed length if required
if ((max_length > 0) && (text.length > max_length)) {
var slice_length = (max_length - 3) / 2;
@@ -102,7 +109,7 @@ function renderLink(text, url, options={}) {
text = `${text_start}...${text_end}`;
}
- return '' + text + '';
+ return `${text}`;
}