diff --git a/container/templates/container/container_type_detail.html b/container/templates/container/container_type_detail.html
index 81c4021..892490d 100644
--- a/container/templates/container/container_type_detail.html
+++ b/container/templates/container/container_type_detail.html
@@ -30,9 +30,6 @@
-
diff --git a/container/templates/container/container_type_form.html b/container/templates/container/container_type_form.html
new file mode 100644
index 0000000..02e26a7
--- /dev/null
+++ b/container/templates/container/container_type_form.html
@@ -0,0 +1,18 @@
+{% extends "base.html" %}
+{% load static %}
+
+{% block title %}Edit Container: {{ container.named_id }}{% endblock %}
+
+{% block content %}
+
+{% endblock content %}
diff --git a/container/templates/container/container_type_import.html b/container/templates/container/container_type_import.html
new file mode 100644
index 0000000..79620fc
--- /dev/null
+++ b/container/templates/container/container_type_import.html
@@ -0,0 +1,63 @@
+{% extends "base.html" %}
+{% load static %}
+
+{% block title %}Container Type Import{% endblock %}
+
+{% block content %}
+
+
+
+
+
+
Container Type Import: {{ import_file }}
+
+
+
+
+
+{% endblock content %}
\ No newline at end of file
diff --git a/container/templates/container/container_type_list.html b/container/templates/container/container_type_list.html
index fcc7d87..1d9390d 100644
--- a/container/templates/container/container_type_list.html
+++ b/container/templates/container/container_type_list.html
@@ -22,7 +22,7 @@
{% for ctype in container_type_list %}
- {{ ctype.named_id }} |
+ {{ ctype.named_id }} |
{{ ctype.description }} |
{% if ctype.width %}{{ ctype.width }}x{{ ctype.length }}x{{ ctype.height }}{% endif %} |
{% if ctype.inner_width %}{{ ctype.inner_width }}x{{ ctype.inner_length }}x{{ ctype.inner_height }}{% endif %} |
@@ -66,6 +66,9 @@
+ Container
+ Asset
+
diff --git a/container/urls.py b/container/urls.py
index b36ec76..e9a7d63 100644
--- a/container/urls.py
+++ b/container/urls.py
@@ -1,19 +1,21 @@
from django.urls import path
-from container.views import ContainerListView, ContainerUpdateView, ContainerCreateView, ContainerDetailView, ContainerDeleteView, ContainerPrintLabelView
-from container.views import ContainerTypeListView, ContainerTypeDetailView, ContainerTypeCreateView, ContainerTypeUpdateView, ContainerTypeDeleteView
+from container.views import ContainerListView, ContainerUpdateView, ContainerCreateView, ContainerDetailView, ContainerDeleteView, ContainerPrintLabelView, ContainerImportView
+from container.views import ContainerTypeListView, ContainerTypeDetailView, ContainerTypeCreateView, ContainerTypeUpdateView, ContainerTypeDeleteView, ContainerTypeImportView
app_name = 'container'
urlpatterns = [
path('', ContainerListView.as_view(), name='list'),
path('/', ContainerDetailView.as_view(), name='detail'),
path('add/', ContainerCreateView.as_view(), name='add'),
+ path('import/', ContainerImportView.as_view(), name='container_import'),
path('edit//', ContainerUpdateView.as_view(), name='update'),
path('label//', ContainerPrintLabelView.as_view(), name='print_label'),
path('delete//', ContainerDeleteView.as_view(), name='delete'),
path('type/', ContainerTypeListView.as_view(), name='container_type_list'),
path('type//', ContainerTypeDetailView.as_view(), name='container_type_detail'),
path('type/add/', ContainerTypeCreateView.as_view(), name='container_type_add'),
+ path('type/import/', ContainerTypeImportView.as_view(), name='container_type_import'),
path('type/edit//', ContainerTypeUpdateView.as_view(), name='container_type_update'),
path('type/delete//', ContainerTypeDeleteView.as_view(), name='container_type_delete'),
]
diff --git a/container/views.py b/container/views.py
index 300933c..fdae1ef 100644
--- a/container/views.py
+++ b/container/views.py
@@ -1,6 +1,7 @@
from django.views import generic
from .models import Container, ContainerType
-import logging, json
+import logging, json, re
+from django.core.exceptions import ObjectDoesNotExist
logger = logging.getLogger(__name__)
@@ -29,6 +30,23 @@ class ContainerCreateView(generic.CreateView):
return super().form_valid(form)
+class ContainerImportView(generic.TemplateView):
+ template_name = 'container_import.html'
+
+ def get_context_data(self, **kwargs):
+ context = super().get_context_data(**kwargs)
+ if 'start_import' in self.request.POST:
+ context['import_file'] = self.request.POST['import_file']
+
+ return context
+
+ def get(self, *args, **kwargs):
+ return super().get(self.request, args, **kwargs)
+
+ def post(self):
+ return super().render_to_response(self)
+
+
class ContainerUpdateView(generic.UpdateView):
model = Container
# template_name = 'container/detail.html'
@@ -87,8 +105,8 @@ class ContainerPrintLabelView(generic.DetailView):
context['barcode_img'] = pil_to_html_imgdata(label_image, fmt='PNG')
context['logs'].append('Image created')
if num_copies > 0:
- #from brother_ql.devicedependent import models, label_type_specs, label_sizes
- #from brother_ql.devicedependent import ENDLESS_LABEL, DIE_CUT_LABEL, ROUND_DIE_CUT_LABEL
+ # from brother_ql.devicedependent import models, label_type_specs, label_sizes
+ # from brother_ql.devicedependent import ENDLESS_LABEL, DIE_CUT_LABEL, ROUND_DIE_CUT_LABEL
from brother_ql import BrotherQLRaster, create_label
from brother_ql.backends import backend_factory, guess_backend
@@ -127,7 +145,7 @@ class ContainerPrintLabelView(generic.DetailView):
be_class = backend_factory(selected_backend)['backend_class']
be = be_class(config['PRINTER']['PRINTER'])
context['logs'].append('Got backend driver')
- for i in range(1,num_copies):
+ for i in range(1, num_copies):
be.write(qlr.data)
context['logs'].append('Data sent to printer')
@@ -163,7 +181,7 @@ class ContainerTypeDetailView(generic.DetailView):
class ContainerTypeCreateView(generic.CreateView):
model = ContainerType
- # template_name = 'container/detail.html'
+ template_name = 'container/container_type_form.html'
fields = ['named_id', 'description', 'width', 'length', 'height', 'inner_width', 'inner_length', 'inner_height',
'has_cover', 'contains_container']
@@ -176,6 +194,7 @@ class ContainerTypeCreateView(generic.CreateView):
class ContainerTypeUpdateView(generic.UpdateView):
model = ContainerType
# template_name = 'container/detail.html'
+ template_name = 'container/container_type_form.html'
fields = ['named_id', 'description', 'width', 'length', 'height', 'inner_width', 'inner_length', 'inner_height',
'has_cover', 'contains_container']
@@ -186,3 +205,95 @@ class ContainerTypeUpdateView(generic.UpdateView):
class ContainerTypeDeleteView(generic.DetailView):
model = ContainerType
+
+
+class ContainerTypeImportView(generic.TemplateView):
+ template_name = 'container/container_type_import.html'
+
+ def get_context_data(self, **kwargs):
+ # print('get_context_data')
+ context = super().get_context_data(**kwargs)
+ context['import_file'] = self.request.FILES['import_file'] if 'import_file' in self.request.FILES else ''
+ if context['import_file'] != '':
+ # if 'show-cmd' in self.request.POST:
+ # print('Show button pressed')
+ context['filename'] = self.request.FILES['import_file'].name
+ context['filesize'] = self.request.FILES['import_file'].size
+ context['content_type'] = self.request.FILES['import_file'].content_type
+
+ import openpyxl as excel
+ workbook = excel.open(self.request.FILES['import_file'])
+ sheet = workbook.active
+ sheet_data = []
+ row_num = 1
+ for row in sheet.values:
+ row_data = [row_num]
+ row_num = row_num + 1
+ for col in row:
+ row_data.append(col if col is not None else '')
+ sheet_data.append(row_data)
+
+ context['excel_data'] = sheet_data
+
+ return context
+
+ def post(self, request):
+ # print('POST method executed')
+ if 'import-cmd' in request.POST:
+ # print('import button pressed')
+ first_data_row = int(request.POST['first_data_row']) if 'first_data_row' in request.POST else 0
+ # context['first_data_row'] = first_data_row
+ # print('first_data_row=%d' % first_data_row)
+ p = re.compile(r'^data_(\d+)_(\d+)$')
+ import_data = {}
+ for key in request.POST:
+ match = p.match(key)
+ if match:
+ key_row, key_col = match.group(1, 2)
+ row_num = int(key_row)
+ col_num = int(key_col)
+ if row_num >= first_data_row:
+ value = request.POST[key]
+ if row_num not in import_data:
+ import_data[row_num] = {}
+ import_data[row_num][col_num] = value
+ # print('Value row=%d, col=%d, value=%s' % (row_num, col_num, value))
+ for col in import_data:
+ c7 = import_data[col][7]
+ c12 = import_data[col][12]
+ has_cover = True if c7 == 'j' or c7 == 'J' or c7 == 'y' or c7 == 'Y' else False
+ contains_container = True if c12 == 'j' or c12 == 'J' or c12 == 'y' or c12 == 'Y' else False
+ try:
+ ct = ContainerType.objects.get(named_id=import_data[col][2])
+ # Update entry
+ ct.description = None if import_data[col][3] == '' else import_data[col][3]
+ ct.width = None if import_data[col][4] == '' else import_data[col][4]
+ ct.length = None if import_data[col][5] == '' else import_data[col][5]
+ ct.height = None if import_data[col][6] == '' else import_data[col][6]
+ ct.inner_width = None if import_data[col][8] == '' else import_data[col][8]
+ ct.inner_length = None if import_data[col][9] == '' else import_data[col][9]
+ ct.inner_height = None if import_data[col][10] == '' else import_data[col][10]
+ ct.has_cover = has_cover
+ ct.contains_container = contains_container
+ ct.changed_by_id = request.user.id
+ # print('Updated %s' % import_data[col][2])
+ except ObjectDoesNotExist:
+ # Create a new entry
+ ct = ContainerType.objects.create(
+ named_id=import_data[col][2],
+ description=None if import_data[col][3] == '' else import_data[col][3],
+ width=None if import_data[col][4] == '' else import_data[col][4],
+ length=None if import_data[col][5] == '' else import_data[col][5],
+ height=None if import_data[col][6] == '' else import_data[col][6],
+ inner_width=None if import_data[col][8] == '' else import_data[col][8],
+ inner_length=None if import_data[col][9] == '' else import_data[col][9],
+ inner_height=None if import_data[col][10] == '' else import_data[col][10],
+ has_cover=has_cover,
+ contains_container=contains_container,
+ created_by_id=request.user.id,
+ changed_by_id=request.user.id
+ )
+ # print('Created %s' % import_data[col][2])
+ finally:
+ ct.save()
+ return super().get(request)
diff --git a/homelog/settings.py b/homelog/settings.py
index 394dee5..1bec30f 100644
--- a/homelog/settings.py
+++ b/homelog/settings.py
@@ -11,6 +11,7 @@ https://docs.djangoproject.com/en/3.2/ref/settings/
"""
from pathlib import Path
+import os
# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent
@@ -128,3 +129,6 @@ STATICFILES_DIRS = [
# https://docs.djangoproject.com/en/3.2/ref/settings/#default-auto-field
DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
+
+MEDIA_URL = '/media/'
+MEDIA_ROOT = os.path.join(BASE_DIR, 'media')