mirror of
https://github.com/inventree/InvenTree
synced 2024-08-30 18:33:04 +00:00
Create simple label templates for stocklocation labels
This commit is contained in:
parent
d1d243fb14
commit
663a0a6165
@ -1,5 +1,106 @@
|
|||||||
|
import os
|
||||||
|
import shutil
|
||||||
|
import logging
|
||||||
|
|
||||||
|
from django.db.utils import IntegrityError
|
||||||
from django.apps import AppConfig
|
from django.apps import AppConfig
|
||||||
|
from django.conf import settings
|
||||||
|
|
||||||
|
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
class LabelConfig(AppConfig):
|
class LabelConfig(AppConfig):
|
||||||
name = 'label'
|
name = 'label'
|
||||||
|
|
||||||
|
def ready(self):
|
||||||
|
"""
|
||||||
|
This function is called whenever the label app is loaded
|
||||||
|
"""
|
||||||
|
|
||||||
|
self.create_stock_item_labels()
|
||||||
|
self.create_stock_location_labels()
|
||||||
|
|
||||||
|
def create_stock_item_labels(self):
|
||||||
|
"""
|
||||||
|
Create database entries for the default StockItemLabel templates,
|
||||||
|
if they do not already exist
|
||||||
|
"""
|
||||||
|
|
||||||
|
pass
|
||||||
|
|
||||||
|
def create_stock_location_labels(self):
|
||||||
|
"""
|
||||||
|
Create database entries for the default StockItemLocation templates,
|
||||||
|
if they do not already exist
|
||||||
|
"""
|
||||||
|
|
||||||
|
try:
|
||||||
|
from .models import StockLocationLabel
|
||||||
|
except:
|
||||||
|
# Database might not yet be ready
|
||||||
|
return
|
||||||
|
|
||||||
|
src_dir = os.path.join(
|
||||||
|
os.path.dirname(os.path.realpath(__file__)),
|
||||||
|
'templates',
|
||||||
|
'stocklocation',
|
||||||
|
)
|
||||||
|
|
||||||
|
dst_dir = os.path.join(
|
||||||
|
settings.MEDIA_ROOT,
|
||||||
|
'label',
|
||||||
|
'inventree',
|
||||||
|
'stocklocation',
|
||||||
|
)
|
||||||
|
|
||||||
|
if not os.path.exists(dst_dir):
|
||||||
|
logger.info(f"Creating missing directory: '{dst_dir}'")
|
||||||
|
os.makedirs(dst_dir, exist_ok=True)
|
||||||
|
|
||||||
|
labels = [
|
||||||
|
{
|
||||||
|
'file': 'qr.html',
|
||||||
|
'name': 'QR Code',
|
||||||
|
'description': 'Simple QR code label',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'file': 'qr_and_text.html',
|
||||||
|
'name': 'QR and text',
|
||||||
|
'description': 'Label with QR code and name of location',
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
|
for label in labels:
|
||||||
|
|
||||||
|
filename = os.path.join(
|
||||||
|
'label',
|
||||||
|
'inventree',
|
||||||
|
'stocklocation',
|
||||||
|
label['file'],
|
||||||
|
)
|
||||||
|
|
||||||
|
# Check if the file exists in the media directory
|
||||||
|
src_file = os.path.join(src_dir, label['file'])
|
||||||
|
dst_file = os.path.join(settings.MEDIA_ROOT, filename)
|
||||||
|
|
||||||
|
if not os.path.exists(dst_file):
|
||||||
|
logger.info(f"Copying label template '{dst_file}'")
|
||||||
|
shutil.copyfile(src_file, dst_file)
|
||||||
|
|
||||||
|
# Check if a label matching the template already exists
|
||||||
|
if StockLocationLabel.objects.filter(label=filename).exists():
|
||||||
|
continue
|
||||||
|
|
||||||
|
logger.info(f"Creating entry for StockLocationLabel '{label['name']}'")
|
||||||
|
|
||||||
|
try:
|
||||||
|
StockLocationLabel.objects.create(
|
||||||
|
name=label['name'],
|
||||||
|
description=label['description'],
|
||||||
|
label=filename,
|
||||||
|
filters='',
|
||||||
|
enabled=True
|
||||||
|
)
|
||||||
|
except IntegrityError:
|
||||||
|
pass
|
||||||
|
16
InvenTree/label/templates/stocklocation/qr.html
Normal file
16
InvenTree/label/templates/stocklocation/qr.html
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
<style>
|
||||||
|
@page {
|
||||||
|
width: 24mm;
|
||||||
|
height: 24mm;
|
||||||
|
padding: 1mm;
|
||||||
|
}
|
||||||
|
|
||||||
|
.qr {
|
||||||
|
margin: 2px;
|
||||||
|
width: 22mm;
|
||||||
|
height: 22mm;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<img class='qr' src="{{ label_tools.qr_code(location.barcode) }}"/>
|
37
InvenTree/label/templates/stocklocation/qr_and_text.html
Normal file
37
InvenTree/label/templates/stocklocation/qr_and_text.html
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
<style>
|
||||||
|
@page {
|
||||||
|
width: 75mm;
|
||||||
|
height: 24mm;
|
||||||
|
padding: 1mm;
|
||||||
|
}
|
||||||
|
|
||||||
|
.location {
|
||||||
|
padding: 5px;
|
||||||
|
font-weight: bold;
|
||||||
|
font-family: Arial, Helvetica, sans-serif;
|
||||||
|
height: 100%;
|
||||||
|
vertical-align: middle;
|
||||||
|
float: right;
|
||||||
|
display: inline;
|
||||||
|
font-size: 125%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.qr {
|
||||||
|
margin: 2px;
|
||||||
|
width: 22mm;
|
||||||
|
height: 22mm;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<img class='qr' src="{{ label_tools.qr_code(location.barcode) }}"/>
|
||||||
|
|
||||||
|
<div class='location'>
|
||||||
|
{{ location.name }}
|
||||||
|
<br>
|
||||||
|
<br>
|
||||||
|
<hr>
|
||||||
|
Location ID: {{ location.pk }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
Loading…
Reference in New Issue
Block a user