it_manager/locations: редактор шаблона этикеток, раздельная печать QR/EAN и карточка поставщика.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-10-07 16:40:48 +03:00
parent 82ad90c661
commit d54f6fbe42
18 changed files with 1192 additions and 66 deletions
+58 -1
View File
@@ -436,17 +436,74 @@ class ItManagerEquipmentTests(TestCase):
self.assertEqual(len(ean), 13)
self.assertTrue(ean.startswith('200'))
r = self.client.get(f'/it-manager/equipment/labels/?ids={eq.pk}')
r = self.client.get(f'/it-manager/equipment/labels/?ids={eq.pk}&codes=both')
self.assertEqual(r.status_code, 200)
self.assertContains(r, 'INV-LBL-1')
self.assertContains(r, 'data:image/png;base64,')
self.assertContains(r, ean)
r_qr = self.client.get(f'/it-manager/equipment/labels/?ids={eq.pk}&codes=qr')
self.assertEqual(r_qr.status_code, 200)
self.assertContains(r_qr, 'INV-LBL-1')
self.assertNotContains(r_qr, f'alt="{ean}"')
r_ean = self.client.get(f'/it-manager/equipment/labels/?ids={eq.pk}&codes=ean')
self.assertEqual(r_ean.status_code, 200)
self.assertContains(r_ean, ean)
self.assertNotContains(r_ean, f'alt="INV-LBL-1"')
r2 = self.client.get('/it-manager/', {'tab': 'equipment', 'q': ean})
self.assertEqual(r2.status_code, 200)
serials = [e.serial_number for e in r2.context['equipment_page']]
self.assertIn('LBL-SN-1', serials)
def test_label_template_editor(self):
import json
from apps.it_manager.models import EquipmentLabelTemplate
r = self.client.get('/it-manager/equipment/labels/template/')
self.assertEqual(r.status_code, 200)
self.assertContains(r, 'Шаблон этикетки')
tmpl = EquipmentLabelTemplate.get_default()
payload = {
'width_mm': 80,
'height_mm': 50,
'layout': [
{
'id': 'qr1', 'type': 'qr',
'x_mm': 3, 'y_mm': 3, 'w_mm': 20, 'h_mm': 20,
'font_pt': 9, 'bold': False, 'align': 'left', 'text': '',
},
{
'id': 'm1', 'type': 'model',
'x_mm': 26, 'y_mm': 3, 'w_mm': 40, 'h_mm': 8,
'font_pt': 10, 'bold': True, 'align': 'left', 'text': '',
},
],
}
r_save = self.client.post(
'/it-manager/equipment/labels/template/',
data=json.dumps(payload),
content_type='application/json',
)
self.assertEqual(r_save.status_code, 200)
data = r_save.json()
self.assertTrue(data.get('ok'))
tmpl.refresh_from_db()
self.assertEqual(tmpl.width_mm, 80)
self.assertEqual(len(tmpl.layout), 2)
outsider = make_employee(username='no-it-labels')
client2 = Client()
login_2fa(client2, outsider)
forbidden = client2.get('/it-manager/equipment/labels/template/')
self.assertIn(forbidden.status_code, (403, 302, 200))
if forbidden.status_code == 200:
# deny_section_access может вернуть dashboard-фрагмент
self.assertNotContains(forbidden, 'label-canvas')
def test_assignment_history_visible_in_card(self):
equipment = make_equipment(serial_number='HIST-UI-1')
emp = make_employee(first_name='Иван', last_name='Историков')