Add user settings to remember the last/favourite label template (#4938)

* Add user settings to remember the last/favourite label template

Fixes #4932

* Remove settings_value from translated templates

Thanks Oliver for the hint!
This commit is contained in:
Miklós Márton 2023-06-01 12:01:48 +02:00 committed by GitHub
parent 18d9ecd0f4
commit 46a808c064
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 56 additions and 7 deletions

View File

@ -2100,7 +2100,35 @@ class InvenTreeUserSetting(BaseInvenTreeSetting):
MinValueValidator(0),
],
'default': 100,
}
},
'DEFAULT_PART_LABEL_TEMPLATE': {
'name': _('Default part label template'),
'description': _('The part label template to be automatically selected'),
'validator': [
int,
],
'default': '',
},
'DEFAULT_ITEM_LABEL_TEMPLATE': {
'name': _('Default stock item template'),
'description': _('The stock item label template to be automatically selected'),
'validator': [
int,
],
'default': '',
},
'DEFAULT_LOCATION_LABEL_TEMPLATE': {
'name': _('Default stock location label template'),
'description': _('The stock location label template to be automatically selected'),
'validator': [
int,
],
'default': '',
},
}
typ = 'user'

View File

@ -148,6 +148,8 @@ class LabelPrintMixin(LabelFilterMixin):
def get(self, request, *args, **kwargs):
"""Perform a GET request against this endpoint to print labels"""
common.models.InvenTreeUserSetting.set_setting('DEFAULT_' + self.ITEM_KEY.upper() + '_LABEL_TEMPLATE',
self.get_object().pk, None, user=request.user)
return self.print(request, self.get_items())
def get_plugin(self, request):

View File

@ -1,5 +1,6 @@
{% load i18n %}
{% load static %}
{% load inventree_extras %}
/* globals
attachSelect,
closeModal,
@ -29,7 +30,6 @@
* (via AJAX) from the server.
*/
function selectLabel(labels, items, options={}) {
// Array of available plugins for label printing
var plugins = [];
@ -78,7 +78,6 @@ function selectLabel(labels, items, options={}) {
}
var modal = options.modal || '#modal-form';
var label_list = makeOptionsList(
labels,
function(item) {
@ -92,6 +91,16 @@ function selectLabel(labels, items, options={}) {
},
function(item) {
return item.pk;
},
null,
function(item) {
if (options.key == 'part')
return item.key == user_settings.DEFAULT_PART_LABEL_TEMPLATE;
else if (options.key == 'location')
return item.key == user_settings.DEFAULT_LOCATION_LABEL_TEMPLATE;
else if (options.key == 'stock')
return item.key == user_settings.DEFAULT_STOCK_LABEL_TEMPLATE;
return '';
}
);
@ -214,6 +223,7 @@ function printLabels(options) {
},
plural_name: options.plural_name,
singular_name: options.singular_name,
key: options.key,
});
}
});

View File

@ -174,7 +174,7 @@ function enableSubmitButton(options, enable=true) {
}
function makeOption(text, value, title) {
function makeOption(text, value, title, selected) {
/* Format an option for a select element
*/
@ -184,6 +184,9 @@ function makeOption(text, value, title) {
html += ` title='${title}'`;
}
if (selected) {
html += 'selected="selected"';
}
html += `>${text}</option>`;
return html;
@ -200,8 +203,9 @@ function makeOption(text, value, title) {
* - textFunc: Function which takes an element and generates the text to be displayed
* - valueFunc: optional function which takes an element and generates the value
* - titleFunc: optional function which takes an element and generates a title
* - selectedFunc: optional function which takes an element and generate true if the given item should be added as selected
*/
function makeOptionsList(elements, textFunc, valueFunc, titleFunc) {
function makeOptionsList(elements, textFunc, valueFunc, titleFunc, selectedFunc) {
var options = [];
@ -210,6 +214,7 @@ function makeOptionsList(elements, textFunc, valueFunc, titleFunc) {
var text = textFunc(element);
var value = null;
var title = null;
var selected = null;
if (valueFunc) {
value = valueFunc(element);
@ -221,7 +226,11 @@ function makeOptionsList(elements, textFunc, valueFunc, titleFunc) {
title = titleFunc(element);
}
options.push(makeOption(text, value, title));
if (selectedFunc) {
selected = selectedFunc(element);
}
options.push(makeOption(text, value, title, selected));
});
return options;