d54f6fbe42
Co-authored-by: Cursor <cursoragent@cursor.com>
118 lines
3.0 KiB
Python
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
|