Welcome to OCS Inventory NG community support, where you can ask questions and receive answers from other members of the community.

Please ask questions only in English or French.

Release 2.12.3 available

The official documentation can be found on https://wiki.ocsinventory-ng.org. Read it before asking your question.

Comment empêcher les doublons d'écrans ?

Bonjour à tous,

Imaginons qu'un utilisateur possède 1 PC et 1 écran externe.

On installe OCS dessus, l'inventaire du PC remonte avec le détail de l'écran (marque, modèle, numéro de série).

Le PC de l'utilisateur tombe en panne, Windows HS à réinstaller par exemple.

L'ancien PC est mis au stock en attendant d'être réinstallé.

On installe un nouveau PC à l'utilisateur à la place de l'ancien, sur lequel on branche l'écran externe.

On installe OCS sur le nouveau PC, l'inventaire de celui-ci remonte avec le détail de l'écran.

On obtient ainsi 2 écrans dans la table 'monitors' de la base de donnée d'OCS qui possèdent le même numéro de série.

=> si un PC remonte un écran dont le numéro de série existe déjà dans la table monitors, est-il possible de faire en sorte que l'entrée existante soit rattachée au nouveau PC et ainsi eviter qu'un doublon soit créé ?

 

Merci d'avance pour votre aide et bonne journée.

Cordialement,

Neutro.
in Administrative console by (290 points)

3 Answers

0 votes
 
Best answer
Voici la solution que j'ai trouvée pour supprimer les doublons. Elle se base sur le principe que lorsque 2 écrans ont le même numéro de série dans la base de donnée, il faut conserver celui don't l'ID est le plus grand car cela signifie qu'il correspond à l'enregistrement le plus récent (donc au PC qui a remonté l'écran en doublon le plus récemment).

1°) Créer une table 'tempid' contenant un champ 'id' :

create table tempid (id INT)

2°) Modifier la table 'monitors' pour y ajouter une colonne 'asupprimer' :

ALTER TABLE monitors ADD asupprimer text

3°) insérer les ID des écrans correspondants aux doublons les plus anciens dans la table tempid :

insert into tempid select id FROM `monitors` where serial <> '' AND id NOT IN (
        select id from monitors WHERE ID IN (SELECT id FROM (SELECT max(id) id FROM monitors GROUP BY serial) AS temp) AND serial <> ''
)

4°) mettre à jour le champ 'asupprimer' de la table monitors si l'id de l'écran est dans la table tempid :

update monitors, tempid
set monitors.asupprimer = 'oui'
where monitors.id = tempid.id

5°) supprimer les lignes de la table monitors dont le champ 'asupprimer' est à 'oui' :

delete from monitors where asupprimer = 'oui'

6°) vider la table tempid:

delete from tempid

7°) supprimer les colonnes dateinv et asupprimer de la table monitors :

alter table monitors drop column asupprimer

Les étapes de 2 à 7 sont à automatiser via un cron mysql avant l'import dans GLPI et fini les doublons :)

Il y a surement plus simple / plus efficace mais au moins cela fonctionne.
by (290 points)
edited by
0 votes
Non ce n'est pas possible car OCS ne gère pas du tout le stock mort. Il y a des choses qui sont prévu dans ce sens pour de futur version (gestion de stock mort).
by (22k points)
0 votes
OK merci kapouik.

Je vais faire tourner une requête SQL en cron pour nettoyer les doublons du coup.

Je la posterai ici une fois terminée.
by (290 points)
 
Powered by Question2Answer
...