diff --git a/app_new/equipments/main.py b/app_new/equipments/main.py index cfed467..04a8ce0 100644 --- a/app_new/equipments/main.py +++ b/app_new/equipments/main.py @@ -149,17 +149,17 @@ def hierarchy(id): root = Equipment.query.get_or_404(id) descendants = select( Equipment.id, Equipment.parent_id, Equipment.name, Equipment.code, - Equipment.status, Equipment.room_id, + Equipment.status, Equipment.room_id, Equipment.quantity, Equipment.room_id.label('effective_room_id'), ).where(Equipment.parent_id == root.id, Equipment.is_deleted.is_(False)).cte(recursive=True) descendants = descendants.union_all(select( Equipment.id, Equipment.parent_id, Equipment.name, Equipment.code, - Equipment.status, Equipment.room_id, + Equipment.status, Equipment.room_id, Equipment.quantity, db.func.coalesce(Equipment.room_id, descendants.c.effective_room_id).label('effective_room_id'), ).where(Equipment.parent_id == descendants.c.id, Equipment.is_deleted.is_(False))) rows = db.session.execute( select(descendants.c.id, descendants.c.name, descendants.c.code, - descendants.c.status, Room.id.label('room_id'), Room.name.label('room_name'), + descendants.c.status, descendants.c.quantity, Room.id.label('room_id'), Room.name.label('room_name'), Zone.id.label('zone_id'), Zone.name.label('zone_name')) .select_from(descendants) .join(Room, descendants.c.effective_room_id == Room.id, isouter=True) @@ -174,7 +174,7 @@ def hierarchy(id): room = zone['rooms'].setdefault(room_key, {'name': row.room_name or 'Sans salle', 'items': []}) room['items'].append({ 'id': row.id, 'name': row.name, 'code': row.code, - 'status': row.status, + 'status': row.status, 'quantity': row.quantity or 1, 'status_label': format_status(row.status), 'status_class': f"bg-{status_badge_class(row.status)}", 'url': url_for('equipments.detail', id=row.id), @@ -182,7 +182,7 @@ def hierarchy(id): payload = [] for zone in zones.values(): rooms = list(zone['rooms'].values()) - payload.append({'name': zone['name'], 'count': sum(len(room['items']) for room in rooms), 'rooms': rooms}) + payload.append({'name': zone['name'], 'count': sum(item['quantity'] for room in rooms for item in room['items']), 'rooms': rooms}) return jsonify({'root_id': root.id, 'zones': payload}) diff --git a/app_new/templates/equipments/index.html b/app_new/templates/equipments/index.html index 95cb9c7..2ece4a6 100644 --- a/app_new/templates/equipments/index.html +++ b/app_new/templates/equipments/index.html @@ -61,7 +61,7 @@ {% if view == 'zones' %}
Quantités regroupées par zone, salle et type d’équipement.
{% for building in zone_tree %}
{{ building.name }}
-{% for zone in building.zones %}
{{ zone.name }} {{ zone.rooms|length }} salle(s){% for room in zone.rooms %}
{{ room.name }} {{ room.types|sum(attribute='quantity') }}{% for item in room.types %}{% endfor %}
{{ item.name }}{{ item.category }}{{ item.quantity }}
{% endfor %}
{% endfor %}
{% else %}
Aucun équipement localisé.
{% endfor %} +{% for zone in building.zones %}
{{ zone.name }} {{ zone.rooms|length }} salle(s){% for room in zone.rooms %}
{{ room.name }} {{ room.types|sum(attribute='quantity') }}{% for item in room.types %}{% endfor %}
{{ item.name }}{{ item.category }}{{ item.quantity }}
{% endfor %}
{% endfor %}{% else %}
Aucun équipement localisé.
{% endfor %} {% else %} {% if parents %}
@@ -231,7 +231,7 @@ function renderHierarchy(target, zones) { details.className = 'ms-2 mb-2'; const summary = document.createElement('summary'); summary.className = 'fw-semibold'; - summary.textContent = `${room.name} (${room.items.length})`; + summary.textContent = `${room.name} (${room.items.reduce((total, item) => total + (item.quantity || 1), 0)})`; details.appendChild(summary); const list = document.createElement('div'); list.className = 'list-group list-group-flush ms-3 mt-1';