it: каталог моделей в popup и возврат к добавлению экземпляров.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-10-13 11:41:22 +03:00
parent f2e9129a77
commit a3356cdd90
4 changed files with 159 additions and 18 deletions
+30
View File
@@ -152,6 +152,36 @@ class ItManagerEquipmentTests(TestCase):
self.assertContains(r, 'role="dialog"')
self.assertNotContains(r, 'id="it-equipment-panel-overlay"')
def test_models_catalog_is_popup(self):
r = self.client.get('/it-manager/')
self.assertContains(r, 'id="it-equipment-models-panel"')
self.assertContains(r, 'it-equipment-models-modal-title')
self.assertContains(r, 'itModelsOpenFromEquipment')
self.assertNotContains(r, 'id="it-equipment-models-panel-overlay"')
def test_model_create_returns_to_equipment_popup(self):
r = self.client.post('/it-manager/equipment/models/create/', {
'equipment_type': 'laptop',
'name': 'Latitude 5440',
'return_to': 'equipment',
}, HTTP_HX_REQUEST='true')
self.assertEqual(r.status_code, 200)
model = EquipmentModel.objects.get(name='Latitude 5440')
self.assertContains(r, 'data-it-equipment-open="1"')
self.assertContains(r, f'data-it-select-model-id="{model.pk}"')
self.assertNotContains(r, 'data-it-models-open="1"')
def test_model_create_error_reopens_models_popup(self):
r = self.client.post('/it-manager/equipment/models/create/', {
'equipment_type': 'laptop',
'name': '',
'return_to': 'equipment',
}, HTTP_HX_REQUEST='true')
self.assertEqual(r.status_code, 200)
self.assertContains(r, 'data-it-models-open="1"')
self.assertContains(r, 'name="return_to"')
self.assertContains(r, 'it-equipment-models-modal-title')
def test_bulk_create_error_reopens_popup(self):
r = self.client.post('/it-manager/equipment/bulk-create/', {
'serial_numbers': 'SN-X',
+9 -2
View File
@@ -589,12 +589,13 @@ def equipment_model_create_view(request):
return HttpResponseForbidden()
context_extra = {}
return_to = (request.POST.get('return_to') or '').strip()
if request.method == 'POST':
equipment_type_id = _resolve_directory('equipment_type', request.POST.get('equipment_type', ''))
name = request.POST.get('name', '').strip()
if equipment_type_id and name:
warranty_months = request.POST.get('warranty_months', '').strip()
EquipmentModel.objects.get_or_create(
model, _created = EquipmentModel.objects.get_or_create(
equipment_type_id=equipment_type_id,
brand_id=request.POST.get('brand_id') or None,
name=name,
@@ -603,8 +604,14 @@ def equipment_model_create_view(request):
'notes': request.POST.get('notes', '').strip(),
},
)
if return_to == 'equipment':
context_extra['it_equipment_open'] = True
context_extra['it_select_model_id'] = model.pk
else:
context_extra['equipment_form_error'] = 'Вкажіть тип і назву моделі.'
context_extra['equipment_model_form_error'] = 'Вкажіть тип і назву моделі.'
context_extra['it_models_open'] = True
if return_to:
context_extra['it_models_return_to'] = return_to
context = _it_manager_context(request)
context['it_active_tab'] = 'equipment'