From eeca3effeed6ddf9ae9a0fd858d62158c886ad24 Mon Sep 17 00:00:00 2001 From: Ben Charlton Date: Fri, 21 Aug 2020 16:20:33 +0100 Subject: [PATCH 01/10] Fix disabled form item from preventing stock location moves for items with serial numbers --- InvenTree/stock/templates/stock/stock_adjust.html | 1 - 1 file changed, 1 deletion(-) diff --git a/InvenTree/stock/templates/stock/stock_adjust.html b/InvenTree/stock/templates/stock/stock_adjust.html index 8385fb5039..a72407f735 100644 --- a/InvenTree/stock/templates/stock/stock_adjust.html +++ b/InvenTree/stock/templates/stock/stock_adjust.html @@ -32,7 +32,6 @@ {% if item.error %}
{{ item.error }} From 8f1af0f5f98ac5a3110905c9b85706781e4fe030 Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Sun, 23 Aug 2020 09:07:15 +1000 Subject: [PATCH 02/10] Add "enabled" field to Label class - Only list labels which are enabled - Allows labels to be hidden / disabled without being deleted --- InvenTree/label/admin.py | 2 +- .../migrations/0002_stockitemlabel_enabled.py | 18 ++++++++++++++++++ InvenTree/label/models.py | 6 ++++++ InvenTree/stock/views.py | 3 ++- 4 files changed, 27 insertions(+), 2 deletions(-) create mode 100644 InvenTree/label/migrations/0002_stockitemlabel_enabled.py diff --git a/InvenTree/label/admin.py b/InvenTree/label/admin.py index bc03e122b6..71399efabb 100644 --- a/InvenTree/label/admin.py +++ b/InvenTree/label/admin.py @@ -8,7 +8,7 @@ from .models import StockItemLabel class StockItemLabelAdmin(admin.ModelAdmin): - list_display = ('name', 'description', 'label') + list_display = ('name', 'description', 'label', 'filters', 'enabled') admin.site.register(StockItemLabel, StockItemLabelAdmin) diff --git a/InvenTree/label/migrations/0002_stockitemlabel_enabled.py b/InvenTree/label/migrations/0002_stockitemlabel_enabled.py new file mode 100644 index 0000000000..684299e184 --- /dev/null +++ b/InvenTree/label/migrations/0002_stockitemlabel_enabled.py @@ -0,0 +1,18 @@ +# Generated by Django 3.0.7 on 2020-08-22 23:04 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('label', '0001_initial'), + ] + + operations = [ + migrations.AddField( + model_name='stockitemlabel', + name='enabled', + field=models.BooleanField(default=True, help_text='Label template is enabled', verbose_name='Enabled'), + ), + ] diff --git a/InvenTree/label/models.py b/InvenTree/label/models.py index 7d481327a9..49b07572a8 100644 --- a/InvenTree/label/models.py +++ b/InvenTree/label/models.py @@ -70,6 +70,12 @@ class LabelTemplate(models.Model): validators=[validateFilterString] ) + enabled = models.BooleanField( + default=True, + help_text=_('Label template is enabled'), + verbose_name=_('Enabled') + ) + def get_record_data(self, items): """ Return a list of dict objects, one for each item. diff --git a/InvenTree/stock/views.py b/InvenTree/stock/views.py index 1c9b78a3f0..faad9db324 100644 --- a/InvenTree/stock/views.py +++ b/InvenTree/stock/views.py @@ -310,7 +310,8 @@ class StockItemSelectLabels(AjaxView): labels = [] - for label in StockItemLabel.objects.all(): + # Construct a list of StockItemLabel objects which are enabled, and the filters match the selected StockItem + for label in StockItemLabel.objects.filter(enabled=True): if label.matches_stock_item(item): labels.append(label) From 771b2117c407aa2dfb2436970df3b491410b16ec Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Sun, 23 Aug 2020 09:08:24 +1000 Subject: [PATCH 03/10] Remove duplicated function --- InvenTree/report/models.py | 55 ++------------------------------------ 1 file changed, 2 insertions(+), 53 deletions(-) diff --git a/InvenTree/report/models.py b/InvenTree/report/models.py index 697f5691d5..c85f8e0f57 100644 --- a/InvenTree/report/models.py +++ b/InvenTree/report/models.py @@ -16,6 +16,8 @@ from django.conf import settings from django.core.validators import FileExtensionValidator from django.core.exceptions import ValidationError +from InvenTree.helpers import validateFilterString + from django.utils.translation import gettext_lazy as _ from part import models as PartModels @@ -55,59 +57,6 @@ def rename_template(instance, filename): return os.path.join('report', 'report_template', instance.getSubdir(), filename) -def validateFilterString(value): - """ - Validate that a provided filter string looks like a list of comma-separated key=value pairs - - These should nominally match to a valid database filter based on the model being filtered. - - e.g. "category=6, IPN=12" - e.g. "part__name=widget" - - The ReportTemplate class uses the filter string to work out which items a given report applies to. - For example, an acceptance test report template might only apply to stock items with a given IPN, - so the string could be set to: - - filters = "IPN = ACME0001" - - Returns a map of key:value pairs - """ - - # Empty results map - results = {} - - value = str(value).strip() - - if not value or len(value) == 0: - return results - - groups = value.split(',') - - for group in groups: - group = group.strip() - - pair = group.split('=') - - if not len(pair) == 2: - raise ValidationError( - "Invalid group: {g}".format(g=group) - ) - - k, v = pair - - k = k.strip() - v = v.strip() - - if not k or not v: - raise ValidationError( - "Invalid group: {g}".format(g=group) - ) - - results[k] = v - - return results - - class WeasyprintReportMixin(WeasyTemplateResponseMixin): """ Class for rendering a HTML template to a PDF. From 116d966d2912524eedb4ef5d7e1ba9454fabd7de Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Sun, 23 Aug 2020 09:10:56 +1000 Subject: [PATCH 04/10] Delete "ReportTemplate" class --- InvenTree/report/admin.py | 4 +--- .../migrations/0002_delete_reporttemplate.py | 16 ++++++++++++++++ InvenTree/report/models.py | 9 --------- 3 files changed, 17 insertions(+), 12 deletions(-) create mode 100644 InvenTree/report/migrations/0002_delete_reporttemplate.py diff --git a/InvenTree/report/admin.py b/InvenTree/report/admin.py index 4183e8ee83..9ec3c5c8f8 100644 --- a/InvenTree/report/admin.py +++ b/InvenTree/report/admin.py @@ -3,8 +3,7 @@ from __future__ import unicode_literals from django.contrib import admin -from .models import ReportTemplate, ReportAsset -from .models import TestReport +from .models import TestReport, ReportAsset class ReportTemplateAdmin(admin.ModelAdmin): @@ -17,6 +16,5 @@ class ReportAssetAdmin(admin.ModelAdmin): list_display = ('asset', 'description') -admin.site.register(ReportTemplate, ReportTemplateAdmin) admin.site.register(TestReport, ReportTemplateAdmin) admin.site.register(ReportAsset, ReportAssetAdmin) diff --git a/InvenTree/report/migrations/0002_delete_reporttemplate.py b/InvenTree/report/migrations/0002_delete_reporttemplate.py new file mode 100644 index 0000000000..7abfe72c59 --- /dev/null +++ b/InvenTree/report/migrations/0002_delete_reporttemplate.py @@ -0,0 +1,16 @@ +# Generated by Django 3.0.7 on 2020-08-22 23:10 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('report', '0001_initial'), + ] + + operations = [ + migrations.DeleteModel( + name='ReportTemplate', + ), + ] diff --git a/InvenTree/report/models.py b/InvenTree/report/models.py index c85f8e0f57..649c2d27cc 100644 --- a/InvenTree/report/models.py +++ b/InvenTree/report/models.py @@ -151,15 +151,6 @@ class ReportTemplateBase(models.Model): abstract = True -class ReportTemplate(ReportTemplateBase): - """ - A simple reporting template which is used to upload template files, - which can then be used in other concrete template classes. - """ - - pass - - class PartFilterMixin(models.Model): """ A model mixin used for matching a report type against a Part object. From f9149d041efb68dc56964d2d505526342f38ecf8 Mon Sep 17 00:00:00 2001 From: Radek Hladik Date: Sun, 23 Aug 2020 10:56:29 +0200 Subject: [PATCH 05/10] Collapse navbar on small screen --- InvenTree/templates/navbar.html | 103 +++++++++++++++++--------------- 1 file changed, 56 insertions(+), 47 deletions(-) diff --git a/InvenTree/templates/navbar.html b/InvenTree/templates/navbar.html index 0a231044cd..3d6bcd0734 100644 --- a/InvenTree/templates/navbar.html +++ b/InvenTree/templates/navbar.html @@ -1,56 +1,65 @@ {% load static %} {% load i18n %} - -