Files
ACORE/apps/it_manager/models/label_template.py
T

118 lines
3.0 KiB
Python

from django.conf import settings
from django.db import models
DEFAULT_LABEL_LAYOUT = [
{
'id': 'qr',
'type': 'qr',
'x_mm': 2.0,
'y_mm': 2.0,
'w_mm': 22.0,
'h_mm': 22.0,
'font_pt': 9,
'bold': False,
'align': 'left',
'text': '',
},
{
'id': 'model',
'type': 'model',
'x_mm': 26.0,
'y_mm': 2.0,
'w_mm': 40.0,
'h_mm': 8.0,
'font_pt': 10,
'bold': True,
'align': 'left',
'text': '',
},
{
'id': 'type',
'type': 'type',
'x_mm': 26.0,
'y_mm': 10.0,
'w_mm': 40.0,
'h_mm': 5.0,
'font_pt': 8,
'bold': False,
'align': 'left',
'text': '',
},
{
'id': 'inventory',
'type': 'inventory',
'x_mm': 26.0,
'y_mm': 15.5,
'w_mm': 40.0,
'h_mm': 5.0,
'font_pt': 10,
'bold': False,
'align': 'left',
'text': '',
},
{
'id': 'serial',
'type': 'serial',
'x_mm': 26.0,
'y_mm': 21.0,
'w_mm': 40.0,
'h_mm': 4.0,
'font_pt': 8,
'bold': False,
'align': 'left',
'text': '',
},
{
'id': 'ean',
'type': 'ean13',
'x_mm': 2.0,
'y_mm': 26.0,
'w_mm': 64.0,
'h_mm': 14.0,
'font_pt': 8,
'bold': False,
'align': 'center',
'text': '',
},
]
class EquipmentLabelTemplate(models.Model):
"""Общий шаблон инвентарной этикетки (singleton code=default)."""
code = models.SlugField('Код', max_length=40, unique=True, default='default')
name = models.CharField('Название', max_length=100, default='Этикетка оборудования')
width_mm = models.FloatField('Ширина (мм)', default=70.0)
height_mm = models.FloatField('Высота (мм)', default=42.0)
layout = models.JSONField('Блоки', default=list, blank=True)
updated_at = models.DateTimeField(auto_now=True)
updated_by = models.ForeignKey(
settings.AUTH_USER_MODEL, on_delete=models.SET_NULL,
null=True, blank=True, related_name='+',
verbose_name='Кто обновил',
)
class Meta:
verbose_name = 'Шаблон этикетки'
verbose_name_plural = 'Шаблоны этикеток'
def __str__(self):
return self.name
@classmethod
def get_default(cls):
obj, created = cls.objects.get_or_create(
code='default',
defaults={
'name': 'Этикетка оборудования',
'width_mm': 70.0,
'height_mm': 42.0,
'layout': list(DEFAULT_LABEL_LAYOUT),
},
)
if not created and not obj.layout:
obj.layout = list(DEFAULT_LABEL_LAYOUT)
obj.save(update_fields=['layout'])
return obj