---
title: "Matériels (DSI/IT Hardware)"
module: store
type: functional
status: active
updated: 2026-07-30
---

# Matériels (DSI/IT Hardware)

## Vue d'ensemble

Le module **Matériels** permet de gérer l'ensemble du parc matériel informatique d'un tenant : postes de travail, serveurs, imprimantes, équipements réseau, téléphones, tablettes et machines virtuelles.

Chaque matériel est rattaché à une entité (via `idc`), peut être assigné à un ou plusieurs utilisateurs, et passe par un cycle de vie défini.

---

## Types de matériels

| Code | Libellé |
|------|---------|
| `FIX` | Poste de travail fixe |
| `POR` | Portable |
| `LIG` | Client léger (Thin client) |
| `SER` | Serveur |
| `TAB` | Tablette |
| `SMA` | Smartphone |
| `IMP` | Imprimante / Copieur |
| `WIF` | Borne WiFi |
| `SWI` | Switch |
| `ROU` | Routeur |
| `TEL` | Téléphone IP |
| `VID` | Vidéo-projecteur |
| `SCR` | Écran |
| `CAM` | Webcam / Système salle de réunion |
| `MIC` | Micro-casque |
| `DOC` | Docking station |
| `FIR` | Firewall / Sonde |
| `MOD` | Modem |
| `SAN` | NAS / SAN |
| `OND` | Onduleur (UPS) |
| `CEN` | Central téléphonie (PBX) |

