Optimiser la vue zones des équipements
Some checks are pending
CI - Tests et Syntax / lint-and-test (push) Waiting to run
Some checks are pending
CI - Tests et Syntax / lint-and-test (push) Waiting to run
This commit is contained in:
parent
c978be2e70
commit
0a7ec477fd
1 changed files with 14 additions and 5 deletions
|
|
@ -9,6 +9,7 @@ from ..core.models.maintenance import Lot, Intervention
|
|||
from ..core.models.planning import Meter, MeterReading, Consumable, EquipmentConsumable, ScheduledTask
|
||||
from app_new.constants import EQUIPMENT_STATUSES
|
||||
from app_new.utils import format_status, status_badge_class
|
||||
from sqlalchemy.orm import selectinload, joinedload
|
||||
|
||||
def _empty_to_none(v):
|
||||
"""Convertit une chaîne vide en None."""
|
||||
|
|
@ -58,10 +59,17 @@ def index():
|
|||
# agrégées. Les groupes parents sans salle sont ignorés afin de ne
|
||||
# pas compter deux fois leurs groupes localisés.
|
||||
grouped = {}
|
||||
rows = Equipment.query.filter_by(is_deleted=False).all()
|
||||
rows = (Equipment.query.options(
|
||||
joinedload(Equipment.room).joinedload(Room.zone),
|
||||
joinedload(Equipment.room).joinedload(Room.building),
|
||||
joinedload(Equipment.category),
|
||||
selectinload(Equipment.children),
|
||||
joinedload(Equipment.parent).joinedload(Equipment.category),
|
||||
joinedload(Equipment.parent).joinedload(Equipment.room),
|
||||
).filter_by(is_deleted=False).all())
|
||||
for eq in rows:
|
||||
room = eq.room
|
||||
if not room or (eq.is_group and eq.children.count()):
|
||||
room = eq.effective_room
|
||||
if not room or (eq.is_group and list(eq.children)):
|
||||
continue
|
||||
if search and search.lower() not in (eq.name or '').lower():
|
||||
continue
|
||||
|
|
@ -77,8 +85,9 @@ def index():
|
|||
z = b['zones'].setdefault(zone.id if zone else 0, {'name': zone.name if zone else 'Sans zone', 'rooms': {}})
|
||||
r = z['rooms'].setdefault(room.id, {'name': room.name, 'types': {}})
|
||||
key = eq.effective_category_id or f'name:{eq.name.lower().split(" #")[0]}'
|
||||
display_name = eq.category.name if eq.category else eq.name.split(' #')[0]
|
||||
item = r['types'].setdefault(key, {'name': display_name, 'category': eq.effective_category.name if eq.effective_category else '—', 'quantity': 0, 'ids': []})
|
||||
effective_category = eq.effective_category
|
||||
display_name = effective_category.name if effective_category else eq.name.split(' #')[0]
|
||||
item = r['types'].setdefault(key, {'name': display_name, 'category': effective_category.name if effective_category else '—', 'quantity': 0, 'ids': []})
|
||||
item['quantity'] += eq.quantity or 1
|
||||
item['ids'].append(eq.id)
|
||||
zone_tree = [{'id': bid, 'name': b['name'], 'zones': [{'id': zid, 'name': z['name'], 'rooms': [{'id': rid, 'name': r['name'], 'types': list(r['types'].values())} for rid, r in z['rooms'].items()]} for zid, z in b['zones'].items()]} for bid, b in grouped.items()]
|
||||
|
|
|
|||
Loading…
Reference in a new issue