AD integration, Mattermost client rewrite, Equipment brand to Directory

- ad_connector: full Django→AD provisioning via ldap3 — LDAP client,
  sync service (create/update/rename CN/enable-disable), Celery tasks,
  signals (auto-create with panel password, attribute updates, password
  sync, block/unblock), sync_users_to_ad management command
- mattermost_connector: rewrite service on mattermostautodriver/httpx,
  fix bare except in username generation (catch ResourceNotFound),
  format_html args instead of interpolation
- it_manager: Equipment.brand CharField → FK to core.Directory
  (equipment_brand type) with data migration
- add missing employees is_staff migration, add requirements.txt

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-02 16:01:44 +03:00
parent faa06b9f82
commit 5008ba737f
17 changed files with 1017 additions and 267 deletions
+5 -5
View File
@@ -85,10 +85,10 @@ class EquipmentAdmin(ModelAdmin):
'status_display', 'assigned_to', 'location',
'warranty_display', 'updated_at',
]
list_filter = ['equipment_type', 'status', 'location__location_type']
search_fields = ['brand', 'model', 'serial_number', 'inventory_number', 'notes']
list_select_related = ['assigned_to', 'location']
ordering = ['equipment_type', 'brand', 'model']
list_filter = ['equipment_type', 'status', 'location__location_type', 'brand']
search_fields = ['brand__name', 'model', 'serial_number', 'inventory_number', 'notes']
list_select_related = ['assigned_to', 'location', 'brand']
ordering = ['equipment_type', 'brand__name', 'model']
readonly_fields = ['created_at', 'updated_at', 'warranty_display']
@@ -174,7 +174,7 @@ class ConsumableAdmin(ModelAdmin):
]
list_filter = ['consumable_type', 'status', 'color']
search_fields = ['brand', 'model_number', 'notes',
'equipment__brand', 'equipment__model']
'equipment__brand__name', 'equipment__model']
list_select_related = ['equipment', 'location']
ordering = ['consumable_type', 'color', 'brand']