Les types sont regroupés en onglets dans l'interface :
- **Matériels** — tous types confondus (vue d'ensemble)
- **Postes de travail** — FIX, POR, LIG
- **Serveurs** — SER
- **Imprimantes / Copieurs** — IMP
- **Réseaux** — WIF, SWI, ROU
- **Tablettes** — TAB
- **Smartphones** — SMA
- **Autres** — tous les types restants
- **VM** — machines virtuelles (table `dsi_hwvm`)

---

## Cycle de vie (statuts)

| Code | Libellé | Description |
|------|---------|-------------|
| `STOCK` | En stock | Matériel acquis, non encore déployé |
| `PROD` | En production | Matériel actif et utilisé |
| `MTAIN` | En maintenance | Matériel temporairement hors service |
| `END` | Hors service | Matériel retiré du parc |
| `RENEW` | À renouveler | Signalé pour remplacement (lecture seule) |

Les transitions de statut mettent automatiquement à jour les dates associées :
- Passage en `PROD` → renseigne `dtrun` (date de mise en production)
- Passage en `MTAIN` → renseigne `dtmaintain`
- Passage en `END` → renseigne `dtunset` (date de mise hors service)
- Retour en `STOCK` → efface `dtrun`

---

## Informations gérées sur un matériel

### Identification
- Nom du matériel (`lbhw`)
- Type (`tphard`)
- Numéro de série / tag (`idtag`)
- Numéro de série Windows (`win_serial`)
- Numéro d'immobilisation (`lbimmo`)

### Affectation
- Entité rattachée (`idc`)
- Adresse / localisation (`idaddr`, `lbwhere`)
- **Type d'utilisation** (`tpusage`) — visible uniquement pour les types FIX et POR :
  - `PERSO` (défaut) : poste attribué à une personne
  - `KIOSQUE` : poste kiosque — l'utilisateur principal et les utilisateurs secondaires sont retirés
- Utilisateur principal (`iduser_master`) — masqué si type d'utilisation = KIOSQUE
- Utilisateurs secondaires (table `dsi_hw_users`)

### Matériel
- Fabricant (`idhw_sel`)
- Modèle (`idhw_model`)
- Processeur (`tpproc`)
- RAM en Go (`nbram`)
- Stockage en Go (`nbdd`)
- Type de disque (`tpdd`)
- Système d'exploitation (`idos`)
- Suite bureautique (`tpof`)

### Dates
- Achat (`dtbuy`)
- Garantie constructeur (`dtwar`)
- Garantie batterie/licence cloud (`dtwarbat`)
- Mise en production (`dtrun`)
- Maintenance (`dtmaintain`)
- Hors service (`dtunset`)
- Dernier contrôle (`dtcheck`)
- Dernier inventaire OCS (`last_inventory_at`)

### Garantie
- Texte garantie constructeur (`txwar`)
- Texte garantie batterie (`txwarbat`)
- URL garantie (via fabricant)

### Commentaires & recommandations
- Commentaire libre (`txcomment`)
- Recommandation (`tpreco`)
- Détail recommandation (`txreco`)
- Champs libres 1 et 2 (`lib1`, `lib2`)

---

## Alertes automatiques

Le système analyse chaque matériel et génère des alertes sur :

| Alerte | Condition |
|--------|-----------|
| Utilisateur archivé | L'utilisateur principal a été supprimé |
| OS obsolète | Windows 7, 8, XP, Vista, etc. détecté |
| Windows 10 non spécifié | Édition WIN10 générique (doit être Pro, Enterprise, etc.) |
| Windows 10 Family | Édition grand public inadaptée en entreprise |
| RAM insuffisante | ≤ 4 Go de RAM |
| OS serveur obsolète | Édition serveur en fin de support |
| Non déployé | Aucune date de mise en production |
| Matériel ancien | Plus de 5 ans |
| Garantie expirée | `dtwar` dépassée |
| Kiosque avec utilisateur | Type FIX/POR en mode KIOSQUE mais `iduser_master` encore renseigné |

---

## Utilisateurs rattachés

Un matériel peut avoir :
- **Un utilisateur principal** (`iduser_master`) — affiché directement dans la liste
- **Des utilisateurs secondaires** — via la table `dsi_hw_users`

La modale de gestion des utilisateurs rattachés permet :
- D'ajouter / retirer des utilisateurs secondaires
- De promouvoir un utilisateur secondaire en utilisateur principal (l'ancien principal est automatiquement rétrogradé en additionnel)
- De gérer les "utilisateurs fantômes" : utilisateurs supprimés du système ou utilisateurs externes (nommés manuellement, sans compte), modifiables via un formulaire dédié
- D'envoyer un mail de demande de remise de matériel à un utilisateur

L'interface distingue visuellement l'utilisateur principal (affiché dans une carte dédiée en haut de la modale) des utilisateurs additionnels (listés dans le tableau en dessous).

Seuls certains types de matériels peuvent recevoir des rattachements utilisateurs : `LIG`, `FIX`, `POR`, `TAB`, `SMA`, `TEL`, `VID`, `IMP`, `SCR`.

### Comptes proposés au rattachement

Le sélecteur (utilisateur principal comme additionnels) propose les comptes non supprimés de l'entité mère du matériel, pour les types de compte suivants (cf. [Personnes](../identity/persons.md)) :

| `tpaccount` | Libellé | Proposé ? |
|---|---|---|
| `N` | Nominatif | ✅ |
| `G` | Générique (boîte de service / rôle) | ✅ |
| `B` | Boîte partagée | ✅ |
| `A` | Administrateur local | ❌ |

Les utilisateurs déjà rattachés au matériel (principal ou additionnels) sont retirés de la liste. Un utilisateur sans compte dans l'application se rattache via le bouton **Utilisateur externe**.

### Historique des rattachements

Chaque action de rattachement ou de détachement est tracée dans l'historique du matériel :

| Action | Trace |
|--------|-------|
| Rattachement utilisateur principal | Entrée dans `log_navs` + `log_nav_changes` (champ `iduser_master`) |
| Rattachement utilisateur secondaire | Entrée dans `log_navs` + `log_nav_changes` (champ `dsi_hw_users`) |
| Détachement utilisateur principal | Entrée dans `log_navs` + `log_nav_changes` (champ `iduser_master`) |
| Détachement utilisateur secondaire | Entrée dans `log_navs` + `log_nav_changes` (champ `dsi_hw_users`) |

Ces entrées remontent dans l'onglet "Historique" de la fiche matériel. Les changements sur `iduser_master` apparaissent également dans la section "Affectations" de l'historique.

---

## Tickets rattachés

Depuis la fiche matériel, on peut consulter les tickets liés à ce matériel (via `CustomerAskAttach`, `idmodelement=810001`). La modale affiche :
- Titre, sujet, statut, priorité
- Dates d'ouverture et de résolution

---

## Intégration OCS (inventaire)

Les matériels peuvent être synchronisés automatiquement depuis OCS Inventory. En cas de synchronisation :
- Le champ `idocs` est renseigné
- Certains champs ne sont plus modifiables manuellement (processeur, RAM, disque, OS, etc.)
- `last_inventory_at` est mis à jour à chaque inventaire

### Affichage des données OCS sur la fiche matériel

La fiche matériel (`see/81000101`) affiche les données OCS directement depuis la base OCS via le **connecteur Store v3** (`ocs_inventory`). La résolution se fait par `idtag` (plus fiable que `idocs`) :

1. Recherche dans `bios.SSN = idtag` (matériels physiques avec numéro de série)
2. Fallback sur `hardware.NAME = idtag` trié par `LASTDATE` DESC (VMs ou matériels sans SSN)

La section est affichée uniquement si le tenant possède une instance OCS active (`StoreInstance` avec `connector.code = 'ocs_inventory'`, `is_active = true`). Elle présente un tableau **Logiciels** listant nom, version et date d'installation des logiciels installés.

---

## Intégrations API fabricants

Pour **Lenovo** et **Dell**, le système peut récupérer automatiquement les données de garantie via leurs APIs en renseignant le numéro de série :
- Date d'expédition
- Modèle
- Dates de garantie constructeur et batterie/licence cloud

---

## Création depuis la fiche adresse

Depuis la fiche d'une adresse (module 13040101), l'onglet **Matériels** affiche le parc matériel lié à cette adresse et permet de créer un nouveau matériel directement sans quitter la page. Le formulaire de création s'affiche dans le bouton du tableau, avec l'entité et l'adresse pré-sélectionnées.

---

## Actions en masse (Bulk actions)

Disponibles sur une sélection de matériels (max 50) :
- **Changer le statut** — met à jour le statut et les dates associées
- **Transférer** — déplace vers une autre entité/adresse, avec gestion des utilisateurs associés
- **Modifier les statuts VM** — met à jour le statut des VMs sélectionnées. Le statut `mtain` (maintenance) supporte une période datée : date de début obligatoire, date de fin optionnelle. Depuis la fiche VM (module 810901), le bouton "Modifier le statut" recharge la page entière après succès (`callbackMode=reload`). Depuis le tableau en masse (`HardwareVmWire`), il rafraîchit uniquement le TableWire via un événement Livewire (`hardware-vm-refresh`).

---

## Vue prestataire (Clients)

Les prestataires (partenaires) peuvent accéder à une vue consolidée du parc de leurs clients via l'onglet "Clients" (`/hardware/clients`). Cette vue agrège les données de plusieurs tenants avec le nom du client affiché.

---

## Machines virtuelles

Les VMs sont gérées dans un onglet dédié avec leur propre modèle (`DsiHwvm`) et leurs propres champs spécifiques :
- Type de virtualisation (`tpvm`)
- Hébergeur (`tpheb`, `idheb`)
- OS VM (`tposvm`)
- Adresse IP (`lbip`)
- Politique de sauvegarde (`lbpolsave`)
- Criticité (`tpcrit`)
- Nombre de CPU (`nbcpu`)
- Début de maintenance (`dtmaintain`)
- Fin de maintenance (`dtmaintain_end`, facultative)

### Cycle de vie VM

Les VMs ont leur propre cycle de vie, distinct des statuts des matériels physiques :

| Statut | Libellé | Date associée | Description |
|--------|---------|---------------|-------------|
| `build` | En construction | — | État par défaut, aucune date renseignée |
| `run` | En production | `dtprod` | Mise en production de la VM |
| `mtain` | En maintenance | `dtmaintain` + `dtmaintain_end` (optionnelle) | Période de maintenance avec date de début et fin optionnelle |
| `out` | Arrêtée | `dtend` | VM hors service |

Le statut est déterminé automatiquement selon les dates renseignées : `dtend` → `out`, `dtmaintain` → `mtain`, `dtprod` → `run`, sinon `build`.

---

## Mini-menu fiche VM (810901ctl)

La fiche formulaire VM (`/mod/81090101/update/{id}`) affiche un mini-menu contextuel en mode `update`, modidel `01`, via `resources/views/hook/custom/ctl/810901ctl.blade.php`.

| Bouton | Description |
|--------|-------------|
| **Dernier inventaire OCS** | Badge coloré selon l'ancienneté : vert (< 2 mois), ambre (2–12 mois), rouge (> 12 mois) |
| **Dernière modification** | Affiche la date de la dernière mise à jour de la VM |
| **Modifier le statut** | Ouvre la modale `hardware.bulk-actions.update-vm-state` en `callbackMode=reload` — recharge la page après succès |

---

## Droits d'accès

L'accès au module est contrôlé par le **module 81000101** (matériels) et **81090101** (VMs).

Les profils à accès limité peuvent être restreints à certaines entités via `idlimit_profile`.

---

## Fiche matériel (vue See)

La fiche matériel (`/mod/81000101/see/{idhw}`) affiche :

- **Carte identité** : icône du type, nom, statut, utilisateur principal avec date de validation, dates clés (inventaire, modification, achat, mise en service, garantie, rebut, archivage)
- **Informations principales** : ID, type, reconditionnement, S/N, fabricant, modèle, OS, processeur, RAM, disque, IP, suite bureautique
- **Localisation** : entité, adresse (avec lien Google Maps), emplacement libre — affichée uniquement si renseignée
- **Contact** : téléphone et e-mail — affiché uniquement si renseigné
- **Historique des utilisateurs** : timeline des rattachements/détachements, affichée uniquement pour les types pouvant être rattachés et si l'historique est non vide
- **Informations OCS** : tableau **Logiciels** (nom, version, date d'installation) — affiché uniquement si le tenant a une instance OCS active (Store v3) et que `idtag` permet de résoudre le matériel dans OCS
- **Addins** : commentaires, images, documents, liens

---

## Hooks formulaire

### Comportement du formulaire (`hook/810001.form.php`)

Lors de la création ou mise à jour d'un matériel (modidel `01`) :

- **Contrôle d'accès** : vérifie que l'utilisateur peut accéder à l'entité (`idc`) via `AccessHelper::checkCustomerAccess`
- **Utilisateur archivé** : si un `iduser_master` est renseigné et que l'utilisateur a une `dtdel`, une alerte danger est créée automatiquement
- **Affichage conditionnel des champs utilisateur** :
  - Si `iduser_master` renseigné → affiche les champs `iduser_master`, `dtcheck`, `lbname_master`, `lbmail_master` (en update) ou seulement `iduser_master` (en création)
  - Si seulement `lbname_master` renseigné (utilisateur fantôme) → comportement similaire sans les champs mail
  - Si aucun utilisateur → masque tous les champs utilisateur (`iduser_master`, `dtcheck`, `lbname_master`, `lbmail_master`, `text__21`)

### Comportement avant contrôleur (`hook/810001.ctlbefore.php`)

- Redirige les actions `home` et `print` vers `/hardware` (pas de page d'accueil dédiée)
- En mode création modale : désactive le retour standard (`returnFinalExit = true`) et injecte du JavaScript pour recharger le tableau DataTable et afficher une confirmation SweetAlert

### Hook vue formulaire (`resources/views/hook/810001view.blade.php`)

Injecté automatiquement dans le formulaire via `@include('hook.building.content')`.

**En mode création** (si `idtag` renseigné) — appel AJAX automatique vers l'API fabricant :
- **Lenovo** (`idhw_sel == 2`) : remplit modèle, dates de garantie constructeur/batterie et date d'achat
- **Dell** (`idhw_sel == 1`) : remplit modèle, date d'achat et garantie constructeur (S/N sans tirets)

**En mode mise à jour** :
- Affiche les nav-pills si définies
- Écoute l'événement Livewire `reload-page` pour forcer un rechargement de page (utilisé après certaines actions en modale)

**Confirmation passage en mode KIOSQUE** :
- Lorsqu'un matériel avec un utilisateur principal est soumis en mode `KIOSQUE`, une alerte SweetAlert s'affiche au moment du clic sur le bouton d'enregistrement
- En cas de confirmation : le formulaire est soumis, l'utilisateur principal et tous les utilisateurs secondaires (table `dsi_hw_users`) sont retirés
- En cas d'annulation : la soumission est bloquée, le formulaire reste en état d'édition

---

### Mini-menu de la fiche formulaire (`resources/views/hook/custom/ctl/810001ctl.blade.php`)

En mode update, affiche un mini-menu contextuel avec :
- **Dernier inventaire OCS** : badge coloré (vert < 2 mois, orange 2–12 mois, rouge > 12 mois) avec lien vers la fiche see
- **Dernière modification** : lien vers l'historique du matériel
- **Renommer le matériel** : génère automatiquement un nom normalisé `{idref_7chars}-{type1char}{idhw}`
- **Valider la remise** : envoie un e-mail de confirmation si `iduser_master` est défini mais pas encore validé (`dtcheck` absent) ; affiche un badge de confirmation si déjà validé
- **Gestion des utilisateurs** : ouvre la modale Livewire `hardware.modal.rattached-users` avec compteur d'utilisateurs rattachés (visible uniquement si le type supporte le rattachement, statut ≠ END, et type d'utilisation ≠ KIOSQUE)
- **Tickets rattachés** : ouvre la modale Livewire `hardware.modal.rattached-tickets` avec compteur (visible uniquement si tickets > 0)
- **Vérifier la garantie** : lien externe vers l'URL garantie du fabricant (si renseignée dans `DsiHwSel.urlwarranty`), copie le S/N dans le presse-papier
- **Transférer le matériel** : ouvre la modale Livewire `hardware.transfer-hardware` (admins locaux uniquement)
- **TeamViewer** : lien de prise en main distante si `iddist` renseigné et distribution = `TW`
