# Generic Object

##

| Téléchargement                                          | Sources                                        |
| ------------------------------------------------------- | ---------------------------------------------- |
| <https://github.com/pluginsGLPI/genericobject/releases> | <https://github.com/pluginsGLPI/genericobject> |

### Prérequis (auto-hébergé)

| Version GLPI | PHP minimum | Recommandé |
| ------------ | ----------- | ---------- |
| 10.0.x       | 8.1         | 8.2        |
| 11.0.x       | 8.2         | 8.4        |

{% hint style="danger" %}
**Avec GLPI 11, ce plugin est destiné à la migration de vos assets génériques vers** [**actifs personnalités**](https://app.gitbook.com/s/0fOFvaYAGyPcoVZsr1BX/modules/configuration/asset-definitions) **(natif à partir de GLPI 11) . Il doit être installé uniquement en production pour effectuer la mise à jour, puis désinstallé une fois l’opération terminée.**
{% endhint %}

**Ce plugin reste compatible avec GLPI 10**

{% hint style="info" %}
Ce plugin est disponible sans souscription [GLPI Network](https://services.glpi-network.com/#offers). Il est également disponible sur [GLPI Cloud](https://glpi-network.cloud).
{% endhint %}

***

### Installer le plugin

* Allez sur la marketplace. Téléchargez et installez le plugin **Generic objects**

***

### Fonctionnalités

Ce plugin vous permet d'ajouter de nouveaux types d'objets d'inventaire, intégrés au framework GLPI.

Il prend en charge les fonctionnalités GLPI suivantes :

* gestion des entités et sous-entités ;
* recherche ;
* modèles ;
* historique ;
* intégration helpdesk ;
* intégration du plugin d'injection de fichier CSV ;
* intégration du plugin de désinstallation d'éléments ;
* intégration du plugin de gestion des commandes.

### Exemple d'utilisation

**Objectif :** Gérer votre flotte de voitures comme le reste de vos actifs informatiques.

* Créez un nouveau type d'objet d'inventaire *voiture*.
* Ajoutez les champs appropriés pour une *voiture*, tels que : *nom*, *numéro de série*, *numéro d'inventaire*, *type*, *modèle*, *couleur*, *état*, etc.
* Décrivez le comportement d'une *voiture* : visible dans la sous-entité, conserve l'historique, etc.
* Ajustez les droits sur les *voitures*.
* Activez l'objet *voitures*.
* Gérez votre collection de *voitures* dans GLPI.

### Installer le Plugin <a href="#install_plugin" id="install_plugin"></a>

* Décompressez l'archive.
* Déplacez le répertoire `genericobject` dans le répertoire `<GLPI_ROOT>/plugins`
* Naviguez vers la page *Configuration > Plugins*
* Installez et activez le plugin

***

### Utilisation

#### Créer un nouveau type d'objet <a href="#create_new_object" id="create_new_object"></a>

C'est la première étape.

* Cliquez sur le bouton *+* dans le formulaire de configuration du plugin.
* Créez le nouveau type d'objet d'inventaire :
  * *nom* : obligatoire, en minuscules, et doit être composé uniquement de lettres ;
  * *libellé* : par défaut, identique au nom.
* Validez.
* Activez le nouveau type d'élément pour l'utiliser.

**Exemple :** Créez un nouveau type d'objet d'inventaire *voiture*.

#### Modifier les libellés <a href="#edit_labels" id="edit_labels"></a>

Pour chaque type, un fichier de langue est disponible dans `<GLPI_ROOT>/files/_plugins/genericobject/locales/itemtype/`

Le plugin crée :

* un fichier de langue pour la langue actuelle
* un fichier de langue pour la langue par défaut de GLPI

{% hint style="info" %}
Si les langues actuelle et par défaut sont identiques, un seul fichier est créé.
{% endhint %}

Pour modifier le libellé du type d'élément, pour la langue anglaise, modifiez le fichier :

```php
<?php
// <GLPI_ROOT>/files/_plugins/genericobject/locales/<itemtype>/<itemtype>.en_GB.php
$LANG['genericobject']['<itemtype>'][1] = "<libellé du type>";
```

Vous pouvez également définir les libellés globalement dans les fichiers `<GLPI_ROOT>/files/_plugins/genericobject/locales/fields.<lang>.php` :

```php
<?php
// <GLPI_ROOT>/files/_plugins/genericobject/locales/<itemtype>/<itemtype>.en_GB.php
$LANG['genericobject']['fields']['<itemtype>'] = "<libellé du type>";
```

**Configurer le comportement**

**Exemple :** Décrivez le comportement d'une *voiture* : visible dans la sous-entité, conserve l'historique, etc.

Le nouveau type sera géré de la même manière que les types GLPI habituels (ordinateur, moniteur, équipement réseau, etc.)

{% hint style="info" %} Tous les objets sont au moins assignés à une *entité* {% endhint %}

L'onglet Comportement vous permet de définir :

* *sous-entités :* permet au type d'être récursif ;
* *Helpdesk :* permet d'associer un objet à un ticket ;
* *Corbeille :* utilise la fonctionnalité de corbeille de GLPI ;
* *Notes :* utilise la fonctionnalité de notes de GLPI ;
* *Historique :* permet l'historique pour ce type ;
* *Modèles :* permet la gestion des modèles ;
* *Documents :* permet de joindre des documents à un objet de ce type ;
* *Prêts :* permet d'emprunter des objets ;
* *Contrats :* lie un objet à un ou plusieurs contrats ;
* *Connexions réseau :* permet l'utilisation des ports et la gestion pour ce type ;
* *Plugin d'injection de fichier CSV :* permet à ce type d'être disponible pour utilisation dans le plugin ;
* *Plugin de désinstallation d'éléments :* permet de désinstaller ce type ;
* *Plugin de gestion des commandes :* permet de lier ce type à une commande ;

**Ajouter des champs**

**Exemple :** Ajoutez les champs appropriés pour une *voiture*, tels que : *nom*, *numéro de série*, *numéro d'inventaire*, *type*, *modèle*, *couleur*, *état*, etc.

Naviguez vers l'onglet *Champs*.

Le plugin est livré avec plusieurs champs prêts à l'emploi :

* Nom
* Type
* Modèle
* Numéro de série
* Numéro d'inventaire
* Utilisateur de l'élément
* Groupe
* Statut
* Commentaires
* Notes
* Emplacement
* Autre
* Fabricant
* URL
* Date de création
* Date d'expiration
* Catégorie
* Visible dans le Helpdesk
* Technicien responsable du matériel
* Domaine
* Contact
* Numéro de contact

{% hint style="info" %} L'utilisation de certains comportements ajoutera automatiquement certains champs à l'objet : {% endhint %}

* connexion réseau => emplacement
* prêts => emplacement
* helpdesk => est visible dans le Helpdesk
* notes => bloc-notes

**Intégration Helpdesk**

Pour utiliser un objet dans le helpdesk, utilisez la configuration suivante :

* Dans l'onglet *Comportement* : *utiliser le helpdesk* doit être réglé sur **Oui**.
* si le champ *Utilisateur* est défini, il permet à l'élément d'être visible dans la liste *Mes Éléments* (en tant qu'élément dont l'utilisateur est le propriétaire).
* si le champ *Groupe* est défini, il permet également à l'élément d'être visible dans la liste *Mes Éléments* (en tant qu'élément appartenant à un groupe dont l'utilisateur fait partie).
* si le champ *Helpdesk visible* est défini et si la valeur est réglée sur **Non** dans l'objet, alors l'objet ne sera pas du tout visible dans le helpdesk.

**Ajouter de nouveaux champs**

{% hint style="info" %} De nouveaux champs seront disponibles pour tous les types d'objets. {% endhint %}

* Créez un nouveau fichier nommé `<GLPI_ROOT>/files/_plugins/genericobject/fields/<type>.constant.php`

Par exemple, pour un type *voiture*, le fichier de constantes sera `<GLPI_ROOT>/files/_plugins/genericobject/fields/car.constant.php`.

Veuillez noter que la première ligne du fichier doit être la suivante, sinon les nouveaux champs n'apparaîtront pas dans la liste :

```php
<?php
global $GO_FIELDS, $LANG;
```

* Ajoutez les définitions des nouveaux champs.

**Ajouter un champ de liste déroulante simple**

```php
<?php
$GO_FIELDS['plugin_genericobject_mytypecolors_id']['name']       = $LANG['genericobject']["<nom du type>"][2];
$GO_FIELDS['plugin_genericobject_mytypecolors_id']['field']      = 'color';
$GO_FIELDS['plugin_genericobject_mytypecolors_id']['input_type'] = 'dropdown';
```

{% hint style="info" %} La variable de langue doit être définie dans le fichier de langue (voir explication ci-dessus). {% endhint %}

* Ajoutez un champ de liste déroulante qui est assigné à une entité :

```php
<?php
$GO_FIELDS['plugin_genericobject_mytypecolors_id']['name']         = $LANG['genericobject']["<nom du type>"][2];
$GO_FIELDS['plugin_genericobject_mytypecolors_id']['field']        = 'color';
$GO_FIELDS['plugin_genericobject_mytypecolors_id']['input_type']   = 'dropdown';
//La liste déroulante gère-t-elle les entités ? (true/false)
$GO_FIELDS['plugin_genericobject_mytypecolors_id']['entities_id']  = true;
//Les valeurs peuvent-elles être récursives ? (true/false, uniquement pris en compte si entities_id est défini sur true)
$GO_FIELDS['plugin_genericobject_mytypecolors_id']['is_recursive'] = true;
```

**Ajouter un champ de liste déroulante arborescente**

```php
<?php
$GO_FIELDS['plugin_genericobject_mytypecolors_id']['name']       = $LANG['genericobject']["<nom du type>"][2];
```

```php
<?php
$GO_FIELDS['plugin_genericobject_mytypecolors_id']['field']      = 'color';
$GO_FIELDS['plugin_genericobject_mytypecolors_id']['input_type'] = 'dropdown';
//Est-ce un arbre-liste déroulante, ou une simple ? (vrai/faux)
$GO_FIELDS['plugin_genericobject_mytypecolors_id']['is_tree']    = true;
```

{% hint style="info" %}
Vous pouvez utiliser en même temps les paramètres suivants : *entities\_id*, *is\_recursive*, *is\_tree*.
{% endhint %}

**Ajouter un champ liste déroulante basé sur un objet GLPI-core (utilisateur, localisation...)**

```php
<?php
$GO_FIELDS['users_id_passengers_id']['name']       = 'Passenger';
$GO_FIELDS['users_id_passengers_id']['input_type'] = 'dropdown';
```

{% hint style="info" %}
Le nom entre crochets (`[]`) **DOIT** commencer par `users_id` pour être reconnu comme un champ basé sur la liste des utilisateurs GLPI.

Voir le fichier `<GLPI_ROOT>/files/_plugins/genericobject/fields/field.constant.php` pour obtenir une liste complète des champs disponibles.
{% endhint %}

**Ajouter une liste déroulante globale**

Une liste déroulante globale peut être utilisée dans tous les types d'éléments. Un bon exemple serait :

```php
<?php
$GO_FIELDS['categories_id']['name']          = $LANG['common'][36];
$GO_FIELDS['categories_id']['input_type']    = 'dropdown';
$GO_FIELDS['categories_id']['dropdown_type'] = 'global';
```

Une table de catégorie spécifique sera créée pour chaque type d'élément. Le nom de la table et le nom du champ seront calculés de cette manière :

* table : `glpi_plugin_genericobject_<itemtypename>_category`
* nom du champ : `plugin_genericobject_<itemtype>categories_id`

**Ajouter un champ entier**

```php
<?php
$GO_FIELDS['testinteger']['name']       = 'testinteger';
$GO_FIELDS['testinteger']['input_type'] = 'integer';
$GO_FIELDS['testinteger']['min']        = 10; // non obligatoire, par défaut 0
$GO_FIELDS['testinteger']['max']        = 40; // non obligatoire, par défaut 100
$GO_FIELDS['testinteger']['step']       = 3; // non obligatoire, par défaut 1
```

**Ajouter un champ texte**

```php
<?php
$GO_FIELDS['mytextfield']['name']       = 'Mon champ texte';
$GO_FIELDS['mytextfield']['input_type'] = 'text';
```

*Modifié dans la version 2.1.2* : En ajoutant l'argument suivant, vous pouvez indiquer au plugin que ce champ peut être généré automatiquement lors de l'utilisation d'un modèle :

```php
<?php
$GO_FIELDS['mytextfield']['autoname'] = true;
```

**Ajouter un champ Oui/Non**

```php
<?php
$GO_FIELDS['mybooleanfield']['name']       = 'Mon champ booléen';
$GO_FIELDS['mybooleanfield']['input_type'] = 'bool';
```

**Ajouter un champ date**

```php
<?php
$GO_FIELDS['creationdate']['name']       = $LANG['genericobject']['fields'][30];
$GO_FIELDS['creationdate']['input_type'] = 'date';
```

**Ajouter un champ date et heure**

```php
<?php
$GO_FIELDS['creationdate']['name']       = $LANG['genericobject']['fields'][30];
$GO_FIELDS['creationdate']['input_type'] = 'datetime';
```

{% hint style="info" %}
Si vous ne souhaitez pas qu'un champ soit modifié par des actions massives, ajoutez la ligne suivante à sa définition :

```php
<?php
$GO_FIELDS['myfield']['massiveaction'] = false;
```

{% endhint %}

#### Ajouter des champs globaux

Pour rendre vos champs accessibles à tous les types d'éléments :

* Créez un fichier nommé `<GLPI_ROOT>/files/_plugins/genericobject/fields/field.constant.php`
* Placez vos définitions dans ce fichier.

#### Droits de configuration

Vous pouvez définir des droits d'accès pour chaque type d'objet, pour chaque profil. Les options disponibles sont :

* *droit sur le type* : *aucun accès*, *lecture*, *écriture*.
* *droit d'associer ce type d'objet aux tickets* : *oui*, *non*.

Pour associer les droits, vous pouvez soit :

* Utiliser l'onglet *Droits* dans le formulaire *type d'élément*.
* Naviguer vers *Administration > Profils* et administrer les droits pour chaque profil.

#### Utiliser le nouveau champ

Activez le nouveau type, il est maintenant prêt à être utilisé.

Le nouveau type est disponible pour les utilisateurs dans le menu *Plugins > Gestion des objets*.

#### Cas d'utilisation de Generic Object comme CMMS

**But de cette documentation**

Montrer une utilisation complète de Generic Object comme CMMS (Computerized Maintenance Management System) dans un environnement biomédical.

À la fin de ce cas d'utilisation, vous aurez :

* une entité dédiée *Biomed* (sous *Entité racine*)
* contenant des objets *Biomédicaux* (dans le menu *Actifs*)
* avec des champs intégrés et définis par l'utilisateur
* gérés par des utilisateurs avec le profil *Admin\_biomed*

**Étapes**

Les étapes suivantes supposent que vous avez une autorisation de Super-Admin :

* Installation de Generic Object sur GLPI (validé avec genericobject >= 0.85-1.0 et GLPI >= 0.90)
* Configuration de Generic Object
* Configuration de GLPI
* Commencer à utiliser Generic Object et GLPI

**Installation de Generic Object sur GLPI**

Voir la section `install_plugin`{.interpreted-text role="ref"}.

**Configuration de Generic Object**

**Créer votre type d'objet**

Voir la section `create_new_object`{.interpreted-text role="ref"} et utiliser *biomedical* comme identifiant interne. Le libellé sera défini automatiquement sur *Biomedical* (avec un *B* majuscule).

Après une déconnexion/reconnexion, vous verrez le menu *Biomedical* dans Actifs.

**Définir les nouveaux champs de Biomedical**

Ces champs ne seront utilisables que par les objets de type Biomedical :

* Créez un nouveau fichier nommé : `<GLPI_ROOT>/files/_plugins/genericobject/fields/biomedical.constant.php`
* Ajoutez le contenu suivant :

```php
<?php
global $GO_FIELDS, $LANG;

// CODE CNEH
$GO_FIELDS['plugin_genericobject_cnehcodes_id']['name']       = $LANG['genericobject']['PluginGenericobjectBiomedical'][1];
$GO_FIELDS['plugin_genericobject_cnehcodes_id']['field']      = 'cnehcode';
$GO_FIELDS['plugin_genericobject_cnehcodes_id']['input_type'] = 'dropdown';

//  REFORME (oui ou non)
$GO_FIELDS['reformed']['name']       = $LANG['genericobject']['PluginGenericobjectBiomedical'][2];
$GO_FIELDS['reformed']['input_type'] = 'bool';

// CLASSE CE (3 choix possibles 1,2a ou 2b)
$GO_FIELDS['plugin_genericobject_classeces_id']['name']       = $LANG['genericobject']['PluginGenericobjectBiomedical'][3];
$GO_FIELDS['plugin_genericobject_classeces_id']['field']      = 'classce';
$GO_FIELDS['plugin_genericobject_classeces_id']['input_type'] = 'dropdown';

// UF (Unité Fonctionnelle)
$GO_FIELDS['plugin_genericobject_ufs_id']['name']       = $LANG['genericobject']['PluginGenericobjectBiomedical'][4];
$GO_FIELDS['plugin_genericobject_ufs_id']['field']       = 'uf';
$GO_FIELDS['plugin_genericobject_ufs_id']['input_type'] = 'dropdown';

// PRESTATAIRE BIOMED
$GO_FIELDS['plugin_genericobject_prestataires_id']['name']       = $LANG['genericobject']['PluginGenericobjectBiomedical'][5];
$GO_FIELDS['plugin_genericobject_prestataires_id']['field']       = 'prestataire biomed';
$GO_FIELDS['plugin_genericobject_prestataires_id']['input_type'] = 'dropdown';

// TYPE D'EQUIPEMENT BIOMED
$GO_FIELDS['plugin_genericobject_typedequipementbiomeds_id']['name']       = $LANG['genericobject']['PluginGenericobjectBiomedical'][6];
$GO_FIELDS['plugin_genericobject_typedequipementbiomeds_id']['field']       = "type d 'equipement biomed";
$GO_FIELDS['plugin_genericobject_typedequipementbiomeds_id']['input_type'] = 'dropdown';

// Criticite
$GO_FIELDS['plugin_genericobject_criticites_id']['name']       = $LANG['genericobject']['PluginGenericobjectBiomedical'][7];
$GO_FIELDS['plugin_genericobject_criticites_id']['field']      = 'criticite';
$GO_FIELDS['plugin_genericobject_criticites_id']['input_type'] = 'dropdown';

// Numéro marquage CE
$GO_FIELDS['plugin_genericobject_marquageces_id']['name']       = $LANG['genericobject']['PluginGenericobjectBiomedical'][8];
$GO_FIELDS['plugin_genericobject_marquageces_id']['field']      = 'marquagece';
$GO_FIELDS['plugin_genericobject_marquageces_id']['input_type'] = 'dropdown';

// Classe électrique
$GO_FIELDS['plugin_genericobject_classeelecs_id']['name']       = $LANG['genericobject']['PluginGenericobjectBiomedical'][9];
$GO_FIELDS['plugin_genericobject_classeelecs_id']['field']      = 'classeelec';
```

$GO\_FIELDS\['plugin\_genericobject\_classeelecs\_id']\['input\_type'] = 'dropdown'; ?>

{% hint style="warning" %}
Le suffixe `s_id` est obligatoire dans `[plugin_genericobject_field*s_id*]` car le framework GLPI exige que les champs de clé étrangère se terminent par `s_id`. En base de données, `glpi_plugin_genericobject_fields` est le nom de la table et `id`, sa clé étrangère. Voir la [documentation développeur GLPI](http://glpi-developer-documentation.readthedocs.io/en/master/devapi/database/dbmodel.html#fields).
{% endhint %}

***

### Définir les libellés des champs

Voir la section « [modifier les libellés](#edit_labels)s ».

* Modifiez votre fichier de localisation, par exemple : `<GLPI_ROOT>/files/_plugins/genericobject/locales/biomedical/biomedical.fr_FR.php`

Ajoutez le contenu suivant à la fin du fichier :

```
<?php
// Fields
$LANG['genericobject']['PluginGenericobjectBiomedical'][1]="Code CNEH";
$LANG['genericobject']['PluginGenericobjectBiomedical'][2]="Réformé";
$LANG['genericobject']['PluginGenericobjectBiomedical'][3]="Classe CE";
$LANG['genericobject']['PluginGenericobjectBiomedical'][4]="UF";
$LANG['genericobject']['PluginGenericobjectBiomedical'][5]="Prestataire Biomed";
$LANG['genericobject']['PluginGenericobjectBiomedical'][6]="Type d'équipement biomed";
$LANG['genericobject']['PluginGenericobjectBiomedical'][7]="Criticité";
$LANG['genericobject']['PluginGenericobjectBiomedical'][8]="Marquage CE";
$LANG['genericobject']['PluginGenericobjectBiomedical'][9]="Classe électrique";
```

#### Définir les comportements

Dans le menu Extensions > Gestion des objets, onglet Principal, sélectionnez :

* Élément dans la corbeille
* Historique
* Informations financières et administratives
* Documents
* Recherche globale
* Assistance
* Modèles
* Contrats
* Recherche globale

Cela ajoutera des champs prêts à l'emploi à votre type d'objet.

#### Ajouter des champs à votre type d'objet

Dans le menu Extensions > Gestion des objets, onglet Champs, vous pouvez désormais ajouter des champs à un objet de type Biomédical :

* Champs prêts à l'emploi (champs intégrés de GLPI)
* Nouveaux champs (définis dans la section « Définir les nouveaux champs de Biomédical »)

### Configuration de GLPI

#### Définir le profil Admin\_biomed

* Cloner le profil Admin
* Définir les droits suivants dans le profil Admin\_biomed :&#x20;
  * Administration > Profils > Admin\_biomed > Onglet Ressources > Tout désélectionner
  * Administration > Profils > Admin\_biomed > Onglet Assistance > Association > Éléments associables à un ticket > Biomédical
  * Administration > Profils > Admin\_biomed > Onglet Gestion > Tout sélectionner
  * Administration > Profils > Admin\_biomed > Onglet Gestion des objets > Biomédical > Tout sélectionner

{% hint style="info" %}
Avec ces paramètres, les utilisateurs Admin\_biomed ne voient que la section Ressources.
{% endhint %}

#### Définir l'entité Biomed et les règles d'autorisation

* Créez l'entité Biomed sous l'entité racine dans Administration > Entités.
* Configurez les règles d'autorisation pour attribuer le profil Admin\_biomed aux utilisateurs de l'entité Biomed.

#### Commencer à utiliser les objets génériques et GLPI

En tant qu'utilisateur Admin\_biomed, vous pouvez créer votre premier objet dans Ressources > Biomédical.

Pour gagner du temps, définissez les valeurs des nouveaux champs dans Configuration > Listes déroulantes > Gestion des objets.

***

## FAQ

Si vous avez des questions concernant l'utilisation du plugin, n'hésitez pas à consulter notre FAQ

<a href="https://app.gitbook.com/s/VU1qbB9Oe25HAYDAQ4tR/plugins/generic-object" class="button secondary">Aller à la FAQ</a>
